"use strict";
var __esbuild_esm_mermaid_nm;
(__esbuild_esm_mermaid_nm ||= {}).mermaid = (() => {
  var __create = Object.create;
  var __defProp = Object.defineProperty;
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  var __getOwnPropNames = Object.getOwnPropertyNames;
  var __getProtoOf = Object.getPrototypeOf;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __name = (target, value2) => __defProp(target, "name", { value: value2, configurable: true });
  var __esm = (fn3, res) => function __init() {
    return fn3 && (res = (0, fn3[__getOwnPropNames(fn3)[0]])(fn3 = 0)), res;
  };
  var __commonJS = (cb, mod) => function __require() {
    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
  };
  var __export = (target, all) => {
    for (var name in all)
      __defProp(target, name, { get: all[name], enumerable: true });
  };
  var __copyProps = (to, from2, except, desc) => {
    if (from2 && typeof from2 === "object" || typeof from2 === "function") {
      for (let key of __getOwnPropNames(from2))
        if (!__hasOwnProp.call(to, key) && key !== except)
          __defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
    }
    return to;
  };
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
    // If the importer is in node compatibility mode or this is not an ESM
    // file that has been converted to a CommonJS file using a Babel-
    // compatible transform (i.e. "__esModule" has not been set), then set
    // "default" to the CommonJS "module.exports" for node compatibility.
    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
    mod
  ));
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/defaults.js
  var defaultIconDimensions, defaultIconTransformations, defaultIconProps, defaultExtendedIconProps;
  var init_defaults = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/defaults.js"() {
      "use strict";
      defaultIconDimensions = Object.freeze({
        left: 0,
        top: 0,
        width: 16,
        height: 16
      });
      defaultIconTransformations = Object.freeze({
        rotate: 0,
        vFlip: false,
        hFlip: false
      });
      defaultIconProps = Object.freeze({
        ...defaultIconDimensions,
        ...defaultIconTransformations
      });
      defaultExtendedIconProps = Object.freeze({
        ...defaultIconProps,
        body: "",
        hidden: false
      });
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/customisations/defaults.js
  var defaultIconSizeCustomisations, defaultIconCustomisations;
  var init_defaults2 = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/customisations/defaults.js"() {
      "use strict";
      init_defaults();
      defaultIconSizeCustomisations = Object.freeze({
        width: null,
        height: null
      });
      defaultIconCustomisations = Object.freeze({
        ...defaultIconSizeCustomisations,
        ...defaultIconTransformations
      });
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/name.js
  var stringToIcon, validateIconName;
  var init_name = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/name.js"() {
      "use strict";
      stringToIcon = /* @__PURE__ */ __name((value2, validate, allowSimpleName, provider = "") => {
        const colonSeparated = value2.split(":");
        if (value2.slice(0, 1) === "@") {
          if (colonSeparated.length < 2 || colonSeparated.length > 3) return null;
          provider = colonSeparated.shift().slice(1);
        }
        if (colonSeparated.length > 3 || !colonSeparated.length) return null;
        if (colonSeparated.length > 1) {
          const name$1 = colonSeparated.pop();
          const prefix = colonSeparated.pop();
          const result = {
            provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,
            prefix,
            name: name$1
          };
          return validate && !validateIconName(result) ? null : result;
        }
        const name = colonSeparated[0];
        const dashSeparated = name.split("-");
        if (dashSeparated.length > 1) {
          const result = {
            provider,
            prefix: dashSeparated.shift(),
            name: dashSeparated.join("-")
          };
          return validate && !validateIconName(result) ? null : result;
        }
        if (allowSimpleName && provider === "") {
          const result = {
            provider,
            prefix: "",
            name
          };
          return validate && !validateIconName(result, allowSimpleName) ? null : result;
        }
        return null;
      }, "stringToIcon");
      validateIconName = /* @__PURE__ */ __name((icon2, allowSimpleName) => {
        if (!icon2) return false;
        return !!((allowSimpleName && icon2.prefix === "" || !!icon2.prefix) && !!icon2.name);
      }, "validateIconName");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/transformations.js
  function mergeIconTransformations(obj1, obj2) {
    const result = {};
    if (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;
    if (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;
    const rotate2 = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;
    if (rotate2) result.rotate = rotate2;
    return result;
  }
  var init_transformations = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/transformations.js"() {
      "use strict";
      __name(mergeIconTransformations, "mergeIconTransformations");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/merge.js
  function mergeIconData(parent4, child) {
    const result = mergeIconTransformations(parent4, child);
    for (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {
      if (key in parent4 && !(key in result)) result[key] = defaultIconTransformations[key];
    } else if (key in child) result[key] = child[key];
    else if (key in parent4) result[key] = parent4[key];
    return result;
  }
  var init_merge = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/merge.js"() {
      "use strict";
      init_defaults();
      init_transformations();
      __name(mergeIconData, "mergeIconData");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon-set/tree.js
  function getIconsTree(data6, names) {
    const icons = data6.icons;
    const aliases = data6.aliases || /* @__PURE__ */ Object.create(null);
    const resolved = /* @__PURE__ */ Object.create(null);
    function resolve2(name) {
      if (icons[name]) return resolved[name] = [];
      if (!(name in resolved)) {
        resolved[name] = null;
        const parent4 = aliases[name] && aliases[name].parent;
        const value2 = parent4 && resolve2(parent4);
        if (value2) resolved[name] = [parent4].concat(value2);
      }
      return resolved[name];
    }
    __name(resolve2, "resolve");
    (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve2);
    return resolved;
  }
  var init_tree = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon-set/tree.js"() {
      "use strict";
      __name(getIconsTree, "getIconsTree");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon-set/get-icon.js
  function internalGetIconData(data6, name, tree) {
    const icons = data6.icons;
    const aliases = data6.aliases || /* @__PURE__ */ Object.create(null);
    let currentProps = {};
    function parse7(name$1) {
      currentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);
    }
    __name(parse7, "parse");
    parse7(name);
    tree.forEach(parse7);
    return mergeIconData(data6, currentProps);
  }
  function getIconData(data6, name) {
    if (data6.icons[name]) return internalGetIconData(data6, name, []);
    const tree = getIconsTree(data6, [name])[name];
    return tree ? internalGetIconData(data6, name, tree) : null;
  }
  var init_get_icon = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon-set/get-icon.js"() {
      "use strict";
      init_merge();
      init_tree();
      __name(internalGetIconData, "internalGetIconData");
      __name(getIconData, "getIconData");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/size.js
  function calculateSize(size4, ratio, precision) {
    if (ratio === 1) return size4;
    precision = precision || 100;
    if (typeof size4 === "number") return Math.ceil(size4 * ratio * precision) / precision;
    if (typeof size4 !== "string") return size4;
    const oldParts = size4.split(unitsSplit);
    if (oldParts === null || !oldParts.length) return size4;
    const newParts = [];
    let code = oldParts.shift();
    let isNumber = unitsTest.test(code);
    while (true) {
      if (isNumber) {
        const num = parseFloat(code);
        if (isNaN(num)) newParts.push(code);
        else newParts.push(Math.ceil(num * ratio * precision) / precision);
      } else newParts.push(code);
      code = oldParts.shift();
      if (code === void 0) return newParts.join("");
      isNumber = !isNumber;
    }
  }
  var unitsSplit, unitsTest;
  var init_size = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/size.js"() {
      "use strict";
      unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;
      unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;
      __name(calculateSize, "calculateSize");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/defs.js
  function splitSVGDefs(content, tag = "defs") {
    let defs2 = "";
    const index = content.indexOf("<" + tag);
    while (index >= 0) {
      const start3 = content.indexOf(">", index);
      const end2 = content.indexOf("</" + tag);
      if (start3 === -1 || end2 === -1) break;
      const endEnd = content.indexOf(">", end2);
      if (endEnd === -1) break;
      defs2 += content.slice(start3 + 1, end2).trim();
      content = content.slice(0, index).trim() + content.slice(endEnd + 1);
    }
    return {
      defs: defs2,
      content
    };
  }
  function mergeDefsAndContent(defs2, content) {
    return defs2 ? "<defs>" + defs2 + "</defs>" + content : content;
  }
  function wrapSVGContent(body, start3, end2) {
    const split = splitSVGDefs(body);
    return mergeDefsAndContent(split.defs, start3 + split.content + end2);
  }
  var init_defs = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/defs.js"() {
      "use strict";
      __name(splitSVGDefs, "splitSVGDefs");
      __name(mergeDefsAndContent, "mergeDefsAndContent");
      __name(wrapSVGContent, "wrapSVGContent");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/build.js
  function iconToSVG(icon2, customisations) {
    const fullIcon = {
      ...defaultIconProps,
      ...icon2
    };
    const fullCustomisations = {
      ...defaultIconCustomisations,
      ...customisations
    };
    const box = {
      left: fullIcon.left,
      top: fullIcon.top,
      width: fullIcon.width,
      height: fullIcon.height
    };
    let body = fullIcon.body;
    [fullIcon, fullCustomisations].forEach((props) => {
      const transformations = [];
      const hFlip = props.hFlip;
      const vFlip = props.vFlip;
      let rotation = props.rotate;
      if (hFlip) if (vFlip) rotation += 2;
      else {
        transformations.push("translate(" + (box.width + box.left).toString() + " " + (0 - box.top).toString() + ")");
        transformations.push("scale(-1 1)");
        box.top = box.left = 0;
      }
      else if (vFlip) {
        transformations.push("translate(" + (0 - box.left).toString() + " " + (box.height + box.top).toString() + ")");
        transformations.push("scale(1 -1)");
        box.top = box.left = 0;
      }
      let tempValue;
      if (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;
      rotation = rotation % 4;
      switch (rotation) {
        case 1:
          tempValue = box.height / 2 + box.top;
          transformations.unshift("rotate(90 " + tempValue.toString() + " " + tempValue.toString() + ")");
          break;
        case 2:
          transformations.unshift("rotate(180 " + (box.width / 2 + box.left).toString() + " " + (box.height / 2 + box.top).toString() + ")");
          break;
        case 3:
          tempValue = box.width / 2 + box.left;
          transformations.unshift("rotate(-90 " + tempValue.toString() + " " + tempValue.toString() + ")");
          break;
      }
      if (rotation % 2 === 1) {
        if (box.left !== box.top) {
          tempValue = box.left;
          box.left = box.top;
          box.top = tempValue;
        }
        if (box.width !== box.height) {
          tempValue = box.width;
          box.width = box.height;
          box.height = tempValue;
        }
      }
      if (transformations.length) body = wrapSVGContent(body, '<g transform="' + transformations.join(" ") + '">', "</g>");
    });
    const customisationsWidth = fullCustomisations.width;
    const customisationsHeight = fullCustomisations.height;
    const boxWidth = box.width;
    const boxHeight = box.height;
    let width3;
    let height2;
    if (customisationsWidth === null) {
      height2 = customisationsHeight === null ? "1em" : customisationsHeight === "auto" ? boxHeight : customisationsHeight;
      width3 = calculateSize(height2, boxWidth / boxHeight);
    } else {
      width3 = customisationsWidth === "auto" ? boxWidth : customisationsWidth;
      height2 = customisationsHeight === null ? calculateSize(width3, boxHeight / boxWidth) : customisationsHeight === "auto" ? boxHeight : customisationsHeight;
    }
    const attributes = {};
    const setAttr = /* @__PURE__ */ __name((prop, value2) => {
      if (!isUnsetKeyword(value2)) attributes[prop] = value2.toString();
    }, "setAttr");
    setAttr("width", width3);
    setAttr("height", height2);
    const viewBox = [
      box.left,
      box.top,
      boxWidth,
      boxHeight
    ];
    attributes.viewBox = viewBox.join(" ");
    return {
      attributes,
      viewBox,
      body
    };
  }
  var isUnsetKeyword;
  var init_build = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/build.js"() {
      "use strict";
      init_defaults();
      init_defaults2();
      init_size();
      init_defs();
      isUnsetKeyword = /* @__PURE__ */ __name((value2) => value2 === "unset" || value2 === "undefined" || value2 === "none", "isUnsetKeyword");
      __name(iconToSVG, "iconToSVG");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/id.js
  function replaceIDs(body, prefix = randomPrefix) {
    const ids = [];
    let match3;
    while (match3 = regex.exec(body)) ids.push(match3[1]);
    if (!ids.length) return body;
    const suffix = "suffix" + (Math.random() * 16777216 | Date.now()).toString(16);
    ids.forEach((id41) => {
      const newID = typeof prefix === "function" ? prefix(id41) : prefix + (counter++).toString();
      const escapedID = id41.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
      body = body.replace(new RegExp('([#;"])(' + escapedID + ')([")]|\\.[a-z])', "g"), "$1" + newID + suffix + "$3");
    });
    body = body.replace(new RegExp(suffix, "g"), "");
    return body;
  }
  var regex, randomPrefix, counter;
  var init_id = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/id.js"() {
      "use strict";
      regex = /\sid="(\S+)"/g;
      randomPrefix = "IconifyId" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);
      counter = 0;
      __name(replaceIDs, "replaceIDs");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/html.js
  function iconToHTML(body, attributes) {
    let renderAttribsHTML = body.indexOf("xlink:") === -1 ? "" : ' xmlns:xlink="http://www.w3.org/1999/xlink"';
    for (const attr in attributes) renderAttribsHTML += " " + attr + '="' + attributes[attr] + '"';
    return '<svg xmlns="http://www.w3.org/2000/svg"' + renderAttribsHTML + ">" + body + "</svg>";
  }
  var init_html = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/html.js"() {
      "use strict";
      __name(iconToHTML, "iconToHTML");
    }
  });

  // ../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/index.js
  var init_lib = __esm({
    "../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/index.js"() {
      "use strict";
      init_name();
      init_get_icon();
      init_build();
      init_id();
      init_html();
    }
  });

  // src/assignWithDepth.ts
  var assignWithDepth, assignWithDepth_default;
  var init_assignWithDepth = __esm({
    "src/assignWithDepth.ts"() {
      "use strict";
      assignWithDepth = /* @__PURE__ */ __name((dst, src, { depth = 2 } = {}) => {
        const config3 = { depth };
        if (Array.isArray(src) && !Array.isArray(dst)) {
          src.forEach((s2) => assignWithDepth(dst, s2, config3));
          return dst;
        } else if (Array.isArray(src) && Array.isArray(dst)) {
          src.forEach((s2) => {
            if (!dst.includes(s2)) {
              dst.push(s2);
            }
          });
          return dst;
        }
        if (dst === void 0 || dst === null || depth <= 0) {
          if (dst !== void 0 && dst !== null && typeof dst === "object" && typeof src === "object") {
            return Object.assign(dst, src);
          } else {
            return src;
          }
        }
        if (src !== void 0 && src !== null && typeof dst === "object" && typeof src === "object") {
          const dstWithKeys = dst;
          Object.entries(src).forEach(([key, srcValue]) => {
            if (typeof srcValue === "object") {
              if (srcValue === null) {
                return;
              }
              if (!Object.hasOwn(dst, key)) {
                Object.defineProperty(dst, key, {
                  value: void 0,
                  writable: true,
                  enumerable: true,
                  configurable: true
                });
              }
              if (dstWithKeys[key] === void 0) {
                dstWithKeys[key] = Array.isArray(srcValue) ? [] : {};
              }
              if (typeof dstWithKeys[key] === "object") {
                dstWithKeys[key] = assignWithDepth(dstWithKeys[key], srcValue, { depth: depth - 1 });
              }
            } else if (typeof dstWithKeys[key] !== "object") {
              if (Object.hasOwn(dst, key)) {
                dstWithKeys[key] = srcValue;
              } else {
                Object.defineProperty(dst, key, {
                  value: srcValue,
                  writable: true,
                  enumerable: true,
                  configurable: true
                });
              }
            }
          });
        }
        return dst;
      }, "assignWithDepth");
      assignWithDepth_default = assignWithDepth;
    }
  });

  // ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/dayjs.min.js
  var require_dayjs_min = __commonJS({
    "../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/dayjs.min.js"(exports2, module2) {
      "use strict";
      !(function(t4, e3) {
        "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = e3() : "function" == typeof define && define.amd ? define(e3) : (t4 = "undefined" != typeof globalThis ? globalThis : t4 || self).dayjs = e3();
      })(exports2, (function() {
        "use strict";
        var t4 = 1e3, e3 = 6e4, n2 = 36e5, r2 = "millisecond", i2 = "second", s2 = "minute", u2 = "hour", a2 = "day", o2 = "week", c3 = "month", f2 = "quarter", h3 = "year", d3 = "date", l4 = "Invalid Date", $4 = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y6 = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M3 = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: /* @__PURE__ */ __name(function(t5) {
          var e4 = ["th", "st", "nd", "rd"], n3 = t5 % 100;
          return "[" + t5 + (e4[(n3 - 20) % 10] || e4[n3] || e4[0]) + "]";
        }, "ordinal") }, m3 = /* @__PURE__ */ __name(function(t5, e4, n3) {
          var r3 = String(t5);
          return !r3 || r3.length >= e4 ? t5 : "" + Array(e4 + 1 - r3.length).join(n3) + t5;
        }, "m"), v3 = { s: m3, z: /* @__PURE__ */ __name(function(t5) {
          var e4 = -t5.utcOffset(), n3 = Math.abs(e4), r3 = Math.floor(n3 / 60), i3 = n3 % 60;
          return (e4 <= 0 ? "+" : "-") + m3(r3, 2, "0") + ":" + m3(i3, 2, "0");
        }, "z"), m: /* @__PURE__ */ __name(function t5(e4, n3) {
          if (e4.date() < n3.date()) return -t5(n3, e4);
          var r3 = 12 * (n3.year() - e4.year()) + (n3.month() - e4.month()), i3 = e4.clone().add(r3, c3), s3 = n3 - i3 < 0, u3 = e4.clone().add(r3 + (s3 ? -1 : 1), c3);
          return +(-(r3 + (n3 - i3) / (s3 ? i3 - u3 : u3 - i3)) || 0);
        }, "t"), a: /* @__PURE__ */ __name(function(t5) {
          return t5 < 0 ? Math.ceil(t5) || 0 : Math.floor(t5);
        }, "a"), p: /* @__PURE__ */ __name(function(t5) {
          return { M: c3, y: h3, w: o2, d: a2, D: d3, h: u2, m: s2, s: i2, ms: r2, Q: f2 }[t5] || String(t5 || "").toLowerCase().replace(/s$/, "");
        }, "p"), u: /* @__PURE__ */ __name(function(t5) {
          return void 0 === t5;
        }, "u") }, g2 = "en", D4 = {};
        D4[g2] = M3;
        var p3 = "$isDayjsObject", S4 = /* @__PURE__ */ __name(function(t5) {
          return t5 instanceof _3 || !(!t5 || !t5[p3]);
        }, "S"), w4 = /* @__PURE__ */ __name(function t5(e4, n3, r3) {
          var i3;
          if (!e4) return g2;
          if ("string" == typeof e4) {
            var s3 = e4.toLowerCase();
            D4[s3] && (i3 = s3), n3 && (D4[s3] = n3, i3 = s3);
            var u3 = e4.split("-");
            if (!i3 && u3.length > 1) return t5(u3[0]);
          } else {
            var a3 = e4.name;
            D4[a3] = e4, i3 = a3;
          }
          return !r3 && i3 && (g2 = i3), i3 || !r3 && g2;
        }, "t"), O3 = /* @__PURE__ */ __name(function(t5, e4) {
          if (S4(t5)) return t5.clone();
          var n3 = "object" == typeof e4 ? e4 : {};
          return n3.date = t5, n3.args = arguments, new _3(n3);
        }, "O"), b3 = v3;
        b3.l = w4, b3.i = S4, b3.w = function(t5, e4) {
          return O3(t5, { locale: e4.$L, utc: e4.$u, x: e4.$x, $offset: e4.$offset });
        };
        var _3 = (function() {
          function M4(t5) {
            this.$L = w4(t5.locale, null, true), this.parse(t5), this.$x = this.$x || t5.x || {}, this[p3] = true;
          }
          __name(M4, "M");
          var m4 = M4.prototype;
          return m4.parse = function(t5) {
            this.$d = (function(t6) {
              var e4 = t6.date, n3 = t6.utc;
              if (null === e4) return /* @__PURE__ */ new Date(NaN);
              if (b3.u(e4)) return /* @__PURE__ */ new Date();
              if (e4 instanceof Date) return new Date(e4);
              if ("string" == typeof e4 && !/Z$/i.test(e4)) {
                var r3 = e4.match($4);
                if (r3) {
                  var i3 = r3[2] - 1 || 0, s3 = (r3[7] || "0").substring(0, 3);
                  return n3 ? new Date(Date.UTC(r3[1], i3, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3)) : new Date(r3[1], i3, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3);
                }
              }
              return new Date(e4);
            })(t5), this.init();
          }, m4.init = function() {
            var t5 = this.$d;
            this.$y = t5.getFullYear(), this.$M = t5.getMonth(), this.$D = t5.getDate(), this.$W = t5.getDay(), this.$H = t5.getHours(), this.$m = t5.getMinutes(), this.$s = t5.getSeconds(), this.$ms = t5.getMilliseconds();
          }, m4.$utils = function() {
            return b3;
          }, m4.isValid = function() {
            return !(this.$d.toString() === l4);
          }, m4.isSame = function(t5, e4) {
            var n3 = O3(t5);
            return this.startOf(e4) <= n3 && n3 <= this.endOf(e4);
          }, m4.isAfter = function(t5, e4) {
            return O3(t5) < this.startOf(e4);
          }, m4.isBefore = function(t5, e4) {
            return this.endOf(e4) < O3(t5);
          }, m4.$g = function(t5, e4, n3) {
            return b3.u(t5) ? this[e4] : this.set(n3, t5);
          }, m4.unix = function() {
            return Math.floor(this.valueOf() / 1e3);
          }, m4.valueOf = function() {
            return this.$d.getTime();
          }, m4.startOf = function(t5, e4) {
            var n3 = this, r3 = !!b3.u(e4) || e4, f3 = b3.p(t5), l5 = /* @__PURE__ */ __name(function(t6, e6) {
              var i3 = b3.w(n3.$u ? Date.UTC(n3.$y, e6, t6) : new Date(n3.$y, e6, t6), n3);
              return r3 ? i3 : i3.endOf(a2);
            }, "l"), $5 = /* @__PURE__ */ __name(function(t6, e6) {
              return b3.w(n3.toDate()[t6].apply(n3.toDate("s"), (r3 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e6)), n3);
            }, "$"), y7 = this.$W, M5 = this.$M, m5 = this.$D, v5 = "set" + (this.$u ? "UTC" : "");
            switch (f3) {
              case h3:
                return r3 ? l5(1, 0) : l5(31, 11);
              case c3:
                return r3 ? l5(1, M5) : l5(0, M5 + 1);
              case o2:
                var g3 = this.$locale().weekStart || 0, D5 = (y7 < g3 ? y7 + 7 : y7) - g3;
                return l5(r3 ? m5 - D5 : m5 + (6 - D5), M5);
              case a2:
              case d3:
                return $5(v5 + "Hours", 0);
              case u2:
                return $5(v5 + "Minutes", 1);
              case s2:
                return $5(v5 + "Seconds", 2);
              case i2:
                return $5(v5 + "Milliseconds", 3);
              default:
                return this.clone();
            }
          }, m4.endOf = function(t5) {
            return this.startOf(t5, false);
          }, m4.$set = function(t5, e4) {
            var n3, o3 = b3.p(t5), f3 = "set" + (this.$u ? "UTC" : ""), l5 = (n3 = {}, n3[a2] = f3 + "Date", n3[d3] = f3 + "Date", n3[c3] = f3 + "Month", n3[h3] = f3 + "FullYear", n3[u2] = f3 + "Hours", n3[s2] = f3 + "Minutes", n3[i2] = f3 + "Seconds", n3[r2] = f3 + "Milliseconds", n3)[o3], $5 = o3 === a2 ? this.$D + (e4 - this.$W) : e4;
            if (o3 === c3 || o3 === h3) {
              var y7 = this.clone().set(d3, 1);
              y7.$d[l5]($5), y7.init(), this.$d = y7.set(d3, Math.min(this.$D, y7.daysInMonth())).$d;
            } else l5 && this.$d[l5]($5);
            return this.init(), this;
          }, m4.set = function(t5, e4) {
            return this.clone().$set(t5, e4);
          }, m4.get = function(t5) {
            return this[b3.p(t5)]();
          }, m4.add = function(r3, f3) {
            var d4, l5 = this;
            r3 = Number(r3);
            var $5 = b3.p(f3), y7 = /* @__PURE__ */ __name(function(t5) {
              var e4 = O3(l5);
              return b3.w(e4.date(e4.date() + Math.round(t5 * r3)), l5);
            }, "y");
            if ($5 === c3) return this.set(c3, this.$M + r3);
            if ($5 === h3) return this.set(h3, this.$y + r3);
            if ($5 === a2) return y7(1);
            if ($5 === o2) return y7(7);
            var M5 = (d4 = {}, d4[s2] = e3, d4[u2] = n2, d4[i2] = t4, d4)[$5] || 1, m5 = this.$d.getTime() + r3 * M5;
            return b3.w(m5, this);
          }, m4.subtract = function(t5, e4) {
            return this.add(-1 * t5, e4);
          }, m4.format = function(t5) {
            var e4 = this, n3 = this.$locale();
            if (!this.isValid()) return n3.invalidDate || l4;
            var r3 = t5 || "YYYY-MM-DDTHH:mm:ssZ", i3 = b3.z(this), s3 = this.$H, u3 = this.$m, a3 = this.$M, o3 = n3.weekdays, c4 = n3.months, f3 = n3.meridiem, h4 = /* @__PURE__ */ __name(function(t6, n4, i4, s4) {
              return t6 && (t6[n4] || t6(e4, r3)) || i4[n4].slice(0, s4);
            }, "h"), d4 = /* @__PURE__ */ __name(function(t6) {
              return b3.s(s3 % 12 || 12, t6, "0");
            }, "d"), $5 = f3 || function(t6, e6, n4) {
              var r4 = t6 < 12 ? "AM" : "PM";
              return n4 ? r4.toLowerCase() : r4;
            };
            return r3.replace(y6, (function(t6, r4) {
              return r4 || (function(t7) {
                switch (t7) {
                  case "YY":
                    return String(e4.$y).slice(-2);
                  case "YYYY":
                    return b3.s(e4.$y, 4, "0");
                  case "M":
                    return a3 + 1;
                  case "MM":
                    return b3.s(a3 + 1, 2, "0");
                  case "MMM":
                    return h4(n3.monthsShort, a3, c4, 3);
                  case "MMMM":
                    return h4(c4, a3);
                  case "D":
                    return e4.$D;
                  case "DD":
                    return b3.s(e4.$D, 2, "0");
                  case "d":
                    return String(e4.$W);
                  case "dd":
                    return h4(n3.weekdaysMin, e4.$W, o3, 2);
                  case "ddd":
                    return h4(n3.weekdaysShort, e4.$W, o3, 3);
                  case "dddd":
                    return o3[e4.$W];
                  case "H":
                    return String(s3);
                  case "HH":
                    return b3.s(s3, 2, "0");
                  case "h":
                    return d4(1);
                  case "hh":
                    return d4(2);
                  case "a":
                    return $5(s3, u3, true);
                  case "A":
                    return $5(s3, u3, false);
                  case "m":
                    return String(u3);
                  case "mm":
                    return b3.s(u3, 2, "0");
                  case "s":
                    return String(e4.$s);
                  case "ss":
                    return b3.s(e4.$s, 2, "0");
                  case "SSS":
                    return b3.s(e4.$ms, 3, "0");
                  case "Z":
                    return i3;
                }
                return null;
              })(t6) || i3.replace(":", "");
            }));
          }, m4.utcOffset = function() {
            return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
          }, m4.diff = function(r3, d4, l5) {
            var $5, y7 = this, M5 = b3.p(d4), m5 = O3(r3), v5 = (m5.utcOffset() - this.utcOffset()) * e3, g3 = this - m5, D5 = /* @__PURE__ */ __name(function() {
              return b3.m(y7, m5);
            }, "D");
            switch (M5) {
              case h3:
                $5 = D5() / 12;
                break;
              case c3:
                $5 = D5();
                break;
              case f2:
                $5 = D5() / 3;
                break;
              case o2:
                $5 = (g3 - v5) / 6048e5;
                break;
              case a2:
                $5 = (g3 - v5) / 864e5;
                break;
              case u2:
                $5 = g3 / n2;
                break;
              case s2:
                $5 = g3 / e3;
                break;
              case i2:
                $5 = g3 / t4;
                break;
              default:
                $5 = g3;
            }
            return l5 ? $5 : b3.a($5);
          }, m4.daysInMonth = function() {
            return this.endOf(c3).$D;
          }, m4.$locale = function() {
            return D4[this.$L];
          }, m4.locale = function(t5, e4) {
            if (!t5) return this.$L;
            var n3 = this.clone(), r3 = w4(t5, e4, true);
            return r3 && (n3.$L = r3), n3;
          }, m4.clone = function() {
            return b3.w(this.$d, this);
          }, m4.toDate = function() {
            return new Date(this.valueOf());
          }, m4.toJSON = function() {
            return this.isValid() ? this.toISOString() : null;
          }, m4.toISOString = function() {
            return this.$d.toISOString();
          }, m4.toString = function() {
            return this.$d.toUTCString();
          }, M4;
        })(), k2 = _3.prototype;
        return O3.prototype = k2, [["$ms", r2], ["$s", i2], ["$m", s2], ["$H", u2], ["$W", a2], ["$M", c3], ["$y", h3], ["$D", d3]].forEach((function(t5) {
          k2[t5[1]] = function(e4) {
            return this.$g(e4, t5[0], t5[1]);
          };
        })), O3.extend = function(t5, e4) {
          return t5.$i || (t5(e4, _3, O3), t5.$i = true), O3;
        }, O3.locale = w4, O3.isDayjs = S4, O3.unix = function(t5) {
          return O3(1e3 * t5);
        }, O3.en = D4[g2], O3.Ls = D4, O3.p = {}, O3;
      }));
    }
  });

  // src/logger.ts
  var import_dayjs, LEVELS, log, setLogLevel, format;
  var init_logger = __esm({
    "src/logger.ts"() {
      "use strict";
      import_dayjs = __toESM(require_dayjs_min(), 1);
      LEVELS = {
        trace: 0,
        debug: 1,
        info: 2,
        warn: 3,
        error: 4,
        fatal: 5
      };
      log = {
        trace: /* @__PURE__ */ __name((..._args) => {
        }, "trace"),
        debug: /* @__PURE__ */ __name((..._args) => {
        }, "debug"),
        info: /* @__PURE__ */ __name((..._args) => {
        }, "info"),
        warn: /* @__PURE__ */ __name((..._args) => {
        }, "warn"),
        error: /* @__PURE__ */ __name((..._args) => {
        }, "error"),
        fatal: /* @__PURE__ */ __name((..._args) => {
        }, "fatal")
      };
      setLogLevel = /* @__PURE__ */ __name(function(level = "fatal") {
        let numericLevel = LEVELS.fatal;
        if (typeof level === "string") {
          if (level.toLowerCase() in LEVELS) {
            numericLevel = LEVELS[level];
          }
        } else if (typeof level === "number") {
          numericLevel = level;
        }
        log.trace = () => {
        };
        log.debug = () => {
        };
        log.info = () => {
        };
        log.warn = () => {
        };
        log.error = () => {
        };
        log.fatal = () => {
        };
        if (numericLevel <= LEVELS.fatal) {
          log.fatal = console.error ? console.error.bind(console, format("FATAL"), "color: orange") : console.log.bind(console, "\x1B[35m", format("FATAL"));
        }
        if (numericLevel <= LEVELS.error) {
          log.error = console.error ? console.error.bind(console, format("ERROR"), "color: orange") : console.log.bind(console, "\x1B[31m", format("ERROR"));
        }
        if (numericLevel <= LEVELS.warn) {
          log.warn = console.warn ? console.warn.bind(console, format("WARN"), "color: orange") : console.log.bind(console, `\x1B[33m`, format("WARN"));
        }
        if (numericLevel <= LEVELS.info) {
          log.info = console.info ? console.info.bind(console, format("INFO"), "color: lightblue") : console.log.bind(console, "\x1B[34m", format("INFO"));
        }
        if (numericLevel <= LEVELS.debug) {
          log.debug = console.debug ? console.debug.bind(console, format("DEBUG"), "color: lightgreen") : console.log.bind(console, "\x1B[32m", format("DEBUG"));
        }
        if (numericLevel <= LEVELS.trace) {
          log.trace = console.debug ? console.debug.bind(console, format("TRACE"), "color: lightgreen") : console.log.bind(console, "\x1B[32m", format("TRACE"));
        }
      }, "setLogLevel");
      format = /* @__PURE__ */ __name((level) => {
        const time4 = (0, import_dayjs.default)().format("ss.SSS");
        return `%c${time4} : ${level} : `;
      }, "format");
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/channel.js
  var Channel, channel_default;
  var init_channel = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/channel.js"() {
      "use strict";
      Channel = {
        /* CLAMP */
        min: {
          r: 0,
          g: 0,
          b: 0,
          s: 0,
          l: 0,
          a: 0
        },
        max: {
          r: 255,
          g: 255,
          b: 255,
          h: 360,
          s: 100,
          l: 100,
          a: 1
        },
        clamp: {
          r: /* @__PURE__ */ __name((r2) => r2 >= 255 ? 255 : r2 < 0 ? 0 : r2, "r"),
          g: /* @__PURE__ */ __name((g2) => g2 >= 255 ? 255 : g2 < 0 ? 0 : g2, "g"),
          b: /* @__PURE__ */ __name((b3) => b3 >= 255 ? 255 : b3 < 0 ? 0 : b3, "b"),
          h: /* @__PURE__ */ __name((h3) => h3 % 360, "h"),
          s: /* @__PURE__ */ __name((s2) => s2 >= 100 ? 100 : s2 < 0 ? 0 : s2, "s"),
          l: /* @__PURE__ */ __name((l4) => l4 >= 100 ? 100 : l4 < 0 ? 0 : l4, "l"),
          a: /* @__PURE__ */ __name((a2) => a2 >= 1 ? 1 : a2 < 0 ? 0 : a2, "a")
        },
        /* CONVERSION */
        //SOURCE: https://planetcalc.com/7779
        toLinear: /* @__PURE__ */ __name((c3) => {
          const n2 = c3 / 255;
          return c3 > 0.03928 ? Math.pow((n2 + 0.055) / 1.055, 2.4) : n2 / 12.92;
        }, "toLinear"),
        //SOURCE: https://gist.github.com/mjackson/5311256
        hue2rgb: /* @__PURE__ */ __name((p3, q3, t4) => {
          if (t4 < 0)
            t4 += 1;
          if (t4 > 1)
            t4 -= 1;
          if (t4 < 1 / 6)
            return p3 + (q3 - p3) * 6 * t4;
          if (t4 < 1 / 2)
            return q3;
          if (t4 < 2 / 3)
            return p3 + (q3 - p3) * (2 / 3 - t4) * 6;
          return p3;
        }, "hue2rgb"),
        hsl2rgb: /* @__PURE__ */ __name(({ h: h3, s: s2, l: l4 }, channel2) => {
          if (!s2)
            return l4 * 2.55;
          h3 /= 360;
          s2 /= 100;
          l4 /= 100;
          const q3 = l4 < 0.5 ? l4 * (1 + s2) : l4 + s2 - l4 * s2;
          const p3 = 2 * l4 - q3;
          switch (channel2) {
            case "r":
              return Channel.hue2rgb(p3, q3, h3 + 1 / 3) * 255;
            case "g":
              return Channel.hue2rgb(p3, q3, h3) * 255;
            case "b":
              return Channel.hue2rgb(p3, q3, h3 - 1 / 3) * 255;
          }
        }, "hsl2rgb"),
        rgb2hsl: /* @__PURE__ */ __name(({ r: r2, g: g2, b: b3 }, channel2) => {
          r2 /= 255;
          g2 /= 255;
          b3 /= 255;
          const max10 = Math.max(r2, g2, b3);
          const min10 = Math.min(r2, g2, b3);
          const l4 = (max10 + min10) / 2;
          if (channel2 === "l")
            return l4 * 100;
          if (max10 === min10)
            return 0;
          const d3 = max10 - min10;
          const s2 = l4 > 0.5 ? d3 / (2 - max10 - min10) : d3 / (max10 + min10);
          if (channel2 === "s")
            return s2 * 100;
          switch (max10) {
            case r2:
              return ((g2 - b3) / d3 + (g2 < b3 ? 6 : 0)) * 60;
            case g2:
              return ((b3 - r2) / d3 + 2) * 60;
            case b3:
              return ((r2 - g2) / d3 + 4) * 60;
            default:
              return -1;
          }
        }, "rgb2hsl")
      };
      channel_default = Channel;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/lang.js
  var Lang, lang_default;
  var init_lang = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/lang.js"() {
      "use strict";
      Lang = {
        /* API */
        clamp: /* @__PURE__ */ __name((number7, lower2, upper) => {
          if (lower2 > upper)
            return Math.min(lower2, Math.max(upper, number7));
          return Math.min(upper, Math.max(lower2, number7));
        }, "clamp"),
        round: /* @__PURE__ */ __name((number7) => {
          return Math.round(number7 * 1e10) / 1e10;
        }, "round")
      };
      lang_default = Lang;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/unit.js
  var Unit, unit_default;
  var init_unit = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/unit.js"() {
      "use strict";
      Unit = {
        /* API */
        dec2hex: /* @__PURE__ */ __name((dec) => {
          const hex2 = Math.round(dec).toString(16);
          return hex2.length > 1 ? hex2 : `0${hex2}`;
        }, "dec2hex")
      };
      unit_default = Unit;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/index.js
  var Utils, utils_default;
  var init_utils = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/index.js"() {
      "use strict";
      init_channel();
      init_lang();
      init_unit();
      Utils = {
        channel: channel_default,
        lang: lang_default,
        unit: unit_default
      };
      utils_default = Utils;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/constants.js
  var DEC2HEX, TYPE;
  var init_constants = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/constants.js"() {
      "use strict";
      init_utils();
      DEC2HEX = {};
      for (let i2 = 0; i2 <= 255; i2++)
        DEC2HEX[i2] = utils_default.unit.dec2hex(i2);
      TYPE = {
        ALL: 0,
        RGB: 1,
        HSL: 2
      };
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/type.js
  var Type, type_default;
  var init_type = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/type.js"() {
      "use strict";
      init_constants();
      Type = class {
        static {
          __name(this, "Type");
        }
        constructor() {
          this.type = TYPE.ALL;
        }
        /* API */
        get() {
          return this.type;
        }
        set(type3) {
          if (this.type && this.type !== type3)
            throw new Error("Cannot change both RGB and HSL channels at the same time");
          this.type = type3;
        }
        reset() {
          this.type = TYPE.ALL;
        }
        is(type3) {
          return this.type === type3;
        }
      };
      type_default = Type;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/index.js
  var Channels, channels_default;
  var init_channels = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/index.js"() {
      "use strict";
      init_utils();
      init_type();
      init_constants();
      Channels = class {
        static {
          __name(this, "Channels");
        }
        /* CONSTRUCTOR */
        constructor(data6, color2) {
          this.color = color2;
          this.changed = false;
          this.data = data6;
          this.type = new type_default();
        }
        /* API */
        set(data6, color2) {
          this.color = color2;
          this.changed = false;
          this.data = data6;
          this.type.type = TYPE.ALL;
          return this;
        }
        /* HELPERS */
        _ensureHSL() {
          const data6 = this.data;
          const { h: h3, s: s2, l: l4 } = data6;
          if (h3 === void 0)
            data6.h = utils_default.channel.rgb2hsl(data6, "h");
          if (s2 === void 0)
            data6.s = utils_default.channel.rgb2hsl(data6, "s");
          if (l4 === void 0)
            data6.l = utils_default.channel.rgb2hsl(data6, "l");
        }
        _ensureRGB() {
          const data6 = this.data;
          const { r: r2, g: g2, b: b3 } = data6;
          if (r2 === void 0)
            data6.r = utils_default.channel.hsl2rgb(data6, "r");
          if (g2 === void 0)
            data6.g = utils_default.channel.hsl2rgb(data6, "g");
          if (b3 === void 0)
            data6.b = utils_default.channel.hsl2rgb(data6, "b");
        }
        /* GETTERS */
        get r() {
          const data6 = this.data;
          const r2 = data6.r;
          if (!this.type.is(TYPE.HSL) && r2 !== void 0)
            return r2;
          this._ensureHSL();
          return utils_default.channel.hsl2rgb(data6, "r");
        }
        get g() {
          const data6 = this.data;
          const g2 = data6.g;
          if (!this.type.is(TYPE.HSL) && g2 !== void 0)
            return g2;
          this._ensureHSL();
          return utils_default.channel.hsl2rgb(data6, "g");
        }
        get b() {
          const data6 = this.data;
          const b3 = data6.b;
          if (!this.type.is(TYPE.HSL) && b3 !== void 0)
            return b3;
          this._ensureHSL();
          return utils_default.channel.hsl2rgb(data6, "b");
        }
        get h() {
          const data6 = this.data;
          const h3 = data6.h;
          if (!this.type.is(TYPE.RGB) && h3 !== void 0)
            return h3;
          this._ensureRGB();
          return utils_default.channel.rgb2hsl(data6, "h");
        }
        get s() {
          const data6 = this.data;
          const s2 = data6.s;
          if (!this.type.is(TYPE.RGB) && s2 !== void 0)
            return s2;
          this._ensureRGB();
          return utils_default.channel.rgb2hsl(data6, "s");
        }
        get l() {
          const data6 = this.data;
          const l4 = data6.l;
          if (!this.type.is(TYPE.RGB) && l4 !== void 0)
            return l4;
          this._ensureRGB();
          return utils_default.channel.rgb2hsl(data6, "l");
        }
        get a() {
          return this.data.a;
        }
        /* SETTERS */
        set r(r2) {
          this.type.set(TYPE.RGB);
          this.changed = true;
          this.data.r = r2;
        }
        set g(g2) {
          this.type.set(TYPE.RGB);
          this.changed = true;
          this.data.g = g2;
        }
        set b(b3) {
          this.type.set(TYPE.RGB);
          this.changed = true;
          this.data.b = b3;
        }
        set h(h3) {
          this.type.set(TYPE.HSL);
          this.changed = true;
          this.data.h = h3;
        }
        set s(s2) {
          this.type.set(TYPE.HSL);
          this.changed = true;
          this.data.s = s2;
        }
        set l(l4) {
          this.type.set(TYPE.HSL);
          this.changed = true;
          this.data.l = l4;
        }
        set a(a2) {
          this.changed = true;
          this.data.a = a2;
        }
      };
      channels_default = Channels;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/reusable.js
  var channels, reusable_default;
  var init_reusable = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/reusable.js"() {
      "use strict";
      init_channels();
      channels = new channels_default({ r: 0, g: 0, b: 0, a: 0 }, "transparent");
      reusable_default = channels;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/hex.js
  var Hex, hex_default;
  var init_hex = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/hex.js"() {
      "use strict";
      init_reusable();
      init_constants();
      Hex = {
        /* VARIABLES */
        re: /^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,
        /* API */
        parse: /* @__PURE__ */ __name((color2) => {
          if (color2.charCodeAt(0) !== 35)
            return;
          const match3 = color2.match(Hex.re);
          if (!match3)
            return;
          const hex2 = match3[1];
          const dec = parseInt(hex2, 16);
          const length2 = hex2.length;
          const hasAlpha = length2 % 4 === 0;
          const isFullLength = length2 > 4;
          const multiplier = isFullLength ? 1 : 17;
          const bits = isFullLength ? 8 : 4;
          const bitsOffset = hasAlpha ? 0 : -1;
          const mask = isFullLength ? 255 : 15;
          return reusable_default.set({
            r: (dec >> bits * (bitsOffset + 3) & mask) * multiplier,
            g: (dec >> bits * (bitsOffset + 2) & mask) * multiplier,
            b: (dec >> bits * (bitsOffset + 1) & mask) * multiplier,
            a: hasAlpha ? (dec & mask) * multiplier / 255 : 1
          }, color2);
        }, "parse"),
        stringify: /* @__PURE__ */ __name((channels2) => {
          const { r: r2, g: g2, b: b3, a: a2 } = channels2;
          if (a2 < 1) {
            return `#${DEC2HEX[Math.round(r2)]}${DEC2HEX[Math.round(g2)]}${DEC2HEX[Math.round(b3)]}${DEC2HEX[Math.round(a2 * 255)]}`;
          } else {
            return `#${DEC2HEX[Math.round(r2)]}${DEC2HEX[Math.round(g2)]}${DEC2HEX[Math.round(b3)]}`;
          }
        }, "stringify")
      };
      hex_default = Hex;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/hsl.js
  var HSL, hsl_default;
  var init_hsl = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/hsl.js"() {
      "use strict";
      init_utils();
      init_reusable();
      HSL = {
        /* VARIABLES */
        re: /^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,
        hueRe: /^(.+?)(deg|grad|rad|turn)$/i,
        /* HELPERS */
        _hue2deg: /* @__PURE__ */ __name((hue2) => {
          const match3 = hue2.match(HSL.hueRe);
          if (match3) {
            const [, number7, unit2] = match3;
            switch (unit2) {
              case "grad":
                return utils_default.channel.clamp.h(parseFloat(number7) * 0.9);
              case "rad":
                return utils_default.channel.clamp.h(parseFloat(number7) * 180 / Math.PI);
              case "turn":
                return utils_default.channel.clamp.h(parseFloat(number7) * 360);
            }
          }
          return utils_default.channel.clamp.h(parseFloat(hue2));
        }, "_hue2deg"),
        /* API */
        parse: /* @__PURE__ */ __name((color2) => {
          const charCode = color2.charCodeAt(0);
          if (charCode !== 104 && charCode !== 72)
            return;
          const match3 = color2.match(HSL.re);
          if (!match3)
            return;
          const [, h3, s2, l4, a2, isAlphaPercentage] = match3;
          return reusable_default.set({
            h: HSL._hue2deg(h3),
            s: utils_default.channel.clamp.s(parseFloat(s2)),
            l: utils_default.channel.clamp.l(parseFloat(l4)),
            a: a2 ? utils_default.channel.clamp.a(isAlphaPercentage ? parseFloat(a2) / 100 : parseFloat(a2)) : 1
          }, color2);
        }, "parse"),
        stringify: /* @__PURE__ */ __name((channels2) => {
          const { h: h3, s: s2, l: l4, a: a2 } = channels2;
          if (a2 < 1) {
            return `hsla(${utils_default.lang.round(h3)}, ${utils_default.lang.round(s2)}%, ${utils_default.lang.round(l4)}%, ${a2})`;
          } else {
            return `hsl(${utils_default.lang.round(h3)}, ${utils_default.lang.round(s2)}%, ${utils_default.lang.round(l4)}%)`;
          }
        }, "stringify")
      };
      hsl_default = HSL;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/keyword.js
  var Keyword, keyword_default;
  var init_keyword = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/keyword.js"() {
      "use strict";
      init_hex();
      Keyword = {
        /* VARIABLES */
        colors: {
          aliceblue: "#f0f8ff",
          antiquewhite: "#faebd7",
          aqua: "#00ffff",
          aquamarine: "#7fffd4",
          azure: "#f0ffff",
          beige: "#f5f5dc",
          bisque: "#ffe4c4",
          black: "#000000",
          blanchedalmond: "#ffebcd",
          blue: "#0000ff",
          blueviolet: "#8a2be2",
          brown: "#a52a2a",
          burlywood: "#deb887",
          cadetblue: "#5f9ea0",
          chartreuse: "#7fff00",
          chocolate: "#d2691e",
          coral: "#ff7f50",
          cornflowerblue: "#6495ed",
          cornsilk: "#fff8dc",
          crimson: "#dc143c",
          cyanaqua: "#00ffff",
          darkblue: "#00008b",
          darkcyan: "#008b8b",
          darkgoldenrod: "#b8860b",
          darkgray: "#a9a9a9",
          darkgreen: "#006400",
          darkgrey: "#a9a9a9",
          darkkhaki: "#bdb76b",
          darkmagenta: "#8b008b",
          darkolivegreen: "#556b2f",
          darkorange: "#ff8c00",
          darkorchid: "#9932cc",
          darkred: "#8b0000",
          darksalmon: "#e9967a",
          darkseagreen: "#8fbc8f",
          darkslateblue: "#483d8b",
          darkslategray: "#2f4f4f",
          darkslategrey: "#2f4f4f",
          darkturquoise: "#00ced1",
          darkviolet: "#9400d3",
          deeppink: "#ff1493",
          deepskyblue: "#00bfff",
          dimgray: "#696969",
          dimgrey: "#696969",
          dodgerblue: "#1e90ff",
          firebrick: "#b22222",
          floralwhite: "#fffaf0",
          forestgreen: "#228b22",
          fuchsia: "#ff00ff",
          gainsboro: "#dcdcdc",
          ghostwhite: "#f8f8ff",
          gold: "#ffd700",
          goldenrod: "#daa520",
          gray: "#808080",
          green: "#008000",
          greenyellow: "#adff2f",
          grey: "#808080",
          honeydew: "#f0fff0",
          hotpink: "#ff69b4",
          indianred: "#cd5c5c",
          indigo: "#4b0082",
          ivory: "#fffff0",
          khaki: "#f0e68c",
          lavender: "#e6e6fa",
          lavenderblush: "#fff0f5",
          lawngreen: "#7cfc00",
          lemonchiffon: "#fffacd",
          lightblue: "#add8e6",
          lightcoral: "#f08080",
          lightcyan: "#e0ffff",
          lightgoldenrodyellow: "#fafad2",
          lightgray: "#d3d3d3",
          lightgreen: "#90ee90",
          lightgrey: "#d3d3d3",
          lightpink: "#ffb6c1",
          lightsalmon: "#ffa07a",
          lightseagreen: "#20b2aa",
          lightskyblue: "#87cefa",
          lightslategray: "#778899",
          lightslategrey: "#778899",
          lightsteelblue: "#b0c4de",
          lightyellow: "#ffffe0",
          lime: "#00ff00",
          limegreen: "#32cd32",
          linen: "#faf0e6",
          magenta: "#ff00ff",
          maroon: "#800000",
          mediumaquamarine: "#66cdaa",
          mediumblue: "#0000cd",
          mediumorchid: "#ba55d3",
          mediumpurple: "#9370db",
          mediumseagreen: "#3cb371",
          mediumslateblue: "#7b68ee",
          mediumspringgreen: "#00fa9a",
          mediumturquoise: "#48d1cc",
          mediumvioletred: "#c71585",
          midnightblue: "#191970",
          mintcream: "#f5fffa",
          mistyrose: "#ffe4e1",
          moccasin: "#ffe4b5",
          navajowhite: "#ffdead",
          navy: "#000080",
          oldlace: "#fdf5e6",
          olive: "#808000",
          olivedrab: "#6b8e23",
          orange: "#ffa500",
          orangered: "#ff4500",
          orchid: "#da70d6",
          palegoldenrod: "#eee8aa",
          palegreen: "#98fb98",
          paleturquoise: "#afeeee",
          palevioletred: "#db7093",
          papayawhip: "#ffefd5",
          peachpuff: "#ffdab9",
          peru: "#cd853f",
          pink: "#ffc0cb",
          plum: "#dda0dd",
          powderblue: "#b0e0e6",
          purple: "#800080",
          rebeccapurple: "#663399",
          red: "#ff0000",
          rosybrown: "#bc8f8f",
          royalblue: "#4169e1",
          saddlebrown: "#8b4513",
          salmon: "#fa8072",
          sandybrown: "#f4a460",
          seagreen: "#2e8b57",
          seashell: "#fff5ee",
          sienna: "#a0522d",
          silver: "#c0c0c0",
          skyblue: "#87ceeb",
          slateblue: "#6a5acd",
          slategray: "#708090",
          slategrey: "#708090",
          snow: "#fffafa",
          springgreen: "#00ff7f",
          tan: "#d2b48c",
          teal: "#008080",
          thistle: "#d8bfd8",
          transparent: "#00000000",
          turquoise: "#40e0d0",
          violet: "#ee82ee",
          wheat: "#f5deb3",
          white: "#ffffff",
          whitesmoke: "#f5f5f5",
          yellow: "#ffff00",
          yellowgreen: "#9acd32"
        },
        /* API */
        parse: /* @__PURE__ */ __name((color2) => {
          color2 = color2.toLowerCase();
          const hex2 = Keyword.colors[color2];
          if (!hex2)
            return;
          return hex_default.parse(hex2);
        }, "parse"),
        stringify: /* @__PURE__ */ __name((channels2) => {
          const hex2 = hex_default.stringify(channels2);
          for (const name in Keyword.colors) {
            if (Keyword.colors[name] === hex2)
              return name;
          }
          return;
        }, "stringify")
      };
      keyword_default = Keyword;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/rgb.js
  var RGB, rgb_default;
  var init_rgb = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/rgb.js"() {
      "use strict";
      init_utils();
      init_reusable();
      RGB = {
        /* VARIABLES */
        re: /^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,
        /* API */
        parse: /* @__PURE__ */ __name((color2) => {
          const charCode = color2.charCodeAt(0);
          if (charCode !== 114 && charCode !== 82)
            return;
          const match3 = color2.match(RGB.re);
          if (!match3)
            return;
          const [, r2, isRedPercentage, g2, isGreenPercentage, b3, isBluePercentage, a2, isAlphaPercentage] = match3;
          return reusable_default.set({
            r: utils_default.channel.clamp.r(isRedPercentage ? parseFloat(r2) * 2.55 : parseFloat(r2)),
            g: utils_default.channel.clamp.g(isGreenPercentage ? parseFloat(g2) * 2.55 : parseFloat(g2)),
            b: utils_default.channel.clamp.b(isBluePercentage ? parseFloat(b3) * 2.55 : parseFloat(b3)),
            a: a2 ? utils_default.channel.clamp.a(isAlphaPercentage ? parseFloat(a2) / 100 : parseFloat(a2)) : 1
          }, color2);
        }, "parse"),
        stringify: /* @__PURE__ */ __name((channels2) => {
          const { r: r2, g: g2, b: b3, a: a2 } = channels2;
          if (a2 < 1) {
            return `rgba(${utils_default.lang.round(r2)}, ${utils_default.lang.round(g2)}, ${utils_default.lang.round(b3)}, ${utils_default.lang.round(a2)})`;
          } else {
            return `rgb(${utils_default.lang.round(r2)}, ${utils_default.lang.round(g2)}, ${utils_default.lang.round(b3)})`;
          }
        }, "stringify")
      };
      rgb_default = RGB;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/index.js
  var Color, color_default;
  var init_color = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/index.js"() {
      "use strict";
      init_hex();
      init_hsl();
      init_keyword();
      init_rgb();
      init_constants();
      Color = {
        /* VARIABLES */
        format: {
          keyword: keyword_default,
          hex: hex_default,
          rgb: rgb_default,
          rgba: rgb_default,
          hsl: hsl_default,
          hsla: hsl_default
        },
        /* API */
        parse: /* @__PURE__ */ __name((color2) => {
          if (typeof color2 !== "string")
            return color2;
          const channels2 = hex_default.parse(color2) || rgb_default.parse(color2) || hsl_default.parse(color2) || keyword_default.parse(color2);
          if (channels2)
            return channels2;
          throw new Error(`Unsupported color format: "${color2}"`);
        }, "parse"),
        stringify: /* @__PURE__ */ __name((channels2) => {
          if (!channels2.changed && channels2.color)
            return channels2.color;
          if (channels2.type.is(TYPE.HSL) || channels2.data.r === void 0) {
            return hsl_default.stringify(channels2);
          } else if (channels2.a < 1 || !Number.isInteger(channels2.r) || !Number.isInteger(channels2.g) || !Number.isInteger(channels2.b)) {
            return rgb_default.stringify(channels2);
          } else {
            return hex_default.stringify(channels2);
          }
        }, "stringify")
      };
      color_default = Color;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/change.js
  var change, change_default;
  var init_change = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/change.js"() {
      "use strict";
      init_utils();
      init_color();
      change = /* @__PURE__ */ __name((color2, channels2) => {
        const ch = color_default.parse(color2);
        for (const c3 in channels2) {
          ch[c3] = utils_default.channel.clamp[c3](channels2[c3]);
        }
        return color_default.stringify(ch);
      }, "change");
      change_default = change;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/rgba.js
  var rgba, rgba_default;
  var init_rgba = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/rgba.js"() {
      "use strict";
      init_utils();
      init_reusable();
      init_color();
      init_change();
      rgba = /* @__PURE__ */ __name((r2, g2, b3 = 0, a2 = 1) => {
        if (typeof r2 !== "number")
          return change_default(r2, { a: g2 });
        const channels2 = reusable_default.set({
          r: utils_default.channel.clamp.r(r2),
          g: utils_default.channel.clamp.g(g2),
          b: utils_default.channel.clamp.b(b3),
          a: utils_default.channel.clamp.a(a2)
        });
        return color_default.stringify(channels2);
      }, "rgba");
      rgba_default = rgba;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/channel.js
  var channel, channel_default2;
  var init_channel2 = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/channel.js"() {
      "use strict";
      init_utils();
      init_color();
      channel = /* @__PURE__ */ __name((color2, channel2) => {
        return utils_default.lang.round(color_default.parse(color2)[channel2]);
      }, "channel");
      channel_default2 = channel;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/luminance.js
  var luminance, luminance_default;
  var init_luminance = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/luminance.js"() {
      "use strict";
      init_utils();
      init_color();
      luminance = /* @__PURE__ */ __name((color2) => {
        const { r: r2, g: g2, b: b3 } = color_default.parse(color2);
        const luminance2 = 0.2126 * utils_default.channel.toLinear(r2) + 0.7152 * utils_default.channel.toLinear(g2) + 0.0722 * utils_default.channel.toLinear(b3);
        return utils_default.lang.round(luminance2);
      }, "luminance");
      luminance_default = luminance;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/is_light.js
  var isLight, is_light_default;
  var init_is_light = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/is_light.js"() {
      "use strict";
      init_luminance();
      isLight = /* @__PURE__ */ __name((color2) => {
        return luminance_default(color2) >= 0.5;
      }, "isLight");
      is_light_default = isLight;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/is_dark.js
  var isDark, is_dark_default;
  var init_is_dark = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/is_dark.js"() {
      "use strict";
      init_is_light();
      isDark = /* @__PURE__ */ __name((color2) => {
        return !is_light_default(color2);
      }, "isDark");
      is_dark_default = isDark;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/adjust_channel.js
  var adjustChannel, adjust_channel_default;
  var init_adjust_channel = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/adjust_channel.js"() {
      "use strict";
      init_utils();
      init_color();
      adjustChannel = /* @__PURE__ */ __name((color2, channel2, amount) => {
        const channels2 = color_default.parse(color2);
        const amountCurrent = channels2[channel2];
        const amountNext = utils_default.channel.clamp[channel2](amountCurrent + amount);
        if (amountCurrent !== amountNext)
          channels2[channel2] = amountNext;
        return color_default.stringify(channels2);
      }, "adjustChannel");
      adjust_channel_default = adjustChannel;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/lighten.js
  var lighten, lighten_default;
  var init_lighten = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/lighten.js"() {
      "use strict";
      init_adjust_channel();
      lighten = /* @__PURE__ */ __name((color2, amount) => {
        return adjust_channel_default(color2, "l", amount);
      }, "lighten");
      lighten_default = lighten;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/darken.js
  var darken, darken_default;
  var init_darken = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/darken.js"() {
      "use strict";
      init_adjust_channel();
      darken = /* @__PURE__ */ __name((color2, amount) => {
        return adjust_channel_default(color2, "l", -amount);
      }, "darken");
      darken_default = darken;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/transparentize.js
  var transparentize, transparentize_default;
  var init_transparentize = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/transparentize.js"() {
      "use strict";
      init_adjust_channel();
      transparentize = /* @__PURE__ */ __name((color2, amount) => {
        return adjust_channel_default(color2, "a", -amount);
      }, "transparentize");
      transparentize_default = transparentize;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/adjust.js
  var adjust, adjust_default;
  var init_adjust = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/adjust.js"() {
      "use strict";
      init_color();
      init_change();
      adjust = /* @__PURE__ */ __name((color2, channels2) => {
        const ch = color_default.parse(color2);
        const changes = {};
        for (const c3 in channels2) {
          if (!channels2[c3])
            continue;
          changes[c3] = ch[c3] + channels2[c3];
        }
        return change_default(color2, changes);
      }, "adjust");
      adjust_default = adjust;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/mix.js
  var mix, mix_default;
  var init_mix = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/mix.js"() {
      "use strict";
      init_color();
      init_rgba();
      mix = /* @__PURE__ */ __name((color1, color2, weight8 = 50) => {
        const { r: r1, g: g1, b: b1, a: a1 } = color_default.parse(color1);
        const { r: r2, g: g2, b: b22, a: a2 } = color_default.parse(color2);
        const weightScale = weight8 / 100;
        const weightNormalized = weightScale * 2 - 1;
        const alphaDelta = a1 - a2;
        const weight1combined = weightNormalized * alphaDelta === -1 ? weightNormalized : (weightNormalized + alphaDelta) / (1 + weightNormalized * alphaDelta);
        const weight1 = (weight1combined + 1) / 2;
        const weight22 = 1 - weight1;
        const r3 = r1 * weight1 + r2 * weight22;
        const g3 = g1 * weight1 + g2 * weight22;
        const b3 = b1 * weight1 + b22 * weight22;
        const a3 = a1 * weightScale + a2 * (1 - weightScale);
        return rgba_default(r3, g3, b3, a3);
      }, "mix");
      mix_default = mix;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/invert.js
  var invert, invert_default;
  var init_invert = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/invert.js"() {
      "use strict";
      init_color();
      init_mix();
      invert = /* @__PURE__ */ __name((color2, weight8 = 100) => {
        const inverse = color_default.parse(color2);
        inverse.r = 255 - inverse.r;
        inverse.g = 255 - inverse.g;
        inverse.b = 255 - inverse.b;
        return mix_default(inverse, color2, weight8);
      }, "invert");
      invert_default = invert;
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/index.js
  var init_methods = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/index.js"() {
      "use strict";
      init_rgba();
      init_channel2();
      init_is_dark();
      init_lighten();
      init_darken();
      init_transparentize();
      init_adjust();
      init_invert();
    }
  });

  // ../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/index.js
  var init_dist = __esm({
    "../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/index.js"() {
      "use strict";
      init_methods();
    }
  });

  // src/themes/erDiagram-oldHardcodedValues.ts
  var oldAttributeBackgroundColorOdd, oldAttributeBackgroundColorEven;
  var init_erDiagram_oldHardcodedValues = __esm({
    "src/themes/erDiagram-oldHardcodedValues.ts"() {
      "use strict";
      oldAttributeBackgroundColorOdd = "#ffffff";
      oldAttributeBackgroundColorEven = "#f2f2f2";
    }
  });

  // src/themes/theme-helpers.js
  var mkBorder;
  var init_theme_helpers = __esm({
    "src/themes/theme-helpers.js"() {
      "use strict";
      init_dist();
      mkBorder = /* @__PURE__ */ __name((col, darkMode) => darkMode ? adjust_default(col, { s: -40, l: 10 }) : adjust_default(col, { s: -40, l: -10 }), "mkBorder");
    }
  });

  // src/themes/theme-base.js
  var Theme, getThemeVariables;
  var init_theme_base = __esm({
    "src/themes/theme-base.js"() {
      "use strict";
      init_dist();
      init_erDiagram_oldHardcodedValues();
      init_theme_helpers();
      Theme = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#f4f4f4";
          this.primaryColor = "#fff4dd";
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "#333";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 5;
          this.strokeWidth = 1;
          this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
          this.fontSize = "16px";
          this.useGradient = true;
          this.dropShadow = "drop-shadow( 1px 2px 2px rgba(185,185,185,1))";
        }
        updateColors() {
          this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#333");
          this.secondaryColor = this.secondaryColor || adjust_default(this.primaryColor, { h: -120 });
          this.tertiaryColor = this.tertiaryColor || adjust_default(this.primaryColor, { h: 180, l: 5 });
          this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
          this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
          this.noteBkgColor = this.noteBkgColor || "#fff5ad";
          this.noteTextColor = this.noteTextColor || "#333";
          this.secondaryTextColor = this.secondaryTextColor || invert_default(this.secondaryColor);
          this.tertiaryTextColor = this.tertiaryTextColor || invert_default(this.tertiaryColor);
          this.lineColor = this.lineColor || invert_default(this.background);
          this.arrowheadColor = this.arrowheadColor || invert_default(this.background);
          this.textColor = this.textColor || this.primaryTextColor;
          this.border2 = this.border2 || this.tertiaryBorderColor;
          this.nodeBkg = this.nodeBkg || this.primaryColor;
          this.mainBkg = this.mainBkg || this.primaryColor;
          this.nodeBorder = this.nodeBorder || this.primaryBorderColor;
          this.clusterBkg = this.clusterBkg || this.tertiaryColor;
          this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
          this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
          this.titleColor = this.titleColor || this.tertiaryTextColor;
          this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
          this.actorBorder = this.actorBorder || this.primaryBorderColor;
          this.actorBkg = this.actorBkg || this.mainBkg;
          this.actorTextColor = this.actorTextColor || this.primaryTextColor;
          this.actorLineColor = this.actorLineColor || this.actorBorder;
          this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
          this.signalColor = this.signalColor || this.textColor;
          this.signalTextColor = this.signalTextColor || this.textColor;
          this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
          this.labelTextColor = this.labelTextColor || this.actorTextColor;
          this.loopTextColor = this.loopTextColor || this.actorTextColor;
          this.activationBorderColor = this.activationBorderColor || darken_default(this.secondaryColor, 10);
          this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
          this.sequenceNumberColor = this.sequenceNumberColor || invert_default(this.lineColor);
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;
          this.altSectionBkgColor = this.altSectionBkgColor || "white";
          this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;
          this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;
          this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
          this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
          this.taskBkgColor = this.taskBkgColor || this.primaryColor;
          this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;
          this.activeTaskBkgColor = this.activeTaskBkgColor || lighten_default(this.primaryColor, 23);
          this.gridColor = this.gridColor || "lightgrey";
          this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
          this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
          this.critBorderColor = this.critBorderColor || "#ff8888";
          this.critBkgColor = this.critBkgColor || "red";
          this.todayLineColor = this.todayLineColor || "red";
          this.vertLineColor = this.vertLineColor || "navy";
          this.taskTextColor = this.taskTextColor || this.textColor;
          this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
          this.taskTextLightColor = this.taskTextLightColor || this.textColor;
          this.taskTextColor = this.taskTextColor || this.primaryTextColor;
          this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
          this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
          this.noteFontWeight = this.noteFontWeight || "normal";
          this.fontWeight = this.fontWeight || "normal";
          this.personBorder = this.personBorder || this.primaryBorderColor;
          this.personBkg = this.personBkg || this.mainBkg;
          if (this.darkMode) {
            this.rowOdd = this.rowOdd || darken_default(this.mainBkg, 5) || "#ffffff";
            this.rowEven = this.rowEven || darken_default(this.mainBkg, 10);
          } else {
            this.rowOdd = this.rowOdd || lighten_default(this.mainBkg, 75) || "#ffffff";
            this.rowEven = this.rowEven || lighten_default(this.mainBkg, 5);
          }
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || this.tertiaryColor;
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.specialStateColor = this.lineColor;
          this.cScale0 = this.cScale0 || this.primaryColor;
          this.cScale1 = this.cScale1 || this.secondaryColor;
          this.cScale2 = this.cScale2 || this.tertiaryColor;
          this.cScale3 = this.cScale3 || adjust_default(this.primaryColor, { h: 30 });
          this.cScale4 = this.cScale4 || adjust_default(this.primaryColor, { h: 60 });
          this.cScale5 = this.cScale5 || adjust_default(this.primaryColor, { h: 90 });
          this.cScale6 = this.cScale6 || adjust_default(this.primaryColor, { h: 120 });
          this.cScale7 = this.cScale7 || adjust_default(this.primaryColor, { h: 150 });
          this.cScale8 = this.cScale8 || adjust_default(this.primaryColor, { h: 210, l: 150 });
          this.cScale9 = this.cScale9 || adjust_default(this.primaryColor, { h: 270 });
          this.cScale10 = this.cScale10 || adjust_default(this.primaryColor, { h: 300 });
          this.cScale11 = this.cScale11 || adjust_default(this.primaryColor, { h: 330 });
          if (this.darkMode) {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 75);
            }
          } else {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 25);
            }
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          const multiplier = this.darkMode ? -4 : -1;
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i2 * 3) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i2 * 3) });
          }
          this.classText = this.classText || this.textColor;
          this.fillType0 = this.fillType0 || this.primaryColor;
          this.fillType1 = this.fillType1 || this.secondaryColor;
          this.fillType2 = this.fillType2 || adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = this.fillType3 || adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = this.fillType4 || adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = this.fillType5 || adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = this.fillType6 || adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = this.fillType7 || adjust_default(this.secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || this.primaryColor;
          this.pie2 = this.pie2 || this.secondaryColor;
          this.pie3 = this.pie3 || this.tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(this.primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(this.secondaryColor, { l: -10 });
          this.pie6 = this.pie6 || adjust_default(this.tertiaryColor, { l: -10 });
          this.pie7 = this.pie7 || adjust_default(this.primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(this.primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(this.primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(this.primaryColor, { h: 60, l: -20 });
          this.pie11 = this.pie11 || adjust_default(this.primaryColor, { h: -60, l: -20 });
          this.pie12 = this.pie12 || adjust_default(this.primaryColor, { h: 120, l: -10 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.venn1 = this.venn1 ?? adjust_default(this.primaryColor, { l: -30 });
          this.venn2 = this.venn2 ?? adjust_default(this.secondaryColor, { l: -30 });
          this.venn3 = this.venn3 ?? adjust_default(this.tertiaryColor, { l: -30 });
          this.venn4 = this.venn4 ?? adjust_default(this.primaryColor, { h: 60, l: -30 });
          this.venn5 = this.venn5 ?? adjust_default(this.primaryColor, { h: -60, l: -30 });
          this.venn6 = this.venn6 ?? adjust_default(this.secondaryColor, { h: 60, l: -30 });
          this.venn7 = this.venn7 ?? adjust_default(this.primaryColor, { h: 120, l: -30 });
          this.venn8 = this.venn8 ?? adjust_default(this.secondaryColor, { h: 120, l: -30 });
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.cynefin = {
            domainFontSize: this.cynefin?.domainFontSize || 16,
            itemFontSize: this.cynefin?.itemFontSize || 12,
            boundaryColor: this.cynefin?.boundaryColor || this.lineColor,
            boundaryWidth: this.cynefin?.boundaryWidth || 2,
            cliffColor: this.cynefin?.cliffColor || "#8B0000",
            cliffWidth: this.cynefin?.cliffWidth || 4,
            arrowColor: this.cynefin?.arrowColor || this.lineColor,
            arrowWidth: this.cynefin?.arrowWidth || 2,
            complexBg: this.cynefin?.complexBg || "#E8F5E9",
            complicatedBg: this.cynefin?.complicatedBg || "#E3F2FD",
            chaoticBg: this.cynefin?.chaoticBg || "#FBE9E7",
            clearBg: this.cynefin?.clearBg || "#FFF8E1",
            confusionBg: this.cynefin?.confusionBg || "#F3E5F5",
            textColor: this.cynefin?.textColor || this.textColor,
            labelColor: this.cynefin?.labelColor || this.primaryTextColor
          };
          this.radar = {
            axisColor: this.radar?.axisColor || this.lineColor,
            axisStrokeWidth: this.radar?.axisStrokeWidth || 2,
            axisLabelFontSize: this.radar?.axisLabelFontSize || 12,
            curveOpacity: this.radar?.curveOpacity || 0.5,
            curveStrokeWidth: this.radar?.curveStrokeWidth || 2,
            graticuleColor: this.radar?.graticuleColor || "#DEDEDE",
            graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,
            graticuleOpacity: this.radar?.graticuleOpacity || 0.3,
            legendBoxSize: this.radar?.legendBoxSize || 12,
            legendFontSize: this.radar?.legendFontSize || 12
          };
          this.wardleyEvolutionColor = this.wardleyEvolutionColor || "#dc3545";
          this.wardley = {
            backgroundColor: this.wardley?.backgroundColor || this.background,
            axisColor: this.wardley?.axisColor || this.lineColor,
            axisTextColor: this.wardley?.axisTextColor || this.primaryTextColor,
            gridColor: this.wardley?.gridColor || this.gridColor,
            componentFill: this.wardley?.componentFill || this.background,
            componentStroke: this.wardley?.componentStroke || this.lineColor,
            componentLabelColor: this.wardley?.componentLabelColor || this.primaryTextColor,
            linkStroke: this.wardley?.linkStroke || this.lineColor,
            evolutionStroke: this.wardley?.evolutionStroke || this.wardleyEvolutionColor,
            annotationStroke: this.wardley?.annotationStroke || this.lineColor,
            annotationTextColor: this.wardley?.annotationTextColor || this.primaryTextColor,
            annotationFill: this.wardley?.annotationFill || this.background
          };
          this.archEdgeColor = this.archEdgeColor || "#777";
          this.archEdgeArrowColor = this.archEdgeArrowColor || "#777";
          this.archEdgeWidth = this.archEdgeWidth || "3";
          this.archGroupBorderColor = this.archGroupBorderColor || "#000";
          this.archGroupBorderWidth = this.archGroupBorderWidth || "2px";
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            dataLabelColor: this.xyChart?.dataLabelColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"
          };
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = this.git0 || this.primaryColor;
          this.git1 = this.git1 || this.secondaryColor;
          this.git2 = this.git2 || this.tertiaryColor;
          this.git3 = this.git3 || adjust_default(this.primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(this.primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(this.primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(this.primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(this.primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.emUiFill = this.emUiFill || "white";
          this.emUiStroke = this.emUiStroke || "#dbdada";
          this.emProcessorFill = this.emProcessorFill || "#edb3f6";
          this.emProcessorStroke = this.emProcessorStroke || "#b88cbf";
          this.emReadModelFill = this.emReadModelFill || "#d3f1a2";
          this.emReadModelStroke = this.emReadModelStroke || "#a3b732";
          this.emCommandFill = this.emCommandFill || "#bcd6fe";
          this.emCommandStroke = this.emCommandStroke || "#679ac3";
          this.emEventFill = this.emEventFill || "#ffb778";
          this.emEventStroke = this.emEventStroke || "#c19a0f";
          this.emSwimlaneBackgroundOdd = this.emSwimlaneBackgroundOdd || "rgb(250,250,250)";
          this.emSwimlaneBackgroundStroke = this.emSwimlaneBackgroundStroke || "rgb(240,240,240)";
          this.emArrowhead = this.emArrowhead || this.lineColor;
          this.emRelationStroke = this.emRelationStroke || this.lineColor;
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
          this.gradientStart = this.primaryBorderColor;
          this.gradientStop = this.secondaryBorderColor;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-dark.js
  var Theme2, getThemeVariables2;
  var init_theme_dark = __esm({
    "src/themes/theme-dark.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      Theme2 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#333";
          this.primaryColor = "#1f2020";
          this.secondaryColor = lighten_default(this.primaryColor, 16);
          this.tertiaryColor = adjust_default(this.primaryColor, { h: -160 });
          this.primaryBorderColor = invert_default(this.background);
          this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
          this.primaryTextColor = invert_default(this.primaryColor);
          this.secondaryTextColor = invert_default(this.secondaryColor);
          this.tertiaryTextColor = invert_default(this.tertiaryColor);
          this.lineColor = invert_default(this.background);
          this.textColor = invert_default(this.background);
          this.mainBkg = "#1f2020";
          this.secondBkg = "calculated";
          this.mainContrastColor = "lightgrey";
          this.darkTextColor = lighten_default(invert_default("#323D47"), 10);
          this.lineColor = "calculated";
          this.border1 = "#ccc";
          this.border2 = rgba_default(255, 255, 255, 0.25);
          this.arrowheadColor = "calculated";
          this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
          this.fontSize = "16px";
          this.labelBackground = "#181818";
          this.textColor = "#ccc";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 5;
          this.strokeWidth = 1;
          this.nodeBkg = "calculated";
          this.nodeBorder = "calculated";
          this.clusterBkg = "calculated";
          this.clusterBorder = "calculated";
          this.defaultLinkColor = "calculated";
          this.titleColor = "#F9FFFE";
          this.edgeLabelBackground = "calculated";
          this.actorBorder = "calculated";
          this.actorBkg = "calculated";
          this.actorTextColor = "calculated";
          this.actorLineColor = "calculated";
          this.signalColor = "calculated";
          this.signalTextColor = "calculated";
          this.labelBoxBkgColor = "calculated";
          this.labelBoxBorderColor = "calculated";
          this.labelTextColor = "calculated";
          this.loopTextColor = "calculated";
          this.noteBorderColor = "calculated";
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "calculated";
          this.activationBorderColor = "calculated";
          this.activationBkgColor = "calculated";
          this.sequenceNumberColor = "black";
          this.clusterBkg = "#302F3D";
          this.sectionBkgColor = darken_default("#EAE8D9", 30);
          this.altSectionBkgColor = "calculated";
          this.sectionBkgColor2 = "#EAE8D9";
          this.excludeBkgColor = darken_default(this.sectionBkgColor, 10);
          this.taskBorderColor = rgba_default(255, 255, 255, 70);
          this.taskBkgColor = "calculated";
          this.taskTextColor = "calculated";
          this.taskTextLightColor = "calculated";
          this.taskTextOutsideColor = "calculated";
          this.taskTextClickableColor = "#003163";
          this.activeTaskBorderColor = rgba_default(255, 255, 255, 50);
          this.activeTaskBkgColor = "#81B1DB";
          this.gridColor = "calculated";
          this.doneTaskBkgColor = "calculated";
          this.doneTaskBorderColor = "grey";
          this.critBorderColor = "#E83737";
          this.critBkgColor = "#E83737";
          this.taskTextDarkColor = "calculated";
          this.todayLineColor = "#DB5757";
          this.vertLineColor = "#00BFFF";
          this.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.rowOdd = this.rowOdd || lighten_default(this.mainBkg, 5) || "#ffffff";
          this.rowEven = this.rowEven || darken_default(this.mainBkg, 10);
          this.labelColor = "calculated";
          this.errorBkgColor = "#a44141";
          this.errorTextColor = "#ddd";
          this.useGradient = true;
          this.gradientStart = this.primaryBorderColor;
          this.gradientStop = this.secondaryBorderColor;
          this.dropShadow = "drop-shadow( 1px 2px 2px rgba(185,185,185,1))";
          this.noteFontWeight = this.noteFontWeight || "normal";
          this.fontWeight = this.fontWeight || "normal";
        }
        updateColors() {
          this.secondBkg = lighten_default(this.mainBkg, 16);
          this.lineColor = this.mainContrastColor;
          this.arrowheadColor = this.mainContrastColor;
          this.nodeBkg = this.mainBkg;
          this.nodeBorder = this.border1;
          this.clusterBkg = this.secondBkg;
          this.clusterBorder = this.border2;
          this.defaultLinkColor = this.lineColor;
          this.edgeLabelBackground = lighten_default(this.labelBackground, 25);
          this.actorBorder = this.border1;
          this.actorBkg = this.mainBkg;
          this.actorTextColor = this.mainContrastColor;
          this.actorLineColor = this.actorBorder;
          this.signalColor = this.mainContrastColor;
          this.signalTextColor = this.mainContrastColor;
          this.labelBoxBkgColor = this.actorBkg;
          this.labelBoxBorderColor = this.actorBorder;
          this.labelTextColor = this.mainContrastColor;
          this.loopTextColor = this.mainContrastColor;
          this.noteBorderColor = this.secondaryBorderColor;
          this.noteBkgColor = this.secondBkg;
          this.noteTextColor = this.secondaryTextColor;
          this.activationBorderColor = this.border1;
          this.activationBkgColor = this.secondBkg;
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.altSectionBkgColor = this.background;
          this.taskBkgColor = lighten_default(this.mainBkg, 23);
          this.taskTextColor = this.darkTextColor;
          this.taskTextLightColor = this.mainContrastColor;
          this.taskTextOutsideColor = this.taskTextLightColor;
          this.gridColor = this.mainContrastColor;
          this.doneTaskBkgColor = this.mainContrastColor;
          this.taskTextDarkColor = invert_default(this.doneTaskBkgColor);
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#555";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.primaryBorderColor;
          this.specialStateColor = "#f4f4f4";
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.fillType0 = this.primaryColor;
          this.fillType1 = this.secondaryColor;
          this.fillType2 = adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = adjust_default(this.secondaryColor, { h: 128 });
          this.cScale1 = this.cScale1 || "#0b0000";
          this.cScale2 = this.cScale2 || "#4d1037";
          this.cScale3 = this.cScale3 || "#3f5258";
          this.cScale4 = this.cScale4 || "#4f2f1b";
          this.cScale5 = this.cScale5 || "#6e0a0a";
          this.cScale6 = this.cScale6 || "#3b0048";
          this.cScale7 = this.cScale7 || "#995a01";
          this.cScale8 = this.cScale8 || "#154706";
          this.cScale9 = this.cScale9 || "#161722";
          this.cScale10 = this.cScale10 || "#00296f";
          this.cScale11 = this.cScale11 || "#01629c";
          this.cScale12 = this.cScale12 || "#010029";
          this.cScale0 = this.cScale0 || this.primaryColor;
          this.cScale1 = this.cScale1 || this.secondaryColor;
          this.cScale2 = this.cScale2 || this.tertiaryColor;
          this.cScale3 = this.cScale3 || adjust_default(this.primaryColor, { h: 30 });
          this.cScale4 = this.cScale4 || adjust_default(this.primaryColor, { h: 60 });
          this.cScale5 = this.cScale5 || adjust_default(this.primaryColor, { h: 90 });
          this.cScale6 = this.cScale6 || adjust_default(this.primaryColor, { h: 120 });
          this.cScale7 = this.cScale7 || adjust_default(this.primaryColor, { h: 150 });
          this.cScale8 = this.cScale8 || adjust_default(this.primaryColor, { h: 210 });
          this.cScale9 = this.cScale9 || adjust_default(this.primaryColor, { h: 270 });
          this.cScale10 = this.cScale10 || adjust_default(this.primaryColor, { h: 300 });
          this.cScale11 = this.cScale11 || adjust_default(this.primaryColor, { h: 330 });
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
          }
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 30, s: -30, l: -(-10 + i2 * 4) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 30, s: -30, l: -(-7 + i2 * 4) });
          }
          this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["pie" + i2] = this["cScale" + i2];
          }
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.mainContrastColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.mainContrastColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          for (let i2 = 0; i2 < 8; i2++) {
            this["venn" + (i2 + 1)] = this["venn" + (i2 + 1)] ?? lighten_default(this["cScale" + i2], 30);
          }
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.cynefin = {
            domainFontSize: this.cynefin?.domainFontSize || 16,
            itemFontSize: this.cynefin?.itemFontSize || 12,
            boundaryColor: this.cynefin?.boundaryColor || this.lineColor,
            boundaryWidth: this.cynefin?.boundaryWidth || 2,
            cliffColor: this.cynefin?.cliffColor || "#FF6B6B",
            cliffWidth: this.cynefin?.cliffWidth || 4,
            arrowColor: this.cynefin?.arrowColor || this.lineColor,
            arrowWidth: this.cynefin?.arrowWidth || 2,
            complexBg: this.cynefin?.complexBg || "#1B5E20",
            complicatedBg: this.cynefin?.complicatedBg || "#0D47A1",
            chaoticBg: this.cynefin?.chaoticBg || "#BF360C",
            clearBg: this.cynefin?.clearBg || "#F57F17",
            confusionBg: this.cynefin?.confusionBg || "#4A148C",
            textColor: this.cynefin?.textColor || this.textColor,
            labelColor: this.cynefin?.labelColor || this.primaryTextColor
          };
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            dataLabelColor: this.xyChart?.dataLabelColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"
          };
          this.packet = {
            startByteColor: this.primaryTextColor,
            endByteColor: this.primaryTextColor,
            labelColor: this.primaryTextColor,
            titleColor: this.primaryTextColor,
            blockStrokeColor: this.primaryTextColor,
            blockFillColor: this.background
          };
          this.radar = {
            axisColor: this.radar?.axisColor || this.lineColor,
            axisStrokeWidth: this.radar?.axisStrokeWidth || 2,
            axisLabelFontSize: this.radar?.axisLabelFontSize || 12,
            curveOpacity: this.radar?.curveOpacity || 0.5,
            curveStrokeWidth: this.radar?.curveStrokeWidth || 2,
            graticuleColor: this.radar?.graticuleColor || "#DEDEDE",
            graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,
            graticuleOpacity: this.radar?.graticuleOpacity || 0.3,
            legendBoxSize: this.radar?.legendBoxSize || 12,
            legendFontSize: this.radar?.legendFontSize || 12
          };
          this.wardleyEvolutionColor = this.wardleyEvolutionColor || "#ff6b6b";
          this.wardley = {
            backgroundColor: this.wardley?.backgroundColor || this.background,
            axisColor: this.wardley?.axisColor || this.lineColor,
            axisTextColor: this.wardley?.axisTextColor || this.primaryTextColor,
            gridColor: this.wardley?.gridColor || this.gridColor,
            componentFill: this.wardley?.componentFill || this.mainBkg,
            componentStroke: this.wardley?.componentStroke || this.lineColor,
            componentLabelColor: this.wardley?.componentLabelColor || this.primaryTextColor,
            linkStroke: this.wardley?.linkStroke || this.lineColor,
            evolutionStroke: this.wardley?.evolutionStroke || this.wardleyEvolutionColor,
            annotationStroke: this.wardley?.annotationStroke || this.lineColor,
            annotationTextColor: this.wardley?.annotationTextColor || this.primaryTextColor,
            annotationFill: this.wardley?.annotationFill || this.mainBkg
          };
          this.classText = this.primaryTextColor;
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = lighten_default(this.secondaryColor, 20);
          this.git1 = lighten_default(this.pie2 || this.secondaryColor, 20);
          this.git2 = lighten_default(this.pie3 || this.tertiaryColor, 20);
          this.git3 = lighten_default(this.pie4 || adjust_default(this.primaryColor, { h: -30 }), 20);
          this.git4 = lighten_default(this.pie5 || adjust_default(this.primaryColor, { h: -60 }), 20);
          this.git5 = lighten_default(this.pie6 || adjust_default(this.primaryColor, { h: -90 }), 10);
          this.git6 = lighten_default(this.pie7 || adjust_default(this.primaryColor, { h: 60 }), 10);
          this.git7 = lighten_default(this.pie8 || adjust_default(this.primaryColor, { h: 120 }), 20);
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.gitBranchLabel0 = this.gitBranchLabel0 || invert_default(this.labelTextColor);
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || invert_default(this.labelTextColor);
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.emUiFill = this.emUiFill || "#2d2d2d";
          this.emUiStroke = this.emUiStroke || "#555";
          this.emProcessorFill = this.emProcessorFill || lighten_default("#5a3d5c", 10);
          this.emProcessorStroke = this.emProcessorStroke || "#8a6d8c";
          this.emReadModelFill = this.emReadModelFill || lighten_default("#3d5a2d", 10);
          this.emReadModelStroke = this.emReadModelStroke || "#6d8c5c";
          this.emCommandFill = this.emCommandFill || lighten_default("#2d3d5a", 10);
          this.emCommandStroke = this.emCommandStroke || "#5c6d8c";
          this.emEventFill = this.emEventFill || lighten_default("#5a452d", 10);
          this.emEventStroke = this.emEventStroke || "#8c755c";
          this.emSwimlaneBackgroundOdd = this.emSwimlaneBackgroundOdd || lighten_default(this.background, 5);
          this.emSwimlaneBackgroundStroke = this.emSwimlaneBackgroundStroke || lighten_default(this.background, 12);
          this.emArrowhead = this.emArrowhead || this.lineColor;
          this.emRelationStroke = this.emRelationStroke || this.lineColor;
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || lighten_default(this.background, 12);
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || lighten_default(this.background, 2);
          this.nodeBorder = this.nodeBorder || "#999";
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables2 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme2();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-default.js
  var Theme3, getThemeVariables3;
  var init_theme_default = __esm({
    "src/themes/theme-default.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme3 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#f4f4f4";
          this.primaryColor = "#ECECFF";
          this.secondaryColor = adjust_default(this.primaryColor, { h: 120 });
          this.secondaryColor = "#ffffde";
          this.tertiaryColor = adjust_default(this.primaryColor, { h: -160 });
          this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
          this.primaryTextColor = invert_default(this.primaryColor);
          this.secondaryTextColor = invert_default(this.secondaryColor);
          this.tertiaryTextColor = invert_default(this.tertiaryColor);
          this.lineColor = invert_default(this.background);
          this.textColor = invert_default(this.background);
          this.background = "white";
          this.mainBkg = "#ECECFF";
          this.secondBkg = "#ffffde";
          this.lineColor = "#333333";
          this.border1 = "#9370DB";
          this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
          this.border2 = "#aaaa33";
          this.arrowheadColor = "#333333";
          this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
          this.fontSize = "16px";
          this.labelBackground = "rgba(232,232,232, 0.8)";
          this.textColor = "#333";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 5;
          this.strokeWidth = 1;
          this.nodeBkg = "calculated";
          this.nodeBorder = "calculated";
          this.clusterBkg = "calculated";
          this.clusterBorder = "calculated";
          this.defaultLinkColor = "calculated";
          this.titleColor = "calculated";
          this.edgeLabelBackground = "calculated";
          this.actorBorder = "calculated";
          this.actorBkg = "calculated";
          this.actorTextColor = "black";
          this.actorLineColor = "calculated";
          this.signalColor = "calculated";
          this.signalTextColor = "calculated";
          this.labelBoxBkgColor = "calculated";
          this.labelBoxBorderColor = "calculated";
          this.labelTextColor = "calculated";
          this.loopTextColor = "calculated";
          this.noteBorderColor = "calculated";
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "calculated";
          this.activationBorderColor = "#666";
          this.activationBkgColor = "#f4f4f4";
          this.sequenceNumberColor = "white";
          this.clusterBkg = "#FBFBFF";
          this.sectionBkgColor = "calculated";
          this.altSectionBkgColor = "calculated";
          this.sectionBkgColor2 = "calculated";
          this.excludeBkgColor = "#eeeeee";
          this.taskBorderColor = "calculated";
          this.taskBkgColor = "calculated";
          this.taskTextLightColor = "calculated";
          this.taskTextColor = this.taskTextLightColor;
          this.taskTextDarkColor = "calculated";
          this.taskTextOutsideColor = this.taskTextDarkColor;
          this.taskTextClickableColor = "calculated";
          this.activeTaskBorderColor = "calculated";
          this.activeTaskBkgColor = "calculated";
          this.gridColor = "calculated";
          this.doneTaskBkgColor = "calculated";
          this.doneTaskBorderColor = "calculated";
          this.critBorderColor = "calculated";
          this.critBkgColor = "calculated";
          this.todayLineColor = "calculated";
          this.vertLineColor = "calculated";
          this.sectionBkgColor = rgba_default(102, 102, 255, 0.49);
          this.altSectionBkgColor = "white";
          this.sectionBkgColor2 = "#fff400";
          this.taskBorderColor = "#534fbc";
          this.taskBkgColor = "#8a90dd";
          this.taskTextLightColor = "white";
          this.taskTextColor = "calculated";
          this.taskTextDarkColor = "black";
          this.taskTextOutsideColor = "calculated";
          this.taskTextClickableColor = "#003163";
          this.activeTaskBorderColor = "#534fbc";
          this.activeTaskBkgColor = "#bfc7ff";
          this.gridColor = "lightgrey";
          this.doneTaskBkgColor = "lightgrey";
          this.doneTaskBorderColor = "grey";
          this.critBorderColor = "#ff8888";
          this.critBkgColor = "red";
          this.todayLineColor = "red";
          this.vertLineColor = "navy";
          this.noteFontWeight = this.noteFontWeight || "normal";
          this.fontWeight = this.fontWeight || "normal";
          this.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.rowOdd = "calculated";
          this.rowEven = "calculated";
          this.labelColor = "black";
          this.errorBkgColor = "#552222";
          this.errorTextColor = "#552222";
          this.useGradient = false;
          this.gradientStart = this.primaryBorderColor;
          this.gradientStop = this.secondaryBorderColor;
          this.dropShadow = "drop-shadow(1px 2px 2px rgba(185, 185, 185, 1))";
          this.updateColors();
        }
        updateColors() {
          this.cScale0 = this.cScale0 || this.primaryColor;
          this.cScale1 = this.cScale1 || this.secondaryColor;
          this.cScale2 = this.cScale2 || this.tertiaryColor;
          this.cScale3 = this.cScale3 || adjust_default(this.primaryColor, { h: 30 });
          this.cScale4 = this.cScale4 || adjust_default(this.primaryColor, { h: 60 });
          this.cScale5 = this.cScale5 || adjust_default(this.primaryColor, { h: 90 });
          this.cScale6 = this.cScale6 || adjust_default(this.primaryColor, { h: 120 });
          this.cScale7 = this.cScale7 || adjust_default(this.primaryColor, { h: 150 });
          this.cScale8 = this.cScale8 || adjust_default(this.primaryColor, { h: 210 });
          this.cScale9 = this.cScale9 || adjust_default(this.primaryColor, { h: 270 });
          this.cScale10 = this.cScale10 || adjust_default(this.primaryColor, { h: 300 });
          this.cScale11 = this.cScale11 || adjust_default(this.primaryColor, { h: 330 });
          this["cScalePeer1"] = this["cScalePeer1"] || darken_default(this.secondaryColor, 45);
          this["cScalePeer2"] = this["cScalePeer2"] || darken_default(this.tertiaryColor, 40);
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScale" + i2] = darken_default(this["cScale" + i2], 10);
            this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 25);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || adjust_default(this["cScale" + i2], { h: 180 });
          }
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 30, l: -(5 + i2 * 5) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 30, l: -(7 + i2 * 5) });
          }
          this.scaleLabelColor = this.scaleLabelColor !== "calculated" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;
          if (this.labelTextColor !== "calculated") {
            this.cScaleLabel0 = this.cScaleLabel0 || invert_default(this.labelTextColor);
            this.cScaleLabel3 = this.cScaleLabel3 || invert_default(this.labelTextColor);
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.labelTextColor;
            }
          }
          this.nodeBkg = this.mainBkg;
          this.nodeBorder = this.border1;
          this.clusterBkg = this.secondBkg;
          this.clusterBorder = this.border2;
          this.defaultLinkColor = this.lineColor;
          this.titleColor = this.textColor;
          this.edgeLabelBackground = this.labelBackground;
          this.actorBorder = this.border1;
          this.actorBkg = this.mainBkg;
          this.labelBoxBkgColor = this.actorBkg;
          this.signalColor = this.textColor;
          this.signalTextColor = this.textColor;
          this.labelBoxBorderColor = this.actorBorder;
          this.labelTextColor = this.actorTextColor;
          this.loopTextColor = this.actorTextColor;
          this.noteBorderColor = this.border2;
          this.noteTextColor = this.actorTextColor;
          this.actorLineColor = this.actorBorder;
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.taskTextColor = this.taskTextLightColor;
          this.taskTextOutsideColor = this.taskTextDarkColor;
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.rowOdd = this.rowOdd || lighten_default(this.primaryColor, 75) || "#ffffff";
          this.rowEven = this.rowEven || lighten_default(this.primaryColor, 1);
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.specialStateColor = this.lineColor;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.classText = this.primaryTextColor;
          this.fillType0 = this.primaryColor;
          this.fillType1 = this.secondaryColor;
          this.fillType2 = adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = adjust_default(this.secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || this.primaryColor;
          this.pie2 = this.pie2 || this.secondaryColor;
          this.pie3 = this.pie3 || adjust_default(this.tertiaryColor, { l: -40 });
          this.pie4 = this.pie4 || adjust_default(this.primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(this.secondaryColor, { l: -30 });
          this.pie6 = this.pie6 || adjust_default(this.tertiaryColor, { l: -20 });
          this.pie7 = this.pie7 || adjust_default(this.primaryColor, { h: 60, l: -20 });
          this.pie8 = this.pie8 || adjust_default(this.primaryColor, { h: -60, l: -40 });
          this.pie9 = this.pie9 || adjust_default(this.primaryColor, { h: 120, l: -40 });
          this.pie10 = this.pie10 || adjust_default(this.primaryColor, { h: 60, l: -40 });
          this.pie11 = this.pie11 || adjust_default(this.primaryColor, { h: -90, l: -40 });
          this.pie12 = this.pie12 || adjust_default(this.primaryColor, { h: 120, l: -30 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.venn1 = this.venn1 ?? adjust_default(this.primaryColor, { l: -30 });
          this.venn2 = this.venn2 ?? adjust_default(this.secondaryColor, { l: -30 });
          this.venn3 = this.venn3 ?? adjust_default(this.tertiaryColor, { l: -40 });
          this.venn4 = this.venn4 ?? adjust_default(this.primaryColor, { h: 60, l: -30 });
          this.venn5 = this.venn5 ?? adjust_default(this.primaryColor, { h: -60, l: -30 });
          this.venn6 = this.venn6 ?? adjust_default(this.secondaryColor, { h: 60, l: -30 });
          this.venn7 = this.venn7 ?? adjust_default(this.primaryColor, { h: 120, l: -30 });
          this.venn8 = this.venn8 ?? adjust_default(this.secondaryColor, { h: 120, l: -30 });
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.cynefin = {
            domainFontSize: this.cynefin?.domainFontSize || 16,
            itemFontSize: this.cynefin?.itemFontSize || 12,
            boundaryColor: this.cynefin?.boundaryColor || this.lineColor,
            boundaryWidth: this.cynefin?.boundaryWidth || 2,
            cliffColor: this.cynefin?.cliffColor || "#8B0000",
            cliffWidth: this.cynefin?.cliffWidth || 4,
            arrowColor: this.cynefin?.arrowColor || this.lineColor,
            arrowWidth: this.cynefin?.arrowWidth || 2,
            complexBg: this.cynefin?.complexBg || "#E8F5E9",
            complicatedBg: this.cynefin?.complicatedBg || "#E3F2FD",
            chaoticBg: this.cynefin?.chaoticBg || "#FBE9E7",
            clearBg: this.cynefin?.clearBg || "#FFF8E1",
            confusionBg: this.cynefin?.confusionBg || "#F3E5F5",
            textColor: this.cynefin?.textColor || this.textColor,
            labelColor: this.cynefin?.labelColor || this.primaryTextColor
          };
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.radar = {
            axisColor: this.radar?.axisColor || this.lineColor,
            axisStrokeWidth: this.radar?.axisStrokeWidth || 2,
            axisLabelFontSize: this.radar?.axisLabelFontSize || 12,
            curveOpacity: this.radar?.curveOpacity || 0.5,
            curveStrokeWidth: this.radar?.curveStrokeWidth || 2,
            graticuleColor: this.radar?.graticuleColor || "#DEDEDE",
            graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,
            graticuleOpacity: this.radar?.graticuleOpacity || 0.3,
            legendBoxSize: this.radar?.legendBoxSize || 12,
            legendFontSize: this.radar?.legendFontSize || 12
          };
          this.wardleyEvolutionColor = this.wardleyEvolutionColor || "#dc3545";
          this.wardley = {
            backgroundColor: this.wardley?.backgroundColor || this.background,
            axisColor: this.wardley?.axisColor || this.lineColor,
            axisTextColor: this.wardley?.axisTextColor || this.primaryTextColor,
            gridColor: this.wardley?.gridColor || this.gridColor,
            componentFill: this.wardley?.componentFill || this.background,
            componentStroke: this.wardley?.componentStroke || this.lineColor,
            componentLabelColor: this.wardley?.componentLabelColor || this.primaryTextColor,
            linkStroke: this.wardley?.linkStroke || this.lineColor,
            evolutionStroke: this.wardley?.evolutionStroke || this.wardleyEvolutionColor,
            annotationStroke: this.wardley?.annotationStroke || this.lineColor,
            annotationTextColor: this.wardley?.annotationTextColor || this.primaryTextColor,
            annotationFill: this.wardley?.annotationFill || this.background
          };
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            dataLabelColor: this.xyChart?.dataLabelColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"
          };
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = this.git0 || this.primaryColor;
          this.git1 = this.git1 || this.secondaryColor;
          this.git2 = this.git2 || this.tertiaryColor;
          this.git3 = this.git3 || adjust_default(this.primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(this.primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(this.primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(this.primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(this.primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || darken_default(invert_default(this.git0), 25);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.gitBranchLabel0 = this.gitBranchLabel0 || invert_default(this.labelTextColor);
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || invert_default(this.labelTextColor);
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.emUiFill = this.emUiFill || "white";
          this.emUiStroke = this.emUiStroke || "#dbdada";
          this.emProcessorFill = this.emProcessorFill || "#edb3f6";
          this.emProcessorStroke = this.emProcessorStroke || "#b88cbf";
          this.emReadModelFill = this.emReadModelFill || "#d3f1a2";
          this.emReadModelStroke = this.emReadModelStroke || "#a3b732";
          this.emCommandFill = this.emCommandFill || "#bcd6fe";
          this.emCommandStroke = this.emCommandStroke || "#679ac3";
          this.emEventFill = this.emEventFill || "#ffb778";
          this.emEventStroke = this.emEventStroke || "#c19a0f";
          this.emSwimlaneBackgroundOdd = this.emSwimlaneBackgroundOdd || "rgb(250,250,250)";
          this.emSwimlaneBackgroundStroke = this.emSwimlaneBackgroundStroke || "rgb(240,240,240)";
          this.emArrowhead = this.emArrowhead || this.lineColor;
          this.emRelationStroke = this.emRelationStroke || this.lineColor;
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          Object.keys(this).forEach((k2) => {
            if (this[k2] === "calculated") {
              this[k2] = void 0;
            }
          });
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables3 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme3();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-forest.js
  var Theme4, getThemeVariables4;
  var init_theme_forest = __esm({
    "src/themes/theme-forest.js"() {
      "use strict";
      init_dist();
      init_erDiagram_oldHardcodedValues();
      init_theme_helpers();
      Theme4 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#f4f4f4";
          this.primaryColor = "#cde498";
          this.secondaryColor = "#cdffb2";
          this.background = "white";
          this.mainBkg = "#cde498";
          this.secondBkg = "#cdffb2";
          this.lineColor = "green";
          this.border1 = "#13540c";
          this.border2 = "#6eaa49";
          this.arrowheadColor = "green";
          this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
          this.fontSize = "16px";
          this.tertiaryColor = lighten_default("#cde498", 10);
          this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
          this.primaryTextColor = invert_default(this.primaryColor);
          this.secondaryTextColor = invert_default(this.secondaryColor);
          this.tertiaryTextColor = invert_default(this.primaryColor);
          this.lineColor = invert_default(this.background);
          this.textColor = invert_default(this.background);
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 5;
          this.strokeWidth = 1;
          this.nodeBkg = "calculated";
          this.nodeBorder = "calculated";
          this.clusterBkg = "calculated";
          this.clusterBorder = "calculated";
          this.defaultLinkColor = "calculated";
          this.titleColor = "#333";
          this.edgeLabelBackground = "#e8e8e8";
          this.actorBorder = "calculated";
          this.actorBkg = "calculated";
          this.actorTextColor = "black";
          this.actorLineColor = "calculated";
          this.signalColor = "#333";
          this.signalTextColor = "#333";
          this.labelBoxBkgColor = "calculated";
          this.labelBoxBorderColor = "#326932";
          this.labelTextColor = "calculated";
          this.loopTextColor = "calculated";
          this.noteBorderColor = "calculated";
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "calculated";
          this.activationBorderColor = "#666";
          this.activationBkgColor = "#f4f4f4";
          this.sequenceNumberColor = "white";
          this.sectionBkgColor = "#6eaa49";
          this.altSectionBkgColor = "white";
          this.sectionBkgColor2 = "#6eaa49";
          this.excludeBkgColor = "#eeeeee";
          this.taskBorderColor = "calculated";
          this.taskBkgColor = "#487e3a";
          this.taskTextLightColor = "white";
          this.taskTextColor = "calculated";
          this.taskTextDarkColor = "black";
          this.taskTextOutsideColor = "calculated";
          this.taskTextClickableColor = "#003163";
          this.activeTaskBorderColor = "calculated";
          this.activeTaskBkgColor = "calculated";
          this.gridColor = "lightgrey";
          this.doneTaskBkgColor = "lightgrey";
          this.doneTaskBorderColor = "grey";
          this.critBorderColor = "#ff8888";
          this.critBkgColor = "red";
          this.todayLineColor = "red";
          this.vertLineColor = "#00BFFF";
          this.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.noteFontWeight = "normal";
          this.fontWeight = "normal";
          this.labelColor = "black";
          this.errorBkgColor = "#552222";
          this.errorTextColor = "#552222";
          this.useGradient = true;
          this.gradientStart = this.primaryBorderColor;
          this.gradientStop = this.secondaryBorderColor;
          this.dropShadow = "drop-shadow( 1px 2px 2px rgba(185,185,185,0.5))";
        }
        updateColors() {
          this.actorBorder = darken_default(this.mainBkg, 20);
          this.actorBkg = this.mainBkg;
          this.labelBoxBkgColor = this.actorBkg;
          this.labelTextColor = this.actorTextColor;
          this.loopTextColor = this.actorTextColor;
          this.noteBorderColor = this.border2;
          this.noteTextColor = this.actorTextColor;
          this.actorLineColor = this.actorBorder;
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.cScale0 = this.cScale0 || this.primaryColor;
          this.cScale1 = this.cScale1 || this.secondaryColor;
          this.cScale2 = this.cScale2 || this.tertiaryColor;
          this.cScale3 = this.cScale3 || adjust_default(this.primaryColor, { h: 30 });
          this.cScale4 = this.cScale4 || adjust_default(this.primaryColor, { h: 60 });
          this.cScale5 = this.cScale5 || adjust_default(this.primaryColor, { h: 90 });
          this.cScale6 = this.cScale6 || adjust_default(this.primaryColor, { h: 120 });
          this.cScale7 = this.cScale7 || adjust_default(this.primaryColor, { h: 150 });
          this.cScale8 = this.cScale8 || adjust_default(this.primaryColor, { h: 210 });
          this.cScale9 = this.cScale9 || adjust_default(this.primaryColor, { h: 270 });
          this.cScale10 = this.cScale10 || adjust_default(this.primaryColor, { h: 300 });
          this.cScale11 = this.cScale11 || adjust_default(this.primaryColor, { h: 330 });
          this["cScalePeer1"] = this["cScalePeer1"] || darken_default(this.secondaryColor, 45);
          this["cScalePeer2"] = this["cScalePeer2"] || darken_default(this.tertiaryColor, 40);
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScale" + i2] = darken_default(this["cScale" + i2], 10);
            this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 25);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || adjust_default(this["cScale" + i2], { h: 180 });
          }
          this.scaleLabelColor = this.scaleLabelColor !== "calculated" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 30, s: -30, l: -(5 + i2 * 5) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 30, s: -30, l: -(8 + i2 * 5) });
          }
          this.nodeBkg = this.mainBkg;
          this.nodeBorder = this.border1;
          this.clusterBkg = this.secondBkg;
          this.clusterBorder = this.border2;
          this.defaultLinkColor = this.lineColor;
          this.taskBorderColor = this.border1;
          this.taskTextColor = this.taskTextLightColor;
          this.taskTextOutsideColor = this.taskTextDarkColor;
          this.activeTaskBorderColor = this.taskBorderColor;
          this.activeTaskBkgColor = this.mainBkg;
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.rowOdd = this.rowOdd || lighten_default(this.mainBkg, 75) || "#ffffff";
          this.rowEven = this.rowEven || lighten_default(this.mainBkg, 20);
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.primaryBorderColor;
          this.specialStateColor = this.lineColor;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.classText = this.primaryTextColor;
          this.fillType0 = this.primaryColor;
          this.fillType1 = this.secondaryColor;
          this.fillType2 = adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = adjust_default(this.secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || this.primaryColor;
          this.pie2 = this.pie2 || this.secondaryColor;
          this.pie3 = this.pie3 || this.tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(this.primaryColor, { l: -30 });
          this.pie5 = this.pie5 || adjust_default(this.secondaryColor, { l: -30 });
          this.pie6 = this.pie6 || adjust_default(this.tertiaryColor, { h: 40, l: -40 });
          this.pie7 = this.pie7 || adjust_default(this.primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(this.primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(this.primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(this.primaryColor, { h: 60, l: -50 });
          this.pie11 = this.pie11 || adjust_default(this.primaryColor, { h: -60, l: -50 });
          this.pie12 = this.pie12 || adjust_default(this.primaryColor, { h: 120, l: -50 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.venn1 = this.venn1 ?? adjust_default(this.primaryColor, { l: -30 });
          this.venn2 = this.venn2 ?? adjust_default(this.secondaryColor, { l: -30 });
          this.venn3 = this.venn3 ?? adjust_default(this.tertiaryColor, { l: -30 });
          this.venn4 = this.venn4 ?? adjust_default(this.primaryColor, { h: 60, l: -30 });
          this.venn5 = this.venn5 ?? adjust_default(this.primaryColor, { h: -60, l: -30 });
          this.venn6 = this.venn6 ?? adjust_default(this.secondaryColor, { h: 60, l: -30 });
          this.venn7 = this.venn7 ?? adjust_default(this.primaryColor, { h: 120, l: -30 });
          this.venn8 = this.venn8 ?? adjust_default(this.secondaryColor, { h: 120, l: -30 });
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.cynefin = {
            domainFontSize: this.cynefin?.domainFontSize || 16,
            itemFontSize: this.cynefin?.itemFontSize || 12,
            boundaryColor: this.cynefin?.boundaryColor || this.lineColor,
            boundaryWidth: this.cynefin?.boundaryWidth || 2,
            cliffColor: this.cynefin?.cliffColor || "#8B4513",
            cliffWidth: this.cynefin?.cliffWidth || 4,
            arrowColor: this.cynefin?.arrowColor || this.lineColor,
            arrowWidth: this.cynefin?.arrowWidth || 2,
            complexBg: this.cynefin?.complexBg || "#C8E6C9",
            complicatedBg: this.cynefin?.complicatedBg || "#DCEDC8",
            chaoticBg: this.cynefin?.chaoticBg || "#FFE0B2",
            clearBg: this.cynefin?.clearBg || "#FFF9C4",
            confusionBg: this.cynefin?.confusionBg || "#D7CCC8",
            textColor: this.cynefin?.textColor || this.textColor,
            labelColor: this.cynefin?.labelColor || this.primaryTextColor
          };
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.packet = {
            startByteColor: this.primaryTextColor,
            endByteColor: this.primaryTextColor,
            labelColor: this.primaryTextColor,
            titleColor: this.primaryTextColor,
            blockStrokeColor: this.primaryTextColor,
            blockFillColor: this.mainBkg
          };
          this.radar = {
            axisColor: this.radar?.axisColor || this.lineColor,
            axisStrokeWidth: this.radar?.axisStrokeWidth || 2,
            axisLabelFontSize: this.radar?.axisLabelFontSize || 12,
            curveOpacity: this.radar?.curveOpacity || 0.5,
            curveStrokeWidth: this.radar?.curveStrokeWidth || 2,
            graticuleColor: this.radar?.graticuleColor || "#DEDEDE",
            graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,
            graticuleOpacity: this.radar?.graticuleOpacity || 0.3,
            legendBoxSize: this.radar?.legendBoxSize || 12,
            legendFontSize: this.radar?.legendFontSize || 12
          };
          this.wardleyEvolutionColor = this.wardleyEvolutionColor || "#dc3545";
          this.wardley = {
            backgroundColor: this.wardley?.backgroundColor || this.background,
            axisColor: this.wardley?.axisColor || this.lineColor,
            axisTextColor: this.wardley?.axisTextColor || this.primaryTextColor,
            gridColor: this.wardley?.gridColor || this.gridColor,
            componentFill: this.wardley?.componentFill || this.background,
            componentStroke: this.wardley?.componentStroke || this.lineColor,
            componentLabelColor: this.wardley?.componentLabelColor || this.primaryTextColor,
            linkStroke: this.wardley?.linkStroke || this.lineColor,
            evolutionStroke: this.wardley?.evolutionStroke || this.wardleyEvolutionColor,
            annotationStroke: this.wardley?.annotationStroke || this.lineColor,
            annotationTextColor: this.wardley?.annotationTextColor || this.primaryTextColor,
            annotationFill: this.wardley?.annotationFill || this.background
          };
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            dataLabelColor: this.xyChart?.dataLabelColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"
          };
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = this.git0 || this.primaryColor;
          this.git1 = this.git1 || this.secondaryColor;
          this.git2 = this.git2 || this.tertiaryColor;
          this.git3 = this.git3 || adjust_default(this.primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(this.primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(this.primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(this.primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(this.primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.gitBranchLabel0 = this.gitBranchLabel0 || invert_default(this.labelTextColor);
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || invert_default(this.labelTextColor);
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.emUiFill = this.emUiFill || "white";
          this.emUiStroke = this.emUiStroke || "#dbdada";
          this.emProcessorFill = this.emProcessorFill || "#edb3f6";
          this.emProcessorStroke = this.emProcessorStroke || "#b88cbf";
          this.emReadModelFill = this.emReadModelFill || "#d3f1a2";
          this.emReadModelStroke = this.emReadModelStroke || "#a3b732";
          this.emCommandFill = this.emCommandFill || "#bcd6fe";
          this.emCommandStroke = this.emCommandStroke || "#679ac3";
          this.emEventFill = this.emEventFill || "#ffb778";
          this.emEventStroke = this.emEventStroke || "#c19a0f";
          this.emSwimlaneBackgroundOdd = this.emSwimlaneBackgroundOdd || "rgb(250,250,250)";
          this.emSwimlaneBackgroundStroke = this.emSwimlaneBackgroundStroke || "rgb(240,240,240)";
          this.emArrowhead = this.emArrowhead || this.lineColor;
          this.emRelationStroke = this.emRelationStroke || this.lineColor;
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables4 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme4();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-neutral.js
  var Theme5, getThemeVariables5;
  var init_theme_neutral = __esm({
    "src/themes/theme-neutral.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme5 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.primaryColor = "#eee";
          this.contrast = "#707070";
          this.secondaryColor = lighten_default(this.contrast, 55);
          this.background = "#ffffff";
          this.tertiaryColor = adjust_default(this.primaryColor, { h: -160 });
          this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
          this.primaryTextColor = invert_default(this.primaryColor);
          this.secondaryTextColor = invert_default(this.secondaryColor);
          this.tertiaryTextColor = invert_default(this.tertiaryColor);
          this.lineColor = invert_default(this.background);
          this.textColor = invert_default(this.background);
          this.mainBkg = "#eee";
          this.secondBkg = "calculated";
          this.lineColor = "#666";
          this.border1 = "#999";
          this.border2 = "calculated";
          this.note = "#ffa";
          this.text = "#333";
          this.critical = "#d42";
          this.done = "#bbb";
          this.arrowheadColor = "#333333";
          this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
          this.fontSize = "16px";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 5;
          this.strokeWidth = 1;
          this.nodeBkg = "calculated";
          this.nodeBorder = "calculated";
          this.clusterBkg = "calculated";
          this.clusterBorder = "calculated";
          this.defaultLinkColor = "calculated";
          this.titleColor = "calculated";
          this.edgeLabelBackground = "white";
          this.actorBorder = "calculated";
          this.actorBkg = "calculated";
          this.actorTextColor = "calculated";
          this.actorLineColor = this.actorBorder;
          this.signalColor = "calculated";
          this.signalTextColor = "calculated";
          this.labelBoxBkgColor = "calculated";
          this.labelBoxBorderColor = "calculated";
          this.labelTextColor = "calculated";
          this.loopTextColor = "calculated";
          this.noteBorderColor = "calculated";
          this.noteBkgColor = "calculated";
          this.noteTextColor = "calculated";
          this.activationBorderColor = "#666";
          this.activationBkgColor = "#f4f4f4";
          this.sequenceNumberColor = "white";
          this.sectionBkgColor = "calculated";
          this.altSectionBkgColor = "white";
          this.sectionBkgColor2 = "calculated";
          this.excludeBkgColor = "#eeeeee";
          this.taskBorderColor = "calculated";
          this.taskBkgColor = "calculated";
          this.taskTextLightColor = "white";
          this.taskTextColor = "calculated";
          this.taskTextDarkColor = "calculated";
          this.taskTextOutsideColor = "calculated";
          this.taskTextClickableColor = "#003163";
          this.activeTaskBorderColor = "calculated";
          this.activeTaskBkgColor = "calculated";
          this.gridColor = "calculated";
          this.doneTaskBkgColor = "calculated";
          this.doneTaskBorderColor = "calculated";
          this.critBkgColor = "calculated";
          this.critBorderColor = "calculated";
          this.todayLineColor = "calculated";
          this.vertLineColor = "calculated";
          this.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.noteFontWeight = "normal";
          this.fontWeight = "normal";
          this.rowOdd = this.rowOdd || lighten_default(this.mainBkg, 75) || "#ffffff";
          this.rowEven = this.rowEven || "#f4f4f4";
          this.labelColor = "black";
          this.errorBkgColor = "#552222";
          this.errorTextColor = "#552222";
          this.useGradient = true;
          this.gradientStart = this.primaryBorderColor;
          this.gradientStop = this.secondaryBorderColor;
          this.dropShadow = "drop-shadow( 1px 2px 2px rgba(185,185,185,1))";
        }
        updateColors() {
          this.secondBkg = lighten_default(this.contrast, 55);
          this.border2 = this.contrast;
          this.actorBorder = lighten_default(this.border1, 23);
          this.actorBkg = this.mainBkg;
          this.actorTextColor = this.text;
          this.actorLineColor = this.actorBorder;
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.signalColor = this.text;
          this.signalTextColor = this.text;
          this.labelBoxBkgColor = this.actorBkg;
          this.labelBoxBorderColor = this.actorBorder;
          this.labelTextColor = this.text;
          this.loopTextColor = this.text;
          this.noteBorderColor = "#999";
          this.noteBkgColor = "#666";
          this.noteTextColor = "#fff";
          this.cScale0 = this.cScale0 || "#555";
          this.cScale1 = this.cScale1 || "#F4F4F4";
          this.cScale2 = this.cScale2 || "#555";
          this.cScale3 = this.cScale3 || "#BBB";
          this.cScale4 = this.cScale4 || "#777";
          this.cScale5 = this.cScale5 || "#999";
          this.cScale6 = this.cScale6 || "#DDD";
          this.cScale7 = this.cScale7 || "#FFF";
          this.cScale8 = this.cScale8 || "#DDD";
          this.cScale9 = this.cScale9 || "#BBB";
          this.cScale10 = this.cScale10 || "#999";
          this.cScale11 = this.cScale11 || "#777";
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.cScaleLabel0 = this.cScaleLabel0 || this.cScale1;
          this.cScaleLabel2 = this.cScaleLabel2 || this.cScale1;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { l: -(5 + i2 * 5) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { l: -(8 + i2 * 5) });
          }
          this.nodeBkg = this.mainBkg;
          this.nodeBorder = this.border1;
          this.clusterBkg = this.secondBkg;
          this.clusterBorder = this.border2;
          this.defaultLinkColor = this.lineColor;
          this.titleColor = this.text;
          this.sectionBkgColor = lighten_default(this.contrast, 30);
          this.sectionBkgColor2 = lighten_default(this.contrast, 30);
          this.taskBorderColor = darken_default(this.contrast, 10);
          this.taskBkgColor = this.contrast;
          this.taskTextColor = this.taskTextLightColor;
          this.taskTextDarkColor = this.text;
          this.taskTextOutsideColor = this.taskTextDarkColor;
          this.activeTaskBorderColor = this.taskBorderColor;
          this.activeTaskBkgColor = this.mainBkg;
          this.gridColor = lighten_default(this.border1, 30);
          this.doneTaskBkgColor = this.done;
          this.doneTaskBorderColor = this.lineColor;
          this.critBkgColor = this.critical;
          this.critBorderColor = darken_default(this.critBkgColor, 10);
          this.todayLineColor = this.critBkgColor;
          this.vertLineColor = this.critBkgColor;
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.transitionColor = this.transitionColor || "#000";
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f4f4f4";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.stateBorder = this.stateBorder || "#000";
          this.innerEndBackground = this.primaryBorderColor;
          this.specialStateColor = "#222";
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.classText = this.primaryTextColor;
          this.fillType0 = this.primaryColor;
          this.fillType1 = this.secondaryColor;
          this.fillType2 = adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = adjust_default(this.secondaryColor, { h: 128 });
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["pie" + i2] = this["cScale" + i2];
          }
          this.pie12 = this.pie0;
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          for (let i2 = 0; i2 < 8; i2++) {
            this["venn" + (i2 + 1)] = this["venn" + (i2 + 1)] ?? this["cScale" + i2];
          }
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.cynefin = {
            domainFontSize: this.cynefin?.domainFontSize || 16,
            itemFontSize: this.cynefin?.itemFontSize || 12,
            boundaryColor: this.cynefin?.boundaryColor || this.lineColor,
            boundaryWidth: this.cynefin?.boundaryWidth || 2,
            cliffColor: this.cynefin?.cliffColor || "#8B0000",
            cliffWidth: this.cynefin?.cliffWidth || 4,
            arrowColor: this.cynefin?.arrowColor || this.lineColor,
            arrowWidth: this.cynefin?.arrowWidth || 2,
            complexBg: this.cynefin?.complexBg || "#E8F5E9",
            complicatedBg: this.cynefin?.complicatedBg || "#E3F2FD",
            chaoticBg: this.cynefin?.chaoticBg || "#FBE9E7",
            clearBg: this.cynefin?.clearBg || "#FFF8E1",
            confusionBg: this.cynefin?.confusionBg || "#F3E5F5",
            textColor: this.cynefin?.textColor || this.textColor,
            labelColor: this.cynefin?.labelColor || this.primaryTextColor
          };
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            dataLabelColor: this.xyChart?.dataLabelColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"
          };
          this.radar = {
            axisColor: this.radar?.axisColor || this.lineColor,
            axisStrokeWidth: this.radar?.axisStrokeWidth || 2,
            axisLabelFontSize: this.radar?.axisLabelFontSize || 12,
            curveOpacity: this.radar?.curveOpacity || 0.5,
            curveStrokeWidth: this.radar?.curveStrokeWidth || 2,
            graticuleColor: this.radar?.graticuleColor || "#DEDEDE",
            graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,
            graticuleOpacity: this.radar?.graticuleOpacity || 0.3,
            legendBoxSize: this.radar?.legendBoxSize || 12,
            legendFontSize: this.radar?.legendFontSize || 12
          };
          this.wardleyEvolutionColor = this.wardleyEvolutionColor || "#dc3545";
          this.wardley = {
            backgroundColor: this.wardley?.backgroundColor || this.background,
            axisColor: this.wardley?.axisColor || this.lineColor,
            axisTextColor: this.wardley?.axisTextColor || this.primaryTextColor,
            gridColor: this.wardley?.gridColor || this.gridColor,
            componentFill: this.wardley?.componentFill || this.background,
            componentStroke: this.wardley?.componentStroke || this.lineColor,
            componentLabelColor: this.wardley?.componentLabelColor || this.primaryTextColor,
            linkStroke: this.wardley?.linkStroke || this.lineColor,
            evolutionStroke: this.wardley?.evolutionStroke || this.wardleyEvolutionColor,
            annotationStroke: this.wardley?.annotationStroke || this.lineColor,
            annotationTextColor: this.wardley?.annotationTextColor || this.primaryTextColor,
            annotationFill: this.wardley?.annotationFill || this.background
          };
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = darken_default(this.pie1, 25) || this.primaryColor;
          this.git1 = this.pie2 || this.secondaryColor;
          this.git2 = this.pie3 || this.tertiaryColor;
          this.git3 = this.pie4 || adjust_default(this.primaryColor, { h: -30 });
          this.git4 = this.pie5 || adjust_default(this.primaryColor, { h: -60 });
          this.git5 = this.pie6 || adjust_default(this.primaryColor, { h: -90 });
          this.git6 = this.pie7 || adjust_default(this.primaryColor, { h: 60 });
          this.git7 = this.pie8 || adjust_default(this.primaryColor, { h: 120 });
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || this.labelTextColor;
          this.gitBranchLabel0 = this.branchLabelColor;
          this.gitBranchLabel1 = "white";
          this.gitBranchLabel2 = this.branchLabelColor;
          this.gitBranchLabel3 = "white";
          this.gitBranchLabel4 = this.branchLabelColor;
          this.gitBranchLabel5 = this.branchLabelColor;
          this.gitBranchLabel6 = this.branchLabelColor;
          this.gitBranchLabel7 = this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.emUiFill = this.emUiFill || "white";
          this.emUiStroke = this.emUiStroke || "#dbdada";
          this.emProcessorFill = this.emProcessorFill || "#edb3f6";
          this.emProcessorStroke = this.emProcessorStroke || "#b88cbf";
          this.emReadModelFill = this.emReadModelFill || "#d3f1a2";
          this.emReadModelStroke = this.emReadModelStroke || "#a3b732";
          this.emCommandFill = this.emCommandFill || "#bcd6fe";
          this.emCommandStroke = this.emCommandStroke || "#679ac3";
          this.emEventFill = this.emEventFill || "#ffb778";
          this.emEventStroke = this.emEventStroke || "#c19a0f";
          this.emSwimlaneBackgroundOdd = this.emSwimlaneBackgroundOdd || "rgb(250,250,250)";
          this.emSwimlaneBackgroundStroke = this.emSwimlaneBackgroundStroke || "rgb(240,240,240)";
          this.emArrowhead = this.emArrowhead || this.lineColor;
          this.emRelationStroke = this.emRelationStroke || this.lineColor;
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables5 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme5();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-neo.js
  var Theme6, getThemeVariables6;
  var init_theme_neo = __esm({
    "src/themes/theme-neo.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme6 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#ffffff";
          this.primaryColor = "#cccccc";
          this.mainBkg = "#ffffff";
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "#333";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 3;
          this.strokeWidth = 2;
          this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
          this.fontFamily = "arial, sans-serif";
          this.fontSize = "14px";
          this.nodeBorder = "#000000";
          this.stateBorder = "#000000";
          this.useGradient = true;
          this.gradientStart = "#0042eb";
          this.gradientStop = "#eb0042";
          this.dropShadow = "drop-shadow( 0px 1px 2px rgba(0, 0, 0, 0.25));";
          this.tertiaryColor = "#ffffff";
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.noteFontWeight = "normal";
          this.fontWeight = "normal";
        }
        updateColors() {
          this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#333");
          this.secondaryColor = this.secondaryColor || adjust_default(this.primaryColor, { h: -120 });
          this.tertiaryColor = this.tertiaryColor || adjust_default(this.primaryColor, { h: 180, l: 5 });
          this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
          this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
          this.noteBkgColor = this.noteBkgColor || "#fff5ad";
          this.noteTextColor = this.noteTextColor || "#333";
          this.secondaryTextColor = this.secondaryTextColor || invert_default(this.secondaryColor);
          this.tertiaryTextColor = this.tertiaryTextColor || invert_default(this.tertiaryColor);
          this.lineColor = this.lineColor || invert_default(this.background);
          this.arrowheadColor = this.arrowheadColor || invert_default(this.background);
          this.textColor = this.textColor || this.primaryTextColor;
          this.border2 = this.border2 || this.tertiaryBorderColor;
          this.nodeBkg = this.nodeBkg || this.primaryColor;
          this.mainBkg = this.mainBkg || this.primaryColor;
          this.nodeBorder = this.nodeBorder || this.primaryBorderColor;
          this.clusterBkg = this.clusterBkg || this.tertiaryColor;
          this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
          this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
          this.titleColor = this.titleColor || this.tertiaryTextColor;
          this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
          this.actorBorder = this.actorBorder || this.primaryBorderColor;
          this.actorBkg = this.actorBkg || this.mainBkg;
          this.actorTextColor = this.actorTextColor || this.primaryTextColor;
          this.actorLineColor = this.actorLineColor || this.actorBorder;
          this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
          this.signalColor = this.signalColor || this.textColor;
          this.signalTextColor = this.signalTextColor || this.textColor;
          this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
          this.labelTextColor = this.labelTextColor || this.actorTextColor;
          this.loopTextColor = this.loopTextColor || this.actorTextColor;
          this.activationBorderColor = this.activationBorderColor || darken_default(this.secondaryColor, 10);
          this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
          this.sequenceNumberColor = this.sequenceNumberColor || invert_default(this.lineColor);
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          const primaryColor = "#ECECFE";
          const secondaryColor = "#E9E9F1";
          const tertiaryColor = adjust_default(primaryColor, { h: 180, l: 5 });
          this.sectionBkgColor = this.sectionBkgColor || tertiaryColor;
          this.altSectionBkgColor = this.altSectionBkgColor || "white";
          this.sectionBkgColor = this.sectionBkgColor || secondaryColor;
          this.sectionBkgColor2 = this.sectionBkgColor2 || primaryColor;
          this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
          this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
          this.taskBkgColor = this.taskBkgColor || primaryColor;
          this.activeTaskBorderColor = this.activeTaskBorderColor || primaryColor;
          this.activeTaskBkgColor = this.activeTaskBkgColor || lighten_default(primaryColor, 23);
          this.gridColor = this.gridColor || "lightgrey";
          this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
          this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
          this.critBorderColor = this.critBorderColor || "#ff8888";
          this.critBkgColor = this.critBkgColor || "red";
          this.todayLineColor = this.todayLineColor || "red";
          this.taskTextColor = this.taskTextColor || this.textColor;
          this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
          this.vertLineColor = this.vertLineColor || this.primaryBorderColor;
          this.taskTextLightColor = this.taskTextLightColor || this.textColor;
          this.taskTextColor = this.taskTextColor || this.primaryTextColor;
          this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
          this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.personBorder = this.personBorder || this.primaryBorderColor;
          this.personBkg = this.personBkg || this.mainBkg;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.specialStateColor = this.lineColor;
          this.cScale0 = this.cScale0 || primaryColor;
          this.cScale1 = this.cScale1 || secondaryColor;
          this.cScale2 = this.cScale2 || tertiaryColor;
          this.cScale3 = this.cScale3 || adjust_default(primaryColor, { h: 30 });
          this.cScale4 = this.cScale4 || adjust_default(primaryColor, { h: 60 });
          this.cScale5 = this.cScale5 || adjust_default(primaryColor, { h: 90 });
          this.cScale6 = this.cScale6 || adjust_default(primaryColor, { h: 120 });
          this.cScale7 = this.cScale7 || adjust_default(primaryColor, { h: 150 });
          this.cScale8 = this.cScale8 || adjust_default(primaryColor, { h: 210, l: 150 });
          this.cScale9 = this.cScale9 || adjust_default(primaryColor, { h: 270 });
          this.cScale10 = this.cScale10 || adjust_default(primaryColor, { h: 300 });
          this.cScale11 = this.cScale11 || adjust_default(primaryColor, { h: 330 });
          if (this.darkMode) {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 75);
            }
          } else {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 25);
            }
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          const multiplier = this.darkMode ? -4 : -1;
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i2 * 3) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i2 * 3) });
          }
          this.classText = this.classText || this.textColor;
          this.fillType0 = this.fillType0 || primaryColor;
          this.fillType1 = this.fillType1 || secondaryColor;
          this.fillType2 = this.fillType2 || adjust_default(primaryColor, { h: 64 });
          this.fillType3 = this.fillType3 || adjust_default(secondaryColor, { h: 64 });
          this.fillType4 = this.fillType4 || adjust_default(primaryColor, { h: -64 });
          this.fillType5 = this.fillType5 || adjust_default(secondaryColor, { h: -64 });
          this.fillType6 = this.fillType6 || adjust_default(primaryColor, { h: 128 });
          this.fillType7 = this.fillType7 || adjust_default(secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || primaryColor;
          this.pie2 = this.pie2 || secondaryColor;
          this.pie3 = this.pie3 || tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(secondaryColor, { l: -10 });
          this.pie6 = this.pie6 || adjust_default(tertiaryColor, { l: -10 });
          this.pie7 = this.pie7 || adjust_default(primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(primaryColor, { h: 60, l: -20 });
          this.pie11 = this.pie11 || adjust_default(primaryColor, { h: -60, l: -20 });
          this.pie12 = this.pie12 || adjust_default(primaryColor, { h: 120, l: -10 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.quadrant1Fill = this.quadrant1Fill || primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"
          };
          this.requirementBackground = this.requirementBackground || primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = this.git0 || primaryColor;
          this.git1 = this.git1 || secondaryColor;
          this.git2 = this.git2 || tertiaryColor;
          this.git3 = this.git3 || adjust_default(primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables6 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme6();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-neo-dark.js
  var Theme7, getThemeVariables7;
  var init_theme_neo_dark = __esm({
    "src/themes/theme-neo-dark.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme7 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#333";
          this.primaryColor = "#1f2020";
          this.secondaryColor = lighten_default(this.primaryColor, 16);
          this.tertiaryColor = adjust_default(this.primaryColor, { h: -160 });
          this.primaryBorderColor = invert_default(this.background);
          this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
          this.primaryTextColor = invert_default(this.primaryColor);
          this.secondaryTextColor = invert_default(this.secondaryColor);
          this.tertiaryTextColor = invert_default(this.tertiaryColor);
          this.mainBkg = "#2a2020";
          this.secondBkg = "calculated";
          this.mainContrastColor = "lightgrey";
          this.darkTextColor = lighten_default(invert_default("#323D47"), 10);
          this.border1 = "#ccc";
          this.border2 = rgba_default(255, 255, 255, 0.25);
          this.arrowheadColor = invert_default(this.background);
          this.fontFamily = "arial, sans-serif";
          this.fontSize = "14px";
          this.labelBackground = "#181818";
          this.textColor = "#ccc";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 3;
          this.strokeWidth = 1;
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "#333";
          this.THEME_COLOR_LIMIT = 12;
          this.fontFamily = "arial, sans-serif";
          this.fontSize = "14px";
          this.useGradient = true;
          this.gradientStart = "#0042eb";
          this.gradientStop = "#eb0042";
          this.dropShadow = "drop-shadow( 1px 2px 2px rgba(185,185,185,0.2))";
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.noteFontWeight = "normal";
          this.fontWeight = "normal";
        }
        updateColors() {
          this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#333");
          this.secondaryColor = this.secondaryColor || adjust_default(this.primaryColor, { h: -120 });
          this.tertiaryColor = this.tertiaryColor || adjust_default(this.primaryColor, { h: 180, l: 5 });
          this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
          this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
          this.noteBkgColor = this.noteBkgColor || "#fff5ad";
          this.noteTextColor = this.noteTextColor || "#333";
          this.secondaryTextColor = this.secondaryTextColor || invert_default(this.secondaryColor);
          this.tertiaryTextColor = this.tertiaryTextColor || invert_default(this.tertiaryColor);
          this.lineColor = this.lineColor || invert_default(this.background);
          this.arrowheadColor = this.arrowheadColor || invert_default(this.background);
          this.textColor = this.textColor || this.primaryTextColor;
          this.border2 = this.border2 || this.tertiaryBorderColor;
          this.nodeBkg = this.nodeBkg || this.primaryColor;
          this.mainBkg = this.mainBkg || this.primaryColor;
          this.nodeBorder = this.nodeBorder || this.border1;
          this.clusterBkg = this.clusterBkg || this.tertiaryColor;
          this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
          this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
          this.titleColor = this.titleColor || this.tertiaryTextColor;
          this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
          this.actorBorder = this.actorBorder || this.primaryBorderColor;
          this.actorBkg = this.actorBkg || this.mainBkg;
          this.actorTextColor = this.actorTextColor || this.primaryTextColor;
          this.actorLineColor = this.actorLineColor || this.actorBorder;
          this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
          this.signalColor = this.signalColor || this.textColor;
          this.signalTextColor = this.signalTextColor || this.textColor;
          this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
          this.labelTextColor = this.labelTextColor || this.actorTextColor;
          this.loopTextColor = this.loopTextColor || this.actorTextColor;
          this.activationBorderColor = this.activationBorderColor || darken_default(this.secondaryColor, 10);
          this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
          this.sequenceNumberColor = this.sequenceNumberColor || invert_default(this.lineColor);
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;
          this.altSectionBkgColor = this.altSectionBkgColor || "white";
          this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;
          this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;
          this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
          this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
          this.taskBkgColor = this.taskBkgColor || this.primaryColor;
          this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;
          this.activeTaskBkgColor = this.activeTaskBkgColor || lighten_default(this.primaryColor, 23);
          this.gridColor = this.gridColor || "lightgrey";
          this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
          this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
          this.critBorderColor = this.critBorderColor || "#ff8888";
          this.critBkgColor = this.critBkgColor || "red";
          this.todayLineColor = this.todayLineColor || "red";
          this.vertLineColor = this.vertLineColor || this.primaryBorderColor;
          this.taskTextColor = this.taskTextColor || this.textColor;
          this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
          this.taskTextLightColor = this.taskTextLightColor || this.textColor;
          this.taskTextColor = this.taskTextColor || this.primaryTextColor;
          this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
          this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.personBorder = this.personBorder || this.primaryBorderColor;
          this.personBkg = this.personBkg || this.mainBkg;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.specialStateColor = this.lineColor;
          this.cScale0 = this.cScale0 || this.primaryColor;
          this.cScale1 = this.cScale1 || this.secondaryColor;
          this.cScale2 = this.cScale2 || this.tertiaryColor;
          this.cScale3 = this.cScale3 || adjust_default(this.primaryColor, { h: 30 });
          this.cScale4 = this.cScale4 || adjust_default(this.primaryColor, { h: 60 });
          this.cScale5 = this.cScale5 || adjust_default(this.primaryColor, { h: 90 });
          this.cScale6 = this.cScale6 || adjust_default(this.primaryColor, { h: 120 });
          this.cScale7 = this.cScale7 || adjust_default(this.primaryColor, { h: 150 });
          this.cScale8 = this.cScale8 || adjust_default(this.primaryColor, { h: 210, l: 150 });
          this.cScale9 = this.cScale9 || adjust_default(this.primaryColor, { h: 270 });
          this.cScale10 = this.cScale10 || adjust_default(this.primaryColor, { h: 300 });
          this.cScale11 = this.cScale11 || adjust_default(this.primaryColor, { h: 330 });
          if (this.darkMode) {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 75);
            }
          } else {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 25);
            }
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          const multiplier = this.darkMode ? -4 : -1;
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i2 * 3) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i2 * 3) });
          }
          this.classText = this.classText || this.textColor;
          this.fillType0 = this.fillType0 || this.primaryColor;
          this.fillType1 = this.fillType1 || this.secondaryColor;
          this.fillType2 = this.fillType2 || adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = this.fillType3 || adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = this.fillType4 || adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = this.fillType5 || adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = this.fillType6 || adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = this.fillType7 || adjust_default(this.secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || this.primaryColor;
          this.pie2 = this.pie2 || this.secondaryColor;
          this.pie3 = this.pie3 || this.tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(this.primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(this.secondaryColor, { l: -10 });
          this.pie6 = this.pie6 || adjust_default(this.tertiaryColor, { l: -10 });
          this.pie7 = this.pie7 || adjust_default(this.primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(this.primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(this.primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(this.primaryColor, { h: 60, l: -20 });
          this.pie11 = this.pie11 || adjust_default(this.primaryColor, { h: -60, l: -20 });
          this.pie12 = this.pie12 || adjust_default(this.primaryColor, { h: 120, l: -10 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"
          };
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = this.git0 || "#0b0000";
          this.git1 = this.git1 || "#4d1037";
          this.git2 = this.git2 || "#3f5258";
          this.git3 = this.git3 || "#4f2f1b";
          this.git4 = this.git4 || "#6e0a0a";
          this.git5 = this.git5 || "#3b0048";
          this.git6 = this.git6 || "#995a01";
          this.git7 = this.git7 || "#154706";
          this.gitDarkMode = true;
          if (this.gitDarkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables7 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme7();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-redux.js
  var Theme8, getThemeVariables8;
  var init_theme_redux = __esm({
    "src/themes/theme-redux.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme8 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#ffffff";
          this.primaryColor = "#cccccc";
          this.mainBkg = "#ffffff";
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "#28253D";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 12;
          this.strokeWidth = 2;
          this.primaryBorderColor = mkBorder("#28253D", this.darkMode);
          this.fontFamily = '"Recursive Variable", arial, sans-serif';
          this.fontSize = "14px";
          this.nodeBorder = "#28253D";
          this.stateBorder = "#28253D";
          this.useGradient = false;
          this.gradientStart = "#0042eb";
          this.gradientStop = "#eb0042";
          this.dropShadow = "url(#drop-shadow)";
          this.nodeShadow = true;
          this.tertiaryColor = "#ffffff";
          this.clusterBkg = "#F9F9FB";
          this.clusterBorder = "#BDBCCC";
          this.noteBorderColor = "#FACC15";
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.actorBorder = "#28253D";
          this.filterColor = "#000000";
        }
        updateColors() {
          this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#28253D");
          this.secondaryColor = this.secondaryColor || adjust_default(this.primaryColor, { h: -120 });
          this.tertiaryColor = this.tertiaryColor || adjust_default(this.primaryColor, { h: 180, l: 5 });
          this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
          this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
          this.noteBkgColor = this.noteBkgColor || "#FEF9C3";
          this.noteTextColor = this.noteTextColor || "#28253D";
          this.secondaryTextColor = this.secondaryTextColor || invert_default(this.secondaryColor);
          this.tertiaryTextColor = this.tertiaryTextColor || invert_default(this.tertiaryColor);
          this.lineColor = this.lineColor || invert_default(this.background);
          this.arrowheadColor = this.arrowheadColor || invert_default(this.background);
          this.textColor = this.textColor || this.primaryTextColor;
          this.border2 = this.border2 || this.tertiaryBorderColor;
          this.nodeBkg = this.nodeBkg || this.primaryColor;
          this.mainBkg = this.mainBkg || this.primaryColor;
          this.nodeBorder = this.nodeBorder || this.primaryBorderColor;
          this.clusterBkg = this.clusterBkg || this.tertiaryColor;
          this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
          this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
          this.titleColor = this.titleColor || this.tertiaryTextColor;
          this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
          this.noteFontWeight = 600;
          this.actorBorder = this.actorBorder || this.primaryBorderColor;
          this.actorBkg = this.actorBkg || this.mainBkg;
          this.actorTextColor = this.actorTextColor || this.primaryTextColor;
          this.actorLineColor = this.actorLineColor || this.actorBorder;
          this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
          this.signalColor = this.signalColor || this.textColor;
          this.signalTextColor = this.signalTextColor || this.textColor;
          this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
          this.labelTextColor = this.labelTextColor || this.actorTextColor;
          this.loopTextColor = this.loopTextColor || this.actorTextColor;
          this.activationBorderColor = this.activationBorderColor || darken_default(this.secondaryColor, 10);
          this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
          this.sequenceNumberColor = this.sequenceNumberColor || invert_default(this.lineColor);
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          const primaryColor = "#ECECFE";
          const secondaryColor = "#E9E9F1";
          const tertiaryColor = adjust_default(primaryColor, { h: 180, l: 5 });
          this.sectionBkgColor = this.sectionBkgColor || tertiaryColor;
          this.altSectionBkgColor = this.altSectionBkgColor || "white";
          this.sectionBkgColor = this.sectionBkgColor || secondaryColor;
          this.sectionBkgColor2 = this.sectionBkgColor2 || primaryColor;
          this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
          this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
          this.taskBkgColor = this.taskBkgColor || primaryColor;
          this.activeTaskBorderColor = this.activeTaskBorderColor || primaryColor;
          this.activeTaskBkgColor = this.activeTaskBkgColor || lighten_default(primaryColor, 23);
          this.gridColor = this.gridColor || "lightgrey";
          this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
          this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
          this.critBorderColor = this.critBorderColor || "#ff8888";
          this.critBkgColor = this.critBkgColor || "red";
          this.todayLineColor = this.todayLineColor || "red";
          this.taskTextColor = this.taskTextColor || this.textColor;
          this.vertLineColor = this.vertLineColor || this.primaryBorderColor;
          this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
          this.taskTextLightColor = this.taskTextLightColor || this.textColor;
          this.taskTextColor = this.taskTextColor || this.primaryTextColor;
          this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
          this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.personBorder = this.personBorder || this.primaryBorderColor;
          this.personBkg = this.personBkg || this.mainBkg;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.compositeTitleBackground = "#F9F9FB";
          this.altBackground = "#F9F9FB";
          this.stateEdgeLabelBackground = "#FFFFFF";
          this.fontWeight = 600;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.specialStateColor = this.lineColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScale" + i2] = this.mainBkg;
          }
          if (this.darkMode) {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 75);
            }
          } else {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 25);
            }
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          const multiplier = this.darkMode ? -4 : -1;
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i2 * 3) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i2 * 3) });
          }
          this.classText = this.classText || this.textColor;
          this.fillType0 = this.fillType0 || primaryColor;
          this.fillType1 = this.fillType1 || secondaryColor;
          this.fillType2 = this.fillType2 || adjust_default(primaryColor, { h: 64 });
          this.fillType3 = this.fillType3 || adjust_default(secondaryColor, { h: 64 });
          this.fillType4 = this.fillType4 || adjust_default(primaryColor, { h: -64 });
          this.fillType5 = this.fillType5 || adjust_default(secondaryColor, { h: -64 });
          this.fillType6 = this.fillType6 || adjust_default(primaryColor, { h: 128 });
          this.fillType7 = this.fillType7 || adjust_default(secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || primaryColor;
          this.pie2 = this.pie2 || secondaryColor;
          this.pie3 = this.pie3 || tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(secondaryColor, { l: -10 });
          this.pie6 = this.pie6 || adjust_default(tertiaryColor, { l: -10 });
          this.pie7 = this.pie7 || adjust_default(primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(primaryColor, { h: 60, l: -20 });
          this.pie11 = this.pie11 || adjust_default(primaryColor, { h: -60, l: -20 });
          this.pie12 = this.pie12 || adjust_default(primaryColor, { h: 120, l: -10 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.quadrant1Fill = this.quadrant1Fill || primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"
          };
          this.requirementBackground = this.requirementBackground || primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.requirementEdgeLabelBackground = "#FFFFFF";
          this.git0 = this.git0 || primaryColor;
          this.git1 = this.git1 || secondaryColor;
          this.git2 = this.git2 || tertiaryColor;
          this.git3 = this.git3 || adjust_default(primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.commitLineColor = this.commitLineColor ?? "#BDBCCC";
          this.erEdgeLabelBackground = "#FFFFFF";
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables8 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme8();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-redux-dark.js
  var Theme9, getThemeVariables9;
  var init_theme_redux_dark = __esm({
    "src/themes/theme-redux-dark.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme9 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#333";
          this.primaryColor = "#1f2020";
          this.secondaryColor = lighten_default(this.primaryColor, 16);
          this.tertiaryColor = adjust_default(this.primaryColor, { h: -160 });
          this.primaryBorderColor = invert_default(this.background);
          this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
          this.primaryTextColor = invert_default(this.primaryColor);
          this.secondaryTextColor = invert_default(this.secondaryColor);
          this.tertiaryTextColor = invert_default(this.tertiaryColor);
          this.mainBkg = "#111113";
          this.secondBkg = "calculated";
          this.mainContrastColor = "lightgrey";
          this.darkTextColor = lighten_default(invert_default("#323D47"), 10);
          this.border1 = "#ccc";
          this.border2 = rgba_default(255, 255, 255, 0.25);
          this.arrowheadColor = invert_default(this.background);
          this.fontFamily = '"Recursive Variable", arial, sans-serif';
          this.fontSize = "14px";
          this.labelBackground = "#111113";
          this.textColor = "#ccc";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 12;
          this.strokeWidth = 2;
          this.noteBkgColor = this.noteBkgColor ?? "#FEF9C3";
          this.noteTextColor = this.noteTextColor ?? "#28253D";
          this.THEME_COLOR_LIMIT = 12;
          this.fontFamily = '"Recursive Variable", arial, sans-serif';
          this.fontSize = "14px";
          this.nodeBorder = "#FFFFFF";
          this.stateBorder = "#FFFFFF";
          this.useGradient = false;
          this.gradientStart = "#0042eb";
          this.gradientStop = "#eb0042";
          this.dropShadow = "url(#drop-shadow)";
          this.nodeShadow = true;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.clusterBkg = "#1E1A2E";
          this.clusterBorder = "#BDBCCC";
          this.noteBorderColor = "#FACC15";
          this.noteFontWeight = 600;
          this.filterColor = "#FFFFFF";
        }
        updateColors() {
          this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#FFFFFF");
          this.secondaryColor = this.secondaryColor || adjust_default(this.primaryColor, { h: -120 });
          this.tertiaryColor = this.tertiaryColor || adjust_default(this.primaryColor, { h: 180, l: 5 });
          this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
          this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
          this.noteBkgColor = this.noteBkgColor || "#fff5ad";
          this.noteTextColor = this.noteTextColor || "#FFFFFF";
          this.secondaryTextColor = this.secondaryTextColor || invert_default(this.secondaryColor);
          this.tertiaryTextColor = this.tertiaryTextColor || invert_default(this.tertiaryColor);
          this.lineColor = this.lineColor || invert_default(this.background);
          this.arrowheadColor = this.arrowheadColor || invert_default(this.background);
          this.textColor = this.textColor || this.primaryTextColor;
          this.border2 = this.border2 || this.tertiaryBorderColor;
          this.nodeBkg = this.nodeBkg || this.primaryColor;
          this.mainBkg = this.mainBkg || this.primaryColor;
          this.nodeBorder = this.nodeBorder || this.border1;
          this.clusterBkg = this.clusterBkg || this.tertiaryColor;
          this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
          this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
          this.titleColor = this.titleColor || this.tertiaryTextColor;
          this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
          this.actorBorder = "#FFFFFF";
          this.signalColor = "#FFFFFF";
          this.labelBoxBorderColor = "#BDBCCC";
          this.actorBorder = this.actorBorder || this.primaryBorderColor;
          this.actorBkg = this.actorBkg || this.mainBkg;
          this.actorTextColor = this.actorTextColor || this.primaryTextColor;
          this.actorLineColor = this.actorLineColor || this.actorBorder;
          this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
          this.signalColor = this.signalColor || this.textColor;
          this.signalTextColor = this.signalTextColor || this.textColor;
          this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
          this.labelTextColor = this.labelTextColor || this.actorTextColor;
          this.loopTextColor = this.loopTextColor || this.actorTextColor;
          this.activationBorderColor = this.activationBorderColor || darken_default(this.secondaryColor, 10);
          this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
          this.sequenceNumberColor = this.sequenceNumberColor || invert_default(this.lineColor);
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;
          this.altSectionBkgColor = this.altSectionBkgColor || "white";
          this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;
          this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;
          this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
          this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
          this.taskBkgColor = this.taskBkgColor || this.primaryColor;
          this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;
          this.activeTaskBkgColor = this.activeTaskBkgColor || lighten_default(this.primaryColor, 23);
          this.gridColor = this.gridColor || "lightgrey";
          this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
          this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
          this.critBorderColor = this.critBorderColor || "#ff8888";
          this.critBkgColor = this.critBkgColor || "red";
          this.todayLineColor = this.todayLineColor || "red";
          this.taskTextColor = this.taskTextColor || this.textColor;
          this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
          this.taskTextLightColor = this.taskTextLightColor || this.textColor;
          this.taskTextColor = this.taskTextColor || this.primaryTextColor;
          this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
          this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.personBorder = this.personBorder || this.primaryBorderColor;
          this.personBkg = this.personBkg || this.mainBkg;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.vertLineColor = this.vertLineColor || this.primaryBorderColor;
          this.compositeBackground = "#16141F";
          this.altBackground = "#16141F";
          this.compositeTitleBackground = "#16141F";
          this.stateEdgeLabelBackground = "#16141F";
          this.fontWeight = 600;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.specialStateColor = this.lineColor;
          this.cScale0 = this.cScale0 || this.primaryColor;
          this.cScale1 = this.cScale1 || this.secondaryColor;
          this.cScale2 = this.cScale2 || this.tertiaryColor;
          this.cScale3 = this.cScale3 || adjust_default(this.primaryColor, { h: 30 });
          this.cScale4 = this.cScale4 || adjust_default(this.primaryColor, { h: 60 });
          this.cScale5 = this.cScale5 || adjust_default(this.primaryColor, { h: 90 });
          this.cScale6 = this.cScale6 || adjust_default(this.primaryColor, { h: 120 });
          this.cScale7 = this.cScale7 || adjust_default(this.primaryColor, { h: 150 });
          this.cScale8 = this.cScale8 || adjust_default(this.primaryColor, { h: 210, l: 150 });
          this.cScale9 = this.cScale9 || adjust_default(this.primaryColor, { h: 270 });
          this.cScale10 = this.cScale10 || adjust_default(this.primaryColor, { h: 300 });
          this.cScale11 = this.cScale11 || adjust_default(this.primaryColor, { h: 330 });
          if (this.darkMode) {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 75);
            }
          } else {
            for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
              this["cScale" + i2] = darken_default(this["cScale" + i2], 25);
            }
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          const multiplier = this.darkMode ? -4 : -1;
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i2 * 3) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i2 * 3) });
          }
          this.classText = this.classText || this.textColor;
          this.fillType0 = this.fillType0 || this.primaryColor;
          this.fillType1 = this.fillType1 || this.secondaryColor;
          this.fillType2 = this.fillType2 || adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = this.fillType3 || adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = this.fillType4 || adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = this.fillType5 || adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = this.fillType6 || adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = this.fillType7 || adjust_default(this.secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || this.primaryColor;
          this.pie2 = this.pie2 || this.secondaryColor;
          this.pie3 = this.pie3 || this.tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(this.primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(this.secondaryColor, { l: -10 });
          this.pie6 = this.pie6 || adjust_default(this.tertiaryColor, { l: -10 });
          this.pie7 = this.pie7 || adjust_default(this.primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(this.primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(this.primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(this.primaryColor, { h: 60, l: -20 });
          this.pie11 = this.pie11 || adjust_default(this.primaryColor, { h: -60, l: -20 });
          this.pie12 = this.pie12 || adjust_default(this.primaryColor, { h: 120, l: -10 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"
          };
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.requirementEdgeLabelBackground = "#16141F";
          this.git0 = this.git0 || this.primaryColor;
          this.git1 = this.git1 || this.secondaryColor;
          this.git2 = this.git2 || this.tertiaryColor;
          this.git3 = this.git3 || adjust_default(this.primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(this.primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(this.primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(this.primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(this.primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.commitLineColor = this.commitLineColor ?? "#BDBCCC";
          this.erEdgeLabelBackground = "#16141F";
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables9 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme9();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-redux-color.js
  var Theme10, getThemeVariables10;
  var init_theme_redux_color = __esm({
    "src/themes/theme-redux-color.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme10 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#ffffff";
          this.primaryColor = "#cccccc";
          this.mainBkg = "#ffffff";
          this.noteBkgColor = "#fff5ad";
          this.noteTextColor = "#28253D";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 12;
          this.strokeWidth = 2;
          this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
          this.fontFamily = '"Recursive Variable", arial, sans-serif';
          this.fontSize = "14px";
          this.nodeBorder = "#28253D";
          this.stateBorder = "#28253D";
          this.useGradient = false;
          this.gradientStart = "#0042eb";
          this.gradientStop = "#eb0042";
          this.dropShadow = "url(#drop-shadow)";
          this.nodeShadow = true;
          this.tertiaryColor = "#ffffff";
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.actorBorder = "#28253D";
          this.noteBorderColor = "#FACC15";
          this.noteFontWeight = 600;
          this.borderColorArray = [
            "#E879F9",
            //Fuchsia-400
            "#2DD4BF",
            //Teal-400
            "#FB923C",
            //Orange-400
            "#22D3EE",
            // Cyan-400
            "#4ADE80",
            // Green-400
            "#A78BFA",
            //Violet-400
            "#F87171",
            //red-400
            "#FACC15",
            //yellow-400
            "#818CF8",
            //indigo-400
            "#A3E635 ",
            //Lime-400
            "#38BDF8",
            //Sky-400
            "#FB7185"
            //Rose-400
          ];
          this.bkgColorArray = [
            "#FDF4FF",
            //Fuchsia-50
            "#F0FDFA",
            //Teal-50
            "#FFF7ED",
            //Orange-50
            "#ECFEFF",
            // Cyan-50
            "#F0FDF4",
            // Green-50
            "#F5F3FF",
            //Violet-50
            "#FEF2F2",
            //red-50
            "#FEFCE8",
            //yellow-50
            "#EEF2FF",
            //indigo-50
            "#F7FEE7",
            //Lime-50
            "#F0F9FF",
            //Sky-50
            "#FFF1F2"
            //Rose-50
          ];
          this.filterColor = "#000000";
        }
        updateColors() {
          this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#28253D");
          this.secondaryColor = this.secondaryColor || adjust_default(this.primaryColor, { h: -120 });
          this.tertiaryColor = this.tertiaryColor || adjust_default(this.primaryColor, { h: 180, l: 5 });
          this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
          this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
          this.noteBkgColor = this.noteBkgColor || "#fff5ad";
          this.noteTextColor = this.noteTextColor || "#28253D";
          this.secondaryTextColor = this.secondaryTextColor || invert_default(this.secondaryColor);
          this.tertiaryTextColor = this.tertiaryTextColor || invert_default(this.tertiaryColor);
          this.lineColor = this.lineColor || invert_default(this.background);
          this.arrowheadColor = this.arrowheadColor || invert_default(this.background);
          this.textColor = this.textColor || this.primaryTextColor;
          this.border2 = this.border2 || this.tertiaryBorderColor;
          this.nodeBkg = this.nodeBkg || this.primaryColor;
          this.mainBkg = this.mainBkg || this.primaryColor;
          this.nodeBorder = this.nodeBorder || this.primaryBorderColor;
          this.clusterBkg = this.clusterBkg || this.tertiaryColor;
          this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
          this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
          this.titleColor = this.titleColor || this.tertiaryTextColor;
          this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
          this.actorBorder = this.actorBorder || this.primaryBorderColor;
          this.actorBkg = this.actorBkg || this.mainBkg;
          this.actorTextColor = this.actorTextColor || this.primaryTextColor;
          this.actorLineColor = this.actorLineColor || this.actorBorder;
          this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
          this.signalColor = this.signalColor || this.textColor;
          this.signalTextColor = this.signalTextColor || this.textColor;
          this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
          this.labelTextColor = this.labelTextColor || this.actorTextColor;
          this.loopTextColor = this.loopTextColor || this.actorTextColor;
          this.activationBorderColor = this.activationBorderColor || darken_default(this.secondaryColor, 10);
          this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
          this.sequenceNumberColor = this.sequenceNumberColor || invert_default(this.lineColor);
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          const primaryColor = "#ECECFE";
          const secondaryColor = "#E9E9F1";
          const tertiaryColor = adjust_default(primaryColor, { h: 180, l: 5 });
          this.sectionBkgColor = this.sectionBkgColor || tertiaryColor;
          this.altSectionBkgColor = this.altSectionBkgColor || "white";
          this.sectionBkgColor = this.sectionBkgColor || secondaryColor;
          this.sectionBkgColor2 = this.sectionBkgColor2 || primaryColor;
          this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
          this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
          this.taskBkgColor = this.taskBkgColor || primaryColor;
          this.activeTaskBorderColor = this.activeTaskBorderColor || primaryColor;
          this.activeTaskBkgColor = this.activeTaskBkgColor || lighten_default(primaryColor, 23);
          this.gridColor = this.gridColor || "lightgrey";
          this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
          this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
          this.critBorderColor = this.critBorderColor || "#ff8888";
          this.critBkgColor = this.critBkgColor || "red";
          this.todayLineColor = this.todayLineColor || "red";
          this.taskTextColor = this.taskTextColor || this.textColor;
          this.vertLineColor = this.vertLineColor || this.primaryBorderColor;
          this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
          this.taskTextLightColor = this.taskTextLightColor || this.textColor;
          this.taskTextColor = this.taskTextColor || this.primaryTextColor;
          this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
          this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.personBorder = this.personBorder || this.primaryBorderColor;
          this.personBkg = this.personBkg || this.mainBkg;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.specialStateColor = this.lineColor;
          this.cScale0 = this.cScale0 || "#f4a8ff";
          this.cScale1 = this.cScale1 || "#46ecd5";
          this.cScale2 = this.cScale2 || "#ffb86a";
          this.cScale3 = this.cScale3 || "#dab2ff";
          this.cScale4 = this.cScale4 || "#7bf1a8";
          this.cScale5 = this.cScale5 || "#c4b4ff";
          this.cScale6 = this.cScale6 || "#ffa2a2";
          this.cScale7 = this.cScale7 || "#ffdf20";
          this.cScale8 = this.cScale8 || "#a3b3ff";
          this.cScale9 = this.cScale9 || "#bbf451";
          this.cScale10 = this.cScale10 || "#74d4ff";
          this.cScale11 = this.cScale11 || "#ffa1ad";
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = this["cScaleLabel" + i2] || this.scaleLabelColor;
          }
          const multiplier = this.darkMode ? -4 : -1;
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i2 * 3) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i2 * 3) });
          }
          this.classText = this.classText || this.textColor;
          this.fillType0 = this.fillType0 || primaryColor;
          this.fillType1 = this.fillType1 || secondaryColor;
          this.fillType2 = this.fillType2 || adjust_default(primaryColor, { h: 64 });
          this.fillType3 = this.fillType3 || adjust_default(secondaryColor, { h: 64 });
          this.fillType4 = this.fillType4 || adjust_default(primaryColor, { h: -64 });
          this.fillType5 = this.fillType5 || adjust_default(secondaryColor, { h: -64 });
          this.fillType6 = this.fillType6 || adjust_default(primaryColor, { h: 128 });
          this.fillType7 = this.fillType7 || adjust_default(secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || primaryColor;
          this.pie2 = this.pie2 || secondaryColor;
          this.pie3 = this.pie3 || tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(secondaryColor, { l: -10 });
          this.pie6 = this.pie6 || adjust_default(tertiaryColor, { l: -10 });
          this.pie7 = this.pie7 || adjust_default(primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(primaryColor, { h: 60, l: -20 });
          this.pie11 = this.pie11 || adjust_default(primaryColor, { h: -60, l: -20 });
          this.pie12 = this.pie12 || adjust_default(primaryColor, { h: 120, l: -10 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.quadrant1Fill = this.quadrant1Fill || primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"
          };
          this.requirementBackground = this.requirementBackground || primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = this.git0 || primaryColor;
          this.git1 = this.git1 || secondaryColor;
          this.git2 = this.git2 || tertiaryColor;
          this.git3 = this.git3 || adjust_default(primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLineColor = this.commitLineColor ?? "#BDBCCC";
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.fontWeight = 600;
          this.erEdgeLabelBackground = "#FFFFFF";
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables10 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme10();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/theme-redux-dark-color.js
  var Theme11, getThemeVariables11;
  var init_theme_redux_dark_color = __esm({
    "src/themes/theme-redux-dark-color.js"() {
      "use strict";
      init_dist();
      init_theme_helpers();
      init_erDiagram_oldHardcodedValues();
      Theme11 = class {
        static {
          __name(this, "Theme");
        }
        constructor() {
          this.background = "#333";
          this.primaryColor = "#1f2020";
          this.secondaryColor = lighten_default(this.primaryColor, 16);
          this.tertiaryColor = adjust_default(this.primaryColor, { h: -160 });
          this.primaryBorderColor = invert_default(this.background);
          this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
          this.primaryTextColor = invert_default(this.primaryColor);
          this.secondaryTextColor = invert_default(this.secondaryColor);
          this.tertiaryTextColor = invert_default(this.tertiaryColor);
          this.mainBkg = "#111113";
          this.secondBkg = "calculated";
          this.mainContrastColor = "lightgrey";
          this.darkTextColor = lighten_default(invert_default("#323D47"), 10);
          this.border1 = "#ccc";
          this.border2 = rgba_default(255, 255, 255, 0.25);
          this.arrowheadColor = invert_default(this.background);
          this.fontFamily = '"Recursive Variable", arial, sans-serif';
          this.fontSize = "14px";
          this.labelBackground = "#111113";
          this.textColor = "#ccc";
          this.THEME_COLOR_LIMIT = 12;
          this.radius = 12;
          this.strokeWidth = 2;
          this.noteBkgColor = this.noteBkgColor ?? "#FEF9C3";
          this.noteTextColor = this.noteTextColor ?? "#28253D";
          this.THEME_COLOR_LIMIT = 12;
          this.fontFamily = '"Recursive Variable", arial, sans-serif';
          this.fontSize = "14px";
          this.nodeBorder = "#FFFFFF";
          this.stateBorder = "#FFFFFF";
          this.useGradient = false;
          this.gradientStart = "#0042eb";
          this.gradientStop = "#eb0042";
          this.dropShadow = "url(#drop-shadow)";
          this.nodeShadow = true;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.clusterBkg = "#1E1A2E";
          this.clusterBorder = "#BDBCCC";
          this.noteBorderColor = "#FACC15";
          this.noteFontWeight = 600;
          this.borderColorArray = [
            "#E879F9",
            //Fuchsia-400
            "#2DD4BF",
            //Teal-400
            "#FB923C",
            //Orange-400
            "#22D3EE",
            // Cyan-400
            "#4ADE80",
            // Green-400
            "#A78BFA",
            //Violet-400
            "#F87171",
            //red-400
            "#FACC15",
            //yellow-400
            "#818CF8",
            //indigo-400
            "#A3E635 ",
            //Lime-400
            "#38BDF8",
            //Sky-400
            "#FB7185"
            //Rose-400
          ];
          this.bkgColorArray = [];
          this.filterColor = "#FFFFFF";
        }
        updateColors() {
          this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#FFFFFF");
          this.secondaryColor = this.secondaryColor || adjust_default(this.primaryColor, { h: -120 });
          this.tertiaryColor = this.tertiaryColor || adjust_default(this.primaryColor, { h: 180, l: 5 });
          this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
          this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
          this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
          this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
          this.noteBkgColor = this.noteBkgColor || "#fff5ad";
          this.noteTextColor = this.noteTextColor || "#FFFFFF";
          this.secondaryTextColor = this.secondaryTextColor || invert_default(this.secondaryColor);
          this.tertiaryTextColor = this.tertiaryTextColor || invert_default(this.tertiaryColor);
          this.lineColor = this.lineColor || invert_default(this.background);
          this.arrowheadColor = this.arrowheadColor || invert_default(this.background);
          this.textColor = this.textColor || this.primaryTextColor;
          this.border2 = this.border2 || this.tertiaryBorderColor;
          this.nodeBkg = this.nodeBkg || this.primaryColor;
          this.mainBkg = this.mainBkg || this.primaryColor;
          this.nodeBorder = this.nodeBorder || this.border1;
          this.clusterBkg = this.clusterBkg || this.tertiaryColor;
          this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
          this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
          this.titleColor = this.titleColor || this.tertiaryTextColor;
          this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
          this.actorBorder = "#FFFFFF";
          this.signalColor = "#FFFFFF";
          this.labelBoxBorderColor = "#BDBCCC";
          this.actorBorder = this.actorBorder || this.primaryBorderColor;
          this.actorBkg = this.actorBkg || this.mainBkg;
          this.actorTextColor = this.actorTextColor || this.primaryTextColor;
          this.actorLineColor = this.actorLineColor || this.actorBorder;
          this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
          this.signalColor = this.signalColor || this.textColor;
          this.signalTextColor = this.signalTextColor || this.textColor;
          this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
          this.labelTextColor = this.labelTextColor || this.actorTextColor;
          this.loopTextColor = this.loopTextColor || this.actorTextColor;
          this.activationBorderColor = this.activationBorderColor || darken_default(this.secondaryColor, 10);
          this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
          this.sequenceNumberColor = this.sequenceNumberColor || invert_default(this.lineColor);
          this.rectBkgColor = this.rectBkgColor || this.tertiaryColor;
          this.rootLabelColor = "#FFFFFF";
          this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;
          this.altSectionBkgColor = this.altSectionBkgColor || "white";
          this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;
          this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;
          this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
          this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
          this.taskBkgColor = this.taskBkgColor || this.primaryColor;
          this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;
          this.activeTaskBkgColor = this.activeTaskBkgColor || lighten_default(this.primaryColor, 23);
          this.gridColor = this.gridColor || "lightgrey";
          this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
          this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
          this.critBorderColor = this.critBorderColor || "#ff8888";
          this.critBkgColor = this.critBkgColor || "red";
          this.todayLineColor = this.todayLineColor || "red";
          this.taskTextColor = this.taskTextColor || this.textColor;
          this.vertLineColor = this.vertLineColor || this.primaryBorderColor;
          this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
          this.taskTextLightColor = this.taskTextLightColor || this.textColor;
          this.taskTextColor = this.taskTextColor || this.primaryTextColor;
          this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
          this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
          this.archEdgeColor = this.lineColor;
          this.archEdgeArrowColor = this.lineColor;
          this.personBorder = this.personBorder || this.primaryBorderColor;
          this.personBkg = this.personBkg || this.mainBkg;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.transitionLabelColor = this.transitionLabelColor || this.textColor;
          this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
          this.stateBkg = this.stateBkg || this.mainBkg;
          this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
          this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
          this.altBackground = this.altBackground || "#f0f0f0";
          this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
          this.compositeBorder = this.compositeBorder || this.nodeBorder;
          this.innerEndBackground = this.nodeBorder;
          this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
          this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
          this.transitionColor = this.transitionColor || this.lineColor;
          this.specialStateColor = this.lineColor;
          this.cScale0 = this.cScale0 || "#f4a8ff";
          this.cScale1 = this.cScale1 || "#46ecd5";
          this.cScale2 = this.cScale2 || "#ffb86a";
          this.cScale3 = this.cScale3 || "#dab2ff";
          this.cScale4 = this.cScale4 || "#7bf1a8";
          this.cScale5 = this.cScale5 || "#c4b4ff";
          this.cScale6 = this.cScale6 || "#ffa2a2";
          this.cScale7 = this.cScale7 || "#ffdf20";
          this.cScale8 = this.cScale8 || "#a3b3ff";
          this.cScale9 = this.cScale9 || "#bbf451";
          this.cScale10 = this.cScale10 || "#74d4ff";
          this.cScale11 = this.cScale11 || "#ffa1ad";
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleInv" + i2] = this["cScaleInv" + i2] || invert_default(this["cScale" + i2]);
          }
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            if (this.darkMode) {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || lighten_default(this["cScale" + i2], 10);
            } else {
              this["cScalePeer" + i2] = this["cScalePeer" + i2] || darken_default(this["cScale" + i2], 10);
            }
          }
          this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
          for (let i2 = 0; i2 < this.THEME_COLOR_LIMIT; i2++) {
            this["cScaleLabel" + i2] = darken_default(this["cScale" + i2], 75);
          }
          const multiplier = this.darkMode ? -4 : -1;
          for (let i2 = 0; i2 < 5; i2++) {
            this["surface" + i2] = this["surface" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i2 * 3) });
            this["surfacePeer" + i2] = this["surfacePeer" + i2] || adjust_default(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i2 * 3) });
          }
          this.classText = this.classText || this.textColor;
          this.fillType0 = this.fillType0 || this.primaryColor;
          this.fillType1 = this.fillType1 || this.secondaryColor;
          this.fillType2 = this.fillType2 || adjust_default(this.primaryColor, { h: 64 });
          this.fillType3 = this.fillType3 || adjust_default(this.secondaryColor, { h: 64 });
          this.fillType4 = this.fillType4 || adjust_default(this.primaryColor, { h: -64 });
          this.fillType5 = this.fillType5 || adjust_default(this.secondaryColor, { h: -64 });
          this.fillType6 = this.fillType6 || adjust_default(this.primaryColor, { h: 128 });
          this.fillType7 = this.fillType7 || adjust_default(this.secondaryColor, { h: 128 });
          this.pie1 = this.pie1 || this.primaryColor;
          this.pie2 = this.pie2 || this.secondaryColor;
          this.pie3 = this.pie3 || this.tertiaryColor;
          this.pie4 = this.pie4 || adjust_default(this.primaryColor, { l: -10 });
          this.pie5 = this.pie5 || adjust_default(this.secondaryColor, { l: -10 });
          this.pie6 = this.pie6 || adjust_default(this.tertiaryColor, { l: -10 });
          this.pie7 = this.pie7 || adjust_default(this.primaryColor, { h: 60, l: -10 });
          this.pie8 = this.pie8 || adjust_default(this.primaryColor, { h: -60, l: -10 });
          this.pie9 = this.pie9 || adjust_default(this.primaryColor, { h: 120, l: 0 });
          this.pie10 = this.pie10 || adjust_default(this.primaryColor, { h: 60, l: -20 });
          this.pie11 = this.pie11 || adjust_default(this.primaryColor, { h: -60, l: -20 });
          this.pie12 = this.pie12 || adjust_default(this.primaryColor, { h: 120, l: -10 });
          this.pieTitleTextSize = this.pieTitleTextSize || "25px";
          this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
          this.pieSectionTextSize = this.pieSectionTextSize || "17px";
          this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
          this.pieLegendTextSize = this.pieLegendTextSize || "17px";
          this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
          this.pieStrokeColor = this.pieStrokeColor || "black";
          this.pieStrokeWidth = this.pieStrokeWidth || "2px";
          this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || "2px";
          this.pieOuterStrokeColor = this.pieOuterStrokeColor || "black";
          this.pieOpacity = this.pieOpacity || "0.7";
          this.vennTitleTextColor = this.vennTitleTextColor ?? this.titleColor;
          this.vennSetTextColor = this.vennSetTextColor ?? this.textColor;
          this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;
          this.quadrant2Fill = this.quadrant2Fill || adjust_default(this.primaryColor, { r: 5, g: 5, b: 5 });
          this.quadrant3Fill = this.quadrant3Fill || adjust_default(this.primaryColor, { r: 10, g: 10, b: 10 });
          this.quadrant4Fill = this.quadrant4Fill || adjust_default(this.primaryColor, { r: 15, g: 15, b: 15 });
          this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;
          this.quadrant2TextFill = this.quadrant2TextFill || adjust_default(this.primaryTextColor, { r: -5, g: -5, b: -5 });
          this.quadrant3TextFill = this.quadrant3TextFill || adjust_default(this.primaryTextColor, { r: -10, g: -10, b: -10 });
          this.quadrant4TextFill = this.quadrant4TextFill || adjust_default(this.primaryTextColor, { r: -15, g: -15, b: -15 });
          this.quadrantPointFill = this.quadrantPointFill || is_dark_default(this.quadrant1Fill) ? lighten_default(this.quadrant1Fill) : darken_default(this.quadrant1Fill);
          this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
          this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
          this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
          this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;
          this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;
          this.xyChart = {
            backgroundColor: this.xyChart?.backgroundColor || this.background,
            titleColor: this.xyChart?.titleColor || this.primaryTextColor,
            xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,
            xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,
            xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,
            xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,
            yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,
            yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,
            yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,
            yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,
            plotColorPalette: this.xyChart?.plotColorPalette || "#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"
          };
          this.requirementBackground = this.requirementBackground || this.primaryColor;
          this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
          this.requirementBorderSize = this.requirementBorderSize || "1";
          this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
          this.relationColor = this.relationColor || this.lineColor;
          this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken_default(this.secondaryColor, 30) : this.secondaryColor);
          this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
          this.git0 = this.git0 || this.primaryColor;
          this.git1 = this.git1 || this.secondaryColor;
          this.git2 = this.git2 || this.tertiaryColor;
          this.git3 = this.git3 || adjust_default(this.primaryColor, { h: -30 });
          this.git4 = this.git4 || adjust_default(this.primaryColor, { h: -60 });
          this.git5 = this.git5 || adjust_default(this.primaryColor, { h: -90 });
          this.git6 = this.git6 || adjust_default(this.primaryColor, { h: 60 });
          this.git7 = this.git7 || adjust_default(this.primaryColor, { h: 120 });
          if (this.darkMode) {
            this.git0 = lighten_default(this.git0, 25);
            this.git1 = lighten_default(this.git1, 25);
            this.git2 = lighten_default(this.git2, 25);
            this.git3 = lighten_default(this.git3, 25);
            this.git4 = lighten_default(this.git4, 25);
            this.git5 = lighten_default(this.git5, 25);
            this.git6 = lighten_default(this.git6, 25);
            this.git7 = lighten_default(this.git7, 25);
          } else {
            this.git0 = darken_default(this.git0, 25);
            this.git1 = darken_default(this.git1, 25);
            this.git2 = darken_default(this.git2, 25);
            this.git3 = darken_default(this.git3, 25);
            this.git4 = darken_default(this.git4, 25);
            this.git5 = darken_default(this.git5, 25);
            this.git6 = darken_default(this.git6, 25);
            this.git7 = darken_default(this.git7, 25);
          }
          this.gitInv0 = this.gitInv0 || invert_default(this.git0);
          this.gitInv1 = this.gitInv1 || invert_default(this.git1);
          this.gitInv2 = this.gitInv2 || invert_default(this.git2);
          this.gitInv3 = this.gitInv3 || invert_default(this.git3);
          this.gitInv4 = this.gitInv4 || invert_default(this.git4);
          this.gitInv5 = this.gitInv5 || invert_default(this.git5);
          this.gitInv6 = this.gitInv6 || invert_default(this.git6);
          this.gitInv7 = this.gitInv7 || invert_default(this.git7);
          this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
          this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
          this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
          this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
          this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
          this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
          this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
          this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
          this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
          this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
          this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
          this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
          this.tagLabelFontSize = this.tagLabelFontSize || "10px";
          this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
          this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
          this.commitLabelFontSize = this.commitLabelFontSize || "10px";
          this.commitLineColor = this.commitLineColor ?? "#BDBCCC";
          this.fontWeight = 600;
          this.erEdgeLabelBackground = "#16141F";
          this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
          this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
        }
        calculate(overrides) {
          if (typeof overrides !== "object") {
            this.updateColors();
            return;
          }
          const keys3 = Object.keys(overrides);
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
          this.updateColors();
          keys3.forEach((k2) => {
            this[k2] = overrides[k2];
          });
        }
      };
      getThemeVariables11 = /* @__PURE__ */ __name((userOverrides) => {
        const theme = new Theme11();
        theme.calculate(userOverrides);
        return theme;
      }, "getThemeVariables");
    }
  });

  // src/themes/index.js
  var themes_default;
  var init_themes = __esm({
    "src/themes/index.js"() {
      "use strict";
      init_theme_base();
      init_theme_dark();
      init_theme_default();
      init_theme_forest();
      init_theme_neutral();
      init_theme_neo();
      init_theme_neo_dark();
      init_theme_redux();
      init_theme_redux_dark();
      init_theme_redux_color();
      init_theme_redux_dark_color();
      themes_default = {
        base: {
          getThemeVariables
        },
        dark: {
          getThemeVariables: getThemeVariables2
        },
        default: {
          getThemeVariables: getThemeVariables3
        },
        forest: {
          getThemeVariables: getThemeVariables4
        },
        neutral: {
          getThemeVariables: getThemeVariables5
        },
        neo: {
          getThemeVariables: getThemeVariables6
        },
        "neo-dark": {
          getThemeVariables: getThemeVariables7
        },
        redux: {
          getThemeVariables: getThemeVariables8
        },
        "redux-dark": {
          getThemeVariables: getThemeVariables9
        },
        "redux-color": {
          getThemeVariables: getThemeVariables10
        },
        "redux-dark-color": {
          getThemeVariables: getThemeVariables11
        }
      };
    }
  });

  // src/schemas/config.schema.yaml?only-defaults=true
  var config_schema_default;
  var init_config_schema = __esm({
    "src/schemas/config.schema.yaml?only-defaults=true"() {
      "use strict";
      config_schema_default = {
        "flowchart": {
          "useMaxWidth": true,
          "titleTopMargin": 25,
          "subGraphTitleMargin": {
            "top": 0,
            "bottom": 0
          },
          "diagramPadding": 8,
          "htmlLabels": null,
          "nodeSpacing": 50,
          "rankSpacing": 50,
          "curve": "basis",
          "padding": 15,
          "defaultRenderer": "dagre-wrapper",
          "wrappingWidth": 200,
          "inheritDir": false
        },
        "swimlane": {
          "useMaxWidth": true,
          "lineHops": "arc",
          "ignoreCrossLaneEdges": true,
          "optimizeRanksByCrossings": true,
          "automaticLaneOrdering": false
        },
        "sequence": {
          "useMaxWidth": true,
          "hideUnusedParticipants": false,
          "activationWidth": 10,
          "diagramMarginX": 50,
          "diagramMarginY": 10,
          "actorMargin": 50,
          "width": 150,
          "height": 65,
          "boxMargin": 10,
          "boxTextMargin": 5,
          "noteMargin": 10,
          "messageMargin": 35,
          "messageAlign": "center",
          "mirrorActors": true,
          "forceMenus": false,
          "bottomMarginAdj": 1,
          "rightAngles": false,
          "showSequenceNumbers": false,
          "actorFontSize": 14,
          "actorFontFamily": '"Open Sans", sans-serif',
          "actorFontWeight": 400,
          "noteFontSize": 14,
          "noteFontFamily": '"trebuchet ms", verdana, arial, sans-serif',
          "noteFontWeight": 400,
          "noteAlign": "center",
          "messageFontSize": 16,
          "messageFontFamily": '"trebuchet ms", verdana, arial, sans-serif',
          "messageFontWeight": 400,
          "wrap": false,
          "wrapPadding": 10,
          "labelBoxWidth": 50,
          "labelBoxHeight": 20
        },
        "gantt": {
          "useMaxWidth": true,
          "titleTopMargin": 25,
          "barHeight": 20,
          "barGap": 4,
          "topPadding": 50,
          "rightPadding": 75,
          "leftPadding": 75,
          "gridLineStartPadding": 35,
          "fontSize": 11,
          "sectionFontSize": 11,
          "numberSectionStyles": 4,
          "axisFormat": "%Y-%m-%d",
          "topAxis": false,
          "displayMode": "",
          "weekday": "sunday"
        },
        "journey": {
          "useMaxWidth": true,
          "diagramMarginX": 50,
          "diagramMarginY": 10,
          "leftMargin": 150,
          "maxLabelWidth": 360,
          "width": 150,
          "height": 50,
          "boxMargin": 10,
          "boxTextMargin": 5,
          "noteMargin": 10,
          "messageMargin": 35,
          "messageAlign": "center",
          "bottomMarginAdj": 1,
          "rightAngles": false,
          "taskFontSize": 14,
          "taskFontFamily": '"Open Sans", sans-serif',
          "taskMargin": 50,
          "activationWidth": 10,
          "textPlacement": "fo",
          "actorColours": [
            "#8FBC8F",
            "#7CFC00",
            "#00FFFF",
            "#20B2AA",
            "#B0E0E6",
            "#FFFFE0"
          ],
          "sectionFills": [
            "#191970",
            "#8B008B",
            "#4B0082",
            "#2F4F4F",
            "#800000",
            "#8B4513",
            "#00008B"
          ],
          "sectionColours": [
            "#fff"
          ],
          "titleColor": "",
          "titleFontFamily": '"trebuchet ms", verdana, arial, sans-serif',
          "titleFontSize": "4ex"
        },
        "class": {
          "useMaxWidth": true,
          "titleTopMargin": 25,
          "arrowMarkerAbsolute": false,
          "dividerMargin": 10,
          "padding": 5,
          "textHeight": 10,
          "defaultRenderer": "dagre-wrapper",
          "htmlLabels": false,
          "hideEmptyMembersBox": false,
          "hierarchicalNamespaces": true
        },
        "state": {
          "useMaxWidth": true,
          "titleTopMargin": 25,
          "dividerMargin": 10,
          "sizeUnit": 5,
          "padding": 8,
          "textHeight": 10,
          "titleShift": -15,
          "noteMargin": 10,
          "forkWidth": 70,
          "forkHeight": 7,
          "miniPadding": 2,
          "fontSizeFactor": 5.02,
          "fontSize": 24,
          "labelHeight": 16,
          "edgeLengthFactor": "20",
          "compositTitleSize": 35,
          "radius": 5,
          "defaultRenderer": "dagre-wrapper"
        },
        "er": {
          "useMaxWidth": true,
          "titleTopMargin": 25,
          "diagramPadding": 20,
          "layoutDirection": "TB",
          "minEntityWidth": 100,
          "minEntityHeight": 75,
          "entityPadding": 15,
          "nodeSpacing": 140,
          "rankSpacing": 80,
          "stroke": "gray",
          "fill": "honeydew",
          "fontSize": 12
        },
        "pie": {
          "useMaxWidth": true,
          "textPosition": 0.75,
          "donutHole": 0,
          "legendPosition": "right",
          "highlightSlice": ""
        },
        "quadrantChart": {
          "useMaxWidth": true,
          "chartWidth": 500,
          "chartHeight": 500,
          "titleFontSize": 20,
          "titlePadding": 10,
          "quadrantPadding": 5,
          "xAxisLabelPadding": 5,
          "yAxisLabelPadding": 5,
          "xAxisLabelFontSize": 16,
          "yAxisLabelFontSize": 16,
          "quadrantLabelFontSize": 16,
          "quadrantTextTopPadding": 5,
          "pointTextPadding": 5,
          "pointLabelFontSize": 12,
          "pointRadius": 5,
          "xAxisPosition": "top",
          "yAxisPosition": "left",
          "quadrantInternalBorderStrokeWidth": 1,
          "quadrantExternalBorderStrokeWidth": 2
        },
        "xyChart": {
          "useMaxWidth": true,
          "width": 700,
          "height": 500,
          "titleFontSize": 20,
          "titlePadding": 10,
          "showDataLabel": false,
          "showDataLabelOutsideBar": false,
          "showTitle": true,
          "xAxis": {
            "$ref": "#/$defs/XYChartAxisConfig",
            "showLabel": true,
            "labelFontSize": 14,
            "labelPadding": 5,
            "showTitle": true,
            "titleFontSize": 16,
            "titlePadding": 5,
            "showTick": true,
            "tickLength": 5,
            "tickWidth": 2,
            "showAxisLine": true,
            "axisLineWidth": 2,
            "labelRotation": 0
          },
          "yAxis": {
            "$ref": "#/$defs/XYChartAxisConfig",
            "showLabel": true,
            "labelFontSize": 14,
            "labelPadding": 5,
            "showTitle": true,
            "titleFontSize": 16,
            "titlePadding": 5,
            "showTick": true,
            "tickLength": 5,
            "tickWidth": 2,
            "showAxisLine": true,
            "axisLineWidth": 2,
            "labelRotation": 0
          },
          "chartOrientation": "vertical",
          "plotReservedSpacePercent": 50
        },
        "requirement": {
          "useMaxWidth": true,
          "rect_fill": "#f9f9f9",
          "text_color": "#333",
          "rect_border_size": "0.5px",
          "rect_border_color": "#bbb",
          "rect_min_width": 200,
          "rect_min_height": 200,
          "fontSize": 14,
          "rect_padding": 10,
          "line_height": 20
        },
        "mindmap": {
          "useMaxWidth": true,
          "padding": 10,
          "maxNodeWidth": 200,
          "layoutAlgorithm": "cose-bilkent"
        },
        "ishikawa": {
          "useMaxWidth": true,
          "diagramPadding": 20
        },
        "kanban": {
          "useMaxWidth": true,
          "padding": 8,
          "sectionWidth": 200,
          "ticketBaseUrl": ""
        },
        "timeline": {
          "useMaxWidth": true,
          "diagramMarginX": 50,
          "diagramMarginY": 10,
          "leftMargin": 150,
          "width": 150,
          "height": 50,
          "boxMargin": 10,
          "boxTextMargin": 5,
          "noteMargin": 10,
          "messageMargin": 35,
          "messageAlign": "center",
          "bottomMarginAdj": 1,
          "rightAngles": false,
          "taskFontSize": 14,
          "taskFontFamily": '"Open Sans", sans-serif',
          "taskMargin": 50,
          "activationWidth": 10,
          "textPlacement": "fo",
          "actorColours": [
            "#8FBC8F",
            "#7CFC00",
            "#00FFFF",
            "#20B2AA",
            "#B0E0E6",
            "#FFFFE0"
          ],
          "sectionFills": [
            "#191970",
            "#8B008B",
            "#4B0082",
            "#2F4F4F",
            "#800000",
            "#8B4513",
            "#00008B"
          ],
          "sectionColours": [
            "#fff"
          ],
          "disableMulticolor": false
        },
        "gitGraph": {
          "useMaxWidth": true,
          "titleTopMargin": 25,
          "diagramPadding": 8,
          "nodeLabel": {
            "width": 75,
            "height": 100,
            "x": -25,
            "y": 0
          },
          "mainBranchName": "main",
          "mainBranchOrder": 0,
          "showCommitLabel": true,
          "showBranches": true,
          "rotateCommitLabel": true,
          "parallelCommits": false,
          "arrowMarkerAbsolute": false
        },
        "c4": {
          "useMaxWidth": true,
          "diagramMarginX": 50,
          "diagramMarginY": 10,
          "c4ShapeMargin": 50,
          "c4ShapePadding": 20,
          "width": 216,
          "height": 60,
          "boxMargin": 10,
          "c4ShapeInRow": 4,
          "nextLinePaddingX": 0,
          "c4BoundaryInRow": 2,
          "personFontSize": 14,
          "personFontFamily": '"Open Sans", sans-serif',
          "personFontWeight": "normal",
          "external_personFontSize": 14,
          "external_personFontFamily": '"Open Sans", sans-serif',
          "external_personFontWeight": "normal",
          "systemFontSize": 14,
          "systemFontFamily": '"Open Sans", sans-serif',
          "systemFontWeight": "normal",
          "external_systemFontSize": 14,
          "external_systemFontFamily": '"Open Sans", sans-serif',
          "external_systemFontWeight": "normal",
          "system_dbFontSize": 14,
          "system_dbFontFamily": '"Open Sans", sans-serif',
          "system_dbFontWeight": "normal",
          "external_system_dbFontSize": 14,
          "external_system_dbFontFamily": '"Open Sans", sans-serif',
          "external_system_dbFontWeight": "normal",
          "system_queueFontSize": 14,
          "system_queueFontFamily": '"Open Sans", sans-serif',
          "system_queueFontWeight": "normal",
          "external_system_queueFontSize": 14,
          "external_system_queueFontFamily": '"Open Sans", sans-serif',
          "external_system_queueFontWeight": "normal",
          "boundaryFontSize": 14,
          "boundaryFontFamily": '"Open Sans", sans-serif',
          "boundaryFontWeight": "normal",
          "messageFontSize": 12,
          "messageFontFamily": '"Open Sans", sans-serif',
          "messageFontWeight": "normal",
          "containerFontSize": 14,
          "containerFontFamily": '"Open Sans", sans-serif',
          "containerFontWeight": "normal",
          "external_containerFontSize": 14,
          "external_containerFontFamily": '"Open Sans", sans-serif',
          "external_containerFontWeight": "normal",
          "container_dbFontSize": 14,
          "container_dbFontFamily": '"Open Sans", sans-serif',
          "container_dbFontWeight": "normal",
          "external_container_dbFontSize": 14,
          "external_container_dbFontFamily": '"Open Sans", sans-serif',
          "external_container_dbFontWeight": "normal",
          "container_queueFontSize": 14,
          "container_queueFontFamily": '"Open Sans", sans-serif',
          "container_queueFontWeight": "normal",
          "external_container_queueFontSize": 14,
          "external_container_queueFontFamily": '"Open Sans", sans-serif',
          "external_container_queueFontWeight": "normal",
          "componentFontSize": 14,
          "componentFontFamily": '"Open Sans", sans-serif',
          "componentFontWeight": "normal",
          "external_componentFontSize": 14,
          "external_componentFontFamily": '"Open Sans", sans-serif',
          "external_componentFontWeight": "normal",
          "component_dbFontSize": 14,
          "component_dbFontFamily": '"Open Sans", sans-serif',
          "component_dbFontWeight": "normal",
          "external_component_dbFontSize": 14,
          "external_component_dbFontFamily": '"Open Sans", sans-serif',
          "external_component_dbFontWeight": "normal",
          "component_queueFontSize": 14,
          "component_queueFontFamily": '"Open Sans", sans-serif',
          "component_queueFontWeight": "normal",
          "external_component_queueFontSize": 14,
          "external_component_queueFontFamily": '"Open Sans", sans-serif',
          "external_component_queueFontWeight": "normal",
          "wrap": true,
          "wrapPadding": 10,
          "person_bg_color": "#08427B",
          "person_border_color": "#073B6F",
          "external_person_bg_color": "#686868",
          "external_person_border_color": "#8A8A8A",
          "system_bg_color": "#1168BD",
          "system_border_color": "#3C7FC0",
          "system_db_bg_color": "#1168BD",
          "system_db_border_color": "#3C7FC0",
          "system_queue_bg_color": "#1168BD",
          "system_queue_border_color": "#3C7FC0",
          "external_system_bg_color": "#999999",
          "external_system_border_color": "#8A8A8A",
          "external_system_db_bg_color": "#999999",
          "external_system_db_border_color": "#8A8A8A",
          "external_system_queue_bg_color": "#999999",
          "external_system_queue_border_color": "#8A8A8A",
          "container_bg_color": "#438DD5",
          "container_border_color": "#3C7FC0",
          "container_db_bg_color": "#438DD5",
          "container_db_border_color": "#3C7FC0",
          "container_queue_bg_color": "#438DD5",
          "container_queue_border_color": "#3C7FC0",
          "external_container_bg_color": "#B3B3B3",
          "external_container_border_color": "#A6A6A6",
          "external_container_db_bg_color": "#B3B3B3",
          "external_container_db_border_color": "#A6A6A6",
          "external_container_queue_bg_color": "#B3B3B3",
          "external_container_queue_border_color": "#A6A6A6",
          "component_bg_color": "#85BBF0",
          "component_border_color": "#78A8D8",
          "component_db_bg_color": "#85BBF0",
          "component_db_border_color": "#78A8D8",
          "component_queue_bg_color": "#85BBF0",
          "component_queue_border_color": "#78A8D8",
          "external_component_bg_color": "#CCCCCC",
          "external_component_border_color": "#BFBFBF",
          "external_component_db_bg_color": "#CCCCCC",
          "external_component_db_border_color": "#BFBFBF",
          "external_component_queue_bg_color": "#CCCCCC",
          "external_component_queue_border_color": "#BFBFBF"
        },
        "sankey": {
          "useMaxWidth": true,
          "width": 600,
          "height": 400,
          "linkColor": "gradient",
          "nodeAlignment": "justify",
          "showValues": true,
          "prefix": "",
          "suffix": "",
          "nodeWidth": 10,
          "nodePadding": 12,
          "labelStyle": "legacy"
        },
        "block": {
          "useMaxWidth": true,
          "padding": 8
        },
        "packet": {
          "useMaxWidth": true,
          "rowHeight": 32,
          "bitWidth": 32,
          "bitsPerRow": 32,
          "showBits": true,
          "paddingX": 5,
          "paddingY": 5
        },
        "treeView": {
          "useMaxWidth": true,
          "rowIndent": 10,
          "paddingX": 5,
          "paddingY": 5,
          "lineThickness": 1,
          "showIcons": false,
          "defaultIconPack": "",
          "filenameIcons": {},
          "extensionIcons": {}
        },
        "architecture": {
          "useMaxWidth": true,
          "padding": 40,
          "iconSize": 80,
          "fontSize": 16,
          "randomize": false,
          "nodeSeparation": 75,
          "idealEdgeLengthMultiplier": 1.5,
          "edgeElasticity": 0.45,
          "numIter": 2500,
          "seed": 1
        },
        "eventmodeling": {
          "useMaxWidth": true,
          "padding": 30,
          "rowHeight": 32
        },
        "radar": {
          "useMaxWidth": true,
          "width": 600,
          "height": 600,
          "marginTop": 50,
          "marginRight": 50,
          "marginBottom": 50,
          "marginLeft": 50,
          "axisScaleFactor": 1,
          "axisLabelFactor": 1.05,
          "curveTension": 0.17
        },
        "venn": {
          "useMaxWidth": true,
          "width": 800,
          "height": 450,
          "padding": 8,
          "useDebugLayout": false
        },
        "cynefin": {
          "useMaxWidth": true,
          "width": 800,
          "height": 600,
          "padding": 40,
          "showDomainDescriptions": true,
          "boundaryAmplitude": 8,
          "seed": 0
        },
        "theme": "default",
        "look": "classic",
        "handDrawnSeed": 0,
        "layout": "dagre",
        "maxTextSize": 5e4,
        "maxEdges": 500,
        "darkMode": false,
        "fontFamily": '"trebuchet ms", verdana, arial, sans-serif;',
        "logLevel": 5,
        "securityLevel": "strict",
        "startOnLoad": true,
        "arrowMarkerAbsolute": false,
        "secure": [
          "secure",
          "securityLevel",
          "startOnLoad",
          "maxTextSize",
          "suppressErrorRendering",
          "maxEdges"
        ],
        "legacyMathML": false,
        "forceLegacyMathML": false,
        "deterministicIds": false,
        "fontSize": 16,
        "markdownAutoWrap": true,
        "suppressErrorRendering": false
      };
    }
  });

  // src/defaultConfig.ts
  var config, keyify, configKeys, defaultConfig_default;
  var init_defaultConfig = __esm({
    "src/defaultConfig.ts"() {
      "use strict";
      init_themes();
      init_config_schema();
      config = {
        ...config_schema_default,
        // Set, even though they're `undefined` so that `configKeys` finds these keys
        // TODO: Should we replace these with `null` so that they can go in the JSON Schema?
        deterministicIDSeed: void 0,
        elk: {
          // mergeEdges is needed here to be considered
          mergeEdges: false,
          nodePlacementStrategy: "BRANDES_KOEPF",
          forceNodeModelOrder: false,
          considerModelOrder: "NODES_AND_EDGES"
        },
        themeCSS: void 0,
        // add non-JSON default config values
        themeVariables: themes_default.default.getThemeVariables(),
        sequence: {
          ...config_schema_default.sequence,
          messageFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.messageFontFamily,
              fontSize: this.messageFontSize,
              fontWeight: this.messageFontWeight
            };
          }, "messageFont"),
          noteFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.noteFontFamily,
              fontSize: this.noteFontSize,
              fontWeight: this.noteFontWeight
            };
          }, "noteFont"),
          actorFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.actorFontFamily,
              fontSize: this.actorFontSize,
              fontWeight: this.actorFontWeight
            };
          }, "actorFont")
        },
        class: {
          hideEmptyMembersBox: false,
          hierarchicalNamespaces: true
        },
        gantt: {
          ...config_schema_default.gantt,
          tickInterval: void 0,
          useWidth: void 0
          // can probably be removed since `configKeys` already includes this
        },
        c4: {
          ...config_schema_default.c4,
          useWidth: void 0,
          personFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.personFontFamily,
              fontSize: this.personFontSize,
              fontWeight: this.personFontWeight
            };
          }, "personFont"),
          flowchart: {
            ...config_schema_default.flowchart,
            inheritDir: false
            // default to legacy behavior
          },
          external_personFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_personFontFamily,
              fontSize: this.external_personFontSize,
              fontWeight: this.external_personFontWeight
            };
          }, "external_personFont"),
          systemFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.systemFontFamily,
              fontSize: this.systemFontSize,
              fontWeight: this.systemFontWeight
            };
          }, "systemFont"),
          external_systemFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_systemFontFamily,
              fontSize: this.external_systemFontSize,
              fontWeight: this.external_systemFontWeight
            };
          }, "external_systemFont"),
          system_dbFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.system_dbFontFamily,
              fontSize: this.system_dbFontSize,
              fontWeight: this.system_dbFontWeight
            };
          }, "system_dbFont"),
          external_system_dbFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_system_dbFontFamily,
              fontSize: this.external_system_dbFontSize,
              fontWeight: this.external_system_dbFontWeight
            };
          }, "external_system_dbFont"),
          system_queueFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.system_queueFontFamily,
              fontSize: this.system_queueFontSize,
              fontWeight: this.system_queueFontWeight
            };
          }, "system_queueFont"),
          external_system_queueFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_system_queueFontFamily,
              fontSize: this.external_system_queueFontSize,
              fontWeight: this.external_system_queueFontWeight
            };
          }, "external_system_queueFont"),
          containerFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.containerFontFamily,
              fontSize: this.containerFontSize,
              fontWeight: this.containerFontWeight
            };
          }, "containerFont"),
          external_containerFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_containerFontFamily,
              fontSize: this.external_containerFontSize,
              fontWeight: this.external_containerFontWeight
            };
          }, "external_containerFont"),
          container_dbFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.container_dbFontFamily,
              fontSize: this.container_dbFontSize,
              fontWeight: this.container_dbFontWeight
            };
          }, "container_dbFont"),
          external_container_dbFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_container_dbFontFamily,
              fontSize: this.external_container_dbFontSize,
              fontWeight: this.external_container_dbFontWeight
            };
          }, "external_container_dbFont"),
          container_queueFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.container_queueFontFamily,
              fontSize: this.container_queueFontSize,
              fontWeight: this.container_queueFontWeight
            };
          }, "container_queueFont"),
          external_container_queueFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_container_queueFontFamily,
              fontSize: this.external_container_queueFontSize,
              fontWeight: this.external_container_queueFontWeight
            };
          }, "external_container_queueFont"),
          componentFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.componentFontFamily,
              fontSize: this.componentFontSize,
              fontWeight: this.componentFontWeight
            };
          }, "componentFont"),
          external_componentFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_componentFontFamily,
              fontSize: this.external_componentFontSize,
              fontWeight: this.external_componentFontWeight
            };
          }, "external_componentFont"),
          component_dbFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.component_dbFontFamily,
              fontSize: this.component_dbFontSize,
              fontWeight: this.component_dbFontWeight
            };
          }, "component_dbFont"),
          external_component_dbFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_component_dbFontFamily,
              fontSize: this.external_component_dbFontSize,
              fontWeight: this.external_component_dbFontWeight
            };
          }, "external_component_dbFont"),
          component_queueFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.component_queueFontFamily,
              fontSize: this.component_queueFontSize,
              fontWeight: this.component_queueFontWeight
            };
          }, "component_queueFont"),
          external_component_queueFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.external_component_queueFontFamily,
              fontSize: this.external_component_queueFontSize,
              fontWeight: this.external_component_queueFontWeight
            };
          }, "external_component_queueFont"),
          boundaryFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.boundaryFontFamily,
              fontSize: this.boundaryFontSize,
              fontWeight: this.boundaryFontWeight
            };
          }, "boundaryFont"),
          messageFont: /* @__PURE__ */ __name(function() {
            return {
              fontFamily: this.messageFontFamily,
              fontSize: this.messageFontSize,
              fontWeight: this.messageFontWeight
            };
          }, "messageFont")
        },
        pie: {
          ...config_schema_default.pie,
          useWidth: 984
        },
        xyChart: {
          ...config_schema_default.xyChart,
          useWidth: void 0
        },
        requirement: {
          ...config_schema_default.requirement,
          useWidth: void 0
        },
        packet: {
          ...config_schema_default.packet
        },
        eventmodeling: {
          ...config_schema_default.eventmodeling
        },
        treeView: {
          ...config_schema_default.treeView,
          useWidth: void 0
        },
        radar: {
          ...config_schema_default.radar
        },
        railroad: {
          ...config_schema_default.railroad,
          // Railroad colors and typography derive from the active theme unless explicitly overridden.
          fontSize: void 0,
          fontFamily: void 0,
          terminalFill: void 0,
          terminalStroke: void 0,
          terminalTextColor: void 0,
          nonTerminalFill: void 0,
          nonTerminalStroke: void 0,
          nonTerminalTextColor: void 0,
          lineColor: void 0,
          markerFill: void 0,
          commentFill: void 0,
          commentStroke: void 0,
          commentTextColor: void 0,
          specialFill: void 0,
          specialStroke: void 0,
          ruleNameColor: void 0
        },
        ishikawa: {
          ...config_schema_default.ishikawa
        },
        sankey: {
          ...config_schema_default.sankey,
          // Set so that `configKeys` includes this key for sanitizeDirective
          nodeColors: void 0
        },
        treemap: {
          useMaxWidth: true,
          padding: 10,
          diagramPadding: 8,
          showValues: true,
          nodeWidth: 100,
          nodeHeight: 40,
          borderWidth: 1,
          valueFontSize: 12,
          labelFontSize: 14,
          valueFormat: ","
        },
        venn: {
          ...config_schema_default.venn
        },
        cynefin: {
          ...config_schema_default.cynefin
        }
      };
      keyify = /* @__PURE__ */ __name((obj, prefix = "") => Object.keys(obj).reduce((res, el) => {
        if (Array.isArray(obj[el])) {
          return res;
        } else if (typeof obj[el] === "object" && obj[el] !== null) {
          return [...res, prefix + el, ...keyify(obj[el], "")];
        }
        return [...res, prefix + el];
      }, []), "keyify");
      configKeys = new Set(keyify(config, ""));
      defaultConfig_default = config;
    }
  });

  // src/utils/sanitizeDirective.ts
  var DICTIONARY_CONFIG_PATTERNS, sanitizeDictionaryConfig, sanitizeDirective, sanitizeCss;
  var init_sanitizeDirective = __esm({
    "src/utils/sanitizeDirective.ts"() {
      "use strict";
      init_defaultConfig();
      init_logger();
      DICTIONARY_CONFIG_PATTERNS = {
        // CSS colors (sankey)
        nodeColors: /^#[\da-f]{3,8}$|^rgb\([\d\s%,.]+\)$|^hsl\([\d\s%,.]+\)$|^[a-z]+$/i,
        // iconify icon references (treeView filenameIcons/extensionIcons)
        filenameIcons: /^[\w-]+(?::[\w-]+)?$/,
        extensionIcons: /^[\w-]+(?::[\w-]+)?$/
      };
      sanitizeDictionaryConfig = /* @__PURE__ */ __name((dict, valuePattern) => {
        for (const key of Object.keys(dict)) {
          const value2 = dict[key];
          if (key.startsWith("__") || key.includes("proto") || key.includes("constr") || typeof value2 !== "string" || !valuePattern.test(value2)) {
            log.debug("sanitize deleting dictionary entry:", key, value2);
            delete dict[key];
          }
        }
      }, "sanitizeDictionaryConfig");
      sanitizeDirective = /* @__PURE__ */ __name((args) => {
        log.debug("sanitizeDirective called with", args);
        if (typeof args !== "object" || args == null) {
          return;
        }
        if (Array.isArray(args)) {
          args.forEach((arg) => sanitizeDirective(arg));
          return;
        }
        for (const key of Object.keys(args)) {
          log.debug("Checking key", key);
          if (key.startsWith("__") || key.includes("proto") || key.includes("constr") || !configKeys.has(key) || args[key] == null) {
            log.debug("sanitize deleting key: ", key);
            delete args[key];
            continue;
          }
          if (typeof args[key] === "object") {
            const valuePattern = DICTIONARY_CONFIG_PATTERNS[key];
            if (valuePattern) {
              sanitizeDictionaryConfig(args[key], valuePattern);
            } else {
              log.debug("sanitizing object", key);
              sanitizeDirective(args[key]);
            }
            continue;
          }
          const cssMatchers = ["themeCSS", "fontFamily", "altFontFamily"];
          for (const cssKey of cssMatchers) {
            if (key.includes(cssKey)) {
              log.debug("sanitizing css option", key);
              args[key] = sanitizeCss(args[key]);
            }
          }
        }
        if (args.themeVariables) {
          for (const k2 of Object.keys(args.themeVariables)) {
            const val = args.themeVariables[k2];
            if (val?.match && !val.match(/^[\d "#%(),.;A-Za-z]+$/)) {
              args.themeVariables[k2] = "";
            }
          }
        }
        log.debug("After sanitization", args);
      }, "sanitizeDirective");
      sanitizeCss = /* @__PURE__ */ __name((str2) => {
        let startCnt = 0;
        let endCnt = 0;
        for (const element3 of str2) {
          if (startCnt < endCnt) {
            return "{ /* ERROR: Unbalanced CSS */ }";
          }
          if (element3 === "{") {
            startCnt++;
          } else if (element3 === "}") {
            endCnt++;
          }
        }
        if (startCnt !== endCnt) {
          return "{ /* ERROR: Unbalanced CSS */ }";
        }
        return str2;
      }, "sanitizeCss");
    }
  });

  // src/config.ts
  var defaultConfig, evaluate, siteConfig, configFromInitialize, directives, currentConfig, updateCurrentConfig, setSiteConfig, saveConfigFromInitialize, updateSiteConfig, getSiteConfig, setConfig, getConfig, sanitize, addDirective, reset, ConfigWarning, issuedWarnings, issueWarning, checkConfig, getUserDefinedConfig, getEffectiveHtmlLabels;
  var init_config = __esm({
    "src/config.ts"() {
      "use strict";
      init_assignWithDepth();
      init_logger();
      init_themes();
      init_defaultConfig();
      init_sanitizeDirective();
      defaultConfig = Object.freeze(defaultConfig_default);
      evaluate = /* @__PURE__ */ __name((val) => val === false || ["false", "null", "0"].includes(String(val).trim().toLowerCase()) ? false : true, "evaluate");
      siteConfig = assignWithDepth_default({}, defaultConfig);
      directives = [];
      currentConfig = assignWithDepth_default({}, defaultConfig);
      updateCurrentConfig = /* @__PURE__ */ __name((siteCfg, _directives) => {
        let cfg = assignWithDepth_default({}, siteCfg);
        let sumOfDirectives = {};
        for (const d3 of _directives) {
          sanitize(d3);
          sumOfDirectives = assignWithDepth_default(sumOfDirectives, d3);
        }
        cfg = assignWithDepth_default(cfg, sumOfDirectives);
        if (sumOfDirectives.theme && sumOfDirectives.theme in themes_default) {
          const tmpConfigFromInitialize = assignWithDepth_default({}, configFromInitialize);
          const themeVariables = assignWithDepth_default(
            tmpConfigFromInitialize.themeVariables || {},
            sumOfDirectives.themeVariables
          );
          if (cfg.theme && cfg.theme in themes_default) {
            cfg.themeVariables = themes_default[cfg.theme].getThemeVariables(themeVariables);
          }
        }
        currentConfig = cfg;
        checkConfig(currentConfig);
        return currentConfig;
      }, "updateCurrentConfig");
      setSiteConfig = /* @__PURE__ */ __name((conf5) => {
        siteConfig = assignWithDepth_default({}, defaultConfig);
        siteConfig = assignWithDepth_default(siteConfig, conf5);
        if (conf5.theme && themes_default[conf5.theme]) {
          siteConfig.themeVariables = themes_default[conf5.theme].getThemeVariables(conf5.themeVariables);
        }
        updateCurrentConfig(siteConfig, directives);
        return siteConfig;
      }, "setSiteConfig");
      saveConfigFromInitialize = /* @__PURE__ */ __name((conf5) => {
        configFromInitialize = assignWithDepth_default({}, conf5);
      }, "saveConfigFromInitialize");
      updateSiteConfig = /* @__PURE__ */ __name((conf5) => {
        siteConfig = assignWithDepth_default(siteConfig, conf5);
        updateCurrentConfig(siteConfig, directives);
        return siteConfig;
      }, "updateSiteConfig");
      getSiteConfig = /* @__PURE__ */ __name(() => {
        return assignWithDepth_default({}, siteConfig);
      }, "getSiteConfig");
      setConfig = /* @__PURE__ */ __name((conf5) => {
        updateCurrentConfig(currentConfig, [conf5]);
        return getConfig();
      }, "setConfig");
      getConfig = /* @__PURE__ */ __name(() => {
        return assignWithDepth_default({}, currentConfig);
      }, "getConfig");
      sanitize = /* @__PURE__ */ __name((options2) => {
        if (!options2) {
          return;
        }
        ["secure", ...siteConfig.secure ?? []].forEach((key) => {
          if (Object.hasOwn(options2, key)) {
            log.debug(`Denied attempt to modify a secure key ${key}`, options2[key]);
            delete options2[key];
          }
        });
        Object.keys(options2).forEach((key) => {
          if (key.startsWith("__")) {
            delete options2[key];
          }
        });
        Object.keys(options2).forEach((key) => {
          if (typeof options2[key] === "string" && (options2[key].includes("<") || options2[key].includes(">") || options2[key].includes("url(data:"))) {
            delete options2[key];
          }
          if (typeof options2[key] === "object") {
            sanitize(options2[key]);
          }
        });
      }, "sanitize");
      addDirective = /* @__PURE__ */ __name((directive) => {
        sanitizeDirective(directive);
        if (directive.fontFamily && !directive.themeVariables?.fontFamily) {
          directive.themeVariables = {
            ...directive.themeVariables,
            fontFamily: directive.fontFamily
          };
        }
        directives.push(directive);
        updateCurrentConfig(siteConfig, directives);
      }, "addDirective");
      reset = /* @__PURE__ */ __name((config3 = siteConfig) => {
        directives = [];
        updateCurrentConfig(config3, directives);
      }, "reset");
      ConfigWarning = {
        LAZY_LOAD_DEPRECATED: "The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",
        FLOWCHART_HTML_LABELS_DEPRECATED: "flowchart.htmlLabels is deprecated. Please use global htmlLabels instead."
      };
      issuedWarnings = {};
      issueWarning = /* @__PURE__ */ __name((warning) => {
        if (issuedWarnings[warning]) {
          return;
        }
        log.warn(ConfigWarning[warning]);
        issuedWarnings[warning] = true;
      }, "issueWarning");
      checkConfig = /* @__PURE__ */ __name((config3) => {
        if (!config3) {
          return;
        }
        if (config3.lazyLoadedDiagrams || config3.loadExternalDiagramsAtStartup) {
          issueWarning("LAZY_LOAD_DEPRECATED");
        }
      }, "checkConfig");
      getUserDefinedConfig = /* @__PURE__ */ __name(() => {
        let userConfig = {};
        if (configFromInitialize) {
          userConfig = assignWithDepth_default(userConfig, configFromInitialize);
        }
        for (const d3 of directives) {
          userConfig = assignWithDepth_default(userConfig, d3);
        }
        return userConfig;
      }, "getUserDefinedConfig");
      getEffectiveHtmlLabels = /* @__PURE__ */ __name((config3) => {
        if (config3.flowchart?.htmlLabels != void 0) {
          issueWarning("FLOWCHART_HTML_LABELS_DEPRECATED");
        }
        return evaluate(config3.htmlLabels ?? config3.flowchart?.htmlLabels ?? true);
      }, "getEffectiveHtmlLabels");
    }
  });

  // ../../node_modules/.pnpm/dompurify@3.4.0/node_modules/dompurify/dist/purify.es.mjs
  function unapply(func) {
    return function(thisArg) {
      if (thisArg instanceof RegExp) {
        thisArg.lastIndex = 0;
      }
      for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
        args[_key3 - 1] = arguments[_key3];
      }
      return apply(func, thisArg, args);
    };
  }
  function unconstruct(Func) {
    return function() {
      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
        args[_key4] = arguments[_key4];
      }
      return construct(Func, args);
    };
  }
  function addToSet(set5, array4) {
    let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
    if (setPrototypeOf) {
      setPrototypeOf(set5, null);
    }
    let l4 = array4.length;
    while (l4--) {
      let element3 = array4[l4];
      if (typeof element3 === "string") {
        const lcElement = transformCaseFunc(element3);
        if (lcElement !== element3) {
          if (!isFrozen(array4)) {
            array4[l4] = lcElement;
          }
          element3 = lcElement;
        }
      }
      set5[element3] = true;
    }
    return set5;
  }
  function cleanArray(array4) {
    for (let index = 0; index < array4.length; index++) {
      const isPropertyExist = objectHasOwnProperty(array4, index);
      if (!isPropertyExist) {
        array4[index] = null;
      }
    }
    return array4;
  }
  function clone(object3) {
    const newObject = create(null);
    for (const [property3, value2] of entries(object3)) {
      const isPropertyExist = objectHasOwnProperty(object3, property3);
      if (isPropertyExist) {
        if (Array.isArray(value2)) {
          newObject[property3] = cleanArray(value2);
        } else if (value2 && typeof value2 === "object" && value2.constructor === Object) {
          newObject[property3] = clone(value2);
        } else {
          newObject[property3] = value2;
        }
      }
    }
    return newObject;
  }
  function lookupGetter(object3, prop) {
    while (object3 !== null) {
      const desc = getOwnPropertyDescriptor(object3, prop);
      if (desc) {
        if (desc.get) {
          return unapply(desc.get);
        }
        if (typeof desc.value === "function") {
          return unapply(desc.value);
        }
      }
      object3 = getPrototypeOf(object3);
    }
    function fallbackValue() {
      return null;
    }
    __name(fallbackValue, "fallbackValue");
    return fallbackValue;
  }
  function createDOMPurify() {
    let window3 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
    const DOMPurify = /* @__PURE__ */ __name((root4) => createDOMPurify(root4), "DOMPurify");
    DOMPurify.version = "3.4.0";
    DOMPurify.removed = [];
    if (!window3 || !window3.document || window3.document.nodeType !== NODE_TYPE.document || !window3.Element) {
      DOMPurify.isSupported = false;
      return DOMPurify;
    }
    let {
      document: document2
    } = window3;
    const originalDocument = document2;
    const currentScript = originalDocument.currentScript;
    const {
      DocumentFragment: DocumentFragment2,
      HTMLTemplateElement,
      Node: Node2,
      Element: Element3,
      NodeFilter,
      NamedNodeMap = window3.NamedNodeMap || window3.MozNamedAttrMap,
      HTMLFormElement,
      DOMParser,
      trustedTypes
    } = window3;
    const ElementPrototype = Element3.prototype;
    const cloneNode = lookupGetter(ElementPrototype, "cloneNode");
    const remove3 = lookupGetter(ElementPrototype, "remove");
    const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
    const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
    const getParentNode = lookupGetter(ElementPrototype, "parentNode");
    if (typeof HTMLTemplateElement === "function") {
      const template = document2.createElement("template");
      if (template.content && template.content.ownerDocument) {
        document2 = template.content.ownerDocument;
      }
    }
    let trustedTypesPolicy;
    let emptyHTML = "";
    const {
      implementation,
      createNodeIterator,
      createDocumentFragment,
      getElementsByTagName
    } = document2;
    const {
      importNode
    } = originalDocument;
    let hooks = _createHooksMap();
    DOMPurify.isSupported = typeof entries === "function" && typeof getParentNode === "function" && implementation && implementation.createHTMLDocument !== void 0;
    const {
      MUSTACHE_EXPR: MUSTACHE_EXPR2,
      ERB_EXPR: ERB_EXPR2,
      TMPLIT_EXPR: TMPLIT_EXPR2,
      DATA_ATTR: DATA_ATTR2,
      ARIA_ATTR: ARIA_ATTR2,
      IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA2,
      ATTR_WHITESPACE: ATTR_WHITESPACE2,
      CUSTOM_ELEMENT: CUSTOM_ELEMENT2
    } = EXPRESSIONS;
    let {
      IS_ALLOWED_URI: IS_ALLOWED_URI$1
    } = EXPRESSIONS;
    let ALLOWED_TAGS = null;
    const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);
    let ALLOWED_ATTR = null;
    const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);
    let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
      tagNameCheck: {
        writable: true,
        configurable: false,
        enumerable: true,
        value: null
      },
      attributeNameCheck: {
        writable: true,
        configurable: false,
        enumerable: true,
        value: null
      },
      allowCustomizedBuiltInElements: {
        writable: true,
        configurable: false,
        enumerable: true,
        value: false
      }
    }));
    let FORBID_TAGS = null;
    let FORBID_ATTR = null;
    const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {
      tagCheck: {
        writable: true,
        configurable: false,
        enumerable: true,
        value: null
      },
      attributeCheck: {
        writable: true,
        configurable: false,
        enumerable: true,
        value: null
      }
    }));
    let ALLOW_ARIA_ATTR = true;
    let ALLOW_DATA_ATTR = true;
    let ALLOW_UNKNOWN_PROTOCOLS = false;
    let ALLOW_SELF_CLOSE_IN_ATTR = true;
    let SAFE_FOR_TEMPLATES = false;
    let SAFE_FOR_XML = true;
    let WHOLE_DOCUMENT = false;
    let SET_CONFIG = false;
    let FORCE_BODY = false;
    let RETURN_DOM = false;
    let RETURN_DOM_FRAGMENT = false;
    let RETURN_TRUSTED_TYPE = false;
    let SANITIZE_DOM = true;
    let SANITIZE_NAMED_PROPS = false;
    const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
    let KEEP_CONTENT = true;
    let IN_PLACE = false;
    let USE_PROFILES = {};
    let FORBID_CONTENTS = null;
    const DEFAULT_FORBID_CONTENTS = addToSet({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]);
    let DATA_URI_TAGS = null;
    const DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]);
    let URI_SAFE_ATTRIBUTES = null;
    const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]);
    const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
    const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
    const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
    let NAMESPACE2 = HTML_NAMESPACE;
    let IS_EMPTY_INPUT = false;
    let ALLOWED_NAMESPACES = null;
    const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
    let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]);
    let HTML_INTEGRATION_POINTS = addToSet({}, ["annotation-xml"]);
    const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]);
    let PARSER_MEDIA_TYPE = null;
    const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
    const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
    let transformCaseFunc = null;
    let CONFIG = null;
    const formElement = document2.createElement("form");
    const isRegexOrFunction = /* @__PURE__ */ __name(function isRegexOrFunction2(testValue) {
      return testValue instanceof RegExp || testValue instanceof Function;
    }, "isRegexOrFunction");
    const _parseConfig = /* @__PURE__ */ __name(function _parseConfig2() {
      let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
      if (CONFIG && CONFIG === cfg) {
        return;
      }
      if (!cfg || typeof cfg !== "object") {
        cfg = {};
      }
      cfg = clone(cfg);
      PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes
      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
      transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
      ALLOWED_TAGS = objectHasOwnProperty(cfg, "ALLOWED_TAGS") ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
      ALLOWED_ATTR = objectHasOwnProperty(cfg, "ALLOWED_ATTR") ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
      ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, "ALLOWED_NAMESPACES") ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
      URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;
      DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;
      FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
      FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});
      FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});
      USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES : false;
      ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
      ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
      ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
      ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;
      SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
      SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;
      WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
      RETURN_DOM = cfg.RETURN_DOM || false;
      RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
      RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
      FORCE_BODY = cfg.FORCE_BODY || false;
      SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
      SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;
      KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
      IN_PLACE = cfg.IN_PLACE || false;
      IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;
      NAMESPACE2 = cfg.NAMESPACE || HTML_NAMESPACE;
      MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;
      HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;
      CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || create(null);
      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
        CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
      }
      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {
        CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
      }
      if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean") {
        CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
      }
      if (SAFE_FOR_TEMPLATES) {
        ALLOW_DATA_ATTR = false;
      }
      if (RETURN_DOM_FRAGMENT) {
        RETURN_DOM = true;
      }
      if (USE_PROFILES) {
        ALLOWED_TAGS = addToSet({}, text);
        ALLOWED_ATTR = create(null);
        if (USE_PROFILES.html === true) {
          addToSet(ALLOWED_TAGS, html$1);
          addToSet(ALLOWED_ATTR, html);
        }
        if (USE_PROFILES.svg === true) {
          addToSet(ALLOWED_TAGS, svg$1);
          addToSet(ALLOWED_ATTR, svg);
          addToSet(ALLOWED_ATTR, xml);
        }
        if (USE_PROFILES.svgFilters === true) {
          addToSet(ALLOWED_TAGS, svgFilters);
          addToSet(ALLOWED_ATTR, svg);
          addToSet(ALLOWED_ATTR, xml);
        }
        if (USE_PROFILES.mathMl === true) {
          addToSet(ALLOWED_TAGS, mathMl$1);
          addToSet(ALLOWED_ATTR, mathMl);
          addToSet(ALLOWED_ATTR, xml);
        }
      }
      EXTRA_ELEMENT_HANDLING.tagCheck = null;
      EXTRA_ELEMENT_HANDLING.attributeCheck = null;
      if (cfg.ADD_TAGS) {
        if (typeof cfg.ADD_TAGS === "function") {
          EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
        } else {
          if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
            ALLOWED_TAGS = clone(ALLOWED_TAGS);
          }
          addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
        }
      }
      if (cfg.ADD_ATTR) {
        if (typeof cfg.ADD_ATTR === "function") {
          EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
        } else {
          if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
            ALLOWED_ATTR = clone(ALLOWED_ATTR);
          }
          addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
        }
      }
      if (cfg.ADD_URI_SAFE_ATTR) {
        addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
      }
      if (cfg.FORBID_CONTENTS) {
        if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
          FORBID_CONTENTS = clone(FORBID_CONTENTS);
        }
        addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
      }
      if (cfg.ADD_FORBID_CONTENTS) {
        if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
          FORBID_CONTENTS = clone(FORBID_CONTENTS);
        }
        addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
      }
      if (KEEP_CONTENT) {
        ALLOWED_TAGS["#text"] = true;
      }
      if (WHOLE_DOCUMENT) {
        addToSet(ALLOWED_TAGS, ["html", "head", "body"]);
      }
      if (ALLOWED_TAGS.table) {
        addToSet(ALLOWED_TAGS, ["tbody"]);
        delete FORBID_TAGS.tbody;
      }
      if (cfg.TRUSTED_TYPES_POLICY) {
        if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") {
          throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
        }
        if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") {
          throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
        }
        trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
        emptyHTML = trustedTypesPolicy.createHTML("");
      } else {
        if (trustedTypesPolicy === void 0) {
          trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
        }
        if (trustedTypesPolicy !== null && typeof emptyHTML === "string") {
          emptyHTML = trustedTypesPolicy.createHTML("");
        }
      }
      if (freeze) {
        freeze(cfg);
      }
      CONFIG = cfg;
    }, "_parseConfig");
    const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);
    const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
    const _checkValidNamespace = /* @__PURE__ */ __name(function _checkValidNamespace2(element3) {
      let parent4 = getParentNode(element3);
      if (!parent4 || !parent4.tagName) {
        parent4 = {
          namespaceURI: NAMESPACE2,
          tagName: "template"
        };
      }
      const tagName = stringToLowerCase(element3.tagName);
      const parentTagName = stringToLowerCase(parent4.tagName);
      if (!ALLOWED_NAMESPACES[element3.namespaceURI]) {
        return false;
      }
      if (element3.namespaceURI === SVG_NAMESPACE) {
        if (parent4.namespaceURI === HTML_NAMESPACE) {
          return tagName === "svg";
        }
        if (parent4.namespaceURI === MATHML_NAMESPACE) {
          return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
        }
        return Boolean(ALL_SVG_TAGS[tagName]);
      }
      if (element3.namespaceURI === MATHML_NAMESPACE) {
        if (parent4.namespaceURI === HTML_NAMESPACE) {
          return tagName === "math";
        }
        if (parent4.namespaceURI === SVG_NAMESPACE) {
          return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
        }
        return Boolean(ALL_MATHML_TAGS[tagName]);
      }
      if (element3.namespaceURI === HTML_NAMESPACE) {
        if (parent4.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
          return false;
        }
        if (parent4.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
          return false;
        }
        return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
      }
      if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element3.namespaceURI]) {
        return true;
      }
      return false;
    }, "_checkValidNamespace");
    const _forceRemove = /* @__PURE__ */ __name(function _forceRemove2(node2) {
      arrayPush(DOMPurify.removed, {
        element: node2
      });
      try {
        getParentNode(node2).removeChild(node2);
      } catch (_3) {
        remove3(node2);
      }
    }, "_forceRemove");
    const _removeAttribute = /* @__PURE__ */ __name(function _removeAttribute2(name, element3) {
      try {
        arrayPush(DOMPurify.removed, {
          attribute: element3.getAttributeNode(name),
          from: element3
        });
      } catch (_3) {
        arrayPush(DOMPurify.removed, {
          attribute: null,
          from: element3
        });
      }
      element3.removeAttribute(name);
      if (name === "is") {
        if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
          try {
            _forceRemove(element3);
          } catch (_3) {
          }
        } else {
          try {
            element3.setAttribute(name, "");
          } catch (_3) {
          }
        }
      }
    }, "_removeAttribute");
    const _initDocument = /* @__PURE__ */ __name(function _initDocument2(dirty) {
      let doc = null;
      let leadingWhitespace = null;
      if (FORCE_BODY) {
        dirty = "<remove></remove>" + dirty;
      } else {
        const matches33 = stringMatch(dirty, /^[\r\n\t ]+/);
        leadingWhitespace = matches33 && matches33[0];
      }
      if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE2 === HTML_NAMESPACE) {
        dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + "</body></html>";
      }
      const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
      if (NAMESPACE2 === HTML_NAMESPACE) {
        try {
          doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
        } catch (_3) {
        }
      }
      if (!doc || !doc.documentElement) {
        doc = implementation.createDocument(NAMESPACE2, "template", null);
        try {
          doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
        } catch (_3) {
        }
      }
      const body = doc.body || doc.documentElement;
      if (dirty && leadingWhitespace) {
        body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);
      }
      if (NAMESPACE2 === HTML_NAMESPACE) {
        return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
      }
      return WHOLE_DOCUMENT ? doc.documentElement : body;
    }, "_initDocument");
    const _createNodeIterator = /* @__PURE__ */ __name(function _createNodeIterator2(root4) {
      return createNodeIterator.call(
        root4.ownerDocument || root4,
        root4,
        // eslint-disable-next-line no-bitwise
        NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION,
        null
      );
    }, "_createNodeIterator");
    const _isClobbered = /* @__PURE__ */ __name(function _isClobbered2(element3) {
      return element3 instanceof HTMLFormElement && (typeof element3.nodeName !== "string" || typeof element3.textContent !== "string" || typeof element3.removeChild !== "function" || !(element3.attributes instanceof NamedNodeMap) || typeof element3.removeAttribute !== "function" || typeof element3.setAttribute !== "function" || typeof element3.namespaceURI !== "string" || typeof element3.insertBefore !== "function" || typeof element3.hasChildNodes !== "function");
    }, "_isClobbered");
    const _isNode = /* @__PURE__ */ __name(function _isNode2(value2) {
      return typeof Node2 === "function" && value2 instanceof Node2;
    }, "_isNode");
    function _executeHooks(hooks2, currentNode, data6) {
      arrayForEach(hooks2, (hook2) => {
        hook2.call(DOMPurify, currentNode, data6, CONFIG);
      });
    }
    __name(_executeHooks, "_executeHooks");
    const _sanitizeElements = /* @__PURE__ */ __name(function _sanitizeElements2(currentNode) {
      let content = null;
      _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
      if (_isClobbered(currentNode)) {
        _forceRemove(currentNode);
        return true;
      }
      const tagName = transformCaseFunc(currentNode.nodeName);
      _executeHooks(hooks.uponSanitizeElement, currentNode, {
        tagName,
        allowedTags: ALLOWED_TAGS
      });
      if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\w!]/g, currentNode.textContent)) {
        _forceRemove(currentNode);
        return true;
      }
      if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && tagName === "style" && _isNode(currentNode.firstElementChild)) {
        _forceRemove(currentNode);
        return true;
      }
      if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
        _forceRemove(currentNode);
        return true;
      }
      if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) {
        _forceRemove(currentNode);
        return true;
      }
      if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {
        if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
            return false;
          }
          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {
            return false;
          }
        }
        if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
          const parentNode = getParentNode(currentNode) || currentNode.parentNode;
          const childNodes = getChildNodes(currentNode) || currentNode.childNodes;
          if (childNodes && parentNode) {
            const childCount = childNodes.length;
            for (let i2 = childCount - 1; i2 >= 0; --i2) {
              const childClone = cloneNode(childNodes[i2], true);
              childClone.__removalCount = (currentNode.__removalCount || 0) + 1;
              parentNode.insertBefore(childClone, getNextSibling(currentNode));
            }
          }
        }
        _forceRemove(currentNode);
        return true;
      }
      if (currentNode instanceof Element3 && !_checkValidNamespace(currentNode)) {
        _forceRemove(currentNode);
        return true;
      }
      if ((tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
        _forceRemove(currentNode);
        return true;
      }
      if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
        content = currentNode.textContent;
        arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
          content = stringReplace(content, expr, " ");
        });
        if (currentNode.textContent !== content) {
          arrayPush(DOMPurify.removed, {
            element: currentNode.cloneNode()
          });
          currentNode.textContent = content;
        }
      }
      _executeHooks(hooks.afterSanitizeElements, currentNode, null);
      return false;
    }, "_sanitizeElements");
    const _isValidAttribute = /* @__PURE__ */ __name(function _isValidAttribute2(lcTag, lcName, value2) {
      if (FORBID_ATTR[lcName]) {
        return false;
      }
      if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value2 in document2 || value2 in formElement)) {
        return false;
      }
      if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR2, lcName)) ;
      else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR2, lcName)) ;
      else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ;
      else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
        if (
          // First condition does a very basic check if a) it's basically a valid custom element tagname AND
          // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
          // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
          _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) || // Alternative, second condition checks if it's an `is`-attribute, AND
          // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
          lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value2) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value2))
        ) ;
        else {
          return false;
        }
      } else if (URI_SAFE_ATTRIBUTES[lcName]) ;
      else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value2, ATTR_WHITESPACE2, ""))) ;
      else if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value2, "data:") === 0 && DATA_URI_TAGS[lcTag]) ;
      else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA2, stringReplace(value2, ATTR_WHITESPACE2, ""))) ;
      else if (value2) {
        return false;
      } else ;
      return true;
    }, "_isValidAttribute");
    const _isBasicCustomElement = /* @__PURE__ */ __name(function _isBasicCustomElement2(tagName) {
      return tagName !== "annotation-xml" && stringMatch(tagName, CUSTOM_ELEMENT2);
    }, "_isBasicCustomElement");
    const _sanitizeAttributes = /* @__PURE__ */ __name(function _sanitizeAttributes2(currentNode) {
      _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
      const {
        attributes
      } = currentNode;
      if (!attributes || _isClobbered(currentNode)) {
        return;
      }
      const hookEvent = {
        attrName: "",
        attrValue: "",
        keepAttr: true,
        allowedAttributes: ALLOWED_ATTR,
        forceKeepAttr: void 0
      };
      let l4 = attributes.length;
      while (l4--) {
        const attr = attributes[l4];
        const {
          name,
          namespaceURI,
          value: attrValue
        } = attr;
        const lcName = transformCaseFunc(name);
        const initValue = attrValue;
        let value2 = name === "value" ? initValue : stringTrim(initValue);
        hookEvent.attrName = lcName;
        hookEvent.attrValue = value2;
        hookEvent.keepAttr = true;
        hookEvent.forceKeepAttr = void 0;
        _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
        value2 = hookEvent.attrValue;
        if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name")) {
          _removeAttribute(name, currentNode);
          value2 = SANITIZE_NAMED_PROPS_PREFIX + value2;
        }
        if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value2)) {
          _removeAttribute(name, currentNode);
          continue;
        }
        if (lcName === "attributename" && stringMatch(value2, "href")) {
          _removeAttribute(name, currentNode);
          continue;
        }
        if (hookEvent.forceKeepAttr) {
          continue;
        }
        if (!hookEvent.keepAttr) {
          _removeAttribute(name, currentNode);
          continue;
        }
        if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value2)) {
          _removeAttribute(name, currentNode);
          continue;
        }
        if (SAFE_FOR_TEMPLATES) {
          arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
            value2 = stringReplace(value2, expr, " ");
          });
        }
        const lcTag = transformCaseFunc(currentNode.nodeName);
        if (!_isValidAttribute(lcTag, lcName, value2)) {
          _removeAttribute(name, currentNode);
          continue;
        }
        if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function") {
          if (namespaceURI) ;
          else {
            switch (trustedTypes.getAttributeType(lcTag, lcName)) {
              case "TrustedHTML": {
                value2 = trustedTypesPolicy.createHTML(value2);
                break;
              }
              case "TrustedScriptURL": {
                value2 = trustedTypesPolicy.createScriptURL(value2);
                break;
              }
            }
          }
        }
        if (value2 !== initValue) {
          try {
            if (namespaceURI) {
              currentNode.setAttributeNS(namespaceURI, name, value2);
            } else {
              currentNode.setAttribute(name, value2);
            }
            if (_isClobbered(currentNode)) {
              _forceRemove(currentNode);
            } else {
              arrayPop(DOMPurify.removed);
            }
          } catch (_3) {
            _removeAttribute(name, currentNode);
          }
        }
      }
      _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
    }, "_sanitizeAttributes");
    const _sanitizeShadowDOM2 = /* @__PURE__ */ __name(function _sanitizeShadowDOM(fragment) {
      let shadowNode = null;
      const shadowIterator = _createNodeIterator(fragment);
      _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
      while (shadowNode = shadowIterator.nextNode()) {
        _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
        _sanitizeElements(shadowNode);
        _sanitizeAttributes(shadowNode);
        if (shadowNode.content instanceof DocumentFragment2) {
          _sanitizeShadowDOM2(shadowNode.content);
        }
      }
      _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
    }, "_sanitizeShadowDOM");
    DOMPurify.sanitize = function(dirty) {
      let cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
      let body = null;
      let importedNode = null;
      let currentNode = null;
      let returnNode = null;
      IS_EMPTY_INPUT = !dirty;
      if (IS_EMPTY_INPUT) {
        dirty = "<!-->";
      }
      if (typeof dirty !== "string" && !_isNode(dirty)) {
        if (typeof dirty.toString === "function") {
          dirty = dirty.toString();
          if (typeof dirty !== "string") {
            throw typeErrorCreate("dirty is not a string, aborting");
          }
        } else {
          throw typeErrorCreate("toString is not a function");
        }
      }
      if (!DOMPurify.isSupported) {
        return dirty;
      }
      if (!SET_CONFIG) {
        _parseConfig(cfg);
      }
      DOMPurify.removed = [];
      if (typeof dirty === "string") {
        IN_PLACE = false;
      }
      if (IN_PLACE) {
        if (dirty.nodeName) {
          const tagName = transformCaseFunc(dirty.nodeName);
          if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
            throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
          }
        }
      } else if (dirty instanceof Node2) {
        body = _initDocument("<!---->");
        importedNode = body.ownerDocument.importNode(dirty, true);
        if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") {
          body = importedNode;
        } else if (importedNode.nodeName === "HTML") {
          body = importedNode;
        } else {
          body.appendChild(importedNode);
        }
      } else {
        if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes
        dirty.indexOf("<") === -1) {
          return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
        }
        body = _initDocument(dirty);
        if (!body) {
          return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
        }
      }
      if (body && FORCE_BODY) {
        _forceRemove(body.firstChild);
      }
      const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
      while (currentNode = nodeIterator.nextNode()) {
        _sanitizeElements(currentNode);
        _sanitizeAttributes(currentNode);
        if (currentNode.content instanceof DocumentFragment2) {
          _sanitizeShadowDOM2(currentNode.content);
        }
      }
      if (IN_PLACE) {
        return dirty;
      }
      if (RETURN_DOM) {
        if (SAFE_FOR_TEMPLATES) {
          body.normalize();
          let html2 = body.innerHTML;
          arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
            html2 = stringReplace(html2, expr, " ");
          });
          body.innerHTML = html2;
        }
        if (RETURN_DOM_FRAGMENT) {
          returnNode = createDocumentFragment.call(body.ownerDocument);
          while (body.firstChild) {
            returnNode.appendChild(body.firstChild);
          }
        } else {
          returnNode = body;
        }
        if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {
          returnNode = importNode.call(originalDocument, returnNode, true);
        }
        return returnNode;
      }
      let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
      if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
        serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
      }
      if (SAFE_FOR_TEMPLATES) {
        arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
          serializedHTML = stringReplace(serializedHTML, expr, " ");
        });
      }
      return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
    };
    DOMPurify.setConfig = function() {
      let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
      _parseConfig(cfg);
      SET_CONFIG = true;
    };
    DOMPurify.clearConfig = function() {
      CONFIG = null;
      SET_CONFIG = false;
    };
    DOMPurify.isValidAttribute = function(tag, attr, value2) {
      if (!CONFIG) {
        _parseConfig({});
      }
      const lcTag = transformCaseFunc(tag);
      const lcName = transformCaseFunc(attr);
      return _isValidAttribute(lcTag, lcName, value2);
    };
    DOMPurify.addHook = function(entryPoint, hookFunction) {
      if (typeof hookFunction !== "function") {
        return;
      }
      arrayPush(hooks[entryPoint], hookFunction);
    };
    DOMPurify.removeHook = function(entryPoint, hookFunction) {
      if (hookFunction !== void 0) {
        const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
        return index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];
      }
      return arrayPop(hooks[entryPoint]);
    };
    DOMPurify.removeHooks = function(entryPoint) {
      hooks[entryPoint] = [];
    };
    DOMPurify.removeAllHooks = function() {
      hooks = _createHooksMap();
    };
    return DOMPurify;
  }
  var entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor, freeze, seal, create, apply, construct, arrayForEach, arrayLastIndexOf, arrayPop, arrayPush, arraySplice, stringToLowerCase, stringToString, stringMatch, stringReplace, stringIndexOf, stringTrim, objectHasOwnProperty, regExpTest, typeErrorCreate, html$1, svg$1, svgFilters, svgDisallowed, mathMl$1, mathMlDisallowed, text, html, svg, mathMl, xml, MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_ALLOWED_URI, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE, DOCTYPE_NAME, CUSTOM_ELEMENT, EXPRESSIONS, NODE_TYPE, getGlobal, _createTrustedTypesPolicy, _createHooksMap, purify;
  var init_purify_es = __esm({
    "../../node_modules/.pnpm/dompurify@3.4.0/node_modules/dompurify/dist/purify.es.mjs"() {
      "use strict";
      ({
        entries,
        setPrototypeOf,
        isFrozen,
        getPrototypeOf,
        getOwnPropertyDescriptor
      } = Object);
      ({
        freeze,
        seal,
        create
      } = Object);
      ({
        apply,
        construct
      } = typeof Reflect !== "undefined" && Reflect);
      if (!freeze) {
        freeze = /* @__PURE__ */ __name(function freeze2(x5) {
          return x5;
        }, "freeze");
      }
      if (!seal) {
        seal = /* @__PURE__ */ __name(function seal2(x5) {
          return x5;
        }, "seal");
      }
      if (!apply) {
        apply = /* @__PURE__ */ __name(function apply5(func, thisArg) {
          for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
            args[_key - 2] = arguments[_key];
          }
          return func.apply(thisArg, args);
        }, "apply");
      }
      if (!construct) {
        construct = /* @__PURE__ */ __name(function construct2(Func) {
          for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
            args[_key2 - 1] = arguments[_key2];
          }
          return new Func(...args);
        }, "construct");
      }
      arrayForEach = unapply(Array.prototype.forEach);
      arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
      arrayPop = unapply(Array.prototype.pop);
      arrayPush = unapply(Array.prototype.push);
      arraySplice = unapply(Array.prototype.splice);
      stringToLowerCase = unapply(String.prototype.toLowerCase);
      stringToString = unapply(String.prototype.toString);
      stringMatch = unapply(String.prototype.match);
      stringReplace = unapply(String.prototype.replace);
      stringIndexOf = unapply(String.prototype.indexOf);
      stringTrim = unapply(String.prototype.trim);
      objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
      regExpTest = unapply(RegExp.prototype.test);
      typeErrorCreate = unconstruct(TypeError);
      __name(unapply, "unapply");
      __name(unconstruct, "unconstruct");
      __name(addToSet, "addToSet");
      __name(cleanArray, "cleanArray");
      __name(clone, "clone");
      __name(lookupGetter, "lookupGetter");
      html$1 = freeze(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "search", "section", "select", "shadow", "slot", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]);
      svg$1 = freeze(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "enterkeyhint", "exportparts", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "inputmode", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "part", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]);
      svgFilters = freeze(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]);
      svgDisallowed = freeze(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]);
      mathMl$1 = freeze(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]);
      mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
      text = freeze(["#text"]);
      html = freeze(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "exportparts", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inert", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "part", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "slot", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]);
      svg = freeze(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "mask-type", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]);
      mathMl = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnalign", "columnlines", "columnspacing", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lquote", "lspace", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]);
      xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
      MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
      ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
      TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm);
      DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);
      ARIA_ATTR = seal(/^aria-[\-\w]+$/);
      IS_ALLOWED_URI = seal(
        /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
        // eslint-disable-line no-useless-escape
      );
      IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
      ATTR_WHITESPACE = seal(
        /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g
        // eslint-disable-line no-control-regex
      );
      DOCTYPE_NAME = seal(/^html$/i);
      CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
      EXPRESSIONS = /* @__PURE__ */ Object.freeze({
        __proto__: null,
        ARIA_ATTR,
        ATTR_WHITESPACE,
        CUSTOM_ELEMENT,
        DATA_ATTR,
        DOCTYPE_NAME,
        ERB_EXPR,
        IS_ALLOWED_URI,
        IS_SCRIPT_OR_DATA,
        MUSTACHE_EXPR,
        TMPLIT_EXPR
      });
      NODE_TYPE = {
        element: 1,
        text: 3,
        // Deprecated
        progressingInstruction: 7,
        comment: 8,
        document: 9
      };
      getGlobal = /* @__PURE__ */ __name(function getGlobal2() {
        return typeof window === "undefined" ? null : window;
      }, "getGlobal");
      _createTrustedTypesPolicy = /* @__PURE__ */ __name(function _createTrustedTypesPolicy2(trustedTypes, purifyHostElement) {
        if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") {
          return null;
        }
        let suffix = null;
        const ATTR_NAME = "data-tt-policy-suffix";
        if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {
          suffix = purifyHostElement.getAttribute(ATTR_NAME);
        }
        const policyName = "dompurify" + (suffix ? "#" + suffix : "");
        try {
          return trustedTypes.createPolicy(policyName, {
            createHTML(html2) {
              return html2;
            },
            createScriptURL(scriptUrl) {
              return scriptUrl;
            }
          });
        } catch (_3) {
          console.warn("TrustedTypes policy " + policyName + " could not be created.");
          return null;
        }
      }, "_createTrustedTypesPolicy");
      _createHooksMap = /* @__PURE__ */ __name(function _createHooksMap2() {
        return {
          afterSanitizeAttributes: [],
          afterSanitizeElements: [],
          afterSanitizeShadowDOM: [],
          beforeSanitizeAttributes: [],
          beforeSanitizeElements: [],
          beforeSanitizeShadowDOM: [],
          uponSanitizeAttribute: [],
          uponSanitizeElement: [],
          uponSanitizeShadowNode: []
        };
      }, "_createHooksMap");
      __name(createDOMPurify, "createDOMPurify");
      purify = createDOMPurify();
    }
  });

  // ../../node_modules/.pnpm/katex@0.16.45/node_modules/katex/dist/katex.mjs
  var katex_exports = {};
  __export(katex_exports, {
    ParseError: () => ParseError,
    SETTINGS_SCHEMA: () => SETTINGS_SCHEMA,
    __defineFunction: () => defineFunction,
    __defineMacro: () => defineMacro,
    __defineSymbol: () => defineSymbol,
    __domTree: () => __domTree,
    __parse: () => generateParseTree,
    __renderToDomTree: () => renderToDomTree,
    __renderToHTMLTree: () => renderToHTMLTree,
    __setFontMetrics: () => setFontMetrics,
    default: () => katex,
    render: () => render,
    renderToString: () => renderToString,
    version: () => version
  });
  function getDefaultValue(schema2) {
    if ("default" in schema2) {
      return schema2.default;
    }
    var type3 = schema2.type;
    var defaultType = Array.isArray(type3) ? type3[0] : type3;
    if (typeof defaultType !== "string") {
      return defaultType.enum[0];
    }
    switch (defaultType) {
      case "boolean":
        return false;
      case "string":
        return "";
      case "number":
        return 0;
      case "object":
        return {};
    }
  }
  function scriptFromCodepoint(codepoint) {
    for (var i2 = 0; i2 < scriptData.length; i2++) {
      var script = scriptData[i2];
      for (var _i = 0; _i < script.blocks.length; _i++) {
        var block2 = script.blocks[_i];
        if (codepoint >= block2[0] && codepoint <= block2[1]) {
          return script.name;
        }
      }
    }
    return null;
  }
  function supportedCodepoint(codepoint) {
    for (var i2 = 0; i2 < allBlocks.length; i2 += 2) {
      if (codepoint >= allBlocks[i2] && codepoint <= allBlocks[i2 + 1]) {
        return true;
      }
    }
    return false;
  }
  function assertSymbolDomNode(group2) {
    if (group2 instanceof SymbolNode) {
      return group2;
    } else {
      throw new Error("Expected symbolNode but got " + String(group2) + ".");
    }
  }
  function assertSpan(group2) {
    if (group2 instanceof Span) {
      return group2;
    } else {
      throw new Error("Expected span<HtmlDomNode> but got " + String(group2) + ".");
    }
  }
  function setFontMetrics(fontName, metrics) {
    fontMetricsData[fontName] = metrics;
  }
  function getCharacterMetrics(character2, font, mode) {
    if (!fontMetricsData[font]) {
      throw new Error("Font metrics not found for font: " + font + ".");
    }
    var ch = character2.charCodeAt(0);
    var metrics = fontMetricsData[font][ch];
    if (!metrics && character2[0] in extraCharacterMap) {
      ch = extraCharacterMap[character2[0]].charCodeAt(0);
      metrics = fontMetricsData[font][ch];
    }
    if (!metrics && mode === "text") {
      if (supportedCodepoint(ch)) {
        metrics = fontMetricsData[font][77];
      }
    }
    if (metrics) {
      return {
        depth: metrics[0],
        height: metrics[1],
        italic: metrics[2],
        skew: metrics[3],
        width: metrics[4]
      };
    }
  }
  function getGlobalMetrics(size4) {
    var sizeIndex;
    if (size4 >= 5) {
      sizeIndex = 0;
    } else if (size4 >= 3) {
      sizeIndex = 1;
    } else {
      sizeIndex = 2;
    }
    if (!fontMetricsBySizeIndex[sizeIndex]) {
      var metrics = fontMetricsBySizeIndex[sizeIndex] = {
        cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18
      };
      for (var key in sigmasAndXis) {
        if (sigmasAndXis.hasOwnProperty(key)) {
          metrics[key] = sigmasAndXis[key][sizeIndex];
        }
      }
    }
    return fontMetricsBySizeIndex[sizeIndex];
  }
  function defineSymbol(mode, font, group2, replace2, name, acceptUnicodeChar) {
    symbols[mode][name] = {
      font,
      group: group2,
      replace: replace2
    };
    if (acceptUnicodeChar && replace2) {
      symbols[mode][replace2] = symbols[mode][name];
    }
  }
  function defineFunction(_ref) {
    var {
      type: type3,
      names,
      props,
      handler,
      htmlBuilder: htmlBuilder3,
      mathmlBuilder: mathmlBuilder3
    } = _ref;
    var data6 = {
      type: type3,
      numArgs: props.numArgs,
      argTypes: props.argTypes,
      allowedInArgument: !!props.allowedInArgument,
      allowedInText: !!props.allowedInText,
      allowedInMath: props.allowedInMath === void 0 ? true : props.allowedInMath,
      numOptionalArgs: props.numOptionalArgs || 0,
      infix: !!props.infix,
      primitive: !!props.primitive,
      handler
    };
    for (var i2 = 0; i2 < names.length; ++i2) {
      _functions[names[i2]] = data6;
    }
    if (type3) {
      if (htmlBuilder3) {
        _htmlGroupBuilders[type3] = htmlBuilder3;
      }
      if (mathmlBuilder3) {
        _mathmlGroupBuilders[type3] = mathmlBuilder3;
      }
    }
  }
  function defineFunctionBuilders(_ref2) {
    var {
      type: type3,
      htmlBuilder: htmlBuilder3,
      mathmlBuilder: mathmlBuilder3
    } = _ref2;
    defineFunction({
      type: type3,
      names: [],
      props: {
        numArgs: 0
      },
      handler() {
        throw new Error("Should never be called.");
      },
      htmlBuilder: htmlBuilder3,
      mathmlBuilder: mathmlBuilder3
    });
  }
  function buildHTMLUnbreakable(children2, options2) {
    var body = makeSpan(["base"], children2, options2);
    var strut = makeSpan(["strut"]);
    strut.style.height = makeEm(body.height + body.depth);
    if (body.depth) {
      strut.style.verticalAlign = makeEm(-body.depth);
    }
    body.children.unshift(strut);
    return body;
  }
  function buildHTML(tree, options2) {
    var tag = null;
    if (tree.length === 1 && tree[0].type === "tag") {
      tag = tree[0].tag;
      tree = tree[0].body;
    }
    var expression = buildExpression$1(tree, options2, "root");
    var eqnNum;
    if (expression.length === 2 && expression[1].hasClass("tag")) {
      eqnNum = expression.pop();
    }
    var children2 = [];
    var parts = [];
    for (var i2 = 0; i2 < expression.length; i2++) {
      parts.push(expression[i2]);
      if (expression[i2].hasClass("mbin") || expression[i2].hasClass("mrel") || expression[i2].hasClass("allowbreak")) {
        var nobreak = false;
        while (i2 < expression.length - 1 && expression[i2 + 1].hasClass("mspace") && !expression[i2 + 1].hasClass("newline")) {
          i2++;
          parts.push(expression[i2]);
          if (expression[i2].hasClass("nobreak")) {
            nobreak = true;
          }
        }
        if (!nobreak) {
          children2.push(buildHTMLUnbreakable(parts, options2));
          parts = [];
        }
      } else if (expression[i2].hasClass("newline")) {
        parts.pop();
        if (parts.length > 0) {
          children2.push(buildHTMLUnbreakable(parts, options2));
          parts = [];
        }
        children2.push(expression[i2]);
      }
    }
    if (parts.length > 0) {
      children2.push(buildHTMLUnbreakable(parts, options2));
    }
    var tagChild;
    if (tag) {
      tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options2, true), options2);
      tagChild.classes = ["tag"];
      children2.push(tagChild);
    } else if (eqnNum) {
      children2.push(eqnNum);
    }
    var htmlNode = makeSpan(["katex-html"], children2);
    htmlNode.setAttribute("aria-hidden", "true");
    if (tagChild) {
      var strut = tagChild.children[0];
      strut.style.height = makeEm(htmlNode.height + htmlNode.depth);
      if (htmlNode.depth) {
        strut.style.verticalAlign = makeEm(-htmlNode.depth);
      }
    }
    return htmlNode;
  }
  function newDocumentFragment(children2) {
    return new DocumentFragment(children2);
  }
  function isNumberPunctuation(group2) {
    if (!group2) {
      return false;
    }
    if (group2.type === "mi" && group2.children.length === 1) {
      var child = group2.children[0];
      return child instanceof TextNode && child.text === ".";
    } else if (group2.type === "mo" && group2.children.length === 1 && group2.getAttribute("separator") === "true" && group2.getAttribute("lspace") === "0em" && group2.getAttribute("rspace") === "0em") {
      var _child = group2.children[0];
      return _child instanceof TextNode && _child.text === ",";
    } else {
      return false;
    }
  }
  function buildMathML(tree, texExpression, options2, isDisplayMode, forMathmlOnly) {
    var expression = buildExpression2(tree, options2);
    var wrapper;
    if (expression.length === 1 && expression[0] instanceof MathNode && rowLikeTypes.has(expression[0].type)) {
      wrapper = expression[0];
    } else {
      wrapper = new MathNode("mrow", expression);
    }
    var annotation = new MathNode("annotation", [new TextNode(texExpression)]);
    annotation.setAttribute("encoding", "application/x-tex");
    var semantics = new MathNode("semantics", [wrapper, annotation]);
    var math2 = new MathNode("math", [semantics]);
    math2.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML");
    if (isDisplayMode) {
      math2.setAttribute("display", "block");
    }
    var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml";
    return makeSpan([wrapperClass], [math2]);
  }
  function assertNodeType(node2, type3) {
    if (!node2 || node2.type !== type3) {
      throw new Error("Expected node of type " + type3 + ", but got " + (node2 ? "node of type " + node2.type : String(node2)));
    }
    return node2;
  }
  function assertSymbolNodeType(node2) {
    var typedNode = checkSymbolNodeType(node2);
    if (!typedNode) {
      throw new Error("Expected node of symbol group type, but got " + (node2 ? "node of type " + node2.type : String(node2)));
    }
    return typedNode;
  }
  function checkSymbolNodeType(node2) {
    if (node2 && (node2.type === "atom" || NON_ATOMS.hasOwnProperty(node2.type))) {
      return node2;
    }
    return null;
  }
  function htmlBuilder$9(group2, options2) {
    var elements2 = buildExpression$1(group2.body, options2, true);
    return makeSpan([group2.mclass], elements2, options2);
  }
  function mathmlBuilder$8(group2, options2) {
    var node2;
    var inner2 = buildExpression2(group2.body, options2);
    if (group2.mclass === "minner") {
      node2 = new MathNode("mpadded", inner2);
    } else if (group2.mclass === "mord") {
      if (group2.isCharacterBox) {
        node2 = inner2[0];
        node2.type = "mi";
      } else {
        node2 = new MathNode("mi", inner2);
      }
    } else {
      if (group2.isCharacterBox) {
        node2 = inner2[0];
        node2.type = "mo";
      } else {
        node2 = new MathNode("mo", inner2);
      }
      if (group2.mclass === "mbin") {
        node2.attributes.lspace = "0.22em";
        node2.attributes.rspace = "0.22em";
      } else if (group2.mclass === "mpunct") {
        node2.attributes.lspace = "0em";
        node2.attributes.rspace = "0.17em";
      } else if (group2.mclass === "mopen" || group2.mclass === "mclose") {
        node2.attributes.lspace = "0em";
        node2.attributes.rspace = "0em";
      } else if (group2.mclass === "minner") {
        node2.attributes.lspace = "0.0556em";
        node2.attributes.width = "+0.1111em";
      }
    }
    return node2;
  }
  function cdArrow(arrowChar, labels, parser34) {
    var funcName = cdArrowFunctionName[arrowChar];
    switch (funcName) {
      case "\\\\cdrightarrow":
      case "\\\\cdleftarrow":
        return parser34.callFunction(funcName, [labels[0]], [labels[1]]);
      case "\\uparrow":
      case "\\downarrow": {
        var leftLabel = parser34.callFunction("\\\\cdleft", [labels[0]], []);
        var bareArrow = {
          type: "atom",
          text: funcName,
          mode: "math",
          family: "rel"
        };
        var sizedArrow = parser34.callFunction("\\Big", [bareArrow], []);
        var rightLabel = parser34.callFunction("\\\\cdright", [labels[1]], []);
        var arrowGroup = {
          type: "ordgroup",
          mode: "math",
          body: [leftLabel, sizedArrow, rightLabel]
        };
        return parser34.callFunction("\\\\cdparent", [arrowGroup], []);
      }
      case "\\\\cdlongequal":
        return parser34.callFunction("\\\\cdlongequal", [], []);
      case "\\Vert": {
        var arrow = {
          type: "textord",
          text: "\\Vert",
          mode: "math"
        };
        return parser34.callFunction("\\Big", [arrow], []);
      }
      default:
        return {
          type: "textord",
          text: " ",
          mode: "math"
        };
    }
  }
  function parseCD(parser34) {
    var parsedRows = [];
    parser34.gullet.beginGroup();
    parser34.gullet.macros.set("\\cr", "\\\\\\relax");
    parser34.gullet.beginGroup();
    while (true) {
      parsedRows.push(parser34.parseExpression(false, "\\\\"));
      parser34.gullet.endGroup();
      parser34.gullet.beginGroup();
      var next3 = parser34.fetch().text;
      if (next3 === "&" || next3 === "\\\\") {
        parser34.consume();
      } else if (next3 === "\\end") {
        if (parsedRows[parsedRows.length - 1].length === 0) {
          parsedRows.pop();
        }
        break;
      } else {
        throw new ParseError("Expected \\\\ or \\cr or \\end", parser34.nextToken);
      }
    }
    var row = [];
    var body = [row];
    for (var i2 = 0; i2 < parsedRows.length; i2++) {
      var rowNodes = parsedRows[i2];
      var cell = newCell();
      for (var j3 = 0; j3 < rowNodes.length; j3++) {
        if (!isStartOfArrow(rowNodes[j3])) {
          cell.body.push(rowNodes[j3]);
        } else {
          row.push(cell);
          j3 += 1;
          var arrowChar = assertSymbolNodeType(rowNodes[j3]).text;
          var labels = new Array(2);
          labels[0] = {
            type: "ordgroup",
            mode: "math",
            body: []
          };
          labels[1] = {
            type: "ordgroup",
            mode: "math",
            body: []
          };
          if ("=|.".includes(arrowChar)) ;
          else if ("<>AV".includes(arrowChar)) {
            for (var labelNum = 0; labelNum < 2; labelNum++) {
              var inLabel = true;
              for (var k2 = j3 + 1; k2 < rowNodes.length; k2++) {
                if (isLabelEnd(rowNodes[k2], arrowChar)) {
                  inLabel = false;
                  j3 = k2;
                  break;
                }
                if (isStartOfArrow(rowNodes[k2])) {
                  throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k2]);
                }
                labels[labelNum].body.push(rowNodes[k2]);
              }
              if (inLabel) {
                throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j3]);
              }
            }
          } else {
            throw new ParseError('Expected one of "<>AV=|." after @', rowNodes[j3]);
          }
          var arrow = cdArrow(arrowChar, labels, parser34);
          var wrappedArrow = {
            type: "styling",
            body: [arrow],
            mode: "math",
            style: "display"
            // CD is always displaystyle.
          };
          row.push(wrappedArrow);
          cell = newCell();
        }
      }
      if (i2 % 2 === 0) {
        row.push(cell);
      } else {
        row.shift();
      }
      row = [];
      body.push(row);
    }
    parser34.gullet.endGroup();
    parser34.gullet.endGroup();
    var cols = new Array(body[0].length).fill({
      type: "align",
      align: "c",
      pregap: 0.25,
      // CD package sets \enskip between columns.
      postgap: 0.25
      // So pre and post each get half an \enskip, i.e. 0.25em.
    });
    return {
      type: "array",
      mode: "math",
      body,
      arraystretch: 1,
      addJot: true,
      rowGaps: [null],
      cols,
      colSeparationType: "CD",
      hLinesBeforeRow: new Array(body.length + 1).fill([])
    };
  }
  function checkDelimiter(delim, context) {
    var symDelim = checkSymbolNodeType(delim);
    if (symDelim && delimiters.has(symDelim.text)) {
      return symDelim;
    } else if (symDelim) {
      throw new ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim);
    } else {
      throw new ParseError("Invalid delimiter type '" + delim.type + "'", delim);
    }
  }
  function assertParsed(group2) {
    if (!group2.body) {
      throw new Error("Bug: The leftright ParseNode wasn't fully parsed.");
    }
  }
  function defineEnvironment(_ref) {
    var {
      type: type3,
      names,
      props,
      handler,
      htmlBuilder: htmlBuilder3,
      mathmlBuilder: mathmlBuilder3
    } = _ref;
    var data6 = {
      type: type3,
      numArgs: props.numArgs || 0,
      allowedInText: false,
      numOptionalArgs: 0,
      handler
    };
    for (var i2 = 0; i2 < names.length; ++i2) {
      _environments[names[i2]] = data6;
    }
    if (htmlBuilder3) {
      _htmlGroupBuilders[type3] = htmlBuilder3;
    }
    if (mathmlBuilder3) {
      _mathmlGroupBuilders[type3] = mathmlBuilder3;
    }
  }
  function defineMacro(name, body) {
    _macros[name] = body;
  }
  function getHLines(parser34) {
    var hlineInfo = [];
    parser34.consumeSpaces();
    var nxt = parser34.fetch().text;
    if (nxt === "\\relax") {
      parser34.consume();
      parser34.consumeSpaces();
      nxt = parser34.fetch().text;
    }
    while (nxt === "\\hline" || nxt === "\\hdashline") {
      parser34.consume();
      hlineInfo.push(nxt === "\\hdashline");
      parser34.consumeSpaces();
      nxt = parser34.fetch().text;
    }
    return hlineInfo;
  }
  function getAutoTag(name) {
    if (!name.includes("ed")) {
      return !name.includes("*");
    }
  }
  function parseArray(parser34, _ref, style3) {
    var {
      hskipBeforeAndAfter,
      addJot,
      cols,
      arraystretch,
      colSeparationType,
      autoTag,
      singleRow,
      emptySingleRow,
      maxNumCols,
      leqno
    } = _ref;
    parser34.gullet.beginGroup();
    if (!singleRow) {
      parser34.gullet.macros.set("\\cr", "\\\\\\relax");
    }
    if (!arraystretch) {
      var stretch = parser34.gullet.expandMacroAsText("\\arraystretch");
      if (stretch == null) {
        arraystretch = 1;
      } else {
        arraystretch = parseFloat(stretch);
        if (!arraystretch || arraystretch < 0) {
          throw new ParseError("Invalid \\arraystretch: " + stretch);
        }
      }
    }
    parser34.gullet.beginGroup();
    var row = [];
    var body = [row];
    var rowGaps = [];
    var hLinesBeforeRow = [];
    var tags2 = autoTag != null ? [] : void 0;
    function beginRow() {
      if (autoTag) {
        parser34.gullet.macros.set("\\@eqnsw", "1", true);
      }
    }
    __name(beginRow, "beginRow");
    function endRow() {
      if (tags2) {
        if (parser34.gullet.macros.get("\\df@tag")) {
          tags2.push(parser34.subparse([new Token("\\df@tag")]));
          parser34.gullet.macros.set("\\df@tag", void 0, true);
        } else {
          tags2.push(Boolean(autoTag) && parser34.gullet.macros.get("\\@eqnsw") === "1");
        }
      }
    }
    __name(endRow, "endRow");
    beginRow();
    hLinesBeforeRow.push(getHLines(parser34));
    while (true) {
      var cellBody = parser34.parseExpression(false, singleRow ? "\\end" : "\\\\");
      parser34.gullet.endGroup();
      parser34.gullet.beginGroup();
      var cell = {
        type: "ordgroup",
        mode: parser34.mode,
        body: cellBody
      };
      if (style3) {
        cell = {
          type: "styling",
          mode: parser34.mode,
          style: style3,
          body: [cell]
        };
      }
      row.push(cell);
      var next3 = parser34.fetch().text;
      if (next3 === "&") {
        if (maxNumCols && row.length === maxNumCols) {
          if (singleRow || colSeparationType) {
            throw new ParseError("Too many tab characters: &", parser34.nextToken);
          } else {
            parser34.settings.reportNonstrict("textEnv", "Too few columns specified in the {array} column argument.");
          }
        }
        parser34.consume();
      } else if (next3 === "\\end") {
        endRow();
        if (row.length === 1 && cell.type === "styling" && cell.body.length === 1 && cell.body[0].type === "ordgroup" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {
          body.pop();
        }
        if (hLinesBeforeRow.length < body.length + 1) {
          hLinesBeforeRow.push([]);
        }
        break;
      } else if (next3 === "\\\\") {
        parser34.consume();
        var size4 = void 0;
        if (parser34.gullet.future().text !== " ") {
          size4 = parser34.parseSizeGroup(true);
        }
        rowGaps.push(size4 ? size4.value : null);
        endRow();
        hLinesBeforeRow.push(getHLines(parser34));
        row = [];
        body.push(row);
        beginRow();
      } else {
        throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser34.nextToken);
      }
    }
    parser34.gullet.endGroup();
    parser34.gullet.endGroup();
    return {
      type: "array",
      mode: parser34.mode,
      addJot,
      arraystretch,
      body,
      cols,
      rowGaps,
      hskipBeforeAndAfter,
      hLinesBeforeRow,
      colSeparationType,
      tags: tags2,
      leqno
    };
  }
  function dCellStyle(envName) {
    if (envName.slice(0, 1) === "d") {
      return "display";
    } else {
      return "text";
    }
  }
  function sizingGroup(value2, options2, baseOptions) {
    var inner2 = buildExpression$1(value2, options2, false);
    var multiplier = options2.sizeMultiplier / baseOptions.sizeMultiplier;
    for (var i2 = 0; i2 < inner2.length; i2++) {
      var pos = inner2[i2].classes.indexOf("sizing");
      if (pos < 0) {
        Array.prototype.push.apply(inner2[i2].classes, options2.sizingClasses(baseOptions));
      } else if (inner2[i2].classes[pos + 1] === "reset-size" + options2.size) {
        inner2[i2].classes[pos + 1] = "reset-size" + baseOptions.size;
      }
      inner2[i2].height *= multiplier;
      inner2[i2].depth *= multiplier;
    }
    return makeFragment(inner2);
  }
  var ParseError, uppercase, hyphenate, ESCAPE_LOOKUP, ESCAPE_REGEX, escape2, getBaseElem, characterNodesTypes, isCharacterBox, protocolFromUrl, SETTINGS_SCHEMA, Settings, Style, D, Dc, T, Tc, S, Sc, SS, SSc, styles, sup, sub, fracNum, fracDen, cramp, text$1, Style$1, scriptData, allBlocks, doubleBrushStroke, hLinePad, sqrtMain, sqrtSize1, sqrtSize2, sqrtSize3, sqrtSize4, phasePath, sqrtTall, sqrtPath, innerPath, path, tallDelim, DocumentFragment, ptPerUnit, relativeUnit, validUnit, calculateSize2, makeEm, createClass, initNode, toNode, invalidAttributeNameRegex, toMarkup, Span, Anchor, Img, iCombinations, SymbolNode, SvgNode, PathNode, LineNode, hasHtmlDomChildren, fontMetricsData, sigmasAndXis, extraCharacterMap, fontMetricsBySizeIndex, ATOMS, NON_ATOMS, symbols, math, text2, main, ams, accent, bin, close, inner, mathord, op, open, punct, rel, spacing, textord, ligatures, mathTextSymbols, ch, i2, textSymbols, _ch, _i, letters, _ch2, _i2, wideChar, _ch3, _i3, _ch4, _i4, extraLatin, _ch5, _i5, wideLatinLetterData, wideNumeralData, wideCharacterFont, lookupSymbol, makeSymbol, mathsym, boldsymbol, makeOrd, canCombine, tryCombineChars, sizeElementFromChildren, makeSpan, makeSvgSpan, makeLineSpan, makeAnchor, makeFragment, wrapFragment, getVListChildrenAndDepth, makeVList, makeGlue, retrieveTextFontName, fontMap, svgData, staticSvg, thinspace, mediumspace, thickspace, spacings, tightSpacings, _functions, _htmlGroupBuilders, _mathmlGroupBuilders, normalizeArgument, ordargument, binLeftCanceller, binRightCanceller, styleMap$1, DomEnum, buildExpression$1, _traverseNonSpaceNodes, checkPartialGroup, _getOutermostNode, getTypeOfDomTree, makeNullDelimiter, buildGroup$1, MathNode, TextNode, SpaceNode, noVariantSymbols, rowLikeTypes, makeText, makeRow, getVariant, buildExpression2, buildExpressionRow, buildGroup2, sizeStyleMap, sizeMultipliers, sizeAtStyle, Options, optionsFromSettings, displayWrap, buildTree, buildHTMLTree, stretchyCodePoint, stretchyMathML, katexImagesData, wideAccentLabels, stretchySvg, stretchyEnclose, getBaseSymbol, htmlBuilder$a, mathmlBuilder$9, NON_STRETCHY_ACCENT_REGEX, paddedNode, binrelClass, cdArrowFunctionName, newCell, isStartOfArrow, isLabelEnd, htmlBuilder$8, mathmlBuilder$7, globalMap, checkControlSequence, getRHS, letCommand, getMetrics, styleWrap, centerSpan, makeSmallDelim, mathrmSize, makeLargeDelim, makeGlyphSpan, makeInner, lapInEms, lap, verts, doubleVerts, makeStackedDelim, vbPad, emPad, sqrtSvg, makeSqrtImage, stackLargeDelimiters, stackAlwaysDelimiters, stackNeverDelimiters, sizeToMaxHeight, makeSizedDelim, stackNeverDelimiterSequence, stackAlwaysDelimiterSequence, stackLargeDelimiterSequence, delimTypeToFont, traverseSequence, makeCustomSizedDelim, makeLeftRightDelim, delimiterSizes, delimiters, htmlBuilder$7, mathmlBuilder$6, _environments, _macros, SourceLocation, Token, validateAmsEnvironmentContext, gatherEnvironments, htmlBuilder$6, alignMap, mathmlBuilder$5, alignedHandler, environments, htmlBuilder$5, mathmlBuilder$4, fontAliases, htmlBuilder$4, mathmlBuilder$3, wrapWithStyle, stylArray, delimFromValue, htmlBuilder$3, mathmlBuilder$2, sizeData, chooseMathStyle, assembleSupSub, noSuccessor, htmlBuilder$2, mathmlBuilder$1, singleCharBigOps, singleCharIntegrals, htmlBuilder$1, mathmlBuilder2, sizeFuncs, htmlBuilder2, styleMap, htmlBuilderDelegate, defaultVariant, cssSpace, regularSpace, pad, textFontFamilies, textFontWeights, textFontShapes, optionsWithFont, makeVerb, functions, spaceRegexString, controlWordRegexString, controlSymbolRegexString, controlWordWhitespaceRegexString, controlSpaceRegexString, combiningDiacriticalMarkString, combiningDiacriticalMarksEndRegex, tokenRegexString, Lexer, Namespace, macros, digitToNumber, newcommand, dotsByToken, dotsbGroups, spaceAfterDots, latexRaiseA, braketHelper, implicitCommands, MacroExpander, unicodeSubRegEx, uSubsAndSups, unicodeAccents, unicodeSymbols, Parser, parseTree, render, renderToString, generateParseTree, renderError, renderToDomTree, renderToHTMLTree, version, __domTree, katex;
  var init_katex = __esm({
    "../../node_modules/.pnpm/katex@0.16.45/node_modules/katex/dist/katex.mjs"() {
      "use strict";
      ParseError = class _ParseError extends Error {
        static {
          __name(this, "ParseError");
        }
        // Error start position based on passed-in Token or ParseNode.
        // Length of affected text based on passed-in Token or ParseNode.
        // The underlying error message without any context added.
        constructor(message, token2) {
          var error3 = "KaTeX parse error: " + message;
          var start3;
          var end2;
          var loc = token2 && token2.loc;
          if (loc && loc.start <= loc.end) {
            var input = loc.lexer.input;
            start3 = loc.start;
            end2 = loc.end;
            if (start3 === input.length) {
              error3 += " at end of input: ";
            } else {
              error3 += " at position " + (start3 + 1) + ": ";
            }
            var underlined = input.slice(start3, end2).replace(/[^]/g, "$&\u0332");
            var left3;
            if (start3 > 15) {
              left3 = "\u2026" + input.slice(start3 - 15, start3);
            } else {
              left3 = input.slice(0, start3);
            }
            var right3;
            if (end2 + 15 < input.length) {
              right3 = input.slice(end2, end2 + 15) + "\u2026";
            } else {
              right3 = input.slice(end2);
            }
            error3 += left3 + underlined + right3;
          }
          super(error3);
          this.name = "ParseError";
          Object.setPrototypeOf(this, _ParseError.prototype);
          this.position = start3;
          if (start3 != null && end2 != null) {
            this.length = end2 - start3;
          }
          this.rawMessage = message;
        }
      };
      uppercase = /([A-Z])/g;
      hyphenate = /* @__PURE__ */ __name((str2) => str2.replace(uppercase, "-$1").toLowerCase(), "hyphenate");
      ESCAPE_LOOKUP = {
        "&": "&amp;",
        ">": "&gt;",
        "<": "&lt;",
        '"': "&quot;",
        "'": "&#x27;"
      };
      ESCAPE_REGEX = /[&><"']/g;
      escape2 = /* @__PURE__ */ __name((text4) => String(text4).replace(ESCAPE_REGEX, (match3) => ESCAPE_LOOKUP[match3]), "escape");
      getBaseElem = /* @__PURE__ */ __name((group2) => {
        if (group2.type === "ordgroup") {
          if (group2.body.length === 1) {
            return getBaseElem(group2.body[0]);
          } else {
            return group2;
          }
        } else if (group2.type === "color") {
          if (group2.body.length === 1) {
            return getBaseElem(group2.body[0]);
          } else {
            return group2;
          }
        } else if (group2.type === "font") {
          return getBaseElem(group2.body);
        } else {
          return group2;
        }
      }, "getBaseElem");
      characterNodesTypes = /* @__PURE__ */ new Set(["mathord", "textord", "atom"]);
      isCharacterBox = /* @__PURE__ */ __name((group2) => characterNodesTypes.has(getBaseElem(group2).type), "isCharacterBox");
      protocolFromUrl = /* @__PURE__ */ __name((url) => {
        var protocol = /^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(url);
        if (!protocol) {
          return "_relative";
        }
        if (protocol[2] !== ":") {
          return null;
        }
        if (!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(protocol[1])) {
          return null;
        }
        return protocol[1].toLowerCase();
      }, "protocolFromUrl");
      SETTINGS_SCHEMA = {
        displayMode: {
          type: "boolean",
          description: "Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",
          cli: "-d, --display-mode"
        },
        output: {
          type: {
            enum: ["htmlAndMathml", "html", "mathml"]
          },
          description: "Determines the markup language of the output.",
          cli: "-F, --format <type>"
        },
        leqno: {
          type: "boolean",
          description: "Render display math in leqno style (left-justified tags)."
        },
        fleqn: {
          type: "boolean",
          description: "Render display math flush left."
        },
        throwOnError: {
          type: "boolean",
          default: true,
          cli: "-t, --no-throw-on-error",
          cliDescription: "Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."
        },
        errorColor: {
          type: "string",
          default: "#cc0000",
          cli: "-c, --error-color <color>",
          cliDescription: "A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",
          cliProcessor: /* @__PURE__ */ __name((color2) => "#" + color2, "cliProcessor")
        },
        macros: {
          type: "object",
          cli: "-m, --macro <def>",
          cliDescription: "Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",
          cliDefault: [],
          cliProcessor: /* @__PURE__ */ __name((def, defs2) => {
            defs2.push(def);
            return defs2;
          }, "cliProcessor")
        },
        minRuleThickness: {
          type: "number",
          description: "Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",
          processor: /* @__PURE__ */ __name((t4) => Math.max(0, t4), "processor"),
          cli: "--min-rule-thickness <size>",
          cliProcessor: parseFloat
        },
        colorIsTextColor: {
          type: "boolean",
          description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",
          cli: "-b, --color-is-text-color"
        },
        strict: {
          type: [{
            enum: ["warn", "ignore", "error"]
          }, "boolean", "function"],
          description: "Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",
          cli: "-S, --strict",
          cliDefault: false
        },
        trust: {
          type: ["boolean", "function"],
          description: "Trust the input, enabling all HTML features such as \\url.",
          cli: "-T, --trust"
        },
        maxSize: {
          type: "number",
          default: Infinity,
          description: "If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",
          processor: /* @__PURE__ */ __name((s2) => Math.max(0, s2), "processor"),
          cli: "-s, --max-size <n>",
          cliProcessor: parseInt
        },
        maxExpand: {
          type: "number",
          default: 1e3,
          description: "Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",
          processor: /* @__PURE__ */ __name((n2) => Math.max(0, n2), "processor"),
          cli: "-e, --max-expand <n>",
          cliProcessor: /* @__PURE__ */ __name((n2) => n2 === "Infinity" ? Infinity : parseInt(n2), "cliProcessor")
        },
        globalGroup: {
          type: "boolean",
          cli: false
        }
      };
      __name(getDefaultValue, "getDefaultValue");
      Settings = class {
        static {
          __name(this, "Settings");
        }
        constructor(options2) {
          if (options2 === void 0) {
            options2 = {};
          }
          options2 = options2 || {};
          for (var prop of Object.keys(SETTINGS_SCHEMA)) {
            var schema2 = SETTINGS_SCHEMA[prop];
            var optionValue = options2[prop];
            this[prop] = optionValue !== void 0 ? schema2.processor ? schema2.processor(optionValue) : optionValue : getDefaultValue(schema2);
          }
        }
        /**
         * Report nonstrict (non-LaTeX-compatible) input.
         * Can safely not be called if `this.strict` is false in JavaScript.
         */
        reportNonstrict(errorCode, errorMsg, token2) {
          var strict = this.strict;
          if (typeof strict === "function") {
            strict = strict(errorCode, errorMsg, token2);
          }
          if (!strict || strict === "ignore") {
            return;
          } else if (strict === true || strict === "error") {
            throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token2);
          } else if (strict === "warn") {
            typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
          } else {
            typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
          }
        }
        /**
         * Check whether to apply strict (LaTeX-adhering) behavior for unusual
         * input (like `\\`).  Unlike `nonstrict`, will not throw an error;
         * instead, "error" translates to a return value of `true`, while "ignore"
         * translates to a return value of `false`.  May still print a warning:
         * "warn" prints a warning and returns `false`.
         * This is for the second category of `errorCode`s listed in the README.
         */
        useStrictBehavior(errorCode, errorMsg, token2) {
          var strict = this.strict;
          if (typeof strict === "function") {
            try {
              strict = strict(errorCode, errorMsg, token2);
            } catch (error3) {
              strict = "error";
            }
          }
          if (!strict || strict === "ignore") {
            return false;
          } else if (strict === true || strict === "error") {
            return true;
          } else if (strict === "warn") {
            typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
            return false;
          } else {
            typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
            return false;
          }
        }
        /**
         * Check whether to test potentially dangerous input, and return
         * `true` (trusted) or `false` (untrusted).  The sole argument `context`
         * should be an object with `command` field specifying the relevant LaTeX
         * command (as a string starting with `\`), and any other arguments, etc.
         * If `context` has a `url` field, a `protocol` field will automatically
         * get added by this function (changing the specified object).
         */
        isTrusted(context) {
          if ("url" in context && context.url && !context.protocol) {
            var protocol = protocolFromUrl(context.url);
            if (protocol == null) {
              return false;
            }
            context.protocol = protocol;
          }
          var trust = typeof this.trust === "function" ? this.trust(context) : this.trust;
          return Boolean(trust);
        }
      };
      Style = class {
        static {
          __name(this, "Style");
        }
        constructor(id41, size4, cramped) {
          this.id = id41;
          this.size = size4;
          this.cramped = cramped;
        }
        /**
         * Get the style of a superscript given a base in the current style.
         */
        sup() {
          return styles[sup[this.id]];
        }
        /**
         * Get the style of a subscript given a base in the current style.
         */
        sub() {
          return styles[sub[this.id]];
        }
        /**
         * Get the style of a fraction numerator given the fraction in the current
         * style.
         */
        fracNum() {
          return styles[fracNum[this.id]];
        }
        /**
         * Get the style of a fraction denominator given the fraction in the current
         * style.
         */
        fracDen() {
          return styles[fracDen[this.id]];
        }
        /**
         * Get the cramped version of a style (in particular, cramping a cramped style
         * doesn't change the style).
         */
        cramp() {
          return styles[cramp[this.id]];
        }
        /**
         * Get a text or display version of this style.
         */
        text() {
          return styles[text$1[this.id]];
        }
        /**
         * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)
         */
        isTight() {
          return this.size >= 2;
        }
      };
      D = 0;
      Dc = 1;
      T = 2;
      Tc = 3;
      S = 4;
      Sc = 5;
      SS = 6;
      SSc = 7;
      styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)];
      sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
      sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
      fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
      fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
      cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
      text$1 = [D, Dc, T, Tc, T, Tc, T, Tc];
      Style$1 = {
        DISPLAY: styles[D],
        TEXT: styles[T],
        SCRIPT: styles[S],
        SCRIPTSCRIPT: styles[SS]
      };
      scriptData = [{
        // Latin characters beyond the Latin-1 characters we have metrics for.
        // Needed for Czech, Hungarian and Turkish text, for example.
        name: "latin",
        blocks: [
          [256, 591],
          // Latin Extended-A and Latin Extended-B
          [768, 879]
          // Combining Diacritical marks
        ]
      }, {
        // The Cyrillic script used by Russian and related languages.
        // A Cyrillic subset used to be supported as explicitly defined
        // symbols in symbols.js
        name: "cyrillic",
        blocks: [[1024, 1279]]
      }, {
        // Armenian
        name: "armenian",
        blocks: [[1328, 1423]]
      }, {
        // The Brahmic scripts of South and Southeast Asia
        // Devanagari (0900–097F)
        // Bengali (0980–09FF)
        // Gurmukhi (0A00–0A7F)
        // Gujarati (0A80–0AFF)
        // Oriya (0B00–0B7F)
        // Tamil (0B80–0BFF)
        // Telugu (0C00–0C7F)
        // Kannada (0C80–0CFF)
        // Malayalam (0D00–0D7F)
        // Sinhala (0D80–0DFF)
        // Thai (0E00–0E7F)
        // Lao (0E80–0EFF)
        // Tibetan (0F00–0FFF)
        // Myanmar (1000–109F)
        name: "brahmic",
        blocks: [[2304, 4255]]
      }, {
        name: "georgian",
        blocks: [[4256, 4351]]
      }, {
        // Chinese and Japanese.
        // The "k" in cjk is for Korean, but we've separated Korean out
        name: "cjk",
        blocks: [
          [12288, 12543],
          // CJK symbols and punctuation, Hiragana, Katakana
          [19968, 40879],
          // CJK ideograms
          [65280, 65376]
          // Fullwidth punctuation
          // TODO: add halfwidth Katakana and Romanji glyphs
        ]
      }, {
        // Korean
        name: "hangul",
        blocks: [[44032, 55215]]
      }];
      __name(scriptFromCodepoint, "scriptFromCodepoint");
      allBlocks = [];
      scriptData.forEach((s2) => s2.blocks.forEach((b3) => allBlocks.push(...b3)));
      __name(supportedCodepoint, "supportedCodepoint");
      doubleBrushStroke = /* @__PURE__ */ __name((svgPath) => svgPath + " " + svgPath, "doubleBrushStroke");
      hLinePad = 80;
      sqrtMain = /* @__PURE__ */ __name(function sqrtMain2(extraVinculum, hLinePad2) {
        return "M95," + (622 + extraVinculum + hLinePad2) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraVinculum / 2.075 + " -" + extraVinculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraVinculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraVinculum) + " " + hLinePad2 + "h400000v" + (40 + extraVinculum) + "h-400000z";
      }, "sqrtMain");
      sqrtSize1 = /* @__PURE__ */ __name(function sqrtSize12(extraVinculum, hLinePad2) {
        return "M263," + (601 + extraVinculum + hLinePad2) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraVinculum / 2.084 + " -" + extraVinculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraVinculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraVinculum) + " " + hLinePad2 + "h400000v" + (40 + extraVinculum) + "h-400000z";
      }, "sqrtSize1");
      sqrtSize2 = /* @__PURE__ */ __name(function sqrtSize22(extraVinculum, hLinePad2) {
        return "M983 " + (10 + extraVinculum + hLinePad2) + "\nl" + extraVinculum / 3.13 + " -" + extraVinculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraVinculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraVinculum) + " " + hLinePad2 + "h400000v" + (40 + extraVinculum) + "h-400000z";
      }, "sqrtSize2");
      sqrtSize3 = /* @__PURE__ */ __name(function sqrtSize32(extraVinculum, hLinePad2) {
        return "M424," + (2398 + extraVinculum + hLinePad2) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraVinculum / 4.223 + " -" + extraVinculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraVinculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraVinculum) + " " + hLinePad2 + "\nh400000v" + (40 + extraVinculum) + "h-400000z";
      }, "sqrtSize3");
      sqrtSize4 = /* @__PURE__ */ __name(function sqrtSize42(extraVinculum, hLinePad2) {
        return "M473," + (2713 + extraVinculum + hLinePad2) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraVinculum / 5.298 + " -" + extraVinculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraVinculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraVinculum) + " " + hLinePad2 + "h400000v" + (40 + extraVinculum) + "H1017.7z";
      }, "sqrtSize4");
      phasePath = /* @__PURE__ */ __name(function phasePath2(y6) {
        var x5 = y6 / 2;
        return "M400000 " + y6 + " H0 L" + x5 + " 0 l65 45 L145 " + (y6 - 80) + " H400000z";
      }, "phasePath");
      sqrtTall = /* @__PURE__ */ __name(function sqrtTall2(extraVinculum, hLinePad2, viewBoxHeight) {
        var vertSegment = viewBoxHeight - 54 - hLinePad2 - extraVinculum;
        return "M702 " + (extraVinculum + hLinePad2) + "H400000" + (40 + extraVinculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad2 + "H400000v" + (40 + extraVinculum) + "H742z";
      }, "sqrtTall");
      sqrtPath = /* @__PURE__ */ __name(function sqrtPath2(size4, extraVinculum, viewBoxHeight) {
        extraVinculum = 1e3 * extraVinculum;
        var path4 = "";
        switch (size4) {
          case "sqrtMain":
            path4 = sqrtMain(extraVinculum, hLinePad);
            break;
          case "sqrtSize1":
            path4 = sqrtSize1(extraVinculum, hLinePad);
            break;
          case "sqrtSize2":
            path4 = sqrtSize2(extraVinculum, hLinePad);
            break;
          case "sqrtSize3":
            path4 = sqrtSize3(extraVinculum, hLinePad);
            break;
          case "sqrtSize4":
            path4 = sqrtSize4(extraVinculum, hLinePad);
            break;
          case "sqrtTall":
            path4 = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);
        }
        return path4;
      }, "sqrtPath");
      innerPath = /* @__PURE__ */ __name(function innerPath2(name, height2) {
        switch (name) {
          case "\u239C":
            return doubleBrushStroke("M291 0 H417 V" + height2 + " H291z");
          case "\u2223":
            return doubleBrushStroke("M145 0 H188 V" + height2 + " H145z");
          case "\u2225":
            return doubleBrushStroke("M145 0 H188 V" + height2 + " H145z") + doubleBrushStroke("M367 0 H410 V" + height2 + " H367z");
          case "\u239F":
            return doubleBrushStroke("M457 0 H583 V" + height2 + " H457z");
          case "\u23A2":
            return doubleBrushStroke("M319 0 H403 V" + height2 + " H319z");
          case "\u23A5":
            return doubleBrushStroke("M263 0 H347 V" + height2 + " H263z");
          case "\u23AA":
            return doubleBrushStroke("M384 0 H504 V" + height2 + " H384z");
          case "\u23D0":
            return doubleBrushStroke("M312 0 H355 V" + height2 + " H312z");
          case "\u2016":
            return doubleBrushStroke("M257 0 H300 V" + height2 + " H257z") + doubleBrushStroke("M478 0 H521 V" + height2 + " H478z");
          default:
            return "";
        }
      }, "innerPath");
      path = {
        // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
        doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",
        // doublerightarrow is from glyph U+21D2 in font KaTeX Main
        doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",
        // leftarrow is from glyph U+2190 in font KaTeX Main
        leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",
        // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
        leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",
        leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",
        // overgroup is from the MnSymbol package (public domain)
        leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",
        leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",
        // Harpoons are from glyph U+21BD in font KaTeX Main
        leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",
        leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",
        leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",
        leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",
        // hook is from glyph U+21A9 in font KaTeX Main
        lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",
        leftlinesegment: doubleBrushStroke("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),
        leftbracketunder: doubleBrushStroke("M0 0 h120 V290 H399995 v120 H0z"),
        leftbracketover: doubleBrushStroke("M0 440 h120 V150 H399995 v-120 H0z"),
        leftmapsto: doubleBrushStroke("M40 281 V448H0V74H40V241H400000v40z"),
        // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
        leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",
        longequal: doubleBrushStroke("M0 50 h400000 v40H0z m0 194h40000v40H0z"),
        midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",
        midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",
        oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",
        oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",
        oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",
        oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",
        rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",
        rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",
        rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",
        rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",
        rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",
        rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",
        rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",
        rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",
        rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",
        righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",
        rightlinesegment: doubleBrushStroke("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),
        rightbracketunder: doubleBrushStroke("M399995 0 h-120 V290 H0 v120 H400000z"),
        rightbracketover: doubleBrushStroke("M399995 440 h-120 V150 H0 v-120 H399995z"),
        rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",
        // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
        twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",
        twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",
        // tilde1 is a modified version of a glyph from the MnSymbol package
        tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",
        // ditto tilde2, tilde3, & tilde4
        tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",
        tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",
        tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",
        // vec is from glyph U+20D7 in font KaTeX Main
        vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",
        // widehat1 is a modified version of a glyph from the MnSymbol package
        widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",
        // ditto widehat2, widehat3, & widehat4
        widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
        widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
        widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
        // widecheck paths are all inverted versions of widehat
        widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",
        widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
        widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
        widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
        // The next ten paths support reaction arrows from the mhchem package.
        // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX
        // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main
        baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",
        // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main
        rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",
        // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.
        // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em
        baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",
        rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",
        shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",
        shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"
      };
      tallDelim = /* @__PURE__ */ __name(function tallDelim2(label, midHeight) {
        switch (label) {
          case "lbrack":
            return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v" + midHeight + " v1759 h84z";
          case "rbrack":
            return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v" + midHeight + " v1759 h84z";
          case "vert":
            return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z";
          case "doublevert":
            return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z\nM367 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v" + midHeight + " v585 h43z";
          case "lfloor":
            return "M319 602 V0 H403 V602 v" + midHeight + " v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z";
          case "rfloor":
            return "M319 602 V0 H403 V602 v" + midHeight + " v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z";
          case "lceil":
            return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v602 h84z\nM403 1759 V0 H319 V1759 v" + midHeight + " v602 h84z";
          case "rceil":
            return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v602 h84z\nM347 1759 V0 h-84 V1759 v" + midHeight + " v602 h84z";
          case "lparen":
            return "M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0," + (midHeight + 84) + "c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-" + (midHeight + 92) + "c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";
          case "rparen":
            return "M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0," + (midHeight + 9) + "\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-" + (midHeight + 144) + "c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";
          default:
            throw new Error("Unknown stretchy delimiter.");
        }
      }, "tallDelim");
      DocumentFragment = class {
        static {
          __name(this, "DocumentFragment");
        }
        // Never used; needed for satisfying interface.
        constructor(children2) {
          this.children = children2;
          this.classes = [];
          this.height = 0;
          this.depth = 0;
          this.maxFontSize = 0;
          this.style = {};
        }
        hasClass(className) {
          return this.classes.includes(className);
        }
        /** Convert the fragment into a node. */
        toNode() {
          var frag = document.createDocumentFragment();
          for (var i2 = 0; i2 < this.children.length; i2++) {
            frag.appendChild(this.children[i2].toNode());
          }
          return frag;
        }
        /** Convert the fragment into HTML markup. */
        toMarkup() {
          var markup = "";
          for (var i2 = 0; i2 < this.children.length; i2++) {
            markup += this.children[i2].toMarkup();
          }
          return markup;
        }
        /**
         * Converts the math node into a string, similar to innerText. Applies to
         * MathDomNode's only.
         */
        toText() {
          var toText = /* @__PURE__ */ __name((child) => child.toText(), "toText");
          return this.children.map(toText).join("");
        }
      };
      ptPerUnit = {
        // https://en.wikibooks.org/wiki/LaTeX/Lengths and
        // https://tex.stackexchange.com/a/8263
        "pt": 1,
        // TeX point
        "mm": 7227 / 2540,
        // millimeter
        "cm": 7227 / 254,
        // centimeter
        "in": 72.27,
        // inch
        "bp": 803 / 800,
        // big (PostScript) points
        "pc": 12,
        // pica
        "dd": 1238 / 1157,
        // didot
        "cc": 14856 / 1157,
        // cicero (12 didot)
        "nd": 685 / 642,
        // new didot
        "nc": 1370 / 107,
        // new cicero (12 new didot)
        "sp": 1 / 65536,
        // scaled point (TeX's internal smallest unit)
        // https://tex.stackexchange.com/a/41371
        "px": 803 / 800
        // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX
      };
      relativeUnit = {
        "ex": true,
        "em": true,
        "mu": true
      };
      validUnit = /* @__PURE__ */ __name(function validUnit2(unit2) {
        if (typeof unit2 !== "string") {
          unit2 = unit2.unit;
        }
        return unit2 in ptPerUnit || unit2 in relativeUnit || unit2 === "ex";
      }, "validUnit");
      calculateSize2 = /* @__PURE__ */ __name(function calculateSize3(sizeValue, options2) {
        var scale3;
        if (sizeValue.unit in ptPerUnit) {
          scale3 = ptPerUnit[sizeValue.unit] / options2.fontMetrics().ptPerEm / options2.sizeMultiplier;
        } else if (sizeValue.unit === "mu") {
          scale3 = options2.fontMetrics().cssEmPerMu;
        } else {
          var unitOptions;
          if (options2.style.isTight()) {
            unitOptions = options2.havingStyle(options2.style.text());
          } else {
            unitOptions = options2;
          }
          if (sizeValue.unit === "ex") {
            scale3 = unitOptions.fontMetrics().xHeight;
          } else if (sizeValue.unit === "em") {
            scale3 = unitOptions.fontMetrics().quad;
          } else {
            throw new ParseError("Invalid unit: '" + sizeValue.unit + "'");
          }
          if (unitOptions !== options2) {
            scale3 *= unitOptions.sizeMultiplier / options2.sizeMultiplier;
          }
        }
        return Math.min(sizeValue.number * scale3, options2.maxSize);
      }, "calculateSize");
      makeEm = /* @__PURE__ */ __name(function makeEm2(n2) {
        return +n2.toFixed(4) + "em";
      }, "makeEm");
      createClass = /* @__PURE__ */ __name(function createClass2(classes3) {
        return classes3.filter((cls) => cls).join(" ");
      }, "createClass");
      initNode = /* @__PURE__ */ __name(function initNode2(classes3, options2, style3) {
        this.classes = classes3 || [];
        this.attributes = {};
        this.height = 0;
        this.depth = 0;
        this.maxFontSize = 0;
        this.style = style3 || {};
        if (options2) {
          if (options2.style.isTight()) {
            this.classes.push("mtight");
          }
          var color2 = options2.getColor();
          if (color2) {
            this.style.color = color2;
          }
        }
      }, "initNode");
      toNode = /* @__PURE__ */ __name(function toNode2(tagName) {
        var node2 = document.createElement(tagName);
        node2.className = createClass(this.classes);
        for (var key of Object.keys(this.style)) {
          node2.style[key] = this.style[key];
        }
        for (var attr of Object.keys(this.attributes)) {
          node2.setAttribute(attr, this.attributes[attr]);
        }
        for (var i2 = 0; i2 < this.children.length; i2++) {
          node2.appendChild(this.children[i2].toNode());
        }
        return node2;
      }, "toNode");
      invalidAttributeNameRegex = /[\s"'>/=\x00-\x1f]/;
      toMarkup = /* @__PURE__ */ __name(function toMarkup2(tagName) {
        var markup = "<" + tagName;
        if (this.classes.length) {
          markup += ' class="' + escape2(createClass(this.classes)) + '"';
        }
        var styles7 = "";
        for (var key of Object.keys(this.style)) {
          styles7 += hyphenate(key) + ":" + this.style[key] + ";";
        }
        if (styles7) {
          markup += ' style="' + escape2(styles7) + '"';
        }
        for (var attr of Object.keys(this.attributes)) {
          if (invalidAttributeNameRegex.test(attr)) {
            throw new ParseError("Invalid attribute name '" + attr + "'");
          }
          markup += " " + attr + '="' + escape2(this.attributes[attr]) + '"';
        }
        markup += ">";
        for (var i2 = 0; i2 < this.children.length; i2++) {
          markup += this.children[i2].toMarkup();
        }
        markup += "</" + tagName + ">";
        return markup;
      }, "toMarkup");
      Span = class {
        static {
          __name(this, "Span");
        }
        constructor(classes3, children2, options2, style3) {
          initNode.call(this, classes3, options2, style3);
          this.children = children2 || [];
        }
        /**
         * Sets an arbitrary attribute on the span. Warning: use this wisely. Not
         * all browsers support attributes the same, and having too many custom
         * attributes is probably bad.
         */
        setAttribute(attribute, value2) {
          this.attributes[attribute] = value2;
        }
        hasClass(className) {
          return this.classes.includes(className);
        }
        toNode() {
          return toNode.call(this, "span");
        }
        toMarkup() {
          return toMarkup.call(this, "span");
        }
      };
      Anchor = class {
        static {
          __name(this, "Anchor");
        }
        constructor(href, classes3, children2, options2) {
          initNode.call(this, classes3, options2);
          this.children = children2 || [];
          this.setAttribute("href", href);
        }
        setAttribute(attribute, value2) {
          this.attributes[attribute] = value2;
        }
        hasClass(className) {
          return this.classes.includes(className);
        }
        toNode() {
          return toNode.call(this, "a");
        }
        toMarkup() {
          return toMarkup.call(this, "a");
        }
      };
      Img = class {
        static {
          __name(this, "Img");
        }
        constructor(src, alt, style3) {
          this.alt = alt;
          this.src = src;
          this.classes = ["mord"];
          this.height = 0;
          this.depth = 0;
          this.maxFontSize = 0;
          this.style = style3;
        }
        hasClass(className) {
          return this.classes.includes(className);
        }
        toNode() {
          var node2 = document.createElement("img");
          node2.src = this.src;
          node2.alt = this.alt;
          node2.className = "mord";
          for (var key of Object.keys(this.style)) {
            node2.style[key] = this.style[key];
          }
          return node2;
        }
        toMarkup() {
          var markup = '<img src="' + escape2(this.src) + '"' + (' alt="' + escape2(this.alt) + '"');
          var styles7 = "";
          for (var key of Object.keys(this.style)) {
            styles7 += hyphenate(key) + ":" + this.style[key] + ";";
          }
          if (styles7) {
            markup += ' style="' + escape2(styles7) + '"';
          }
          markup += "'/>";
          return markup;
        }
      };
      iCombinations = {
        "\xEE": "\u0131\u0302",
        "\xEF": "\u0131\u0308",
        "\xED": "\u0131\u0301",
        // 'ī': '\u0131\u0304', // enable when we add Extended Latin
        "\xEC": "\u0131\u0300"
      };
      SymbolNode = class {
        static {
          __name(this, "SymbolNode");
        }
        constructor(text4, height2, depth, italic, skew, width3, classes3, style3) {
          this.text = text4;
          this.height = height2 || 0;
          this.depth = depth || 0;
          this.italic = italic || 0;
          this.skew = skew || 0;
          this.width = width3 || 0;
          this.classes = classes3 || [];
          this.style = style3 || {};
          this.maxFontSize = 0;
          var script = scriptFromCodepoint(this.text.charCodeAt(0));
          if (script) {
            this.classes.push(script + "_fallback");
          }
          if (/[îïíì]/.test(this.text)) {
            this.text = iCombinations[this.text];
          }
        }
        hasClass(className) {
          return this.classes.includes(className);
        }
        /**
         * Creates a text node or span from a symbol node. Note that a span is only
         * created if it is needed.
         */
        toNode() {
          var node2 = document.createTextNode(this.text);
          var span = null;
          if (this.italic > 0) {
            span = document.createElement("span");
            span.style.marginRight = makeEm(this.italic);
          }
          if (this.classes.length > 0) {
            span = span || document.createElement("span");
            span.className = createClass(this.classes);
          }
          for (var key of Object.keys(this.style)) {
            span = span || document.createElement("span");
            span.style[key] = this.style[key];
          }
          if (span) {
            span.appendChild(node2);
            return span;
          } else {
            return node2;
          }
        }
        /**
         * Creates markup for a symbol node.
         */
        toMarkup() {
          var needsSpan = false;
          var markup = "<span";
          if (this.classes.length) {
            needsSpan = true;
            markup += ' class="';
            markup += escape2(createClass(this.classes));
            markup += '"';
          }
          var styles7 = "";
          if (this.italic > 0) {
            styles7 += "margin-right:" + makeEm(this.italic) + ";";
          }
          for (var key of Object.keys(this.style)) {
            styles7 += hyphenate(key) + ":" + this.style[key] + ";";
          }
          if (styles7) {
            needsSpan = true;
            markup += ' style="' + escape2(styles7) + '"';
          }
          var escaped = escape2(this.text);
          if (needsSpan) {
            markup += ">";
            markup += escaped;
            markup += "</span>";
            return markup;
          } else {
            return escaped;
          }
        }
      };
      SvgNode = class {
        static {
          __name(this, "SvgNode");
        }
        constructor(children2, attributes) {
          this.children = children2 || [];
          this.attributes = attributes || {};
        }
        toNode() {
          var svgNS = "http://www.w3.org/2000/svg";
          var node2 = document.createElementNS(svgNS, "svg");
          for (var attr of Object.keys(this.attributes)) {
            node2.setAttribute(attr, this.attributes[attr]);
          }
          for (var i2 = 0; i2 < this.children.length; i2++) {
            node2.appendChild(this.children[i2].toNode());
          }
          return node2;
        }
        toMarkup() {
          var markup = '<svg xmlns="http://www.w3.org/2000/svg"';
          for (var attr of Object.keys(this.attributes)) {
            markup += " " + attr + '="' + escape2(this.attributes[attr]) + '"';
          }
          markup += ">";
          for (var i2 = 0; i2 < this.children.length; i2++) {
            markup += this.children[i2].toMarkup();
          }
          markup += "</svg>";
          return markup;
        }
      };
      PathNode = class {
        static {
          __name(this, "PathNode");
        }
        constructor(pathName, alternate) {
          this.pathName = pathName;
          this.alternate = alternate;
        }
        toNode() {
          var svgNS = "http://www.w3.org/2000/svg";
          var node2 = document.createElementNS(svgNS, "path");
          if (this.alternate) {
            node2.setAttribute("d", this.alternate);
          } else {
            node2.setAttribute("d", path[this.pathName]);
          }
          return node2;
        }
        toMarkup() {
          if (this.alternate) {
            return '<path d="' + escape2(this.alternate) + '"/>';
          } else {
            return '<path d="' + escape2(path[this.pathName]) + '"/>';
          }
        }
      };
      LineNode = class {
        static {
          __name(this, "LineNode");
        }
        constructor(attributes) {
          this.attributes = attributes || {};
        }
        toNode() {
          var svgNS = "http://www.w3.org/2000/svg";
          var node2 = document.createElementNS(svgNS, "line");
          for (var attr of Object.keys(this.attributes)) {
            node2.setAttribute(attr, this.attributes[attr]);
          }
          return node2;
        }
        toMarkup() {
          var markup = "<line";
          for (var attr of Object.keys(this.attributes)) {
            markup += " " + attr + '="' + escape2(this.attributes[attr]) + '"';
          }
          markup += "/>";
          return markup;
        }
      };
      __name(assertSymbolDomNode, "assertSymbolDomNode");
      __name(assertSpan, "assertSpan");
      hasHtmlDomChildren = /* @__PURE__ */ __name((node2) => node2 instanceof Span || node2 instanceof Anchor || node2 instanceof DocumentFragment, "hasHtmlDomChildren");
      fontMetricsData = {
        "AMS-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "65": [0, 0.68889, 0, 0, 0.72222],
          "66": [0, 0.68889, 0, 0, 0.66667],
          "67": [0, 0.68889, 0, 0, 0.72222],
          "68": [0, 0.68889, 0, 0, 0.72222],
          "69": [0, 0.68889, 0, 0, 0.66667],
          "70": [0, 0.68889, 0, 0, 0.61111],
          "71": [0, 0.68889, 0, 0, 0.77778],
          "72": [0, 0.68889, 0, 0, 0.77778],
          "73": [0, 0.68889, 0, 0, 0.38889],
          "74": [0.16667, 0.68889, 0, 0, 0.5],
          "75": [0, 0.68889, 0, 0, 0.77778],
          "76": [0, 0.68889, 0, 0, 0.66667],
          "77": [0, 0.68889, 0, 0, 0.94445],
          "78": [0, 0.68889, 0, 0, 0.72222],
          "79": [0.16667, 0.68889, 0, 0, 0.77778],
          "80": [0, 0.68889, 0, 0, 0.61111],
          "81": [0.16667, 0.68889, 0, 0, 0.77778],
          "82": [0, 0.68889, 0, 0, 0.72222],
          "83": [0, 0.68889, 0, 0, 0.55556],
          "84": [0, 0.68889, 0, 0, 0.66667],
          "85": [0, 0.68889, 0, 0, 0.72222],
          "86": [0, 0.68889, 0, 0, 0.72222],
          "87": [0, 0.68889, 0, 0, 1],
          "88": [0, 0.68889, 0, 0, 0.72222],
          "89": [0, 0.68889, 0, 0, 0.72222],
          "90": [0, 0.68889, 0, 0, 0.66667],
          "107": [0, 0.68889, 0, 0, 0.55556],
          "160": [0, 0, 0, 0, 0.25],
          "165": [0, 0.675, 0.025, 0, 0.75],
          "174": [0.15559, 0.69224, 0, 0, 0.94666],
          "240": [0, 0.68889, 0, 0, 0.55556],
          "295": [0, 0.68889, 0, 0, 0.54028],
          "710": [0, 0.825, 0, 0, 2.33334],
          "732": [0, 0.9, 0, 0, 2.33334],
          "770": [0, 0.825, 0, 0, 2.33334],
          "771": [0, 0.9, 0, 0, 2.33334],
          "989": [0.08167, 0.58167, 0, 0, 0.77778],
          "1008": [0, 0.43056, 0.04028, 0, 0.66667],
          "8245": [0, 0.54986, 0, 0, 0.275],
          "8463": [0, 0.68889, 0, 0, 0.54028],
          "8487": [0, 0.68889, 0, 0, 0.72222],
          "8498": [0, 0.68889, 0, 0, 0.55556],
          "8502": [0, 0.68889, 0, 0, 0.66667],
          "8503": [0, 0.68889, 0, 0, 0.44445],
          "8504": [0, 0.68889, 0, 0, 0.66667],
          "8513": [0, 0.68889, 0, 0, 0.63889],
          "8592": [-0.03598, 0.46402, 0, 0, 0.5],
          "8594": [-0.03598, 0.46402, 0, 0, 0.5],
          "8602": [-0.13313, 0.36687, 0, 0, 1],
          "8603": [-0.13313, 0.36687, 0, 0, 1],
          "8606": [0.01354, 0.52239, 0, 0, 1],
          "8608": [0.01354, 0.52239, 0, 0, 1],
          "8610": [0.01354, 0.52239, 0, 0, 1.11111],
          "8611": [0.01354, 0.52239, 0, 0, 1.11111],
          "8619": [0, 0.54986, 0, 0, 1],
          "8620": [0, 0.54986, 0, 0, 1],
          "8621": [-0.13313, 0.37788, 0, 0, 1.38889],
          "8622": [-0.13313, 0.36687, 0, 0, 1],
          "8624": [0, 0.69224, 0, 0, 0.5],
          "8625": [0, 0.69224, 0, 0, 0.5],
          "8630": [0, 0.43056, 0, 0, 1],
          "8631": [0, 0.43056, 0, 0, 1],
          "8634": [0.08198, 0.58198, 0, 0, 0.77778],
          "8635": [0.08198, 0.58198, 0, 0, 0.77778],
          "8638": [0.19444, 0.69224, 0, 0, 0.41667],
          "8639": [0.19444, 0.69224, 0, 0, 0.41667],
          "8642": [0.19444, 0.69224, 0, 0, 0.41667],
          "8643": [0.19444, 0.69224, 0, 0, 0.41667],
          "8644": [0.1808, 0.675, 0, 0, 1],
          "8646": [0.1808, 0.675, 0, 0, 1],
          "8647": [0.1808, 0.675, 0, 0, 1],
          "8648": [0.19444, 0.69224, 0, 0, 0.83334],
          "8649": [0.1808, 0.675, 0, 0, 1],
          "8650": [0.19444, 0.69224, 0, 0, 0.83334],
          "8651": [0.01354, 0.52239, 0, 0, 1],
          "8652": [0.01354, 0.52239, 0, 0, 1],
          "8653": [-0.13313, 0.36687, 0, 0, 1],
          "8654": [-0.13313, 0.36687, 0, 0, 1],
          "8655": [-0.13313, 0.36687, 0, 0, 1],
          "8666": [0.13667, 0.63667, 0, 0, 1],
          "8667": [0.13667, 0.63667, 0, 0, 1],
          "8669": [-0.13313, 0.37788, 0, 0, 1],
          "8672": [-0.064, 0.437, 0, 0, 1.334],
          "8674": [-0.064, 0.437, 0, 0, 1.334],
          "8705": [0, 0.825, 0, 0, 0.5],
          "8708": [0, 0.68889, 0, 0, 0.55556],
          "8709": [0.08167, 0.58167, 0, 0, 0.77778],
          "8717": [0, 0.43056, 0, 0, 0.42917],
          "8722": [-0.03598, 0.46402, 0, 0, 0.5],
          "8724": [0.08198, 0.69224, 0, 0, 0.77778],
          "8726": [0.08167, 0.58167, 0, 0, 0.77778],
          "8733": [0, 0.69224, 0, 0, 0.77778],
          "8736": [0, 0.69224, 0, 0, 0.72222],
          "8737": [0, 0.69224, 0, 0, 0.72222],
          "8738": [0.03517, 0.52239, 0, 0, 0.72222],
          "8739": [0.08167, 0.58167, 0, 0, 0.22222],
          "8740": [0.25142, 0.74111, 0, 0, 0.27778],
          "8741": [0.08167, 0.58167, 0, 0, 0.38889],
          "8742": [0.25142, 0.74111, 0, 0, 0.5],
          "8756": [0, 0.69224, 0, 0, 0.66667],
          "8757": [0, 0.69224, 0, 0, 0.66667],
          "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
          "8765": [-0.13313, 0.37788, 0, 0, 0.77778],
          "8769": [-0.13313, 0.36687, 0, 0, 0.77778],
          "8770": [-0.03625, 0.46375, 0, 0, 0.77778],
          "8774": [0.30274, 0.79383, 0, 0, 0.77778],
          "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
          "8778": [0.08167, 0.58167, 0, 0, 0.77778],
          "8782": [0.06062, 0.54986, 0, 0, 0.77778],
          "8783": [0.06062, 0.54986, 0, 0, 0.77778],
          "8785": [0.08198, 0.58198, 0, 0, 0.77778],
          "8786": [0.08198, 0.58198, 0, 0, 0.77778],
          "8787": [0.08198, 0.58198, 0, 0, 0.77778],
          "8790": [0, 0.69224, 0, 0, 0.77778],
          "8791": [0.22958, 0.72958, 0, 0, 0.77778],
          "8796": [0.08198, 0.91667, 0, 0, 0.77778],
          "8806": [0.25583, 0.75583, 0, 0, 0.77778],
          "8807": [0.25583, 0.75583, 0, 0, 0.77778],
          "8808": [0.25142, 0.75726, 0, 0, 0.77778],
          "8809": [0.25142, 0.75726, 0, 0, 0.77778],
          "8812": [0.25583, 0.75583, 0, 0, 0.5],
          "8814": [0.20576, 0.70576, 0, 0, 0.77778],
          "8815": [0.20576, 0.70576, 0, 0, 0.77778],
          "8816": [0.30274, 0.79383, 0, 0, 0.77778],
          "8817": [0.30274, 0.79383, 0, 0, 0.77778],
          "8818": [0.22958, 0.72958, 0, 0, 0.77778],
          "8819": [0.22958, 0.72958, 0, 0, 0.77778],
          "8822": [0.1808, 0.675, 0, 0, 0.77778],
          "8823": [0.1808, 0.675, 0, 0, 0.77778],
          "8828": [0.13667, 0.63667, 0, 0, 0.77778],
          "8829": [0.13667, 0.63667, 0, 0, 0.77778],
          "8830": [0.22958, 0.72958, 0, 0, 0.77778],
          "8831": [0.22958, 0.72958, 0, 0, 0.77778],
          "8832": [0.20576, 0.70576, 0, 0, 0.77778],
          "8833": [0.20576, 0.70576, 0, 0, 0.77778],
          "8840": [0.30274, 0.79383, 0, 0, 0.77778],
          "8841": [0.30274, 0.79383, 0, 0, 0.77778],
          "8842": [0.13597, 0.63597, 0, 0, 0.77778],
          "8843": [0.13597, 0.63597, 0, 0, 0.77778],
          "8847": [0.03517, 0.54986, 0, 0, 0.77778],
          "8848": [0.03517, 0.54986, 0, 0, 0.77778],
          "8858": [0.08198, 0.58198, 0, 0, 0.77778],
          "8859": [0.08198, 0.58198, 0, 0, 0.77778],
          "8861": [0.08198, 0.58198, 0, 0, 0.77778],
          "8862": [0, 0.675, 0, 0, 0.77778],
          "8863": [0, 0.675, 0, 0, 0.77778],
          "8864": [0, 0.675, 0, 0, 0.77778],
          "8865": [0, 0.675, 0, 0, 0.77778],
          "8872": [0, 0.69224, 0, 0, 0.61111],
          "8873": [0, 0.69224, 0, 0, 0.72222],
          "8874": [0, 0.69224, 0, 0, 0.88889],
          "8876": [0, 0.68889, 0, 0, 0.61111],
          "8877": [0, 0.68889, 0, 0, 0.61111],
          "8878": [0, 0.68889, 0, 0, 0.72222],
          "8879": [0, 0.68889, 0, 0, 0.72222],
          "8882": [0.03517, 0.54986, 0, 0, 0.77778],
          "8883": [0.03517, 0.54986, 0, 0, 0.77778],
          "8884": [0.13667, 0.63667, 0, 0, 0.77778],
          "8885": [0.13667, 0.63667, 0, 0, 0.77778],
          "8888": [0, 0.54986, 0, 0, 1.11111],
          "8890": [0.19444, 0.43056, 0, 0, 0.55556],
          "8891": [0.19444, 0.69224, 0, 0, 0.61111],
          "8892": [0.19444, 0.69224, 0, 0, 0.61111],
          "8901": [0, 0.54986, 0, 0, 0.27778],
          "8903": [0.08167, 0.58167, 0, 0, 0.77778],
          "8905": [0.08167, 0.58167, 0, 0, 0.77778],
          "8906": [0.08167, 0.58167, 0, 0, 0.77778],
          "8907": [0, 0.69224, 0, 0, 0.77778],
          "8908": [0, 0.69224, 0, 0, 0.77778],
          "8909": [-0.03598, 0.46402, 0, 0, 0.77778],
          "8910": [0, 0.54986, 0, 0, 0.76042],
          "8911": [0, 0.54986, 0, 0, 0.76042],
          "8912": [0.03517, 0.54986, 0, 0, 0.77778],
          "8913": [0.03517, 0.54986, 0, 0, 0.77778],
          "8914": [0, 0.54986, 0, 0, 0.66667],
          "8915": [0, 0.54986, 0, 0, 0.66667],
          "8916": [0, 0.69224, 0, 0, 0.66667],
          "8918": [0.0391, 0.5391, 0, 0, 0.77778],
          "8919": [0.0391, 0.5391, 0, 0, 0.77778],
          "8920": [0.03517, 0.54986, 0, 0, 1.33334],
          "8921": [0.03517, 0.54986, 0, 0, 1.33334],
          "8922": [0.38569, 0.88569, 0, 0, 0.77778],
          "8923": [0.38569, 0.88569, 0, 0, 0.77778],
          "8926": [0.13667, 0.63667, 0, 0, 0.77778],
          "8927": [0.13667, 0.63667, 0, 0, 0.77778],
          "8928": [0.30274, 0.79383, 0, 0, 0.77778],
          "8929": [0.30274, 0.79383, 0, 0, 0.77778],
          "8934": [0.23222, 0.74111, 0, 0, 0.77778],
          "8935": [0.23222, 0.74111, 0, 0, 0.77778],
          "8936": [0.23222, 0.74111, 0, 0, 0.77778],
          "8937": [0.23222, 0.74111, 0, 0, 0.77778],
          "8938": [0.20576, 0.70576, 0, 0, 0.77778],
          "8939": [0.20576, 0.70576, 0, 0, 0.77778],
          "8940": [0.30274, 0.79383, 0, 0, 0.77778],
          "8941": [0.30274, 0.79383, 0, 0, 0.77778],
          "8994": [0.19444, 0.69224, 0, 0, 0.77778],
          "8995": [0.19444, 0.69224, 0, 0, 0.77778],
          "9416": [0.15559, 0.69224, 0, 0, 0.90222],
          "9484": [0, 0.69224, 0, 0, 0.5],
          "9488": [0, 0.69224, 0, 0, 0.5],
          "9492": [0, 0.37788, 0, 0, 0.5],
          "9496": [0, 0.37788, 0, 0, 0.5],
          "9585": [0.19444, 0.68889, 0, 0, 0.88889],
          "9586": [0.19444, 0.74111, 0, 0, 0.88889],
          "9632": [0, 0.675, 0, 0, 0.77778],
          "9633": [0, 0.675, 0, 0, 0.77778],
          "9650": [0, 0.54986, 0, 0, 0.72222],
          "9651": [0, 0.54986, 0, 0, 0.72222],
          "9654": [0.03517, 0.54986, 0, 0, 0.77778],
          "9660": [0, 0.54986, 0, 0, 0.72222],
          "9661": [0, 0.54986, 0, 0, 0.72222],
          "9664": [0.03517, 0.54986, 0, 0, 0.77778],
          "9674": [0.11111, 0.69224, 0, 0, 0.66667],
          "9733": [0.19444, 0.69224, 0, 0, 0.94445],
          "10003": [0, 0.69224, 0, 0, 0.83334],
          "10016": [0, 0.69224, 0, 0, 0.83334],
          "10731": [0.11111, 0.69224, 0, 0, 0.66667],
          "10846": [0.19444, 0.75583, 0, 0, 0.61111],
          "10877": [0.13667, 0.63667, 0, 0, 0.77778],
          "10878": [0.13667, 0.63667, 0, 0, 0.77778],
          "10885": [0.25583, 0.75583, 0, 0, 0.77778],
          "10886": [0.25583, 0.75583, 0, 0, 0.77778],
          "10887": [0.13597, 0.63597, 0, 0, 0.77778],
          "10888": [0.13597, 0.63597, 0, 0, 0.77778],
          "10889": [0.26167, 0.75726, 0, 0, 0.77778],
          "10890": [0.26167, 0.75726, 0, 0, 0.77778],
          "10891": [0.48256, 0.98256, 0, 0, 0.77778],
          "10892": [0.48256, 0.98256, 0, 0, 0.77778],
          "10901": [0.13667, 0.63667, 0, 0, 0.77778],
          "10902": [0.13667, 0.63667, 0, 0, 0.77778],
          "10933": [0.25142, 0.75726, 0, 0, 0.77778],
          "10934": [0.25142, 0.75726, 0, 0, 0.77778],
          "10935": [0.26167, 0.75726, 0, 0, 0.77778],
          "10936": [0.26167, 0.75726, 0, 0, 0.77778],
          "10937": [0.26167, 0.75726, 0, 0, 0.77778],
          "10938": [0.26167, 0.75726, 0, 0, 0.77778],
          "10949": [0.25583, 0.75583, 0, 0, 0.77778],
          "10950": [0.25583, 0.75583, 0, 0, 0.77778],
          "10955": [0.28481, 0.79383, 0, 0, 0.77778],
          "10956": [0.28481, 0.79383, 0, 0, 0.77778],
          "57350": [0.08167, 0.58167, 0, 0, 0.22222],
          "57351": [0.08167, 0.58167, 0, 0, 0.38889],
          "57352": [0.08167, 0.58167, 0, 0, 0.77778],
          "57353": [0, 0.43056, 0.04028, 0, 0.66667],
          "57356": [0.25142, 0.75726, 0, 0, 0.77778],
          "57357": [0.25142, 0.75726, 0, 0, 0.77778],
          "57358": [0.41951, 0.91951, 0, 0, 0.77778],
          "57359": [0.30274, 0.79383, 0, 0, 0.77778],
          "57360": [0.30274, 0.79383, 0, 0, 0.77778],
          "57361": [0.41951, 0.91951, 0, 0, 0.77778],
          "57366": [0.25142, 0.75726, 0, 0, 0.77778],
          "57367": [0.25142, 0.75726, 0, 0, 0.77778],
          "57368": [0.25142, 0.75726, 0, 0, 0.77778],
          "57369": [0.25142, 0.75726, 0, 0, 0.77778],
          "57370": [0.13597, 0.63597, 0, 0, 0.77778],
          "57371": [0.13597, 0.63597, 0, 0, 0.77778]
        },
        "Caligraphic-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "65": [0, 0.68333, 0, 0.19445, 0.79847],
          "66": [0, 0.68333, 0.03041, 0.13889, 0.65681],
          "67": [0, 0.68333, 0.05834, 0.13889, 0.52653],
          "68": [0, 0.68333, 0.02778, 0.08334, 0.77139],
          "69": [0, 0.68333, 0.08944, 0.11111, 0.52778],
          "70": [0, 0.68333, 0.09931, 0.11111, 0.71875],
          "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],
          "72": [0, 0.68333, 965e-5, 0.11111, 0.84452],
          "73": [0, 0.68333, 0.07382, 0, 0.54452],
          "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],
          "75": [0, 0.68333, 0.01445, 0.05556, 0.76195],
          "76": [0, 0.68333, 0, 0.13889, 0.68972],
          "77": [0, 0.68333, 0, 0.13889, 1.2009],
          "78": [0, 0.68333, 0.14736, 0.08334, 0.82049],
          "79": [0, 0.68333, 0.02778, 0.11111, 0.79611],
          "80": [0, 0.68333, 0.08222, 0.08334, 0.69556],
          "81": [0.09722, 0.68333, 0, 0.11111, 0.81667],
          "82": [0, 0.68333, 0, 0.08334, 0.8475],
          "83": [0, 0.68333, 0.075, 0.13889, 0.60556],
          "84": [0, 0.68333, 0.25417, 0, 0.54464],
          "85": [0, 0.68333, 0.09931, 0.08334, 0.62583],
          "86": [0, 0.68333, 0.08222, 0, 0.61278],
          "87": [0, 0.68333, 0.08222, 0.08334, 0.98778],
          "88": [0, 0.68333, 0.14643, 0.13889, 0.7133],
          "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],
          "90": [0, 0.68333, 0.07944, 0.13889, 0.72473],
          "160": [0, 0, 0, 0, 0.25]
        },
        "Fraktur-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69141, 0, 0, 0.29574],
          "34": [0, 0.69141, 0, 0, 0.21471],
          "38": [0, 0.69141, 0, 0, 0.73786],
          "39": [0, 0.69141, 0, 0, 0.21201],
          "40": [0.24982, 0.74947, 0, 0, 0.38865],
          "41": [0.24982, 0.74947, 0, 0, 0.38865],
          "42": [0, 0.62119, 0, 0, 0.27764],
          "43": [0.08319, 0.58283, 0, 0, 0.75623],
          "44": [0, 0.10803, 0, 0, 0.27764],
          "45": [0.08319, 0.58283, 0, 0, 0.75623],
          "46": [0, 0.10803, 0, 0, 0.27764],
          "47": [0.24982, 0.74947, 0, 0, 0.50181],
          "48": [0, 0.47534, 0, 0, 0.50181],
          "49": [0, 0.47534, 0, 0, 0.50181],
          "50": [0, 0.47534, 0, 0, 0.50181],
          "51": [0.18906, 0.47534, 0, 0, 0.50181],
          "52": [0.18906, 0.47534, 0, 0, 0.50181],
          "53": [0.18906, 0.47534, 0, 0, 0.50181],
          "54": [0, 0.69141, 0, 0, 0.50181],
          "55": [0.18906, 0.47534, 0, 0, 0.50181],
          "56": [0, 0.69141, 0, 0, 0.50181],
          "57": [0.18906, 0.47534, 0, 0, 0.50181],
          "58": [0, 0.47534, 0, 0, 0.21606],
          "59": [0.12604, 0.47534, 0, 0, 0.21606],
          "61": [-0.13099, 0.36866, 0, 0, 0.75623],
          "63": [0, 0.69141, 0, 0, 0.36245],
          "65": [0, 0.69141, 0, 0, 0.7176],
          "66": [0, 0.69141, 0, 0, 0.88397],
          "67": [0, 0.69141, 0, 0, 0.61254],
          "68": [0, 0.69141, 0, 0, 0.83158],
          "69": [0, 0.69141, 0, 0, 0.66278],
          "70": [0.12604, 0.69141, 0, 0, 0.61119],
          "71": [0, 0.69141, 0, 0, 0.78539],
          "72": [0.06302, 0.69141, 0, 0, 0.7203],
          "73": [0, 0.69141, 0, 0, 0.55448],
          "74": [0.12604, 0.69141, 0, 0, 0.55231],
          "75": [0, 0.69141, 0, 0, 0.66845],
          "76": [0, 0.69141, 0, 0, 0.66602],
          "77": [0, 0.69141, 0, 0, 1.04953],
          "78": [0, 0.69141, 0, 0, 0.83212],
          "79": [0, 0.69141, 0, 0, 0.82699],
          "80": [0.18906, 0.69141, 0, 0, 0.82753],
          "81": [0.03781, 0.69141, 0, 0, 0.82699],
          "82": [0, 0.69141, 0, 0, 0.82807],
          "83": [0, 0.69141, 0, 0, 0.82861],
          "84": [0, 0.69141, 0, 0, 0.66899],
          "85": [0, 0.69141, 0, 0, 0.64576],
          "86": [0, 0.69141, 0, 0, 0.83131],
          "87": [0, 0.69141, 0, 0, 1.04602],
          "88": [0, 0.69141, 0, 0, 0.71922],
          "89": [0.18906, 0.69141, 0, 0, 0.83293],
          "90": [0.12604, 0.69141, 0, 0, 0.60201],
          "91": [0.24982, 0.74947, 0, 0, 0.27764],
          "93": [0.24982, 0.74947, 0, 0, 0.27764],
          "94": [0, 0.69141, 0, 0, 0.49965],
          "97": [0, 0.47534, 0, 0, 0.50046],
          "98": [0, 0.69141, 0, 0, 0.51315],
          "99": [0, 0.47534, 0, 0, 0.38946],
          "100": [0, 0.62119, 0, 0, 0.49857],
          "101": [0, 0.47534, 0, 0, 0.40053],
          "102": [0.18906, 0.69141, 0, 0, 0.32626],
          "103": [0.18906, 0.47534, 0, 0, 0.5037],
          "104": [0.18906, 0.69141, 0, 0, 0.52126],
          "105": [0, 0.69141, 0, 0, 0.27899],
          "106": [0, 0.69141, 0, 0, 0.28088],
          "107": [0, 0.69141, 0, 0, 0.38946],
          "108": [0, 0.69141, 0, 0, 0.27953],
          "109": [0, 0.47534, 0, 0, 0.76676],
          "110": [0, 0.47534, 0, 0, 0.52666],
          "111": [0, 0.47534, 0, 0, 0.48885],
          "112": [0.18906, 0.52396, 0, 0, 0.50046],
          "113": [0.18906, 0.47534, 0, 0, 0.48912],
          "114": [0, 0.47534, 0, 0, 0.38919],
          "115": [0, 0.47534, 0, 0, 0.44266],
          "116": [0, 0.62119, 0, 0, 0.33301],
          "117": [0, 0.47534, 0, 0, 0.5172],
          "118": [0, 0.52396, 0, 0, 0.5118],
          "119": [0, 0.52396, 0, 0, 0.77351],
          "120": [0.18906, 0.47534, 0, 0, 0.38865],
          "121": [0.18906, 0.47534, 0, 0, 0.49884],
          "122": [0.18906, 0.47534, 0, 0, 0.39054],
          "160": [0, 0, 0, 0, 0.25],
          "8216": [0, 0.69141, 0, 0, 0.21471],
          "8217": [0, 0.69141, 0, 0, 0.21471],
          "58112": [0, 0.62119, 0, 0, 0.49749],
          "58113": [0, 0.62119, 0, 0, 0.4983],
          "58114": [0.18906, 0.69141, 0, 0, 0.33328],
          "58115": [0.18906, 0.69141, 0, 0, 0.32923],
          "58116": [0.18906, 0.47534, 0, 0, 0.50343],
          "58117": [0, 0.69141, 0, 0, 0.33301],
          "58118": [0, 0.62119, 0, 0, 0.33409],
          "58119": [0, 0.47534, 0, 0, 0.50073]
        },
        "Main-Bold": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69444, 0, 0, 0.35],
          "34": [0, 0.69444, 0, 0, 0.60278],
          "35": [0.19444, 0.69444, 0, 0, 0.95833],
          "36": [0.05556, 0.75, 0, 0, 0.575],
          "37": [0.05556, 0.75, 0, 0, 0.95833],
          "38": [0, 0.69444, 0, 0, 0.89444],
          "39": [0, 0.69444, 0, 0, 0.31944],
          "40": [0.25, 0.75, 0, 0, 0.44722],
          "41": [0.25, 0.75, 0, 0, 0.44722],
          "42": [0, 0.75, 0, 0, 0.575],
          "43": [0.13333, 0.63333, 0, 0, 0.89444],
          "44": [0.19444, 0.15556, 0, 0, 0.31944],
          "45": [0, 0.44444, 0, 0, 0.38333],
          "46": [0, 0.15556, 0, 0, 0.31944],
          "47": [0.25, 0.75, 0, 0, 0.575],
          "48": [0, 0.64444, 0, 0, 0.575],
          "49": [0, 0.64444, 0, 0, 0.575],
          "50": [0, 0.64444, 0, 0, 0.575],
          "51": [0, 0.64444, 0, 0, 0.575],
          "52": [0, 0.64444, 0, 0, 0.575],
          "53": [0, 0.64444, 0, 0, 0.575],
          "54": [0, 0.64444, 0, 0, 0.575],
          "55": [0, 0.64444, 0, 0, 0.575],
          "56": [0, 0.64444, 0, 0, 0.575],
          "57": [0, 0.64444, 0, 0, 0.575],
          "58": [0, 0.44444, 0, 0, 0.31944],
          "59": [0.19444, 0.44444, 0, 0, 0.31944],
          "60": [0.08556, 0.58556, 0, 0, 0.89444],
          "61": [-0.10889, 0.39111, 0, 0, 0.89444],
          "62": [0.08556, 0.58556, 0, 0, 0.89444],
          "63": [0, 0.69444, 0, 0, 0.54305],
          "64": [0, 0.69444, 0, 0, 0.89444],
          "65": [0, 0.68611, 0, 0, 0.86944],
          "66": [0, 0.68611, 0, 0, 0.81805],
          "67": [0, 0.68611, 0, 0, 0.83055],
          "68": [0, 0.68611, 0, 0, 0.88194],
          "69": [0, 0.68611, 0, 0, 0.75555],
          "70": [0, 0.68611, 0, 0, 0.72361],
          "71": [0, 0.68611, 0, 0, 0.90416],
          "72": [0, 0.68611, 0, 0, 0.9],
          "73": [0, 0.68611, 0, 0, 0.43611],
          "74": [0, 0.68611, 0, 0, 0.59444],
          "75": [0, 0.68611, 0, 0, 0.90138],
          "76": [0, 0.68611, 0, 0, 0.69166],
          "77": [0, 0.68611, 0, 0, 1.09166],
          "78": [0, 0.68611, 0, 0, 0.9],
          "79": [0, 0.68611, 0, 0, 0.86388],
          "80": [0, 0.68611, 0, 0, 0.78611],
          "81": [0.19444, 0.68611, 0, 0, 0.86388],
          "82": [0, 0.68611, 0, 0, 0.8625],
          "83": [0, 0.68611, 0, 0, 0.63889],
          "84": [0, 0.68611, 0, 0, 0.8],
          "85": [0, 0.68611, 0, 0, 0.88472],
          "86": [0, 0.68611, 0.01597, 0, 0.86944],
          "87": [0, 0.68611, 0.01597, 0, 1.18888],
          "88": [0, 0.68611, 0, 0, 0.86944],
          "89": [0, 0.68611, 0.02875, 0, 0.86944],
          "90": [0, 0.68611, 0, 0, 0.70277],
          "91": [0.25, 0.75, 0, 0, 0.31944],
          "92": [0.25, 0.75, 0, 0, 0.575],
          "93": [0.25, 0.75, 0, 0, 0.31944],
          "94": [0, 0.69444, 0, 0, 0.575],
          "95": [0.31, 0.13444, 0.03194, 0, 0.575],
          "97": [0, 0.44444, 0, 0, 0.55902],
          "98": [0, 0.69444, 0, 0, 0.63889],
          "99": [0, 0.44444, 0, 0, 0.51111],
          "100": [0, 0.69444, 0, 0, 0.63889],
          "101": [0, 0.44444, 0, 0, 0.52708],
          "102": [0, 0.69444, 0.10903, 0, 0.35139],
          "103": [0.19444, 0.44444, 0.01597, 0, 0.575],
          "104": [0, 0.69444, 0, 0, 0.63889],
          "105": [0, 0.69444, 0, 0, 0.31944],
          "106": [0.19444, 0.69444, 0, 0, 0.35139],
          "107": [0, 0.69444, 0, 0, 0.60694],
          "108": [0, 0.69444, 0, 0, 0.31944],
          "109": [0, 0.44444, 0, 0, 0.95833],
          "110": [0, 0.44444, 0, 0, 0.63889],
          "111": [0, 0.44444, 0, 0, 0.575],
          "112": [0.19444, 0.44444, 0, 0, 0.63889],
          "113": [0.19444, 0.44444, 0, 0, 0.60694],
          "114": [0, 0.44444, 0, 0, 0.47361],
          "115": [0, 0.44444, 0, 0, 0.45361],
          "116": [0, 0.63492, 0, 0, 0.44722],
          "117": [0, 0.44444, 0, 0, 0.63889],
          "118": [0, 0.44444, 0.01597, 0, 0.60694],
          "119": [0, 0.44444, 0.01597, 0, 0.83055],
          "120": [0, 0.44444, 0, 0, 0.60694],
          "121": [0.19444, 0.44444, 0.01597, 0, 0.60694],
          "122": [0, 0.44444, 0, 0, 0.51111],
          "123": [0.25, 0.75, 0, 0, 0.575],
          "124": [0.25, 0.75, 0, 0, 0.31944],
          "125": [0.25, 0.75, 0, 0, 0.575],
          "126": [0.35, 0.34444, 0, 0, 0.575],
          "160": [0, 0, 0, 0, 0.25],
          "163": [0, 0.69444, 0, 0, 0.86853],
          "168": [0, 0.69444, 0, 0, 0.575],
          "172": [0, 0.44444, 0, 0, 0.76666],
          "176": [0, 0.69444, 0, 0, 0.86944],
          "177": [0.13333, 0.63333, 0, 0, 0.89444],
          "184": [0.17014, 0, 0, 0, 0.51111],
          "198": [0, 0.68611, 0, 0, 1.04166],
          "215": [0.13333, 0.63333, 0, 0, 0.89444],
          "216": [0.04861, 0.73472, 0, 0, 0.89444],
          "223": [0, 0.69444, 0, 0, 0.59722],
          "230": [0, 0.44444, 0, 0, 0.83055],
          "247": [0.13333, 0.63333, 0, 0, 0.89444],
          "248": [0.09722, 0.54167, 0, 0, 0.575],
          "305": [0, 0.44444, 0, 0, 0.31944],
          "338": [0, 0.68611, 0, 0, 1.16944],
          "339": [0, 0.44444, 0, 0, 0.89444],
          "567": [0.19444, 0.44444, 0, 0, 0.35139],
          "710": [0, 0.69444, 0, 0, 0.575],
          "711": [0, 0.63194, 0, 0, 0.575],
          "713": [0, 0.59611, 0, 0, 0.575],
          "714": [0, 0.69444, 0, 0, 0.575],
          "715": [0, 0.69444, 0, 0, 0.575],
          "728": [0, 0.69444, 0, 0, 0.575],
          "729": [0, 0.69444, 0, 0, 0.31944],
          "730": [0, 0.69444, 0, 0, 0.86944],
          "732": [0, 0.69444, 0, 0, 0.575],
          "733": [0, 0.69444, 0, 0, 0.575],
          "915": [0, 0.68611, 0, 0, 0.69166],
          "916": [0, 0.68611, 0, 0, 0.95833],
          "920": [0, 0.68611, 0, 0, 0.89444],
          "923": [0, 0.68611, 0, 0, 0.80555],
          "926": [0, 0.68611, 0, 0, 0.76666],
          "928": [0, 0.68611, 0, 0, 0.9],
          "931": [0, 0.68611, 0, 0, 0.83055],
          "933": [0, 0.68611, 0, 0, 0.89444],
          "934": [0, 0.68611, 0, 0, 0.83055],
          "936": [0, 0.68611, 0, 0, 0.89444],
          "937": [0, 0.68611, 0, 0, 0.83055],
          "8211": [0, 0.44444, 0.03194, 0, 0.575],
          "8212": [0, 0.44444, 0.03194, 0, 1.14999],
          "8216": [0, 0.69444, 0, 0, 0.31944],
          "8217": [0, 0.69444, 0, 0, 0.31944],
          "8220": [0, 0.69444, 0, 0, 0.60278],
          "8221": [0, 0.69444, 0, 0, 0.60278],
          "8224": [0.19444, 0.69444, 0, 0, 0.51111],
          "8225": [0.19444, 0.69444, 0, 0, 0.51111],
          "8242": [0, 0.55556, 0, 0, 0.34444],
          "8407": [0, 0.72444, 0.15486, 0, 0.575],
          "8463": [0, 0.69444, 0, 0, 0.66759],
          "8465": [0, 0.69444, 0, 0, 0.83055],
          "8467": [0, 0.69444, 0, 0, 0.47361],
          "8472": [0.19444, 0.44444, 0, 0, 0.74027],
          "8476": [0, 0.69444, 0, 0, 0.83055],
          "8501": [0, 0.69444, 0, 0, 0.70277],
          "8592": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8593": [0.19444, 0.69444, 0, 0, 0.575],
          "8594": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8595": [0.19444, 0.69444, 0, 0, 0.575],
          "8596": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8597": [0.25, 0.75, 0, 0, 0.575],
          "8598": [0.19444, 0.69444, 0, 0, 1.14999],
          "8599": [0.19444, 0.69444, 0, 0, 1.14999],
          "8600": [0.19444, 0.69444, 0, 0, 1.14999],
          "8601": [0.19444, 0.69444, 0, 0, 1.14999],
          "8636": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8637": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8640": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8641": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8656": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8657": [0.19444, 0.69444, 0, 0, 0.70277],
          "8658": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8659": [0.19444, 0.69444, 0, 0, 0.70277],
          "8660": [-0.10889, 0.39111, 0, 0, 1.14999],
          "8661": [0.25, 0.75, 0, 0, 0.70277],
          "8704": [0, 0.69444, 0, 0, 0.63889],
          "8706": [0, 0.69444, 0.06389, 0, 0.62847],
          "8707": [0, 0.69444, 0, 0, 0.63889],
          "8709": [0.05556, 0.75, 0, 0, 0.575],
          "8711": [0, 0.68611, 0, 0, 0.95833],
          "8712": [0.08556, 0.58556, 0, 0, 0.76666],
          "8715": [0.08556, 0.58556, 0, 0, 0.76666],
          "8722": [0.13333, 0.63333, 0, 0, 0.89444],
          "8723": [0.13333, 0.63333, 0, 0, 0.89444],
          "8725": [0.25, 0.75, 0, 0, 0.575],
          "8726": [0.25, 0.75, 0, 0, 0.575],
          "8727": [-0.02778, 0.47222, 0, 0, 0.575],
          "8728": [-0.02639, 0.47361, 0, 0, 0.575],
          "8729": [-0.02639, 0.47361, 0, 0, 0.575],
          "8730": [0.18, 0.82, 0, 0, 0.95833],
          "8733": [0, 0.44444, 0, 0, 0.89444],
          "8734": [0, 0.44444, 0, 0, 1.14999],
          "8736": [0, 0.69224, 0, 0, 0.72222],
          "8739": [0.25, 0.75, 0, 0, 0.31944],
          "8741": [0.25, 0.75, 0, 0, 0.575],
          "8743": [0, 0.55556, 0, 0, 0.76666],
          "8744": [0, 0.55556, 0, 0, 0.76666],
          "8745": [0, 0.55556, 0, 0, 0.76666],
          "8746": [0, 0.55556, 0, 0, 0.76666],
          "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875],
          "8764": [-0.10889, 0.39111, 0, 0, 0.89444],
          "8768": [0.19444, 0.69444, 0, 0, 0.31944],
          "8771": [222e-5, 0.50222, 0, 0, 0.89444],
          "8773": [0.027, 0.638, 0, 0, 0.894],
          "8776": [0.02444, 0.52444, 0, 0, 0.89444],
          "8781": [222e-5, 0.50222, 0, 0, 0.89444],
          "8801": [222e-5, 0.50222, 0, 0, 0.89444],
          "8804": [0.19667, 0.69667, 0, 0, 0.89444],
          "8805": [0.19667, 0.69667, 0, 0, 0.89444],
          "8810": [0.08556, 0.58556, 0, 0, 1.14999],
          "8811": [0.08556, 0.58556, 0, 0, 1.14999],
          "8826": [0.08556, 0.58556, 0, 0, 0.89444],
          "8827": [0.08556, 0.58556, 0, 0, 0.89444],
          "8834": [0.08556, 0.58556, 0, 0, 0.89444],
          "8835": [0.08556, 0.58556, 0, 0, 0.89444],
          "8838": [0.19667, 0.69667, 0, 0, 0.89444],
          "8839": [0.19667, 0.69667, 0, 0, 0.89444],
          "8846": [0, 0.55556, 0, 0, 0.76666],
          "8849": [0.19667, 0.69667, 0, 0, 0.89444],
          "8850": [0.19667, 0.69667, 0, 0, 0.89444],
          "8851": [0, 0.55556, 0, 0, 0.76666],
          "8852": [0, 0.55556, 0, 0, 0.76666],
          "8853": [0.13333, 0.63333, 0, 0, 0.89444],
          "8854": [0.13333, 0.63333, 0, 0, 0.89444],
          "8855": [0.13333, 0.63333, 0, 0, 0.89444],
          "8856": [0.13333, 0.63333, 0, 0, 0.89444],
          "8857": [0.13333, 0.63333, 0, 0, 0.89444],
          "8866": [0, 0.69444, 0, 0, 0.70277],
          "8867": [0, 0.69444, 0, 0, 0.70277],
          "8868": [0, 0.69444, 0, 0, 0.89444],
          "8869": [0, 0.69444, 0, 0, 0.89444],
          "8900": [-0.02639, 0.47361, 0, 0, 0.575],
          "8901": [-0.02639, 0.47361, 0, 0, 0.31944],
          "8902": [-0.02778, 0.47222, 0, 0, 0.575],
          "8968": [0.25, 0.75, 0, 0, 0.51111],
          "8969": [0.25, 0.75, 0, 0, 0.51111],
          "8970": [0.25, 0.75, 0, 0, 0.51111],
          "8971": [0.25, 0.75, 0, 0, 0.51111],
          "8994": [-0.13889, 0.36111, 0, 0, 1.14999],
          "8995": [-0.13889, 0.36111, 0, 0, 1.14999],
          "9651": [0.19444, 0.69444, 0, 0, 1.02222],
          "9657": [-0.02778, 0.47222, 0, 0, 0.575],
          "9661": [0.19444, 0.69444, 0, 0, 1.02222],
          "9667": [-0.02778, 0.47222, 0, 0, 0.575],
          "9711": [0.19444, 0.69444, 0, 0, 1.14999],
          "9824": [0.12963, 0.69444, 0, 0, 0.89444],
          "9825": [0.12963, 0.69444, 0, 0, 0.89444],
          "9826": [0.12963, 0.69444, 0, 0, 0.89444],
          "9827": [0.12963, 0.69444, 0, 0, 0.89444],
          "9837": [0, 0.75, 0, 0, 0.44722],
          "9838": [0.19444, 0.69444, 0, 0, 0.44722],
          "9839": [0.19444, 0.69444, 0, 0, 0.44722],
          "10216": [0.25, 0.75, 0, 0, 0.44722],
          "10217": [0.25, 0.75, 0, 0, 0.44722],
          "10815": [0, 0.68611, 0, 0, 0.9],
          "10927": [0.19667, 0.69667, 0, 0, 0.89444],
          "10928": [0.19667, 0.69667, 0, 0, 0.89444],
          "57376": [0.19444, 0.69444, 0, 0, 0]
        },
        "Main-BoldItalic": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69444, 0.11417, 0, 0.38611],
          "34": [0, 0.69444, 0.07939, 0, 0.62055],
          "35": [0.19444, 0.69444, 0.06833, 0, 0.94444],
          "37": [0.05556, 0.75, 0.12861, 0, 0.94444],
          "38": [0, 0.69444, 0.08528, 0, 0.88555],
          "39": [0, 0.69444, 0.12945, 0, 0.35555],
          "40": [0.25, 0.75, 0.15806, 0, 0.47333],
          "41": [0.25, 0.75, 0.03306, 0, 0.47333],
          "42": [0, 0.75, 0.14333, 0, 0.59111],
          "43": [0.10333, 0.60333, 0.03306, 0, 0.88555],
          "44": [0.19444, 0.14722, 0, 0, 0.35555],
          "45": [0, 0.44444, 0.02611, 0, 0.41444],
          "46": [0, 0.14722, 0, 0, 0.35555],
          "47": [0.25, 0.75, 0.15806, 0, 0.59111],
          "48": [0, 0.64444, 0.13167, 0, 0.59111],
          "49": [0, 0.64444, 0.13167, 0, 0.59111],
          "50": [0, 0.64444, 0.13167, 0, 0.59111],
          "51": [0, 0.64444, 0.13167, 0, 0.59111],
          "52": [0.19444, 0.64444, 0.13167, 0, 0.59111],
          "53": [0, 0.64444, 0.13167, 0, 0.59111],
          "54": [0, 0.64444, 0.13167, 0, 0.59111],
          "55": [0.19444, 0.64444, 0.13167, 0, 0.59111],
          "56": [0, 0.64444, 0.13167, 0, 0.59111],
          "57": [0, 0.64444, 0.13167, 0, 0.59111],
          "58": [0, 0.44444, 0.06695, 0, 0.35555],
          "59": [0.19444, 0.44444, 0.06695, 0, 0.35555],
          "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555],
          "63": [0, 0.69444, 0.11472, 0, 0.59111],
          "64": [0, 0.69444, 0.09208, 0, 0.88555],
          "65": [0, 0.68611, 0, 0, 0.86555],
          "66": [0, 0.68611, 0.0992, 0, 0.81666],
          "67": [0, 0.68611, 0.14208, 0, 0.82666],
          "68": [0, 0.68611, 0.09062, 0, 0.87555],
          "69": [0, 0.68611, 0.11431, 0, 0.75666],
          "70": [0, 0.68611, 0.12903, 0, 0.72722],
          "71": [0, 0.68611, 0.07347, 0, 0.89527],
          "72": [0, 0.68611, 0.17208, 0, 0.8961],
          "73": [0, 0.68611, 0.15681, 0, 0.47166],
          "74": [0, 0.68611, 0.145, 0, 0.61055],
          "75": [0, 0.68611, 0.14208, 0, 0.89499],
          "76": [0, 0.68611, 0, 0, 0.69777],
          "77": [0, 0.68611, 0.17208, 0, 1.07277],
          "78": [0, 0.68611, 0.17208, 0, 0.8961],
          "79": [0, 0.68611, 0.09062, 0, 0.85499],
          "80": [0, 0.68611, 0.0992, 0, 0.78721],
          "81": [0.19444, 0.68611, 0.09062, 0, 0.85499],
          "82": [0, 0.68611, 0.02559, 0, 0.85944],
          "83": [0, 0.68611, 0.11264, 0, 0.64999],
          "84": [0, 0.68611, 0.12903, 0, 0.7961],
          "85": [0, 0.68611, 0.17208, 0, 0.88083],
          "86": [0, 0.68611, 0.18625, 0, 0.86555],
          "87": [0, 0.68611, 0.18625, 0, 1.15999],
          "88": [0, 0.68611, 0.15681, 0, 0.86555],
          "89": [0, 0.68611, 0.19803, 0, 0.86555],
          "90": [0, 0.68611, 0.14208, 0, 0.70888],
          "91": [0.25, 0.75, 0.1875, 0, 0.35611],
          "93": [0.25, 0.75, 0.09972, 0, 0.35611],
          "94": [0, 0.69444, 0.06709, 0, 0.59111],
          "95": [0.31, 0.13444, 0.09811, 0, 0.59111],
          "97": [0, 0.44444, 0.09426, 0, 0.59111],
          "98": [0, 0.69444, 0.07861, 0, 0.53222],
          "99": [0, 0.44444, 0.05222, 0, 0.53222],
          "100": [0, 0.69444, 0.10861, 0, 0.59111],
          "101": [0, 0.44444, 0.085, 0, 0.53222],
          "102": [0.19444, 0.69444, 0.21778, 0, 0.4],
          "103": [0.19444, 0.44444, 0.105, 0, 0.53222],
          "104": [0, 0.69444, 0.09426, 0, 0.59111],
          "105": [0, 0.69326, 0.11387, 0, 0.35555],
          "106": [0.19444, 0.69326, 0.1672, 0, 0.35555],
          "107": [0, 0.69444, 0.11111, 0, 0.53222],
          "108": [0, 0.69444, 0.10861, 0, 0.29666],
          "109": [0, 0.44444, 0.09426, 0, 0.94444],
          "110": [0, 0.44444, 0.09426, 0, 0.64999],
          "111": [0, 0.44444, 0.07861, 0, 0.59111],
          "112": [0.19444, 0.44444, 0.07861, 0, 0.59111],
          "113": [0.19444, 0.44444, 0.105, 0, 0.53222],
          "114": [0, 0.44444, 0.11111, 0, 0.50167],
          "115": [0, 0.44444, 0.08167, 0, 0.48694],
          "116": [0, 0.63492, 0.09639, 0, 0.385],
          "117": [0, 0.44444, 0.09426, 0, 0.62055],
          "118": [0, 0.44444, 0.11111, 0, 0.53222],
          "119": [0, 0.44444, 0.11111, 0, 0.76777],
          "120": [0, 0.44444, 0.12583, 0, 0.56055],
          "121": [0.19444, 0.44444, 0.105, 0, 0.56166],
          "122": [0, 0.44444, 0.13889, 0, 0.49055],
          "126": [0.35, 0.34444, 0.11472, 0, 0.59111],
          "160": [0, 0, 0, 0, 0.25],
          "168": [0, 0.69444, 0.11473, 0, 0.59111],
          "176": [0, 0.69444, 0, 0, 0.94888],
          "184": [0.17014, 0, 0, 0, 0.53222],
          "198": [0, 0.68611, 0.11431, 0, 1.02277],
          "216": [0.04861, 0.73472, 0.09062, 0, 0.88555],
          "223": [0.19444, 0.69444, 0.09736, 0, 0.665],
          "230": [0, 0.44444, 0.085, 0, 0.82666],
          "248": [0.09722, 0.54167, 0.09458, 0, 0.59111],
          "305": [0, 0.44444, 0.09426, 0, 0.35555],
          "338": [0, 0.68611, 0.11431, 0, 1.14054],
          "339": [0, 0.44444, 0.085, 0, 0.82666],
          "567": [0.19444, 0.44444, 0.04611, 0, 0.385],
          "710": [0, 0.69444, 0.06709, 0, 0.59111],
          "711": [0, 0.63194, 0.08271, 0, 0.59111],
          "713": [0, 0.59444, 0.10444, 0, 0.59111],
          "714": [0, 0.69444, 0.08528, 0, 0.59111],
          "715": [0, 0.69444, 0, 0, 0.59111],
          "728": [0, 0.69444, 0.10333, 0, 0.59111],
          "729": [0, 0.69444, 0.12945, 0, 0.35555],
          "730": [0, 0.69444, 0, 0, 0.94888],
          "732": [0, 0.69444, 0.11472, 0, 0.59111],
          "733": [0, 0.69444, 0.11472, 0, 0.59111],
          "915": [0, 0.68611, 0.12903, 0, 0.69777],
          "916": [0, 0.68611, 0, 0, 0.94444],
          "920": [0, 0.68611, 0.09062, 0, 0.88555],
          "923": [0, 0.68611, 0, 0, 0.80666],
          "926": [0, 0.68611, 0.15092, 0, 0.76777],
          "928": [0, 0.68611, 0.17208, 0, 0.8961],
          "931": [0, 0.68611, 0.11431, 0, 0.82666],
          "933": [0, 0.68611, 0.10778, 0, 0.88555],
          "934": [0, 0.68611, 0.05632, 0, 0.82666],
          "936": [0, 0.68611, 0.10778, 0, 0.88555],
          "937": [0, 0.68611, 0.0992, 0, 0.82666],
          "8211": [0, 0.44444, 0.09811, 0, 0.59111],
          "8212": [0, 0.44444, 0.09811, 0, 1.18221],
          "8216": [0, 0.69444, 0.12945, 0, 0.35555],
          "8217": [0, 0.69444, 0.12945, 0, 0.35555],
          "8220": [0, 0.69444, 0.16772, 0, 0.62055],
          "8221": [0, 0.69444, 0.07939, 0, 0.62055]
        },
        "Main-Italic": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69444, 0.12417, 0, 0.30667],
          "34": [0, 0.69444, 0.06961, 0, 0.51444],
          "35": [0.19444, 0.69444, 0.06616, 0, 0.81777],
          "37": [0.05556, 0.75, 0.13639, 0, 0.81777],
          "38": [0, 0.69444, 0.09694, 0, 0.76666],
          "39": [0, 0.69444, 0.12417, 0, 0.30667],
          "40": [0.25, 0.75, 0.16194, 0, 0.40889],
          "41": [0.25, 0.75, 0.03694, 0, 0.40889],
          "42": [0, 0.75, 0.14917, 0, 0.51111],
          "43": [0.05667, 0.56167, 0.03694, 0, 0.76666],
          "44": [0.19444, 0.10556, 0, 0, 0.30667],
          "45": [0, 0.43056, 0.02826, 0, 0.35778],
          "46": [0, 0.10556, 0, 0, 0.30667],
          "47": [0.25, 0.75, 0.16194, 0, 0.51111],
          "48": [0, 0.64444, 0.13556, 0, 0.51111],
          "49": [0, 0.64444, 0.13556, 0, 0.51111],
          "50": [0, 0.64444, 0.13556, 0, 0.51111],
          "51": [0, 0.64444, 0.13556, 0, 0.51111],
          "52": [0.19444, 0.64444, 0.13556, 0, 0.51111],
          "53": [0, 0.64444, 0.13556, 0, 0.51111],
          "54": [0, 0.64444, 0.13556, 0, 0.51111],
          "55": [0.19444, 0.64444, 0.13556, 0, 0.51111],
          "56": [0, 0.64444, 0.13556, 0, 0.51111],
          "57": [0, 0.64444, 0.13556, 0, 0.51111],
          "58": [0, 0.43056, 0.0582, 0, 0.30667],
          "59": [0.19444, 0.43056, 0.0582, 0, 0.30667],
          "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666],
          "63": [0, 0.69444, 0.1225, 0, 0.51111],
          "64": [0, 0.69444, 0.09597, 0, 0.76666],
          "65": [0, 0.68333, 0, 0, 0.74333],
          "66": [0, 0.68333, 0.10257, 0, 0.70389],
          "67": [0, 0.68333, 0.14528, 0, 0.71555],
          "68": [0, 0.68333, 0.09403, 0, 0.755],
          "69": [0, 0.68333, 0.12028, 0, 0.67833],
          "70": [0, 0.68333, 0.13305, 0, 0.65277],
          "71": [0, 0.68333, 0.08722, 0, 0.77361],
          "72": [0, 0.68333, 0.16389, 0, 0.74333],
          "73": [0, 0.68333, 0.15806, 0, 0.38555],
          "74": [0, 0.68333, 0.14028, 0, 0.525],
          "75": [0, 0.68333, 0.14528, 0, 0.76888],
          "76": [0, 0.68333, 0, 0, 0.62722],
          "77": [0, 0.68333, 0.16389, 0, 0.89666],
          "78": [0, 0.68333, 0.16389, 0, 0.74333],
          "79": [0, 0.68333, 0.09403, 0, 0.76666],
          "80": [0, 0.68333, 0.10257, 0, 0.67833],
          "81": [0.19444, 0.68333, 0.09403, 0, 0.76666],
          "82": [0, 0.68333, 0.03868, 0, 0.72944],
          "83": [0, 0.68333, 0.11972, 0, 0.56222],
          "84": [0, 0.68333, 0.13305, 0, 0.71555],
          "85": [0, 0.68333, 0.16389, 0, 0.74333],
          "86": [0, 0.68333, 0.18361, 0, 0.74333],
          "87": [0, 0.68333, 0.18361, 0, 0.99888],
          "88": [0, 0.68333, 0.15806, 0, 0.74333],
          "89": [0, 0.68333, 0.19383, 0, 0.74333],
          "90": [0, 0.68333, 0.14528, 0, 0.61333],
          "91": [0.25, 0.75, 0.1875, 0, 0.30667],
          "93": [0.25, 0.75, 0.10528, 0, 0.30667],
          "94": [0, 0.69444, 0.06646, 0, 0.51111],
          "95": [0.31, 0.12056, 0.09208, 0, 0.51111],
          "97": [0, 0.43056, 0.07671, 0, 0.51111],
          "98": [0, 0.69444, 0.06312, 0, 0.46],
          "99": [0, 0.43056, 0.05653, 0, 0.46],
          "100": [0, 0.69444, 0.10333, 0, 0.51111],
          "101": [0, 0.43056, 0.07514, 0, 0.46],
          "102": [0.19444, 0.69444, 0.21194, 0, 0.30667],
          "103": [0.19444, 0.43056, 0.08847, 0, 0.46],
          "104": [0, 0.69444, 0.07671, 0, 0.51111],
          "105": [0, 0.65536, 0.1019, 0, 0.30667],
          "106": [0.19444, 0.65536, 0.14467, 0, 0.30667],
          "107": [0, 0.69444, 0.10764, 0, 0.46],
          "108": [0, 0.69444, 0.10333, 0, 0.25555],
          "109": [0, 0.43056, 0.07671, 0, 0.81777],
          "110": [0, 0.43056, 0.07671, 0, 0.56222],
          "111": [0, 0.43056, 0.06312, 0, 0.51111],
          "112": [0.19444, 0.43056, 0.06312, 0, 0.51111],
          "113": [0.19444, 0.43056, 0.08847, 0, 0.46],
          "114": [0, 0.43056, 0.10764, 0, 0.42166],
          "115": [0, 0.43056, 0.08208, 0, 0.40889],
          "116": [0, 0.61508, 0.09486, 0, 0.33222],
          "117": [0, 0.43056, 0.07671, 0, 0.53666],
          "118": [0, 0.43056, 0.10764, 0, 0.46],
          "119": [0, 0.43056, 0.10764, 0, 0.66444],
          "120": [0, 0.43056, 0.12042, 0, 0.46389],
          "121": [0.19444, 0.43056, 0.08847, 0, 0.48555],
          "122": [0, 0.43056, 0.12292, 0, 0.40889],
          "126": [0.35, 0.31786, 0.11585, 0, 0.51111],
          "160": [0, 0, 0, 0, 0.25],
          "168": [0, 0.66786, 0.10474, 0, 0.51111],
          "176": [0, 0.69444, 0, 0, 0.83129],
          "184": [0.17014, 0, 0, 0, 0.46],
          "198": [0, 0.68333, 0.12028, 0, 0.88277],
          "216": [0.04861, 0.73194, 0.09403, 0, 0.76666],
          "223": [0.19444, 0.69444, 0.10514, 0, 0.53666],
          "230": [0, 0.43056, 0.07514, 0, 0.71555],
          "248": [0.09722, 0.52778, 0.09194, 0, 0.51111],
          "338": [0, 0.68333, 0.12028, 0, 0.98499],
          "339": [0, 0.43056, 0.07514, 0, 0.71555],
          "710": [0, 0.69444, 0.06646, 0, 0.51111],
          "711": [0, 0.62847, 0.08295, 0, 0.51111],
          "713": [0, 0.56167, 0.10333, 0, 0.51111],
          "714": [0, 0.69444, 0.09694, 0, 0.51111],
          "715": [0, 0.69444, 0, 0, 0.51111],
          "728": [0, 0.69444, 0.10806, 0, 0.51111],
          "729": [0, 0.66786, 0.11752, 0, 0.30667],
          "730": [0, 0.69444, 0, 0, 0.83129],
          "732": [0, 0.66786, 0.11585, 0, 0.51111],
          "733": [0, 0.69444, 0.1225, 0, 0.51111],
          "915": [0, 0.68333, 0.13305, 0, 0.62722],
          "916": [0, 0.68333, 0, 0, 0.81777],
          "920": [0, 0.68333, 0.09403, 0, 0.76666],
          "923": [0, 0.68333, 0, 0, 0.69222],
          "926": [0, 0.68333, 0.15294, 0, 0.66444],
          "928": [0, 0.68333, 0.16389, 0, 0.74333],
          "931": [0, 0.68333, 0.12028, 0, 0.71555],
          "933": [0, 0.68333, 0.11111, 0, 0.76666],
          "934": [0, 0.68333, 0.05986, 0, 0.71555],
          "936": [0, 0.68333, 0.11111, 0, 0.76666],
          "937": [0, 0.68333, 0.10257, 0, 0.71555],
          "8211": [0, 0.43056, 0.09208, 0, 0.51111],
          "8212": [0, 0.43056, 0.09208, 0, 1.02222],
          "8216": [0, 0.69444, 0.12417, 0, 0.30667],
          "8217": [0, 0.69444, 0.12417, 0, 0.30667],
          "8220": [0, 0.69444, 0.1685, 0, 0.51444],
          "8221": [0, 0.69444, 0.06961, 0, 0.51444],
          "8463": [0, 0.68889, 0, 0, 0.54028]
        },
        "Main-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69444, 0, 0, 0.27778],
          "34": [0, 0.69444, 0, 0, 0.5],
          "35": [0.19444, 0.69444, 0, 0, 0.83334],
          "36": [0.05556, 0.75, 0, 0, 0.5],
          "37": [0.05556, 0.75, 0, 0, 0.83334],
          "38": [0, 0.69444, 0, 0, 0.77778],
          "39": [0, 0.69444, 0, 0, 0.27778],
          "40": [0.25, 0.75, 0, 0, 0.38889],
          "41": [0.25, 0.75, 0, 0, 0.38889],
          "42": [0, 0.75, 0, 0, 0.5],
          "43": [0.08333, 0.58333, 0, 0, 0.77778],
          "44": [0.19444, 0.10556, 0, 0, 0.27778],
          "45": [0, 0.43056, 0, 0, 0.33333],
          "46": [0, 0.10556, 0, 0, 0.27778],
          "47": [0.25, 0.75, 0, 0, 0.5],
          "48": [0, 0.64444, 0, 0, 0.5],
          "49": [0, 0.64444, 0, 0, 0.5],
          "50": [0, 0.64444, 0, 0, 0.5],
          "51": [0, 0.64444, 0, 0, 0.5],
          "52": [0, 0.64444, 0, 0, 0.5],
          "53": [0, 0.64444, 0, 0, 0.5],
          "54": [0, 0.64444, 0, 0, 0.5],
          "55": [0, 0.64444, 0, 0, 0.5],
          "56": [0, 0.64444, 0, 0, 0.5],
          "57": [0, 0.64444, 0, 0, 0.5],
          "58": [0, 0.43056, 0, 0, 0.27778],
          "59": [0.19444, 0.43056, 0, 0, 0.27778],
          "60": [0.0391, 0.5391, 0, 0, 0.77778],
          "61": [-0.13313, 0.36687, 0, 0, 0.77778],
          "62": [0.0391, 0.5391, 0, 0, 0.77778],
          "63": [0, 0.69444, 0, 0, 0.47222],
          "64": [0, 0.69444, 0, 0, 0.77778],
          "65": [0, 0.68333, 0, 0, 0.75],
          "66": [0, 0.68333, 0, 0, 0.70834],
          "67": [0, 0.68333, 0, 0, 0.72222],
          "68": [0, 0.68333, 0, 0, 0.76389],
          "69": [0, 0.68333, 0, 0, 0.68056],
          "70": [0, 0.68333, 0, 0, 0.65278],
          "71": [0, 0.68333, 0, 0, 0.78472],
          "72": [0, 0.68333, 0, 0, 0.75],
          "73": [0, 0.68333, 0, 0, 0.36111],
          "74": [0, 0.68333, 0, 0, 0.51389],
          "75": [0, 0.68333, 0, 0, 0.77778],
          "76": [0, 0.68333, 0, 0, 0.625],
          "77": [0, 0.68333, 0, 0, 0.91667],
          "78": [0, 0.68333, 0, 0, 0.75],
          "79": [0, 0.68333, 0, 0, 0.77778],
          "80": [0, 0.68333, 0, 0, 0.68056],
          "81": [0.19444, 0.68333, 0, 0, 0.77778],
          "82": [0, 0.68333, 0, 0, 0.73611],
          "83": [0, 0.68333, 0, 0, 0.55556],
          "84": [0, 0.68333, 0, 0, 0.72222],
          "85": [0, 0.68333, 0, 0, 0.75],
          "86": [0, 0.68333, 0.01389, 0, 0.75],
          "87": [0, 0.68333, 0.01389, 0, 1.02778],
          "88": [0, 0.68333, 0, 0, 0.75],
          "89": [0, 0.68333, 0.025, 0, 0.75],
          "90": [0, 0.68333, 0, 0, 0.61111],
          "91": [0.25, 0.75, 0, 0, 0.27778],
          "92": [0.25, 0.75, 0, 0, 0.5],
          "93": [0.25, 0.75, 0, 0, 0.27778],
          "94": [0, 0.69444, 0, 0, 0.5],
          "95": [0.31, 0.12056, 0.02778, 0, 0.5],
          "97": [0, 0.43056, 0, 0, 0.5],
          "98": [0, 0.69444, 0, 0, 0.55556],
          "99": [0, 0.43056, 0, 0, 0.44445],
          "100": [0, 0.69444, 0, 0, 0.55556],
          "101": [0, 0.43056, 0, 0, 0.44445],
          "102": [0, 0.69444, 0.07778, 0, 0.30556],
          "103": [0.19444, 0.43056, 0.01389, 0, 0.5],
          "104": [0, 0.69444, 0, 0, 0.55556],
          "105": [0, 0.66786, 0, 0, 0.27778],
          "106": [0.19444, 0.66786, 0, 0, 0.30556],
          "107": [0, 0.69444, 0, 0, 0.52778],
          "108": [0, 0.69444, 0, 0, 0.27778],
          "109": [0, 0.43056, 0, 0, 0.83334],
          "110": [0, 0.43056, 0, 0, 0.55556],
          "111": [0, 0.43056, 0, 0, 0.5],
          "112": [0.19444, 0.43056, 0, 0, 0.55556],
          "113": [0.19444, 0.43056, 0, 0, 0.52778],
          "114": [0, 0.43056, 0, 0, 0.39167],
          "115": [0, 0.43056, 0, 0, 0.39445],
          "116": [0, 0.61508, 0, 0, 0.38889],
          "117": [0, 0.43056, 0, 0, 0.55556],
          "118": [0, 0.43056, 0.01389, 0, 0.52778],
          "119": [0, 0.43056, 0.01389, 0, 0.72222],
          "120": [0, 0.43056, 0, 0, 0.52778],
          "121": [0.19444, 0.43056, 0.01389, 0, 0.52778],
          "122": [0, 0.43056, 0, 0, 0.44445],
          "123": [0.25, 0.75, 0, 0, 0.5],
          "124": [0.25, 0.75, 0, 0, 0.27778],
          "125": [0.25, 0.75, 0, 0, 0.5],
          "126": [0.35, 0.31786, 0, 0, 0.5],
          "160": [0, 0, 0, 0, 0.25],
          "163": [0, 0.69444, 0, 0, 0.76909],
          "167": [0.19444, 0.69444, 0, 0, 0.44445],
          "168": [0, 0.66786, 0, 0, 0.5],
          "172": [0, 0.43056, 0, 0, 0.66667],
          "176": [0, 0.69444, 0, 0, 0.75],
          "177": [0.08333, 0.58333, 0, 0, 0.77778],
          "182": [0.19444, 0.69444, 0, 0, 0.61111],
          "184": [0.17014, 0, 0, 0, 0.44445],
          "198": [0, 0.68333, 0, 0, 0.90278],
          "215": [0.08333, 0.58333, 0, 0, 0.77778],
          "216": [0.04861, 0.73194, 0, 0, 0.77778],
          "223": [0, 0.69444, 0, 0, 0.5],
          "230": [0, 0.43056, 0, 0, 0.72222],
          "247": [0.08333, 0.58333, 0, 0, 0.77778],
          "248": [0.09722, 0.52778, 0, 0, 0.5],
          "305": [0, 0.43056, 0, 0, 0.27778],
          "338": [0, 0.68333, 0, 0, 1.01389],
          "339": [0, 0.43056, 0, 0, 0.77778],
          "567": [0.19444, 0.43056, 0, 0, 0.30556],
          "710": [0, 0.69444, 0, 0, 0.5],
          "711": [0, 0.62847, 0, 0, 0.5],
          "713": [0, 0.56778, 0, 0, 0.5],
          "714": [0, 0.69444, 0, 0, 0.5],
          "715": [0, 0.69444, 0, 0, 0.5],
          "728": [0, 0.69444, 0, 0, 0.5],
          "729": [0, 0.66786, 0, 0, 0.27778],
          "730": [0, 0.69444, 0, 0, 0.75],
          "732": [0, 0.66786, 0, 0, 0.5],
          "733": [0, 0.69444, 0, 0, 0.5],
          "915": [0, 0.68333, 0, 0, 0.625],
          "916": [0, 0.68333, 0, 0, 0.83334],
          "920": [0, 0.68333, 0, 0, 0.77778],
          "923": [0, 0.68333, 0, 0, 0.69445],
          "926": [0, 0.68333, 0, 0, 0.66667],
          "928": [0, 0.68333, 0, 0, 0.75],
          "931": [0, 0.68333, 0, 0, 0.72222],
          "933": [0, 0.68333, 0, 0, 0.77778],
          "934": [0, 0.68333, 0, 0, 0.72222],
          "936": [0, 0.68333, 0, 0, 0.77778],
          "937": [0, 0.68333, 0, 0, 0.72222],
          "8211": [0, 0.43056, 0.02778, 0, 0.5],
          "8212": [0, 0.43056, 0.02778, 0, 1],
          "8216": [0, 0.69444, 0, 0, 0.27778],
          "8217": [0, 0.69444, 0, 0, 0.27778],
          "8220": [0, 0.69444, 0, 0, 0.5],
          "8221": [0, 0.69444, 0, 0, 0.5],
          "8224": [0.19444, 0.69444, 0, 0, 0.44445],
          "8225": [0.19444, 0.69444, 0, 0, 0.44445],
          "8230": [0, 0.123, 0, 0, 1.172],
          "8242": [0, 0.55556, 0, 0, 0.275],
          "8407": [0, 0.71444, 0.15382, 0, 0.5],
          "8463": [0, 0.68889, 0, 0, 0.54028],
          "8465": [0, 0.69444, 0, 0, 0.72222],
          "8467": [0, 0.69444, 0, 0.11111, 0.41667],
          "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646],
          "8476": [0, 0.69444, 0, 0, 0.72222],
          "8501": [0, 0.69444, 0, 0, 0.61111],
          "8592": [-0.13313, 0.36687, 0, 0, 1],
          "8593": [0.19444, 0.69444, 0, 0, 0.5],
          "8594": [-0.13313, 0.36687, 0, 0, 1],
          "8595": [0.19444, 0.69444, 0, 0, 0.5],
          "8596": [-0.13313, 0.36687, 0, 0, 1],
          "8597": [0.25, 0.75, 0, 0, 0.5],
          "8598": [0.19444, 0.69444, 0, 0, 1],
          "8599": [0.19444, 0.69444, 0, 0, 1],
          "8600": [0.19444, 0.69444, 0, 0, 1],
          "8601": [0.19444, 0.69444, 0, 0, 1],
          "8614": [0.011, 0.511, 0, 0, 1],
          "8617": [0.011, 0.511, 0, 0, 1.126],
          "8618": [0.011, 0.511, 0, 0, 1.126],
          "8636": [-0.13313, 0.36687, 0, 0, 1],
          "8637": [-0.13313, 0.36687, 0, 0, 1],
          "8640": [-0.13313, 0.36687, 0, 0, 1],
          "8641": [-0.13313, 0.36687, 0, 0, 1],
          "8652": [0.011, 0.671, 0, 0, 1],
          "8656": [-0.13313, 0.36687, 0, 0, 1],
          "8657": [0.19444, 0.69444, 0, 0, 0.61111],
          "8658": [-0.13313, 0.36687, 0, 0, 1],
          "8659": [0.19444, 0.69444, 0, 0, 0.61111],
          "8660": [-0.13313, 0.36687, 0, 0, 1],
          "8661": [0.25, 0.75, 0, 0, 0.61111],
          "8704": [0, 0.69444, 0, 0, 0.55556],
          "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309],
          "8707": [0, 0.69444, 0, 0, 0.55556],
          "8709": [0.05556, 0.75, 0, 0, 0.5],
          "8711": [0, 0.68333, 0, 0, 0.83334],
          "8712": [0.0391, 0.5391, 0, 0, 0.66667],
          "8715": [0.0391, 0.5391, 0, 0, 0.66667],
          "8722": [0.08333, 0.58333, 0, 0, 0.77778],
          "8723": [0.08333, 0.58333, 0, 0, 0.77778],
          "8725": [0.25, 0.75, 0, 0, 0.5],
          "8726": [0.25, 0.75, 0, 0, 0.5],
          "8727": [-0.03472, 0.46528, 0, 0, 0.5],
          "8728": [-0.05555, 0.44445, 0, 0, 0.5],
          "8729": [-0.05555, 0.44445, 0, 0, 0.5],
          "8730": [0.2, 0.8, 0, 0, 0.83334],
          "8733": [0, 0.43056, 0, 0, 0.77778],
          "8734": [0, 0.43056, 0, 0, 1],
          "8736": [0, 0.69224, 0, 0, 0.72222],
          "8739": [0.25, 0.75, 0, 0, 0.27778],
          "8741": [0.25, 0.75, 0, 0, 0.5],
          "8743": [0, 0.55556, 0, 0, 0.66667],
          "8744": [0, 0.55556, 0, 0, 0.66667],
          "8745": [0, 0.55556, 0, 0, 0.66667],
          "8746": [0, 0.55556, 0, 0, 0.66667],
          "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667],
          "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
          "8768": [0.19444, 0.69444, 0, 0, 0.27778],
          "8771": [-0.03625, 0.46375, 0, 0, 0.77778],
          "8773": [-0.022, 0.589, 0, 0, 0.778],
          "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
          "8781": [-0.03625, 0.46375, 0, 0, 0.77778],
          "8784": [-0.133, 0.673, 0, 0, 0.778],
          "8801": [-0.03625, 0.46375, 0, 0, 0.77778],
          "8804": [0.13597, 0.63597, 0, 0, 0.77778],
          "8805": [0.13597, 0.63597, 0, 0, 0.77778],
          "8810": [0.0391, 0.5391, 0, 0, 1],
          "8811": [0.0391, 0.5391, 0, 0, 1],
          "8826": [0.0391, 0.5391, 0, 0, 0.77778],
          "8827": [0.0391, 0.5391, 0, 0, 0.77778],
          "8834": [0.0391, 0.5391, 0, 0, 0.77778],
          "8835": [0.0391, 0.5391, 0, 0, 0.77778],
          "8838": [0.13597, 0.63597, 0, 0, 0.77778],
          "8839": [0.13597, 0.63597, 0, 0, 0.77778],
          "8846": [0, 0.55556, 0, 0, 0.66667],
          "8849": [0.13597, 0.63597, 0, 0, 0.77778],
          "8850": [0.13597, 0.63597, 0, 0, 0.77778],
          "8851": [0, 0.55556, 0, 0, 0.66667],
          "8852": [0, 0.55556, 0, 0, 0.66667],
          "8853": [0.08333, 0.58333, 0, 0, 0.77778],
          "8854": [0.08333, 0.58333, 0, 0, 0.77778],
          "8855": [0.08333, 0.58333, 0, 0, 0.77778],
          "8856": [0.08333, 0.58333, 0, 0, 0.77778],
          "8857": [0.08333, 0.58333, 0, 0, 0.77778],
          "8866": [0, 0.69444, 0, 0, 0.61111],
          "8867": [0, 0.69444, 0, 0, 0.61111],
          "8868": [0, 0.69444, 0, 0, 0.77778],
          "8869": [0, 0.69444, 0, 0, 0.77778],
          "8872": [0.249, 0.75, 0, 0, 0.867],
          "8900": [-0.05555, 0.44445, 0, 0, 0.5],
          "8901": [-0.05555, 0.44445, 0, 0, 0.27778],
          "8902": [-0.03472, 0.46528, 0, 0, 0.5],
          "8904": [5e-3, 0.505, 0, 0, 0.9],
          "8942": [0.03, 0.903, 0, 0, 0.278],
          "8943": [-0.19, 0.313, 0, 0, 1.172],
          "8945": [-0.1, 0.823, 0, 0, 1.282],
          "8968": [0.25, 0.75, 0, 0, 0.44445],
          "8969": [0.25, 0.75, 0, 0, 0.44445],
          "8970": [0.25, 0.75, 0, 0, 0.44445],
          "8971": [0.25, 0.75, 0, 0, 0.44445],
          "8994": [-0.14236, 0.35764, 0, 0, 1],
          "8995": [-0.14236, 0.35764, 0, 0, 1],
          "9136": [0.244, 0.744, 0, 0, 0.412],
          "9137": [0.244, 0.745, 0, 0, 0.412],
          "9651": [0.19444, 0.69444, 0, 0, 0.88889],
          "9657": [-0.03472, 0.46528, 0, 0, 0.5],
          "9661": [0.19444, 0.69444, 0, 0, 0.88889],
          "9667": [-0.03472, 0.46528, 0, 0, 0.5],
          "9711": [0.19444, 0.69444, 0, 0, 1],
          "9824": [0.12963, 0.69444, 0, 0, 0.77778],
          "9825": [0.12963, 0.69444, 0, 0, 0.77778],
          "9826": [0.12963, 0.69444, 0, 0, 0.77778],
          "9827": [0.12963, 0.69444, 0, 0, 0.77778],
          "9837": [0, 0.75, 0, 0, 0.38889],
          "9838": [0.19444, 0.69444, 0, 0, 0.38889],
          "9839": [0.19444, 0.69444, 0, 0, 0.38889],
          "10216": [0.25, 0.75, 0, 0, 0.38889],
          "10217": [0.25, 0.75, 0, 0, 0.38889],
          "10222": [0.244, 0.744, 0, 0, 0.412],
          "10223": [0.244, 0.745, 0, 0, 0.412],
          "10229": [0.011, 0.511, 0, 0, 1.609],
          "10230": [0.011, 0.511, 0, 0, 1.638],
          "10231": [0.011, 0.511, 0, 0, 1.859],
          "10232": [0.024, 0.525, 0, 0, 1.609],
          "10233": [0.024, 0.525, 0, 0, 1.638],
          "10234": [0.024, 0.525, 0, 0, 1.858],
          "10236": [0.011, 0.511, 0, 0, 1.638],
          "10815": [0, 0.68333, 0, 0, 0.75],
          "10927": [0.13597, 0.63597, 0, 0, 0.77778],
          "10928": [0.13597, 0.63597, 0, 0, 0.77778],
          "57376": [0.19444, 0.69444, 0, 0, 0]
        },
        "Math-BoldItalic": {
          "32": [0, 0, 0, 0, 0.25],
          "48": [0, 0.44444, 0, 0, 0.575],
          "49": [0, 0.44444, 0, 0, 0.575],
          "50": [0, 0.44444, 0, 0, 0.575],
          "51": [0.19444, 0.44444, 0, 0, 0.575],
          "52": [0.19444, 0.44444, 0, 0, 0.575],
          "53": [0.19444, 0.44444, 0, 0, 0.575],
          "54": [0, 0.64444, 0, 0, 0.575],
          "55": [0.19444, 0.44444, 0, 0, 0.575],
          "56": [0, 0.64444, 0, 0, 0.575],
          "57": [0.19444, 0.44444, 0, 0, 0.575],
          "65": [0, 0.68611, 0, 0, 0.86944],
          "66": [0, 0.68611, 0.04835, 0, 0.8664],
          "67": [0, 0.68611, 0.06979, 0, 0.81694],
          "68": [0, 0.68611, 0.03194, 0, 0.93812],
          "69": [0, 0.68611, 0.05451, 0, 0.81007],
          "70": [0, 0.68611, 0.15972, 0, 0.68889],
          "71": [0, 0.68611, 0, 0, 0.88673],
          "72": [0, 0.68611, 0.08229, 0, 0.98229],
          "73": [0, 0.68611, 0.07778, 0, 0.51111],
          "74": [0, 0.68611, 0.10069, 0, 0.63125],
          "75": [0, 0.68611, 0.06979, 0, 0.97118],
          "76": [0, 0.68611, 0, 0, 0.75555],
          "77": [0, 0.68611, 0.11424, 0, 1.14201],
          "78": [0, 0.68611, 0.11424, 0, 0.95034],
          "79": [0, 0.68611, 0.03194, 0, 0.83666],
          "80": [0, 0.68611, 0.15972, 0, 0.72309],
          "81": [0.19444, 0.68611, 0, 0, 0.86861],
          "82": [0, 0.68611, 421e-5, 0, 0.87235],
          "83": [0, 0.68611, 0.05382, 0, 0.69271],
          "84": [0, 0.68611, 0.15972, 0, 0.63663],
          "85": [0, 0.68611, 0.11424, 0, 0.80027],
          "86": [0, 0.68611, 0.25555, 0, 0.67778],
          "87": [0, 0.68611, 0.15972, 0, 1.09305],
          "88": [0, 0.68611, 0.07778, 0, 0.94722],
          "89": [0, 0.68611, 0.25555, 0, 0.67458],
          "90": [0, 0.68611, 0.06979, 0, 0.77257],
          "97": [0, 0.44444, 0, 0, 0.63287],
          "98": [0, 0.69444, 0, 0, 0.52083],
          "99": [0, 0.44444, 0, 0, 0.51342],
          "100": [0, 0.69444, 0, 0, 0.60972],
          "101": [0, 0.44444, 0, 0, 0.55361],
          "102": [0.19444, 0.69444, 0.11042, 0, 0.56806],
          "103": [0.19444, 0.44444, 0.03704, 0, 0.5449],
          "104": [0, 0.69444, 0, 0, 0.66759],
          "105": [0, 0.69326, 0, 0, 0.4048],
          "106": [0.19444, 0.69326, 0.0622, 0, 0.47083],
          "107": [0, 0.69444, 0.01852, 0, 0.6037],
          "108": [0, 0.69444, 88e-4, 0, 0.34815],
          "109": [0, 0.44444, 0, 0, 1.0324],
          "110": [0, 0.44444, 0, 0, 0.71296],
          "111": [0, 0.44444, 0, 0, 0.58472],
          "112": [0.19444, 0.44444, 0, 0, 0.60092],
          "113": [0.19444, 0.44444, 0.03704, 0, 0.54213],
          "114": [0, 0.44444, 0.03194, 0, 0.5287],
          "115": [0, 0.44444, 0, 0, 0.53125],
          "116": [0, 0.63492, 0, 0, 0.41528],
          "117": [0, 0.44444, 0, 0, 0.68102],
          "118": [0, 0.44444, 0.03704, 0, 0.56666],
          "119": [0, 0.44444, 0.02778, 0, 0.83148],
          "120": [0, 0.44444, 0, 0, 0.65903],
          "121": [0.19444, 0.44444, 0.03704, 0, 0.59028],
          "122": [0, 0.44444, 0.04213, 0, 0.55509],
          "160": [0, 0, 0, 0, 0.25],
          "915": [0, 0.68611, 0.15972, 0, 0.65694],
          "916": [0, 0.68611, 0, 0, 0.95833],
          "920": [0, 0.68611, 0.03194, 0, 0.86722],
          "923": [0, 0.68611, 0, 0, 0.80555],
          "926": [0, 0.68611, 0.07458, 0, 0.84125],
          "928": [0, 0.68611, 0.08229, 0, 0.98229],
          "931": [0, 0.68611, 0.05451, 0, 0.88507],
          "933": [0, 0.68611, 0.15972, 0, 0.67083],
          "934": [0, 0.68611, 0, 0, 0.76666],
          "936": [0, 0.68611, 0.11653, 0, 0.71402],
          "937": [0, 0.68611, 0.04835, 0, 0.8789],
          "945": [0, 0.44444, 0, 0, 0.76064],
          "946": [0.19444, 0.69444, 0.03403, 0, 0.65972],
          "947": [0.19444, 0.44444, 0.06389, 0, 0.59003],
          "948": [0, 0.69444, 0.03819, 0, 0.52222],
          "949": [0, 0.44444, 0, 0, 0.52882],
          "950": [0.19444, 0.69444, 0.06215, 0, 0.50833],
          "951": [0.19444, 0.44444, 0.03704, 0, 0.6],
          "952": [0, 0.69444, 0.03194, 0, 0.5618],
          "953": [0, 0.44444, 0, 0, 0.41204],
          "954": [0, 0.44444, 0, 0, 0.66759],
          "955": [0, 0.69444, 0, 0, 0.67083],
          "956": [0.19444, 0.44444, 0, 0, 0.70787],
          "957": [0, 0.44444, 0.06898, 0, 0.57685],
          "958": [0.19444, 0.69444, 0.03021, 0, 0.50833],
          "959": [0, 0.44444, 0, 0, 0.58472],
          "960": [0, 0.44444, 0.03704, 0, 0.68241],
          "961": [0.19444, 0.44444, 0, 0, 0.6118],
          "962": [0.09722, 0.44444, 0.07917, 0, 0.42361],
          "963": [0, 0.44444, 0.03704, 0, 0.68588],
          "964": [0, 0.44444, 0.13472, 0, 0.52083],
          "965": [0, 0.44444, 0.03704, 0, 0.63055],
          "966": [0.19444, 0.44444, 0, 0, 0.74722],
          "967": [0.19444, 0.44444, 0, 0, 0.71805],
          "968": [0.19444, 0.69444, 0.03704, 0, 0.75833],
          "969": [0, 0.44444, 0.03704, 0, 0.71782],
          "977": [0, 0.69444, 0, 0, 0.69155],
          "981": [0.19444, 0.69444, 0, 0, 0.7125],
          "982": [0, 0.44444, 0.03194, 0, 0.975],
          "1009": [0.19444, 0.44444, 0, 0, 0.6118],
          "1013": [0, 0.44444, 0, 0, 0.48333],
          "57649": [0, 0.44444, 0, 0, 0.39352],
          "57911": [0.19444, 0.44444, 0, 0, 0.43889]
        },
        "Math-Italic": {
          "32": [0, 0, 0, 0, 0.25],
          "48": [0, 0.43056, 0, 0, 0.5],
          "49": [0, 0.43056, 0, 0, 0.5],
          "50": [0, 0.43056, 0, 0, 0.5],
          "51": [0.19444, 0.43056, 0, 0, 0.5],
          "52": [0.19444, 0.43056, 0, 0, 0.5],
          "53": [0.19444, 0.43056, 0, 0, 0.5],
          "54": [0, 0.64444, 0, 0, 0.5],
          "55": [0.19444, 0.43056, 0, 0, 0.5],
          "56": [0, 0.64444, 0, 0, 0.5],
          "57": [0.19444, 0.43056, 0, 0, 0.5],
          "65": [0, 0.68333, 0, 0.13889, 0.75],
          "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
          "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
          "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
          "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
          "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
          "71": [0, 0.68333, 0, 0.08334, 0.78625],
          "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
          "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
          "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
          "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
          "76": [0, 0.68333, 0, 0.02778, 0.68056],
          "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
          "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
          "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
          "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
          "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
          "82": [0, 0.68333, 773e-5, 0.08334, 0.75929],
          "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
          "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
          "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
          "86": [0, 0.68333, 0.22222, 0, 0.58333],
          "87": [0, 0.68333, 0.13889, 0, 0.94445],
          "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
          "89": [0, 0.68333, 0.22222, 0, 0.58056],
          "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
          "97": [0, 0.43056, 0, 0, 0.52859],
          "98": [0, 0.69444, 0, 0, 0.42917],
          "99": [0, 0.43056, 0, 0.05556, 0.43276],
          "100": [0, 0.69444, 0, 0.16667, 0.52049],
          "101": [0, 0.43056, 0, 0.05556, 0.46563],
          "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
          "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
          "104": [0, 0.69444, 0, 0, 0.57616],
          "105": [0, 0.65952, 0, 0, 0.34451],
          "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
          "107": [0, 0.69444, 0.03148, 0, 0.5206],
          "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
          "109": [0, 0.43056, 0, 0, 0.87801],
          "110": [0, 0.43056, 0, 0, 0.60023],
          "111": [0, 0.43056, 0, 0.05556, 0.48472],
          "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
          "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
          "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
          "115": [0, 0.43056, 0, 0.05556, 0.46875],
          "116": [0, 0.61508, 0, 0.08334, 0.36111],
          "117": [0, 0.43056, 0, 0.02778, 0.57246],
          "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
          "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
          "120": [0, 0.43056, 0, 0.02778, 0.57153],
          "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
          "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
          "160": [0, 0, 0, 0, 0.25],
          "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
          "916": [0, 0.68333, 0, 0.16667, 0.83334],
          "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
          "923": [0, 0.68333, 0, 0.16667, 0.69445],
          "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
          "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
          "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
          "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
          "934": [0, 0.68333, 0, 0.08334, 0.66667],
          "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
          "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
          "945": [0, 0.43056, 37e-4, 0.02778, 0.6397],
          "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
          "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
          "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
          "949": [0, 0.43056, 0, 0.08334, 0.46632],
          "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
          "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
          "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
          "953": [0, 0.43056, 0, 0.05556, 0.35394],
          "954": [0, 0.43056, 0, 0, 0.57616],
          "955": [0, 0.69444, 0, 0, 0.58334],
          "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
          "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
          "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
          "959": [0, 0.43056, 0, 0.05556, 0.48472],
          "960": [0, 0.43056, 0.03588, 0, 0.57003],
          "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
          "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
          "963": [0, 0.43056, 0.03588, 0, 0.57141],
          "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
          "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
          "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
          "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
          "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
          "969": [0, 0.43056, 0.03588, 0, 0.62245],
          "977": [0, 0.69444, 0, 0.08334, 0.59144],
          "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
          "982": [0, 0.43056, 0.02778, 0, 0.82813],
          "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
          "1013": [0, 0.43056, 0, 0.05556, 0.4059],
          "57649": [0, 0.43056, 0, 0.02778, 0.32246],
          "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403]
        },
        "SansSerif-Bold": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69444, 0, 0, 0.36667],
          "34": [0, 0.69444, 0, 0, 0.55834],
          "35": [0.19444, 0.69444, 0, 0, 0.91667],
          "36": [0.05556, 0.75, 0, 0, 0.55],
          "37": [0.05556, 0.75, 0, 0, 1.02912],
          "38": [0, 0.69444, 0, 0, 0.83056],
          "39": [0, 0.69444, 0, 0, 0.30556],
          "40": [0.25, 0.75, 0, 0, 0.42778],
          "41": [0.25, 0.75, 0, 0, 0.42778],
          "42": [0, 0.75, 0, 0, 0.55],
          "43": [0.11667, 0.61667, 0, 0, 0.85556],
          "44": [0.10556, 0.13056, 0, 0, 0.30556],
          "45": [0, 0.45833, 0, 0, 0.36667],
          "46": [0, 0.13056, 0, 0, 0.30556],
          "47": [0.25, 0.75, 0, 0, 0.55],
          "48": [0, 0.69444, 0, 0, 0.55],
          "49": [0, 0.69444, 0, 0, 0.55],
          "50": [0, 0.69444, 0, 0, 0.55],
          "51": [0, 0.69444, 0, 0, 0.55],
          "52": [0, 0.69444, 0, 0, 0.55],
          "53": [0, 0.69444, 0, 0, 0.55],
          "54": [0, 0.69444, 0, 0, 0.55],
          "55": [0, 0.69444, 0, 0, 0.55],
          "56": [0, 0.69444, 0, 0, 0.55],
          "57": [0, 0.69444, 0, 0, 0.55],
          "58": [0, 0.45833, 0, 0, 0.30556],
          "59": [0.10556, 0.45833, 0, 0, 0.30556],
          "61": [-0.09375, 0.40625, 0, 0, 0.85556],
          "63": [0, 0.69444, 0, 0, 0.51945],
          "64": [0, 0.69444, 0, 0, 0.73334],
          "65": [0, 0.69444, 0, 0, 0.73334],
          "66": [0, 0.69444, 0, 0, 0.73334],
          "67": [0, 0.69444, 0, 0, 0.70278],
          "68": [0, 0.69444, 0, 0, 0.79445],
          "69": [0, 0.69444, 0, 0, 0.64167],
          "70": [0, 0.69444, 0, 0, 0.61111],
          "71": [0, 0.69444, 0, 0, 0.73334],
          "72": [0, 0.69444, 0, 0, 0.79445],
          "73": [0, 0.69444, 0, 0, 0.33056],
          "74": [0, 0.69444, 0, 0, 0.51945],
          "75": [0, 0.69444, 0, 0, 0.76389],
          "76": [0, 0.69444, 0, 0, 0.58056],
          "77": [0, 0.69444, 0, 0, 0.97778],
          "78": [0, 0.69444, 0, 0, 0.79445],
          "79": [0, 0.69444, 0, 0, 0.79445],
          "80": [0, 0.69444, 0, 0, 0.70278],
          "81": [0.10556, 0.69444, 0, 0, 0.79445],
          "82": [0, 0.69444, 0, 0, 0.70278],
          "83": [0, 0.69444, 0, 0, 0.61111],
          "84": [0, 0.69444, 0, 0, 0.73334],
          "85": [0, 0.69444, 0, 0, 0.76389],
          "86": [0, 0.69444, 0.01528, 0, 0.73334],
          "87": [0, 0.69444, 0.01528, 0, 1.03889],
          "88": [0, 0.69444, 0, 0, 0.73334],
          "89": [0, 0.69444, 0.0275, 0, 0.73334],
          "90": [0, 0.69444, 0, 0, 0.67223],
          "91": [0.25, 0.75, 0, 0, 0.34306],
          "93": [0.25, 0.75, 0, 0, 0.34306],
          "94": [0, 0.69444, 0, 0, 0.55],
          "95": [0.35, 0.10833, 0.03056, 0, 0.55],
          "97": [0, 0.45833, 0, 0, 0.525],
          "98": [0, 0.69444, 0, 0, 0.56111],
          "99": [0, 0.45833, 0, 0, 0.48889],
          "100": [0, 0.69444, 0, 0, 0.56111],
          "101": [0, 0.45833, 0, 0, 0.51111],
          "102": [0, 0.69444, 0.07639, 0, 0.33611],
          "103": [0.19444, 0.45833, 0.01528, 0, 0.55],
          "104": [0, 0.69444, 0, 0, 0.56111],
          "105": [0, 0.69444, 0, 0, 0.25556],
          "106": [0.19444, 0.69444, 0, 0, 0.28611],
          "107": [0, 0.69444, 0, 0, 0.53056],
          "108": [0, 0.69444, 0, 0, 0.25556],
          "109": [0, 0.45833, 0, 0, 0.86667],
          "110": [0, 0.45833, 0, 0, 0.56111],
          "111": [0, 0.45833, 0, 0, 0.55],
          "112": [0.19444, 0.45833, 0, 0, 0.56111],
          "113": [0.19444, 0.45833, 0, 0, 0.56111],
          "114": [0, 0.45833, 0.01528, 0, 0.37222],
          "115": [0, 0.45833, 0, 0, 0.42167],
          "116": [0, 0.58929, 0, 0, 0.40417],
          "117": [0, 0.45833, 0, 0, 0.56111],
          "118": [0, 0.45833, 0.01528, 0, 0.5],
          "119": [0, 0.45833, 0.01528, 0, 0.74445],
          "120": [0, 0.45833, 0, 0, 0.5],
          "121": [0.19444, 0.45833, 0.01528, 0, 0.5],
          "122": [0, 0.45833, 0, 0, 0.47639],
          "126": [0.35, 0.34444, 0, 0, 0.55],
          "160": [0, 0, 0, 0, 0.25],
          "168": [0, 0.69444, 0, 0, 0.55],
          "176": [0, 0.69444, 0, 0, 0.73334],
          "180": [0, 0.69444, 0, 0, 0.55],
          "184": [0.17014, 0, 0, 0, 0.48889],
          "305": [0, 0.45833, 0, 0, 0.25556],
          "567": [0.19444, 0.45833, 0, 0, 0.28611],
          "710": [0, 0.69444, 0, 0, 0.55],
          "711": [0, 0.63542, 0, 0, 0.55],
          "713": [0, 0.63778, 0, 0, 0.55],
          "728": [0, 0.69444, 0, 0, 0.55],
          "729": [0, 0.69444, 0, 0, 0.30556],
          "730": [0, 0.69444, 0, 0, 0.73334],
          "732": [0, 0.69444, 0, 0, 0.55],
          "733": [0, 0.69444, 0, 0, 0.55],
          "915": [0, 0.69444, 0, 0, 0.58056],
          "916": [0, 0.69444, 0, 0, 0.91667],
          "920": [0, 0.69444, 0, 0, 0.85556],
          "923": [0, 0.69444, 0, 0, 0.67223],
          "926": [0, 0.69444, 0, 0, 0.73334],
          "928": [0, 0.69444, 0, 0, 0.79445],
          "931": [0, 0.69444, 0, 0, 0.79445],
          "933": [0, 0.69444, 0, 0, 0.85556],
          "934": [0, 0.69444, 0, 0, 0.79445],
          "936": [0, 0.69444, 0, 0, 0.85556],
          "937": [0, 0.69444, 0, 0, 0.79445],
          "8211": [0, 0.45833, 0.03056, 0, 0.55],
          "8212": [0, 0.45833, 0.03056, 0, 1.10001],
          "8216": [0, 0.69444, 0, 0, 0.30556],
          "8217": [0, 0.69444, 0, 0, 0.30556],
          "8220": [0, 0.69444, 0, 0, 0.55834],
          "8221": [0, 0.69444, 0, 0, 0.55834]
        },
        "SansSerif-Italic": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69444, 0.05733, 0, 0.31945],
          "34": [0, 0.69444, 316e-5, 0, 0.5],
          "35": [0.19444, 0.69444, 0.05087, 0, 0.83334],
          "36": [0.05556, 0.75, 0.11156, 0, 0.5],
          "37": [0.05556, 0.75, 0.03126, 0, 0.83334],
          "38": [0, 0.69444, 0.03058, 0, 0.75834],
          "39": [0, 0.69444, 0.07816, 0, 0.27778],
          "40": [0.25, 0.75, 0.13164, 0, 0.38889],
          "41": [0.25, 0.75, 0.02536, 0, 0.38889],
          "42": [0, 0.75, 0.11775, 0, 0.5],
          "43": [0.08333, 0.58333, 0.02536, 0, 0.77778],
          "44": [0.125, 0.08333, 0, 0, 0.27778],
          "45": [0, 0.44444, 0.01946, 0, 0.33333],
          "46": [0, 0.08333, 0, 0, 0.27778],
          "47": [0.25, 0.75, 0.13164, 0, 0.5],
          "48": [0, 0.65556, 0.11156, 0, 0.5],
          "49": [0, 0.65556, 0.11156, 0, 0.5],
          "50": [0, 0.65556, 0.11156, 0, 0.5],
          "51": [0, 0.65556, 0.11156, 0, 0.5],
          "52": [0, 0.65556, 0.11156, 0, 0.5],
          "53": [0, 0.65556, 0.11156, 0, 0.5],
          "54": [0, 0.65556, 0.11156, 0, 0.5],
          "55": [0, 0.65556, 0.11156, 0, 0.5],
          "56": [0, 0.65556, 0.11156, 0, 0.5],
          "57": [0, 0.65556, 0.11156, 0, 0.5],
          "58": [0, 0.44444, 0.02502, 0, 0.27778],
          "59": [0.125, 0.44444, 0.02502, 0, 0.27778],
          "61": [-0.13, 0.37, 0.05087, 0, 0.77778],
          "63": [0, 0.69444, 0.11809, 0, 0.47222],
          "64": [0, 0.69444, 0.07555, 0, 0.66667],
          "65": [0, 0.69444, 0, 0, 0.66667],
          "66": [0, 0.69444, 0.08293, 0, 0.66667],
          "67": [0, 0.69444, 0.11983, 0, 0.63889],
          "68": [0, 0.69444, 0.07555, 0, 0.72223],
          "69": [0, 0.69444, 0.11983, 0, 0.59722],
          "70": [0, 0.69444, 0.13372, 0, 0.56945],
          "71": [0, 0.69444, 0.11983, 0, 0.66667],
          "72": [0, 0.69444, 0.08094, 0, 0.70834],
          "73": [0, 0.69444, 0.13372, 0, 0.27778],
          "74": [0, 0.69444, 0.08094, 0, 0.47222],
          "75": [0, 0.69444, 0.11983, 0, 0.69445],
          "76": [0, 0.69444, 0, 0, 0.54167],
          "77": [0, 0.69444, 0.08094, 0, 0.875],
          "78": [0, 0.69444, 0.08094, 0, 0.70834],
          "79": [0, 0.69444, 0.07555, 0, 0.73611],
          "80": [0, 0.69444, 0.08293, 0, 0.63889],
          "81": [0.125, 0.69444, 0.07555, 0, 0.73611],
          "82": [0, 0.69444, 0.08293, 0, 0.64584],
          "83": [0, 0.69444, 0.09205, 0, 0.55556],
          "84": [0, 0.69444, 0.13372, 0, 0.68056],
          "85": [0, 0.69444, 0.08094, 0, 0.6875],
          "86": [0, 0.69444, 0.1615, 0, 0.66667],
          "87": [0, 0.69444, 0.1615, 0, 0.94445],
          "88": [0, 0.69444, 0.13372, 0, 0.66667],
          "89": [0, 0.69444, 0.17261, 0, 0.66667],
          "90": [0, 0.69444, 0.11983, 0, 0.61111],
          "91": [0.25, 0.75, 0.15942, 0, 0.28889],
          "93": [0.25, 0.75, 0.08719, 0, 0.28889],
          "94": [0, 0.69444, 0.0799, 0, 0.5],
          "95": [0.35, 0.09444, 0.08616, 0, 0.5],
          "97": [0, 0.44444, 981e-5, 0, 0.48056],
          "98": [0, 0.69444, 0.03057, 0, 0.51667],
          "99": [0, 0.44444, 0.08336, 0, 0.44445],
          "100": [0, 0.69444, 0.09483, 0, 0.51667],
          "101": [0, 0.44444, 0.06778, 0, 0.44445],
          "102": [0, 0.69444, 0.21705, 0, 0.30556],
          "103": [0.19444, 0.44444, 0.10836, 0, 0.5],
          "104": [0, 0.69444, 0.01778, 0, 0.51667],
          "105": [0, 0.67937, 0.09718, 0, 0.23889],
          "106": [0.19444, 0.67937, 0.09162, 0, 0.26667],
          "107": [0, 0.69444, 0.08336, 0, 0.48889],
          "108": [0, 0.69444, 0.09483, 0, 0.23889],
          "109": [0, 0.44444, 0.01778, 0, 0.79445],
          "110": [0, 0.44444, 0.01778, 0, 0.51667],
          "111": [0, 0.44444, 0.06613, 0, 0.5],
          "112": [0.19444, 0.44444, 0.0389, 0, 0.51667],
          "113": [0.19444, 0.44444, 0.04169, 0, 0.51667],
          "114": [0, 0.44444, 0.10836, 0, 0.34167],
          "115": [0, 0.44444, 0.0778, 0, 0.38333],
          "116": [0, 0.57143, 0.07225, 0, 0.36111],
          "117": [0, 0.44444, 0.04169, 0, 0.51667],
          "118": [0, 0.44444, 0.10836, 0, 0.46111],
          "119": [0, 0.44444, 0.10836, 0, 0.68334],
          "120": [0, 0.44444, 0.09169, 0, 0.46111],
          "121": [0.19444, 0.44444, 0.10836, 0, 0.46111],
          "122": [0, 0.44444, 0.08752, 0, 0.43472],
          "126": [0.35, 0.32659, 0.08826, 0, 0.5],
          "160": [0, 0, 0, 0, 0.25],
          "168": [0, 0.67937, 0.06385, 0, 0.5],
          "176": [0, 0.69444, 0, 0, 0.73752],
          "184": [0.17014, 0, 0, 0, 0.44445],
          "305": [0, 0.44444, 0.04169, 0, 0.23889],
          "567": [0.19444, 0.44444, 0.04169, 0, 0.26667],
          "710": [0, 0.69444, 0.0799, 0, 0.5],
          "711": [0, 0.63194, 0.08432, 0, 0.5],
          "713": [0, 0.60889, 0.08776, 0, 0.5],
          "714": [0, 0.69444, 0.09205, 0, 0.5],
          "715": [0, 0.69444, 0, 0, 0.5],
          "728": [0, 0.69444, 0.09483, 0, 0.5],
          "729": [0, 0.67937, 0.07774, 0, 0.27778],
          "730": [0, 0.69444, 0, 0, 0.73752],
          "732": [0, 0.67659, 0.08826, 0, 0.5],
          "733": [0, 0.69444, 0.09205, 0, 0.5],
          "915": [0, 0.69444, 0.13372, 0, 0.54167],
          "916": [0, 0.69444, 0, 0, 0.83334],
          "920": [0, 0.69444, 0.07555, 0, 0.77778],
          "923": [0, 0.69444, 0, 0, 0.61111],
          "926": [0, 0.69444, 0.12816, 0, 0.66667],
          "928": [0, 0.69444, 0.08094, 0, 0.70834],
          "931": [0, 0.69444, 0.11983, 0, 0.72222],
          "933": [0, 0.69444, 0.09031, 0, 0.77778],
          "934": [0, 0.69444, 0.04603, 0, 0.72222],
          "936": [0, 0.69444, 0.09031, 0, 0.77778],
          "937": [0, 0.69444, 0.08293, 0, 0.72222],
          "8211": [0, 0.44444, 0.08616, 0, 0.5],
          "8212": [0, 0.44444, 0.08616, 0, 1],
          "8216": [0, 0.69444, 0.07816, 0, 0.27778],
          "8217": [0, 0.69444, 0.07816, 0, 0.27778],
          "8220": [0, 0.69444, 0.14205, 0, 0.5],
          "8221": [0, 0.69444, 316e-5, 0, 0.5]
        },
        "SansSerif-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "33": [0, 0.69444, 0, 0, 0.31945],
          "34": [0, 0.69444, 0, 0, 0.5],
          "35": [0.19444, 0.69444, 0, 0, 0.83334],
          "36": [0.05556, 0.75, 0, 0, 0.5],
          "37": [0.05556, 0.75, 0, 0, 0.83334],
          "38": [0, 0.69444, 0, 0, 0.75834],
          "39": [0, 0.69444, 0, 0, 0.27778],
          "40": [0.25, 0.75, 0, 0, 0.38889],
          "41": [0.25, 0.75, 0, 0, 0.38889],
          "42": [0, 0.75, 0, 0, 0.5],
          "43": [0.08333, 0.58333, 0, 0, 0.77778],
          "44": [0.125, 0.08333, 0, 0, 0.27778],
          "45": [0, 0.44444, 0, 0, 0.33333],
          "46": [0, 0.08333, 0, 0, 0.27778],
          "47": [0.25, 0.75, 0, 0, 0.5],
          "48": [0, 0.65556, 0, 0, 0.5],
          "49": [0, 0.65556, 0, 0, 0.5],
          "50": [0, 0.65556, 0, 0, 0.5],
          "51": [0, 0.65556, 0, 0, 0.5],
          "52": [0, 0.65556, 0, 0, 0.5],
          "53": [0, 0.65556, 0, 0, 0.5],
          "54": [0, 0.65556, 0, 0, 0.5],
          "55": [0, 0.65556, 0, 0, 0.5],
          "56": [0, 0.65556, 0, 0, 0.5],
          "57": [0, 0.65556, 0, 0, 0.5],
          "58": [0, 0.44444, 0, 0, 0.27778],
          "59": [0.125, 0.44444, 0, 0, 0.27778],
          "61": [-0.13, 0.37, 0, 0, 0.77778],
          "63": [0, 0.69444, 0, 0, 0.47222],
          "64": [0, 0.69444, 0, 0, 0.66667],
          "65": [0, 0.69444, 0, 0, 0.66667],
          "66": [0, 0.69444, 0, 0, 0.66667],
          "67": [0, 0.69444, 0, 0, 0.63889],
          "68": [0, 0.69444, 0, 0, 0.72223],
          "69": [0, 0.69444, 0, 0, 0.59722],
          "70": [0, 0.69444, 0, 0, 0.56945],
          "71": [0, 0.69444, 0, 0, 0.66667],
          "72": [0, 0.69444, 0, 0, 0.70834],
          "73": [0, 0.69444, 0, 0, 0.27778],
          "74": [0, 0.69444, 0, 0, 0.47222],
          "75": [0, 0.69444, 0, 0, 0.69445],
          "76": [0, 0.69444, 0, 0, 0.54167],
          "77": [0, 0.69444, 0, 0, 0.875],
          "78": [0, 0.69444, 0, 0, 0.70834],
          "79": [0, 0.69444, 0, 0, 0.73611],
          "80": [0, 0.69444, 0, 0, 0.63889],
          "81": [0.125, 0.69444, 0, 0, 0.73611],
          "82": [0, 0.69444, 0, 0, 0.64584],
          "83": [0, 0.69444, 0, 0, 0.55556],
          "84": [0, 0.69444, 0, 0, 0.68056],
          "85": [0, 0.69444, 0, 0, 0.6875],
          "86": [0, 0.69444, 0.01389, 0, 0.66667],
          "87": [0, 0.69444, 0.01389, 0, 0.94445],
          "88": [0, 0.69444, 0, 0, 0.66667],
          "89": [0, 0.69444, 0.025, 0, 0.66667],
          "90": [0, 0.69444, 0, 0, 0.61111],
          "91": [0.25, 0.75, 0, 0, 0.28889],
          "93": [0.25, 0.75, 0, 0, 0.28889],
          "94": [0, 0.69444, 0, 0, 0.5],
          "95": [0.35, 0.09444, 0.02778, 0, 0.5],
          "97": [0, 0.44444, 0, 0, 0.48056],
          "98": [0, 0.69444, 0, 0, 0.51667],
          "99": [0, 0.44444, 0, 0, 0.44445],
          "100": [0, 0.69444, 0, 0, 0.51667],
          "101": [0, 0.44444, 0, 0, 0.44445],
          "102": [0, 0.69444, 0.06944, 0, 0.30556],
          "103": [0.19444, 0.44444, 0.01389, 0, 0.5],
          "104": [0, 0.69444, 0, 0, 0.51667],
          "105": [0, 0.67937, 0, 0, 0.23889],
          "106": [0.19444, 0.67937, 0, 0, 0.26667],
          "107": [0, 0.69444, 0, 0, 0.48889],
          "108": [0, 0.69444, 0, 0, 0.23889],
          "109": [0, 0.44444, 0, 0, 0.79445],
          "110": [0, 0.44444, 0, 0, 0.51667],
          "111": [0, 0.44444, 0, 0, 0.5],
          "112": [0.19444, 0.44444, 0, 0, 0.51667],
          "113": [0.19444, 0.44444, 0, 0, 0.51667],
          "114": [0, 0.44444, 0.01389, 0, 0.34167],
          "115": [0, 0.44444, 0, 0, 0.38333],
          "116": [0, 0.57143, 0, 0, 0.36111],
          "117": [0, 0.44444, 0, 0, 0.51667],
          "118": [0, 0.44444, 0.01389, 0, 0.46111],
          "119": [0, 0.44444, 0.01389, 0, 0.68334],
          "120": [0, 0.44444, 0, 0, 0.46111],
          "121": [0.19444, 0.44444, 0.01389, 0, 0.46111],
          "122": [0, 0.44444, 0, 0, 0.43472],
          "126": [0.35, 0.32659, 0, 0, 0.5],
          "160": [0, 0, 0, 0, 0.25],
          "168": [0, 0.67937, 0, 0, 0.5],
          "176": [0, 0.69444, 0, 0, 0.66667],
          "184": [0.17014, 0, 0, 0, 0.44445],
          "305": [0, 0.44444, 0, 0, 0.23889],
          "567": [0.19444, 0.44444, 0, 0, 0.26667],
          "710": [0, 0.69444, 0, 0, 0.5],
          "711": [0, 0.63194, 0, 0, 0.5],
          "713": [0, 0.60889, 0, 0, 0.5],
          "714": [0, 0.69444, 0, 0, 0.5],
          "715": [0, 0.69444, 0, 0, 0.5],
          "728": [0, 0.69444, 0, 0, 0.5],
          "729": [0, 0.67937, 0, 0, 0.27778],
          "730": [0, 0.69444, 0, 0, 0.66667],
          "732": [0, 0.67659, 0, 0, 0.5],
          "733": [0, 0.69444, 0, 0, 0.5],
          "915": [0, 0.69444, 0, 0, 0.54167],
          "916": [0, 0.69444, 0, 0, 0.83334],
          "920": [0, 0.69444, 0, 0, 0.77778],
          "923": [0, 0.69444, 0, 0, 0.61111],
          "926": [0, 0.69444, 0, 0, 0.66667],
          "928": [0, 0.69444, 0, 0, 0.70834],
          "931": [0, 0.69444, 0, 0, 0.72222],
          "933": [0, 0.69444, 0, 0, 0.77778],
          "934": [0, 0.69444, 0, 0, 0.72222],
          "936": [0, 0.69444, 0, 0, 0.77778],
          "937": [0, 0.69444, 0, 0, 0.72222],
          "8211": [0, 0.44444, 0.02778, 0, 0.5],
          "8212": [0, 0.44444, 0.02778, 0, 1],
          "8216": [0, 0.69444, 0, 0, 0.27778],
          "8217": [0, 0.69444, 0, 0, 0.27778],
          "8220": [0, 0.69444, 0, 0, 0.5],
          "8221": [0, 0.69444, 0, 0, 0.5]
        },
        "Script-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "65": [0, 0.7, 0.22925, 0, 0.80253],
          "66": [0, 0.7, 0.04087, 0, 0.90757],
          "67": [0, 0.7, 0.1689, 0, 0.66619],
          "68": [0, 0.7, 0.09371, 0, 0.77443],
          "69": [0, 0.7, 0.18583, 0, 0.56162],
          "70": [0, 0.7, 0.13634, 0, 0.89544],
          "71": [0, 0.7, 0.17322, 0, 0.60961],
          "72": [0, 0.7, 0.29694, 0, 0.96919],
          "73": [0, 0.7, 0.19189, 0, 0.80907],
          "74": [0.27778, 0.7, 0.19189, 0, 1.05159],
          "75": [0, 0.7, 0.31259, 0, 0.91364],
          "76": [0, 0.7, 0.19189, 0, 0.87373],
          "77": [0, 0.7, 0.15981, 0, 1.08031],
          "78": [0, 0.7, 0.3525, 0, 0.9015],
          "79": [0, 0.7, 0.08078, 0, 0.73787],
          "80": [0, 0.7, 0.08078, 0, 1.01262],
          "81": [0, 0.7, 0.03305, 0, 0.88282],
          "82": [0, 0.7, 0.06259, 0, 0.85],
          "83": [0, 0.7, 0.19189, 0, 0.86767],
          "84": [0, 0.7, 0.29087, 0, 0.74697],
          "85": [0, 0.7, 0.25815, 0, 0.79996],
          "86": [0, 0.7, 0.27523, 0, 0.62204],
          "87": [0, 0.7, 0.27523, 0, 0.80532],
          "88": [0, 0.7, 0.26006, 0, 0.94445],
          "89": [0, 0.7, 0.2939, 0, 0.70961],
          "90": [0, 0.7, 0.24037, 0, 0.8212],
          "160": [0, 0, 0, 0, 0.25]
        },
        "Size1-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "40": [0.35001, 0.85, 0, 0, 0.45834],
          "41": [0.35001, 0.85, 0, 0, 0.45834],
          "47": [0.35001, 0.85, 0, 0, 0.57778],
          "91": [0.35001, 0.85, 0, 0, 0.41667],
          "92": [0.35001, 0.85, 0, 0, 0.57778],
          "93": [0.35001, 0.85, 0, 0, 0.41667],
          "123": [0.35001, 0.85, 0, 0, 0.58334],
          "125": [0.35001, 0.85, 0, 0, 0.58334],
          "160": [0, 0, 0, 0, 0.25],
          "710": [0, 0.72222, 0, 0, 0.55556],
          "732": [0, 0.72222, 0, 0, 0.55556],
          "770": [0, 0.72222, 0, 0, 0.55556],
          "771": [0, 0.72222, 0, 0, 0.55556],
          "8214": [-99e-5, 0.601, 0, 0, 0.77778],
          "8593": [1e-5, 0.6, 0, 0, 0.66667],
          "8595": [1e-5, 0.6, 0, 0, 0.66667],
          "8657": [1e-5, 0.6, 0, 0, 0.77778],
          "8659": [1e-5, 0.6, 0, 0, 0.77778],
          "8719": [0.25001, 0.75, 0, 0, 0.94445],
          "8720": [0.25001, 0.75, 0, 0, 0.94445],
          "8721": [0.25001, 0.75, 0, 0, 1.05556],
          "8730": [0.35001, 0.85, 0, 0, 1],
          "8739": [-599e-5, 0.606, 0, 0, 0.33333],
          "8741": [-599e-5, 0.606, 0, 0, 0.55556],
          "8747": [0.30612, 0.805, 0.19445, 0, 0.47222],
          "8748": [0.306, 0.805, 0.19445, 0, 0.47222],
          "8749": [0.306, 0.805, 0.19445, 0, 0.47222],
          "8750": [0.30612, 0.805, 0.19445, 0, 0.47222],
          "8896": [0.25001, 0.75, 0, 0, 0.83334],
          "8897": [0.25001, 0.75, 0, 0, 0.83334],
          "8898": [0.25001, 0.75, 0, 0, 0.83334],
          "8899": [0.25001, 0.75, 0, 0, 0.83334],
          "8968": [0.35001, 0.85, 0, 0, 0.47222],
          "8969": [0.35001, 0.85, 0, 0, 0.47222],
          "8970": [0.35001, 0.85, 0, 0, 0.47222],
          "8971": [0.35001, 0.85, 0, 0, 0.47222],
          "9168": [-99e-5, 0.601, 0, 0, 0.66667],
          "10216": [0.35001, 0.85, 0, 0, 0.47222],
          "10217": [0.35001, 0.85, 0, 0, 0.47222],
          "10752": [0.25001, 0.75, 0, 0, 1.11111],
          "10753": [0.25001, 0.75, 0, 0, 1.11111],
          "10754": [0.25001, 0.75, 0, 0, 1.11111],
          "10756": [0.25001, 0.75, 0, 0, 0.83334],
          "10758": [0.25001, 0.75, 0, 0, 0.83334]
        },
        "Size2-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "40": [0.65002, 1.15, 0, 0, 0.59722],
          "41": [0.65002, 1.15, 0, 0, 0.59722],
          "47": [0.65002, 1.15, 0, 0, 0.81111],
          "91": [0.65002, 1.15, 0, 0, 0.47222],
          "92": [0.65002, 1.15, 0, 0, 0.81111],
          "93": [0.65002, 1.15, 0, 0, 0.47222],
          "123": [0.65002, 1.15, 0, 0, 0.66667],
          "125": [0.65002, 1.15, 0, 0, 0.66667],
          "160": [0, 0, 0, 0, 0.25],
          "710": [0, 0.75, 0, 0, 1],
          "732": [0, 0.75, 0, 0, 1],
          "770": [0, 0.75, 0, 0, 1],
          "771": [0, 0.75, 0, 0, 1],
          "8719": [0.55001, 1.05, 0, 0, 1.27778],
          "8720": [0.55001, 1.05, 0, 0, 1.27778],
          "8721": [0.55001, 1.05, 0, 0, 1.44445],
          "8730": [0.65002, 1.15, 0, 0, 1],
          "8747": [0.86225, 1.36, 0.44445, 0, 0.55556],
          "8748": [0.862, 1.36, 0.44445, 0, 0.55556],
          "8749": [0.862, 1.36, 0.44445, 0, 0.55556],
          "8750": [0.86225, 1.36, 0.44445, 0, 0.55556],
          "8896": [0.55001, 1.05, 0, 0, 1.11111],
          "8897": [0.55001, 1.05, 0, 0, 1.11111],
          "8898": [0.55001, 1.05, 0, 0, 1.11111],
          "8899": [0.55001, 1.05, 0, 0, 1.11111],
          "8968": [0.65002, 1.15, 0, 0, 0.52778],
          "8969": [0.65002, 1.15, 0, 0, 0.52778],
          "8970": [0.65002, 1.15, 0, 0, 0.52778],
          "8971": [0.65002, 1.15, 0, 0, 0.52778],
          "10216": [0.65002, 1.15, 0, 0, 0.61111],
          "10217": [0.65002, 1.15, 0, 0, 0.61111],
          "10752": [0.55001, 1.05, 0, 0, 1.51112],
          "10753": [0.55001, 1.05, 0, 0, 1.51112],
          "10754": [0.55001, 1.05, 0, 0, 1.51112],
          "10756": [0.55001, 1.05, 0, 0, 1.11111],
          "10758": [0.55001, 1.05, 0, 0, 1.11111]
        },
        "Size3-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "40": [0.95003, 1.45, 0, 0, 0.73611],
          "41": [0.95003, 1.45, 0, 0, 0.73611],
          "47": [0.95003, 1.45, 0, 0, 1.04445],
          "91": [0.95003, 1.45, 0, 0, 0.52778],
          "92": [0.95003, 1.45, 0, 0, 1.04445],
          "93": [0.95003, 1.45, 0, 0, 0.52778],
          "123": [0.95003, 1.45, 0, 0, 0.75],
          "125": [0.95003, 1.45, 0, 0, 0.75],
          "160": [0, 0, 0, 0, 0.25],
          "710": [0, 0.75, 0, 0, 1.44445],
          "732": [0, 0.75, 0, 0, 1.44445],
          "770": [0, 0.75, 0, 0, 1.44445],
          "771": [0, 0.75, 0, 0, 1.44445],
          "8730": [0.95003, 1.45, 0, 0, 1],
          "8968": [0.95003, 1.45, 0, 0, 0.58334],
          "8969": [0.95003, 1.45, 0, 0, 0.58334],
          "8970": [0.95003, 1.45, 0, 0, 0.58334],
          "8971": [0.95003, 1.45, 0, 0, 0.58334],
          "10216": [0.95003, 1.45, 0, 0, 0.75],
          "10217": [0.95003, 1.45, 0, 0, 0.75]
        },
        "Size4-Regular": {
          "32": [0, 0, 0, 0, 0.25],
          "40": [1.25003, 1.75, 0, 0, 0.79167],
          "41": [1.25003, 1.75, 0, 0, 0.79167],
          "47": [1.25003, 1.75, 0, 0, 1.27778],
          "91": [1.25003, 1.75, 0, 0, 0.58334],
          "92": [1.25003, 1.75, 0, 0, 1.27778],
          "93": [1.25003, 1.75, 0, 0, 0.58334],
          "123": [1.25003, 1.75, 0, 0, 0.80556],
          "125": [1.25003, 1.75, 0, 0, 0.80556],
          "160": [0, 0, 0, 0, 0.25],
          "710": [0, 0.825, 0, 0, 1.8889],
          "732": [0, 0.825, 0, 0, 1.8889],
          "770": [0, 0.825, 0, 0, 1.8889],
          "771": [0, 0.825, 0, 0, 1.8889],
          "8730": [1.25003, 1.75, 0, 0, 1],
          "8968": [1.25003, 1.75, 0, 0, 0.63889],
          "8969": [1.25003, 1.75, 0, 0, 0.63889],
          "8970": [1.25003, 1.75, 0, 0, 0.63889],
          "8971": [1.25003, 1.75, 0, 0, 0.63889],
          "9115": [0.64502, 1.155, 0, 0, 0.875],
          "9116": [1e-5, 0.6, 0, 0, 0.875],
          "9117": [0.64502, 1.155, 0, 0, 0.875],
          "9118": [0.64502, 1.155, 0, 0, 0.875],
          "9119": [1e-5, 0.6, 0, 0, 0.875],
          "9120": [0.64502, 1.155, 0, 0, 0.875],
          "9121": [0.64502, 1.155, 0, 0, 0.66667],
          "9122": [-99e-5, 0.601, 0, 0, 0.66667],
          "9123": [0.64502, 1.155, 0, 0, 0.66667],
          "9124": [0.64502, 1.155, 0, 0, 0.66667],
          "9125": [-99e-5, 0.601, 0, 0, 0.66667],
          "9126": [0.64502, 1.155, 0, 0, 0.66667],
          "9127": [1e-5, 0.9, 0, 0, 0.88889],
          "9128": [0.65002, 1.15, 0, 0, 0.88889],
          "9129": [0.90001, 0, 0, 0, 0.88889],
          "9130": [0, 0.3, 0, 0, 0.88889],
          "9131": [1e-5, 0.9, 0, 0, 0.88889],
          "9132": [0.65002, 1.15, 0, 0, 0.88889],
          "9133": [0.90001, 0, 0, 0, 0.88889],
          "9143": [0.88502, 0.915, 0, 0, 1.05556],
          "10216": [1.25003, 1.75, 0, 0, 0.80556],
          "10217": [1.25003, 1.75, 0, 0, 0.80556],
          "57344": [-499e-5, 0.605, 0, 0, 1.05556],
          "57345": [-499e-5, 0.605, 0, 0, 1.05556],
          "57680": [0, 0.12, 0, 0, 0.45],
          "57681": [0, 0.12, 0, 0, 0.45],
          "57682": [0, 0.12, 0, 0, 0.45],
          "57683": [0, 0.12, 0, 0, 0.45]
        },
        "Typewriter-Regular": {
          "32": [0, 0, 0, 0, 0.525],
          "33": [0, 0.61111, 0, 0, 0.525],
          "34": [0, 0.61111, 0, 0, 0.525],
          "35": [0, 0.61111, 0, 0, 0.525],
          "36": [0.08333, 0.69444, 0, 0, 0.525],
          "37": [0.08333, 0.69444, 0, 0, 0.525],
          "38": [0, 0.61111, 0, 0, 0.525],
          "39": [0, 0.61111, 0, 0, 0.525],
          "40": [0.08333, 0.69444, 0, 0, 0.525],
          "41": [0.08333, 0.69444, 0, 0, 0.525],
          "42": [0, 0.52083, 0, 0, 0.525],
          "43": [-0.08056, 0.53055, 0, 0, 0.525],
          "44": [0.13889, 0.125, 0, 0, 0.525],
          "45": [-0.08056, 0.53055, 0, 0, 0.525],
          "46": [0, 0.125, 0, 0, 0.525],
          "47": [0.08333, 0.69444, 0, 0, 0.525],
          "48": [0, 0.61111, 0, 0, 0.525],
          "49": [0, 0.61111, 0, 0, 0.525],
          "50": [0, 0.61111, 0, 0, 0.525],
          "51": [0, 0.61111, 0, 0, 0.525],
          "52": [0, 0.61111, 0, 0, 0.525],
          "53": [0, 0.61111, 0, 0, 0.525],
          "54": [0, 0.61111, 0, 0, 0.525],
          "55": [0, 0.61111, 0, 0, 0.525],
          "56": [0, 0.61111, 0, 0, 0.525],
          "57": [0, 0.61111, 0, 0, 0.525],
          "58": [0, 0.43056, 0, 0, 0.525],
          "59": [0.13889, 0.43056, 0, 0, 0.525],
          "60": [-0.05556, 0.55556, 0, 0, 0.525],
          "61": [-0.19549, 0.41562, 0, 0, 0.525],
          "62": [-0.05556, 0.55556, 0, 0, 0.525],
          "63": [0, 0.61111, 0, 0, 0.525],
          "64": [0, 0.61111, 0, 0, 0.525],
          "65": [0, 0.61111, 0, 0, 0.525],
          "66": [0, 0.61111, 0, 0, 0.525],
          "67": [0, 0.61111, 0, 0, 0.525],
          "68": [0, 0.61111, 0, 0, 0.525],
          "69": [0, 0.61111, 0, 0, 0.525],
          "70": [0, 0.61111, 0, 0, 0.525],
          "71": [0, 0.61111, 0, 0, 0.525],
          "72": [0, 0.61111, 0, 0, 0.525],
          "73": [0, 0.61111, 0, 0, 0.525],
          "74": [0, 0.61111, 0, 0, 0.525],
          "75": [0, 0.61111, 0, 0, 0.525],
          "76": [0, 0.61111, 0, 0, 0.525],
          "77": [0, 0.61111, 0, 0, 0.525],
          "78": [0, 0.61111, 0, 0, 0.525],
          "79": [0, 0.61111, 0, 0, 0.525],
          "80": [0, 0.61111, 0, 0, 0.525],
          "81": [0.13889, 0.61111, 0, 0, 0.525],
          "82": [0, 0.61111, 0, 0, 0.525],
          "83": [0, 0.61111, 0, 0, 0.525],
          "84": [0, 0.61111, 0, 0, 0.525],
          "85": [0, 0.61111, 0, 0, 0.525],
          "86": [0, 0.61111, 0, 0, 0.525],
          "87": [0, 0.61111, 0, 0, 0.525],
          "88": [0, 0.61111, 0, 0, 0.525],
          "89": [0, 0.61111, 0, 0, 0.525],
          "90": [0, 0.61111, 0, 0, 0.525],
          "91": [0.08333, 0.69444, 0, 0, 0.525],
          "92": [0.08333, 0.69444, 0, 0, 0.525],
          "93": [0.08333, 0.69444, 0, 0, 0.525],
          "94": [0, 0.61111, 0, 0, 0.525],
          "95": [0.09514, 0, 0, 0, 0.525],
          "96": [0, 0.61111, 0, 0, 0.525],
          "97": [0, 0.43056, 0, 0, 0.525],
          "98": [0, 0.61111, 0, 0, 0.525],
          "99": [0, 0.43056, 0, 0, 0.525],
          "100": [0, 0.61111, 0, 0, 0.525],
          "101": [0, 0.43056, 0, 0, 0.525],
          "102": [0, 0.61111, 0, 0, 0.525],
          "103": [0.22222, 0.43056, 0, 0, 0.525],
          "104": [0, 0.61111, 0, 0, 0.525],
          "105": [0, 0.61111, 0, 0, 0.525],
          "106": [0.22222, 0.61111, 0, 0, 0.525],
          "107": [0, 0.61111, 0, 0, 0.525],
          "108": [0, 0.61111, 0, 0, 0.525],
          "109": [0, 0.43056, 0, 0, 0.525],
          "110": [0, 0.43056, 0, 0, 0.525],
          "111": [0, 0.43056, 0, 0, 0.525],
          "112": [0.22222, 0.43056, 0, 0, 0.525],
          "113": [0.22222, 0.43056, 0, 0, 0.525],
          "114": [0, 0.43056, 0, 0, 0.525],
          "115": [0, 0.43056, 0, 0, 0.525],
          "116": [0, 0.55358, 0, 0, 0.525],
          "117": [0, 0.43056, 0, 0, 0.525],
          "118": [0, 0.43056, 0, 0, 0.525],
          "119": [0, 0.43056, 0, 0, 0.525],
          "120": [0, 0.43056, 0, 0, 0.525],
          "121": [0.22222, 0.43056, 0, 0, 0.525],
          "122": [0, 0.43056, 0, 0, 0.525],
          "123": [0.08333, 0.69444, 0, 0, 0.525],
          "124": [0.08333, 0.69444, 0, 0, 0.525],
          "125": [0.08333, 0.69444, 0, 0, 0.525],
          "126": [0, 0.61111, 0, 0, 0.525],
          "127": [0, 0.61111, 0, 0, 0.525],
          "160": [0, 0, 0, 0, 0.525],
          "176": [0, 0.61111, 0, 0, 0.525],
          "184": [0.19445, 0, 0, 0, 0.525],
          "305": [0, 0.43056, 0, 0, 0.525],
          "567": [0.22222, 0.43056, 0, 0, 0.525],
          "711": [0, 0.56597, 0, 0, 0.525],
          "713": [0, 0.56555, 0, 0, 0.525],
          "714": [0, 0.61111, 0, 0, 0.525],
          "715": [0, 0.61111, 0, 0, 0.525],
          "728": [0, 0.61111, 0, 0, 0.525],
          "730": [0, 0.61111, 0, 0, 0.525],
          "770": [0, 0.61111, 0, 0, 0.525],
          "771": [0, 0.61111, 0, 0, 0.525],
          "776": [0, 0.61111, 0, 0, 0.525],
          "915": [0, 0.61111, 0, 0, 0.525],
          "916": [0, 0.61111, 0, 0, 0.525],
          "920": [0, 0.61111, 0, 0, 0.525],
          "923": [0, 0.61111, 0, 0, 0.525],
          "926": [0, 0.61111, 0, 0, 0.525],
          "928": [0, 0.61111, 0, 0, 0.525],
          "931": [0, 0.61111, 0, 0, 0.525],
          "933": [0, 0.61111, 0, 0, 0.525],
          "934": [0, 0.61111, 0, 0, 0.525],
          "936": [0, 0.61111, 0, 0, 0.525],
          "937": [0, 0.61111, 0, 0, 0.525],
          "8216": [0, 0.61111, 0, 0, 0.525],
          "8217": [0, 0.61111, 0, 0, 0.525],
          "8242": [0, 0.61111, 0, 0, 0.525],
          "9251": [0.11111, 0.21944, 0, 0, 0.525]
        }
      };
      sigmasAndXis = {
        slant: [0.25, 0.25, 0.25],
        // sigma1
        space: [0, 0, 0],
        // sigma2
        stretch: [0, 0, 0],
        // sigma3
        shrink: [0, 0, 0],
        // sigma4
        xHeight: [0.431, 0.431, 0.431],
        // sigma5
        quad: [1, 1.171, 1.472],
        // sigma6
        extraSpace: [0, 0, 0],
        // sigma7
        num1: [0.677, 0.732, 0.925],
        // sigma8
        num2: [0.394, 0.384, 0.387],
        // sigma9
        num3: [0.444, 0.471, 0.504],
        // sigma10
        denom1: [0.686, 0.752, 1.025],
        // sigma11
        denom2: [0.345, 0.344, 0.532],
        // sigma12
        sup1: [0.413, 0.503, 0.504],
        // sigma13
        sup2: [0.363, 0.431, 0.404],
        // sigma14
        sup3: [0.289, 0.286, 0.294],
        // sigma15
        sub1: [0.15, 0.143, 0.2],
        // sigma16
        sub2: [0.247, 0.286, 0.4],
        // sigma17
        supDrop: [0.386, 0.353, 0.494],
        // sigma18
        subDrop: [0.05, 0.071, 0.1],
        // sigma19
        delim1: [2.39, 1.7, 1.98],
        // sigma20
        delim2: [1.01, 1.157, 1.42],
        // sigma21
        axisHeight: [0.25, 0.25, 0.25],
        // sigma22
        // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
        // they correspond to the font parameters of the extension fonts (family 3).
        // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
        // match cmex7, we'd use cmex7.tfm values for script and scriptscript
        // values.
        defaultRuleThickness: [0.04, 0.049, 0.049],
        // xi8; cmex7: 0.049
        bigOpSpacing1: [0.111, 0.111, 0.111],
        // xi9
        bigOpSpacing2: [0.166, 0.166, 0.166],
        // xi10
        bigOpSpacing3: [0.2, 0.2, 0.2],
        // xi11
        bigOpSpacing4: [0.6, 0.611, 0.611],
        // xi12; cmex7: 0.611
        bigOpSpacing5: [0.1, 0.143, 0.143],
        // xi13; cmex7: 0.143
        // The \sqrt rule width is taken from the height of the surd character.
        // Since we use the same font at all sizes, this thickness doesn't scale.
        sqrtRuleThickness: [0.04, 0.04, 0.04],
        // This value determines how large a pt is, for metrics which are defined
        // in terms of pts.
        // This value is also used in katex.scss; if you change it make sure the
        // values match.
        ptPerEm: [10, 10, 10],
        // The space between adjacent `|` columns in an array definition. From
        // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
        doubleRuleSep: [0.2, 0.2, 0.2],
        // The width of separator lines in {array} environments. From
        // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
        arrayRuleWidth: [0.04, 0.04, 0.04],
        // Two values from LaTeX source2e:
        fboxsep: [0.3, 0.3, 0.3],
        //        3 pt / ptPerEm
        fboxrule: [0.04, 0.04, 0.04]
        // 0.4 pt / ptPerEm
      };
      extraCharacterMap = {
        // Latin-1
        "\xC5": "A",
        "\xD0": "D",
        "\xDE": "o",
        "\xE5": "a",
        "\xF0": "d",
        "\xFE": "o",
        // Cyrillic
        "\u0410": "A",
        "\u0411": "B",
        "\u0412": "B",
        "\u0413": "F",
        "\u0414": "A",
        "\u0415": "E",
        "\u0416": "K",
        "\u0417": "3",
        "\u0418": "N",
        "\u0419": "N",
        "\u041A": "K",
        "\u041B": "N",
        "\u041C": "M",
        "\u041D": "H",
        "\u041E": "O",
        "\u041F": "N",
        "\u0420": "P",
        "\u0421": "C",
        "\u0422": "T",
        "\u0423": "y",
        "\u0424": "O",
        "\u0425": "X",
        "\u0426": "U",
        "\u0427": "h",
        "\u0428": "W",
        "\u0429": "W",
        "\u042A": "B",
        "\u042B": "X",
        "\u042C": "B",
        "\u042D": "3",
        "\u042E": "X",
        "\u042F": "R",
        "\u0430": "a",
        "\u0431": "b",
        "\u0432": "a",
        "\u0433": "r",
        "\u0434": "y",
        "\u0435": "e",
        "\u0436": "m",
        "\u0437": "e",
        "\u0438": "n",
        "\u0439": "n",
        "\u043A": "n",
        "\u043B": "n",
        "\u043C": "m",
        "\u043D": "n",
        "\u043E": "o",
        "\u043F": "n",
        "\u0440": "p",
        "\u0441": "c",
        "\u0442": "o",
        "\u0443": "y",
        "\u0444": "b",
        "\u0445": "x",
        "\u0446": "n",
        "\u0447": "n",
        "\u0448": "w",
        "\u0449": "w",
        "\u044A": "a",
        "\u044B": "m",
        "\u044C": "a",
        "\u044D": "e",
        "\u044E": "m",
        "\u044F": "r"
      };
      __name(setFontMetrics, "setFontMetrics");
      __name(getCharacterMetrics, "getCharacterMetrics");
      fontMetricsBySizeIndex = {};
      __name(getGlobalMetrics, "getGlobalMetrics");
      ATOMS = {
        "bin": 1,
        "close": 1,
        "inner": 1,
        "open": 1,
        "punct": 1,
        "rel": 1
      };
      NON_ATOMS = {
        "accent-token": 1,
        "mathord": 1,
        "op-token": 1,
        "spacing": 1,
        "textord": 1
      };
      symbols = {
        "math": {},
        "text": {}
      };
      __name(defineSymbol, "defineSymbol");
      math = "math";
      text2 = "text";
      main = "main";
      ams = "ams";
      accent = "accent-token";
      bin = "bin";
      close = "close";
      inner = "inner";
      mathord = "mathord";
      op = "op-token";
      open = "open";
      punct = "punct";
      rel = "rel";
      spacing = "spacing";
      textord = "textord";
      defineSymbol(math, main, rel, "\u2261", "\\equiv", true);
      defineSymbol(math, main, rel, "\u227A", "\\prec", true);
      defineSymbol(math, main, rel, "\u227B", "\\succ", true);
      defineSymbol(math, main, rel, "\u223C", "\\sim", true);
      defineSymbol(math, main, rel, "\u22A5", "\\perp");
      defineSymbol(math, main, rel, "\u2AAF", "\\preceq", true);
      defineSymbol(math, main, rel, "\u2AB0", "\\succeq", true);
      defineSymbol(math, main, rel, "\u2243", "\\simeq", true);
      defineSymbol(math, main, rel, "\u2223", "\\mid", true);
      defineSymbol(math, main, rel, "\u226A", "\\ll", true);
      defineSymbol(math, main, rel, "\u226B", "\\gg", true);
      defineSymbol(math, main, rel, "\u224D", "\\asymp", true);
      defineSymbol(math, main, rel, "\u2225", "\\parallel");
      defineSymbol(math, main, rel, "\u22C8", "\\bowtie", true);
      defineSymbol(math, main, rel, "\u2323", "\\smile", true);
      defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true);
      defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true);
      defineSymbol(math, main, rel, "\u2250", "\\doteq", true);
      defineSymbol(math, main, rel, "\u2322", "\\frown", true);
      defineSymbol(math, main, rel, "\u220B", "\\ni", true);
      defineSymbol(math, main, rel, "\u221D", "\\propto", true);
      defineSymbol(math, main, rel, "\u22A2", "\\vdash", true);
      defineSymbol(math, main, rel, "\u22A3", "\\dashv", true);
      defineSymbol(math, main, rel, "\u220B", "\\owns");
      defineSymbol(math, main, punct, ".", "\\ldotp");
      defineSymbol(math, main, punct, "\u22C5", "\\cdotp");
      defineSymbol(math, main, punct, "\u22C5", "\xB7");
      defineSymbol(text2, main, textord, "\u22C5", "\xB7");
      defineSymbol(math, main, textord, "#", "\\#");
      defineSymbol(text2, main, textord, "#", "\\#");
      defineSymbol(math, main, textord, "&", "\\&");
      defineSymbol(text2, main, textord, "&", "\\&");
      defineSymbol(math, main, textord, "\u2135", "\\aleph", true);
      defineSymbol(math, main, textord, "\u2200", "\\forall", true);
      defineSymbol(math, main, textord, "\u210F", "\\hbar", true);
      defineSymbol(math, main, textord, "\u2203", "\\exists", true);
      defineSymbol(math, main, textord, "\u2207", "\\nabla", true);
      defineSymbol(math, main, textord, "\u266D", "\\flat", true);
      defineSymbol(math, main, textord, "\u2113", "\\ell", true);
      defineSymbol(math, main, textord, "\u266E", "\\natural", true);
      defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true);
      defineSymbol(math, main, textord, "\u2118", "\\wp", true);
      defineSymbol(math, main, textord, "\u266F", "\\sharp", true);
      defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true);
      defineSymbol(math, main, textord, "\u211C", "\\Re", true);
      defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true);
      defineSymbol(math, main, textord, "\u2111", "\\Im", true);
      defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true);
      defineSymbol(math, main, textord, "\xA7", "\\S", true);
      defineSymbol(text2, main, textord, "\xA7", "\\S");
      defineSymbol(math, main, textord, "\xB6", "\\P", true);
      defineSymbol(text2, main, textord, "\xB6", "\\P");
      defineSymbol(math, main, textord, "\u2020", "\\dag");
      defineSymbol(text2, main, textord, "\u2020", "\\dag");
      defineSymbol(text2, main, textord, "\u2020", "\\textdagger");
      defineSymbol(math, main, textord, "\u2021", "\\ddag");
      defineSymbol(text2, main, textord, "\u2021", "\\ddag");
      defineSymbol(text2, main, textord, "\u2021", "\\textdaggerdbl");
      defineSymbol(math, main, close, "\u23B1", "\\rmoustache", true);
      defineSymbol(math, main, open, "\u23B0", "\\lmoustache", true);
      defineSymbol(math, main, close, "\u27EF", "\\rgroup", true);
      defineSymbol(math, main, open, "\u27EE", "\\lgroup", true);
      defineSymbol(math, main, bin, "\u2213", "\\mp", true);
      defineSymbol(math, main, bin, "\u2296", "\\ominus", true);
      defineSymbol(math, main, bin, "\u228E", "\\uplus", true);
      defineSymbol(math, main, bin, "\u2293", "\\sqcap", true);
      defineSymbol(math, main, bin, "\u2217", "\\ast");
      defineSymbol(math, main, bin, "\u2294", "\\sqcup", true);
      defineSymbol(math, main, bin, "\u25EF", "\\bigcirc", true);
      defineSymbol(math, main, bin, "\u2219", "\\bullet", true);
      defineSymbol(math, main, bin, "\u2021", "\\ddagger");
      defineSymbol(math, main, bin, "\u2240", "\\wr", true);
      defineSymbol(math, main, bin, "\u2A3F", "\\amalg");
      defineSymbol(math, main, bin, "&", "\\And");
      defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow", true);
      defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow", true);
      defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow", true);
      defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow", true);
      defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow", true);
      defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow", true);
      defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true);
      defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow", true);
      defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow", true);
      defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow", true);
      defineSymbol(math, main, rel, "\u21A6", "\\mapsto", true);
      defineSymbol(math, main, rel, "\u27FC", "\\longmapsto", true);
      defineSymbol(math, main, rel, "\u2197", "\\nearrow", true);
      defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow", true);
      defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow", true);
      defineSymbol(math, main, rel, "\u2198", "\\searrow", true);
      defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup", true);
      defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup", true);
      defineSymbol(math, main, rel, "\u2199", "\\swarrow", true);
      defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown", true);
      defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown", true);
      defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true);
      defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons", true);
      defineSymbol(math, ams, rel, "\u226E", "\\nless", true);
      defineSymbol(math, ams, rel, "\uE010", "\\@nleqslant");
      defineSymbol(math, ams, rel, "\uE011", "\\@nleqq");
      defineSymbol(math, ams, rel, "\u2A87", "\\lneq", true);
      defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true);
      defineSymbol(math, ams, rel, "\uE00C", "\\@lvertneqq");
      defineSymbol(math, ams, rel, "\u22E6", "\\lnsim", true);
      defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox", true);
      defineSymbol(math, ams, rel, "\u2280", "\\nprec", true);
      defineSymbol(math, ams, rel, "\u22E0", "\\npreceq", true);
      defineSymbol(math, ams, rel, "\u22E8", "\\precnsim", true);
      defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox", true);
      defineSymbol(math, ams, rel, "\u2241", "\\nsim", true);
      defineSymbol(math, ams, rel, "\uE006", "\\@nshortmid");
      defineSymbol(math, ams, rel, "\u2224", "\\nmid", true);
      defineSymbol(math, ams, rel, "\u22AC", "\\nvdash", true);
      defineSymbol(math, ams, rel, "\u22AD", "\\nvDash", true);
      defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft");
      defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq", true);
      defineSymbol(math, ams, rel, "\u228A", "\\subsetneq", true);
      defineSymbol(math, ams, rel, "\uE01A", "\\@varsubsetneq");
      defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq", true);
      defineSymbol(math, ams, rel, "\uE017", "\\@varsubsetneqq");
      defineSymbol(math, ams, rel, "\u226F", "\\ngtr", true);
      defineSymbol(math, ams, rel, "\uE00F", "\\@ngeqslant");
      defineSymbol(math, ams, rel, "\uE00E", "\\@ngeqq");
      defineSymbol(math, ams, rel, "\u2A88", "\\gneq", true);
      defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true);
      defineSymbol(math, ams, rel, "\uE00D", "\\@gvertneqq");
      defineSymbol(math, ams, rel, "\u22E7", "\\gnsim", true);
      defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox", true);
      defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true);
      defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq", true);
      defineSymbol(math, ams, rel, "\u22E9", "\\succnsim", true);
      defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox", true);
      defineSymbol(math, ams, rel, "\u2246", "\\ncong", true);
      defineSymbol(math, ams, rel, "\uE007", "\\@nshortparallel");
      defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true);
      defineSymbol(math, ams, rel, "\u22AF", "\\nVDash", true);
      defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright");
      defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq", true);
      defineSymbol(math, ams, rel, "\uE018", "\\@nsupseteqq");
      defineSymbol(math, ams, rel, "\u228B", "\\supsetneq", true);
      defineSymbol(math, ams, rel, "\uE01B", "\\@varsupsetneq");
      defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq", true);
      defineSymbol(math, ams, rel, "\uE019", "\\@varsupsetneqq");
      defineSymbol(math, ams, rel, "\u22AE", "\\nVdash", true);
      defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq", true);
      defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq", true);
      defineSymbol(math, ams, rel, "\uE016", "\\@nsubseteqq");
      defineSymbol(math, ams, bin, "\u22B4", "\\unlhd");
      defineSymbol(math, ams, bin, "\u22B5", "\\unrhd");
      defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow", true);
      defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow", true);
      defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow", true);
      defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow", true);
      defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow", true);
      defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow", true);
      defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle");
      defineSymbol(math, ams, textord, "\u210F", "\\hslash");
      defineSymbol(math, ams, textord, "\u25BD", "\\triangledown");
      defineSymbol(math, ams, textord, "\u25CA", "\\lozenge");
      defineSymbol(math, ams, textord, "\u24C8", "\\circledS");
      defineSymbol(math, ams, textord, "\xAE", "\\circledR");
      defineSymbol(text2, ams, textord, "\xAE", "\\circledR");
      defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true);
      defineSymbol(math, ams, textord, "\u2204", "\\nexists");
      defineSymbol(math, ams, textord, "\u2127", "\\mho");
      defineSymbol(math, ams, textord, "\u2132", "\\Finv", true);
      defineSymbol(math, ams, textord, "\u2141", "\\Game", true);
      defineSymbol(math, ams, textord, "\u2035", "\\backprime");
      defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle");
      defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown");
      defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare");
      defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge");
      defineSymbol(math, ams, textord, "\u2605", "\\bigstar");
      defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true);
      defineSymbol(math, ams, textord, "\u2201", "\\complement", true);
      defineSymbol(math, ams, textord, "\xF0", "\\eth", true);
      defineSymbol(text2, main, textord, "\xF0", "\xF0");
      defineSymbol(math, ams, textord, "\u2571", "\\diagup");
      defineSymbol(math, ams, textord, "\u2572", "\\diagdown");
      defineSymbol(math, ams, textord, "\u25A1", "\\square");
      defineSymbol(math, ams, textord, "\u25A1", "\\Box");
      defineSymbol(math, ams, textord, "\u25CA", "\\Diamond");
      defineSymbol(math, ams, textord, "\xA5", "\\yen", true);
      defineSymbol(text2, ams, textord, "\xA5", "\\yen", true);
      defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true);
      defineSymbol(text2, ams, textord, "\u2713", "\\checkmark");
      defineSymbol(math, ams, textord, "\u2136", "\\beth", true);
      defineSymbol(math, ams, textord, "\u2138", "\\daleth", true);
      defineSymbol(math, ams, textord, "\u2137", "\\gimel", true);
      defineSymbol(math, ams, textord, "\u03DD", "\\digamma", true);
      defineSymbol(math, ams, textord, "\u03F0", "\\varkappa");
      defineSymbol(math, ams, open, "\u250C", "\\@ulcorner", true);
      defineSymbol(math, ams, close, "\u2510", "\\@urcorner", true);
      defineSymbol(math, ams, open, "\u2514", "\\@llcorner", true);
      defineSymbol(math, ams, close, "\u2518", "\\@lrcorner", true);
      defineSymbol(math, ams, rel, "\u2266", "\\leqq", true);
      defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant", true);
      defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless", true);
      defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true);
      defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox", true);
      defineSymbol(math, ams, rel, "\u224A", "\\approxeq", true);
      defineSymbol(math, ams, bin, "\u22D6", "\\lessdot");
      defineSymbol(math, ams, rel, "\u22D8", "\\lll", true);
      defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true);
      defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr", true);
      defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr", true);
      defineSymbol(math, ams, rel, "\u2251", "\\doteqdot");
      defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true);
      defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true);
      defineSymbol(math, ams, rel, "\u223D", "\\backsim", true);
      defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq", true);
      defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq", true);
      defineSymbol(math, ams, rel, "\u22D0", "\\Subset", true);
      defineSymbol(math, ams, rel, "\u228F", "\\sqsubset", true);
      defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq", true);
      defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec", true);
      defineSymbol(math, ams, rel, "\u227E", "\\precsim", true);
      defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox", true);
      defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft");
      defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq");
      defineSymbol(math, ams, rel, "\u22A8", "\\vDash", true);
      defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash", true);
      defineSymbol(math, ams, rel, "\u2323", "\\smallsmile");
      defineSymbol(math, ams, rel, "\u2322", "\\smallfrown");
      defineSymbol(math, ams, rel, "\u224F", "\\bumpeq", true);
      defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq", true);
      defineSymbol(math, ams, rel, "\u2267", "\\geqq", true);
      defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant", true);
      defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr", true);
      defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true);
      defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox", true);
      defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot");
      defineSymbol(math, ams, rel, "\u22D9", "\\ggg", true);
      defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true);
      defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless", true);
      defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless", true);
      defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true);
      defineSymbol(math, ams, rel, "\u2257", "\\circeq", true);
      defineSymbol(math, ams, rel, "\u225C", "\\triangleq", true);
      defineSymbol(math, ams, rel, "\u223C", "\\thicksim");
      defineSymbol(math, ams, rel, "\u2248", "\\thickapprox");
      defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq", true);
      defineSymbol(math, ams, rel, "\u22D1", "\\Supset", true);
      defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true);
      defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq", true);
      defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc", true);
      defineSymbol(math, ams, rel, "\u227F", "\\succsim", true);
      defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox", true);
      defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright");
      defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq");
      defineSymbol(math, ams, rel, "\u22A9", "\\Vdash", true);
      defineSymbol(math, ams, rel, "\u2223", "\\shortmid");
      defineSymbol(math, ams, rel, "\u2225", "\\shortparallel");
      defineSymbol(math, ams, rel, "\u226C", "\\between", true);
      defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork", true);
      defineSymbol(math, ams, rel, "\u221D", "\\varpropto");
      defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft");
      defineSymbol(math, ams, rel, "\u2234", "\\therefore", true);
      defineSymbol(math, ams, rel, "\u220D", "\\backepsilon");
      defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright");
      defineSymbol(math, ams, rel, "\u2235", "\\because", true);
      defineSymbol(math, ams, rel, "\u22D8", "\\llless");
      defineSymbol(math, ams, rel, "\u22D9", "\\gggtr");
      defineSymbol(math, ams, bin, "\u22B2", "\\lhd");
      defineSymbol(math, ams, bin, "\u22B3", "\\rhd");
      defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true);
      defineSymbol(math, main, rel, "\u22C8", "\\Join");
      defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true);
      defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true);
      defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus");
      defineSymbol(math, ams, bin, "\u22D2", "\\Cap", true);
      defineSymbol(math, ams, bin, "\u22D3", "\\Cup", true);
      defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge", true);
      defineSymbol(math, ams, bin, "\u229F", "\\boxminus", true);
      defineSymbol(math, ams, bin, "\u229E", "\\boxplus", true);
      defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes", true);
      defineSymbol(math, ams, bin, "\u22C9", "\\ltimes", true);
      defineSymbol(math, ams, bin, "\u22CA", "\\rtimes", true);
      defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes", true);
      defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes", true);
      defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge", true);
      defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee", true);
      defineSymbol(math, ams, bin, "\u229D", "\\circleddash", true);
      defineSymbol(math, ams, bin, "\u229B", "\\circledast", true);
      defineSymbol(math, ams, bin, "\u22C5", "\\centerdot");
      defineSymbol(math, ams, bin, "\u22BA", "\\intercal", true);
      defineSymbol(math, ams, bin, "\u22D2", "\\doublecap");
      defineSymbol(math, ams, bin, "\u22D3", "\\doublecup");
      defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes", true);
      defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow", true);
      defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow", true);
      defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows", true);
      defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows", true);
      defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow", true);
      defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow", true);
      defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail", true);
      defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft", true);
      defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons", true);
      defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft", true);
      defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft", true);
      defineSymbol(math, ams, rel, "\u21B0", "\\Lsh", true);
      defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows", true);
      defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft", true);
      defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft", true);
      defineSymbol(math, main, rel, "\u22B6", "\\origof", true);
      defineSymbol(math, main, rel, "\u22B7", "\\imageof", true);
      defineSymbol(math, ams, rel, "\u22B8", "\\multimap", true);
      defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true);
      defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows", true);
      defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows", true);
      defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow", true);
      defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail", true);
      defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright", true);
      defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright", true);
      defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright", true);
      defineSymbol(math, ams, rel, "\u21B1", "\\Rsh", true);
      defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows", true);
      defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright", true);
      defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright", true);
      defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow", true);
      defineSymbol(math, ams, rel, "\u21DD", "\\leadsto");
      defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow", true);
      defineSymbol(math, ams, rel, "\u21BE", "\\restriction");
      defineSymbol(math, main, textord, "\u2018", "`");
      defineSymbol(math, main, textord, "$", "\\$");
      defineSymbol(text2, main, textord, "$", "\\$");
      defineSymbol(text2, main, textord, "$", "\\textdollar");
      defineSymbol(math, main, textord, "%", "\\%");
      defineSymbol(text2, main, textord, "%", "\\%");
      defineSymbol(math, main, textord, "_", "\\_");
      defineSymbol(text2, main, textord, "_", "\\_");
      defineSymbol(text2, main, textord, "_", "\\textunderscore");
      defineSymbol(math, main, textord, "\u2220", "\\angle", true);
      defineSymbol(math, main, textord, "\u221E", "\\infty", true);
      defineSymbol(math, main, textord, "\u2032", "\\prime");
      defineSymbol(math, main, textord, "\u25B3", "\\triangle");
      defineSymbol(math, main, textord, "\u0393", "\\Gamma", true);
      defineSymbol(math, main, textord, "\u0394", "\\Delta", true);
      defineSymbol(math, main, textord, "\u0398", "\\Theta", true);
      defineSymbol(math, main, textord, "\u039B", "\\Lambda", true);
      defineSymbol(math, main, textord, "\u039E", "\\Xi", true);
      defineSymbol(math, main, textord, "\u03A0", "\\Pi", true);
      defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true);
      defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true);
      defineSymbol(math, main, textord, "\u03A6", "\\Phi", true);
      defineSymbol(math, main, textord, "\u03A8", "\\Psi", true);
      defineSymbol(math, main, textord, "\u03A9", "\\Omega", true);
      defineSymbol(math, main, textord, "A", "\u0391");
      defineSymbol(math, main, textord, "B", "\u0392");
      defineSymbol(math, main, textord, "E", "\u0395");
      defineSymbol(math, main, textord, "Z", "\u0396");
      defineSymbol(math, main, textord, "H", "\u0397");
      defineSymbol(math, main, textord, "I", "\u0399");
      defineSymbol(math, main, textord, "K", "\u039A");
      defineSymbol(math, main, textord, "M", "\u039C");
      defineSymbol(math, main, textord, "N", "\u039D");
      defineSymbol(math, main, textord, "O", "\u039F");
      defineSymbol(math, main, textord, "P", "\u03A1");
      defineSymbol(math, main, textord, "T", "\u03A4");
      defineSymbol(math, main, textord, "X", "\u03A7");
      defineSymbol(math, main, textord, "\xAC", "\\neg", true);
      defineSymbol(math, main, textord, "\xAC", "\\lnot");
      defineSymbol(math, main, textord, "\u22A4", "\\top");
      defineSymbol(math, main, textord, "\u22A5", "\\bot");
      defineSymbol(math, main, textord, "\u2205", "\\emptyset");
      defineSymbol(math, ams, textord, "\u2205", "\\varnothing");
      defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true);
      defineSymbol(math, main, mathord, "\u03B2", "\\beta", true);
      defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true);
      defineSymbol(math, main, mathord, "\u03B4", "\\delta", true);
      defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true);
      defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true);
      defineSymbol(math, main, mathord, "\u03B7", "\\eta", true);
      defineSymbol(math, main, mathord, "\u03B8", "\\theta", true);
      defineSymbol(math, main, mathord, "\u03B9", "\\iota", true);
      defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true);
      defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true);
      defineSymbol(math, main, mathord, "\u03BC", "\\mu", true);
      defineSymbol(math, main, mathord, "\u03BD", "\\nu", true);
      defineSymbol(math, main, mathord, "\u03BE", "\\xi", true);
      defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true);
      defineSymbol(math, main, mathord, "\u03C0", "\\pi", true);
      defineSymbol(math, main, mathord, "\u03C1", "\\rho", true);
      defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true);
      defineSymbol(math, main, mathord, "\u03C4", "\\tau", true);
      defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true);
      defineSymbol(math, main, mathord, "\u03D5", "\\phi", true);
      defineSymbol(math, main, mathord, "\u03C7", "\\chi", true);
      defineSymbol(math, main, mathord, "\u03C8", "\\psi", true);
      defineSymbol(math, main, mathord, "\u03C9", "\\omega", true);
      defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true);
      defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true);
      defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true);
      defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true);
      defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true);
      defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true);
      defineSymbol(math, main, bin, "\u2217", "*", true);
      defineSymbol(math, main, bin, "+", "+");
      defineSymbol(math, main, bin, "\u2212", "-", true);
      defineSymbol(math, main, bin, "\u22C5", "\\cdot", true);
      defineSymbol(math, main, bin, "\u2218", "\\circ", true);
      defineSymbol(math, main, bin, "\xF7", "\\div", true);
      defineSymbol(math, main, bin, "\xB1", "\\pm", true);
      defineSymbol(math, main, bin, "\xD7", "\\times", true);
      defineSymbol(math, main, bin, "\u2229", "\\cap", true);
      defineSymbol(math, main, bin, "\u222A", "\\cup", true);
      defineSymbol(math, main, bin, "\u2216", "\\setminus", true);
      defineSymbol(math, main, bin, "\u2227", "\\land");
      defineSymbol(math, main, bin, "\u2228", "\\lor");
      defineSymbol(math, main, bin, "\u2227", "\\wedge", true);
      defineSymbol(math, main, bin, "\u2228", "\\vee", true);
      defineSymbol(math, main, textord, "\u221A", "\\surd");
      defineSymbol(math, main, open, "\u27E8", "\\langle", true);
      defineSymbol(math, main, open, "\u2223", "\\lvert");
      defineSymbol(math, main, open, "\u2225", "\\lVert");
      defineSymbol(math, main, close, "?", "?");
      defineSymbol(math, main, close, "!", "!");
      defineSymbol(math, main, close, "\u27E9", "\\rangle", true);
      defineSymbol(math, main, close, "\u2223", "\\rvert");
      defineSymbol(math, main, close, "\u2225", "\\rVert");
      defineSymbol(math, main, rel, "=", "=");
      defineSymbol(math, main, rel, ":", ":");
      defineSymbol(math, main, rel, "\u2248", "\\approx", true);
      defineSymbol(math, main, rel, "\u2245", "\\cong", true);
      defineSymbol(math, main, rel, "\u2265", "\\ge");
      defineSymbol(math, main, rel, "\u2265", "\\geq", true);
      defineSymbol(math, main, rel, "\u2190", "\\gets");
      defineSymbol(math, main, rel, ">", "\\gt", true);
      defineSymbol(math, main, rel, "\u2208", "\\in", true);
      defineSymbol(math, main, rel, "\uE020", "\\@not");
      defineSymbol(math, main, rel, "\u2282", "\\subset", true);
      defineSymbol(math, main, rel, "\u2283", "\\supset", true);
      defineSymbol(math, main, rel, "\u2286", "\\subseteq", true);
      defineSymbol(math, main, rel, "\u2287", "\\supseteq", true);
      defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true);
      defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true);
      defineSymbol(math, main, rel, "\u22A8", "\\models");
      defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true);
      defineSymbol(math, main, rel, "\u2264", "\\le");
      defineSymbol(math, main, rel, "\u2264", "\\leq", true);
      defineSymbol(math, main, rel, "<", "\\lt", true);
      defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true);
      defineSymbol(math, main, rel, "\u2192", "\\to");
      defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true);
      defineSymbol(math, ams, rel, "\u2270", "\\nleq", true);
      defineSymbol(math, main, spacing, "\xA0", "\\ ");
      defineSymbol(math, main, spacing, "\xA0", "\\space");
      defineSymbol(math, main, spacing, "\xA0", "\\nobreakspace");
      defineSymbol(text2, main, spacing, "\xA0", "\\ ");
      defineSymbol(text2, main, spacing, "\xA0", " ");
      defineSymbol(text2, main, spacing, "\xA0", "\\space");
      defineSymbol(text2, main, spacing, "\xA0", "\\nobreakspace");
      defineSymbol(math, main, spacing, null, "\\nobreak");
      defineSymbol(math, main, spacing, null, "\\allowbreak");
      defineSymbol(math, main, punct, ",", ",");
      defineSymbol(math, main, punct, ";", ";");
      defineSymbol(math, ams, bin, "\u22BC", "\\barwedge", true);
      defineSymbol(math, ams, bin, "\u22BB", "\\veebar", true);
      defineSymbol(math, main, bin, "\u2299", "\\odot", true);
      defineSymbol(math, main, bin, "\u2295", "\\oplus", true);
      defineSymbol(math, main, bin, "\u2297", "\\otimes", true);
      defineSymbol(math, main, textord, "\u2202", "\\partial", true);
      defineSymbol(math, main, bin, "\u2298", "\\oslash", true);
      defineSymbol(math, ams, bin, "\u229A", "\\circledcirc", true);
      defineSymbol(math, ams, bin, "\u22A1", "\\boxdot", true);
      defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup");
      defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown");
      defineSymbol(math, main, bin, "\u2020", "\\dagger");
      defineSymbol(math, main, bin, "\u22C4", "\\diamond");
      defineSymbol(math, main, bin, "\u22C6", "\\star");
      defineSymbol(math, main, bin, "\u25C3", "\\triangleleft");
      defineSymbol(math, main, bin, "\u25B9", "\\triangleright");
      defineSymbol(math, main, open, "{", "\\{");
      defineSymbol(text2, main, textord, "{", "\\{");
      defineSymbol(text2, main, textord, "{", "\\textbraceleft");
      defineSymbol(math, main, close, "}", "\\}");
      defineSymbol(text2, main, textord, "}", "\\}");
      defineSymbol(text2, main, textord, "}", "\\textbraceright");
      defineSymbol(math, main, open, "{", "\\lbrace");
      defineSymbol(math, main, close, "}", "\\rbrace");
      defineSymbol(math, main, open, "[", "\\lbrack", true);
      defineSymbol(text2, main, textord, "[", "\\lbrack", true);
      defineSymbol(math, main, close, "]", "\\rbrack", true);
      defineSymbol(text2, main, textord, "]", "\\rbrack", true);
      defineSymbol(math, main, open, "(", "\\lparen", true);
      defineSymbol(math, main, close, ")", "\\rparen", true);
      defineSymbol(text2, main, textord, "<", "\\textless", true);
      defineSymbol(text2, main, textord, ">", "\\textgreater", true);
      defineSymbol(math, main, open, "\u230A", "\\lfloor", true);
      defineSymbol(math, main, close, "\u230B", "\\rfloor", true);
      defineSymbol(math, main, open, "\u2308", "\\lceil", true);
      defineSymbol(math, main, close, "\u2309", "\\rceil", true);
      defineSymbol(math, main, textord, "\\", "\\backslash");
      defineSymbol(math, main, textord, "\u2223", "|");
      defineSymbol(math, main, textord, "\u2223", "\\vert");
      defineSymbol(text2, main, textord, "|", "\\textbar", true);
      defineSymbol(math, main, textord, "\u2225", "\\|");
      defineSymbol(math, main, textord, "\u2225", "\\Vert");
      defineSymbol(text2, main, textord, "\u2225", "\\textbardbl");
      defineSymbol(text2, main, textord, "~", "\\textasciitilde");
      defineSymbol(text2, main, textord, "\\", "\\textbackslash");
      defineSymbol(text2, main, textord, "^", "\\textasciicircum");
      defineSymbol(math, main, rel, "\u2191", "\\uparrow", true);
      defineSymbol(math, main, rel, "\u21D1", "\\Uparrow", true);
      defineSymbol(math, main, rel, "\u2193", "\\downarrow", true);
      defineSymbol(math, main, rel, "\u21D3", "\\Downarrow", true);
      defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true);
      defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow", true);
      defineSymbol(math, main, op, "\u2210", "\\coprod");
      defineSymbol(math, main, op, "\u22C1", "\\bigvee");
      defineSymbol(math, main, op, "\u22C0", "\\bigwedge");
      defineSymbol(math, main, op, "\u2A04", "\\biguplus");
      defineSymbol(math, main, op, "\u22C2", "\\bigcap");
      defineSymbol(math, main, op, "\u22C3", "\\bigcup");
      defineSymbol(math, main, op, "\u222B", "\\int");
      defineSymbol(math, main, op, "\u222B", "\\intop");
      defineSymbol(math, main, op, "\u222C", "\\iint");
      defineSymbol(math, main, op, "\u222D", "\\iiint");
      defineSymbol(math, main, op, "\u220F", "\\prod");
      defineSymbol(math, main, op, "\u2211", "\\sum");
      defineSymbol(math, main, op, "\u2A02", "\\bigotimes");
      defineSymbol(math, main, op, "\u2A01", "\\bigoplus");
      defineSymbol(math, main, op, "\u2A00", "\\bigodot");
      defineSymbol(math, main, op, "\u222E", "\\oint");
      defineSymbol(math, main, op, "\u222F", "\\oiint");
      defineSymbol(math, main, op, "\u2230", "\\oiiint");
      defineSymbol(math, main, op, "\u2A06", "\\bigsqcup");
      defineSymbol(math, main, op, "\u222B", "\\smallint");
      defineSymbol(text2, main, inner, "\u2026", "\\textellipsis");
      defineSymbol(math, main, inner, "\u2026", "\\mathellipsis");
      defineSymbol(text2, main, inner, "\u2026", "\\ldots", true);
      defineSymbol(math, main, inner, "\u2026", "\\ldots", true);
      defineSymbol(math, main, inner, "\u22EF", "\\@cdots", true);
      defineSymbol(math, main, inner, "\u22F1", "\\ddots", true);
      defineSymbol(math, main, textord, "\u22EE", "\\varvdots");
      defineSymbol(text2, main, textord, "\u22EE", "\\varvdots");
      defineSymbol(math, main, accent, "\u02CA", "\\acute");
      defineSymbol(math, main, accent, "\u02CB", "\\grave");
      defineSymbol(math, main, accent, "\xA8", "\\ddot");
      defineSymbol(math, main, accent, "~", "\\tilde");
      defineSymbol(math, main, accent, "\u02C9", "\\bar");
      defineSymbol(math, main, accent, "\u02D8", "\\breve");
      defineSymbol(math, main, accent, "\u02C7", "\\check");
      defineSymbol(math, main, accent, "^", "\\hat");
      defineSymbol(math, main, accent, "\u20D7", "\\vec");
      defineSymbol(math, main, accent, "\u02D9", "\\dot");
      defineSymbol(math, main, accent, "\u02DA", "\\mathring");
      defineSymbol(math, main, mathord, "\uE131", "\\@imath");
      defineSymbol(math, main, mathord, "\uE237", "\\@jmath");
      defineSymbol(math, main, textord, "\u0131", "\u0131");
      defineSymbol(math, main, textord, "\u0237", "\u0237");
      defineSymbol(text2, main, textord, "\u0131", "\\i", true);
      defineSymbol(text2, main, textord, "\u0237", "\\j", true);
      defineSymbol(text2, main, textord, "\xDF", "\\ss", true);
      defineSymbol(text2, main, textord, "\xE6", "\\ae", true);
      defineSymbol(text2, main, textord, "\u0153", "\\oe", true);
      defineSymbol(text2, main, textord, "\xF8", "\\o", true);
      defineSymbol(text2, main, textord, "\xC6", "\\AE", true);
      defineSymbol(text2, main, textord, "\u0152", "\\OE", true);
      defineSymbol(text2, main, textord, "\xD8", "\\O", true);
      defineSymbol(text2, main, accent, "\u02CA", "\\'");
      defineSymbol(text2, main, accent, "\u02CB", "\\`");
      defineSymbol(text2, main, accent, "\u02C6", "\\^");
      defineSymbol(text2, main, accent, "\u02DC", "\\~");
      defineSymbol(text2, main, accent, "\u02C9", "\\=");
      defineSymbol(text2, main, accent, "\u02D8", "\\u");
      defineSymbol(text2, main, accent, "\u02D9", "\\.");
      defineSymbol(text2, main, accent, "\xB8", "\\c");
      defineSymbol(text2, main, accent, "\u02DA", "\\r");
      defineSymbol(text2, main, accent, "\u02C7", "\\v");
      defineSymbol(text2, main, accent, "\xA8", '\\"');
      defineSymbol(text2, main, accent, "\u02DD", "\\H");
      defineSymbol(text2, main, accent, "\u25EF", "\\textcircled");
      ligatures = {
        "--": true,
        "---": true,
        "``": true,
        "''": true
      };
      defineSymbol(text2, main, textord, "\u2013", "--", true);
      defineSymbol(text2, main, textord, "\u2013", "\\textendash");
      defineSymbol(text2, main, textord, "\u2014", "---", true);
      defineSymbol(text2, main, textord, "\u2014", "\\textemdash");
      defineSymbol(text2, main, textord, "\u2018", "`", true);
      defineSymbol(text2, main, textord, "\u2018", "\\textquoteleft");
      defineSymbol(text2, main, textord, "\u2019", "'", true);
      defineSymbol(text2, main, textord, "\u2019", "\\textquoteright");
      defineSymbol(text2, main, textord, "\u201C", "``", true);
      defineSymbol(text2, main, textord, "\u201C", "\\textquotedblleft");
      defineSymbol(text2, main, textord, "\u201D", "''", true);
      defineSymbol(text2, main, textord, "\u201D", "\\textquotedblright");
      defineSymbol(math, main, textord, "\xB0", "\\degree", true);
      defineSymbol(text2, main, textord, "\xB0", "\\degree");
      defineSymbol(text2, main, textord, "\xB0", "\\textdegree", true);
      defineSymbol(math, main, textord, "\xA3", "\\pounds");
      defineSymbol(math, main, textord, "\xA3", "\\mathsterling", true);
      defineSymbol(text2, main, textord, "\xA3", "\\pounds");
      defineSymbol(text2, main, textord, "\xA3", "\\textsterling", true);
      defineSymbol(math, ams, textord, "\u2720", "\\maltese");
      defineSymbol(text2, ams, textord, "\u2720", "\\maltese");
      mathTextSymbols = '0123456789/@."';
      for (i2 = 0; i2 < mathTextSymbols.length; i2++) {
        ch = mathTextSymbols.charAt(i2);
        defineSymbol(math, main, textord, ch, ch);
      }
      textSymbols = '0123456789!@*()-=+";:?/.,';
      for (_i = 0; _i < textSymbols.length; _i++) {
        _ch = textSymbols.charAt(_i);
        defineSymbol(text2, main, textord, _ch, _ch);
      }
      letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
      for (_i2 = 0; _i2 < letters.length; _i2++) {
        _ch2 = letters.charAt(_i2);
        defineSymbol(math, main, mathord, _ch2, _ch2);
        defineSymbol(text2, main, textord, _ch2, _ch2);
      }
      defineSymbol(math, ams, textord, "C", "\u2102");
      defineSymbol(text2, ams, textord, "C", "\u2102");
      defineSymbol(math, ams, textord, "H", "\u210D");
      defineSymbol(text2, ams, textord, "H", "\u210D");
      defineSymbol(math, ams, textord, "N", "\u2115");
      defineSymbol(text2, ams, textord, "N", "\u2115");
      defineSymbol(math, ams, textord, "P", "\u2119");
      defineSymbol(text2, ams, textord, "P", "\u2119");
      defineSymbol(math, ams, textord, "Q", "\u211A");
      defineSymbol(text2, ams, textord, "Q", "\u211A");
      defineSymbol(math, ams, textord, "R", "\u211D");
      defineSymbol(text2, ams, textord, "R", "\u211D");
      defineSymbol(math, ams, textord, "Z", "\u2124");
      defineSymbol(text2, ams, textord, "Z", "\u2124");
      defineSymbol(math, main, mathord, "h", "\u210E");
      defineSymbol(text2, main, mathord, "h", "\u210E");
      wideChar = "";
      for (_i3 = 0; _i3 < letters.length; _i3++) {
        _ch3 = letters.charAt(_i3);
        wideChar = String.fromCharCode(55349, 56320 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56372 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56424 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56580 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56684 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56736 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56788 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56840 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56944 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text2, main, textord, _ch3, wideChar);
        if (_i3 < 26) {
          wideChar = String.fromCharCode(55349, 56632 + _i3);
          defineSymbol(math, main, mathord, _ch3, wideChar);
          defineSymbol(text2, main, textord, _ch3, wideChar);
          wideChar = String.fromCharCode(55349, 56476 + _i3);
          defineSymbol(math, main, mathord, _ch3, wideChar);
          defineSymbol(text2, main, textord, _ch3, wideChar);
        }
      }
      wideChar = String.fromCharCode(55349, 56668);
      defineSymbol(math, main, mathord, "k", wideChar);
      defineSymbol(text2, main, textord, "k", wideChar);
      for (_i4 = 0; _i4 < 10; _i4++) {
        _ch4 = _i4.toString();
        wideChar = String.fromCharCode(55349, 57294 + _i4);
        defineSymbol(math, main, mathord, _ch4, wideChar);
        defineSymbol(text2, main, textord, _ch4, wideChar);
        wideChar = String.fromCharCode(55349, 57314 + _i4);
        defineSymbol(math, main, mathord, _ch4, wideChar);
        defineSymbol(text2, main, textord, _ch4, wideChar);
        wideChar = String.fromCharCode(55349, 57324 + _i4);
        defineSymbol(math, main, mathord, _ch4, wideChar);
        defineSymbol(text2, main, textord, _ch4, wideChar);
        wideChar = String.fromCharCode(55349, 57334 + _i4);
        defineSymbol(math, main, mathord, _ch4, wideChar);
        defineSymbol(text2, main, textord, _ch4, wideChar);
      }
      extraLatin = "\xD0\xDE\xFE";
      for (_i5 = 0; _i5 < extraLatin.length; _i5++) {
        _ch5 = extraLatin.charAt(_i5);
        defineSymbol(math, main, mathord, _ch5, _ch5);
        defineSymbol(text2, main, textord, _ch5, _ch5);
      }
      wideLatinLetterData = [
        ["mathbf", "textbf", "Main-Bold"],
        // A-Z bold upright
        ["mathbf", "textbf", "Main-Bold"],
        // a-z bold upright
        ["mathnormal", "textit", "Math-Italic"],
        // A-Z italic
        ["mathnormal", "textit", "Math-Italic"],
        // a-z italic
        ["boldsymbol", "boldsymbol", "Main-BoldItalic"],
        // A-Z bold italic
        ["boldsymbol", "boldsymbol", "Main-BoldItalic"],
        // a-z bold italic
        // Map fancy A-Z letters to script, not calligraphic.
        // This aligns with unicode-math and math fonts (except Cambria Math).
        ["mathscr", "textscr", "Script-Regular"],
        // A-Z script
        ["", "", ""],
        // a-z script.  No font
        ["", "", ""],
        // A-Z bold script. No font
        ["", "", ""],
        // a-z bold script. No font
        ["mathfrak", "textfrak", "Fraktur-Regular"],
        // A-Z Fraktur
        ["mathfrak", "textfrak", "Fraktur-Regular"],
        // a-z Fraktur
        ["mathbb", "textbb", "AMS-Regular"],
        // A-Z double-struck
        ["mathbb", "textbb", "AMS-Regular"],
        // k double-struck
        // Note that we are using a bold font, but font metrics for regular Fraktur.
        ["mathboldfrak", "textboldfrak", "Fraktur-Regular"],
        // A-Z bold Fraktur
        ["mathboldfrak", "textboldfrak", "Fraktur-Regular"],
        // a-z bold Fraktur
        ["mathsf", "textsf", "SansSerif-Regular"],
        // A-Z sans-serif
        ["mathsf", "textsf", "SansSerif-Regular"],
        // a-z sans-serif
        ["mathboldsf", "textboldsf", "SansSerif-Bold"],
        // A-Z bold sans-serif
        ["mathboldsf", "textboldsf", "SansSerif-Bold"],
        // a-z bold sans-serif
        ["mathitsf", "textitsf", "SansSerif-Italic"],
        // A-Z italic sans-serif
        ["mathitsf", "textitsf", "SansSerif-Italic"],
        // a-z italic sans-serif
        ["", "", ""],
        // A-Z bold italic sans. No font
        ["", "", ""],
        // a-z bold italic sans. No font
        ["mathtt", "texttt", "Typewriter-Regular"],
        // A-Z monospace
        ["mathtt", "texttt", "Typewriter-Regular"]
        // a-z monospace
      ];
      wideNumeralData = [
        ["mathbf", "textbf", "Main-Bold"],
        // 0-9 bold
        ["", "", ""],
        // 0-9 double-struck. No KaTeX font.
        ["mathsf", "textsf", "SansSerif-Regular"],
        // 0-9 sans-serif
        ["mathboldsf", "textboldsf", "SansSerif-Bold"],
        // 0-9 bold sans-serif
        ["mathtt", "texttt", "Typewriter-Regular"]
        // 0-9 monospace
      ];
      wideCharacterFont = /* @__PURE__ */ __name((wideChar2, mode) => {
        var H2 = wideChar2.charCodeAt(0);
        var L3 = wideChar2.charCodeAt(1);
        var codePoint = (H2 - 55296) * 1024 + (L3 - 56320) + 65536;
        var j3 = mode === "math" ? 0 : 1;
        if (119808 <= codePoint && codePoint < 120484) {
          var i2 = Math.floor((codePoint - 119808) / 26);
          return [wideLatinLetterData[i2][2], wideLatinLetterData[i2][j3]];
        } else if (120782 <= codePoint && codePoint <= 120831) {
          var _i = Math.floor((codePoint - 120782) / 10);
          return [wideNumeralData[_i][2], wideNumeralData[_i][j3]];
        } else if (codePoint === 120485 || codePoint === 120486) {
          return [wideLatinLetterData[0][2], wideLatinLetterData[0][j3]];
        } else if (120486 < codePoint && codePoint < 120782) {
          return ["", ""];
        } else {
          throw new ParseError("Unsupported character: " + wideChar2);
        }
      }, "wideCharacterFont");
      lookupSymbol = /* @__PURE__ */ __name(function lookupSymbol2(value2, fontName, mode) {
        if (symbols[mode][value2]) {
          var replacement = symbols[mode][value2].replace;
          if (replacement) {
            value2 = replacement;
          }
        }
        return {
          value: value2,
          metrics: getCharacterMetrics(value2, fontName, mode)
        };
      }, "lookupSymbol");
      makeSymbol = /* @__PURE__ */ __name(function makeSymbol2(value2, fontName, mode, options2, classes3) {
        var lookup2 = lookupSymbol(value2, fontName, mode);
        var metrics = lookup2.metrics;
        value2 = lookup2.value;
        var symbolNode;
        if (metrics) {
          var italic = metrics.italic;
          if (mode === "text" || options2 && options2.font === "mathit") {
            italic = 0;
          }
          symbolNode = new SymbolNode(value2, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes3);
        } else {
          typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value2 + "' in style '" + fontName + "' and mode '" + mode + "'"));
          symbolNode = new SymbolNode(value2, 0, 0, 0, 0, 0, classes3);
        }
        if (options2) {
          symbolNode.maxFontSize = options2.sizeMultiplier;
          if (options2.style.isTight()) {
            symbolNode.classes.push("mtight");
          }
          var color2 = options2.getColor();
          if (color2) {
            symbolNode.style.color = color2;
          }
        }
        return symbolNode;
      }, "makeSymbol");
      mathsym = /* @__PURE__ */ __name(function mathsym2(value2, mode, options2, classes3) {
        if (classes3 === void 0) {
          classes3 = [];
        }
        if (options2.font === "boldsymbol" && lookupSymbol(value2, "Main-Bold", mode).metrics) {
          return makeSymbol(value2, "Main-Bold", mode, options2, classes3.concat(["mathbf"]));
        } else if (value2 === "\\" || symbols[mode][value2].font === "main") {
          return makeSymbol(value2, "Main-Regular", mode, options2, classes3);
        } else {
          return makeSymbol(value2, "AMS-Regular", mode, options2, classes3.concat(["amsrm"]));
        }
      }, "mathsym");
      boldsymbol = /* @__PURE__ */ __name(function boldsymbol2(value2, mode, options2, classes3, type3) {
        if (type3 !== "textord" && lookupSymbol(value2, "Math-BoldItalic", mode).metrics) {
          return {
            fontName: "Math-BoldItalic",
            fontClass: "boldsymbol"
          };
        } else {
          return {
            fontName: "Main-Bold",
            fontClass: "mathbf"
          };
        }
      }, "boldsymbol");
      makeOrd = /* @__PURE__ */ __name(function makeOrd2(group2, options2, type3) {
        var mode = group2.mode;
        var text4 = group2.text;
        var classes3 = ["mord"];
        var isFont = mode === "math" || mode === "text" && options2.font;
        var fontOrFamily = isFont ? options2.font : options2.fontFamily;
        var wideFontName = "";
        var wideFontClass = "";
        if (text4.charCodeAt(0) === 55349) {
          [wideFontName, wideFontClass] = wideCharacterFont(text4, mode);
        }
        if (wideFontName.length > 0) {
          return makeSymbol(text4, wideFontName, mode, options2, classes3.concat(wideFontClass));
        } else if (fontOrFamily) {
          var fontName;
          var fontClasses;
          if (fontOrFamily === "boldsymbol") {
            var fontData = boldsymbol(text4, mode, options2, classes3, type3);
            fontName = fontData.fontName;
            fontClasses = [fontData.fontClass];
          } else if (isFont) {
            fontName = fontMap[fontOrFamily].fontName;
            fontClasses = [fontOrFamily];
          } else {
            fontName = retrieveTextFontName(fontOrFamily, options2.fontWeight, options2.fontShape);
            fontClasses = [fontOrFamily, options2.fontWeight, options2.fontShape];
          }
          if (lookupSymbol(text4, fontName, mode).metrics) {
            return makeSymbol(text4, fontName, mode, options2, classes3.concat(fontClasses));
          } else if (ligatures.hasOwnProperty(text4) && fontName.slice(0, 10) === "Typewriter") {
            var parts = [];
            for (var i2 = 0; i2 < text4.length; i2++) {
              parts.push(makeSymbol(text4[i2], fontName, mode, options2, classes3.concat(fontClasses)));
            }
            return makeFragment(parts);
          }
        }
        if (type3 === "mathord") {
          return makeSymbol(text4, "Math-Italic", mode, options2, classes3.concat(["mathnormal"]));
        } else if (type3 === "textord") {
          var font = symbols[mode][text4] && symbols[mode][text4].font;
          if (font === "ams") {
            var _fontName = retrieveTextFontName("amsrm", options2.fontWeight, options2.fontShape);
            return makeSymbol(text4, _fontName, mode, options2, classes3.concat("amsrm", options2.fontWeight, options2.fontShape));
          } else if (font === "main" || !font) {
            var _fontName2 = retrieveTextFontName("textrm", options2.fontWeight, options2.fontShape);
            return makeSymbol(text4, _fontName2, mode, options2, classes3.concat(options2.fontWeight, options2.fontShape));
          } else {
            var _fontName3 = retrieveTextFontName(font, options2.fontWeight, options2.fontShape);
            return makeSymbol(text4, _fontName3, mode, options2, classes3.concat(_fontName3, options2.fontWeight, options2.fontShape));
          }
        } else {
          throw new Error("unexpected type: " + type3 + " in makeOrd");
        }
      }, "makeOrd");
      canCombine = /* @__PURE__ */ __name((prev2, next3) => {
        if (createClass(prev2.classes) !== createClass(next3.classes) || prev2.skew !== next3.skew || prev2.maxFontSize !== next3.maxFontSize || prev2.italic !== 0 && prev2.hasClass("mathnormal")) {
          return false;
        }
        if (prev2.classes.length === 1) {
          var cls = prev2.classes[0];
          if (cls === "mbin" || cls === "mord") {
            return false;
          }
        }
        for (var key of Object.keys(prev2.style)) {
          if (prev2.style[key] !== next3.style[key]) {
            return false;
          }
        }
        for (var _key of Object.keys(next3.style)) {
          if (prev2.style[_key] !== next3.style[_key]) {
            return false;
          }
        }
        return true;
      }, "canCombine");
      tryCombineChars = /* @__PURE__ */ __name((chars) => {
        for (var i2 = 0; i2 < chars.length - 1; i2++) {
          var prev2 = chars[i2];
          var next3 = chars[i2 + 1];
          if (prev2 instanceof SymbolNode && next3 instanceof SymbolNode && canCombine(prev2, next3)) {
            prev2.text += next3.text;
            prev2.height = Math.max(prev2.height, next3.height);
            prev2.depth = Math.max(prev2.depth, next3.depth);
            prev2.italic = next3.italic;
            chars.splice(i2 + 1, 1);
            i2--;
          }
        }
        return chars;
      }, "tryCombineChars");
      sizeElementFromChildren = /* @__PURE__ */ __name(function sizeElementFromChildren2(elem) {
        var height2 = 0;
        var depth = 0;
        var maxFontSize = 0;
        for (var i2 = 0; i2 < elem.children.length; i2++) {
          var child = elem.children[i2];
          if (child.height > height2) {
            height2 = child.height;
          }
          if (child.depth > depth) {
            depth = child.depth;
          }
          if (child.maxFontSize > maxFontSize) {
            maxFontSize = child.maxFontSize;
          }
        }
        elem.height = height2;
        elem.depth = depth;
        elem.maxFontSize = maxFontSize;
      }, "sizeElementFromChildren");
      makeSpan = /* @__PURE__ */ __name(function makeSpan2(classes3, children2, options2, style3) {
        var span = new Span(classes3, children2, options2, style3);
        sizeElementFromChildren(span);
        return span;
      }, "makeSpan");
      makeSvgSpan = /* @__PURE__ */ __name((classes3, children2, options2, style3) => new Span(classes3, children2, options2, style3), "makeSvgSpan");
      makeLineSpan = /* @__PURE__ */ __name(function makeLineSpan2(className, options2, thickness) {
        var line2 = makeSpan([className], [], options2);
        line2.height = Math.max(thickness || options2.fontMetrics().defaultRuleThickness, options2.minRuleThickness);
        line2.style.borderBottomWidth = makeEm(line2.height);
        line2.maxFontSize = 1;
        return line2;
      }, "makeLineSpan");
      makeAnchor = /* @__PURE__ */ __name(function makeAnchor2(href, classes3, children2, options2) {
        var anchor2 = new Anchor(href, classes3, children2, options2);
        sizeElementFromChildren(anchor2);
        return anchor2;
      }, "makeAnchor");
      makeFragment = /* @__PURE__ */ __name(function makeFragment2(children2) {
        var fragment = new DocumentFragment(children2);
        sizeElementFromChildren(fragment);
        return fragment;
      }, "makeFragment");
      wrapFragment = /* @__PURE__ */ __name(function wrapFragment2(group2, options2) {
        if (group2 instanceof DocumentFragment) {
          return makeSpan([], [group2], options2);
        }
        return group2;
      }, "wrapFragment");
      getVListChildrenAndDepth = /* @__PURE__ */ __name(function getVListChildrenAndDepth2(params) {
        if (params.positionType === "individualShift") {
          var oldChildren = params.children;
          var children2 = [oldChildren[0]];
          var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
          var currPos = _depth;
          for (var i2 = 1; i2 < oldChildren.length; i2++) {
            var diff2 = -oldChildren[i2].shift - currPos - oldChildren[i2].elem.depth;
            var size4 = diff2 - (oldChildren[i2 - 1].elem.height + oldChildren[i2 - 1].elem.depth);
            currPos = currPos + diff2;
            children2.push({
              type: "kern",
              size: size4
            });
            children2.push(oldChildren[i2]);
          }
          return {
            children: children2,
            depth: _depth
          };
        }
        var depth;
        if (params.positionType === "top") {
          var bottom2 = params.positionData;
          for (var _i = 0; _i < params.children.length; _i++) {
            var child = params.children[_i];
            bottom2 -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth;
          }
          depth = bottom2;
        } else if (params.positionType === "bottom") {
          depth = -params.positionData;
        } else {
          var firstChild = params.children[0];
          if (firstChild.type !== "elem") {
            throw new Error('First child must have type "elem".');
          }
          if (params.positionType === "shift") {
            depth = -firstChild.elem.depth - params.positionData;
          } else if (params.positionType === "firstBaseline") {
            depth = -firstChild.elem.depth;
          } else {
            throw new Error("Invalid positionType " + params.positionType + ".");
          }
        }
        return {
          children: params.children,
          depth
        };
      }, "getVListChildrenAndDepth");
      makeVList = /* @__PURE__ */ __name(function makeVList2(params, options2) {
        var {
          children: children2,
          depth
        } = getVListChildrenAndDepth(params);
        var pstrutSize = 0;
        for (var i2 = 0; i2 < children2.length; i2++) {
          var child = children2[i2];
          if (child.type === "elem") {
            var elem = child.elem;
            pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);
          }
        }
        pstrutSize += 2;
        var pstrut = makeSpan(["pstrut"], []);
        pstrut.style.height = makeEm(pstrutSize);
        var realChildren = [];
        var minPos = depth;
        var maxPos2 = depth;
        var currPos = depth;
        for (var _i2 = 0; _i2 < children2.length; _i2++) {
          var _child = children2[_i2];
          if (_child.type === "kern") {
            currPos += _child.size;
          } else {
            var _elem = _child.elem;
            var classes3 = _child.wrapperClasses || [];
            var style3 = _child.wrapperStyle || {};
            var childWrap = makeSpan(classes3, [pstrut, _elem], void 0, style3);
            childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);
            if (_child.marginLeft) {
              childWrap.style.marginLeft = _child.marginLeft;
            }
            if (_child.marginRight) {
              childWrap.style.marginRight = _child.marginRight;
            }
            realChildren.push(childWrap);
            currPos += _elem.height + _elem.depth;
          }
          minPos = Math.min(minPos, currPos);
          maxPos2 = Math.max(maxPos2, currPos);
        }
        var vlist = makeSpan(["vlist"], realChildren);
        vlist.style.height = makeEm(maxPos2);
        var rows;
        if (minPos < 0) {
          var emptySpan = makeSpan([], []);
          var depthStrut = makeSpan(["vlist"], [emptySpan]);
          depthStrut.style.height = makeEm(-minPos);
          var topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200B")]);
          rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])];
        } else {
          rows = [makeSpan(["vlist-r"], [vlist])];
        }
        var vtable = makeSpan(["vlist-t"], rows);
        if (rows.length === 2) {
          vtable.classes.push("vlist-t2");
        }
        vtable.height = maxPos2;
        vtable.depth = -minPos;
        return vtable;
      }, "makeVList");
      makeGlue = /* @__PURE__ */ __name((measurement, options2) => {
        var rule = makeSpan(["mspace"], [], options2);
        var size4 = calculateSize2(measurement, options2);
        rule.style.marginRight = makeEm(size4);
        return rule;
      }, "makeGlue");
      retrieveTextFontName = /* @__PURE__ */ __name(function retrieveTextFontName2(fontFamily, fontWeight, fontShape) {
        var baseFontName = "";
        switch (fontFamily) {
          case "amsrm":
            baseFontName = "AMS";
            break;
          case "textrm":
            baseFontName = "Main";
            break;
          case "textsf":
            baseFontName = "SansSerif";
            break;
          case "texttt":
            baseFontName = "Typewriter";
            break;
          default:
            baseFontName = fontFamily;
        }
        var fontStylesName;
        if (fontWeight === "textbf" && fontShape === "textit") {
          fontStylesName = "BoldItalic";
        } else if (fontWeight === "textbf") {
          fontStylesName = "Bold";
        } else if (fontWeight === "textit") {
          fontStylesName = "Italic";
        } else {
          fontStylesName = "Regular";
        }
        return baseFontName + "-" + fontStylesName;
      }, "retrieveTextFontName");
      fontMap = {
        // styles
        "mathbf": {
          variant: "bold",
          fontName: "Main-Bold"
        },
        "mathrm": {
          variant: "normal",
          fontName: "Main-Regular"
        },
        "textit": {
          variant: "italic",
          fontName: "Main-Italic"
        },
        "mathit": {
          variant: "italic",
          fontName: "Main-Italic"
        },
        "mathnormal": {
          variant: "italic",
          fontName: "Math-Italic"
        },
        "mathsfit": {
          variant: "sans-serif-italic",
          fontName: "SansSerif-Italic"
        },
        // "boldsymbol" is missing because they require the use of multiple fonts:
        // Math-BoldItalic and Main-Bold.  This is handled by a special case in
        // makeOrd which ends up calling boldsymbol.
        // families
        "mathbb": {
          variant: "double-struck",
          fontName: "AMS-Regular"
        },
        "mathcal": {
          variant: "script",
          fontName: "Caligraphic-Regular"
        },
        "mathfrak": {
          variant: "fraktur",
          fontName: "Fraktur-Regular"
        },
        "mathscr": {
          variant: "script",
          fontName: "Script-Regular"
        },
        "mathsf": {
          variant: "sans-serif",
          fontName: "SansSerif-Regular"
        },
        "mathtt": {
          variant: "monospace",
          fontName: "Typewriter-Regular"
        }
      };
      svgData = {
        //   path, width, height
        vec: ["vec", 0.471, 0.714],
        // values from the font glyph
        oiintSize1: ["oiintSize1", 0.957, 0.499],
        // oval to overlay the integrand
        oiintSize2: ["oiintSize2", 1.472, 0.659],
        oiiintSize1: ["oiiintSize1", 1.304, 0.499],
        oiiintSize2: ["oiiintSize2", 1.98, 0.659]
      };
      staticSvg = /* @__PURE__ */ __name(function staticSvg2(value2, options2) {
        var [pathName, width3, height2] = svgData[value2];
        var path4 = new PathNode(pathName);
        var svgNode2 = new SvgNode([path4], {
          "width": makeEm(width3),
          "height": makeEm(height2),
          // Override CSS rule `.katex svg { width: 100% }`
          "style": "width:" + makeEm(width3),
          "viewBox": "0 0 " + 1e3 * width3 + " " + 1e3 * height2,
          "preserveAspectRatio": "xMinYMin"
        });
        var span = makeSvgSpan(["overlay"], [svgNode2], options2);
        span.height = height2;
        span.style.height = makeEm(height2);
        span.style.width = makeEm(width3);
        return span;
      }, "staticSvg");
      thinspace = {
        number: 3,
        unit: "mu"
      };
      mediumspace = {
        number: 4,
        unit: "mu"
      };
      thickspace = {
        number: 5,
        unit: "mu"
      };
      spacings = {
        mord: {
          mop: thinspace,
          mbin: mediumspace,
          mrel: thickspace,
          minner: thinspace
        },
        mop: {
          mord: thinspace,
          mop: thinspace,
          mrel: thickspace,
          minner: thinspace
        },
        mbin: {
          mord: mediumspace,
          mop: mediumspace,
          mopen: mediumspace,
          minner: mediumspace
        },
        mrel: {
          mord: thickspace,
          mop: thickspace,
          mopen: thickspace,
          minner: thickspace
        },
        mopen: {},
        mclose: {
          mop: thinspace,
          mbin: mediumspace,
          mrel: thickspace,
          minner: thinspace
        },
        mpunct: {
          mord: thinspace,
          mop: thinspace,
          mrel: thickspace,
          mopen: thinspace,
          mclose: thinspace,
          mpunct: thinspace,
          minner: thinspace
        },
        minner: {
          mord: thinspace,
          mop: thinspace,
          mbin: mediumspace,
          mrel: thickspace,
          mopen: thinspace,
          mpunct: thinspace,
          minner: thinspace
        }
      };
      tightSpacings = {
        mord: {
          mop: thinspace
        },
        mop: {
          mord: thinspace,
          mop: thinspace
        },
        mbin: {},
        mrel: {},
        mopen: {},
        mclose: {
          mop: thinspace
        },
        mpunct: {},
        minner: {
          mop: thinspace
        }
      };
      _functions = {};
      _htmlGroupBuilders = {};
      _mathmlGroupBuilders = {};
      __name(defineFunction, "defineFunction");
      __name(defineFunctionBuilders, "defineFunctionBuilders");
      normalizeArgument = /* @__PURE__ */ __name(function normalizeArgument2(arg) {
        return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg;
      }, "normalizeArgument");
      ordargument = /* @__PURE__ */ __name(function ordargument2(arg) {
        return arg.type === "ordgroup" ? arg.body : [arg];
      }, "ordargument");
      binLeftCanceller = /* @__PURE__ */ new Set(["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]);
      binRightCanceller = /* @__PURE__ */ new Set(["rightmost", "mrel", "mclose", "mpunct"]);
      styleMap$1 = {
        "display": Style$1.DISPLAY,
        "text": Style$1.TEXT,
        "script": Style$1.SCRIPT,
        "scriptscript": Style$1.SCRIPTSCRIPT
      };
      DomEnum = {
        mord: "mord",
        mop: "mop",
        mbin: "mbin",
        mrel: "mrel",
        mopen: "mopen",
        mclose: "mclose",
        mpunct: "mpunct",
        minner: "minner"
      };
      buildExpression$1 = /* @__PURE__ */ __name(function buildExpression(expression, options2, isRealGroup, surrounding) {
        if (surrounding === void 0) {
          surrounding = [null, null];
        }
        var groups = [];
        for (var i2 = 0; i2 < expression.length; i2++) {
          var output2 = buildGroup$1(expression[i2], options2);
          if (output2 instanceof DocumentFragment) {
            var children2 = output2.children;
            groups.push(...children2);
          } else {
            groups.push(output2);
          }
        }
        tryCombineChars(groups);
        if (!isRealGroup) {
          return groups;
        }
        var glueOptions = options2;
        if (expression.length === 1) {
          var node2 = expression[0];
          if (node2.type === "sizing") {
            glueOptions = options2.havingSize(node2.size);
          } else if (node2.type === "styling") {
            glueOptions = options2.havingStyle(styleMap$1[node2.style]);
          }
        }
        var dummyPrev = makeSpan([surrounding[0] || "leftmost"], [], options2);
        var dummyNext = makeSpan([surrounding[1] || "rightmost"], [], options2);
        var isRoot = isRealGroup === "root";
        _traverseNonSpaceNodes(groups, (node3, prev2) => {
          var prevType = prev2.classes[0];
          var type3 = node3.classes[0];
          if (prevType === "mbin" && binRightCanceller.has(type3)) {
            prev2.classes[0] = "mord";
          } else if (type3 === "mbin" && binLeftCanceller.has(prevType)) {
            node3.classes[0] = "mord";
          }
        }, {
          node: dummyPrev
        }, dummyNext, isRoot);
        _traverseNonSpaceNodes(groups, (node3, prev2) => {
          var _tightSpacings$prevTy, _spacings$prevType;
          var prevType = getTypeOfDomTree(prev2);
          var type3 = getTypeOfDomTree(node3);
          var space = prevType && type3 ? node3.hasClass("mtight") ? (_tightSpacings$prevTy = tightSpacings[prevType]) == null ? void 0 : _tightSpacings$prevTy[type3] : (_spacings$prevType = spacings[prevType]) == null ? void 0 : _spacings$prevType[type3] : null;
          if (space) {
            return makeGlue(space, glueOptions);
          }
        }, {
          node: dummyPrev
        }, dummyNext, isRoot);
        return groups;
      }, "buildExpression");
      _traverseNonSpaceNodes = /* @__PURE__ */ __name(function traverseNonSpaceNodes(nodes5, callback, prev2, next3, isRoot) {
        if (next3) {
          nodes5.push(next3);
        }
        var i2 = 0;
        for (; i2 < nodes5.length; i2++) {
          var node2 = nodes5[i2];
          var partialGroup = checkPartialGroup(node2);
          if (partialGroup) {
            _traverseNonSpaceNodes(partialGroup.children, callback, prev2, null, isRoot);
            continue;
          }
          var nonspace = !node2.hasClass("mspace");
          if (nonspace) {
            var result = callback(node2, prev2.node);
            if (result) {
              if (prev2.insertAfter) {
                prev2.insertAfter(result);
              } else {
                nodes5.unshift(result);
                i2++;
              }
            }
          }
          if (nonspace) {
            prev2.node = node2;
          } else if (isRoot && node2.hasClass("newline")) {
            prev2.node = makeSpan(["leftmost"]);
          }
          prev2.insertAfter = /* @__PURE__ */ ((index) => (n2) => {
            nodes5.splice(index + 1, 0, n2);
            i2++;
          })(i2);
        }
        if (next3) {
          nodes5.pop();
        }
      }, "traverseNonSpaceNodes");
      checkPartialGroup = /* @__PURE__ */ __name(function checkPartialGroup2(node2) {
        if (node2 instanceof DocumentFragment || node2 instanceof Anchor || node2 instanceof Span && node2.hasClass("enclosing")) {
          return node2;
        }
        return null;
      }, "checkPartialGroup");
      _getOutermostNode = /* @__PURE__ */ __name(function getOutermostNode(node2, side) {
        var partialGroup = checkPartialGroup(node2);
        if (partialGroup) {
          var children2 = partialGroup.children;
          if (children2.length) {
            if (side === "right") {
              return _getOutermostNode(children2[children2.length - 1], "right");
            } else if (side === "left") {
              return _getOutermostNode(children2[0], "left");
            }
          }
        }
        return node2;
      }, "getOutermostNode");
      getTypeOfDomTree = /* @__PURE__ */ __name(function getTypeOfDomTree2(node2, side) {
        if (!node2) {
          return null;
        }
        if (side) {
          node2 = _getOutermostNode(node2, side);
        }
        var className = node2.classes[0];
        return DomEnum[className] || null;
      }, "getTypeOfDomTree");
      makeNullDelimiter = /* @__PURE__ */ __name(function makeNullDelimiter2(options2, classes3) {
        var moreClasses = ["nulldelimiter"].concat(options2.baseSizingClasses());
        return makeSpan(classes3.concat(moreClasses));
      }, "makeNullDelimiter");
      buildGroup$1 = /* @__PURE__ */ __name(function buildGroup(group2, options2, baseOptions) {
        if (!group2) {
          return makeSpan();
        }
        if (_htmlGroupBuilders[group2.type]) {
          var groupNode = _htmlGroupBuilders[group2.type](group2, options2);
          if (baseOptions && options2.size !== baseOptions.size) {
            groupNode = makeSpan(options2.sizingClasses(baseOptions), [groupNode], options2);
            var multiplier = options2.sizeMultiplier / baseOptions.sizeMultiplier;
            groupNode.height *= multiplier;
            groupNode.depth *= multiplier;
          }
          return groupNode;
        } else {
          throw new ParseError("Got group of unknown type: '" + group2.type + "'");
        }
      }, "buildGroup");
      __name(buildHTMLUnbreakable, "buildHTMLUnbreakable");
      __name(buildHTML, "buildHTML");
      __name(newDocumentFragment, "newDocumentFragment");
      MathNode = class {
        static {
          __name(this, "MathNode");
        }
        constructor(type3, children2, classes3) {
          this.type = type3;
          this.attributes = {};
          this.children = children2 || [];
          this.classes = classes3 || [];
        }
        /**
         * Sets an attribute on a MathML node. MathML depends on attributes to convey a
         * semantic content, so this is used heavily.
         */
        setAttribute(name, value2) {
          this.attributes[name] = value2;
        }
        /**
         * Gets an attribute on a MathML node.
         */
        getAttribute(name) {
          return this.attributes[name];
        }
        /**
         * Converts the math node into a MathML-namespaced DOM element.
         */
        toNode() {
          var node2 = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
          for (var attr in this.attributes) {
            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
              node2.setAttribute(attr, this.attributes[attr]);
            }
          }
          if (this.classes.length > 0) {
            node2.className = createClass(this.classes);
          }
          for (var i2 = 0; i2 < this.children.length; i2++) {
            if (this.children[i2] instanceof TextNode && this.children[i2 + 1] instanceof TextNode) {
              var text4 = this.children[i2].toText() + this.children[++i2].toText();
              while (this.children[i2 + 1] instanceof TextNode) {
                text4 += this.children[++i2].toText();
              }
              node2.appendChild(new TextNode(text4).toNode());
            } else {
              node2.appendChild(this.children[i2].toNode());
            }
          }
          return node2;
        }
        /**
         * Converts the math node into an HTML markup string.
         */
        toMarkup() {
          var markup = "<" + this.type;
          for (var attr in this.attributes) {
            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
              markup += " " + attr + '="';
              markup += escape2(this.attributes[attr]);
              markup += '"';
            }
          }
          if (this.classes.length > 0) {
            markup += ' class ="' + escape2(createClass(this.classes)) + '"';
          }
          markup += ">";
          for (var i2 = 0; i2 < this.children.length; i2++) {
            markup += this.children[i2].toMarkup();
          }
          markup += "</" + this.type + ">";
          return markup;
        }
        /**
         * Converts the math node into a string, similar to innerText, but escaped.
         */
        toText() {
          return this.children.map((child) => child.toText()).join("");
        }
      };
      TextNode = class {
        static {
          __name(this, "TextNode");
        }
        constructor(text4) {
          this.text = text4;
        }
        /**
         * Converts the text node into a DOM text node.
         */
        toNode() {
          return document.createTextNode(this.text);
        }
        /**
         * Converts the text node into escaped HTML markup
         * (representing the text itself).
         */
        toMarkup() {
          return escape2(this.toText());
        }
        /**
         * Converts the text node into a string
         * (representing the text itself).
         */
        toText() {
          return this.text;
        }
      };
      SpaceNode = class {
        static {
          __name(this, "SpaceNode");
        }
        /**
         * Create a Space node with width given in CSS ems.
         */
        constructor(width3) {
          this.width = width3;
          if (width3 >= 0.05555 && width3 <= 0.05556) {
            this.character = "\u200A";
          } else if (width3 >= 0.1666 && width3 <= 0.1667) {
            this.character = "\u2009";
          } else if (width3 >= 0.2222 && width3 <= 0.2223) {
            this.character = "\u2005";
          } else if (width3 >= 0.2777 && width3 <= 0.2778) {
            this.character = "\u2005\u200A";
          } else if (width3 >= -0.05556 && width3 <= -0.05555) {
            this.character = "\u200A\u2063";
          } else if (width3 >= -0.1667 && width3 <= -0.1666) {
            this.character = "\u2009\u2063";
          } else if (width3 >= -0.2223 && width3 <= -0.2222) {
            this.character = "\u205F\u2063";
          } else if (width3 >= -0.2778 && width3 <= -0.2777) {
            this.character = "\u2005\u2063";
          } else {
            this.character = null;
          }
        }
        /**
         * Converts the math node into a MathML-namespaced DOM element.
         */
        toNode() {
          if (this.character) {
            return document.createTextNode(this.character);
          } else {
            var node2 = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");
            node2.setAttribute("width", makeEm(this.width));
            return node2;
          }
        }
        /**
         * Converts the math node into an HTML markup string.
         */
        toMarkup() {
          if (this.character) {
            return "<mtext>" + this.character + "</mtext>";
          } else {
            return '<mspace width="' + makeEm(this.width) + '"/>';
          }
        }
        /**
         * Converts the math node into a string, similar to innerText.
         */
        toText() {
          if (this.character) {
            return this.character;
          } else {
            return " ";
          }
        }
      };
      noVariantSymbols = /* @__PURE__ */ new Set(["\\imath", "\\jmath"]);
      rowLikeTypes = /* @__PURE__ */ new Set(["mrow", "mtable"]);
      makeText = /* @__PURE__ */ __name(function makeText2(text4, mode, options2) {
        if (symbols[mode][text4] && symbols[mode][text4].replace && text4.charCodeAt(0) !== 55349 && !(ligatures.hasOwnProperty(text4) && options2 && (options2.fontFamily && options2.fontFamily.slice(4, 6) === "tt" || options2.font && options2.font.slice(4, 6) === "tt"))) {
          text4 = symbols[mode][text4].replace;
        }
        return new TextNode(text4);
      }, "makeText");
      makeRow = /* @__PURE__ */ __name(function makeRow2(body) {
        if (body.length === 1) {
          return body[0];
        } else {
          return new MathNode("mrow", body);
        }
      }, "makeRow");
      getVariant = /* @__PURE__ */ __name(function getVariant2(group2, options2) {
        if (options2.fontFamily === "texttt") {
          return "monospace";
        } else if (options2.fontFamily === "textsf") {
          if (options2.fontShape === "textit" && options2.fontWeight === "textbf") {
            return "sans-serif-bold-italic";
          } else if (options2.fontShape === "textit") {
            return "sans-serif-italic";
          } else if (options2.fontWeight === "textbf") {
            return "bold-sans-serif";
          } else {
            return "sans-serif";
          }
        } else if (options2.fontShape === "textit" && options2.fontWeight === "textbf") {
          return "bold-italic";
        } else if (options2.fontShape === "textit") {
          return "italic";
        } else if (options2.fontWeight === "textbf") {
          return "bold";
        }
        var font = options2.font;
        if (!font || font === "mathnormal") {
          return null;
        }
        var mode = group2.mode;
        if (font === "mathit") {
          return "italic";
        } else if (font === "boldsymbol") {
          return group2.type === "textord" ? "bold" : "bold-italic";
        } else if (font === "mathbf") {
          return "bold";
        } else if (font === "mathbb") {
          return "double-struck";
        } else if (font === "mathsfit") {
          return "sans-serif-italic";
        } else if (font === "mathfrak") {
          return "fraktur";
        } else if (font === "mathscr" || font === "mathcal") {
          return "script";
        } else if (font === "mathsf") {
          return "sans-serif";
        } else if (font === "mathtt") {
          return "monospace";
        }
        var text4 = group2.text;
        if (noVariantSymbols.has(text4)) {
          return null;
        }
        if (symbols[mode][text4]) {
          var replacement = symbols[mode][text4].replace;
          if (replacement) {
            text4 = replacement;
          }
        }
        var fontName = fontMap[font].fontName;
        if (getCharacterMetrics(text4, fontName, mode)) {
          return fontMap[font].variant;
        }
        return null;
      }, "getVariant");
      __name(isNumberPunctuation, "isNumberPunctuation");
      buildExpression2 = /* @__PURE__ */ __name(function buildExpression3(expression, options2, isOrdgroup) {
        if (expression.length === 1) {
          var group2 = buildGroup2(expression[0], options2);
          if (isOrdgroup && group2 instanceof MathNode && group2.type === "mo") {
            group2.setAttribute("lspace", "0em");
            group2.setAttribute("rspace", "0em");
          }
          return [group2];
        }
        var groups = [];
        var lastGroup;
        for (var i2 = 0; i2 < expression.length; i2++) {
          var _group = buildGroup2(expression[i2], options2);
          if (_group instanceof MathNode && lastGroup instanceof MathNode) {
            if (_group.type === "mtext" && lastGroup.type === "mtext" && _group.getAttribute("mathvariant") === lastGroup.getAttribute("mathvariant")) {
              lastGroup.children.push(..._group.children);
              continue;
            } else if (_group.type === "mn" && lastGroup.type === "mn") {
              lastGroup.children.push(..._group.children);
              continue;
            } else if (isNumberPunctuation(_group) && lastGroup.type === "mn") {
              lastGroup.children.push(..._group.children);
              continue;
            } else if (_group.type === "mn" && isNumberPunctuation(lastGroup)) {
              _group.children = [...lastGroup.children, ..._group.children];
              groups.pop();
            } else if ((_group.type === "msup" || _group.type === "msub") && _group.children.length >= 1 && (lastGroup.type === "mn" || isNumberPunctuation(lastGroup))) {
              var base = _group.children[0];
              if (base instanceof MathNode && base.type === "mn") {
                base.children = [...lastGroup.children, ...base.children];
                groups.pop();
              }
            } else if (lastGroup.type === "mi" && lastGroup.children.length === 1) {
              var lastChild = lastGroup.children[0];
              if (lastChild instanceof TextNode && lastChild.text === "\u0338" && (_group.type === "mo" || _group.type === "mi" || _group.type === "mn")) {
                var child = _group.children[0];
                if (child instanceof TextNode && child.text.length > 0) {
                  child.text = child.text.slice(0, 1) + "\u0338" + child.text.slice(1);
                  groups.pop();
                }
              }
            }
          }
          groups.push(_group);
          lastGroup = _group;
        }
        return groups;
      }, "buildExpression");
      buildExpressionRow = /* @__PURE__ */ __name(function buildExpressionRow2(expression, options2, isOrdgroup) {
        return makeRow(buildExpression2(expression, options2, isOrdgroup));
      }, "buildExpressionRow");
      buildGroup2 = /* @__PURE__ */ __name(function buildGroup3(group2, options2) {
        if (!group2) {
          return new MathNode("mrow");
        }
        if (_mathmlGroupBuilders[group2.type]) {
          var result = _mathmlGroupBuilders[group2.type](group2, options2);
          return result;
        } else {
          throw new ParseError("Got group of unknown type: '" + group2.type + "'");
        }
      }, "buildGroup");
      __name(buildMathML, "buildMathML");
      sizeStyleMap = [
        // Each element contains [textsize, scriptsize, scriptscriptsize].
        // The size mappings are taken from TeX with \normalsize=10pt.
        [1, 1, 1],
        // size1: [5, 5, 5]              \tiny
        [2, 1, 1],
        // size2: [6, 5, 5]
        [3, 1, 1],
        // size3: [7, 5, 5]              \scriptsize
        [4, 2, 1],
        // size4: [8, 6, 5]              \footnotesize
        [5, 2, 1],
        // size5: [9, 6, 5]              \small
        [6, 3, 1],
        // size6: [10, 7, 5]             \normalsize
        [7, 4, 2],
        // size7: [12, 8, 6]             \large
        [8, 6, 3],
        // size8: [14.4, 10, 7]          \Large
        [9, 7, 6],
        // size9: [17.28, 12, 10]        \LARGE
        [10, 8, 7],
        // size10: [20.74, 14.4, 12]     \huge
        [11, 10, 9]
        // size11: [24.88, 20.74, 17.28] \HUGE
      ];
      sizeMultipliers = [
        // fontMetrics.js:getGlobalMetrics also uses size indexes, so if
        // you change size indexes, change that function.
        0.5,
        0.6,
        0.7,
        0.8,
        0.9,
        1,
        1.2,
        1.44,
        1.728,
        2.074,
        2.488
      ];
      sizeAtStyle = /* @__PURE__ */ __name(function sizeAtStyle2(size4, style3) {
        return style3.size < 2 ? size4 : sizeStyleMap[size4 - 1][style3.size - 1];
      }, "sizeAtStyle");
      Options = class _Options {
        static {
          __name(this, "Options");
        }
        constructor(data6) {
          this.style = data6.style;
          this.color = data6.color;
          this.size = data6.size || _Options.BASESIZE;
          this.textSize = data6.textSize || this.size;
          this.phantom = !!data6.phantom;
          this.font = data6.font || "";
          this.fontFamily = data6.fontFamily || "";
          this.fontWeight = data6.fontWeight || "";
          this.fontShape = data6.fontShape || "";
          this.sizeMultiplier = sizeMultipliers[this.size - 1];
          this.maxSize = data6.maxSize;
          this.minRuleThickness = data6.minRuleThickness;
          this._fontMetrics = void 0;
        }
        /**
         * Returns a new options object with the same properties as "this".  Properties
         * from "extension" will be copied to the new options object.
         */
        extend(extension5) {
          var data6 = {
            style: this.style,
            size: this.size,
            textSize: this.textSize,
            color: this.color,
            phantom: this.phantom,
            font: this.font,
            fontFamily: this.fontFamily,
            fontWeight: this.fontWeight,
            fontShape: this.fontShape,
            maxSize: this.maxSize,
            minRuleThickness: this.minRuleThickness
          };
          Object.assign(data6, extension5);
          return new _Options(data6);
        }
        /**
         * Return an options object with the given style. If `this.style === style`,
         * returns `this`.
         */
        havingStyle(style3) {
          if (this.style === style3) {
            return this;
          } else {
            return this.extend({
              style: style3,
              size: sizeAtStyle(this.textSize, style3)
            });
          }
        }
        /**
         * Return an options object with a cramped version of the current style. If
         * the current style is cramped, returns `this`.
         */
        havingCrampedStyle() {
          return this.havingStyle(this.style.cramp());
        }
        /**
         * Return an options object with the given size and in at least `\textstyle`.
         * Returns `this` if appropriate.
         */
        havingSize(size4) {
          if (this.size === size4 && this.textSize === size4) {
            return this;
          } else {
            return this.extend({
              style: this.style.text(),
              size: size4,
              textSize: size4,
              sizeMultiplier: sizeMultipliers[size4 - 1]
            });
          }
        }
        /**
         * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
         * changes to at least `\textstyle`.
         */
        havingBaseStyle(style3) {
          style3 = style3 || this.style.text();
          var wantSize = sizeAtStyle(_Options.BASESIZE, style3);
          if (this.size === wantSize && this.textSize === _Options.BASESIZE && this.style === style3) {
            return this;
          } else {
            return this.extend({
              style: style3,
              size: wantSize
            });
          }
        }
        /**
         * Remove the effect of sizing changes such as \Huge.
         * Keep the effect of the current style, such as \scriptstyle.
         */
        havingBaseSizing() {
          var size4;
          switch (this.style.id) {
            case 4:
            case 5:
              size4 = 3;
              break;
            case 6:
            case 7:
              size4 = 1;
              break;
            default:
              size4 = 6;
          }
          return this.extend({
            style: this.style.text(),
            size: size4
          });
        }
        /**
         * Create a new options object with the given color.
         */
        withColor(color2) {
          return this.extend({
            color: color2
          });
        }
        /**
         * Create a new options object with "phantom" set to true.
         */
        withPhantom() {
          return this.extend({
            phantom: true
          });
        }
        /**
         * Creates a new options object with the given math font or old text font.
         * @type {[type]}
         */
        withFont(font) {
          return this.extend({
            font
          });
        }
        /**
         * Create a new options objects with the given fontFamily.
         */
        withTextFontFamily(fontFamily) {
          return this.extend({
            fontFamily,
            font: ""
          });
        }
        /**
         * Creates a new options object with the given font weight
         */
        withTextFontWeight(fontWeight) {
          return this.extend({
            fontWeight,
            font: ""
          });
        }
        /**
         * Creates a new options object with the given font weight
         */
        withTextFontShape(fontShape) {
          return this.extend({
            fontShape,
            font: ""
          });
        }
        /**
         * Return the CSS sizing classes required to switch from enclosing options
         * `oldOptions` to `this`. Returns an array of classes.
         */
        sizingClasses(oldOptions) {
          if (oldOptions.size !== this.size) {
            return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
          } else {
            return [];
          }
        }
        /**
         * Return the CSS sizing classes required to switch to the base size. Like
         * `this.havingSize(BASESIZE).sizingClasses(this)`.
         */
        baseSizingClasses() {
          if (this.size !== _Options.BASESIZE) {
            return ["sizing", "reset-size" + this.size, "size" + _Options.BASESIZE];
          } else {
            return [];
          }
        }
        /**
         * Return the font metrics for this size.
         */
        fontMetrics() {
          if (!this._fontMetrics) {
            this._fontMetrics = getGlobalMetrics(this.size);
          }
          return this._fontMetrics;
        }
        /**
         * Gets the CSS color of the current options object
         */
        getColor() {
          if (this.phantom) {
            return "transparent";
          } else {
            return this.color;
          }
        }
      };
      Options.BASESIZE = 6;
      optionsFromSettings = /* @__PURE__ */ __name(function optionsFromSettings2(settings) {
        return new Options({
          style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,
          maxSize: settings.maxSize,
          minRuleThickness: settings.minRuleThickness
        });
      }, "optionsFromSettings");
      displayWrap = /* @__PURE__ */ __name(function displayWrap2(node2, settings) {
        if (settings.displayMode) {
          var classes3 = ["katex-display"];
          if (settings.leqno) {
            classes3.push("leqno");
          }
          if (settings.fleqn) {
            classes3.push("fleqn");
          }
          node2 = makeSpan(classes3, [node2]);
        }
        return node2;
      }, "displayWrap");
      buildTree = /* @__PURE__ */ __name(function buildTree2(tree, expression, settings) {
        var options2 = optionsFromSettings(settings);
        var katexNode;
        if (settings.output === "mathml") {
          return buildMathML(tree, expression, options2, settings.displayMode, true);
        } else if (settings.output === "html") {
          var htmlNode = buildHTML(tree, options2);
          katexNode = makeSpan(["katex"], [htmlNode]);
        } else {
          var mathMLNode = buildMathML(tree, expression, options2, settings.displayMode, false);
          var _htmlNode = buildHTML(tree, options2);
          katexNode = makeSpan(["katex"], [mathMLNode, _htmlNode]);
        }
        return displayWrap(katexNode, settings);
      }, "buildTree");
      buildHTMLTree = /* @__PURE__ */ __name(function buildHTMLTree2(tree, expression, settings) {
        var options2 = optionsFromSettings(settings);
        var htmlNode = buildHTML(tree, options2);
        var katexNode = makeSpan(["katex"], [htmlNode]);
        return displayWrap(katexNode, settings);
      }, "buildHTMLTree");
      stretchyCodePoint = {
        widehat: "^",
        widecheck: "\u02C7",
        widetilde: "~",
        utilde: "~",
        overleftarrow: "\u2190",
        underleftarrow: "\u2190",
        xleftarrow: "\u2190",
        overrightarrow: "\u2192",
        underrightarrow: "\u2192",
        xrightarrow: "\u2192",
        underbrace: "\u23DF",
        overbrace: "\u23DE",
        underbracket: "\u23B5",
        overbracket: "\u23B4",
        overgroup: "\u23E0",
        undergroup: "\u23E1",
        overleftrightarrow: "\u2194",
        underleftrightarrow: "\u2194",
        xleftrightarrow: "\u2194",
        Overrightarrow: "\u21D2",
        xRightarrow: "\u21D2",
        overleftharpoon: "\u21BC",
        xleftharpoonup: "\u21BC",
        overrightharpoon: "\u21C0",
        xrightharpoonup: "\u21C0",
        xLeftarrow: "\u21D0",
        xLeftrightarrow: "\u21D4",
        xhookleftarrow: "\u21A9",
        xhookrightarrow: "\u21AA",
        xmapsto: "\u21A6",
        xrightharpoondown: "\u21C1",
        xleftharpoondown: "\u21BD",
        xrightleftharpoons: "\u21CC",
        xleftrightharpoons: "\u21CB",
        xtwoheadleftarrow: "\u219E",
        xtwoheadrightarrow: "\u21A0",
        xlongequal: "=",
        xtofrom: "\u21C4",
        xrightleftarrows: "\u21C4",
        xrightequilibrium: "\u21CC",
        // Not a perfect match.
        xleftequilibrium: "\u21CB",
        // None better available.
        "\\cdrightarrow": "\u2192",
        "\\cdleftarrow": "\u2190",
        "\\cdlongequal": "="
      };
      stretchyMathML = /* @__PURE__ */ __name(function stretchyMathML2(label) {
        var node2 = new MathNode("mo", [new TextNode(stretchyCodePoint[label.replace(/^\\/, "")])]);
        node2.setAttribute("stretchy", "true");
        return node2;
      }, "stretchyMathML");
      katexImagesData = {
        //   path(s), minWidth, height, align
        overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
        overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
        underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
        underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
        xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"],
        "\\cdrightarrow": [["rightarrow"], 3, 522, "xMaxYMin"],
        // CD minwwidth2.5pc
        xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"],
        "\\cdleftarrow": [["leftarrow"], 3, 522, "xMinYMin"],
        Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"],
        xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"],
        xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"],
        overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"],
        xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"],
        xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"],
        overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
        xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
        xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"],
        xlongequal: [["longequal"], 0.888, 334, "xMinYMin"],
        "\\cdlongequal": [["longequal"], 3, 334, "xMinYMin"],
        xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"],
        xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"],
        overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
        overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548],
        underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548],
        underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
        xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522],
        xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560],
        xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716],
        xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716],
        xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522],
        xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],
        overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
        underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
        overbracket: [["leftbracketover", "rightbracketover"], 1.6, 440],
        underbracket: [["leftbracketunder", "rightbracketunder"], 1.6, 410],
        overgroup: [["leftgroup", "rightgroup"], 0.888, 342],
        undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],
        xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],
        xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528],
        // The next three arrows are from the mhchem package.
        // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the
        // document as \xrightarrow or \xrightleftharpoons. Those have
        // min-length = 1.75em, so we set min-length on these next three to match.
        xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901],
        xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716],
        xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716]
      };
      wideAccentLabels = /* @__PURE__ */ new Set(["widehat", "widecheck", "widetilde", "utilde"]);
      stretchySvg = /* @__PURE__ */ __name(function stretchySvg2(group2, options2) {
        function buildSvgSpan_() {
          var viewBoxWidth = 4e5;
          var label = group2.label.slice(1);
          if (wideAccentLabels.has(label)) {
            var grp = group2;
            var numChars = grp.base.type === "ordgroup" ? grp.base.body.length : 1;
            var viewBoxHeight;
            var pathName;
            var _height;
            if (numChars > 5) {
              if (label === "widehat" || label === "widecheck") {
                viewBoxHeight = 420;
                viewBoxWidth = 2364;
                _height = 0.42;
                pathName = label + "4";
              } else {
                viewBoxHeight = 312;
                viewBoxWidth = 2340;
                _height = 0.34;
                pathName = "tilde4";
              }
            } else {
              var imgIndex = [1, 1, 2, 2, 3, 3][numChars];
              if (label === "widehat" || label === "widecheck") {
                viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];
                viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];
                _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];
                pathName = label + imgIndex;
              } else {
                viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];
                viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];
                _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];
                pathName = "tilde" + imgIndex;
              }
            }
            var path4 = new PathNode(pathName);
            var svgNode2 = new SvgNode([path4], {
              "width": "100%",
              "height": makeEm(_height),
              "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight,
              "preserveAspectRatio": "none"
            });
            return {
              span: makeSvgSpan([], [svgNode2], options2),
              minWidth: 0,
              height: _height
            };
          } else {
            var spans = [];
            var data6 = katexImagesData[label];
            var [paths, _minWidth, _viewBoxHeight] = data6;
            var _height2 = _viewBoxHeight / 1e3;
            var numSvgChildren = paths.length;
            var widthClasses;
            var aligns;
            if (numSvgChildren === 1) {
              var align1 = data6[3];
              widthClasses = ["hide-tail"];
              aligns = [align1];
            } else if (numSvgChildren === 2) {
              widthClasses = ["halfarrow-left", "halfarrow-right"];
              aligns = ["xMinYMin", "xMaxYMin"];
            } else if (numSvgChildren === 3) {
              widthClasses = ["brace-left", "brace-center", "brace-right"];
              aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"];
            } else {
              throw new Error("Correct katexImagesData or update code here to support\n                    " + numSvgChildren + " children.");
            }
            for (var i2 = 0; i2 < numSvgChildren; i2++) {
              var _path = new PathNode(paths[i2]);
              var _svgNode = new SvgNode([_path], {
                "width": "400em",
                "height": makeEm(_height2),
                "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight,
                "preserveAspectRatio": aligns[i2] + " slice"
              });
              var _span = makeSvgSpan([widthClasses[i2]], [_svgNode], options2);
              if (numSvgChildren === 1) {
                return {
                  span: _span,
                  minWidth: _minWidth,
                  height: _height2
                };
              } else {
                _span.style.height = makeEm(_height2);
                spans.push(_span);
              }
            }
            return {
              span: makeSpan(["stretchy"], spans, options2),
              minWidth: _minWidth,
              height: _height2
            };
          }
        }
        __name(buildSvgSpan_, "buildSvgSpan_");
        var {
          span,
          minWidth,
          height: height2
        } = buildSvgSpan_();
        span.height = height2;
        span.style.height = makeEm(height2);
        if (minWidth > 0) {
          span.style.minWidth = makeEm(minWidth);
        }
        return span;
      }, "stretchySvg");
      stretchyEnclose = /* @__PURE__ */ __name(function stretchyEnclose2(inner2, label, topPad, bottomPad, options2) {
        var img;
        var totalHeight = inner2.height + inner2.depth + topPad + bottomPad;
        if (/fbox|color|angl/.test(label)) {
          img = makeSpan(["stretchy", label], [], options2);
          if (label === "fbox") {
            var color2 = options2.color && options2.getColor();
            if (color2) {
              img.style.borderColor = color2;
            }
          }
        } else {
          var lines = [];
          if (/^[bx]cancel$/.test(label)) {
            lines.push(new LineNode({
              "x1": "0",
              "y1": "0",
              "x2": "100%",
              "y2": "100%",
              "stroke-width": "0.046em"
            }));
          }
          if (/^x?cancel$/.test(label)) {
            lines.push(new LineNode({
              "x1": "0",
              "y1": "100%",
              "x2": "100%",
              "y2": "0",
              "stroke-width": "0.046em"
            }));
          }
          var svgNode2 = new SvgNode(lines, {
            "width": "100%",
            "height": makeEm(totalHeight)
          });
          img = makeSvgSpan([], [svgNode2], options2);
        }
        img.height = totalHeight;
        img.style.height = makeEm(totalHeight);
        return img;
      }, "stretchyEnclose");
      __name(assertNodeType, "assertNodeType");
      __name(assertSymbolNodeType, "assertSymbolNodeType");
      __name(checkSymbolNodeType, "checkSymbolNodeType");
      getBaseSymbol = /* @__PURE__ */ __name((group2) => {
        if (group2 instanceof SymbolNode) {
          return group2;
        }
        if (hasHtmlDomChildren(group2) && group2.children.length === 1) {
          return getBaseSymbol(group2.children[0]);
        }
      }, "getBaseSymbol");
      htmlBuilder$a = /* @__PURE__ */ __name((grp, options2) => {
        var base;
        var group2;
        var supSubGroup;
        if (grp && grp.type === "supsub") {
          group2 = assertNodeType(grp.base, "accent");
          base = group2.base;
          grp.base = base;
          supSubGroup = assertSpan(buildGroup$1(grp, options2));
          grp.base = group2;
        } else {
          group2 = assertNodeType(grp, "accent");
          base = group2.base;
        }
        var body = buildGroup$1(base, options2.havingCrampedStyle());
        var mustShift = group2.isShifty && isCharacterBox(base);
        var skew = 0;
        if (mustShift) {
          var _getBaseSymbol$skew, _getBaseSymbol;
          skew = (_getBaseSymbol$skew = (_getBaseSymbol = getBaseSymbol(body)) == null ? void 0 : _getBaseSymbol.skew) != null ? _getBaseSymbol$skew : 0;
        }
        var accentBelow = group2.label === "\\c";
        var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options2.fontMetrics().xHeight);
        var accentBody;
        if (!group2.isStretchy) {
          var accent2;
          var width3;
          if (group2.label === "\\vec") {
            accent2 = staticSvg("vec", options2);
            width3 = svgData.vec[1];
          } else {
            accent2 = makeOrd({
              type: "textord",
              mode: group2.mode,
              text: group2.label
            }, options2, "textord");
            accent2 = assertSymbolDomNode(accent2);
            accent2.italic = 0;
            width3 = accent2.width;
            if (accentBelow) {
              clearance += accent2.depth;
            }
          }
          accentBody = makeSpan(["accent-body"], [accent2]);
          var accentFull = group2.label === "\\textcircled";
          if (accentFull) {
            accentBody.classes.push("accent-full");
            clearance = body.height;
          }
          var left3 = skew;
          if (!accentFull) {
            left3 -= width3 / 2;
          }
          accentBody.style.left = makeEm(left3);
          if (group2.label === "\\textcircled") {
            accentBody.style.top = ".2em";
          }
          accentBody = makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: body
            }, {
              type: "kern",
              size: -clearance
            }, {
              type: "elem",
              elem: accentBody
            }]
          });
        } else {
          accentBody = stretchySvg(group2, options2);
          accentBody = makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: body
            }, {
              type: "elem",
              elem: accentBody,
              wrapperClasses: ["svg-align"],
              wrapperStyle: skew > 0 ? {
                width: "calc(100% - " + makeEm(2 * skew) + ")",
                marginLeft: makeEm(2 * skew)
              } : void 0
            }]
          });
        }
        var accentWrap = makeSpan(["mord", "accent"], [accentBody], options2);
        if (supSubGroup) {
          supSubGroup.children[0] = accentWrap;
          supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height);
          supSubGroup.classes[0] = "mord";
          return supSubGroup;
        } else {
          return accentWrap;
        }
      }, "htmlBuilder$a");
      mathmlBuilder$9 = /* @__PURE__ */ __name((group2, options2) => {
        var accentNode = group2.isStretchy ? stretchyMathML(group2.label) : new MathNode("mo", [makeText(group2.label, group2.mode)]);
        var node2 = new MathNode("mover", [buildGroup2(group2.base, options2), accentNode]);
        node2.setAttribute("accent", "true");
        return node2;
      }, "mathmlBuilder$9");
      NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map((accent2) => "\\" + accent2).join("|"));
      defineFunction({
        type: "accent",
        names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"],
        props: {
          numArgs: 1
        },
        handler: /* @__PURE__ */ __name((context, args) => {
          var base = normalizeArgument(args[0]);
          var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);
          var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck";
          return {
            type: "accent",
            mode: context.parser.mode,
            label: context.funcName,
            isStretchy,
            isShifty,
            base
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$a,
        mathmlBuilder: mathmlBuilder$9
      });
      defineFunction({
        type: "accent",
        names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"],
        props: {
          numArgs: 1,
          allowedInText: true,
          allowedInMath: true,
          // unless in strict mode
          argTypes: ["primitive"]
        },
        handler: /* @__PURE__ */ __name((context, args) => {
          var base = args[0];
          var mode = context.parser.mode;
          if (mode === "math") {
            context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode");
            mode = "text";
          }
          return {
            type: "accent",
            mode,
            label: context.funcName,
            isStretchy: false,
            isShifty: true,
            base
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$a,
        mathmlBuilder: mathmlBuilder$9
      });
      defineFunction({
        type: "accentUnder",
        names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"],
        props: {
          numArgs: 1
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var base = args[0];
          return {
            type: "accentUnder",
            mode: parser34.mode,
            label: funcName,
            base
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var innerGroup = buildGroup$1(group2.base, options2);
          var accentBody = stretchySvg(group2, options2);
          var kern = group2.label === "\\utilde" ? 0.12 : 0;
          var vlist = makeVList({
            positionType: "top",
            positionData: innerGroup.height,
            children: [{
              type: "elem",
              elem: accentBody,
              wrapperClasses: ["svg-align"]
            }, {
              type: "kern",
              size: kern
            }, {
              type: "elem",
              elem: innerGroup
            }]
          });
          return makeSpan(["mord", "accentunder"], [vlist], options2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var accentNode = stretchyMathML(group2.label);
          var node2 = new MathNode("munder", [buildGroup2(group2.base, options2), accentNode]);
          node2.setAttribute("accentunder", "true");
          return node2;
        }, "mathmlBuilder")
      });
      paddedNode = /* @__PURE__ */ __name((group2) => {
        var node2 = new MathNode("mpadded", group2 ? [group2] : []);
        node2.setAttribute("width", "+0.6em");
        node2.setAttribute("lspace", "0.3em");
        return node2;
      }, "paddedNode");
      defineFunction({
        type: "xArrow",
        names: [
          "\\xleftarrow",
          "\\xrightarrow",
          "\\xLeftarrow",
          "\\xRightarrow",
          "\\xleftrightarrow",
          "\\xLeftrightarrow",
          "\\xhookleftarrow",
          "\\xhookrightarrow",
          "\\xmapsto",
          "\\xrightharpoondown",
          "\\xrightharpoonup",
          "\\xleftharpoondown",
          "\\xleftharpoonup",
          "\\xrightleftharpoons",
          "\\xleftrightharpoons",
          "\\xlongequal",
          "\\xtwoheadrightarrow",
          "\\xtwoheadleftarrow",
          "\\xtofrom",
          // The next 3 functions are here to support the mhchem extension.
          // Direct use of these functions is discouraged and may break someday.
          "\\xrightleftarrows",
          "\\xrightequilibrium",
          "\\xleftequilibrium",
          // The next 3 functions are here only to support the {CD} environment.
          "\\\\cdrightarrow",
          "\\\\cdleftarrow",
          "\\\\cdlongequal"
        ],
        props: {
          numArgs: 1,
          numOptionalArgs: 1
        },
        handler(_ref, args, optArgs) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          return {
            type: "xArrow",
            mode: parser34.mode,
            label: funcName,
            body: args[0],
            below: optArgs[0]
          };
        },
        htmlBuilder(group2, options2) {
          var style3 = options2.style;
          var newOptions = options2.havingStyle(style3.sup());
          var upperGroup = wrapFragment(buildGroup$1(group2.body, newOptions, options2), options2);
          var arrowPrefix = group2.label.slice(0, 2) === "\\x" ? "x" : "cd";
          upperGroup.classes.push(arrowPrefix + "-arrow-pad");
          var lowerGroup;
          if (group2.below) {
            newOptions = options2.havingStyle(style3.sub());
            lowerGroup = wrapFragment(buildGroup$1(group2.below, newOptions, options2), options2);
            lowerGroup.classes.push(arrowPrefix + "-arrow-pad");
          }
          var arrowBody = stretchySvg(group2, options2);
          var arrowShift = -options2.fontMetrics().axisHeight + 0.5 * arrowBody.height;
          var upperShift = -options2.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111;
          if (upperGroup.depth > 0.25 || group2.label === "\\xleftequilibrium") {
            upperShift -= upperGroup.depth;
          }
          var vlist;
          if (lowerGroup) {
            var lowerShift = -options2.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;
            vlist = makeVList({
              positionType: "individualShift",
              children: [{
                type: "elem",
                elem: upperGroup,
                shift: upperShift
              }, {
                type: "elem",
                elem: arrowBody,
                shift: arrowShift
              }, {
                type: "elem",
                elem: lowerGroup,
                shift: lowerShift
              }]
            });
          } else {
            vlist = makeVList({
              positionType: "individualShift",
              children: [{
                type: "elem",
                elem: upperGroup,
                shift: upperShift
              }, {
                type: "elem",
                elem: arrowBody,
                shift: arrowShift
              }]
            });
          }
          vlist.children[0].children[0].children[1].classes.push("svg-align");
          return makeSpan(["mrel", "x-arrow"], [vlist], options2);
        },
        mathmlBuilder(group2, options2) {
          var arrowNode = stretchyMathML(group2.label);
          arrowNode.setAttribute("minsize", group2.label.charAt(0) === "x" ? "1.75em" : "3.0em");
          var node2;
          if (group2.body) {
            var upperNode = paddedNode(buildGroup2(group2.body, options2));
            if (group2.below) {
              var lowerNode = paddedNode(buildGroup2(group2.below, options2));
              node2 = new MathNode("munderover", [arrowNode, lowerNode, upperNode]);
            } else {
              node2 = new MathNode("mover", [arrowNode, upperNode]);
            }
          } else if (group2.below) {
            var _lowerNode = paddedNode(buildGroup2(group2.below, options2));
            node2 = new MathNode("munder", [arrowNode, _lowerNode]);
          } else {
            node2 = paddedNode();
            node2 = new MathNode("mover", [arrowNode, node2]);
          }
          return node2;
        }
      });
      __name(htmlBuilder$9, "htmlBuilder$9");
      __name(mathmlBuilder$8, "mathmlBuilder$8");
      defineFunction({
        type: "mclass",
        names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
        props: {
          numArgs: 1,
          primitive: true
        },
        handler(_ref, args) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "mclass",
            mode: parser34.mode,
            mclass: "m" + funcName.slice(5),
            // TODO(kevinb): don't prefix with 'm'
            body: ordargument(body),
            isCharacterBox: isCharacterBox(body)
          };
        },
        htmlBuilder: htmlBuilder$9,
        mathmlBuilder: mathmlBuilder$8
      });
      binrelClass = /* @__PURE__ */ __name((arg) => {
        var atom2 = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg;
        if (atom2.type === "atom" && (atom2.family === "bin" || atom2.family === "rel")) {
          return "m" + atom2.family;
        } else {
          return "mord";
        }
      }, "binrelClass");
      defineFunction({
        type: "mclass",
        names: ["\\@binrel"],
        props: {
          numArgs: 2
        },
        handler(_ref2, args) {
          var {
            parser: parser34
          } = _ref2;
          return {
            type: "mclass",
            mode: parser34.mode,
            mclass: binrelClass(args[0]),
            body: ordargument(args[1]),
            isCharacterBox: isCharacterBox(args[1])
          };
        }
      });
      defineFunction({
        type: "mclass",
        names: ["\\stackrel", "\\overset", "\\underset"],
        props: {
          numArgs: 2
        },
        handler(_ref3, args) {
          var {
            parser: parser34,
            funcName
          } = _ref3;
          var baseArg = args[1];
          var shiftedArg = args[0];
          var mclass;
          if (funcName !== "\\stackrel") {
            mclass = binrelClass(baseArg);
          } else {
            mclass = "mrel";
          }
          var baseOp = {
            type: "op",
            mode: baseArg.mode,
            limits: true,
            alwaysHandleSupSub: true,
            parentIsSupSub: false,
            symbol: false,
            suppressBaseShift: funcName !== "\\stackrel",
            body: ordargument(baseArg)
          };
          var supsub = {
            type: "supsub",
            mode: shiftedArg.mode,
            base: baseOp,
            sup: funcName === "\\underset" ? null : shiftedArg,
            sub: funcName === "\\underset" ? shiftedArg : null
          };
          return {
            type: "mclass",
            mode: parser34.mode,
            mclass,
            body: [supsub],
            isCharacterBox: isCharacterBox(supsub)
          };
        },
        htmlBuilder: htmlBuilder$9,
        mathmlBuilder: mathmlBuilder$8
      });
      defineFunction({
        type: "pmb",
        names: ["\\pmb"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          return {
            type: "pmb",
            mode: parser34.mode,
            mclass: binrelClass(args[0]),
            body: ordargument(args[0])
          };
        },
        htmlBuilder(group2, options2) {
          var elements2 = buildExpression$1(group2.body, options2, true);
          var node2 = makeSpan([group2.mclass], elements2, options2);
          node2.style.textShadow = "0.02em 0.01em 0.04px";
          return node2;
        },
        mathmlBuilder(group2, style3) {
          var inner2 = buildExpression2(group2.body, style3);
          var node2 = new MathNode("mstyle", inner2);
          node2.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px");
          return node2;
        }
      });
      cdArrowFunctionName = {
        ">": "\\\\cdrightarrow",
        "<": "\\\\cdleftarrow",
        "=": "\\\\cdlongequal",
        "A": "\\uparrow",
        "V": "\\downarrow",
        "|": "\\Vert",
        ".": "no arrow"
      };
      newCell = /* @__PURE__ */ __name(() => {
        return {
          type: "styling",
          body: [],
          mode: "math",
          style: "display"
        };
      }, "newCell");
      isStartOfArrow = /* @__PURE__ */ __name((node2) => {
        return node2.type === "textord" && node2.text === "@";
      }, "isStartOfArrow");
      isLabelEnd = /* @__PURE__ */ __name((node2, endChar) => {
        return (node2.type === "mathord" || node2.type === "atom") && node2.text === endChar;
      }, "isLabelEnd");
      __name(cdArrow, "cdArrow");
      __name(parseCD, "parseCD");
      defineFunction({
        type: "cdlabel",
        names: ["\\\\cdleft", "\\\\cdright"],
        props: {
          numArgs: 1
        },
        handler(_ref, args) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          return {
            type: "cdlabel",
            mode: parser34.mode,
            side: funcName.slice(4),
            label: args[0]
          };
        },
        htmlBuilder(group2, options2) {
          var newOptions = options2.havingStyle(options2.style.sup());
          var label = wrapFragment(buildGroup$1(group2.label, newOptions, options2), options2);
          label.classes.push("cd-label-" + group2.side);
          label.style.bottom = makeEm(0.8 - label.depth);
          label.height = 0;
          label.depth = 0;
          return label;
        },
        mathmlBuilder(group2, options2) {
          var label = new MathNode("mrow", [buildGroup2(group2.label, options2)]);
          label = new MathNode("mpadded", [label]);
          label.setAttribute("width", "0");
          if (group2.side === "left") {
            label.setAttribute("lspace", "-1width");
          }
          label.setAttribute("voffset", "0.7em");
          label = new MathNode("mstyle", [label]);
          label.setAttribute("displaystyle", "false");
          label.setAttribute("scriptlevel", "1");
          return label;
        }
      });
      defineFunction({
        type: "cdlabelparent",
        names: ["\\\\cdparent"],
        props: {
          numArgs: 1
        },
        handler(_ref2, args) {
          var {
            parser: parser34
          } = _ref2;
          return {
            type: "cdlabelparent",
            mode: parser34.mode,
            fragment: args[0]
          };
        },
        htmlBuilder(group2, options2) {
          var parent4 = wrapFragment(buildGroup$1(group2.fragment, options2), options2);
          parent4.classes.push("cd-vert-arrow");
          return parent4;
        },
        mathmlBuilder(group2, options2) {
          return new MathNode("mrow", [buildGroup2(group2.fragment, options2)]);
        }
      });
      defineFunction({
        type: "textord",
        names: ["\\@char"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          var arg = assertNodeType(args[0], "ordgroup");
          var group2 = arg.body;
          var number7 = "";
          for (var i2 = 0; i2 < group2.length; i2++) {
            var node2 = assertNodeType(group2[i2], "textord");
            number7 += node2.text;
          }
          var code = parseInt(number7);
          var text4;
          if (isNaN(code)) {
            throw new ParseError("\\@char has non-numeric argument " + number7);
          } else if (code < 0 || code >= 1114111) {
            throw new ParseError("\\@char with invalid code point " + number7);
          } else if (code <= 65535) {
            text4 = String.fromCharCode(code);
          } else {
            code -= 65536;
            text4 = String.fromCharCode((code >> 10) + 55296, (code & 1023) + 56320);
          }
          return {
            type: "textord",
            mode: parser34.mode,
            text: text4
          };
        }
      });
      htmlBuilder$8 = /* @__PURE__ */ __name((group2, options2) => {
        var elements2 = buildExpression$1(group2.body, options2.withColor(group2.color), false);
        return makeFragment(elements2);
      }, "htmlBuilder$8");
      mathmlBuilder$7 = /* @__PURE__ */ __name((group2, options2) => {
        var inner2 = buildExpression2(group2.body, options2.withColor(group2.color));
        var node2 = new MathNode("mstyle", inner2);
        node2.setAttribute("mathcolor", group2.color);
        return node2;
      }, "mathmlBuilder$7");
      defineFunction({
        type: "color",
        names: ["\\textcolor"],
        props: {
          numArgs: 2,
          allowedInText: true,
          argTypes: ["color", "original"]
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          var color2 = assertNodeType(args[0], "color-token").color;
          var body = args[1];
          return {
            type: "color",
            mode: parser34.mode,
            color: color2,
            body: ordargument(body)
          };
        },
        htmlBuilder: htmlBuilder$8,
        mathmlBuilder: mathmlBuilder$7
      });
      defineFunction({
        type: "color",
        names: ["\\color"],
        props: {
          numArgs: 1,
          allowedInText: true,
          argTypes: ["color"]
        },
        handler(_ref2, args) {
          var {
            parser: parser34,
            breakOnTokenText
          } = _ref2;
          var color2 = assertNodeType(args[0], "color-token").color;
          parser34.gullet.macros.set("\\current@color", color2);
          var body = parser34.parseExpression(true, breakOnTokenText);
          return {
            type: "color",
            mode: parser34.mode,
            color: color2,
            body
          };
        },
        htmlBuilder: htmlBuilder$8,
        mathmlBuilder: mathmlBuilder$7
      });
      defineFunction({
        type: "cr",
        names: ["\\\\"],
        props: {
          numArgs: 0,
          numOptionalArgs: 0,
          allowedInText: true
        },
        handler(_ref, args, optArgs) {
          var {
            parser: parser34
          } = _ref;
          var size4 = parser34.gullet.future().text === "[" ? parser34.parseSizeGroup(true) : null;
          var newLine = !parser34.settings.displayMode || !parser34.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline does nothing in display mode");
          return {
            type: "cr",
            mode: parser34.mode,
            newLine,
            size: size4 && assertNodeType(size4, "size").value
          };
        },
        // The following builders are called only at the top level,
        // not within tabular/array environments.
        htmlBuilder(group2, options2) {
          var span = makeSpan(["mspace"], [], options2);
          if (group2.newLine) {
            span.classes.push("newline");
            if (group2.size) {
              span.style.marginTop = makeEm(calculateSize2(group2.size, options2));
            }
          }
          return span;
        },
        mathmlBuilder(group2, options2) {
          var node2 = new MathNode("mspace");
          if (group2.newLine) {
            node2.setAttribute("linebreak", "newline");
            if (group2.size) {
              node2.setAttribute("height", makeEm(calculateSize2(group2.size, options2)));
            }
          }
          return node2;
        }
      });
      globalMap = {
        "\\global": "\\global",
        "\\long": "\\\\globallong",
        "\\\\globallong": "\\\\globallong",
        "\\def": "\\gdef",
        "\\gdef": "\\gdef",
        "\\edef": "\\xdef",
        "\\xdef": "\\xdef",
        "\\let": "\\\\globallet",
        "\\futurelet": "\\\\globalfuture"
      };
      checkControlSequence = /* @__PURE__ */ __name((tok) => {
        var name = tok.text;
        if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) {
          throw new ParseError("Expected a control sequence", tok);
        }
        return name;
      }, "checkControlSequence");
      getRHS = /* @__PURE__ */ __name((parser34) => {
        var tok = parser34.gullet.popToken();
        if (tok.text === "=") {
          tok = parser34.gullet.popToken();
          if (tok.text === " ") {
            tok = parser34.gullet.popToken();
          }
        }
        return tok;
      }, "getRHS");
      letCommand = /* @__PURE__ */ __name((parser34, name, tok, global2) => {
        var macro = parser34.gullet.macros.get(tok.text);
        if (macro == null) {
          tok.noexpand = true;
          macro = {
            tokens: [tok],
            numArgs: 0,
            // reproduce the same behavior in expansion
            unexpandable: !parser34.gullet.isExpandable(tok.text)
          };
        }
        parser34.gullet.macros.set(name, macro, global2);
      }, "letCommand");
      defineFunction({
        type: "internal",
        names: [
          "\\global",
          "\\long",
          "\\\\globallong"
          // can’t be entered directly
        ],
        props: {
          numArgs: 0,
          allowedInText: true
        },
        handler(_ref) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          parser34.consumeSpaces();
          var token2 = parser34.fetch();
          if (globalMap[token2.text]) {
            if (funcName === "\\global" || funcName === "\\\\globallong") {
              token2.text = globalMap[token2.text];
            }
            return assertNodeType(parser34.parseFunction(), "internal");
          }
          throw new ParseError("Invalid token after macro prefix", token2);
        }
      });
      defineFunction({
        type: "internal",
        names: ["\\def", "\\gdef", "\\edef", "\\xdef"],
        props: {
          numArgs: 0,
          allowedInText: true,
          primitive: true
        },
        handler(_ref2) {
          var {
            parser: parser34,
            funcName
          } = _ref2;
          var tok = parser34.gullet.popToken();
          var name = tok.text;
          if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) {
            throw new ParseError("Expected a control sequence", tok);
          }
          var numArgs = 0;
          var insert;
          var delimiters2 = [[]];
          while (parser34.gullet.future().text !== "{") {
            tok = parser34.gullet.popToken();
            if (tok.text === "#") {
              if (parser34.gullet.future().text === "{") {
                insert = parser34.gullet.future();
                delimiters2[numArgs].push("{");
                break;
              }
              tok = parser34.gullet.popToken();
              if (!/^[1-9]$/.test(tok.text)) {
                throw new ParseError('Invalid argument number "' + tok.text + '"');
              }
              if (parseInt(tok.text) !== numArgs + 1) {
                throw new ParseError('Argument number "' + tok.text + '" out of order');
              }
              numArgs++;
              delimiters2.push([]);
            } else if (tok.text === "EOF") {
              throw new ParseError("Expected a macro definition");
            } else {
              delimiters2[numArgs].push(tok.text);
            }
          }
          var {
            tokens: tokens2
          } = parser34.gullet.consumeArg();
          if (insert) {
            tokens2.unshift(insert);
          }
          if (funcName === "\\edef" || funcName === "\\xdef") {
            tokens2 = parser34.gullet.expandTokens(tokens2);
            tokens2.reverse();
          }
          parser34.gullet.macros.set(name, {
            tokens: tokens2,
            numArgs,
            delimiters: delimiters2
          }, funcName === globalMap[funcName]);
          return {
            type: "internal",
            mode: parser34.mode
          };
        }
      });
      defineFunction({
        type: "internal",
        names: [
          "\\let",
          "\\\\globallet"
          // can’t be entered directly
        ],
        props: {
          numArgs: 0,
          allowedInText: true,
          primitive: true
        },
        handler(_ref3) {
          var {
            parser: parser34,
            funcName
          } = _ref3;
          var name = checkControlSequence(parser34.gullet.popToken());
          parser34.gullet.consumeSpaces();
          var tok = getRHS(parser34);
          letCommand(parser34, name, tok, funcName === "\\\\globallet");
          return {
            type: "internal",
            mode: parser34.mode
          };
        }
      });
      defineFunction({
        type: "internal",
        names: [
          "\\futurelet",
          "\\\\globalfuture"
          // can’t be entered directly
        ],
        props: {
          numArgs: 0,
          allowedInText: true,
          primitive: true
        },
        handler(_ref4) {
          var {
            parser: parser34,
            funcName
          } = _ref4;
          var name = checkControlSequence(parser34.gullet.popToken());
          var middle = parser34.gullet.popToken();
          var tok = parser34.gullet.popToken();
          letCommand(parser34, name, tok, funcName === "\\\\globalfuture");
          parser34.gullet.pushToken(tok);
          parser34.gullet.pushToken(middle);
          return {
            type: "internal",
            mode: parser34.mode
          };
        }
      });
      getMetrics = /* @__PURE__ */ __name(function getMetrics2(symbol, font, mode) {
        var replace2 = symbols.math[symbol] && symbols.math[symbol].replace;
        var metrics = getCharacterMetrics(replace2 || symbol, font, mode);
        if (!metrics) {
          throw new Error("Unsupported symbol " + symbol + " and font size " + font + ".");
        }
        return metrics;
      }, "getMetrics");
      styleWrap = /* @__PURE__ */ __name(function styleWrap2(delim, toStyle, options2, classes3) {
        var newOptions = options2.havingBaseStyle(toStyle);
        var span = makeSpan(classes3.concat(newOptions.sizingClasses(options2)), [delim], options2);
        var delimSizeMultiplier = newOptions.sizeMultiplier / options2.sizeMultiplier;
        span.height *= delimSizeMultiplier;
        span.depth *= delimSizeMultiplier;
        span.maxFontSize = newOptions.sizeMultiplier;
        return span;
      }, "styleWrap");
      centerSpan = /* @__PURE__ */ __name(function centerSpan2(span, options2, style3) {
        var newOptions = options2.havingBaseStyle(style3);
        var shift2 = (1 - options2.sizeMultiplier / newOptions.sizeMultiplier) * options2.fontMetrics().axisHeight;
        span.classes.push("delimcenter");
        span.style.top = makeEm(shift2);
        span.height -= shift2;
        span.depth += shift2;
      }, "centerSpan");
      makeSmallDelim = /* @__PURE__ */ __name(function makeSmallDelim2(delim, style3, center4, options2, mode, classes3) {
        var text4 = makeSymbol(delim, "Main-Regular", mode, options2);
        var span = styleWrap(text4, style3, options2, classes3);
        if (center4) {
          centerSpan(span, options2, style3);
        }
        return span;
      }, "makeSmallDelim");
      mathrmSize = /* @__PURE__ */ __name(function mathrmSize2(value2, size4, mode, options2) {
        return makeSymbol(value2, "Size" + size4 + "-Regular", mode, options2);
      }, "mathrmSize");
      makeLargeDelim = /* @__PURE__ */ __name(function makeLargeDelim2(delim, size4, center4, options2, mode, classes3) {
        var inner2 = mathrmSize(delim, size4, mode, options2);
        var span = styleWrap(makeSpan(["delimsizing", "size" + size4], [inner2], options2), Style$1.TEXT, options2, classes3);
        if (center4) {
          centerSpan(span, options2, Style$1.TEXT);
        }
        return span;
      }, "makeLargeDelim");
      makeGlyphSpan = /* @__PURE__ */ __name(function makeGlyphSpan2(symbol, font, mode) {
        var sizeClass;
        if (font === "Size1-Regular") {
          sizeClass = "delim-size1";
        } else {
          sizeClass = "delim-size4";
        }
        var corner = makeSpan(["delimsizinginner", sizeClass], [makeSpan([], [makeSymbol(symbol, font, mode)])]);
        return {
          type: "elem",
          elem: corner
        };
      }, "makeGlyphSpan");
      makeInner = /* @__PURE__ */ __name(function makeInner2(ch, height2, options2) {
        var width3 = fontMetricsData["Size4-Regular"][ch.charCodeAt(0)] ? fontMetricsData["Size4-Regular"][ch.charCodeAt(0)][4] : fontMetricsData["Size1-Regular"][ch.charCodeAt(0)][4];
        var path4 = new PathNode("inner", innerPath(ch, Math.round(1e3 * height2)));
        var svgNode2 = new SvgNode([path4], {
          "width": makeEm(width3),
          "height": makeEm(height2),
          // Override CSS rule `.katex svg { width: 100% }`
          "style": "width:" + makeEm(width3),
          "viewBox": "0 0 " + 1e3 * width3 + " " + Math.round(1e3 * height2),
          "preserveAspectRatio": "xMinYMin"
        });
        var span = makeSvgSpan([], [svgNode2], options2);
        span.height = height2;
        span.style.height = makeEm(height2);
        span.style.width = makeEm(width3);
        return {
          type: "elem",
          elem: span
        };
      }, "makeInner");
      lapInEms = 8e-3;
      lap = {
        type: "kern",
        size: -1 * lapInEms
      };
      verts = /* @__PURE__ */ new Set(["|", "\\lvert", "\\rvert", "\\vert"]);
      doubleVerts = /* @__PURE__ */ new Set(["\\|", "\\lVert", "\\rVert", "\\Vert"]);
      makeStackedDelim = /* @__PURE__ */ __name(function makeStackedDelim2(delim, heightTotal, center4, options2, mode, classes3) {
        var top2;
        var middle;
        var repeat2;
        var bottom2;
        var svgLabel = "";
        var viewBoxWidth = 0;
        top2 = repeat2 = bottom2 = delim;
        middle = null;
        var font = "Size1-Regular";
        if (delim === "\\uparrow") {
          repeat2 = bottom2 = "\u23D0";
        } else if (delim === "\\Uparrow") {
          repeat2 = bottom2 = "\u2016";
        } else if (delim === "\\downarrow") {
          top2 = repeat2 = "\u23D0";
        } else if (delim === "\\Downarrow") {
          top2 = repeat2 = "\u2016";
        } else if (delim === "\\updownarrow") {
          top2 = "\\uparrow";
          repeat2 = "\u23D0";
          bottom2 = "\\downarrow";
        } else if (delim === "\\Updownarrow") {
          top2 = "\\Uparrow";
          repeat2 = "\u2016";
          bottom2 = "\\Downarrow";
        } else if (verts.has(delim)) {
          repeat2 = "\u2223";
          svgLabel = "vert";
          viewBoxWidth = 333;
        } else if (doubleVerts.has(delim)) {
          repeat2 = "\u2225";
          svgLabel = "doublevert";
          viewBoxWidth = 556;
        } else if (delim === "[" || delim === "\\lbrack") {
          top2 = "\u23A1";
          repeat2 = "\u23A2";
          bottom2 = "\u23A3";
          font = "Size4-Regular";
          svgLabel = "lbrack";
          viewBoxWidth = 667;
        } else if (delim === "]" || delim === "\\rbrack") {
          top2 = "\u23A4";
          repeat2 = "\u23A5";
          bottom2 = "\u23A6";
          font = "Size4-Regular";
          svgLabel = "rbrack";
          viewBoxWidth = 667;
        } else if (delim === "\\lfloor" || delim === "\u230A") {
          repeat2 = top2 = "\u23A2";
          bottom2 = "\u23A3";
          font = "Size4-Regular";
          svgLabel = "lfloor";
          viewBoxWidth = 667;
        } else if (delim === "\\lceil" || delim === "\u2308") {
          top2 = "\u23A1";
          repeat2 = bottom2 = "\u23A2";
          font = "Size4-Regular";
          svgLabel = "lceil";
          viewBoxWidth = 667;
        } else if (delim === "\\rfloor" || delim === "\u230B") {
          repeat2 = top2 = "\u23A5";
          bottom2 = "\u23A6";
          font = "Size4-Regular";
          svgLabel = "rfloor";
          viewBoxWidth = 667;
        } else if (delim === "\\rceil" || delim === "\u2309") {
          top2 = "\u23A4";
          repeat2 = bottom2 = "\u23A5";
          font = "Size4-Regular";
          svgLabel = "rceil";
          viewBoxWidth = 667;
        } else if (delim === "(" || delim === "\\lparen") {
          top2 = "\u239B";
          repeat2 = "\u239C";
          bottom2 = "\u239D";
          font = "Size4-Regular";
          svgLabel = "lparen";
          viewBoxWidth = 875;
        } else if (delim === ")" || delim === "\\rparen") {
          top2 = "\u239E";
          repeat2 = "\u239F";
          bottom2 = "\u23A0";
          font = "Size4-Regular";
          svgLabel = "rparen";
          viewBoxWidth = 875;
        } else if (delim === "\\{" || delim === "\\lbrace") {
          top2 = "\u23A7";
          middle = "\u23A8";
          bottom2 = "\u23A9";
          repeat2 = "\u23AA";
          font = "Size4-Regular";
        } else if (delim === "\\}" || delim === "\\rbrace") {
          top2 = "\u23AB";
          middle = "\u23AC";
          bottom2 = "\u23AD";
          repeat2 = "\u23AA";
          font = "Size4-Regular";
        } else if (delim === "\\lgroup" || delim === "\u27EE") {
          top2 = "\u23A7";
          bottom2 = "\u23A9";
          repeat2 = "\u23AA";
          font = "Size4-Regular";
        } else if (delim === "\\rgroup" || delim === "\u27EF") {
          top2 = "\u23AB";
          bottom2 = "\u23AD";
          repeat2 = "\u23AA";
          font = "Size4-Regular";
        } else if (delim === "\\lmoustache" || delim === "\u23B0") {
          top2 = "\u23A7";
          bottom2 = "\u23AD";
          repeat2 = "\u23AA";
          font = "Size4-Regular";
        } else if (delim === "\\rmoustache" || delim === "\u23B1") {
          top2 = "\u23AB";
          bottom2 = "\u23A9";
          repeat2 = "\u23AA";
          font = "Size4-Regular";
        }
        var topMetrics = getMetrics(top2, font, mode);
        var topHeightTotal = topMetrics.height + topMetrics.depth;
        var repeatMetrics = getMetrics(repeat2, font, mode);
        var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
        var bottomMetrics = getMetrics(bottom2, font, mode);
        var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
        var middleHeightTotal = 0;
        var middleFactor = 1;
        if (middle !== null) {
          var middleMetrics = getMetrics(middle, font, mode);
          middleHeightTotal = middleMetrics.height + middleMetrics.depth;
          middleFactor = 2;
        }
        var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal;
        var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal)));
        var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal;
        var axisHeight = options2.fontMetrics().axisHeight;
        if (center4) {
          axisHeight *= options2.sizeMultiplier;
        }
        var depth = realHeightTotal / 2 - axisHeight;
        var stack = [];
        if (svgLabel.length > 0) {
          var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;
          var viewBoxHeight = Math.round(realHeightTotal * 1e3);
          var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1e3));
          var path4 = new PathNode(svgLabel, pathStr);
          var width3 = makeEm(viewBoxWidth / 1e3);
          var height2 = makeEm(viewBoxHeight / 1e3);
          var svg2 = new SvgNode([path4], {
            "width": width3,
            "height": height2,
            "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight
          });
          var wrapper = makeSvgSpan([], [svg2], options2);
          wrapper.height = viewBoxHeight / 1e3;
          wrapper.style.width = width3;
          wrapper.style.height = height2;
          stack.push({
            type: "elem",
            elem: wrapper
          });
        } else {
          stack.push(makeGlyphSpan(bottom2, font, mode));
          stack.push(lap);
          if (middle === null) {
            var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;
            stack.push(makeInner(repeat2, innerHeight, options2));
          } else {
            var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;
            stack.push(makeInner(repeat2, _innerHeight, options2));
            stack.push(lap);
            stack.push(makeGlyphSpan(middle, font, mode));
            stack.push(lap);
            stack.push(makeInner(repeat2, _innerHeight, options2));
          }
          stack.push(lap);
          stack.push(makeGlyphSpan(top2, font, mode));
        }
        var newOptions = options2.havingBaseStyle(Style$1.TEXT);
        var inner2 = makeVList({
          positionType: "bottom",
          positionData: depth,
          children: stack
        });
        return styleWrap(makeSpan(["delimsizing", "mult"], [inner2], newOptions), Style$1.TEXT, options2, classes3);
      }, "makeStackedDelim");
      vbPad = 80;
      emPad = 0.08;
      sqrtSvg = /* @__PURE__ */ __name(function sqrtSvg2(sqrtName, height2, viewBoxHeight, extraVinculum, options2) {
        var path4 = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);
        var pathNode = new PathNode(sqrtName, path4);
        var svg2 = new SvgNode([pathNode], {
          // Note: 1000:1 ratio of viewBox to document em width.
          "width": "400em",
          "height": makeEm(height2),
          "viewBox": "0 0 400000 " + viewBoxHeight,
          "preserveAspectRatio": "xMinYMin slice"
        });
        return makeSvgSpan(["hide-tail"], [svg2], options2);
      }, "sqrtSvg");
      makeSqrtImage = /* @__PURE__ */ __name(function makeSqrtImage2(height2, options2) {
        var newOptions = options2.havingBaseSizing();
        var delim = traverseSequence("\\surd", height2 * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);
        var sizeMultiplier = newOptions.sizeMultiplier;
        var extraVinculum = Math.max(0, options2.minRuleThickness - options2.fontMetrics().sqrtRuleThickness);
        var span;
        var spanHeight = 0;
        var texHeight = 0;
        var viewBoxHeight = 0;
        var advanceWidth;
        if (delim.type === "small") {
          viewBoxHeight = 1e3 + 1e3 * extraVinculum + vbPad;
          if (height2 < 1) {
            sizeMultiplier = 1;
          } else if (height2 < 1.4) {
            sizeMultiplier = 0.7;
          }
          spanHeight = (1 + extraVinculum + emPad) / sizeMultiplier;
          texHeight = (1 + extraVinculum) / sizeMultiplier;
          span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraVinculum, options2);
          span.style.minWidth = "0.853em";
          advanceWidth = 0.833 / sizeMultiplier;
        } else if (delim.type === "large") {
          viewBoxHeight = (1e3 + vbPad) * sizeToMaxHeight[delim.size];
          texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;
          spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;
          span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options2);
          span.style.minWidth = "1.02em";
          advanceWidth = 1 / sizeMultiplier;
        } else {
          spanHeight = height2 + extraVinculum + emPad;
          texHeight = height2 + extraVinculum;
          viewBoxHeight = Math.floor(1e3 * height2 + extraVinculum) + vbPad;
          span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraVinculum, options2);
          span.style.minWidth = "0.742em";
          advanceWidth = 1.056;
        }
        span.height = texHeight;
        span.style.height = makeEm(spanHeight);
        return {
          span,
          advanceWidth,
          // Calculate the actual line width.
          // This actually should depend on the chosen font -- e.g. \boldmath
          // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
          // have thicker rules.
          ruleWidth: (options2.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier
        };
      }, "makeSqrtImage");
      stackLargeDelimiters = /* @__PURE__ */ new Set(["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]);
      stackAlwaysDelimiters = /* @__PURE__ */ new Set(["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1"]);
      stackNeverDelimiters = /* @__PURE__ */ new Set(["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]);
      sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3];
      makeSizedDelim = /* @__PURE__ */ __name(function makeSizedDelim2(delim, size4, options2, mode, classes3) {
        if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
          delim = "\\langle";
        } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
          delim = "\\rangle";
        }
        if (stackLargeDelimiters.has(delim) || stackNeverDelimiters.has(delim)) {
          return makeLargeDelim(delim, size4, false, options2, mode, classes3);
        } else if (stackAlwaysDelimiters.has(delim)) {
          return makeStackedDelim(delim, sizeToMaxHeight[size4], false, options2, mode, classes3);
        } else {
          throw new ParseError("Illegal delimiter: '" + delim + "'");
        }
      }, "makeSizedDelim");
      stackNeverDelimiterSequence = [{
        type: "small",
        style: Style$1.SCRIPTSCRIPT
      }, {
        type: "small",
        style: Style$1.SCRIPT
      }, {
        type: "small",
        style: Style$1.TEXT
      }, {
        type: "large",
        size: 1
      }, {
        type: "large",
        size: 2
      }, {
        type: "large",
        size: 3
      }, {
        type: "large",
        size: 4
      }];
      stackAlwaysDelimiterSequence = [{
        type: "small",
        style: Style$1.SCRIPTSCRIPT
      }, {
        type: "small",
        style: Style$1.SCRIPT
      }, {
        type: "small",
        style: Style$1.TEXT
      }, {
        type: "stack"
      }];
      stackLargeDelimiterSequence = [{
        type: "small",
        style: Style$1.SCRIPTSCRIPT
      }, {
        type: "small",
        style: Style$1.SCRIPT
      }, {
        type: "small",
        style: Style$1.TEXT
      }, {
        type: "large",
        size: 1
      }, {
        type: "large",
        size: 2
      }, {
        type: "large",
        size: 3
      }, {
        type: "large",
        size: 4
      }, {
        type: "stack"
      }];
      delimTypeToFont = /* @__PURE__ */ __name(function delimTypeToFont2(type3) {
        if (type3.type === "small") {
          return "Main-Regular";
        } else if (type3.type === "large") {
          return "Size" + type3.size + "-Regular";
        } else if (type3.type === "stack") {
          return "Size4-Regular";
        } else {
          var delimKind = type3.type;
          throw new Error("Add support for delim type '" + delimKind + "' here.");
        }
      }, "delimTypeToFont");
      traverseSequence = /* @__PURE__ */ __name(function traverseSequence2(delim, height2, sequence, options2) {
        var start3 = Math.min(2, 3 - options2.style.size);
        for (var i2 = start3; i2 < sequence.length; i2++) {
          var delimType = sequence[i2];
          if (delimType.type === "stack") {
            break;
          }
          var metrics = getMetrics(delim, delimTypeToFont(delimType), "math");
          var heightDepth = metrics.height + metrics.depth;
          if (delimType.type === "small") {
            var newOptions = options2.havingBaseStyle(delimType.style);
            heightDepth *= newOptions.sizeMultiplier;
          }
          if (heightDepth > height2) {
            return delimType;
          }
        }
        return sequence[sequence.length - 1];
      }, "traverseSequence");
      makeCustomSizedDelim = /* @__PURE__ */ __name(function makeCustomSizedDelim2(delim, height2, center4, options2, mode, classes3) {
        if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
          delim = "\\langle";
        } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
          delim = "\\rangle";
        }
        var sequence;
        if (stackNeverDelimiters.has(delim)) {
          sequence = stackNeverDelimiterSequence;
        } else if (stackLargeDelimiters.has(delim)) {
          sequence = stackLargeDelimiterSequence;
        } else {
          sequence = stackAlwaysDelimiterSequence;
        }
        var delimType = traverseSequence(delim, height2, sequence, options2);
        if (delimType.type === "small") {
          return makeSmallDelim(delim, delimType.style, center4, options2, mode, classes3);
        } else if (delimType.type === "large") {
          return makeLargeDelim(delim, delimType.size, center4, options2, mode, classes3);
        } else {
          return makeStackedDelim(delim, height2, center4, options2, mode, classes3);
        }
      }, "makeCustomSizedDelim");
      makeLeftRightDelim = /* @__PURE__ */ __name(function makeLeftRightDelim2(delim, height2, depth, options2, mode, classes3) {
        var axisHeight = options2.fontMetrics().axisHeight * options2.sizeMultiplier;
        var delimiterFactor = 901;
        var delimiterExtend = 5 / options2.fontMetrics().ptPerEm;
        var maxDistFromAxis = Math.max(height2 - axisHeight, depth + axisHeight);
        var totalHeight = Math.max(
          // In real TeX, calculations are done using integral values which are
          // 65536 per pt, or 655360 per em. So, the division here truncates in
          // TeX but doesn't here, producing different results. If we wanted to
          // exactly match TeX's calculation, we could do
          //   Math.floor(655360 * maxDistFromAxis / 500) *
          //    delimiterFactor / 655360
          // (To see the difference, compare
          //    x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
          // in TeX and KaTeX)
          maxDistFromAxis / 500 * delimiterFactor,
          2 * maxDistFromAxis - delimiterExtend
        );
        return makeCustomSizedDelim(delim, totalHeight, true, options2, mode, classes3);
      }, "makeLeftRightDelim");
      delimiterSizes = {
        "\\bigl": {
          mclass: "mopen",
          size: 1
        },
        "\\Bigl": {
          mclass: "mopen",
          size: 2
        },
        "\\biggl": {
          mclass: "mopen",
          size: 3
        },
        "\\Biggl": {
          mclass: "mopen",
          size: 4
        },
        "\\bigr": {
          mclass: "mclose",
          size: 1
        },
        "\\Bigr": {
          mclass: "mclose",
          size: 2
        },
        "\\biggr": {
          mclass: "mclose",
          size: 3
        },
        "\\Biggr": {
          mclass: "mclose",
          size: 4
        },
        "\\bigm": {
          mclass: "mrel",
          size: 1
        },
        "\\Bigm": {
          mclass: "mrel",
          size: 2
        },
        "\\biggm": {
          mclass: "mrel",
          size: 3
        },
        "\\Biggm": {
          mclass: "mrel",
          size: 4
        },
        "\\big": {
          mclass: "mord",
          size: 1
        },
        "\\Big": {
          mclass: "mord",
          size: 2
        },
        "\\bigg": {
          mclass: "mord",
          size: 3
        },
        "\\Bigg": {
          mclass: "mord",
          size: 4
        }
      };
      delimiters = /* @__PURE__ */ new Set(["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27E8", "\\rangle", "\u27E9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]);
      __name(checkDelimiter, "checkDelimiter");
      defineFunction({
        type: "delimsizing",
        names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"],
        props: {
          numArgs: 1,
          argTypes: ["primitive"]
        },
        handler: /* @__PURE__ */ __name((context, args) => {
          var delim = checkDelimiter(args[0], context);
          return {
            type: "delimsizing",
            mode: context.parser.mode,
            size: delimiterSizes[context.funcName].size,
            mclass: delimiterSizes[context.funcName].mclass,
            delim: delim.text
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          if (group2.delim === ".") {
            return makeSpan([group2.mclass]);
          }
          return makeSizedDelim(group2.delim, group2.size, options2, group2.mode, [group2.mclass]);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2) => {
          var children2 = [];
          if (group2.delim !== ".") {
            children2.push(makeText(group2.delim, group2.mode));
          }
          var node2 = new MathNode("mo", children2);
          if (group2.mclass === "mopen" || group2.mclass === "mclose") {
            node2.setAttribute("fence", "true");
          } else {
            node2.setAttribute("fence", "false");
          }
          node2.setAttribute("stretchy", "true");
          var size4 = makeEm(sizeToMaxHeight[group2.size]);
          node2.setAttribute("minsize", size4);
          node2.setAttribute("maxsize", size4);
          return node2;
        }, "mathmlBuilder")
      });
      __name(assertParsed, "assertParsed");
      defineFunction({
        type: "leftright-right",
        names: ["\\right"],
        props: {
          numArgs: 1,
          primitive: true
        },
        handler: /* @__PURE__ */ __name((context, args) => {
          var color2 = context.parser.gullet.macros.get("\\current@color");
          if (color2 && typeof color2 !== "string") {
            throw new ParseError("\\current@color set to non-string in \\right");
          }
          return {
            type: "leftright-right",
            mode: context.parser.mode,
            delim: checkDelimiter(args[0], context).text,
            color: color2
            // undefined if not set via \color
          };
        }, "handler")
      });
      defineFunction({
        type: "leftright",
        names: ["\\left"],
        props: {
          numArgs: 1,
          primitive: true
        },
        handler: /* @__PURE__ */ __name((context, args) => {
          var delim = checkDelimiter(args[0], context);
          var parser34 = context.parser;
          ++parser34.leftrightDepth;
          var body = parser34.parseExpression(false);
          --parser34.leftrightDepth;
          parser34.expect("\\right", false);
          var right3 = assertNodeType(parser34.parseFunction(), "leftright-right");
          return {
            type: "leftright",
            mode: parser34.mode,
            body,
            left: delim.text,
            right: right3.delim,
            rightColor: right3.color
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          assertParsed(group2);
          var inner2 = buildExpression$1(group2.body, options2, true, ["mopen", "mclose"]);
          var innerHeight = 0;
          var innerDepth = 0;
          var hadMiddle = false;
          for (var i2 = 0; i2 < inner2.length; i2++) {
            if (inner2[i2].isMiddle) {
              hadMiddle = true;
            } else {
              innerHeight = Math.max(inner2[i2].height, innerHeight);
              innerDepth = Math.max(inner2[i2].depth, innerDepth);
            }
          }
          innerHeight *= options2.sizeMultiplier;
          innerDepth *= options2.sizeMultiplier;
          var leftDelim;
          if (group2.left === ".") {
            leftDelim = makeNullDelimiter(options2, ["mopen"]);
          } else {
            leftDelim = makeLeftRightDelim(group2.left, innerHeight, innerDepth, options2, group2.mode, ["mopen"]);
          }
          inner2.unshift(leftDelim);
          if (hadMiddle) {
            for (var _i = 1; _i < inner2.length; _i++) {
              var middleDelim = inner2[_i];
              var isMiddle = middleDelim.isMiddle;
              if (isMiddle) {
                inner2[_i] = makeLeftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group2.mode, []);
              }
            }
          }
          var rightDelim;
          if (group2.right === ".") {
            rightDelim = makeNullDelimiter(options2, ["mclose"]);
          } else {
            var colorOptions = group2.rightColor ? options2.withColor(group2.rightColor) : options2;
            rightDelim = makeLeftRightDelim(group2.right, innerHeight, innerDepth, colorOptions, group2.mode, ["mclose"]);
          }
          inner2.push(rightDelim);
          return makeSpan(["minner"], inner2, options2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          assertParsed(group2);
          var inner2 = buildExpression2(group2.body, options2);
          if (group2.left !== ".") {
            var leftNode = new MathNode("mo", [makeText(group2.left, group2.mode)]);
            leftNode.setAttribute("fence", "true");
            inner2.unshift(leftNode);
          }
          if (group2.right !== ".") {
            var rightNode = new MathNode("mo", [makeText(group2.right, group2.mode)]);
            rightNode.setAttribute("fence", "true");
            if (group2.rightColor) {
              rightNode.setAttribute("mathcolor", group2.rightColor);
            }
            inner2.push(rightNode);
          }
          return makeRow(inner2);
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "middle",
        names: ["\\middle"],
        props: {
          numArgs: 1,
          primitive: true
        },
        handler: /* @__PURE__ */ __name((context, args) => {
          var delim = checkDelimiter(args[0], context);
          if (!context.parser.leftrightDepth) {
            throw new ParseError("\\middle without preceding \\left", delim);
          }
          return {
            type: "middle",
            mode: context.parser.mode,
            delim: delim.text
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var middleDelim;
          if (group2.delim === ".") {
            middleDelim = makeNullDelimiter(options2, []);
          } else {
            middleDelim = makeSizedDelim(group2.delim, 1, options2, group2.mode, []);
            var isMiddle = {
              delim: group2.delim,
              options: options2
            };
            middleDelim.isMiddle = isMiddle;
          }
          return middleDelim;
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var textNode = group2.delim === "\\vert" || group2.delim === "|" ? makeText("|", "text") : makeText(group2.delim, group2.mode);
          var middleNode = new MathNode("mo", [textNode]);
          middleNode.setAttribute("fence", "true");
          middleNode.setAttribute("lspace", "0.05em");
          middleNode.setAttribute("rspace", "0.05em");
          return middleNode;
        }, "mathmlBuilder")
      });
      htmlBuilder$7 = /* @__PURE__ */ __name((group2, options2) => {
        var inner2 = wrapFragment(buildGroup$1(group2.body, options2), options2);
        var label = group2.label.slice(1);
        var scale3 = options2.sizeMultiplier;
        var img;
        var imgShift = 0;
        var isSingleChar = isCharacterBox(group2.body);
        if (label === "sout") {
          img = makeSpan(["stretchy", "sout"]);
          img.height = options2.fontMetrics().defaultRuleThickness / scale3;
          imgShift = -0.5 * options2.fontMetrics().xHeight;
        } else if (label === "phase") {
          var lineWeight = calculateSize2({
            number: 0.6,
            unit: "pt"
          }, options2);
          var clearance = calculateSize2({
            number: 0.35,
            unit: "ex"
          }, options2);
          var newOptions = options2.havingBaseSizing();
          scale3 = scale3 / newOptions.sizeMultiplier;
          var angleHeight = inner2.height + inner2.depth + lineWeight + clearance;
          inner2.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight);
          var viewBoxHeight = Math.floor(1e3 * angleHeight * scale3);
          var path4 = phasePath(viewBoxHeight);
          var svgNode2 = new SvgNode([new PathNode("phase", path4)], {
            "width": "400em",
            "height": makeEm(viewBoxHeight / 1e3),
            "viewBox": "0 0 400000 " + viewBoxHeight,
            "preserveAspectRatio": "xMinYMin slice"
          });
          img = makeSvgSpan(["hide-tail"], [svgNode2], options2);
          img.style.height = makeEm(angleHeight);
          imgShift = inner2.depth + lineWeight + clearance;
        } else {
          if (/cancel/.test(label)) {
            if (!isSingleChar) {
              inner2.classes.push("cancel-pad");
            }
          } else if (label === "angl") {
            inner2.classes.push("anglpad");
          } else {
            inner2.classes.push("boxpad");
          }
          var topPad = 0;
          var bottomPad = 0;
          var ruleThickness = 0;
          if (/box/.test(label)) {
            ruleThickness = Math.max(
              options2.fontMetrics().fboxrule,
              // default
              options2.minRuleThickness
            );
            topPad = options2.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);
            bottomPad = topPad;
          } else if (label === "angl") {
            ruleThickness = Math.max(options2.fontMetrics().defaultRuleThickness, options2.minRuleThickness);
            topPad = 4 * ruleThickness;
            bottomPad = Math.max(0, 0.25 - inner2.depth);
          } else {
            topPad = isSingleChar ? 0.2 : 0;
            bottomPad = topPad;
          }
          img = stretchyEnclose(inner2, label, topPad, bottomPad, options2);
          if (/fbox|boxed|fcolorbox/.test(label)) {
            img.style.borderStyle = "solid";
            img.style.borderWidth = makeEm(ruleThickness);
          } else if (label === "angl" && ruleThickness !== 0.049) {
            img.style.borderTopWidth = makeEm(ruleThickness);
            img.style.borderRightWidth = makeEm(ruleThickness);
          }
          imgShift = inner2.depth + bottomPad;
          if (group2.backgroundColor) {
            img.style.backgroundColor = group2.backgroundColor;
            if (group2.borderColor) {
              img.style.borderColor = group2.borderColor;
            }
          }
        }
        var vlist;
        if (group2.backgroundColor) {
          vlist = makeVList({
            positionType: "individualShift",
            children: [
              // Put the color background behind inner;
              {
                type: "elem",
                elem: img,
                shift: imgShift
              },
              {
                type: "elem",
                elem: inner2,
                shift: 0
              }
            ]
          });
        } else {
          var classes3 = /cancel|phase/.test(label) ? ["svg-align"] : [];
          vlist = makeVList({
            positionType: "individualShift",
            children: [
              // Write the \cancel stroke on top of inner.
              {
                type: "elem",
                elem: inner2,
                shift: 0
              },
              {
                type: "elem",
                elem: img,
                shift: imgShift,
                wrapperClasses: classes3
              }
            ]
          });
        }
        if (/cancel/.test(label)) {
          vlist.height = inner2.height;
          vlist.depth = inner2.depth;
        }
        if (/cancel/.test(label) && !isSingleChar) {
          return makeSpan(["mord", "cancel-lap"], [vlist], options2);
        } else {
          return makeSpan(["mord"], [vlist], options2);
        }
      }, "htmlBuilder$7");
      mathmlBuilder$6 = /* @__PURE__ */ __name((group2, options2) => {
        var fboxsep = 0;
        var node2 = new MathNode(group2.label.includes("colorbox") ? "mpadded" : "menclose", [buildGroup2(group2.body, options2)]);
        switch (group2.label) {
          case "\\cancel":
            node2.setAttribute("notation", "updiagonalstrike");
            break;
          case "\\bcancel":
            node2.setAttribute("notation", "downdiagonalstrike");
            break;
          case "\\phase":
            node2.setAttribute("notation", "phasorangle");
            break;
          case "\\sout":
            node2.setAttribute("notation", "horizontalstrike");
            break;
          case "\\fbox":
            node2.setAttribute("notation", "box");
            break;
          case "\\angl":
            node2.setAttribute("notation", "actuarial");
            break;
          case "\\fcolorbox":
          case "\\colorbox":
            fboxsep = options2.fontMetrics().fboxsep * options2.fontMetrics().ptPerEm;
            node2.setAttribute("width", "+" + 2 * fboxsep + "pt");
            node2.setAttribute("height", "+" + 2 * fboxsep + "pt");
            node2.setAttribute("lspace", fboxsep + "pt");
            node2.setAttribute("voffset", fboxsep + "pt");
            if (group2.label === "\\fcolorbox") {
              var thk = Math.max(
                options2.fontMetrics().fboxrule,
                // default
                options2.minRuleThickness
              );
              node2.setAttribute("style", "border: " + makeEm(thk) + " solid " + group2.borderColor);
            }
            break;
          case "\\xcancel":
            node2.setAttribute("notation", "updiagonalstrike downdiagonalstrike");
            break;
        }
        if (group2.backgroundColor) {
          node2.setAttribute("mathbackground", group2.backgroundColor);
        }
        return node2;
      }, "mathmlBuilder$6");
      defineFunction({
        type: "enclose",
        names: ["\\colorbox"],
        props: {
          numArgs: 2,
          allowedInText: true,
          argTypes: ["color", "text"]
        },
        handler(_ref, args, optArgs) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var color2 = assertNodeType(args[0], "color-token").color;
          var body = args[1];
          return {
            type: "enclose",
            mode: parser34.mode,
            label: funcName,
            backgroundColor: color2,
            body
          };
        },
        htmlBuilder: htmlBuilder$7,
        mathmlBuilder: mathmlBuilder$6
      });
      defineFunction({
        type: "enclose",
        names: ["\\fcolorbox"],
        props: {
          numArgs: 3,
          allowedInText: true,
          argTypes: ["color", "color", "text"]
        },
        handler(_ref2, args, optArgs) {
          var {
            parser: parser34,
            funcName
          } = _ref2;
          var borderColor = assertNodeType(args[0], "color-token").color;
          var backgroundColor = assertNodeType(args[1], "color-token").color;
          var body = args[2];
          return {
            type: "enclose",
            mode: parser34.mode,
            label: funcName,
            backgroundColor,
            borderColor,
            body
          };
        },
        htmlBuilder: htmlBuilder$7,
        mathmlBuilder: mathmlBuilder$6
      });
      defineFunction({
        type: "enclose",
        names: ["\\fbox"],
        props: {
          numArgs: 1,
          argTypes: ["hbox"],
          allowedInText: true
        },
        handler(_ref3, args) {
          var {
            parser: parser34
          } = _ref3;
          return {
            type: "enclose",
            mode: parser34.mode,
            label: "\\fbox",
            body: args[0]
          };
        }
      });
      defineFunction({
        type: "enclose",
        names: ["\\cancel", "\\bcancel", "\\xcancel", "\\phase"],
        props: {
          numArgs: 1
        },
        handler(_ref4, args) {
          var {
            parser: parser34,
            funcName
          } = _ref4;
          var body = args[0];
          return {
            type: "enclose",
            mode: parser34.mode,
            label: funcName,
            body
          };
        },
        htmlBuilder: htmlBuilder$7,
        mathmlBuilder: mathmlBuilder$6
      });
      defineFunction({
        type: "enclose",
        names: ["\\sout"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler(_ref5, args) {
          var {
            parser: parser34,
            funcName
          } = _ref5;
          if (parser34.mode === "math") {
            parser34.settings.reportNonstrict("mathVsSout", "LaTeX's \\sout works only in text mode");
          }
          var body = args[0];
          return {
            type: "enclose",
            mode: parser34.mode,
            label: funcName,
            body
          };
        },
        htmlBuilder: htmlBuilder$7,
        mathmlBuilder: mathmlBuilder$6
      });
      defineFunction({
        type: "enclose",
        names: ["\\angl"],
        props: {
          numArgs: 1,
          argTypes: ["hbox"],
          allowedInText: false
        },
        handler(_ref6, args) {
          var {
            parser: parser34
          } = _ref6;
          return {
            type: "enclose",
            mode: parser34.mode,
            label: "\\angl",
            body: args[0]
          };
        }
      });
      _environments = {};
      __name(defineEnvironment, "defineEnvironment");
      _macros = {};
      __name(defineMacro, "defineMacro");
      SourceLocation = class _SourceLocation {
        static {
          __name(this, "SourceLocation");
        }
        // The + prefix indicates that these fields aren't writeable
        // Lexer holding the input string.
        // Start offset, zero-based inclusive.
        // End offset, zero-based exclusive.
        constructor(lexer, start3, end2) {
          this.lexer = lexer;
          this.start = start3;
          this.end = end2;
        }
        /**
         * Merges two `SourceLocation`s from location providers, given they are
         * provided in order of appearance.
         * - Returns the first one's location if only the first is provided.
         * - Returns a merged range of the first and the last if both are provided
         *   and their lexers match.
         * - Otherwise, returns null.
         */
        static range(first3, second2) {
          if (!second2) {
            return first3 && first3.loc;
          } else if (!first3 || !first3.loc || !second2.loc || first3.loc.lexer !== second2.loc.lexer) {
            return null;
          } else {
            return new _SourceLocation(first3.loc.lexer, first3.loc.start, second2.loc.end);
          }
        }
      };
      Token = class _Token {
        static {
          __name(this, "Token");
        }
        // don't expand the token
        // used in \noexpand
        constructor(text4, loc) {
          this.text = text4;
          this.loc = loc;
        }
        /**
         * Given a pair of tokens (this and endToken), compute a `Token` encompassing
         * the whole input range enclosed by these two.
         */
        range(endToken, text4) {
          return new _Token(text4, SourceLocation.range(this, endToken));
        }
      };
      __name(getHLines, "getHLines");
      validateAmsEnvironmentContext = /* @__PURE__ */ __name((context) => {
        var settings = context.parser.settings;
        if (!settings.displayMode) {
          throw new ParseError("{" + context.envName + "} can be used only in display mode.");
        }
      }, "validateAmsEnvironmentContext");
      gatherEnvironments = /* @__PURE__ */ new Set(["gather", "gather*"]);
      __name(getAutoTag, "getAutoTag");
      __name(parseArray, "parseArray");
      __name(dCellStyle, "dCellStyle");
      htmlBuilder$6 = /* @__PURE__ */ __name(function htmlBuilder(group2, options2) {
        var r2;
        var c3;
        var nr = group2.body.length;
        var hLinesBeforeRow = group2.hLinesBeforeRow;
        var nc = 0;
        var body = new Array(nr);
        var hlines = [];
        var ruleThickness = Math.max(
          // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em.
          options2.fontMetrics().arrayRuleWidth,
          options2.minRuleThickness
        );
        var pt = 1 / options2.fontMetrics().ptPerEm;
        var arraycolsep = 5 * pt;
        if (group2.colSeparationType && group2.colSeparationType === "small") {
          var localMultiplier = options2.havingStyle(Style$1.SCRIPT).sizeMultiplier;
          arraycolsep = 0.2778 * (localMultiplier / options2.sizeMultiplier);
        }
        var baselineskip = group2.colSeparationType === "CD" ? calculateSize2({
          number: 3,
          unit: "ex"
        }, options2) : 12 * pt;
        var jot = 3 * pt;
        var arrayskip = group2.arraystretch * baselineskip;
        var arstrutHeight = 0.7 * arrayskip;
        var arstrutDepth = 0.3 * arrayskip;
        var totalHeight = 0;
        function setHLinePos(hlinesInGap) {
          for (var i2 = 0; i2 < hlinesInGap.length; ++i2) {
            if (i2 > 0) {
              totalHeight += 0.25;
            }
            hlines.push({
              pos: totalHeight,
              isDashed: hlinesInGap[i2]
            });
          }
        }
        __name(setHLinePos, "setHLinePos");
        setHLinePos(hLinesBeforeRow[0]);
        for (r2 = 0; r2 < group2.body.length; ++r2) {
          var inrow = group2.body[r2];
          var height2 = arstrutHeight;
          var depth = arstrutDepth;
          if (nc < inrow.length) {
            nc = inrow.length;
          }
          var outrow = new Array(inrow.length);
          for (c3 = 0; c3 < inrow.length; ++c3) {
            var elt = buildGroup$1(inrow[c3], options2);
            if (depth < elt.depth) {
              depth = elt.depth;
            }
            if (height2 < elt.height) {
              height2 = elt.height;
            }
            outrow[c3] = elt;
          }
          var rowGap = group2.rowGaps[r2];
          var gap = 0;
          if (rowGap) {
            gap = calculateSize2(rowGap, options2);
            if (gap > 0) {
              gap += arstrutDepth;
              if (depth < gap) {
                depth = gap;
              }
              gap = 0;
            }
          }
          if (group2.addJot && r2 < group2.body.length - 1) {
            depth += jot;
          }
          outrow.height = height2;
          outrow.depth = depth;
          totalHeight += height2;
          outrow.pos = totalHeight;
          totalHeight += depth + gap;
          body[r2] = outrow;
          setHLinePos(hLinesBeforeRow[r2 + 1]);
        }
        var offset = totalHeight / 2 + options2.fontMetrics().axisHeight;
        var colDescriptions = group2.cols || [];
        var cols = [];
        var colSep;
        var colDescrNum;
        var tagSpans = [];
        if (group2.tags && group2.tags.some((tag2) => tag2)) {
          for (r2 = 0; r2 < nr; ++r2) {
            var rw = body[r2];
            var shift2 = rw.pos - offset;
            var tag = group2.tags[r2];
            var tagSpan = void 0;
            if (tag === true) {
              tagSpan = makeSpan(["eqn-num"], [], options2);
            } else if (tag === false) {
              tagSpan = makeSpan([], [], options2);
            } else {
              tagSpan = makeSpan([], buildExpression$1(tag, options2, true), options2);
            }
            tagSpan.depth = rw.depth;
            tagSpan.height = rw.height;
            tagSpans.push({
              type: "elem",
              elem: tagSpan,
              shift: shift2
            });
          }
        }
        for (
          c3 = 0, colDescrNum = 0;
          // Continue while either there are more columns or more column
          // descriptions, so trailing separators don't get lost.
          c3 < nc || colDescrNum < colDescriptions.length;
          ++c3, ++colDescrNum
        ) {
          var _colDescr3;
          var colDescr = colDescriptions[colDescrNum];
          var firstSeparator = true;
          while (((_colDescr = colDescr) == null ? void 0 : _colDescr.type) === "separator") {
            var _colDescr;
            if (!firstSeparator) {
              colSep = makeSpan(["arraycolsep"], []);
              colSep.style.width = makeEm(options2.fontMetrics().doubleRuleSep);
              cols.push(colSep);
            }
            if (colDescr.separator === "|" || colDescr.separator === ":") {
              var lineType = colDescr.separator === "|" ? "solid" : "dashed";
              var separator = makeSpan(["vertical-separator"], [], options2);
              separator.style.height = makeEm(totalHeight);
              separator.style.borderRightWidth = makeEm(ruleThickness);
              separator.style.borderRightStyle = lineType;
              separator.style.margin = "0 " + makeEm(-ruleThickness / 2);
              var _shift = totalHeight - offset;
              if (_shift) {
                separator.style.verticalAlign = makeEm(-_shift);
              }
              cols.push(separator);
            } else {
              throw new ParseError("Invalid separator type: " + colDescr.separator);
            }
            colDescrNum++;
            colDescr = colDescriptions[colDescrNum];
            firstSeparator = false;
          }
          if (c3 >= nc) {
            continue;
          }
          var sepwidth = void 0;
          if (c3 > 0 || group2.hskipBeforeAndAfter) {
            var _colDescr$pregap, _colDescr2;
            sepwidth = (_colDescr$pregap = (_colDescr2 = colDescr) == null ? void 0 : _colDescr2.pregap) != null ? _colDescr$pregap : arraycolsep;
            if (sepwidth !== 0) {
              colSep = makeSpan(["arraycolsep"], []);
              colSep.style.width = makeEm(sepwidth);
              cols.push(colSep);
            }
          }
          var colElems = [];
          for (r2 = 0; r2 < nr; ++r2) {
            var row = body[r2];
            var elem = row[c3];
            if (!elem) {
              continue;
            }
            var _shift2 = row.pos - offset;
            elem.depth = row.depth;
            elem.height = row.height;
            colElems.push({
              type: "elem",
              elem,
              shift: _shift2
            });
          }
          var colVList = makeVList({
            positionType: "individualShift",
            children: colElems
          });
          var colSpan = makeSpan(["col-align-" + (((_colDescr3 = colDescr) == null ? void 0 : _colDescr3.align) || "c")], [colVList]);
          cols.push(colSpan);
          if (c3 < nc - 1 || group2.hskipBeforeAndAfter) {
            var _colDescr$postgap, _colDescr4;
            sepwidth = (_colDescr$postgap = (_colDescr4 = colDescr) == null ? void 0 : _colDescr4.postgap) != null ? _colDescr$postgap : arraycolsep;
            if (sepwidth !== 0) {
              colSep = makeSpan(["arraycolsep"], []);
              colSep.style.width = makeEm(sepwidth);
              cols.push(colSep);
            }
          }
        }
        var tableBody = makeSpan(["mtable"], cols);
        if (hlines.length > 0) {
          var line2 = makeLineSpan("hline", options2, ruleThickness);
          var dashes = makeLineSpan("hdashline", options2, ruleThickness);
          var vListElems = [{
            type: "elem",
            elem: tableBody,
            shift: 0
          }];
          while (hlines.length > 0) {
            var hline = hlines.pop();
            var lineShift = hline.pos - offset;
            if (hline.isDashed) {
              vListElems.push({
                type: "elem",
                elem: dashes,
                shift: lineShift
              });
            } else {
              vListElems.push({
                type: "elem",
                elem: line2,
                shift: lineShift
              });
            }
          }
          tableBody = makeVList({
            positionType: "individualShift",
            children: vListElems
          });
        }
        if (tagSpans.length === 0) {
          return makeSpan(["mord"], [tableBody], options2);
        } else {
          var eqnNumCol = makeVList({
            positionType: "individualShift",
            children: tagSpans
          });
          var tagCol = makeSpan(["tag"], [eqnNumCol], options2);
          return makeFragment([tableBody, tagCol]);
        }
      }, "htmlBuilder");
      alignMap = {
        c: "center ",
        l: "left ",
        r: "right "
      };
      mathmlBuilder$5 = /* @__PURE__ */ __name(function mathmlBuilder(group2, options2) {
        var tbl = [];
        var glue = new MathNode("mtd", [], ["mtr-glue"]);
        var tag = new MathNode("mtd", [], ["mml-eqn-num"]);
        for (var i2 = 0; i2 < group2.body.length; i2++) {
          var rw = group2.body[i2];
          var row = [];
          for (var j3 = 0; j3 < rw.length; j3++) {
            row.push(new MathNode("mtd", [buildGroup2(rw[j3], options2)]));
          }
          if (group2.tags && group2.tags[i2]) {
            row.unshift(glue);
            row.push(glue);
            if (group2.leqno) {
              row.unshift(tag);
            } else {
              row.push(tag);
            }
          }
          tbl.push(new MathNode("mtr", row));
        }
        var table = new MathNode("mtable", tbl);
        var gap = group2.arraystretch === 0.5 ? 0.1 : 0.16 + group2.arraystretch - 1 + (group2.addJot ? 0.09 : 0);
        table.setAttribute("rowspacing", makeEm(gap));
        var menclose = "";
        var align = "";
        if (group2.cols && group2.cols.length > 0) {
          var cols = group2.cols;
          var columnLines = "";
          var prevTypeWasAlign = false;
          var iStart = 0;
          var iEnd = cols.length;
          if (cols[0].type === "separator") {
            menclose += "top ";
            iStart = 1;
          }
          if (cols[cols.length - 1].type === "separator") {
            menclose += "bottom ";
            iEnd -= 1;
          }
          for (var _i = iStart; _i < iEnd; _i++) {
            var col = cols[_i];
            if (col.type === "align") {
              align += alignMap[col.align];
              if (prevTypeWasAlign) {
                columnLines += "none ";
              }
              prevTypeWasAlign = true;
            } else if (col.type === "separator") {
              if (prevTypeWasAlign) {
                columnLines += col.separator === "|" ? "solid " : "dashed ";
                prevTypeWasAlign = false;
              }
            }
          }
          table.setAttribute("columnalign", align.trim());
          if (/[sd]/.test(columnLines)) {
            table.setAttribute("columnlines", columnLines.trim());
          }
        }
        if (group2.colSeparationType === "align") {
          var _cols = group2.cols || [];
          var spacing2 = "";
          for (var _i2 = 1; _i2 < _cols.length; _i2++) {
            spacing2 += _i2 % 2 ? "0em " : "1em ";
          }
          table.setAttribute("columnspacing", spacing2.trim());
        } else if (group2.colSeparationType === "alignat" || group2.colSeparationType === "gather") {
          table.setAttribute("columnspacing", "0em");
        } else if (group2.colSeparationType === "small") {
          table.setAttribute("columnspacing", "0.2778em");
        } else if (group2.colSeparationType === "CD") {
          table.setAttribute("columnspacing", "0.5em");
        } else {
          table.setAttribute("columnspacing", "1em");
        }
        var rowLines = "";
        var hlines = group2.hLinesBeforeRow;
        menclose += hlines[0].length > 0 ? "left " : "";
        menclose += hlines[hlines.length - 1].length > 0 ? "right " : "";
        for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) {
          rowLines += hlines[_i3].length === 0 ? "none " : hlines[_i3][0] ? "dashed " : "solid ";
        }
        if (/[sd]/.test(rowLines)) {
          table.setAttribute("rowlines", rowLines.trim());
        }
        if (menclose !== "") {
          table = new MathNode("menclose", [table]);
          table.setAttribute("notation", menclose.trim());
        }
        if (group2.arraystretch && group2.arraystretch < 1) {
          table = new MathNode("mstyle", [table]);
          table.setAttribute("scriptlevel", "1");
        }
        return table;
      }, "mathmlBuilder");
      alignedHandler = /* @__PURE__ */ __name(function alignedHandler2(context, args) {
        if (!context.envName.includes("ed")) {
          validateAmsEnvironmentContext(context);
        }
        var cols = [];
        var separationType = context.envName.includes("at") ? "alignat" : "align";
        var isSplit = context.envName === "split";
        var res = parseArray(context.parser, {
          cols,
          addJot: true,
          autoTag: isSplit ? void 0 : getAutoTag(context.envName),
          emptySingleRow: true,
          colSeparationType: separationType,
          maxNumCols: isSplit ? 2 : void 0,
          leqno: context.parser.settings.leqno
        }, "display");
        var numMaths = 0;
        var numCols = 0;
        var emptyGroup = {
          type: "ordgroup",
          mode: context.mode,
          body: []
        };
        if (args[0] && args[0].type === "ordgroup") {
          var arg0 = "";
          for (var i2 = 0; i2 < args[0].body.length; i2++) {
            var textord2 = assertNodeType(args[0].body[i2], "textord");
            arg0 += textord2.text;
          }
          numMaths = Number(arg0);
          numCols = numMaths * 2;
        }
        var isAligned = !numCols;
        res.body.forEach(function(row) {
          for (var _i4 = 1; _i4 < row.length; _i4 += 2) {
            var styling = assertNodeType(row[_i4], "styling");
            var ordgroup = assertNodeType(styling.body[0], "ordgroup");
            ordgroup.body.unshift(emptyGroup);
          }
          if (!isAligned) {
            var curMaths = row.length / 2;
            if (numMaths < curMaths) {
              throw new ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]);
            }
          } else if (numCols < row.length) {
            numCols = row.length;
          }
        });
        for (var _i5 = 0; _i5 < numCols; ++_i5) {
          var align = "r";
          var pregap = 0;
          if (_i5 % 2 === 1) {
            align = "l";
          } else if (_i5 > 0 && isAligned) {
            pregap = 1;
          }
          cols[_i5] = {
            type: "align",
            align,
            pregap,
            postgap: 0
          };
        }
        res.colSeparationType = isAligned ? "align" : "alignat";
        return res;
      }, "alignedHandler");
      defineEnvironment({
        type: "array",
        names: ["array", "darray"],
        props: {
          numArgs: 1
        },
        handler(context, args) {
          var symNode = checkSymbolNodeType(args[0]);
          var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
          var cols = colalign.map(function(nde) {
            var node2 = assertSymbolNodeType(nde);
            var ca = node2.text;
            if ("lcr".includes(ca)) {
              return {
                type: "align",
                align: ca
              };
            } else if (ca === "|") {
              return {
                type: "separator",
                separator: "|"
              };
            } else if (ca === ":") {
              return {
                type: "separator",
                separator: ":"
              };
            }
            throw new ParseError("Unknown column alignment: " + ca, nde);
          });
          var res = {
            cols,
            hskipBeforeAndAfter: true,
            // \@preamble in lttab.dtx
            maxNumCols: cols.length
          };
          return parseArray(context.parser, res, dCellStyle(context.envName));
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"],
        props: {
          numArgs: 0
        },
        handler(context) {
          var delimiters2 = {
            "matrix": null,
            "pmatrix": ["(", ")"],
            "bmatrix": ["[", "]"],
            "Bmatrix": ["\\{", "\\}"],
            "vmatrix": ["|", "|"],
            "Vmatrix": ["\\Vert", "\\Vert"]
          }[context.envName.replace("*", "")];
          var colAlign = "c";
          var payload = {
            hskipBeforeAndAfter: false,
            cols: [{
              type: "align",
              align: colAlign
            }]
          };
          if (context.envName.charAt(context.envName.length - 1) === "*") {
            var parser34 = context.parser;
            parser34.consumeSpaces();
            if (parser34.fetch().text === "[") {
              parser34.consume();
              parser34.consumeSpaces();
              colAlign = parser34.fetch().text;
              if (!"lcr".includes(colAlign)) {
                throw new ParseError("Expected l or c or r", parser34.nextToken);
              }
              parser34.consume();
              parser34.consumeSpaces();
              parser34.expect("]");
              parser34.consume();
              payload.cols = [{
                type: "align",
                align: colAlign
              }];
            }
          }
          var res = parseArray(context.parser, payload, dCellStyle(context.envName));
          var numCols = Math.max(0, ...res.body.map((row) => row.length));
          res.cols = new Array(numCols).fill({
            type: "align",
            align: colAlign
          });
          return delimiters2 ? {
            type: "leftright",
            mode: context.mode,
            body: [res],
            left: delimiters2[0],
            right: delimiters2[1],
            rightColor: void 0
            // \right uninfluenced by \color in array
          } : res;
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["smallmatrix"],
        props: {
          numArgs: 0
        },
        handler(context) {
          var payload = {
            arraystretch: 0.5
          };
          var res = parseArray(context.parser, payload, "script");
          res.colSeparationType = "small";
          return res;
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["subarray"],
        props: {
          numArgs: 1
        },
        handler(context, args) {
          var symNode = checkSymbolNodeType(args[0]);
          var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
          var cols = colalign.map(function(nde) {
            var node2 = assertSymbolNodeType(nde);
            var ca = node2.text;
            if ("lc".includes(ca)) {
              return {
                type: "align",
                align: ca
              };
            }
            throw new ParseError("Unknown column alignment: " + ca, nde);
          });
          if (cols.length > 1) {
            throw new ParseError("{subarray} can contain only one column");
          }
          var payload = {
            cols,
            hskipBeforeAndAfter: false,
            arraystretch: 0.5
          };
          var res = parseArray(context.parser, payload, "script");
          if (res.body.length > 0 && res.body[0].length > 1) {
            throw new ParseError("{subarray} can contain only one column");
          }
          return res;
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["cases", "dcases", "rcases", "drcases"],
        props: {
          numArgs: 0
        },
        handler(context) {
          var payload = {
            arraystretch: 1.2,
            cols: [{
              type: "align",
              align: "l",
              pregap: 0,
              // TODO(kevinb) get the current style.
              // For now we use the metrics for TEXT style which is what we were
              // doing before.  Before attempting to get the current style we
              // should look at TeX's behavior especially for \over and matrices.
              postgap: 1
              /* 1em quad */
            }, {
              type: "align",
              align: "l",
              pregap: 0,
              postgap: 0
            }]
          };
          var res = parseArray(context.parser, payload, dCellStyle(context.envName));
          return {
            type: "leftright",
            mode: context.mode,
            body: [res],
            left: context.envName.includes("r") ? "." : "\\{",
            right: context.envName.includes("r") ? "\\}" : ".",
            rightColor: void 0
          };
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["align", "align*", "aligned", "split"],
        props: {
          numArgs: 0
        },
        handler: alignedHandler,
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["gathered", "gather", "gather*"],
        props: {
          numArgs: 0
        },
        handler(context) {
          if (gatherEnvironments.has(context.envName)) {
            validateAmsEnvironmentContext(context);
          }
          var res = {
            cols: [{
              type: "align",
              align: "c"
            }],
            addJot: true,
            colSeparationType: "gather",
            autoTag: getAutoTag(context.envName),
            emptySingleRow: true,
            leqno: context.parser.settings.leqno
          };
          return parseArray(context.parser, res, "display");
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["alignat", "alignat*", "alignedat"],
        props: {
          numArgs: 1
        },
        handler: alignedHandler,
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["equation", "equation*"],
        props: {
          numArgs: 0
        },
        handler(context) {
          validateAmsEnvironmentContext(context);
          var res = {
            autoTag: getAutoTag(context.envName),
            emptySingleRow: true,
            singleRow: true,
            maxNumCols: 1,
            leqno: context.parser.settings.leqno
          };
          return parseArray(context.parser, res, "display");
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineEnvironment({
        type: "array",
        names: ["CD"],
        props: {
          numArgs: 0
        },
        handler(context) {
          validateAmsEnvironmentContext(context);
          return parseCD(context.parser);
        },
        htmlBuilder: htmlBuilder$6,
        mathmlBuilder: mathmlBuilder$5
      });
      defineMacro("\\nonumber", "\\gdef\\@eqnsw{0}");
      defineMacro("\\notag", "\\nonumber");
      defineFunction({
        type: "text",
        // Doesn't matter what this is.
        names: ["\\hline", "\\hdashline"],
        props: {
          numArgs: 0,
          allowedInText: true,
          allowedInMath: true
        },
        handler(context, args) {
          throw new ParseError(context.funcName + " valid only within array environment");
        }
      });
      environments = _environments;
      defineFunction({
        type: "environment",
        names: ["\\begin", "\\end"],
        props: {
          numArgs: 1,
          argTypes: ["text"]
        },
        handler(_ref, args) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var nameGroup = args[0];
          if (nameGroup.type !== "ordgroup") {
            throw new ParseError("Invalid environment name", nameGroup);
          }
          var envName = "";
          for (var i2 = 0; i2 < nameGroup.body.length; ++i2) {
            envName += assertNodeType(nameGroup.body[i2], "textord").text;
          }
          if (funcName === "\\begin") {
            if (!environments.hasOwnProperty(envName)) {
              throw new ParseError("No such environment: " + envName, nameGroup);
            }
            var env = environments[envName];
            var {
              args: _args,
              optArgs
            } = parser34.parseArguments("\\begin{" + envName + "}", env);
            var context = {
              mode: parser34.mode,
              envName,
              parser: parser34
            };
            var result = env.handler(context, _args, optArgs);
            parser34.expect("\\end", false);
            var endNameToken = parser34.nextToken;
            var end2 = assertNodeType(parser34.parseFunction(), "environment");
            if (end2.name !== envName) {
              throw new ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end2.name + "}", endNameToken);
            }
            return result;
          }
          return {
            type: "environment",
            mode: parser34.mode,
            name: envName,
            nameGroup
          };
        }
      });
      htmlBuilder$5 = /* @__PURE__ */ __name((group2, options2) => {
        var font = group2.font;
        var newOptions = options2.withFont(font);
        return buildGroup$1(group2.body, newOptions);
      }, "htmlBuilder$5");
      mathmlBuilder$4 = /* @__PURE__ */ __name((group2, options2) => {
        var font = group2.font;
        var newOptions = options2.withFont(font);
        return buildGroup2(group2.body, newOptions);
      }, "mathmlBuilder$4");
      fontAliases = {
        "\\Bbb": "\\mathbb",
        "\\bold": "\\mathbf",
        "\\frak": "\\mathfrak",
        "\\bm": "\\boldsymbol"
      };
      defineFunction({
        type: "font",
        names: [
          // styles, except \boldsymbol defined below
          "\\mathrm",
          "\\mathit",
          "\\mathbf",
          "\\mathnormal",
          "\\mathsfit",
          // families
          "\\mathbb",
          "\\mathcal",
          "\\mathfrak",
          "\\mathscr",
          "\\mathsf",
          "\\mathtt",
          // aliases, except \bm defined below
          "\\Bbb",
          "\\bold",
          "\\frak"
        ],
        props: {
          numArgs: 1,
          allowedInArgument: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var body = normalizeArgument(args[0]);
          var func = funcName;
          if (func in fontAliases) {
            func = fontAliases[func];
          }
          return {
            type: "font",
            mode: parser34.mode,
            font: func.slice(1),
            body
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$5,
        mathmlBuilder: mathmlBuilder$4
      });
      defineFunction({
        type: "mclass",
        names: ["\\boldsymbol", "\\bm"],
        props: {
          numArgs: 1
        },
        handler: /* @__PURE__ */ __name((_ref2, args) => {
          var {
            parser: parser34
          } = _ref2;
          var body = args[0];
          return {
            type: "mclass",
            mode: parser34.mode,
            mclass: binrelClass(body),
            body: [{
              type: "font",
              mode: parser34.mode,
              font: "boldsymbol",
              body
            }],
            isCharacterBox: isCharacterBox(body)
          };
        }, "handler")
      });
      defineFunction({
        type: "font",
        names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"],
        props: {
          numArgs: 0,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref3, args) => {
          var {
            parser: parser34,
            funcName,
            breakOnTokenText
          } = _ref3;
          var {
            mode
          } = parser34;
          var body = parser34.parseExpression(true, breakOnTokenText);
          var style3 = "math" + funcName.slice(1);
          return {
            type: "font",
            mode,
            font: style3,
            body: {
              type: "ordgroup",
              mode: parser34.mode,
              body
            }
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$5,
        mathmlBuilder: mathmlBuilder$4
      });
      htmlBuilder$4 = /* @__PURE__ */ __name((group2, options2) => {
        var style3 = options2.style;
        var nstyle = style3.fracNum();
        var dstyle = style3.fracDen();
        var newOptions;
        newOptions = options2.havingStyle(nstyle);
        var numerm = buildGroup$1(group2.numer, newOptions, options2);
        if (group2.continued) {
          var hStrut = 8.5 / options2.fontMetrics().ptPerEm;
          var dStrut = 3.5 / options2.fontMetrics().ptPerEm;
          numerm.height = numerm.height < hStrut ? hStrut : numerm.height;
          numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;
        }
        newOptions = options2.havingStyle(dstyle);
        var denomm = buildGroup$1(group2.denom, newOptions, options2);
        var rule;
        var ruleWidth;
        var ruleSpacing;
        if (group2.hasBarLine) {
          if (group2.barSize) {
            ruleWidth = calculateSize2(group2.barSize, options2);
            rule = makeLineSpan("frac-line", options2, ruleWidth);
          } else {
            rule = makeLineSpan("frac-line", options2);
          }
          ruleWidth = rule.height;
          ruleSpacing = rule.height;
        } else {
          rule = null;
          ruleWidth = 0;
          ruleSpacing = options2.fontMetrics().defaultRuleThickness;
        }
        var numShift;
        var clearance;
        var denomShift;
        if (style3.size === Style$1.DISPLAY.size) {
          numShift = options2.fontMetrics().num1;
          if (ruleWidth > 0) {
            clearance = 3 * ruleSpacing;
          } else {
            clearance = 7 * ruleSpacing;
          }
          denomShift = options2.fontMetrics().denom1;
        } else {
          if (ruleWidth > 0) {
            numShift = options2.fontMetrics().num2;
            clearance = ruleSpacing;
          } else {
            numShift = options2.fontMetrics().num3;
            clearance = 3 * ruleSpacing;
          }
          denomShift = options2.fontMetrics().denom2;
        }
        var frac;
        if (!rule) {
          var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);
          if (candidateClearance < clearance) {
            numShift += 0.5 * (clearance - candidateClearance);
            denomShift += 0.5 * (clearance - candidateClearance);
          }
          frac = makeVList({
            positionType: "individualShift",
            children: [{
              type: "elem",
              elem: denomm,
              shift: denomShift
            }, {
              type: "elem",
              elem: numerm,
              shift: -numShift
            }]
          });
        } else {
          var axisHeight = options2.fontMetrics().axisHeight;
          if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {
            numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));
          }
          if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {
            denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));
          }
          var midShift = -(axisHeight - 0.5 * ruleWidth);
          frac = makeVList({
            positionType: "individualShift",
            children: [{
              type: "elem",
              elem: denomm,
              shift: denomShift
            }, {
              type: "elem",
              elem: rule,
              shift: midShift
            }, {
              type: "elem",
              elem: numerm,
              shift: -numShift
            }]
          });
        }
        newOptions = options2.havingStyle(style3);
        frac.height *= newOptions.sizeMultiplier / options2.sizeMultiplier;
        frac.depth *= newOptions.sizeMultiplier / options2.sizeMultiplier;
        var delimSize;
        if (style3.size === Style$1.DISPLAY.size) {
          delimSize = options2.fontMetrics().delim1;
        } else if (style3.size === Style$1.SCRIPTSCRIPT.size) {
          delimSize = options2.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;
        } else {
          delimSize = options2.fontMetrics().delim2;
        }
        var leftDelim;
        var rightDelim;
        if (group2.leftDelim == null) {
          leftDelim = makeNullDelimiter(options2, ["mopen"]);
        } else {
          leftDelim = makeCustomSizedDelim(group2.leftDelim, delimSize, true, options2.havingStyle(style3), group2.mode, ["mopen"]);
        }
        if (group2.continued) {
          rightDelim = makeSpan([]);
        } else if (group2.rightDelim == null) {
          rightDelim = makeNullDelimiter(options2, ["mclose"]);
        } else {
          rightDelim = makeCustomSizedDelim(group2.rightDelim, delimSize, true, options2.havingStyle(style3), group2.mode, ["mclose"]);
        }
        return makeSpan(["mord"].concat(newOptions.sizingClasses(options2)), [leftDelim, makeSpan(["mfrac"], [frac]), rightDelim], options2);
      }, "htmlBuilder$4");
      mathmlBuilder$3 = /* @__PURE__ */ __name((group2, options2) => {
        var node2 = new MathNode("mfrac", [buildGroup2(group2.numer, options2), buildGroup2(group2.denom, options2)]);
        if (!group2.hasBarLine) {
          node2.setAttribute("linethickness", "0px");
        } else if (group2.barSize) {
          var ruleWidth = calculateSize2(group2.barSize, options2);
          node2.setAttribute("linethickness", makeEm(ruleWidth));
        }
        if (group2.leftDelim != null || group2.rightDelim != null) {
          var withDelims = [];
          if (group2.leftDelim != null) {
            var leftOp = new MathNode("mo", [new TextNode(group2.leftDelim.replace("\\", ""))]);
            leftOp.setAttribute("fence", "true");
            withDelims.push(leftOp);
          }
          withDelims.push(node2);
          if (group2.rightDelim != null) {
            var rightOp = new MathNode("mo", [new TextNode(group2.rightDelim.replace("\\", ""))]);
            rightOp.setAttribute("fence", "true");
            withDelims.push(rightOp);
          }
          return makeRow(withDelims);
        }
        return node2;
      }, "mathmlBuilder$3");
      wrapWithStyle = /* @__PURE__ */ __name((frac, style3) => {
        if (!style3) {
          return frac;
        }
        var wrapper = {
          type: "styling",
          mode: frac.mode,
          style: style3,
          body: [frac]
        };
        return wrapper;
      }, "wrapWithStyle");
      defineFunction({
        type: "genfrac",
        names: [
          "\\cfrac",
          "\\dfrac",
          "\\frac",
          "\\tfrac",
          "\\dbinom",
          "\\binom",
          "\\tbinom",
          "\\\\atopfrac",
          // can’t be entered directly
          "\\\\bracefrac",
          "\\\\brackfrac"
          // ditto
        ],
        props: {
          numArgs: 2,
          allowedInArgument: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var numer = args[0];
          var denom = args[1];
          var hasBarLine;
          var leftDelim = null;
          var rightDelim = null;
          switch (funcName) {
            case "\\cfrac":
            case "\\dfrac":
            case "\\frac":
            case "\\tfrac":
              hasBarLine = true;
              break;
            case "\\\\atopfrac":
              hasBarLine = false;
              break;
            case "\\dbinom":
            case "\\binom":
            case "\\tbinom":
              hasBarLine = false;
              leftDelim = "(";
              rightDelim = ")";
              break;
            case "\\\\bracefrac":
              hasBarLine = false;
              leftDelim = "\\{";
              rightDelim = "\\}";
              break;
            case "\\\\brackfrac":
              hasBarLine = false;
              leftDelim = "[";
              rightDelim = "]";
              break;
            default:
              throw new Error("Unrecognized genfrac command");
          }
          var continued = funcName === "\\cfrac";
          var style3 = null;
          if (continued || funcName.startsWith("\\d")) {
            style3 = "display";
          } else if (funcName.startsWith("\\t")) {
            style3 = "text";
          }
          return wrapWithStyle({
            type: "genfrac",
            mode: parser34.mode,
            numer,
            denom,
            continued,
            hasBarLine,
            leftDelim,
            rightDelim,
            barSize: null
          }, style3);
        }, "handler"),
        htmlBuilder: htmlBuilder$4,
        mathmlBuilder: mathmlBuilder$3
      });
      defineFunction({
        type: "infix",
        names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"],
        props: {
          numArgs: 0,
          infix: true
        },
        handler(_ref2) {
          var {
            parser: parser34,
            funcName,
            token: token2
          } = _ref2;
          var replaceWith;
          switch (funcName) {
            case "\\over":
              replaceWith = "\\frac";
              break;
            case "\\choose":
              replaceWith = "\\binom";
              break;
            case "\\atop":
              replaceWith = "\\\\atopfrac";
              break;
            case "\\brace":
              replaceWith = "\\\\bracefrac";
              break;
            case "\\brack":
              replaceWith = "\\\\brackfrac";
              break;
            default:
              throw new Error("Unrecognized infix genfrac command");
          }
          return {
            type: "infix",
            mode: parser34.mode,
            replaceWith,
            token: token2
          };
        }
      });
      stylArray = ["display", "text", "script", "scriptscript"];
      delimFromValue = /* @__PURE__ */ __name(function delimFromValue2(delimString) {
        var delim = null;
        if (delimString.length > 0) {
          delim = delimString;
          delim = delim === "." ? null : delim;
        }
        return delim;
      }, "delimFromValue");
      defineFunction({
        type: "genfrac",
        names: ["\\genfrac"],
        props: {
          numArgs: 6,
          allowedInArgument: true,
          argTypes: ["math", "math", "size", "text", "math", "math"]
        },
        handler(_ref3, args) {
          var {
            parser: parser34
          } = _ref3;
          var numer = args[4];
          var denom = args[5];
          var leftNode = normalizeArgument(args[0]);
          var leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null;
          var rightNode = normalizeArgument(args[1]);
          var rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null;
          var barNode = assertNodeType(args[2], "size");
          var hasBarLine;
          var barSize = null;
          if (barNode.isBlank) {
            hasBarLine = true;
          } else {
            barSize = barNode.value;
            hasBarLine = barSize.number > 0;
          }
          var size4 = null;
          var styl = args[3];
          if (styl.type === "ordgroup") {
            if (styl.body.length > 0) {
              var textOrd = assertNodeType(styl.body[0], "textord");
              size4 = stylArray[Number(textOrd.text)];
            }
          } else {
            styl = assertNodeType(styl, "textord");
            size4 = stylArray[Number(styl.text)];
          }
          return wrapWithStyle({
            type: "genfrac",
            mode: parser34.mode,
            numer,
            denom,
            continued: false,
            hasBarLine,
            barSize,
            leftDelim,
            rightDelim
          }, size4);
        }
      });
      defineFunction({
        type: "infix",
        names: ["\\above"],
        props: {
          numArgs: 1,
          argTypes: ["size"],
          infix: true
        },
        handler(_ref4, args) {
          var {
            parser: parser34,
            funcName,
            token: token2
          } = _ref4;
          return {
            type: "infix",
            mode: parser34.mode,
            replaceWith: "\\\\abovefrac",
            size: assertNodeType(args[0], "size").value,
            token: token2
          };
        }
      });
      defineFunction({
        type: "genfrac",
        names: ["\\\\abovefrac"],
        props: {
          numArgs: 3,
          argTypes: ["math", "size", "math"]
        },
        handler: /* @__PURE__ */ __name((_ref5, args) => {
          var {
            parser: parser34,
            funcName
          } = _ref5;
          var numer = args[0];
          var barSize = assertNodeType(args[1], "infix").size;
          if (!barSize) {
            throw new Error("\\\\abovefrac expected size, but got " + String(barSize));
          }
          var denom = args[2];
          var hasBarLine = barSize.number > 0;
          return {
            type: "genfrac",
            mode: parser34.mode,
            numer,
            denom,
            continued: false,
            hasBarLine,
            barSize,
            leftDelim: null,
            rightDelim: null
          };
        }, "handler")
      });
      htmlBuilder$3 = /* @__PURE__ */ __name((grp, options2) => {
        var style3 = options2.style;
        var supSubGroup;
        var group2;
        if (grp.type === "supsub") {
          supSubGroup = grp.sup ? buildGroup$1(grp.sup, options2.havingStyle(style3.sup()), options2) : buildGroup$1(grp.sub, options2.havingStyle(style3.sub()), options2);
          group2 = assertNodeType(grp.base, "horizBrace");
        } else {
          group2 = assertNodeType(grp, "horizBrace");
        }
        var body = buildGroup$1(group2.base, options2.havingBaseStyle(Style$1.DISPLAY));
        var braceBody = stretchySvg(group2, options2);
        var vlist;
        if (group2.isOver) {
          vlist = makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: body
            }, {
              type: "kern",
              size: 0.1
            }, {
              type: "elem",
              elem: braceBody
            }]
          });
          vlist.children[0].children[0].children[1].classes.push("svg-align");
        } else {
          vlist = makeVList({
            positionType: "bottom",
            positionData: body.depth + 0.1 + braceBody.height,
            children: [{
              type: "elem",
              elem: braceBody
            }, {
              type: "kern",
              size: 0.1
            }, {
              type: "elem",
              elem: body
            }]
          });
          vlist.children[0].children[0].children[0].classes.push("svg-align");
        }
        if (supSubGroup) {
          var vSpan = makeSpan(["minner", group2.isOver ? "mover" : "munder"], [vlist], options2);
          if (group2.isOver) {
            vlist = makeVList({
              positionType: "firstBaseline",
              children: [{
                type: "elem",
                elem: vSpan
              }, {
                type: "kern",
                size: 0.2
              }, {
                type: "elem",
                elem: supSubGroup
              }]
            });
          } else {
            vlist = makeVList({
              positionType: "bottom",
              positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,
              children: [{
                type: "elem",
                elem: supSubGroup
              }, {
                type: "kern",
                size: 0.2
              }, {
                type: "elem",
                elem: vSpan
              }]
            });
          }
        }
        return makeSpan(["minner", group2.isOver ? "mover" : "munder"], [vlist], options2);
      }, "htmlBuilder$3");
      mathmlBuilder$2 = /* @__PURE__ */ __name((group2, options2) => {
        var accentNode = stretchyMathML(group2.label);
        return new MathNode(group2.isOver ? "mover" : "munder", [buildGroup2(group2.base, options2), accentNode]);
      }, "mathmlBuilder$2");
      defineFunction({
        type: "horizBrace",
        names: ["\\overbrace", "\\underbrace", "\\overbracket", "\\underbracket"],
        props: {
          numArgs: 1
        },
        handler(_ref, args) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          return {
            type: "horizBrace",
            mode: parser34.mode,
            label: funcName,
            isOver: funcName.includes("\\over"),
            base: args[0]
          };
        },
        htmlBuilder: htmlBuilder$3,
        mathmlBuilder: mathmlBuilder$2
      });
      defineFunction({
        type: "href",
        names: ["\\href"],
        props: {
          numArgs: 2,
          argTypes: ["url", "original"],
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34
          } = _ref;
          var body = args[1];
          var href = assertNodeType(args[0], "url").url;
          if (!parser34.settings.isTrusted({
            command: "\\href",
            url: href
          })) {
            return parser34.formatUnsupportedCmd("\\href");
          }
          return {
            type: "href",
            mode: parser34.mode,
            href,
            body: ordargument(body)
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var elements2 = buildExpression$1(group2.body, options2, false);
          return makeAnchor(group2.href, [], elements2, options2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var math2 = buildExpressionRow(group2.body, options2);
          if (!(math2 instanceof MathNode)) {
            math2 = new MathNode("mrow", [math2]);
          }
          math2.setAttribute("href", group2.href);
          return math2;
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "href",
        names: ["\\url"],
        props: {
          numArgs: 1,
          argTypes: ["url"],
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref2, args) => {
          var {
            parser: parser34
          } = _ref2;
          var href = assertNodeType(args[0], "url").url;
          if (!parser34.settings.isTrusted({
            command: "\\url",
            url: href
          })) {
            return parser34.formatUnsupportedCmd("\\url");
          }
          var chars = [];
          for (var i2 = 0; i2 < href.length; i2++) {
            var c3 = href[i2];
            if (c3 === "~") {
              c3 = "\\textasciitilde";
            }
            chars.push({
              type: "textord",
              mode: "text",
              text: c3
            });
          }
          var body = {
            type: "text",
            mode: parser34.mode,
            font: "\\texttt",
            body: chars
          };
          return {
            type: "href",
            mode: parser34.mode,
            href,
            body: ordargument(body)
          };
        }, "handler")
      });
      defineFunction({
        type: "hbox",
        names: ["\\hbox"],
        props: {
          numArgs: 1,
          argTypes: ["text"],
          allowedInText: true,
          primitive: true
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          return {
            type: "hbox",
            mode: parser34.mode,
            body: ordargument(args[0])
          };
        },
        htmlBuilder(group2, options2) {
          var elements2 = buildExpression$1(group2.body, options2, false);
          return makeFragment(elements2);
        },
        mathmlBuilder(group2, options2) {
          return new MathNode("mrow", buildExpression2(group2.body, options2));
        }
      });
      defineFunction({
        type: "html",
        names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"],
        props: {
          numArgs: 2,
          argTypes: ["raw", "original"],
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34,
            funcName,
            token: token2
          } = _ref;
          var value2 = assertNodeType(args[0], "raw").string;
          var body = args[1];
          if (parser34.settings.strict) {
            parser34.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode");
          }
          var trustContext;
          var attributes = {};
          switch (funcName) {
            case "\\htmlClass":
              attributes.class = value2;
              trustContext = {
                command: "\\htmlClass",
                class: value2
              };
              break;
            case "\\htmlId":
              attributes.id = value2;
              trustContext = {
                command: "\\htmlId",
                id: value2
              };
              break;
            case "\\htmlStyle":
              attributes.style = value2;
              trustContext = {
                command: "\\htmlStyle",
                style: value2
              };
              break;
            case "\\htmlData": {
              var data6 = value2.split(",");
              for (var i2 = 0; i2 < data6.length; i2++) {
                var item = data6[i2];
                var firstEquals = item.indexOf("=");
                if (firstEquals < 0) {
                  throw new ParseError("\\htmlData key/value '" + item + "' missing equals sign");
                }
                var key = item.slice(0, firstEquals);
                var _value = item.slice(firstEquals + 1);
                attributes["data-" + key.trim()] = _value;
              }
              trustContext = {
                command: "\\htmlData",
                attributes
              };
              break;
            }
            default:
              throw new Error("Unrecognized html command");
          }
          if (!parser34.settings.isTrusted(trustContext)) {
            return parser34.formatUnsupportedCmd(funcName);
          }
          return {
            type: "html",
            mode: parser34.mode,
            attributes,
            body: ordargument(body)
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var elements2 = buildExpression$1(group2.body, options2, false);
          var classes3 = ["enclosing"];
          if (group2.attributes.class) {
            classes3.push(...group2.attributes.class.trim().split(/\s+/));
          }
          var span = makeSpan(classes3, elements2, options2);
          for (var attr in group2.attributes) {
            if (attr !== "class" && group2.attributes.hasOwnProperty(attr)) {
              span.setAttribute(attr, group2.attributes[attr]);
            }
          }
          return span;
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          return buildExpressionRow(group2.body, options2);
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "htmlmathml",
        names: ["\\html@mathml"],
        props: {
          numArgs: 2,
          allowedInArgument: true,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34
          } = _ref;
          return {
            type: "htmlmathml",
            mode: parser34.mode,
            html: ordargument(args[0]),
            mathml: ordargument(args[1])
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var elements2 = buildExpression$1(group2.html, options2, false);
          return makeFragment(elements2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          return buildExpressionRow(group2.mathml, options2);
        }, "mathmlBuilder")
      });
      sizeData = /* @__PURE__ */ __name(function sizeData2(str2) {
        if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str2)) {
          return {
            number: +str2,
            unit: "bp"
          };
        } else {
          var match3 = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str2);
          if (!match3) {
            throw new ParseError("Invalid size: '" + str2 + "' in \\includegraphics");
          }
          var data6 = {
            number: +(match3[1] + match3[2]),
            // sign + magnitude, cast to number
            unit: match3[3]
          };
          if (!validUnit(data6)) {
            throw new ParseError("Invalid unit: '" + data6.unit + "' in \\includegraphics.");
          }
          return data6;
        }
      }, "sizeData");
      defineFunction({
        type: "includegraphics",
        names: ["\\includegraphics"],
        props: {
          numArgs: 1,
          numOptionalArgs: 1,
          argTypes: ["raw", "url"],
          allowedInText: false
        },
        handler: /* @__PURE__ */ __name((_ref, args, optArgs) => {
          var {
            parser: parser34
          } = _ref;
          var width3 = {
            number: 0,
            unit: "em"
          };
          var height2 = {
            number: 0.9,
            unit: "em"
          };
          var totalheight = {
            number: 0,
            unit: "em"
          };
          var alt = "";
          if (optArgs[0]) {
            var attributeStr = assertNodeType(optArgs[0], "raw").string;
            var attributes = attributeStr.split(",");
            for (var i2 = 0; i2 < attributes.length; i2++) {
              var keyVal = attributes[i2].split("=");
              if (keyVal.length === 2) {
                var str2 = keyVal[1].trim();
                switch (keyVal[0].trim()) {
                  case "alt":
                    alt = str2;
                    break;
                  case "width":
                    width3 = sizeData(str2);
                    break;
                  case "height":
                    height2 = sizeData(str2);
                    break;
                  case "totalheight":
                    totalheight = sizeData(str2);
                    break;
                  default:
                    throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics.");
                }
              }
            }
          }
          var src = assertNodeType(args[0], "url").url;
          if (alt === "") {
            alt = src;
            alt = alt.replace(/^.*[\\/]/, "");
            alt = alt.substring(0, alt.lastIndexOf("."));
          }
          if (!parser34.settings.isTrusted({
            command: "\\includegraphics",
            url: src
          })) {
            return parser34.formatUnsupportedCmd("\\includegraphics");
          }
          return {
            type: "includegraphics",
            mode: parser34.mode,
            alt,
            width: width3,
            height: height2,
            totalheight,
            src
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var height2 = calculateSize2(group2.height, options2);
          var depth = 0;
          if (group2.totalheight.number > 0) {
            depth = calculateSize2(group2.totalheight, options2) - height2;
          }
          var width3 = 0;
          if (group2.width.number > 0) {
            width3 = calculateSize2(group2.width, options2);
          }
          var style3 = {
            height: makeEm(height2 + depth)
          };
          if (width3 > 0) {
            style3.width = makeEm(width3);
          }
          if (depth > 0) {
            style3.verticalAlign = makeEm(-depth);
          }
          var node2 = new Img(group2.src, group2.alt, style3);
          node2.height = height2;
          node2.depth = depth;
          return node2;
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var node2 = new MathNode("mglyph", []);
          node2.setAttribute("alt", group2.alt);
          var height2 = calculateSize2(group2.height, options2);
          var depth = 0;
          if (group2.totalheight.number > 0) {
            depth = calculateSize2(group2.totalheight, options2) - height2;
            node2.setAttribute("valign", makeEm(-depth));
          }
          node2.setAttribute("height", makeEm(height2 + depth));
          if (group2.width.number > 0) {
            var width3 = calculateSize2(group2.width, options2);
            node2.setAttribute("width", makeEm(width3));
          }
          node2.setAttribute("src", group2.src);
          return node2;
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "kern",
        names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"],
        props: {
          numArgs: 1,
          argTypes: ["size"],
          primitive: true,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var size4 = assertNodeType(args[0], "size");
          if (parser34.settings.strict) {
            var mathFunction = funcName[1] === "m";
            var muUnit = size4.value.unit === "mu";
            if (mathFunction) {
              if (!muUnit) {
                parser34.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size4.value.unit + " units"));
              }
              if (parser34.mode !== "math") {
                parser34.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode");
              }
            } else {
              if (muUnit) {
                parser34.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units");
              }
            }
          }
          return {
            type: "kern",
            mode: parser34.mode,
            dimension: size4.value
          };
        },
        htmlBuilder(group2, options2) {
          return makeGlue(group2.dimension, options2);
        },
        mathmlBuilder(group2, options2) {
          var dimension = calculateSize2(group2.dimension, options2);
          return new SpaceNode(dimension);
        }
      });
      defineFunction({
        type: "lap",
        names: ["\\mathllap", "\\mathrlap", "\\mathclap"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "lap",
            mode: parser34.mode,
            alignment: funcName.slice(5),
            body
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var inner2;
          if (group2.alignment === "clap") {
            inner2 = makeSpan([], [buildGroup$1(group2.body, options2)]);
            inner2 = makeSpan(["inner"], [inner2], options2);
          } else {
            inner2 = makeSpan(["inner"], [buildGroup$1(group2.body, options2)]);
          }
          var fix = makeSpan(["fix"], []);
          var node2 = makeSpan([group2.alignment], [inner2, fix], options2);
          var strut = makeSpan(["strut"]);
          strut.style.height = makeEm(node2.height + node2.depth);
          if (node2.depth) {
            strut.style.verticalAlign = makeEm(-node2.depth);
          }
          node2.children.unshift(strut);
          node2 = makeSpan(["thinbox"], [node2], options2);
          return makeSpan(["mord", "vbox"], [node2], options2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var node2 = new MathNode("mpadded", [buildGroup2(group2.body, options2)]);
          if (group2.alignment !== "rlap") {
            var offset = group2.alignment === "llap" ? "-1" : "-0.5";
            node2.setAttribute("lspace", offset + "width");
          }
          node2.setAttribute("width", "0px");
          return node2;
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "styling",
        names: ["\\(", "$"],
        props: {
          numArgs: 0,
          allowedInText: true,
          allowedInMath: false
        },
        handler(_ref, args) {
          var {
            funcName,
            parser: parser34
          } = _ref;
          var outerMode = parser34.mode;
          parser34.switchMode("math");
          var close2 = funcName === "\\(" ? "\\)" : "$";
          var body = parser34.parseExpression(false, close2);
          parser34.expect(close2);
          parser34.switchMode(outerMode);
          return {
            type: "styling",
            mode: parser34.mode,
            style: "text",
            body
          };
        }
      });
      defineFunction({
        type: "text",
        // Doesn't matter what this is.
        names: ["\\)", "\\]"],
        props: {
          numArgs: 0,
          allowedInText: true,
          allowedInMath: false
        },
        handler(context, args) {
          throw new ParseError("Mismatched " + context.funcName);
        }
      });
      chooseMathStyle = /* @__PURE__ */ __name((group2, options2) => {
        switch (options2.style.size) {
          case Style$1.DISPLAY.size:
            return group2.display;
          case Style$1.TEXT.size:
            return group2.text;
          case Style$1.SCRIPT.size:
            return group2.script;
          case Style$1.SCRIPTSCRIPT.size:
            return group2.scriptscript;
          default:
            return group2.text;
        }
      }, "chooseMathStyle");
      defineFunction({
        type: "mathchoice",
        names: ["\\mathchoice"],
        props: {
          numArgs: 4,
          primitive: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34
          } = _ref;
          return {
            type: "mathchoice",
            mode: parser34.mode,
            display: ordargument(args[0]),
            text: ordargument(args[1]),
            script: ordargument(args[2]),
            scriptscript: ordargument(args[3])
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var body = chooseMathStyle(group2, options2);
          var elements2 = buildExpression$1(body, options2, false);
          return makeFragment(elements2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var body = chooseMathStyle(group2, options2);
          return buildExpressionRow(body, options2);
        }, "mathmlBuilder")
      });
      assembleSupSub = /* @__PURE__ */ __name((base, supGroup, subGroup, options2, style3, slant, baseShift) => {
        base = makeSpan([], [base]);
        var subIsSingleCharacter = subGroup && isCharacterBox(subGroup);
        var sub2;
        var sup2;
        if (supGroup) {
          var elem = buildGroup$1(supGroup, options2.havingStyle(style3.sup()), options2);
          sup2 = {
            elem,
            kern: Math.max(options2.fontMetrics().bigOpSpacing1, options2.fontMetrics().bigOpSpacing3 - elem.depth)
          };
        }
        if (subGroup) {
          var _elem = buildGroup$1(subGroup, options2.havingStyle(style3.sub()), options2);
          sub2 = {
            elem: _elem,
            kern: Math.max(options2.fontMetrics().bigOpSpacing2, options2.fontMetrics().bigOpSpacing4 - _elem.height)
          };
        }
        var finalGroup;
        if (sup2 && sub2) {
          var bottom2 = options2.fontMetrics().bigOpSpacing5 + sub2.elem.height + sub2.elem.depth + sub2.kern + base.depth + baseShift;
          finalGroup = makeVList({
            positionType: "bottom",
            positionData: bottom2,
            children: [{
              type: "kern",
              size: options2.fontMetrics().bigOpSpacing5
            }, {
              type: "elem",
              elem: sub2.elem,
              marginLeft: makeEm(-slant)
            }, {
              type: "kern",
              size: sub2.kern
            }, {
              type: "elem",
              elem: base
            }, {
              type: "kern",
              size: sup2.kern
            }, {
              type: "elem",
              elem: sup2.elem,
              marginLeft: makeEm(slant)
            }, {
              type: "kern",
              size: options2.fontMetrics().bigOpSpacing5
            }]
          });
        } else if (sub2) {
          var top2 = base.height - baseShift;
          finalGroup = makeVList({
            positionType: "top",
            positionData: top2,
            children: [{
              type: "kern",
              size: options2.fontMetrics().bigOpSpacing5
            }, {
              type: "elem",
              elem: sub2.elem,
              marginLeft: makeEm(-slant)
            }, {
              type: "kern",
              size: sub2.kern
            }, {
              type: "elem",
              elem: base
            }]
          });
        } else if (sup2) {
          var _bottom = base.depth + baseShift;
          finalGroup = makeVList({
            positionType: "bottom",
            positionData: _bottom,
            children: [{
              type: "elem",
              elem: base
            }, {
              type: "kern",
              size: sup2.kern
            }, {
              type: "elem",
              elem: sup2.elem,
              marginLeft: makeEm(slant)
            }, {
              type: "kern",
              size: options2.fontMetrics().bigOpSpacing5
            }]
          });
        } else {
          return base;
        }
        var parts = [finalGroup];
        if (sub2 && slant !== 0 && !subIsSingleCharacter) {
          var spacer = makeSpan(["mspace"], [], options2);
          spacer.style.marginRight = makeEm(slant);
          parts.unshift(spacer);
        }
        return makeSpan(["mop", "op-limits"], parts, options2);
      }, "assembleSupSub");
      noSuccessor = /* @__PURE__ */ new Set(["\\smallint"]);
      htmlBuilder$2 = /* @__PURE__ */ __name((grp, options2) => {
        var supGroup;
        var subGroup;
        var hasLimits = false;
        var group2;
        if (grp.type === "supsub") {
          supGroup = grp.sup;
          subGroup = grp.sub;
          group2 = assertNodeType(grp.base, "op");
          hasLimits = true;
        } else {
          group2 = assertNodeType(grp, "op");
        }
        var style3 = options2.style;
        var large = false;
        if (style3.size === Style$1.DISPLAY.size && group2.symbol && !noSuccessor.has(group2.name)) {
          large = true;
        }
        var base;
        if (group2.symbol) {
          var fontName = large ? "Size2-Regular" : "Size1-Regular";
          var stash = "";
          if (group2.name === "\\oiint" || group2.name === "\\oiiint") {
            stash = group2.name.slice(1);
            group2.name = stash === "oiint" ? "\\iint" : "\\iiint";
          }
          base = makeSymbol(group2.name, fontName, "math", options2, ["mop", "op-symbol", large ? "large-op" : "small-op"]);
          if (stash.length > 0) {
            var italic = base.italic;
            var oval = staticSvg(stash + "Size" + (large ? "2" : "1"), options2);
            base = makeVList({
              positionType: "individualShift",
              children: [{
                type: "elem",
                elem: base,
                shift: 0
              }, {
                type: "elem",
                elem: oval,
                shift: large ? 0.08 : 0
              }]
            });
            group2.name = "\\" + stash;
            base.classes.unshift("mop");
            base.italic = italic;
          }
        } else if (group2.body) {
          var inner2 = buildExpression$1(group2.body, options2, true);
          if (inner2.length === 1 && inner2[0] instanceof SymbolNode) {
            base = inner2[0];
            base.classes[0] = "mop";
          } else {
            base = makeSpan(["mop"], inner2, options2);
          }
        } else {
          var output2 = [];
          for (var i2 = 1; i2 < group2.name.length; i2++) {
            output2.push(mathsym(group2.name[i2], group2.mode, options2));
          }
          base = makeSpan(["mop"], output2, options2);
        }
        var baseShift = 0;
        var slant = 0;
        if ((base instanceof SymbolNode || group2.name === "\\oiint" || group2.name === "\\oiiint") && !group2.suppressBaseShift) {
          baseShift = (base.height - base.depth) / 2 - options2.fontMetrics().axisHeight;
          slant = base.italic || 0;
        }
        if (hasLimits) {
          return assembleSupSub(base, supGroup, subGroup, options2, style3, slant, baseShift);
        } else {
          if (baseShift) {
            base.style.position = "relative";
            base.style.top = makeEm(baseShift);
          }
          return base;
        }
      }, "htmlBuilder$2");
      mathmlBuilder$1 = /* @__PURE__ */ __name((group2, options2) => {
        var node2;
        if (group2.symbol) {
          node2 = new MathNode("mo", [makeText(group2.name, group2.mode)]);
          if (noSuccessor.has(group2.name)) {
            node2.setAttribute("largeop", "false");
          }
        } else if (group2.body) {
          node2 = new MathNode("mo", buildExpression2(group2.body, options2));
        } else {
          node2 = new MathNode("mi", [new TextNode(group2.name.slice(1))]);
          var operator = new MathNode("mo", [makeText("\u2061", "text")]);
          if (group2.parentIsSupSub) {
            node2 = new MathNode("mrow", [node2, operator]);
          } else {
            node2 = newDocumentFragment([node2, operator]);
          }
        }
        return node2;
      }, "mathmlBuilder$1");
      singleCharBigOps = {
        "\u220F": "\\prod",
        "\u2210": "\\coprod",
        "\u2211": "\\sum",
        "\u22C0": "\\bigwedge",
        "\u22C1": "\\bigvee",
        "\u22C2": "\\bigcap",
        "\u22C3": "\\bigcup",
        "\u2A00": "\\bigodot",
        "\u2A01": "\\bigoplus",
        "\u2A02": "\\bigotimes",
        "\u2A04": "\\biguplus",
        "\u2A06": "\\bigsqcup"
      };
      defineFunction({
        type: "op",
        names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"],
        props: {
          numArgs: 0
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var fName = funcName;
          if (fName.length === 1) {
            fName = singleCharBigOps[fName];
          }
          return {
            type: "op",
            mode: parser34.mode,
            limits: true,
            parentIsSupSub: false,
            symbol: true,
            name: fName
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$2,
        mathmlBuilder: mathmlBuilder$1
      });
      defineFunction({
        type: "op",
        names: ["\\mathop"],
        props: {
          numArgs: 1,
          primitive: true
        },
        handler: /* @__PURE__ */ __name((_ref2, args) => {
          var {
            parser: parser34
          } = _ref2;
          var body = args[0];
          return {
            type: "op",
            mode: parser34.mode,
            limits: false,
            parentIsSupSub: false,
            symbol: false,
            body: ordargument(body)
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$2,
        mathmlBuilder: mathmlBuilder$1
      });
      singleCharIntegrals = {
        "\u222B": "\\int",
        "\u222C": "\\iint",
        "\u222D": "\\iiint",
        "\u222E": "\\oint",
        "\u222F": "\\oiint",
        "\u2230": "\\oiiint"
      };
      defineFunction({
        type: "op",
        names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"],
        props: {
          numArgs: 0
        },
        handler(_ref3) {
          var {
            parser: parser34,
            funcName
          } = _ref3;
          return {
            type: "op",
            mode: parser34.mode,
            limits: false,
            parentIsSupSub: false,
            symbol: false,
            name: funcName
          };
        },
        htmlBuilder: htmlBuilder$2,
        mathmlBuilder: mathmlBuilder$1
      });
      defineFunction({
        type: "op",
        names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"],
        props: {
          numArgs: 0
        },
        handler(_ref4) {
          var {
            parser: parser34,
            funcName
          } = _ref4;
          return {
            type: "op",
            mode: parser34.mode,
            limits: true,
            parentIsSupSub: false,
            symbol: false,
            name: funcName
          };
        },
        htmlBuilder: htmlBuilder$2,
        mathmlBuilder: mathmlBuilder$1
      });
      defineFunction({
        type: "op",
        names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222B", "\u222C", "\u222D", "\u222E", "\u222F", "\u2230"],
        props: {
          numArgs: 0,
          allowedInArgument: true
        },
        handler(_ref5) {
          var {
            parser: parser34,
            funcName
          } = _ref5;
          var fName = funcName;
          if (fName.length === 1) {
            fName = singleCharIntegrals[fName];
          }
          return {
            type: "op",
            mode: parser34.mode,
            limits: false,
            parentIsSupSub: false,
            symbol: true,
            name: fName
          };
        },
        htmlBuilder: htmlBuilder$2,
        mathmlBuilder: mathmlBuilder$1
      });
      htmlBuilder$1 = /* @__PURE__ */ __name((grp, options2) => {
        var supGroup;
        var subGroup;
        var hasLimits = false;
        var group2;
        if (grp.type === "supsub") {
          supGroup = grp.sup;
          subGroup = grp.sub;
          group2 = assertNodeType(grp.base, "operatorname");
          hasLimits = true;
        } else {
          group2 = assertNodeType(grp, "operatorname");
        }
        var base;
        if (group2.body.length > 0) {
          var body = group2.body.map((child2) => {
            var childText = "text" in child2 ? child2.text : void 0;
            if (typeof childText === "string") {
              return {
                type: "textord",
                mode: child2.mode,
                text: childText
              };
            } else {
              return child2;
            }
          });
          var expression = buildExpression$1(body, options2.withFont("mathrm"), true);
          for (var i2 = 0; i2 < expression.length; i2++) {
            var child = expression[i2];
            if (child instanceof SymbolNode) {
              child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
            }
          }
          base = makeSpan(["mop"], expression, options2);
        } else {
          base = makeSpan(["mop"], [], options2);
        }
        if (hasLimits) {
          return assembleSupSub(base, supGroup, subGroup, options2, options2.style, 0, 0);
        } else {
          return base;
        }
      }, "htmlBuilder$1");
      mathmlBuilder2 = /* @__PURE__ */ __name((group2, options2) => {
        var expression = buildExpression2(group2.body, options2.withFont("mathrm"));
        var isAllString = true;
        for (var i2 = 0; i2 < expression.length; i2++) {
          var node2 = expression[i2];
          if (node2 instanceof SpaceNode) ;
          else if (node2 instanceof MathNode) {
            switch (node2.type) {
              case "mi":
              case "mn":
              case "mspace":
              case "mtext":
                break;
              // Do nothing yet.
              case "mo": {
                var child = node2.children[0];
                if (node2.children.length === 1 && child instanceof TextNode) {
                  child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
                } else {
                  isAllString = false;
                }
                break;
              }
              default:
                isAllString = false;
            }
          } else {
            isAllString = false;
          }
        }
        if (isAllString) {
          var word = expression.map((node3) => node3.toText()).join("");
          expression = [new TextNode(word)];
        }
        var identifier2 = new MathNode("mi", expression);
        identifier2.setAttribute("mathvariant", "normal");
        var operator = new MathNode("mo", [makeText("\u2061", "text")]);
        if (group2.parentIsSupSub) {
          return new MathNode("mrow", [identifier2, operator]);
        } else {
          return newDocumentFragment([identifier2, operator]);
        }
      }, "mathmlBuilder");
      defineFunction({
        type: "operatorname",
        names: ["\\operatorname@", "\\operatornamewithlimits"],
        props: {
          numArgs: 1
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "operatorname",
            mode: parser34.mode,
            body: ordargument(body),
            alwaysHandleSupSub: funcName === "\\operatornamewithlimits",
            limits: false,
            parentIsSupSub: false
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$1,
        mathmlBuilder: mathmlBuilder2
      });
      defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@");
      defineFunctionBuilders({
        type: "ordgroup",
        htmlBuilder(group2, options2) {
          if (group2.semisimple) {
            return makeFragment(buildExpression$1(group2.body, options2, false));
          }
          return makeSpan(["mord"], buildExpression$1(group2.body, options2, true), options2);
        },
        mathmlBuilder(group2, options2) {
          return buildExpressionRow(group2.body, options2, true);
        }
      });
      defineFunction({
        type: "overline",
        names: ["\\overline"],
        props: {
          numArgs: 1
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          var body = args[0];
          return {
            type: "overline",
            mode: parser34.mode,
            body
          };
        },
        htmlBuilder(group2, options2) {
          var innerGroup = buildGroup$1(group2.body, options2.havingCrampedStyle());
          var line2 = makeLineSpan("overline-line", options2);
          var defaultRuleThickness = options2.fontMetrics().defaultRuleThickness;
          var vlist = makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: innerGroup
            }, {
              type: "kern",
              size: 3 * defaultRuleThickness
            }, {
              type: "elem",
              elem: line2
            }, {
              type: "kern",
              size: defaultRuleThickness
            }]
          });
          return makeSpan(["mord", "overline"], [vlist], options2);
        },
        mathmlBuilder(group2, options2) {
          var operator = new MathNode("mo", [new TextNode("\u203E")]);
          operator.setAttribute("stretchy", "true");
          var node2 = new MathNode("mover", [buildGroup2(group2.body, options2), operator]);
          node2.setAttribute("accent", "true");
          return node2;
        }
      });
      defineFunction({
        type: "phantom",
        names: ["\\phantom"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser34
          } = _ref;
          var body = args[0];
          return {
            type: "phantom",
            mode: parser34.mode,
            body: ordargument(body)
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var elements2 = buildExpression$1(group2.body, options2.withPhantom(), false);
          return makeFragment(elements2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var inner2 = buildExpression2(group2.body, options2);
          return new MathNode("mphantom", inner2);
        }, "mathmlBuilder")
      });
      defineMacro("\\hphantom", "\\smash{\\phantom{#1}}");
      defineFunction({
        type: "vphantom",
        names: ["\\vphantom"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref2, args) => {
          var {
            parser: parser34
          } = _ref2;
          var body = args[0];
          return {
            type: "vphantom",
            mode: parser34.mode,
            body
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var inner2 = makeSpan(["inner"], [buildGroup$1(group2.body, options2.withPhantom())]);
          var fix = makeSpan(["fix"], []);
          return makeSpan(["mord", "rlap"], [inner2, fix], options2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var inner2 = buildExpression2(ordargument(group2.body), options2);
          var phantom = new MathNode("mphantom", inner2);
          var node2 = new MathNode("mpadded", [phantom]);
          node2.setAttribute("width", "0px");
          return node2;
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "raisebox",
        names: ["\\raisebox"],
        props: {
          numArgs: 2,
          argTypes: ["size", "hbox"],
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          var amount = assertNodeType(args[0], "size").value;
          var body = args[1];
          return {
            type: "raisebox",
            mode: parser34.mode,
            dy: amount,
            body
          };
        },
        htmlBuilder(group2, options2) {
          var body = buildGroup$1(group2.body, options2);
          var dy = calculateSize2(group2.dy, options2);
          return makeVList({
            positionType: "shift",
            positionData: -dy,
            children: [{
              type: "elem",
              elem: body
            }]
          });
        },
        mathmlBuilder(group2, options2) {
          var node2 = new MathNode("mpadded", [buildGroup2(group2.body, options2)]);
          var dy = group2.dy.number + group2.dy.unit;
          node2.setAttribute("voffset", dy);
          return node2;
        }
      });
      defineFunction({
        type: "internal",
        names: ["\\relax"],
        props: {
          numArgs: 0,
          allowedInText: true,
          allowedInArgument: true
        },
        handler(_ref) {
          var {
            parser: parser34
          } = _ref;
          return {
            type: "internal",
            mode: parser34.mode
          };
        }
      });
      defineFunction({
        type: "rule",
        names: ["\\rule"],
        props: {
          numArgs: 2,
          numOptionalArgs: 1,
          allowedInText: true,
          allowedInMath: true,
          argTypes: ["size", "size", "size"]
        },
        handler(_ref, args, optArgs) {
          var {
            parser: parser34
          } = _ref;
          var shift2 = optArgs[0];
          var width3 = assertNodeType(args[0], "size");
          var height2 = assertNodeType(args[1], "size");
          return {
            type: "rule",
            mode: parser34.mode,
            shift: shift2 && assertNodeType(shift2, "size").value,
            width: width3.value,
            height: height2.value
          };
        },
        htmlBuilder(group2, options2) {
          var rule = makeSpan(["mord", "rule"], [], options2);
          var width3 = calculateSize2(group2.width, options2);
          var height2 = calculateSize2(group2.height, options2);
          var shift2 = group2.shift ? calculateSize2(group2.shift, options2) : 0;
          rule.style.borderRightWidth = makeEm(width3);
          rule.style.borderTopWidth = makeEm(height2);
          rule.style.bottom = makeEm(shift2);
          rule.width = width3;
          rule.height = height2 + shift2;
          rule.depth = -shift2;
          rule.maxFontSize = height2 * 1.125 * options2.sizeMultiplier;
          return rule;
        },
        mathmlBuilder(group2, options2) {
          var width3 = calculateSize2(group2.width, options2);
          var height2 = calculateSize2(group2.height, options2);
          var shift2 = group2.shift ? calculateSize2(group2.shift, options2) : 0;
          var color2 = options2.color && options2.getColor() || "black";
          var rule = new MathNode("mspace");
          rule.setAttribute("mathbackground", color2);
          rule.setAttribute("width", makeEm(width3));
          rule.setAttribute("height", makeEm(height2));
          var wrapper = new MathNode("mpadded", [rule]);
          if (shift2 >= 0) {
            wrapper.setAttribute("height", makeEm(shift2));
          } else {
            wrapper.setAttribute("height", makeEm(shift2));
            wrapper.setAttribute("depth", makeEm(-shift2));
          }
          wrapper.setAttribute("voffset", makeEm(shift2));
          return wrapper;
        }
      });
      __name(sizingGroup, "sizingGroup");
      sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
      htmlBuilder2 = /* @__PURE__ */ __name((group2, options2) => {
        var newOptions = options2.havingSize(group2.size);
        return sizingGroup(group2.body, newOptions, options2);
      }, "htmlBuilder");
      defineFunction({
        type: "sizing",
        names: sizeFuncs,
        props: {
          numArgs: 0,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            breakOnTokenText,
            funcName,
            parser: parser34
          } = _ref;
          var body = parser34.parseExpression(false, breakOnTokenText);
          return {
            type: "sizing",
            mode: parser34.mode,
            // Figure out what size to use based on the list of functions above
            size: sizeFuncs.indexOf(funcName) + 1,
            body
          };
        }, "handler"),
        htmlBuilder: htmlBuilder2,
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var newOptions = options2.havingSize(group2.size);
          var inner2 = buildExpression2(group2.body, newOptions);
          var node2 = new MathNode("mstyle", inner2);
          node2.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier));
          return node2;
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "smash",
        names: ["\\smash"],
        props: {
          numArgs: 1,
          numOptionalArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args, optArgs) => {
          var {
            parser: parser34
          } = _ref;
          var smashHeight = false;
          var smashDepth = false;
          var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup");
          if (tbArg) {
            var letter = "";
            for (var i2 = 0; i2 < tbArg.body.length; ++i2) {
              var node2 = tbArg.body[i2];
              letter = assertSymbolNodeType(node2).text;
              if (letter === "t") {
                smashHeight = true;
              } else if (letter === "b") {
                smashDepth = true;
              } else {
                smashHeight = false;
                smashDepth = false;
                break;
              }
            }
          } else {
            smashHeight = true;
            smashDepth = true;
          }
          var body = args[0];
          return {
            type: "smash",
            mode: parser34.mode,
            body,
            smashHeight,
            smashDepth
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var node2 = makeSpan([], [buildGroup$1(group2.body, options2)]);
          if (!group2.smashHeight && !group2.smashDepth) {
            return node2;
          }
          if (group2.smashHeight) {
            node2.height = 0;
          }
          if (group2.smashDepth) {
            node2.depth = 0;
          }
          if (group2.smashHeight && group2.smashDepth) {
            return makeSpan(["mord", "smash"], [node2], options2);
          }
          if (node2.children) {
            for (var i2 = 0; i2 < node2.children.length; i2++) {
              if (group2.smashHeight) {
                node2.children[i2].height = 0;
              }
              if (group2.smashDepth) {
                node2.children[i2].depth = 0;
              }
            }
          }
          var smashedNode = makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: node2
            }]
          });
          return makeSpan(["mord"], [smashedNode], options2);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options2) => {
          var node2 = new MathNode("mpadded", [buildGroup2(group2.body, options2)]);
          if (group2.smashHeight) {
            node2.setAttribute("height", "0px");
          }
          if (group2.smashDepth) {
            node2.setAttribute("depth", "0px");
          }
          return node2;
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "sqrt",
        names: ["\\sqrt"],
        props: {
          numArgs: 1,
          numOptionalArgs: 1
        },
        handler(_ref, args, optArgs) {
          var {
            parser: parser34
          } = _ref;
          var index = optArgs[0];
          var body = args[0];
          return {
            type: "sqrt",
            mode: parser34.mode,
            body,
            index
          };
        },
        htmlBuilder(group2, options2) {
          var inner2 = buildGroup$1(group2.body, options2.havingCrampedStyle());
          if (inner2.height === 0) {
            inner2.height = options2.fontMetrics().xHeight;
          }
          inner2 = wrapFragment(inner2, options2);
          var metrics = options2.fontMetrics();
          var theta = metrics.defaultRuleThickness;
          var phi2 = theta;
          if (options2.style.id < Style$1.TEXT.id) {
            phi2 = options2.fontMetrics().xHeight;
          }
          var lineClearance = theta + phi2 / 4;
          var minDelimiterHeight = inner2.height + inner2.depth + lineClearance + theta;
          var {
            span: img,
            ruleWidth,
            advanceWidth
          } = makeSqrtImage(minDelimiterHeight, options2);
          var delimDepth = img.height - ruleWidth;
          if (delimDepth > inner2.height + inner2.depth + lineClearance) {
            lineClearance = (lineClearance + delimDepth - inner2.height - inner2.depth) / 2;
          }
          var imgShift = img.height - inner2.height - lineClearance - ruleWidth;
          inner2.style.paddingLeft = makeEm(advanceWidth);
          var body = makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: inner2,
              wrapperClasses: ["svg-align"]
            }, {
              type: "kern",
              size: -(inner2.height + imgShift)
            }, {
              type: "elem",
              elem: img
            }, {
              type: "kern",
              size: ruleWidth
            }]
          });
          if (!group2.index) {
            return makeSpan(["mord", "sqrt"], [body], options2);
          } else {
            var newOptions = options2.havingStyle(Style$1.SCRIPTSCRIPT);
            var rootm = buildGroup$1(group2.index, newOptions, options2);
            var toShift = 0.6 * (body.height - body.depth);
            var rootVList = makeVList({
              positionType: "shift",
              positionData: -toShift,
              children: [{
                type: "elem",
                elem: rootm
              }]
            });
            var rootVListWrap = makeSpan(["root"], [rootVList]);
            return makeSpan(["mord", "sqrt"], [rootVListWrap, body], options2);
          }
        },
        mathmlBuilder(group2, options2) {
          var {
            body,
            index
          } = group2;
          return index ? new MathNode("mroot", [buildGroup2(body, options2), buildGroup2(index, options2)]) : new MathNode("msqrt", [buildGroup2(body, options2)]);
        }
      });
      styleMap = {
        "display": Style$1.DISPLAY,
        "text": Style$1.TEXT,
        "script": Style$1.SCRIPT,
        "scriptscript": Style$1.SCRIPTSCRIPT
      };
      defineFunction({
        type: "styling",
        names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"],
        props: {
          numArgs: 0,
          allowedInText: true,
          primitive: true
        },
        handler(_ref, args) {
          var {
            breakOnTokenText,
            funcName,
            parser: parser34
          } = _ref;
          var body = parser34.parseExpression(true, breakOnTokenText);
          var style3 = funcName.slice(1, funcName.length - 5);
          return {
            type: "styling",
            mode: parser34.mode,
            // Figure out what style to use by pulling out the style from
            // the function name
            style: style3,
            body
          };
        },
        htmlBuilder(group2, options2) {
          var newStyle = styleMap[group2.style];
          var newOptions = options2.havingStyle(newStyle).withFont("");
          return sizingGroup(group2.body, newOptions, options2);
        },
        mathmlBuilder(group2, options2) {
          var newStyle = styleMap[group2.style];
          var newOptions = options2.havingStyle(newStyle);
          var inner2 = buildExpression2(group2.body, newOptions);
          var node2 = new MathNode("mstyle", inner2);
          var styleAttributes = {
            "display": ["0", "true"],
            "text": ["0", "false"],
            "script": ["1", "false"],
            "scriptscript": ["2", "false"]
          };
          var attr = styleAttributes[group2.style];
          node2.setAttribute("scriptlevel", attr[0]);
          node2.setAttribute("displaystyle", attr[1]);
          return node2;
        }
      });
      htmlBuilderDelegate = /* @__PURE__ */ __name(function htmlBuilderDelegate2(group2, options2) {
        var base = group2.base;
        if (!base) {
          return null;
        } else if (base.type === "op") {
          var delegate = base.limits && (options2.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);
          return delegate ? htmlBuilder$2 : null;
        } else if (base.type === "operatorname") {
          var _delegate = base.alwaysHandleSupSub && (options2.style.size === Style$1.DISPLAY.size || base.limits);
          return _delegate ? htmlBuilder$1 : null;
        } else if (base.type === "accent") {
          return isCharacterBox(base.base) ? htmlBuilder$a : null;
        } else if (base.type === "horizBrace") {
          var isSup = !group2.sub;
          return isSup === base.isOver ? htmlBuilder$3 : null;
        } else {
          return null;
        }
      }, "htmlBuilderDelegate");
      defineFunctionBuilders({
        type: "supsub",
        htmlBuilder(group2, options2) {
          var builderDelegate = htmlBuilderDelegate(group2, options2);
          if (builderDelegate) {
            return builderDelegate(group2, options2);
          }
          var {
            base: valueBase,
            sup: valueSup,
            sub: valueSub
          } = group2;
          var base = buildGroup$1(valueBase, options2);
          var supm;
          var subm;
          var metrics = options2.fontMetrics();
          var supShift = 0;
          var subShift = 0;
          var isCharBox = valueBase && isCharacterBox(valueBase);
          if (valueSup) {
            var newOptions = options2.havingStyle(options2.style.sup());
            supm = buildGroup$1(valueSup, newOptions, options2);
            if (!isCharBox) {
              supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options2.sizeMultiplier;
            }
          }
          if (valueSub) {
            var _newOptions = options2.havingStyle(options2.style.sub());
            subm = buildGroup$1(valueSub, _newOptions, options2);
            if (!isCharBox) {
              subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options2.sizeMultiplier;
            }
          }
          var minSupShift;
          if (options2.style === Style$1.DISPLAY) {
            minSupShift = metrics.sup1;
          } else if (options2.style.cramped) {
            minSupShift = metrics.sup3;
          } else {
            minSupShift = metrics.sup2;
          }
          var multiplier = options2.sizeMultiplier;
          var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);
          var marginLeft = null;
          if (subm) {
            var isOiint = group2.base && group2.base.type === "op" && group2.base.name && (group2.base.name === "\\oiint" || group2.base.name === "\\oiiint");
            if (base instanceof SymbolNode || isOiint) {
              marginLeft = makeEm(-base.italic);
            }
          }
          var supsub;
          if (supm && subm) {
            supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
            subShift = Math.max(subShift, metrics.sub2);
            var ruleWidth = metrics.defaultRuleThickness;
            var maxWidth2 = 4 * ruleWidth;
            if (supShift - supm.depth - (subm.height - subShift) < maxWidth2) {
              subShift = maxWidth2 - (supShift - supm.depth) + subm.height;
              var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);
              if (psi > 0) {
                supShift += psi;
                subShift -= psi;
              }
            }
            var vlistElem = [{
              type: "elem",
              elem: subm,
              shift: subShift,
              marginRight,
              marginLeft
            }, {
              type: "elem",
              elem: supm,
              shift: -supShift,
              marginRight
            }];
            supsub = makeVList({
              positionType: "individualShift",
              children: vlistElem
            });
          } else if (subm) {
            subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
            var _vlistElem = [{
              type: "elem",
              elem: subm,
              marginLeft,
              marginRight
            }];
            supsub = makeVList({
              positionType: "shift",
              positionData: subShift,
              children: _vlistElem
            });
          } else if (supm) {
            supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
            supsub = makeVList({
              positionType: "shift",
              positionData: -supShift,
              children: [{
                type: "elem",
                elem: supm,
                marginRight
              }]
            });
          } else {
            throw new Error("supsub must have either sup or sub.");
          }
          var mclass = getTypeOfDomTree(base, "right") || "mord";
          return makeSpan([mclass], [base, makeSpan(["msupsub"], [supsub])], options2);
        },
        mathmlBuilder(group2, options2) {
          var isBrace = false;
          var isOver;
          var isSup;
          if (group2.base && group2.base.type === "horizBrace") {
            isSup = !!group2.sup;
            if (isSup === group2.base.isOver) {
              isBrace = true;
              isOver = group2.base.isOver;
            }
          }
          if (group2.base && (group2.base.type === "op" || group2.base.type === "operatorname")) {
            group2.base.parentIsSupSub = true;
          }
          var children2 = [buildGroup2(group2.base, options2)];
          if (group2.sub) {
            children2.push(buildGroup2(group2.sub, options2));
          }
          if (group2.sup) {
            children2.push(buildGroup2(group2.sup, options2));
          }
          var nodeType3;
          if (isBrace) {
            nodeType3 = isOver ? "mover" : "munder";
          } else if (!group2.sub) {
            var base = group2.base;
            if (base && base.type === "op" && base.limits && (options2.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {
              nodeType3 = "mover";
            } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options2.style === Style$1.DISPLAY)) {
              nodeType3 = "mover";
            } else {
              nodeType3 = "msup";
            }
          } else if (!group2.sup) {
            var _base = group2.base;
            if (_base && _base.type === "op" && _base.limits && (options2.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {
              nodeType3 = "munder";
            } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options2.style === Style$1.DISPLAY)) {
              nodeType3 = "munder";
            } else {
              nodeType3 = "msub";
            }
          } else {
            var _base2 = group2.base;
            if (_base2 && _base2.type === "op" && _base2.limits && options2.style === Style$1.DISPLAY) {
              nodeType3 = "munderover";
            } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options2.style === Style$1.DISPLAY || _base2.limits)) {
              nodeType3 = "munderover";
            } else {
              nodeType3 = "msubsup";
            }
          }
          return new MathNode(nodeType3, children2);
        }
      });
      defineFunctionBuilders({
        type: "atom",
        htmlBuilder(group2, options2) {
          return mathsym(group2.text, group2.mode, options2, ["m" + group2.family]);
        },
        mathmlBuilder(group2, options2) {
          var node2 = new MathNode("mo", [makeText(group2.text, group2.mode)]);
          if (group2.family === "bin") {
            var variant = getVariant(group2, options2);
            if (variant === "bold-italic") {
              node2.setAttribute("mathvariant", variant);
            }
          } else if (group2.family === "punct") {
            node2.setAttribute("separator", "true");
          } else if (group2.family === "open" || group2.family === "close") {
            node2.setAttribute("stretchy", "false");
          }
          return node2;
        }
      });
      defaultVariant = {
        "mi": "italic",
        "mn": "normal",
        "mtext": "normal"
      };
      defineFunctionBuilders({
        type: "mathord",
        htmlBuilder(group2, options2) {
          return makeOrd(group2, options2, "mathord");
        },
        mathmlBuilder(group2, options2) {
          var node2 = new MathNode("mi", [makeText(group2.text, group2.mode, options2)]);
          var variant = getVariant(group2, options2) || "italic";
          if (variant !== defaultVariant[node2.type]) {
            node2.setAttribute("mathvariant", variant);
          }
          return node2;
        }
      });
      defineFunctionBuilders({
        type: "textord",
        htmlBuilder(group2, options2) {
          return makeOrd(group2, options2, "textord");
        },
        mathmlBuilder(group2, options2) {
          var text4 = makeText(group2.text, group2.mode, options2);
          var variant = getVariant(group2, options2) || "normal";
          var node2;
          if (group2.mode === "text") {
            node2 = new MathNode("mtext", [text4]);
          } else if (/[0-9]/.test(group2.text)) {
            node2 = new MathNode("mn", [text4]);
          } else if (group2.text === "\\prime") {
            node2 = new MathNode("mo", [text4]);
          } else {
            node2 = new MathNode("mi", [text4]);
          }
          if (variant !== defaultVariant[node2.type]) {
            node2.setAttribute("mathvariant", variant);
          }
          return node2;
        }
      });
      cssSpace = {
        "\\nobreak": "nobreak",
        "\\allowbreak": "allowbreak"
      };
      regularSpace = {
        " ": {},
        "\\ ": {},
        "~": {
          className: "nobreak"
        },
        "\\space": {},
        "\\nobreakspace": {
          className: "nobreak"
        }
      };
      defineFunctionBuilders({
        type: "spacing",
        htmlBuilder(group2, options2) {
          if (regularSpace.hasOwnProperty(group2.text)) {
            var className = regularSpace[group2.text].className || "";
            if (group2.mode === "text") {
              var ord = makeOrd(group2, options2, "textord");
              ord.classes.push(className);
              return ord;
            } else {
              return makeSpan(["mspace", className], [mathsym(group2.text, group2.mode, options2)], options2);
            }
          } else if (cssSpace.hasOwnProperty(group2.text)) {
            return makeSpan(["mspace", cssSpace[group2.text]], [], options2);
          } else {
            throw new ParseError('Unknown type of space "' + group2.text + '"');
          }
        },
        mathmlBuilder(group2, options2) {
          var node2;
          if (regularSpace.hasOwnProperty(group2.text)) {
            node2 = new MathNode("mtext", [new TextNode("\xA0")]);
          } else if (cssSpace.hasOwnProperty(group2.text)) {
            return new MathNode("mspace");
          } else {
            throw new ParseError('Unknown type of space "' + group2.text + '"');
          }
          return node2;
        }
      });
      pad = /* @__PURE__ */ __name(() => {
        var padNode = new MathNode("mtd", []);
        padNode.setAttribute("width", "50%");
        return padNode;
      }, "pad");
      defineFunctionBuilders({
        type: "tag",
        mathmlBuilder(group2, options2) {
          var table = new MathNode("mtable", [new MathNode("mtr", [pad(), new MathNode("mtd", [buildExpressionRow(group2.body, options2)]), pad(), new MathNode("mtd", [buildExpressionRow(group2.tag, options2)])])]);
          table.setAttribute("width", "100%");
          return table;
        }
      });
      textFontFamilies = {
        "\\text": void 0,
        "\\textrm": "textrm",
        "\\textsf": "textsf",
        "\\texttt": "texttt",
        "\\textnormal": "textrm"
      };
      textFontWeights = {
        "\\textbf": "textbf",
        "\\textmd": "textmd"
      };
      textFontShapes = {
        "\\textit": "textit",
        "\\textup": "textup"
      };
      optionsWithFont = /* @__PURE__ */ __name((group2, options2) => {
        var font = group2.font;
        if (!font) {
          return options2;
        } else if (textFontFamilies[font]) {
          return options2.withTextFontFamily(textFontFamilies[font]);
        } else if (textFontWeights[font]) {
          return options2.withTextFontWeight(textFontWeights[font]);
        } else if (font === "\\emph") {
          return options2.fontShape === "textit" ? options2.withTextFontShape("textup") : options2.withTextFontShape("textit");
        }
        return options2.withTextFontShape(textFontShapes[font]);
      }, "optionsWithFont");
      defineFunction({
        type: "text",
        names: [
          // Font families
          "\\text",
          "\\textrm",
          "\\textsf",
          "\\texttt",
          "\\textnormal",
          // Font weights
          "\\textbf",
          "\\textmd",
          // Font Shapes
          "\\textit",
          "\\textup",
          "\\emph"
        ],
        props: {
          numArgs: 1,
          argTypes: ["text"],
          allowedInArgument: true,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser34,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "text",
            mode: parser34.mode,
            body: ordargument(body),
            font: funcName
          };
        },
        htmlBuilder(group2, options2) {
          var newOptions = optionsWithFont(group2, options2);
          var inner2 = buildExpression$1(group2.body, newOptions, true);
          return makeSpan(["mord", "text"], inner2, newOptions);
        },
        mathmlBuilder(group2, options2) {
          var newOptions = optionsWithFont(group2, options2);
          return buildExpressionRow(group2.body, newOptions);
        }
      });
      defineFunction({
        type: "underline",
        names: ["\\underline"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          return {
            type: "underline",
            mode: parser34.mode,
            body: args[0]
          };
        },
        htmlBuilder(group2, options2) {
          var innerGroup = buildGroup$1(group2.body, options2);
          var line2 = makeLineSpan("underline-line", options2);
          var defaultRuleThickness = options2.fontMetrics().defaultRuleThickness;
          var vlist = makeVList({
            positionType: "top",
            positionData: innerGroup.height,
            children: [{
              type: "kern",
              size: defaultRuleThickness
            }, {
              type: "elem",
              elem: line2
            }, {
              type: "kern",
              size: 3 * defaultRuleThickness
            }, {
              type: "elem",
              elem: innerGroup
            }]
          });
          return makeSpan(["mord", "underline"], [vlist], options2);
        },
        mathmlBuilder(group2, options2) {
          var operator = new MathNode("mo", [new TextNode("\u203E")]);
          operator.setAttribute("stretchy", "true");
          var node2 = new MathNode("munder", [buildGroup2(group2.body, options2), operator]);
          node2.setAttribute("accentunder", "true");
          return node2;
        }
      });
      defineFunction({
        type: "vcenter",
        names: ["\\vcenter"],
        props: {
          numArgs: 1,
          argTypes: ["original"],
          // In LaTeX, \vcenter can act only on a box.
          allowedInText: false
        },
        handler(_ref, args) {
          var {
            parser: parser34
          } = _ref;
          return {
            type: "vcenter",
            mode: parser34.mode,
            body: args[0]
          };
        },
        htmlBuilder(group2, options2) {
          var body = buildGroup$1(group2.body, options2);
          var axisHeight = options2.fontMetrics().axisHeight;
          var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));
          return makeVList({
            positionType: "shift",
            positionData: dy,
            children: [{
              type: "elem",
              elem: body
            }]
          });
        },
        mathmlBuilder(group2, options2) {
          var mpadded = new MathNode("mpadded", [buildGroup2(group2.body, options2)], ["vcenter"]);
          return new MathNode("mrow", [mpadded]);
        }
      });
      defineFunction({
        type: "verb",
        names: ["\\verb"],
        props: {
          numArgs: 0,
          allowedInText: true
        },
        handler(context, args, optArgs) {
          throw new ParseError("\\verb ended by end of line instead of matching delimiter");
        },
        htmlBuilder(group2, options2) {
          var text4 = makeVerb(group2);
          var body = [];
          var newOptions = options2.havingStyle(options2.style.text());
          for (var i2 = 0; i2 < text4.length; i2++) {
            var c3 = text4[i2];
            if (c3 === "~") {
              c3 = "\\textasciitilde";
            }
            body.push(makeSymbol(c3, "Typewriter-Regular", group2.mode, newOptions, ["mord", "texttt"]));
          }
          return makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options2)), tryCombineChars(body), newOptions);
        },
        mathmlBuilder(group2, options2) {
          var text4 = new TextNode(makeVerb(group2));
          var node2 = new MathNode("mtext", [text4]);
          node2.setAttribute("mathvariant", "monospace");
          return node2;
        }
      });
      makeVerb = /* @__PURE__ */ __name((group2) => group2.body.replace(/ /g, group2.star ? "\u2423" : "\xA0"), "makeVerb");
      functions = _functions;
      spaceRegexString = "[ \r\n	]";
      controlWordRegexString = "\\\\[a-zA-Z@]+";
      controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]";
      controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*";
      controlSpaceRegexString = "\\\\(\n|[ \r	]+\n?)[ \r	]*";
      combiningDiacriticalMarkString = "[\u0300-\u036F]";
      combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$");
      tokenRegexString = "(" + spaceRegexString + "+)|" + // whitespace
      (controlSpaceRegexString + "|") + // \whitespace
      "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
      (combiningDiacriticalMarkString + "*") + // ...plus accents
      "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
      (combiningDiacriticalMarkString + "*") + // ...plus accents
      "|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5" + // \verb unstarred
      ("|" + controlWordWhitespaceRegexString) + // \macroName + spaces
      ("|" + controlSymbolRegexString + ")");
      Lexer = class {
        static {
          __name(this, "Lexer");
        }
        // Category codes. The lexer only supports comment characters (14) for now.
        // MacroExpander additionally distinguishes active (13).
        constructor(input, settings) {
          this.input = input;
          this.settings = settings;
          this.tokenRegex = new RegExp(tokenRegexString, "g");
          this.catcodes = {
            "%": 14,
            // comment character
            "~": 13
            // active character
          };
        }
        setCatcode(char2, code) {
          this.catcodes[char2] = code;
        }
        /**
         * This function lexes a single token.
         */
        lex() {
          var input = this.input;
          var pos = this.tokenRegex.lastIndex;
          if (pos === input.length) {
            return new Token("EOF", new SourceLocation(this, pos, pos));
          }
          var match3 = this.tokenRegex.exec(input);
          if (match3 === null || match3.index !== pos) {
            throw new ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));
          }
          var text4 = match3[6] || match3[3] || (match3[2] ? "\\ " : " ");
          if (this.catcodes[text4] === 14) {
            var nlIndex = input.indexOf("\n", this.tokenRegex.lastIndex);
            if (nlIndex === -1) {
              this.tokenRegex.lastIndex = input.length;
              this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)");
            } else {
              this.tokenRegex.lastIndex = nlIndex + 1;
            }
            return this.lex();
          }
          return new Token(text4, new SourceLocation(this, pos, this.tokenRegex.lastIndex));
        }
      };
      Namespace = class {
        static {
          __name(this, "Namespace");
        }
        /**
         * Both arguments are optional.  The first argument is an object of
         * built-in mappings which never change.  The second argument is an object
         * of initial (global-level) mappings, which will constantly change
         * according to any global/top-level `set`s done.
         */
        constructor(builtins, globalMacros) {
          if (builtins === void 0) {
            builtins = {};
          }
          if (globalMacros === void 0) {
            globalMacros = {};
          }
          this.current = globalMacros;
          this.builtins = builtins;
          this.undefStack = [];
        }
        /**
         * Start a new nested group, affecting future local `set`s.
         */
        beginGroup() {
          this.undefStack.push({});
        }
        /**
         * End current nested group, restoring values before the group began.
         */
        endGroup() {
          if (this.undefStack.length === 0) {
            throw new ParseError("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");
          }
          var undefs = this.undefStack.pop();
          for (var undef2 in undefs) {
            if (undefs.hasOwnProperty(undef2)) {
              if (undefs[undef2] == null) {
                delete this.current[undef2];
              } else {
                this.current[undef2] = undefs[undef2];
              }
            }
          }
        }
        /**
         * Ends all currently nested groups (if any), restoring values before the
         * groups began.  Useful in case of an error in the middle of parsing.
         */
        endGroups() {
          while (this.undefStack.length > 0) {
            this.endGroup();
          }
        }
        /**
         * Detect whether `name` has a definition.  Equivalent to
         * `get(name) != null`.
         */
        has(name) {
          return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);
        }
        /**
         * Get the current value of a name, or `undefined` if there is no value.
         *
         * Note: Do not use `if (namespace.get(...))` to detect whether a macro
         * is defined, as the definition may be the empty string which evaluates
         * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or
         * `if (namespace.has(...))`.
         */
        get(name) {
          if (this.current.hasOwnProperty(name)) {
            return this.current[name];
          } else {
            return this.builtins[name];
          }
        }
        /**
         * Set the current value of a name, and optionally set it globally too.
         * Local set() sets the current value and (when appropriate) adds an undo
         * operation to the undo stack.  Global set() may change the undo
         * operation at every level, so takes time linear in their number.
         * A value of undefined means to delete existing definitions.
         */
        set(name, value2, global2) {
          if (global2 === void 0) {
            global2 = false;
          }
          if (global2) {
            for (var i2 = 0; i2 < this.undefStack.length; i2++) {
              delete this.undefStack[i2][name];
            }
            if (this.undefStack.length > 0) {
              this.undefStack[this.undefStack.length - 1][name] = value2;
            }
          } else {
            var top2 = this.undefStack[this.undefStack.length - 1];
            if (top2 && !top2.hasOwnProperty(name)) {
              top2[name] = this.current[name];
            }
          }
          if (value2 == null) {
            delete this.current[name];
          } else {
            this.current[name] = value2;
          }
        }
      };
      macros = _macros;
      defineMacro("\\noexpand", function(context) {
        var t4 = context.popToken();
        if (context.isExpandable(t4.text)) {
          t4.noexpand = true;
          t4.treatAsRelax = true;
        }
        return {
          tokens: [t4],
          numArgs: 0
        };
      });
      defineMacro("\\expandafter", function(context) {
        var t4 = context.popToken();
        context.expandOnce(true);
        return {
          tokens: [t4],
          numArgs: 0
        };
      });
      defineMacro("\\@firstoftwo", function(context) {
        var args = context.consumeArgs(2);
        return {
          tokens: args[0],
          numArgs: 0
        };
      });
      defineMacro("\\@secondoftwo", function(context) {
        var args = context.consumeArgs(2);
        return {
          tokens: args[1],
          numArgs: 0
        };
      });
      defineMacro("\\@ifnextchar", function(context) {
        var args = context.consumeArgs(3);
        context.consumeSpaces();
        var nextToken = context.future();
        if (args[0].length === 1 && args[0][0].text === nextToken.text) {
          return {
            tokens: args[1],
            numArgs: 0
          };
        } else {
          return {
            tokens: args[2],
            numArgs: 0
          };
        }
      });
      defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}");
      defineMacro("\\TextOrMath", function(context) {
        var args = context.consumeArgs(2);
        if (context.mode === "text") {
          return {
            tokens: args[0],
            numArgs: 0
          };
        } else {
          return {
            tokens: args[1],
            numArgs: 0
          };
        }
      });
      digitToNumber = {
        "0": 0,
        "1": 1,
        "2": 2,
        "3": 3,
        "4": 4,
        "5": 5,
        "6": 6,
        "7": 7,
        "8": 8,
        "9": 9,
        "a": 10,
        "A": 10,
        "b": 11,
        "B": 11,
        "c": 12,
        "C": 12,
        "d": 13,
        "D": 13,
        "e": 14,
        "E": 14,
        "f": 15,
        "F": 15
      };
      defineMacro("\\char", function(context) {
        var token2 = context.popToken();
        var base;
        var number7 = 0;
        if (token2.text === "'") {
          base = 8;
          token2 = context.popToken();
        } else if (token2.text === '"') {
          base = 16;
          token2 = context.popToken();
        } else if (token2.text === "`") {
          token2 = context.popToken();
          if (token2.text[0] === "\\") {
            number7 = token2.text.charCodeAt(1);
          } else if (token2.text === "EOF") {
            throw new ParseError("\\char` missing argument");
          } else {
            number7 = token2.text.charCodeAt(0);
          }
        } else {
          base = 10;
        }
        if (base) {
          number7 = digitToNumber[token2.text];
          if (number7 == null || number7 >= base) {
            throw new ParseError("Invalid base-" + base + " digit " + token2.text);
          }
          var digit;
          while ((digit = digitToNumber[context.future().text]) != null && digit < base) {
            number7 *= base;
            number7 += digit;
            context.popToken();
          }
        }
        return "\\@char{" + number7 + "}";
      });
      newcommand = /* @__PURE__ */ __name((context, existsOK, nonexistsOK, skipIfExists) => {
        var arg = context.consumeArg().tokens;
        if (arg.length !== 1) {
          throw new ParseError("\\newcommand's first argument must be a macro name");
        }
        var name = arg[0].text;
        var exists = context.isDefined(name);
        if (exists && !existsOK) {
          throw new ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand"));
        }
        if (!exists && !nonexistsOK) {
          throw new ParseError("\\renewcommand{" + name + "} when command " + name + " does not yet exist; use \\newcommand");
        }
        var numArgs = 0;
        arg = context.consumeArg().tokens;
        if (arg.length === 1 && arg[0].text === "[") {
          var argText = "";
          var token2 = context.expandNextToken();
          while (token2.text !== "]" && token2.text !== "EOF") {
            argText += token2.text;
            token2 = context.expandNextToken();
          }
          if (!argText.match(/^\s*[0-9]+\s*$/)) {
            throw new ParseError("Invalid number of arguments: " + argText);
          }
          numArgs = parseInt(argText);
          arg = context.consumeArg().tokens;
        }
        if (!(exists && skipIfExists)) {
          context.macros.set(name, {
            tokens: arg,
            numArgs
          });
        }
        return "";
      }, "newcommand");
      defineMacro("\\newcommand", (context) => newcommand(context, false, true, false));
      defineMacro("\\renewcommand", (context) => newcommand(context, true, false, false));
      defineMacro("\\providecommand", (context) => newcommand(context, true, true, true));
      defineMacro("\\message", (context) => {
        var arg = context.consumeArgs(1)[0];
        console.log(arg.reverse().map((token2) => token2.text).join(""));
        return "";
      });
      defineMacro("\\errmessage", (context) => {
        var arg = context.consumeArgs(1)[0];
        console.error(arg.reverse().map((token2) => token2.text).join(""));
        return "";
      });
      defineMacro("\\show", (context) => {
        var tok = context.popToken();
        var name = tok.text;
        console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);
        return "";
      });
      defineMacro("\\bgroup", "{");
      defineMacro("\\egroup", "}");
      defineMacro("~", "\\nobreakspace");
      defineMacro("\\lq", "`");
      defineMacro("\\rq", "'");
      defineMacro("\\aa", "\\r a");
      defineMacro("\\AA", "\\r A");
      defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`\xA9}");
      defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");
      defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");
      defineMacro("\u212C", "\\mathscr{B}");
      defineMacro("\u2130", "\\mathscr{E}");
      defineMacro("\u2131", "\\mathscr{F}");
      defineMacro("\u210B", "\\mathscr{H}");
      defineMacro("\u2110", "\\mathscr{I}");
      defineMacro("\u2112", "\\mathscr{L}");
      defineMacro("\u2133", "\\mathscr{M}");
      defineMacro("\u211B", "\\mathscr{R}");
      defineMacro("\u212D", "\\mathfrak{C}");
      defineMacro("\u210C", "\\mathfrak{H}");
      defineMacro("\u2128", "\\mathfrak{Z}");
      defineMacro("\\Bbbk", "\\Bbb{k}");
      defineMacro("\\llap", "\\mathllap{\\textrm{#1}}");
      defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}");
      defineMacro("\\clap", "\\mathclap{\\textrm{#1}}");
      defineMacro("\\mathstrut", "\\vphantom{(}");
      defineMacro("\\underbar", "\\underline{\\text{#1}}");
      defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');
      defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");
      defineMacro("\\ne", "\\neq");
      defineMacro("\u2260", "\\neq");
      defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");
      defineMacro("\u2209", "\\notin");
      defineMacro("\u2258", "\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");
      defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");
      defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");
      defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");
      defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");
      defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");
      defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");
      defineMacro("\u27C2", "\\perp");
      defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}");
      defineMacro("\u220C", "\\notni");
      defineMacro("\u231C", "\\ulcorner");
      defineMacro("\u231D", "\\urcorner");
      defineMacro("\u231E", "\\llcorner");
      defineMacro("\u231F", "\\lrcorner");
      defineMacro("\xA9", "\\copyright");
      defineMacro("\xAE", "\\textregistered");
      defineMacro("\\ulcorner", '\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');
      defineMacro("\\urcorner", '\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');
      defineMacro("\\llcorner", '\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');
      defineMacro("\\lrcorner", '\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');
      defineMacro("\\vdots", "{\\varvdots\\rule{0pt}{15pt}}");
      defineMacro("\u22EE", "\\vdots");
      defineMacro("\\varGamma", "\\mathit{\\Gamma}");
      defineMacro("\\varDelta", "\\mathit{\\Delta}");
      defineMacro("\\varTheta", "\\mathit{\\Theta}");
      defineMacro("\\varLambda", "\\mathit{\\Lambda}");
      defineMacro("\\varXi", "\\mathit{\\Xi}");
      defineMacro("\\varPi", "\\mathit{\\Pi}");
      defineMacro("\\varSigma", "\\mathit{\\Sigma}");
      defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}");
      defineMacro("\\varPhi", "\\mathit{\\Phi}");
      defineMacro("\\varPsi", "\\mathit{\\Psi}");
      defineMacro("\\varOmega", "\\mathit{\\Omega}");
      defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}");
      defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");
      defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}");
      defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;");
      defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;");
      defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;");
      defineMacro("\\dddot", "{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");
      defineMacro("\\ddddot", "{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");
      dotsByToken = {
        ",": "\\dotsc",
        "\\not": "\\dotsb",
        // \keybin@ checks for the following:
        "+": "\\dotsb",
        "=": "\\dotsb",
        "<": "\\dotsb",
        ">": "\\dotsb",
        "-": "\\dotsb",
        "*": "\\dotsb",
        ":": "\\dotsb",
        // Symbols whose definition starts with \DOTSB:
        "\\DOTSB": "\\dotsb",
        "\\coprod": "\\dotsb",
        "\\bigvee": "\\dotsb",
        "\\bigwedge": "\\dotsb",
        "\\biguplus": "\\dotsb",
        "\\bigcap": "\\dotsb",
        "\\bigcup": "\\dotsb",
        "\\prod": "\\dotsb",
        "\\sum": "\\dotsb",
        "\\bigotimes": "\\dotsb",
        "\\bigoplus": "\\dotsb",
        "\\bigodot": "\\dotsb",
        "\\bigsqcup": "\\dotsb",
        "\\And": "\\dotsb",
        "\\longrightarrow": "\\dotsb",
        "\\Longrightarrow": "\\dotsb",
        "\\longleftarrow": "\\dotsb",
        "\\Longleftarrow": "\\dotsb",
        "\\longleftrightarrow": "\\dotsb",
        "\\Longleftrightarrow": "\\dotsb",
        "\\mapsto": "\\dotsb",
        "\\longmapsto": "\\dotsb",
        "\\hookrightarrow": "\\dotsb",
        "\\doteq": "\\dotsb",
        // Symbols whose definition starts with \mathbin:
        "\\mathbin": "\\dotsb",
        // Symbols whose definition starts with \mathrel:
        "\\mathrel": "\\dotsb",
        "\\relbar": "\\dotsb",
        "\\Relbar": "\\dotsb",
        "\\xrightarrow": "\\dotsb",
        "\\xleftarrow": "\\dotsb",
        // Symbols whose definition starts with \DOTSI:
        "\\DOTSI": "\\dotsi",
        "\\int": "\\dotsi",
        "\\oint": "\\dotsi",
        "\\iint": "\\dotsi",
        "\\iiint": "\\dotsi",
        "\\iiiint": "\\dotsi",
        "\\idotsint": "\\dotsi",
        // Symbols whose definition starts with \DOTSX:
        "\\DOTSX": "\\dotsx"
      };
      dotsbGroups = /* @__PURE__ */ new Set(["bin", "rel"]);
      defineMacro("\\dots", function(context) {
        var thedots = "\\dotso";
        var next3 = context.expandAfterFuture().text;
        if (next3 in dotsByToken) {
          thedots = dotsByToken[next3];
        } else if (next3.slice(0, 4) === "\\not") {
          thedots = "\\dotsb";
        } else if (next3 in symbols.math) {
          if (dotsbGroups.has(symbols.math[next3].group)) {
            thedots = "\\dotsb";
          }
        }
        return thedots;
      });
      spaceAfterDots = {
        // \rightdelim@ checks for the following:
        ")": true,
        "]": true,
        "\\rbrack": true,
        "\\}": true,
        "\\rbrace": true,
        "\\rangle": true,
        "\\rceil": true,
        "\\rfloor": true,
        "\\rgroup": true,
        "\\rmoustache": true,
        "\\right": true,
        "\\bigr": true,
        "\\biggr": true,
        "\\Bigr": true,
        "\\Biggr": true,
        // \extra@ also tests for the following:
        "$": true,
        // \extrap@ checks for the following:
        ";": true,
        ".": true,
        ",": true
      };
      defineMacro("\\dotso", function(context) {
        var next3 = context.future().text;
        if (next3 in spaceAfterDots) {
          return "\\ldots\\,";
        } else {
          return "\\ldots";
        }
      });
      defineMacro("\\dotsc", function(context) {
        var next3 = context.future().text;
        if (next3 in spaceAfterDots && next3 !== ",") {
          return "\\ldots\\,";
        } else {
          return "\\ldots";
        }
      });
      defineMacro("\\cdots", function(context) {
        var next3 = context.future().text;
        if (next3 in spaceAfterDots) {
          return "\\@cdots\\,";
        } else {
          return "\\@cdots";
        }
      });
      defineMacro("\\dotsb", "\\cdots");
      defineMacro("\\dotsm", "\\cdots");
      defineMacro("\\dotsi", "\\!\\cdots");
      defineMacro("\\dotsx", "\\ldots\\,");
      defineMacro("\\DOTSI", "\\relax");
      defineMacro("\\DOTSB", "\\relax");
      defineMacro("\\DOTSX", "\\relax");
      defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");
      defineMacro("\\,", "\\tmspace+{3mu}{.1667em}");
      defineMacro("\\thinspace", "\\,");
      defineMacro("\\>", "\\mskip{4mu}");
      defineMacro("\\:", "\\tmspace+{4mu}{.2222em}");
      defineMacro("\\medspace", "\\:");
      defineMacro("\\;", "\\tmspace+{5mu}{.2777em}");
      defineMacro("\\thickspace", "\\;");
      defineMacro("\\!", "\\tmspace-{3mu}{.1667em}");
      defineMacro("\\negthinspace", "\\!");
      defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}");
      defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}");
      defineMacro("\\enspace", "\\kern.5em ");
      defineMacro("\\enskip", "\\hskip.5em\\relax");
      defineMacro("\\quad", "\\hskip1em\\relax");
      defineMacro("\\qquad", "\\hskip2em\\relax");
      defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren");
      defineMacro("\\tag@paren", "\\tag@literal{({#1})}");
      defineMacro("\\tag@literal", (context) => {
        if (context.macros.get("\\df@tag")) {
          throw new ParseError("Multiple \\tag");
        }
        return "\\gdef\\df@tag{\\text{#1}}";
      });
      defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");
      defineMacro("\\pod", "\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");
      defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}");
      defineMacro("\\mod", "\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");
      defineMacro("\\newline", "\\\\\\relax");
      defineMacro("\\TeX", "\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");
      latexRaiseA = makeEm(fontMetricsData["Main-Regular"]["T".charCodeAt(0)][1] - 0.7 * fontMetricsData["Main-Regular"]["A".charCodeAt(0)][1]);
      defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}");
      defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}");
      defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace");
      defineMacro("\\@hspace", "\\hskip #1\\relax");
      defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax");
      defineMacro("\\ordinarycolon", ":");
      defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}");
      defineMacro("\\dblcolon", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');
      defineMacro("\\coloneqq", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');
      defineMacro("\\Coloneqq", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');
      defineMacro("\\coloneq", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');
      defineMacro("\\Coloneq", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');
      defineMacro("\\eqqcolon", '\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');
      defineMacro("\\Eqqcolon", '\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');
      defineMacro("\\eqcolon", '\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');
      defineMacro("\\Eqcolon", '\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');
      defineMacro("\\colonapprox", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');
      defineMacro("\\Colonapprox", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');
      defineMacro("\\colonsim", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');
      defineMacro("\\Colonsim", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');
      defineMacro("\u2237", "\\dblcolon");
      defineMacro("\u2239", "\\eqcolon");
      defineMacro("\u2254", "\\coloneqq");
      defineMacro("\u2255", "\\eqqcolon");
      defineMacro("\u2A74", "\\Coloneqq");
      defineMacro("\\ratio", "\\vcentcolon");
      defineMacro("\\coloncolon", "\\dblcolon");
      defineMacro("\\colonequals", "\\coloneqq");
      defineMacro("\\coloncolonequals", "\\Coloneqq");
      defineMacro("\\equalscolon", "\\eqqcolon");
      defineMacro("\\equalscoloncolon", "\\Eqqcolon");
      defineMacro("\\colonminus", "\\coloneq");
      defineMacro("\\coloncolonminus", "\\Coloneq");
      defineMacro("\\minuscolon", "\\eqcolon");
      defineMacro("\\minuscoloncolon", "\\Eqcolon");
      defineMacro("\\coloncolonapprox", "\\Colonapprox");
      defineMacro("\\coloncolonsim", "\\Colonsim");
      defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
      defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");
      defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
      defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");
      defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
      defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}");
      defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}");
      defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}");
      defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}");
      defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}");
      defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}");
      defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}");
      defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}");
      defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
      defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}");
      defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}");
      defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}");
      defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}");
      defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}");
      defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{\u2224}");
      defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{\u2226}");
      defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}");
      defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}");
      defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{\u228A}");
      defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{\u2ACB}");
      defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{\u228B}");
      defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{\u2ACC}");
      defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}");
      defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}");
      defineMacro("\\llbracket", "\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");
      defineMacro("\\rrbracket", "\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");
      defineMacro("\u27E6", "\\llbracket");
      defineMacro("\u27E7", "\\rrbracket");
      defineMacro("\\lBrace", "\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");
      defineMacro("\\rBrace", "\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");
      defineMacro("\u2983", "\\lBrace");
      defineMacro("\u2984", "\\rBrace");
      defineMacro("\\minuso", "\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");
      defineMacro("\u29B5", "\\minuso");
      defineMacro("\\darr", "\\downarrow");
      defineMacro("\\dArr", "\\Downarrow");
      defineMacro("\\Darr", "\\Downarrow");
      defineMacro("\\lang", "\\langle");
      defineMacro("\\rang", "\\rangle");
      defineMacro("\\uarr", "\\uparrow");
      defineMacro("\\uArr", "\\Uparrow");
      defineMacro("\\Uarr", "\\Uparrow");
      defineMacro("\\N", "\\mathbb{N}");
      defineMacro("\\R", "\\mathbb{R}");
      defineMacro("\\Z", "\\mathbb{Z}");
      defineMacro("\\alef", "\\aleph");
      defineMacro("\\alefsym", "\\aleph");
      defineMacro("\\Alpha", "\\mathrm{A}");
      defineMacro("\\Beta", "\\mathrm{B}");
      defineMacro("\\bull", "\\bullet");
      defineMacro("\\Chi", "\\mathrm{X}");
      defineMacro("\\clubs", "\\clubsuit");
      defineMacro("\\cnums", "\\mathbb{C}");
      defineMacro("\\Complex", "\\mathbb{C}");
      defineMacro("\\Dagger", "\\ddagger");
      defineMacro("\\diamonds", "\\diamondsuit");
      defineMacro("\\empty", "\\emptyset");
      defineMacro("\\Epsilon", "\\mathrm{E}");
      defineMacro("\\Eta", "\\mathrm{H}");
      defineMacro("\\exist", "\\exists");
      defineMacro("\\harr", "\\leftrightarrow");
      defineMacro("\\hArr", "\\Leftrightarrow");
      defineMacro("\\Harr", "\\Leftrightarrow");
      defineMacro("\\hearts", "\\heartsuit");
      defineMacro("\\image", "\\Im");
      defineMacro("\\infin", "\\infty");
      defineMacro("\\Iota", "\\mathrm{I}");
      defineMacro("\\isin", "\\in");
      defineMacro("\\Kappa", "\\mathrm{K}");
      defineMacro("\\larr", "\\leftarrow");
      defineMacro("\\lArr", "\\Leftarrow");
      defineMacro("\\Larr", "\\Leftarrow");
      defineMacro("\\lrarr", "\\leftrightarrow");
      defineMacro("\\lrArr", "\\Leftrightarrow");
      defineMacro("\\Lrarr", "\\Leftrightarrow");
      defineMacro("\\Mu", "\\mathrm{M}");
      defineMacro("\\natnums", "\\mathbb{N}");
      defineMacro("\\Nu", "\\mathrm{N}");
      defineMacro("\\Omicron", "\\mathrm{O}");
      defineMacro("\\plusmn", "\\pm");
      defineMacro("\\rarr", "\\rightarrow");
      defineMacro("\\rArr", "\\Rightarrow");
      defineMacro("\\Rarr", "\\Rightarrow");
      defineMacro("\\real", "\\Re");
      defineMacro("\\reals", "\\mathbb{R}");
      defineMacro("\\Reals", "\\mathbb{R}");
      defineMacro("\\Rho", "\\mathrm{P}");
      defineMacro("\\sdot", "\\cdot");
      defineMacro("\\sect", "\\S");
      defineMacro("\\spades", "\\spadesuit");
      defineMacro("\\sub", "\\subset");
      defineMacro("\\sube", "\\subseteq");
      defineMacro("\\supe", "\\supseteq");
      defineMacro("\\Tau", "\\mathrm{T}");
      defineMacro("\\thetasym", "\\vartheta");
      defineMacro("\\weierp", "\\wp");
      defineMacro("\\Zeta", "\\mathrm{Z}");
      defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}");
      defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}");
      defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits");
      defineMacro("\\bra", "\\mathinner{\\langle{#1}|}");
      defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}");
      defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}");
      defineMacro("\\Bra", "\\left\\langle#1\\right|");
      defineMacro("\\Ket", "\\left|#1\\right\\rangle");
      braketHelper = /* @__PURE__ */ __name((one4) => (context) => {
        var left3 = context.consumeArg().tokens;
        var middle = context.consumeArg().tokens;
        var middleDouble = context.consumeArg().tokens;
        var right3 = context.consumeArg().tokens;
        var oldMiddle = context.macros.get("|");
        var oldMiddleDouble = context.macros.get("\\|");
        context.macros.beginGroup();
        var midMacro = /* @__PURE__ */ __name((double) => (context2) => {
          if (one4) {
            context2.macros.set("|", oldMiddle);
            if (middleDouble.length) {
              context2.macros.set("\\|", oldMiddleDouble);
            }
          }
          var doubled = double;
          if (!double && middleDouble.length) {
            var nextToken = context2.future();
            if (nextToken.text === "|") {
              context2.popToken();
              doubled = true;
            }
          }
          return {
            tokens: doubled ? middleDouble : middle,
            numArgs: 0
          };
        }, "midMacro");
        context.macros.set("|", midMacro(false));
        if (middleDouble.length) {
          context.macros.set("\\|", midMacro(true));
        }
        var arg = context.consumeArg().tokens;
        var expanded = context.expandTokens([
          ...right3,
          ...arg,
          ...left3
          // reversed
        ]);
        context.macros.endGroup();
        return {
          tokens: expanded.reverse(),
          numArgs: 0
        };
      }, "braketHelper");
      defineMacro("\\bra@ket", braketHelper(false));
      defineMacro("\\bra@set", braketHelper(true));
      defineMacro("\\Braket", "\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");
      defineMacro("\\Set", "\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");
      defineMacro("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");
      defineMacro("\\angln", "{\\angl n}");
      defineMacro("\\blue", "\\textcolor{##6495ed}{#1}");
      defineMacro("\\orange", "\\textcolor{##ffa500}{#1}");
      defineMacro("\\pink", "\\textcolor{##ff00af}{#1}");
      defineMacro("\\red", "\\textcolor{##df0030}{#1}");
      defineMacro("\\green", "\\textcolor{##28ae7b}{#1}");
      defineMacro("\\gray", "\\textcolor{gray}{#1}");
      defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}");
      defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}");
      defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}");
      defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}");
      defineMacro("\\blueD", "\\textcolor{##11accd}{#1}");
      defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}");
      defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}");
      defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}");
      defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}");
      defineMacro("\\tealD", "\\textcolor{##01a995}{#1}");
      defineMacro("\\tealE", "\\textcolor{##208170}{#1}");
      defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}");
      defineMacro("\\greenB", "\\textcolor{##8af281}{#1}");
      defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}");
      defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}");
      defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}");
      defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}");
      defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}");
      defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}");
      defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}");
      defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}");
      defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}");
      defineMacro("\\redB", "\\textcolor{##ff8482}{#1}");
      defineMacro("\\redC", "\\textcolor{##f9685d}{#1}");
      defineMacro("\\redD", "\\textcolor{##e84d39}{#1}");
      defineMacro("\\redE", "\\textcolor{##bc2612}{#1}");
      defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}");
      defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}");
      defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}");
      defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}");
      defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}");
      defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}");
      defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}");
      defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}");
      defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}");
      defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}");
      defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}");
      defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}");
      defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}");
      defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}");
      defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}");
      defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}");
      defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}");
      defineMacro("\\grayE", "\\textcolor{##babec2}{#1}");
      defineMacro("\\grayF", "\\textcolor{##888d93}{#1}");
      defineMacro("\\grayG", "\\textcolor{##626569}{#1}");
      defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}");
      defineMacro("\\grayI", "\\textcolor{##21242c}{#1}");
      defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}");
      defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}");
      implicitCommands = {
        "^": true,
        // Parser.js
        "_": true,
        // Parser.js
        "\\limits": true,
        // Parser.js
        "\\nolimits": true
        // Parser.js
      };
      MacroExpander = class {
        static {
          __name(this, "MacroExpander");
        }
        constructor(input, settings, mode) {
          this.settings = settings;
          this.expansionCount = 0;
          this.feed(input);
          this.macros = new Namespace(macros, settings.macros);
          this.mode = mode;
          this.stack = [];
        }
        /**
         * Feed a new input string to the same MacroExpander
         * (with existing macros etc.).
         */
        feed(input) {
          this.lexer = new Lexer(input, this.settings);
        }
        /**
         * Switches between "text" and "math" modes.
         */
        switchMode(newMode) {
          this.mode = newMode;
        }
        /**
         * Start a new group nesting within all namespaces.
         */
        beginGroup() {
          this.macros.beginGroup();
        }
        /**
         * End current group nesting within all namespaces.
         */
        endGroup() {
          this.macros.endGroup();
        }
        /**
         * Ends all currently nested groups (if any), restoring values before the
         * groups began.  Useful in case of an error in the middle of parsing.
         */
        endGroups() {
          this.macros.endGroups();
        }
        /**
         * Returns the topmost token on the stack, without expanding it.
         * Similar in behavior to TeX's `\futurelet`.
         */
        future() {
          if (this.stack.length === 0) {
            this.pushToken(this.lexer.lex());
          }
          return this.stack[this.stack.length - 1];
        }
        /**
         * Remove and return the next unexpanded token.
         */
        popToken() {
          this.future();
          return this.stack.pop();
        }
        /**
         * Add a given token to the token stack.  In particular, this get be used
         * to put back a token returned from one of the other methods.
         */
        pushToken(token2) {
          this.stack.push(token2);
        }
        /**
         * Append an array of tokens to the token stack.
         */
        pushTokens(tokens2) {
          this.stack.push(...tokens2);
        }
        /**
         * Find an macro argument without expanding tokens and append the array of
         * tokens to the token stack. Uses Token as a container for the result.
         */
        scanArgument(isOptional) {
          var start3;
          var end2;
          var tokens2;
          if (isOptional) {
            this.consumeSpaces();
            if (this.future().text !== "[") {
              return null;
            }
            start3 = this.popToken();
            ({
              tokens: tokens2,
              end: end2
            } = this.consumeArg(["]"]));
          } else {
            ({
              tokens: tokens2,
              start: start3,
              end: end2
            } = this.consumeArg());
          }
          this.pushToken(new Token("EOF", end2.loc));
          this.pushTokens(tokens2);
          return new Token("", SourceLocation.range(start3, end2));
        }
        /**
         * Consume all following space tokens, without expansion.
         */
        consumeSpaces() {
          for (; ; ) {
            var token2 = this.future();
            if (token2.text === " ") {
              this.stack.pop();
            } else {
              break;
            }
          }
        }
        /**
         * Consume an argument from the token stream, and return the resulting array
         * of tokens and start/end token.
         */
        consumeArg(delims) {
          var tokens2 = [];
          var isDelimited = delims && delims.length > 0;
          if (!isDelimited) {
            this.consumeSpaces();
          }
          var start3 = this.future();
          var tok;
          var depth = 0;
          var match3 = 0;
          do {
            tok = this.popToken();
            tokens2.push(tok);
            if (tok.text === "{") {
              ++depth;
            } else if (tok.text === "}") {
              --depth;
              if (depth === -1) {
                throw new ParseError("Extra }", tok);
              }
            } else if (tok.text === "EOF") {
              throw new ParseError("Unexpected end of input in a macro argument, expected '" + (delims && isDelimited ? delims[match3] : "}") + "'", tok);
            }
            if (delims && isDelimited) {
              if ((depth === 0 || depth === 1 && delims[match3] === "{") && tok.text === delims[match3]) {
                ++match3;
                if (match3 === delims.length) {
                  tokens2.splice(-match3, match3);
                  break;
                }
              } else {
                match3 = 0;
              }
            }
          } while (depth !== 0 || isDelimited);
          if (start3.text === "{" && tokens2[tokens2.length - 1].text === "}") {
            tokens2.pop();
            tokens2.shift();
          }
          tokens2.reverse();
          return {
            tokens: tokens2,
            start: start3,
            end: tok
          };
        }
        /**
         * Consume the specified number of (delimited) arguments from the token
         * stream and return the resulting array of arguments.
         */
        consumeArgs(numArgs, delimiters2) {
          if (delimiters2) {
            if (delimiters2.length !== numArgs + 1) {
              throw new ParseError("The length of delimiters doesn't match the number of args!");
            }
            var delims = delimiters2[0];
            for (var i2 = 0; i2 < delims.length; i2++) {
              var tok = this.popToken();
              if (delims[i2] !== tok.text) {
                throw new ParseError("Use of the macro doesn't match its definition", tok);
              }
            }
          }
          var args = [];
          for (var _i = 0; _i < numArgs; _i++) {
            args.push(this.consumeArg(delimiters2 && delimiters2[_i + 1]).tokens);
          }
          return args;
        }
        /**
         * Increment `expansionCount` by the specified amount.
         * Throw an error if it exceeds `maxExpand`.
         */
        countExpansion(amount) {
          this.expansionCount += amount;
          if (this.expansionCount > this.settings.maxExpand) {
            throw new ParseError("Too many expansions: infinite loop or need to increase maxExpand setting");
          }
        }
        /**
         * Expand the next token only once if possible.
         *
         * If the token is expanded, the resulting tokens will be pushed onto
         * the stack in reverse order, and the number of such tokens will be
         * returned.  This number might be zero or positive.
         *
         * If not, the return value is `false`, and the next token remains at the
         * top of the stack.
         *
         * In either case, the next token will be on the top of the stack,
         * or the stack will be empty (in case of empty expansion
         * and no other tokens).
         *
         * Used to implement `expandAfterFuture` and `expandNextToken`.
         *
         * If expandableOnly, only expandable tokens are expanded and
         * an undefined control sequence results in an error.
         */
        expandOnce(expandableOnly) {
          var topToken = this.popToken();
          var name = topToken.text;
          var expansion = !topToken.noexpand ? this._getExpansion(name) : null;
          if (expansion == null || expandableOnly && expansion.unexpandable) {
            if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) {
              throw new ParseError("Undefined control sequence: " + name);
            }
            this.pushToken(topToken);
            return false;
          }
          this.countExpansion(1);
          var tokens2 = expansion.tokens;
          var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);
          if (expansion.numArgs) {
            tokens2 = tokens2.slice();
            for (var i2 = tokens2.length - 1; i2 >= 0; --i2) {
              var tok = tokens2[i2];
              if (tok.text === "#") {
                if (i2 === 0) {
                  throw new ParseError("Incomplete placeholder at end of macro body", tok);
                }
                tok = tokens2[--i2];
                if (tok.text === "#") {
                  tokens2.splice(i2 + 1, 1);
                } else if (/^[1-9]$/.test(tok.text)) {
                  tokens2.splice(i2, 2, ...args[+tok.text - 1]);
                } else {
                  throw new ParseError("Not a valid argument number", tok);
                }
              }
            }
          }
          this.pushTokens(tokens2);
          return tokens2.length;
        }
        /**
         * Expand the next token only once (if possible), and return the resulting
         * top token on the stack (without removing anything from the stack).
         * Similar in behavior to TeX's `\expandafter\futurelet`.
         * Equivalent to expandOnce() followed by future().
         */
        expandAfterFuture() {
          this.expandOnce();
          return this.future();
        }
        /**
         * Recursively expand first token, then return first non-expandable token.
         */
        expandNextToken() {
          for (; ; ) {
            if (this.expandOnce() === false) {
              var token2 = this.stack.pop();
              if (token2.treatAsRelax) {
                token2.text = "\\relax";
              }
              return token2;
            }
          }
        }
        /**
         * Fully expand the given macro name and return the resulting list of
         * tokens, or return `undefined` if no such macro is defined.
         */
        expandMacro(name) {
          return this.macros.has(name) ? this.expandTokens([new Token(name)]) : void 0;
        }
        /**
         * Fully expand the given token stream and return the resulting list of
         * tokens.  Note that the input tokens are in reverse order, but the
         * output tokens are in forward order.
         */
        expandTokens(tokens2) {
          var output2 = [];
          var oldStackLength = this.stack.length;
          this.pushTokens(tokens2);
          while (this.stack.length > oldStackLength) {
            if (this.expandOnce(true) === false) {
              var token2 = this.stack.pop();
              if (token2.treatAsRelax) {
                token2.noexpand = false;
                token2.treatAsRelax = false;
              }
              output2.push(token2);
            }
          }
          this.countExpansion(output2.length);
          return output2;
        }
        /**
         * Fully expand the given macro name and return the result as a string,
         * or return `undefined` if no such macro is defined.
         */
        expandMacroAsText(name) {
          var tokens2 = this.expandMacro(name);
          if (tokens2) {
            return tokens2.map((token2) => token2.text).join("");
          } else {
            return tokens2;
          }
        }
        /**
         * Returns the expanded macro as a reversed array of tokens and a macro
         * argument count.  Or returns `null` if no such macro.
         */
        _getExpansion(name) {
          var definition = this.macros.get(name);
          if (definition == null) {
            return definition;
          }
          if (name.length === 1) {
            var catcode = this.lexer.catcodes[name];
            if (catcode != null && catcode !== 13) {
              return;
            }
          }
          var expansion = typeof definition === "function" ? definition(this) : definition;
          if (typeof expansion === "string") {
            var numArgs = 0;
            if (expansion.includes("#")) {
              var stripped = expansion.replace(/##/g, "");
              while (stripped.includes("#" + (numArgs + 1))) {
                ++numArgs;
              }
            }
            var bodyLexer = new Lexer(expansion, this.settings);
            var tokens2 = [];
            var tok = bodyLexer.lex();
            while (tok.text !== "EOF") {
              tokens2.push(tok);
              tok = bodyLexer.lex();
            }
            tokens2.reverse();
            var expanded = {
              tokens: tokens2,
              numArgs
            };
            return expanded;
          }
          return expansion;
        }
        /**
         * Determine whether a command is currently "defined" (has some
         * functionality), meaning that it's a macro (in the current group),
         * a function, a symbol, or one of the special commands listed in
         * `implicitCommands`.
         */
        isDefined(name) {
          return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);
        }
        /**
         * Determine whether a command is expandable.
         */
        isExpandable(name) {
          var macro = this.macros.get(name);
          return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;
        }
      };
      unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;
      uSubsAndSups = Object.freeze({
        "\u208A": "+",
        "\u208B": "-",
        "\u208C": "=",
        "\u208D": "(",
        "\u208E": ")",
        "\u2080": "0",
        "\u2081": "1",
        "\u2082": "2",
        "\u2083": "3",
        "\u2084": "4",
        "\u2085": "5",
        "\u2086": "6",
        "\u2087": "7",
        "\u2088": "8",
        "\u2089": "9",
        "\u2090": "a",
        "\u2091": "e",
        "\u2095": "h",
        "\u1D62": "i",
        "\u2C7C": "j",
        "\u2096": "k",
        "\u2097": "l",
        "\u2098": "m",
        "\u2099": "n",
        "\u2092": "o",
        "\u209A": "p",
        "\u1D63": "r",
        "\u209B": "s",
        "\u209C": "t",
        "\u1D64": "u",
        "\u1D65": "v",
        "\u2093": "x",
        "\u1D66": "\u03B2",
        "\u1D67": "\u03B3",
        "\u1D68": "\u03C1",
        "\u1D69": "\u03D5",
        "\u1D6A": "\u03C7",
        "\u207A": "+",
        "\u207B": "-",
        "\u207C": "=",
        "\u207D": "(",
        "\u207E": ")",
        "\u2070": "0",
        "\xB9": "1",
        "\xB2": "2",
        "\xB3": "3",
        "\u2074": "4",
        "\u2075": "5",
        "\u2076": "6",
        "\u2077": "7",
        "\u2078": "8",
        "\u2079": "9",
        "\u1D2C": "A",
        "\u1D2E": "B",
        "\u1D30": "D",
        "\u1D31": "E",
        "\u1D33": "G",
        "\u1D34": "H",
        "\u1D35": "I",
        "\u1D36": "J",
        "\u1D37": "K",
        "\u1D38": "L",
        "\u1D39": "M",
        "\u1D3A": "N",
        "\u1D3C": "O",
        "\u1D3E": "P",
        "\u1D3F": "R",
        "\u1D40": "T",
        "\u1D41": "U",
        "\u2C7D": "V",
        "\u1D42": "W",
        "\u1D43": "a",
        "\u1D47": "b",
        "\u1D9C": "c",
        "\u1D48": "d",
        "\u1D49": "e",
        "\u1DA0": "f",
        "\u1D4D": "g",
        "\u02B0": "h",
        "\u2071": "i",
        "\u02B2": "j",
        "\u1D4F": "k",
        "\u02E1": "l",
        "\u1D50": "m",
        "\u207F": "n",
        "\u1D52": "o",
        "\u1D56": "p",
        "\u02B3": "r",
        "\u02E2": "s",
        "\u1D57": "t",
        "\u1D58": "u",
        "\u1D5B": "v",
        "\u02B7": "w",
        "\u02E3": "x",
        "\u02B8": "y",
        "\u1DBB": "z",
        "\u1D5D": "\u03B2",
        "\u1D5E": "\u03B3",
        "\u1D5F": "\u03B4",
        "\u1D60": "\u03D5",
        "\u1D61": "\u03C7",
        "\u1DBF": "\u03B8"
      });
      unicodeAccents = {
        "\u0301": {
          "text": "\\'",
          "math": "\\acute"
        },
        "\u0300": {
          "text": "\\`",
          "math": "\\grave"
        },
        "\u0308": {
          "text": '\\"',
          "math": "\\ddot"
        },
        "\u0303": {
          "text": "\\~",
          "math": "\\tilde"
        },
        "\u0304": {
          "text": "\\=",
          "math": "\\bar"
        },
        "\u0306": {
          "text": "\\u",
          "math": "\\breve"
        },
        "\u030C": {
          "text": "\\v",
          "math": "\\check"
        },
        "\u0302": {
          "text": "\\^",
          "math": "\\hat"
        },
        "\u0307": {
          "text": "\\.",
          "math": "\\dot"
        },
        "\u030A": {
          "text": "\\r",
          "math": "\\mathring"
        },
        "\u030B": {
          "text": "\\H"
        },
        "\u0327": {
          "text": "\\c"
        }
      };
      unicodeSymbols = {
        "\xE1": "a\u0301",
        "\xE0": "a\u0300",
        "\xE4": "a\u0308",
        "\u01DF": "a\u0308\u0304",
        "\xE3": "a\u0303",
        "\u0101": "a\u0304",
        "\u0103": "a\u0306",
        "\u1EAF": "a\u0306\u0301",
        "\u1EB1": "a\u0306\u0300",
        "\u1EB5": "a\u0306\u0303",
        "\u01CE": "a\u030C",
        "\xE2": "a\u0302",
        "\u1EA5": "a\u0302\u0301",
        "\u1EA7": "a\u0302\u0300",
        "\u1EAB": "a\u0302\u0303",
        "\u0227": "a\u0307",
        "\u01E1": "a\u0307\u0304",
        "\xE5": "a\u030A",
        "\u01FB": "a\u030A\u0301",
        "\u1E03": "b\u0307",
        "\u0107": "c\u0301",
        "\u1E09": "c\u0327\u0301",
        "\u010D": "c\u030C",
        "\u0109": "c\u0302",
        "\u010B": "c\u0307",
        "\xE7": "c\u0327",
        "\u010F": "d\u030C",
        "\u1E0B": "d\u0307",
        "\u1E11": "d\u0327",
        "\xE9": "e\u0301",
        "\xE8": "e\u0300",
        "\xEB": "e\u0308",
        "\u1EBD": "e\u0303",
        "\u0113": "e\u0304",
        "\u1E17": "e\u0304\u0301",
        "\u1E15": "e\u0304\u0300",
        "\u0115": "e\u0306",
        "\u1E1D": "e\u0327\u0306",
        "\u011B": "e\u030C",
        "\xEA": "e\u0302",
        "\u1EBF": "e\u0302\u0301",
        "\u1EC1": "e\u0302\u0300",
        "\u1EC5": "e\u0302\u0303",
        "\u0117": "e\u0307",
        "\u0229": "e\u0327",
        "\u1E1F": "f\u0307",
        "\u01F5": "g\u0301",
        "\u1E21": "g\u0304",
        "\u011F": "g\u0306",
        "\u01E7": "g\u030C",
        "\u011D": "g\u0302",
        "\u0121": "g\u0307",
        "\u0123": "g\u0327",
        "\u1E27": "h\u0308",
        "\u021F": "h\u030C",
        "\u0125": "h\u0302",
        "\u1E23": "h\u0307",
        "\u1E29": "h\u0327",
        "\xED": "i\u0301",
        "\xEC": "i\u0300",
        "\xEF": "i\u0308",
        "\u1E2F": "i\u0308\u0301",
        "\u0129": "i\u0303",
        "\u012B": "i\u0304",
        "\u012D": "i\u0306",
        "\u01D0": "i\u030C",
        "\xEE": "i\u0302",
        "\u01F0": "j\u030C",
        "\u0135": "j\u0302",
        "\u1E31": "k\u0301",
        "\u01E9": "k\u030C",
        "\u0137": "k\u0327",
        "\u013A": "l\u0301",
        "\u013E": "l\u030C",
        "\u013C": "l\u0327",
        "\u1E3F": "m\u0301",
        "\u1E41": "m\u0307",
        "\u0144": "n\u0301",
        "\u01F9": "n\u0300",
        "\xF1": "n\u0303",
        "\u0148": "n\u030C",
        "\u1E45": "n\u0307",
        "\u0146": "n\u0327",
        "\xF3": "o\u0301",
        "\xF2": "o\u0300",
        "\xF6": "o\u0308",
        "\u022B": "o\u0308\u0304",
        "\xF5": "o\u0303",
        "\u1E4D": "o\u0303\u0301",
        "\u1E4F": "o\u0303\u0308",
        "\u022D": "o\u0303\u0304",
        "\u014D": "o\u0304",
        "\u1E53": "o\u0304\u0301",
        "\u1E51": "o\u0304\u0300",
        "\u014F": "o\u0306",
        "\u01D2": "o\u030C",
        "\xF4": "o\u0302",
        "\u1ED1": "o\u0302\u0301",
        "\u1ED3": "o\u0302\u0300",
        "\u1ED7": "o\u0302\u0303",
        "\u022F": "o\u0307",
        "\u0231": "o\u0307\u0304",
        "\u0151": "o\u030B",
        "\u1E55": "p\u0301",
        "\u1E57": "p\u0307",
        "\u0155": "r\u0301",
        "\u0159": "r\u030C",
        "\u1E59": "r\u0307",
        "\u0157": "r\u0327",
        "\u015B": "s\u0301",
        "\u1E65": "s\u0301\u0307",
        "\u0161": "s\u030C",
        "\u1E67": "s\u030C\u0307",
        "\u015D": "s\u0302",
        "\u1E61": "s\u0307",
        "\u015F": "s\u0327",
        "\u1E97": "t\u0308",
        "\u0165": "t\u030C",
        "\u1E6B": "t\u0307",
        "\u0163": "t\u0327",
        "\xFA": "u\u0301",
        "\xF9": "u\u0300",
        "\xFC": "u\u0308",
        "\u01D8": "u\u0308\u0301",
        "\u01DC": "u\u0308\u0300",
        "\u01D6": "u\u0308\u0304",
        "\u01DA": "u\u0308\u030C",
        "\u0169": "u\u0303",
        "\u1E79": "u\u0303\u0301",
        "\u016B": "u\u0304",
        "\u1E7B": "u\u0304\u0308",
        "\u016D": "u\u0306",
        "\u01D4": "u\u030C",
        "\xFB": "u\u0302",
        "\u016F": "u\u030A",
        "\u0171": "u\u030B",
        "\u1E7D": "v\u0303",
        "\u1E83": "w\u0301",
        "\u1E81": "w\u0300",
        "\u1E85": "w\u0308",
        "\u0175": "w\u0302",
        "\u1E87": "w\u0307",
        "\u1E98": "w\u030A",
        "\u1E8D": "x\u0308",
        "\u1E8B": "x\u0307",
        "\xFD": "y\u0301",
        "\u1EF3": "y\u0300",
        "\xFF": "y\u0308",
        "\u1EF9": "y\u0303",
        "\u0233": "y\u0304",
        "\u0177": "y\u0302",
        "\u1E8F": "y\u0307",
        "\u1E99": "y\u030A",
        "\u017A": "z\u0301",
        "\u017E": "z\u030C",
        "\u1E91": "z\u0302",
        "\u017C": "z\u0307",
        "\xC1": "A\u0301",
        "\xC0": "A\u0300",
        "\xC4": "A\u0308",
        "\u01DE": "A\u0308\u0304",
        "\xC3": "A\u0303",
        "\u0100": "A\u0304",
        "\u0102": "A\u0306",
        "\u1EAE": "A\u0306\u0301",
        "\u1EB0": "A\u0306\u0300",
        "\u1EB4": "A\u0306\u0303",
        "\u01CD": "A\u030C",
        "\xC2": "A\u0302",
        "\u1EA4": "A\u0302\u0301",
        "\u1EA6": "A\u0302\u0300",
        "\u1EAA": "A\u0302\u0303",
        "\u0226": "A\u0307",
        "\u01E0": "A\u0307\u0304",
        "\xC5": "A\u030A",
        "\u01FA": "A\u030A\u0301",
        "\u1E02": "B\u0307",
        "\u0106": "C\u0301",
        "\u1E08": "C\u0327\u0301",
        "\u010C": "C\u030C",
        "\u0108": "C\u0302",
        "\u010A": "C\u0307",
        "\xC7": "C\u0327",
        "\u010E": "D\u030C",
        "\u1E0A": "D\u0307",
        "\u1E10": "D\u0327",
        "\xC9": "E\u0301",
        "\xC8": "E\u0300",
        "\xCB": "E\u0308",
        "\u1EBC": "E\u0303",
        "\u0112": "E\u0304",
        "\u1E16": "E\u0304\u0301",
        "\u1E14": "E\u0304\u0300",
        "\u0114": "E\u0306",
        "\u1E1C": "E\u0327\u0306",
        "\u011A": "E\u030C",
        "\xCA": "E\u0302",
        "\u1EBE": "E\u0302\u0301",
        "\u1EC0": "E\u0302\u0300",
        "\u1EC4": "E\u0302\u0303",
        "\u0116": "E\u0307",
        "\u0228": "E\u0327",
        "\u1E1E": "F\u0307",
        "\u01F4": "G\u0301",
        "\u1E20": "G\u0304",
        "\u011E": "G\u0306",
        "\u01E6": "G\u030C",
        "\u011C": "G\u0302",
        "\u0120": "G\u0307",
        "\u0122": "G\u0327",
        "\u1E26": "H\u0308",
        "\u021E": "H\u030C",
        "\u0124": "H\u0302",
        "\u1E22": "H\u0307",
        "\u1E28": "H\u0327",
        "\xCD": "I\u0301",
        "\xCC": "I\u0300",
        "\xCF": "I\u0308",
        "\u1E2E": "I\u0308\u0301",
        "\u0128": "I\u0303",
        "\u012A": "I\u0304",
        "\u012C": "I\u0306",
        "\u01CF": "I\u030C",
        "\xCE": "I\u0302",
        "\u0130": "I\u0307",
        "\u0134": "J\u0302",
        "\u1E30": "K\u0301",
        "\u01E8": "K\u030C",
        "\u0136": "K\u0327",
        "\u0139": "L\u0301",
        "\u013D": "L\u030C",
        "\u013B": "L\u0327",
        "\u1E3E": "M\u0301",
        "\u1E40": "M\u0307",
        "\u0143": "N\u0301",
        "\u01F8": "N\u0300",
        "\xD1": "N\u0303",
        "\u0147": "N\u030C",
        "\u1E44": "N\u0307",
        "\u0145": "N\u0327",
        "\xD3": "O\u0301",
        "\xD2": "O\u0300",
        "\xD6": "O\u0308",
        "\u022A": "O\u0308\u0304",
        "\xD5": "O\u0303",
        "\u1E4C": "O\u0303\u0301",
        "\u1E4E": "O\u0303\u0308",
        "\u022C": "O\u0303\u0304",
        "\u014C": "O\u0304",
        "\u1E52": "O\u0304\u0301",
        "\u1E50": "O\u0304\u0300",
        "\u014E": "O\u0306",
        "\u01D1": "O\u030C",
        "\xD4": "O\u0302",
        "\u1ED0": "O\u0302\u0301",
        "\u1ED2": "O\u0302\u0300",
        "\u1ED6": "O\u0302\u0303",
        "\u022E": "O\u0307",
        "\u0230": "O\u0307\u0304",
        "\u0150": "O\u030B",
        "\u1E54": "P\u0301",
        "\u1E56": "P\u0307",
        "\u0154": "R\u0301",
        "\u0158": "R\u030C",
        "\u1E58": "R\u0307",
        "\u0156": "R\u0327",
        "\u015A": "S\u0301",
        "\u1E64": "S\u0301\u0307",
        "\u0160": "S\u030C",
        "\u1E66": "S\u030C\u0307",
        "\u015C": "S\u0302",
        "\u1E60": "S\u0307",
        "\u015E": "S\u0327",
        "\u0164": "T\u030C",
        "\u1E6A": "T\u0307",
        "\u0162": "T\u0327",
        "\xDA": "U\u0301",
        "\xD9": "U\u0300",
        "\xDC": "U\u0308",
        "\u01D7": "U\u0308\u0301",
        "\u01DB": "U\u0308\u0300",
        "\u01D5": "U\u0308\u0304",
        "\u01D9": "U\u0308\u030C",
        "\u0168": "U\u0303",
        "\u1E78": "U\u0303\u0301",
        "\u016A": "U\u0304",
        "\u1E7A": "U\u0304\u0308",
        "\u016C": "U\u0306",
        "\u01D3": "U\u030C",
        "\xDB": "U\u0302",
        "\u016E": "U\u030A",
        "\u0170": "U\u030B",
        "\u1E7C": "V\u0303",
        "\u1E82": "W\u0301",
        "\u1E80": "W\u0300",
        "\u1E84": "W\u0308",
        "\u0174": "W\u0302",
        "\u1E86": "W\u0307",
        "\u1E8C": "X\u0308",
        "\u1E8A": "X\u0307",
        "\xDD": "Y\u0301",
        "\u1EF2": "Y\u0300",
        "\u0178": "Y\u0308",
        "\u1EF8": "Y\u0303",
        "\u0232": "Y\u0304",
        "\u0176": "Y\u0302",
        "\u1E8E": "Y\u0307",
        "\u0179": "Z\u0301",
        "\u017D": "Z\u030C",
        "\u1E90": "Z\u0302",
        "\u017B": "Z\u0307",
        "\u03AC": "\u03B1\u0301",
        "\u1F70": "\u03B1\u0300",
        "\u1FB1": "\u03B1\u0304",
        "\u1FB0": "\u03B1\u0306",
        "\u03AD": "\u03B5\u0301",
        "\u1F72": "\u03B5\u0300",
        "\u03AE": "\u03B7\u0301",
        "\u1F74": "\u03B7\u0300",
        "\u03AF": "\u03B9\u0301",
        "\u1F76": "\u03B9\u0300",
        "\u03CA": "\u03B9\u0308",
        "\u0390": "\u03B9\u0308\u0301",
        "\u1FD2": "\u03B9\u0308\u0300",
        "\u1FD1": "\u03B9\u0304",
        "\u1FD0": "\u03B9\u0306",
        "\u03CC": "\u03BF\u0301",
        "\u1F78": "\u03BF\u0300",
        "\u03CD": "\u03C5\u0301",
        "\u1F7A": "\u03C5\u0300",
        "\u03CB": "\u03C5\u0308",
        "\u03B0": "\u03C5\u0308\u0301",
        "\u1FE2": "\u03C5\u0308\u0300",
        "\u1FE1": "\u03C5\u0304",
        "\u1FE0": "\u03C5\u0306",
        "\u03CE": "\u03C9\u0301",
        "\u1F7C": "\u03C9\u0300",
        "\u038E": "\u03A5\u0301",
        "\u1FEA": "\u03A5\u0300",
        "\u03AB": "\u03A5\u0308",
        "\u1FE9": "\u03A5\u0304",
        "\u1FE8": "\u03A5\u0306",
        "\u038F": "\u03A9\u0301",
        "\u1FFA": "\u03A9\u0300"
      };
      Parser = class _Parser2 {
        static {
          __name(this, "Parser");
        }
        constructor(input, settings) {
          this.mode = "math";
          this.gullet = new MacroExpander(input, settings, this.mode);
          this.settings = settings;
          this.leftrightDepth = 0;
          this.nextToken = null;
        }
        /**
         * Checks a result to make sure it has the right type, and throws an
         * appropriate error otherwise.
         */
        expect(text4, consume) {
          if (consume === void 0) {
            consume = true;
          }
          if (this.fetch().text !== text4) {
            throw new ParseError("Expected '" + text4 + "', got '" + this.fetch().text + "'", this.fetch());
          }
          if (consume) {
            this.consume();
          }
        }
        /**
         * Discards the current lookahead token, considering it consumed.
         */
        consume() {
          this.nextToken = null;
        }
        /**
         * Return the current lookahead token, or if there isn't one (at the
         * beginning, or if the previous lookahead token was consume()d),
         * fetch the next token as the new lookahead token and return it.
         */
        fetch() {
          if (this.nextToken == null) {
            this.nextToken = this.gullet.expandNextToken();
          }
          return this.nextToken;
        }
        /**
         * Switches between "text" and "math" modes.
         */
        switchMode(newMode) {
          this.mode = newMode;
          this.gullet.switchMode(newMode);
        }
        /**
         * Main parsing function, which parses an entire input.
         */
        parse() {
          if (!this.settings.globalGroup) {
            this.gullet.beginGroup();
          }
          if (this.settings.colorIsTextColor) {
            this.gullet.macros.set("\\color", "\\textcolor");
          }
          try {
            var parse7 = this.parseExpression(false);
            this.expect("EOF");
            if (!this.settings.globalGroup) {
              this.gullet.endGroup();
            }
            return parse7;
          } finally {
            this.gullet.endGroups();
          }
        }
        /**
         * Fully parse a separate sequence of tokens as a separate job.
         * Tokens should be specified in reverse order, as in a MacroDefinition.
         */
        subparse(tokens2) {
          var oldToken = this.nextToken;
          this.consume();
          this.gullet.pushToken(new Token("}"));
          this.gullet.pushTokens(tokens2);
          var parse7 = this.parseExpression(false);
          this.expect("}");
          this.nextToken = oldToken;
          return parse7;
        }
        /**
         * Parses an "expression", which is a list of atoms.
         *
         * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This
         *                 happens when functions have higher precedence than infix
         *                 nodes in implicit parses.
         *
         * `breakOnTokenText`: The text of the token that the expression should end
         *                     with, or `null` if something else should end the
         *                     expression.
         */
        parseExpression(breakOnInfix, breakOnTokenText) {
          var body = [];
          while (true) {
            if (this.mode === "math") {
              this.consumeSpaces();
            }
            var lex = this.fetch();
            if (_Parser2.endOfExpression.has(lex.text)) {
              break;
            }
            if (breakOnTokenText && lex.text === breakOnTokenText) {
              break;
            }
            if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {
              break;
            }
            var atom2 = this.parseAtom(breakOnTokenText);
            if (!atom2) {
              break;
            } else if (atom2.type === "internal") {
              continue;
            }
            body.push(atom2);
          }
          if (this.mode === "text") {
            this.formLigatures(body);
          }
          return this.handleInfixNodes(body);
        }
        /**
         * Rewrites infix operators such as \over with corresponding commands such
         * as \frac.
         *
         * There can only be one infix operator per group.  If there's more than one
         * then the expression is ambiguous.  This can be resolved by adding {}.
         */
        handleInfixNodes(body) {
          var overIndex = -1;
          var funcName;
          for (var i2 = 0; i2 < body.length; i2++) {
            var node2 = body[i2];
            if (node2.type === "infix") {
              if (overIndex !== -1) {
                throw new ParseError("only one infix operator per group", node2.token);
              }
              overIndex = i2;
              funcName = node2.replaceWith;
            }
          }
          if (overIndex !== -1 && funcName) {
            var numerNode;
            var denomNode;
            var numerBody = body.slice(0, overIndex);
            var denomBody = body.slice(overIndex + 1);
            if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
              numerNode = numerBody[0];
            } else {
              numerNode = {
                type: "ordgroup",
                mode: this.mode,
                body: numerBody
              };
            }
            if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
              denomNode = denomBody[0];
            } else {
              denomNode = {
                type: "ordgroup",
                mode: this.mode,
                body: denomBody
              };
            }
            var _node;
            if (funcName === "\\\\abovefrac") {
              _node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);
            } else {
              _node = this.callFunction(funcName, [numerNode, denomNode], []);
            }
            return [_node];
          } else {
            return body;
          }
        }
        /**
         * Handle a subscript or superscript with nice errors.
         */
        handleSupSubscript(name) {
          var symbolToken = this.fetch();
          var symbol = symbolToken.text;
          this.consume();
          this.consumeSpaces();
          var group2;
          do {
            var _group;
            group2 = this.parseGroup(name);
          } while (((_group = group2) == null ? void 0 : _group.type) === "internal");
          if (!group2) {
            throw new ParseError("Expected group after '" + symbol + "'", symbolToken);
          }
          return group2;
        }
        /**
         * Converts the textual input of an unsupported command into a text node
         * contained within a color node whose color is determined by errorColor
         */
        formatUnsupportedCmd(text4) {
          var textordArray = [];
          for (var i2 = 0; i2 < text4.length; i2++) {
            textordArray.push({
              type: "textord",
              mode: "text",
              text: text4[i2]
            });
          }
          var textNode = {
            type: "text",
            mode: this.mode,
            body: textordArray
          };
          var colorNode = {
            type: "color",
            mode: this.mode,
            color: this.settings.errorColor,
            body: [textNode]
          };
          return colorNode;
        }
        /**
         * Parses a group with optional super/subscripts.
         */
        parseAtom(breakOnTokenText) {
          var base = this.parseGroup("atom", breakOnTokenText);
          if ((base == null ? void 0 : base.type) === "internal") {
            return base;
          }
          if (this.mode === "text") {
            return base;
          }
          var superscript;
          var subscript;
          while (true) {
            this.consumeSpaces();
            var lex = this.fetch();
            if (lex.text === "\\limits" || lex.text === "\\nolimits") {
              if (base && base.type === "op") {
                var limits = lex.text === "\\limits";
                base.limits = limits;
                base.alwaysHandleSupSub = true;
              } else if (base && base.type === "operatorname") {
                if (base.alwaysHandleSupSub) {
                  base.limits = lex.text === "\\limits";
                }
              } else {
                throw new ParseError("Limit controls must follow a math operator", lex);
              }
              this.consume();
            } else if (lex.text === "^") {
              if (superscript) {
                throw new ParseError("Double superscript", lex);
              }
              superscript = this.handleSupSubscript("superscript");
            } else if (lex.text === "_") {
              if (subscript) {
                throw new ParseError("Double subscript", lex);
              }
              subscript = this.handleSupSubscript("subscript");
            } else if (lex.text === "'") {
              if (superscript) {
                throw new ParseError("Double superscript", lex);
              }
              var prime = {
                type: "textord",
                mode: this.mode,
                text: "\\prime"
              };
              var primes = [prime];
              this.consume();
              while (this.fetch().text === "'") {
                primes.push(prime);
                this.consume();
              }
              if (this.fetch().text === "^") {
                primes.push(this.handleSupSubscript("superscript"));
              }
              superscript = {
                type: "ordgroup",
                mode: this.mode,
                body: primes
              };
            } else if (uSubsAndSups[lex.text]) {
              var isSub = unicodeSubRegEx.test(lex.text);
              var subsupTokens = [];
              subsupTokens.push(new Token(uSubsAndSups[lex.text]));
              this.consume();
              while (true) {
                var token2 = this.fetch().text;
                if (!uSubsAndSups[token2]) {
                  break;
                }
                if (unicodeSubRegEx.test(token2) !== isSub) {
                  break;
                }
                subsupTokens.unshift(new Token(uSubsAndSups[token2]));
                this.consume();
              }
              var body = this.subparse(subsupTokens);
              if (isSub) {
                subscript = {
                  type: "ordgroup",
                  mode: "math",
                  body
                };
              } else {
                superscript = {
                  type: "ordgroup",
                  mode: "math",
                  body
                };
              }
            } else {
              break;
            }
          }
          if (superscript || subscript) {
            return {
              type: "supsub",
              mode: this.mode,
              base,
              sup: superscript,
              sub: subscript
            };
          } else {
            return base;
          }
        }
        /**
         * Parses an entire function, including its base and all of its arguments.
         */
        parseFunction(breakOnTokenText, name) {
          var token2 = this.fetch();
          var func = token2.text;
          var funcData = functions[func];
          if (!funcData) {
            return null;
          }
          this.consume();
          if (name && name !== "atom" && !funcData.allowedInArgument) {
            throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token2);
          } else if (this.mode === "text" && !funcData.allowedInText) {
            throw new ParseError("Can't use function '" + func + "' in text mode", token2);
          } else if (this.mode === "math" && funcData.allowedInMath === false) {
            throw new ParseError("Can't use function '" + func + "' in math mode", token2);
          }
          var {
            args,
            optArgs
          } = this.parseArguments(func, funcData);
          return this.callFunction(func, args, optArgs, token2, breakOnTokenText);
        }
        /**
         * Call a function handler with a suitable context and arguments.
         */
        callFunction(name, args, optArgs, token2, breakOnTokenText) {
          var context = {
            funcName: name,
            parser: this,
            token: token2,
            breakOnTokenText
          };
          var func = functions[name];
          if (func && func.handler) {
            return func.handler(context, args, optArgs);
          } else {
            throw new ParseError("No function handler for " + name);
          }
        }
        /**
         * Parses the arguments of a function or environment
         */
        parseArguments(func, funcData) {
          var totalArgs = funcData.numArgs + funcData.numOptionalArgs;
          if (totalArgs === 0) {
            return {
              args: [],
              optArgs: []
            };
          }
          var args = [];
          var optArgs = [];
          for (var i2 = 0; i2 < totalArgs; i2++) {
            var argType = funcData.argTypes && funcData.argTypes[i2];
            var isOptional = i2 < funcData.numOptionalArgs;
            if ("primitive" in funcData && funcData.primitive && argType == null || // \sqrt expands into primitive if optional argument doesn't exist
            funcData.type === "sqrt" && i2 === 1 && optArgs[0] == null) {
              argType = "primitive";
            }
            var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional);
            if (isOptional) {
              optArgs.push(arg);
            } else if (arg != null) {
              args.push(arg);
            } else {
              throw new ParseError("Null argument, please report this as a bug");
            }
          }
          return {
            args,
            optArgs
          };
        }
        /**
         * Parses a group when the mode is changing.
         */
        parseGroupOfType(name, type3, optional2) {
          switch (type3) {
            case "color":
              return this.parseColorGroup(optional2);
            case "size":
              return this.parseSizeGroup(optional2);
            case "url":
              return this.parseUrlGroup(optional2);
            case "math":
            case "text":
              return this.parseArgumentGroup(optional2, type3);
            case "hbox": {
              var group2 = this.parseArgumentGroup(optional2, "text");
              return group2 != null ? {
                type: "styling",
                mode: group2.mode,
                body: [group2],
                style: "text"
                // simulate \textstyle
              } : null;
            }
            case "raw": {
              var token2 = this.parseStringGroup("raw", optional2);
              return token2 != null ? {
                type: "raw",
                mode: "text",
                string: token2.text
              } : null;
            }
            case "primitive": {
              if (optional2) {
                throw new ParseError("A primitive argument cannot be optional");
              }
              var _group2 = this.parseGroup(name);
              if (_group2 == null) {
                throw new ParseError("Expected group as " + name, this.fetch());
              }
              return _group2;
            }
            case "original":
            case null:
            case void 0:
              return this.parseArgumentGroup(optional2);
            default:
              throw new ParseError("Unknown group type as " + name, this.fetch());
          }
        }
        /**
         * Discard any space tokens, fetching the next non-space token.
         */
        consumeSpaces() {
          while (this.fetch().text === " ") {
            this.consume();
          }
        }
        /**
         * Parses a group, essentially returning the string formed by the
         * brace-enclosed tokens plus some position information.
         */
        parseStringGroup(modeName, optional2) {
          var argToken = this.gullet.scanArgument(optional2);
          if (argToken == null) {
            return null;
          }
          var str2 = "";
          var nextToken;
          while ((nextToken = this.fetch()).text !== "EOF") {
            str2 += nextToken.text;
            this.consume();
          }
          this.consume();
          argToken.text = str2;
          return argToken;
        }
        /**
         * Parses a regex-delimited group: the largest sequence of tokens
         * whose concatenated strings match `regex`. Returns the string
         * formed by the tokens plus some position information.
         */
        parseRegexGroup(regex2, modeName) {
          var firstToken = this.fetch();
          var lastToken = firstToken;
          var str2 = "";
          var nextToken;
          while ((nextToken = this.fetch()).text !== "EOF" && regex2.test(str2 + nextToken.text)) {
            lastToken = nextToken;
            str2 += lastToken.text;
            this.consume();
          }
          if (str2 === "") {
            throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken);
          }
          return firstToken.range(lastToken, str2);
        }
        /**
         * Parses a color description.
         */
        parseColorGroup(optional2) {
          var res = this.parseStringGroup("color", optional2);
          if (res == null) {
            return null;
          }
          var match3 = /^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);
          if (!match3) {
            throw new ParseError("Invalid color: '" + res.text + "'", res);
          }
          var color2 = match3[0];
          if (/^[0-9a-f]{6}$/i.test(color2)) {
            color2 = "#" + color2;
          }
          return {
            type: "color-token",
            mode: this.mode,
            color: color2
          };
        }
        /**
         * Parses a size specification, consisting of magnitude and unit.
         */
        parseSizeGroup(optional2) {
          var res;
          var isBlank = false;
          this.gullet.consumeSpaces();
          if (!optional2 && this.gullet.future().text !== "{") {
            res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
          } else {
            res = this.parseStringGroup("size", optional2);
          }
          if (!res) {
            return null;
          }
          if (!optional2 && res.text.length === 0) {
            res.text = "0pt";
            isBlank = true;
          }
          var match3 = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
          if (!match3) {
            throw new ParseError("Invalid size: '" + res.text + "'", res);
          }
          var data6 = {
            number: +(match3[1] + match3[2]),
            // sign + magnitude, cast to number
            unit: match3[3]
          };
          if (!validUnit(data6)) {
            throw new ParseError("Invalid unit: '" + data6.unit + "'", res);
          }
          return {
            type: "size",
            mode: this.mode,
            value: data6,
            isBlank
          };
        }
        /**
         * Parses an URL, checking escaped letters and allowed protocols,
         * and setting the catcode of % as an active character (as in \hyperref).
         */
        parseUrlGroup(optional2) {
          this.gullet.lexer.setCatcode("%", 13);
          this.gullet.lexer.setCatcode("~", 12);
          var res = this.parseStringGroup("url", optional2);
          this.gullet.lexer.setCatcode("%", 14);
          this.gullet.lexer.setCatcode("~", 13);
          if (res == null) {
            return null;
          }
          var url = res.text.replace(/\\([#$%&~_^{}])/g, "$1");
          return {
            type: "url",
            mode: this.mode,
            url
          };
        }
        /**
         * Parses an argument with the mode specified.
         */
        parseArgumentGroup(optional2, mode) {
          var argToken = this.gullet.scanArgument(optional2);
          if (argToken == null) {
            return null;
          }
          var outerMode = this.mode;
          if (mode) {
            this.switchMode(mode);
          }
          this.gullet.beginGroup();
          var expression = this.parseExpression(false, "EOF");
          this.expect("EOF");
          this.gullet.endGroup();
          var result = {
            type: "ordgroup",
            mode: this.mode,
            loc: argToken.loc,
            body: expression
          };
          if (mode) {
            this.switchMode(outerMode);
          }
          return result;
        }
        /**
         * Parses an ordinary group, which is either a single nucleus (like "x")
         * or an expression in braces (like "{x+y}") or an implicit group, a group
         * that starts at the current position, and ends right before a higher explicit
         * group ends, or at EOF.
         */
        parseGroup(name, breakOnTokenText) {
          var firstToken = this.fetch();
          var text4 = firstToken.text;
          var result;
          if (text4 === "{" || text4 === "\\begingroup") {
            this.consume();
            var groupEnd = text4 === "{" ? "}" : "\\endgroup";
            this.gullet.beginGroup();
            var expression = this.parseExpression(false, groupEnd);
            var lastToken = this.fetch();
            this.expect(groupEnd);
            this.gullet.endGroup();
            result = {
              type: "ordgroup",
              mode: this.mode,
              loc: SourceLocation.range(firstToken, lastToken),
              body: expression,
              // A group formed by \begingroup...\endgroup is a semi-simple group
              // which doesn't affect spacing in math mode, i.e., is transparent.
              // https://tex.stackexchange.com/questions/1930/when-should-one-
              // use-begingroup-instead-of-bgroup
              semisimple: text4 === "\\begingroup" || void 0
            };
          } else {
            result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();
            if (result == null && text4[0] === "\\" && !implicitCommands.hasOwnProperty(text4)) {
              if (this.settings.throwOnError) {
                throw new ParseError("Undefined control sequence: " + text4, firstToken);
              }
              result = this.formatUnsupportedCmd(text4);
              this.consume();
            }
          }
          return result;
        }
        /**
         * Form ligature-like combinations of characters for text mode.
         * This includes inputs like "--", "---", "``" and "''".
         * The result will simply replace multiple textord nodes with a single
         * character in each value by a single textord node having multiple
         * characters in its value.  The representation is still ASCII source.
         * The group will be modified in place.
         */
        formLigatures(group2) {
          var n2 = group2.length - 1;
          for (var i2 = 0; i2 < n2; ++i2) {
            var a2 = group2[i2];
            if (a2.type !== "textord") {
              continue;
            }
            var v3 = a2.text;
            var next3 = group2[i2 + 1];
            if (!next3 || next3.type !== "textord") {
              continue;
            }
            if (v3 === "-" && next3.text === "-") {
              var afterNext = group2[i2 + 2];
              if (i2 + 1 < n2 && afterNext && afterNext.type === "textord" && afterNext.text === "-") {
                group2.splice(i2, 3, {
                  type: "textord",
                  mode: "text",
                  loc: SourceLocation.range(a2, afterNext),
                  text: "---"
                });
                n2 -= 2;
              } else {
                group2.splice(i2, 2, {
                  type: "textord",
                  mode: "text",
                  loc: SourceLocation.range(a2, next3),
                  text: "--"
                });
                n2 -= 1;
              }
            }
            if ((v3 === "'" || v3 === "`") && next3.text === v3) {
              group2.splice(i2, 2, {
                type: "textord",
                mode: "text",
                loc: SourceLocation.range(a2, next3),
                text: v3 + v3
              });
              n2 -= 1;
            }
          }
        }
        /**
         * Parse a single symbol out of the string. Here, we handle single character
         * symbols and special functions like \verb.
         */
        parseSymbol() {
          var nucleus = this.fetch();
          var text4 = nucleus.text;
          if (/^\\verb[^a-zA-Z]/.test(text4)) {
            this.consume();
            var arg = text4.slice(5);
            var star2 = arg.charAt(0) === "*";
            if (star2) {
              arg = arg.slice(1);
            }
            if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {
              throw new ParseError("\\verb assertion failed --\n                    please report what input caused this bug");
            }
            arg = arg.slice(1, -1);
            return {
              type: "verb",
              mode: "text",
              body: arg,
              star: star2
            };
          }
          if (unicodeSymbols.hasOwnProperty(text4[0]) && !symbols[this.mode][text4[0]]) {
            if (this.settings.strict && this.mode === "math") {
              this.settings.reportNonstrict("unicodeTextInMathMode", 'Accented Unicode text character "' + text4[0] + '" used in math mode', nucleus);
            }
            text4 = unicodeSymbols[text4[0]] + text4.slice(1);
          }
          var match3 = combiningDiacriticalMarksEndRegex.exec(text4);
          if (match3) {
            text4 = text4.substring(0, match3.index);
            if (text4 === "i") {
              text4 = "\u0131";
            } else if (text4 === "j") {
              text4 = "\u0237";
            }
          }
          var symbol;
          if (symbols[this.mode][text4]) {
            if (this.settings.strict && this.mode === "math" && extraLatin.includes(text4)) {
              this.settings.reportNonstrict("unicodeTextInMathMode", 'Latin-1/Unicode text character "' + text4[0] + '" used in math mode', nucleus);
            }
            var group2 = symbols[this.mode][text4].group;
            var loc = SourceLocation.range(nucleus);
            var s2;
            if (ATOMS.hasOwnProperty(group2)) {
              var family = group2;
              s2 = {
                type: "atom",
                mode: this.mode,
                family,
                loc,
                text: text4
              };
            } else {
              s2 = {
                type: group2,
                mode: this.mode,
                loc,
                text: text4
              };
            }
            symbol = s2;
          } else if (text4.charCodeAt(0) >= 128) {
            if (this.settings.strict) {
              if (!supportedCodepoint(text4.charCodeAt(0))) {
                this.settings.reportNonstrict("unknownSymbol", 'Unrecognized Unicode character "' + text4[0] + '"' + (" (" + text4.charCodeAt(0) + ")"), nucleus);
              } else if (this.mode === "math") {
                this.settings.reportNonstrict("unicodeTextInMathMode", 'Unicode text character "' + text4[0] + '" used in math mode', nucleus);
              }
            }
            symbol = {
              type: "textord",
              mode: "text",
              loc: SourceLocation.range(nucleus),
              text: text4
            };
          } else {
            return null;
          }
          this.consume();
          if (match3) {
            for (var i2 = 0; i2 < match3[0].length; i2++) {
              var accent2 = match3[0][i2];
              if (!unicodeAccents[accent2]) {
                throw new ParseError("Unknown accent ' " + accent2 + "'", nucleus);
              }
              var command = unicodeAccents[accent2][this.mode] || unicodeAccents[accent2].text;
              if (!command) {
                throw new ParseError("Accent " + accent2 + " unsupported in " + this.mode + " mode", nucleus);
              }
              symbol = {
                type: "accent",
                mode: this.mode,
                loc: SourceLocation.range(nucleus),
                label: command,
                isStretchy: false,
                isShifty: true,
                // TODO(ts)
                base: symbol
              };
            }
          }
          return symbol;
        }
      };
      Parser.endOfExpression = /* @__PURE__ */ new Set(["}", "\\endgroup", "\\end", "\\right", "&"]);
      parseTree = /* @__PURE__ */ __name(function parseTree2(toParse, settings) {
        if (!(typeof toParse === "string" || toParse instanceof String)) {
          throw new TypeError("KaTeX can only parse string typed expression");
        }
        var parser34 = new Parser(toParse, settings);
        delete parser34.gullet.macros.current["\\df@tag"];
        var tree = parser34.parse();
        delete parser34.gullet.macros.current["\\current@color"];
        delete parser34.gullet.macros.current["\\color"];
        if (parser34.gullet.macros.get("\\df@tag")) {
          if (!settings.displayMode) {
            throw new ParseError("\\tag works only in display equations");
          }
          tree = [{
            type: "tag",
            mode: "text",
            body: tree,
            tag: parser34.subparse([new Token("\\df@tag")])
          }];
        }
        return tree;
      }, "parseTree");
      render = /* @__PURE__ */ __name(function render2(expression, baseNode, options2) {
        baseNode.textContent = "";
        var node2 = renderToDomTree(expression, options2).toNode();
        baseNode.appendChild(node2);
      }, "render");
      if (typeof document !== "undefined") {
        if (document.compatMode !== "CSS1Compat") {
          typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.");
          render = /* @__PURE__ */ __name(function render10() {
            throw new ParseError("KaTeX doesn't work in quirks mode.");
          }, "render");
        }
      }
      renderToString = /* @__PURE__ */ __name(function renderToString2(expression, options2) {
        var markup = renderToDomTree(expression, options2).toMarkup();
        return markup;
      }, "renderToString");
      generateParseTree = /* @__PURE__ */ __name(function generateParseTree2(expression, options2) {
        var settings = new Settings(options2);
        return parseTree(expression, settings);
      }, "generateParseTree");
      renderError = /* @__PURE__ */ __name(function renderError2(error3, expression, options2) {
        if (options2.throwOnError || !(error3 instanceof ParseError)) {
          throw error3;
        }
        var node2 = makeSpan(["katex-error"], [new SymbolNode(expression)]);
        node2.setAttribute("title", error3.toString());
        node2.setAttribute("style", "color:" + options2.errorColor);
        return node2;
      }, "renderError");
      renderToDomTree = /* @__PURE__ */ __name(function renderToDomTree2(expression, options2) {
        var settings = new Settings(options2);
        try {
          var tree = parseTree(expression, settings);
          return buildTree(tree, expression, settings);
        } catch (error3) {
          return renderError(error3, expression, settings);
        }
      }, "renderToDomTree");
      renderToHTMLTree = /* @__PURE__ */ __name(function renderToHTMLTree2(expression, options2) {
        var settings = new Settings(options2);
        try {
          var tree = parseTree(expression, settings);
          return buildHTMLTree(tree, expression, settings);
        } catch (error3) {
          return renderError(error3, expression, settings);
        }
      }, "renderToHTMLTree");
      version = "0.16.45";
      __domTree = {
        Span,
        Anchor,
        SymbolNode,
        SvgNode,
        PathNode,
        LineNode
      };
      katex = {
        /**
         * Current KaTeX version
         */
        version,
        /**
         * Renders the given LaTeX into an HTML+MathML combination, and adds
         * it as a child to the specified DOM node.
         */
        render,
        /**
         * Renders the given LaTeX into an HTML+MathML combination string,
         * for sending to the client.
         */
        renderToString,
        /**
         * KaTeX error, usually during parsing.
         */
        ParseError,
        /**
         * The schema of Settings
         */
        SETTINGS_SCHEMA,
        /**
         * Parses the given LaTeX into KaTeX's internal parse tree structure,
         * without rendering to HTML or MathML.
         *
         * NOTE: This method is not currently recommended for public use.
         * The internal tree representation is unstable and is very likely
         * to change. Use at your own risk.
         */
        __parse: generateParseTree,
        /**
         * Renders the given LaTeX into an HTML+MathML internal DOM tree
         * representation, without flattening that representation to a string.
         *
         * NOTE: This method is not currently recommended for public use.
         * The internal tree representation is unstable and is very likely
         * to change. Use at your own risk.
         */
        __renderToDomTree: renderToDomTree,
        /**
         * Renders the given LaTeX into an HTML internal DOM tree representation,
         * without MathML and without flattening that representation to a string.
         *
         * NOTE: This method is not currently recommended for public use.
         * The internal tree representation is unstable and is very likely
         * to change. Use at your own risk.
         */
        __renderToHTMLTree: renderToHTMLTree,
        /**
         * extends internal font metrics object with a new object
         * each key in the new object represents a font name
        */
        __setFontMetrics: setFontMetrics,
        /**
         * adds a new symbol to builtin symbols table
         */
        __defineSymbol: defineSymbol,
        /**
         * adds a new function to builtin function list,
         * which directly produce parse tree elements
         * and have their own html/mathml builders
         */
        __defineFunction: defineFunction,
        /**
         * adds a new macro to builtin macro list
         */
        __defineMacro: defineMacro,
        /**
         * Expose the dom tree node types, which can be useful for type checking nodes.
         *
         * NOTE: These methods are not currently recommended for public use.
         * The internal tree representation is unstable and is very likely
         * to change. Use at your own risk.
         */
        __domTree
      };
    }
  });

  // src/diagrams/common/common.ts
  function setupDompurifyHooks() {
    const TEMPORARY_ATTRIBUTE = "data-temp-href-target";
    purify.addHook("beforeSanitizeAttributes", (node2) => {
      if (node2.tagName === "A" && node2.hasAttribute("target")) {
        node2.setAttribute(TEMPORARY_ATTRIBUTE, node2.getAttribute("target") ?? "");
      }
    });
    purify.addHook("afterSanitizeAttributes", (node2) => {
      if (node2.tagName === "A" && node2.hasAttribute(TEMPORARY_ATTRIBUTE)) {
        node2.setAttribute("target", node2.getAttribute(TEMPORARY_ATTRIBUTE) ?? "");
        node2.removeAttribute(TEMPORARY_ATTRIBUTE);
        if (node2.getAttribute("target") === "_blank") {
          node2.setAttribute("rel", "noopener");
        }
      }
    });
  }
  var lineBreakRegex, getRows, setupDompurifyHooksIfNotSetup, removeScript, sanitizeMore, sanitizeText, sanitizeTextOrArray, hasBreaks, splitBreaks, placeholderToBreak, breakToPlaceholder, getUrl, getMax, getMin, parseGenericTypes, countOccurrence, shouldCombineSets, processSet, isMathMLSupported, katexRegex, hasKatex, calculateMathMLDimensions, renderKatexUnsanitized, renderKatexSanitized, common_default;
  var init_common = __esm({
    "src/diagrams/common/common.ts"() {
      "use strict";
      init_purify_es();
      init_config();
      lineBreakRegex = /<br\s*\/?>/gi;
      getRows = /* @__PURE__ */ __name((s2) => {
        if (!s2) {
          return [""];
        }
        const str2 = breakToPlaceholder(s2).replace(/\\n/g, "#br#");
        return str2.split("#br#");
      }, "getRows");
      setupDompurifyHooksIfNotSetup = /* @__PURE__ */ (() => {
        let setup = false;
        return () => {
          if (!setup) {
            setupDompurifyHooks();
            setup = true;
          }
        };
      })();
      __name(setupDompurifyHooks, "setupDompurifyHooks");
      removeScript = /* @__PURE__ */ __name((txt) => {
        setupDompurifyHooksIfNotSetup();
        const sanitizedText = purify.sanitize(txt);
        return sanitizedText;
      }, "removeScript");
      sanitizeMore = /* @__PURE__ */ __name((text4, config3) => {
        if (getEffectiveHtmlLabels(config3)) {
          const level = config3.securityLevel;
          if (level === "antiscript" || level === "strict" || level === "sandbox") {
            text4 = removeScript(text4);
          } else if (level !== "loose") {
            text4 = breakToPlaceholder(text4);
            text4 = text4.replace(/</g, "&lt;").replace(/>/g, "&gt;");
            text4 = text4.replace(/=/g, "&equals;");
            text4 = placeholderToBreak(text4);
          }
        }
        return text4;
      }, "sanitizeMore");
      sanitizeText = /* @__PURE__ */ __name((text4, config3) => {
        if (!text4) {
          return text4;
        }
        if (config3.dompurifyConfig) {
          text4 = purify.sanitize(sanitizeMore(text4, config3), config3.dompurifyConfig).toString();
        } else {
          text4 = purify.sanitize(sanitizeMore(text4, config3), {
            FORBID_TAGS: ["style"]
          }).toString();
        }
        return text4;
      }, "sanitizeText");
      sanitizeTextOrArray = /* @__PURE__ */ __name((a2, config3) => {
        if (typeof a2 === "string") {
          return sanitizeText(a2, config3);
        }
        return a2.flat().map((x5) => sanitizeText(x5, config3));
      }, "sanitizeTextOrArray");
      hasBreaks = /* @__PURE__ */ __name((text4) => {
        return lineBreakRegex.test(text4);
      }, "hasBreaks");
      splitBreaks = /* @__PURE__ */ __name((text4) => {
        return text4.split(lineBreakRegex);
      }, "splitBreaks");
      placeholderToBreak = /* @__PURE__ */ __name((s2) => {
        return s2.replace(/#br#/g, "<br/>");
      }, "placeholderToBreak");
      breakToPlaceholder = /* @__PURE__ */ __name((s2) => {
        return s2.replace(lineBreakRegex, "#br#");
      }, "breakToPlaceholder");
      getUrl = /* @__PURE__ */ __name((useAbsolute) => {
        let url = "";
        if (useAbsolute) {
          url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
          url = CSS.escape(url);
        }
        return url;
      }, "getUrl");
      getMax = /* @__PURE__ */ __name(function(...values3) {
        const newValues = values3.filter((value2) => {
          return !isNaN(value2);
        });
        return Math.max(...newValues);
      }, "getMax");
      getMin = /* @__PURE__ */ __name(function(...values3) {
        const newValues = values3.filter((value2) => {
          return !isNaN(value2);
        });
        return Math.min(...newValues);
      }, "getMin");
      parseGenericTypes = /* @__PURE__ */ __name(function(input) {
        const inputSets = input.split(/(,)/);
        const output2 = [];
        for (let i2 = 0; i2 < inputSets.length; i2++) {
          let thisSet = inputSets[i2];
          if (thisSet === "," && i2 > 0 && i2 + 1 < inputSets.length) {
            const previousSet = inputSets[i2 - 1];
            const nextSet = inputSets[i2 + 1];
            if (shouldCombineSets(previousSet, nextSet)) {
              thisSet = previousSet + "," + nextSet;
              i2++;
              output2.pop();
            }
          }
          output2.push(processSet(thisSet));
        }
        return output2.join("");
      }, "parseGenericTypes");
      countOccurrence = /* @__PURE__ */ __name((string3, substring) => {
        return Math.max(0, string3.split(substring).length - 1);
      }, "countOccurrence");
      shouldCombineSets = /* @__PURE__ */ __name((previousSet, nextSet) => {
        const prevCount = countOccurrence(previousSet, "~");
        const nextCount = countOccurrence(nextSet, "~");
        return prevCount === 1 && nextCount === 1;
      }, "shouldCombineSets");
      processSet = /* @__PURE__ */ __name((input) => {
        const tildeCount = countOccurrence(input, "~");
        let hasStartingTilde = false;
        if (tildeCount <= 1) {
          return input;
        }
        if (tildeCount % 2 !== 0 && input.startsWith("~")) {
          input = input.substring(1);
          hasStartingTilde = true;
        }
        const chars = [...input];
        let first3 = chars.indexOf("~");
        let last4 = chars.lastIndexOf("~");
        while (first3 !== -1 && last4 !== -1 && first3 !== last4) {
          chars[first3] = "<";
          chars[last4] = ">";
          first3 = chars.indexOf("~");
          last4 = chars.lastIndexOf("~");
        }
        if (hasStartingTilde) {
          chars.unshift("~");
        }
        return chars.join("");
      }, "processSet");
      isMathMLSupported = /* @__PURE__ */ __name(() => window.MathMLElement !== void 0, "isMathMLSupported");
      katexRegex = /\$\$(.*?)\$\$/g;
      hasKatex = /* @__PURE__ */ __name((text4) => (text4.match(katexRegex)?.length ?? 0) > 0, "hasKatex");
      calculateMathMLDimensions = /* @__PURE__ */ __name(async (text4, config3) => {
        const divElem = document.createElement("div");
        divElem.innerHTML = await renderKatexSanitized(text4, config3);
        divElem.id = "katex-temp";
        divElem.style.visibility = "hidden";
        divElem.style.position = "absolute";
        divElem.style.top = "0";
        const body = document.querySelector("body");
        body?.insertAdjacentElement("beforeend", divElem);
        const dim = { width: divElem.clientWidth, height: divElem.clientHeight };
        divElem.remove();
        return dim;
      }, "calculateMathMLDimensions");
      renderKatexUnsanitized = /* @__PURE__ */ __name(async (text4, config3) => {
        if (!hasKatex(text4)) {
          return text4;
        }
        if (!(isMathMLSupported() || config3.legacyMathML || config3.forceLegacyMathML)) {
          return text4.replace(katexRegex, "MathML is unsupported in this environment.");
        }
        if (true) {
          const { default: katex2 } = await Promise.resolve().then(() => (init_katex(), katex_exports));
          const outputMode = config3.forceLegacyMathML || !isMathMLSupported() && config3.legacyMathML ? "htmlAndMathml" : "mathml";
          return text4.split(lineBreakRegex).map(
            (line2) => hasKatex(line2) ? `<div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">${line2}</div>` : `<div>${line2}</div>`
          ).join("").replace(
            katexRegex,
            (_3, c3) => katex2.renderToString(c3, {
              throwOnError: true,
              displayMode: true,
              output: outputMode
            }).replace(/\n/g, " ").replace(/<annotation.*<\/annotation>/g, "")
          );
        }
        return text4.replace(
          katexRegex,
          "Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library."
        );
      }, "renderKatexUnsanitized");
      renderKatexSanitized = /* @__PURE__ */ __name(async (text4, config3) => {
        return sanitizeText(await renderKatexUnsanitized(text4, config3), config3);
      }, "renderKatexSanitized");
      common_default = {
        getRows,
        sanitizeText,
        sanitizeTextOrArray,
        hasBreaks,
        splitBreaks,
        lineBreakRegex,
        removeScript,
        getUrl,
        evaluate,
        getMax,
        getMin
      };
    }
  });

  // src/rendering-util/icons.ts
  var unknownIcon, iconsStore, loaderStore, registerIconPacks, getRegisteredIconData, isIconAvailable, getIconSVG;
  var init_icons = __esm({
    "src/rendering-util/icons.ts"() {
      "use strict";
      init_lib();
      init_config();
      init_common();
      init_logger();
      unknownIcon = {
        body: '<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/><text transform="translate(21.16 64.67)" style="fill: #fff; font-family: ArialMT, Arial; font-size: 67.75px;"><tspan x="0" y="0">?</tspan></text></g>',
        height: 80,
        width: 80
      };
      iconsStore = /* @__PURE__ */ new Map();
      loaderStore = /* @__PURE__ */ new Map();
      registerIconPacks = /* @__PURE__ */ __name((iconLoaders) => {
        for (const iconLoader of iconLoaders) {
          if (!iconLoader.name) {
            throw new Error(
              'Invalid icon loader. Must have a "name" property with non-empty string value.'
            );
          }
          log.debug("Registering icon pack:", iconLoader.name);
          if ("loader" in iconLoader) {
            loaderStore.set(iconLoader.name, iconLoader.loader);
          } else if ("icons" in iconLoader) {
            iconsStore.set(iconLoader.name, iconLoader.icons);
          } else {
            log.error("Invalid icon loader:", iconLoader);
            throw new Error('Invalid icon loader. Must have either "icons" or "loader" property.');
          }
        }
      }, "registerIconPacks");
      getRegisteredIconData = /* @__PURE__ */ __name(async (iconName, fallbackPrefix) => {
        const data6 = stringToIcon(iconName, true, fallbackPrefix !== void 0);
        if (!data6) {
          throw new Error(`Invalid icon name: ${iconName}`);
        }
        const prefix = data6.prefix || fallbackPrefix;
        if (!prefix) {
          throw new Error(`Icon name must contain a prefix: ${iconName}`);
        }
        let icons = iconsStore.get(prefix);
        if (!icons) {
          const loader40 = loaderStore.get(prefix);
          if (!loader40) {
            throw new Error(`Icon set not found: ${data6.prefix}`);
          }
          try {
            const loaded = await loader40();
            icons = { ...loaded, prefix };
            iconsStore.set(prefix, icons);
          } catch (e3) {
            log.error(e3);
            throw new Error(`Failed to load icon set: ${data6.prefix}`);
          }
        }
        const iconData = getIconData(icons, data6.name);
        if (!iconData) {
          throw new Error(`Icon not found: ${iconName}`);
        }
        return iconData;
      }, "getRegisteredIconData");
      isIconAvailable = /* @__PURE__ */ __name(async (iconName) => {
        try {
          await getRegisteredIconData(iconName);
          return true;
        } catch {
          return false;
        }
      }, "isIconAvailable");
      getIconSVG = /* @__PURE__ */ __name(async (iconName, customisations, extraAttributes) => {
        let iconData;
        try {
          iconData = await getRegisteredIconData(iconName, customisations?.fallbackPrefix);
        } catch (e3) {
          log.error(e3);
          iconData = unknownIcon;
        }
        const renderData = iconToSVG(iconData, customisations);
        const svg2 = iconToHTML(replaceIDs(renderData.body), {
          ...renderData.attributes,
          ...extraAttributes
        });
        return sanitizeText(svg2, getConfig());
      }, "getIconSVG");
    }
  });

  // ../../node_modules/.pnpm/ts-dedent@2.2.0/node_modules/ts-dedent/esm/index.js
  function dedent(templ) {
    var values3 = [];
    for (var _i = 1; _i < arguments.length; _i++) {
      values3[_i - 1] = arguments[_i];
    }
    var strings = Array.from(typeof templ === "string" ? [templ] : templ);
    strings[strings.length - 1] = strings[strings.length - 1].replace(/\r?\n([\t ]*)$/, "");
    var indentLengths = strings.reduce(function(arr, str2) {
      var matches33 = str2.match(/\n([\t ]+|(?!\s).)/g);
      if (matches33) {
        return arr.concat(matches33.map(function(match3) {
          var _a, _b;
          return (_b = (_a = match3.match(/[\t ]/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
        }));
      }
      return arr;
    }, []);
    if (indentLengths.length) {
      var pattern_1 = new RegExp("\n[	 ]{" + Math.min.apply(Math, indentLengths) + "}", "g");
      strings = strings.map(function(str2) {
        return str2.replace(pattern_1, "\n");
      });
    }
    strings[0] = strings[0].replace(/^\r?\n/, "");
    var string3 = strings[0];
    values3.forEach(function(value2, i2) {
      var endentations = string3.match(/(?:^|\n)( *)$/);
      var endentation = endentations ? endentations[1] : "";
      var indentedValue = value2;
      if (typeof value2 === "string" && value2.includes("\n")) {
        indentedValue = String(value2).split("\n").map(function(str2, i3) {
          return i3 === 0 ? str2 : "" + endentation + str2;
        }).join("\n");
      }
      string3 += indentedValue + strings[i2 + 1];
    });
    return string3;
  }
  var init_esm = __esm({
    "../../node_modules/.pnpm/ts-dedent@2.2.0/node_modules/ts-dedent/esm/index.js"() {
      "use strict";
      __name(dedent, "dedent");
    }
  });

  // src/diagram-api/regexes.ts
  var frontMatterRegex, directiveRegex, anyCommentRegex;
  var init_regexes = __esm({
    "src/diagram-api/regexes.ts"() {
      "use strict";
      frontMatterRegex = /^([^\S\n\r]*)-{3}\s*[\n\r](.*?)[\n\r]\1-{3}\s*[\n\r]+/s;
      directiveRegex = /%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
      anyCommentRegex = /\s*%%.*\n/gm;
    }
  });

  // src/errors.ts
  var UnknownDiagramError;
  var init_errors = __esm({
    "src/errors.ts"() {
      "use strict";
      UnknownDiagramError = class extends Error {
        static {
          __name(this, "UnknownDiagramError");
        }
        constructor(message) {
          super(message);
          this.name = "UnknownDiagramError";
        }
      };
    }
  });

  // src/diagram-api/detectType.ts
  var detectors, detectType, registerLazyLoadedDiagrams, addDetector, getDiagramLoader;
  var init_detectType = __esm({
    "src/diagram-api/detectType.ts"() {
      "use strict";
      init_logger();
      init_regexes();
      init_errors();
      detectors = {};
      detectType = /* @__PURE__ */ __name(function(text4, config3) {
        text4 = text4.replace(frontMatterRegex, "").replace(directiveRegex, "").replace(anyCommentRegex, "\n");
        for (const [key, { detector: detector39 }] of Object.entries(detectors)) {
          const diagram38 = detector39(text4, config3);
          if (diagram38) {
            return key;
          }
        }
        throw new UnknownDiagramError(
          `No diagram type detected matching given configuration for text: ${text4}`
        );
      }, "detectType");
      registerLazyLoadedDiagrams = /* @__PURE__ */ __name((...diagrams2) => {
        for (const { id: id41, detector: detector39, loader: loader40 } of diagrams2) {
          addDetector(id41, detector39, loader40);
        }
      }, "registerLazyLoadedDiagrams");
      addDetector = /* @__PURE__ */ __name((key, detector39, loader40) => {
        if (detectors[key]) {
          log.warn(`Detector with key ${key} already exists. Overwriting.`);
        }
        detectors[key] = { detector: detector39, loader: loader40 };
        log.debug(`Detector with key ${key} added${loader40 ? " with loader" : ""}`);
      }, "addDetector");
      getDiagramLoader = /* @__PURE__ */ __name((key) => {
        return detectors[key].loader;
      }, "getDiagramLoader");
    }
  });

  // src/diagrams/c4/parser/c4Diagram.jison
  var parser, c4Diagram_default;
  var init_c4Diagram = __esm({
    "src/diagrams/c4/parser/c4Diagram.jison"() {
      "use strict";
      parser = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 24], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 63], $V6 = [1, 64], $V7 = [1, 65], $V8 = [1, 66], $V9 = [1, 67], $Va = [1, 68], $Vb = [1, 69], $Vc = [1, 29], $Vd = [1, 30], $Ve = [1, 31], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 34], $Vi = [1, 35], $Vj = [1, 36], $Vk = [1, 37], $Vl = [1, 38], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 43], $Vr = [1, 44], $Vs = [1, 45], $Vt = [1, 46], $Vu = [1, 47], $Vv = [1, 48], $Vw = [1, 50], $Vx = [1, 51], $Vy = [1, 52], $Vz = [1, 53], $VA = [1, 54], $VB = [1, 55], $VC = [1, 56], $VD = [1, 57], $VE = [1, 58], $VF = [1, 59], $VG = [1, 60], $VH = [14, 42], $VI = [14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VJ = [12, 14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VK = [1, 82], $VL = [1, 83], $VM = [1, 84], $VN = [1, 85], $VO = [12, 14, 42], $VP = [12, 14, 33, 42], $VQ = [12, 14, 33, 42, 76, 77, 79, 80], $VR = [12, 33], $VS = [34, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "direction": 5, "direction_tb": 6, "direction_bt": 7, "direction_rl": 8, "direction_lr": 9, "graphConfig": 10, "C4_CONTEXT": 11, "NEWLINE": 12, "statements": 13, "EOF": 14, "C4_CONTAINER": 15, "C4_COMPONENT": 16, "C4_DYNAMIC": 17, "C4_DEPLOYMENT": 18, "otherStatements": 19, "diagramStatements": 20, "otherStatement": 21, "title": 22, "accDescription": 23, "acc_title": 24, "acc_title_value": 25, "acc_descr": 26, "acc_descr_value": 27, "acc_descr_multiline_value": 28, "boundaryStatement": 29, "boundaryStartStatement": 30, "boundaryStopStatement": 31, "boundaryStart": 32, "LBRACE": 33, "ENTERPRISE_BOUNDARY": 34, "attributes": 35, "SYSTEM_BOUNDARY": 36, "BOUNDARY": 37, "CONTAINER_BOUNDARY": 38, "NODE": 39, "NODE_L": 40, "NODE_R": 41, "RBRACE": 42, "diagramStatement": 43, "PERSON": 44, "PERSON_EXT": 45, "SYSTEM": 46, "SYSTEM_DB": 47, "SYSTEM_QUEUE": 48, "SYSTEM_EXT": 49, "SYSTEM_EXT_DB": 50, "SYSTEM_EXT_QUEUE": 51, "CONTAINER": 52, "CONTAINER_DB": 53, "CONTAINER_QUEUE": 54, "CONTAINER_EXT": 55, "CONTAINER_EXT_DB": 56, "CONTAINER_EXT_QUEUE": 57, "COMPONENT": 58, "COMPONENT_DB": 59, "COMPONENT_QUEUE": 60, "COMPONENT_EXT": 61, "COMPONENT_EXT_DB": 62, "COMPONENT_EXT_QUEUE": 63, "REL": 64, "BIREL": 65, "REL_U": 66, "REL_D": 67, "REL_L": 68, "REL_R": 69, "REL_B": 70, "REL_INDEX": 71, "UPDATE_EL_STYLE": 72, "UPDATE_REL_STYLE": 73, "UPDATE_LAYOUT_CONFIG": 74, "attribute": 75, "STR": 76, "STR_KEY": 77, "STR_VALUE": 78, "ATTRIBUTE": 79, "ATTRIBUTE_EMPTY": 80, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 6: "direction_tb", 7: "direction_bt", 8: "direction_rl", 9: "direction_lr", 11: "C4_CONTEXT", 12: "NEWLINE", 14: "EOF", 15: "C4_CONTAINER", 16: "C4_COMPONENT", 17: "C4_DYNAMIC", 18: "C4_DEPLOYMENT", 22: "title", 23: "accDescription", 24: "acc_title", 25: "acc_title_value", 26: "acc_descr", 27: "acc_descr_value", 28: "acc_descr_multiline_value", 33: "LBRACE", 34: "ENTERPRISE_BOUNDARY", 36: "SYSTEM_BOUNDARY", 37: "BOUNDARY", 38: "CONTAINER_BOUNDARY", 39: "NODE", 40: "NODE_L", 41: "NODE_R", 42: "RBRACE", 44: "PERSON", 45: "PERSON_EXT", 46: "SYSTEM", 47: "SYSTEM_DB", 48: "SYSTEM_QUEUE", 49: "SYSTEM_EXT", 50: "SYSTEM_EXT_DB", 51: "SYSTEM_EXT_QUEUE", 52: "CONTAINER", 53: "CONTAINER_DB", 54: "CONTAINER_QUEUE", 55: "CONTAINER_EXT", 56: "CONTAINER_EXT_DB", 57: "CONTAINER_EXT_QUEUE", 58: "COMPONENT", 59: "COMPONENT_DB", 60: "COMPONENT_QUEUE", 61: "COMPONENT_EXT", 62: "COMPONENT_EXT_DB", 63: "COMPONENT_EXT_QUEUE", 64: "REL", 65: "BIREL", 66: "REL_U", 67: "REL_D", 68: "REL_L", 69: "REL_R", 70: "REL_B", 71: "REL_INDEX", 72: "UPDATE_EL_STYLE", 73: "UPDATE_REL_STYLE", 74: "UPDATE_LAYOUT_CONFIG", 76: "STR", 77: "STR_KEY", 78: "STR_VALUE", 79: "ATTRIBUTE", 80: "ATTRIBUTE_EMPTY" },
          productions_: [0, [3, 1], [3, 1], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [13, 1], [13, 1], [13, 2], [19, 1], [19, 2], [19, 3], [21, 1], [21, 1], [21, 2], [21, 2], [21, 1], [29, 3], [30, 3], [30, 3], [30, 4], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [31, 1], [20, 1], [20, 2], [20, 3], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 1], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [35, 1], [35, 2], [75, 1], [75, 2], [75, 1], [75, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 3:
                yy.setDirection("TB");
                break;
              case 4:
                yy.setDirection("BT");
                break;
              case 5:
                yy.setDirection("RL");
                break;
              case 6:
                yy.setDirection("LR");
                break;
              case 8:
              case 9:
              case 10:
              case 11:
              case 12:
                yy.setC4Type($$[$0 - 3]);
                break;
              case 19:
                yy.setTitle($$[$0].substring(6));
                this.$ = $$[$0].substring(6);
                break;
              case 20:
                yy.setAccDescription($$[$0].substring(15));
                this.$ = $$[$0].substring(15);
                break;
              case 21:
                this.$ = $$[$0].trim();
                yy.setTitle(this.$);
                break;
              case 22:
              case 23:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 28:
                $$[$0].splice(2, 0, "ENTERPRISE");
                yy.addPersonOrSystemBoundary(...$$[$0]);
                this.$ = $$[$0];
                break;
              case 29:
                $$[$0].splice(2, 0, "SYSTEM");
                yy.addPersonOrSystemBoundary(...$$[$0]);
                this.$ = $$[$0];
                break;
              case 30:
                yy.addPersonOrSystemBoundary(...$$[$0]);
                this.$ = $$[$0];
                break;
              case 31:
                $$[$0].splice(2, 0, "CONTAINER");
                yy.addContainerBoundary(...$$[$0]);
                this.$ = $$[$0];
                break;
              case 32:
                yy.addDeploymentNode("node", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 33:
                yy.addDeploymentNode("nodeL", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 34:
                yy.addDeploymentNode("nodeR", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 35:
                yy.popBoundaryParseStack();
                break;
              case 39:
                yy.addPersonOrSystem("person", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 40:
                yy.addPersonOrSystem("external_person", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 41:
                yy.addPersonOrSystem("system", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 42:
                yy.addPersonOrSystem("system_db", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 43:
                yy.addPersonOrSystem("system_queue", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 44:
                yy.addPersonOrSystem("external_system", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 45:
                yy.addPersonOrSystem("external_system_db", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 46:
                yy.addPersonOrSystem("external_system_queue", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 47:
                yy.addContainer("container", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 48:
                yy.addContainer("container_db", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 49:
                yy.addContainer("container_queue", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 50:
                yy.addContainer("external_container", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 51:
                yy.addContainer("external_container_db", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 52:
                yy.addContainer("external_container_queue", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 53:
                yy.addComponent("component", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 54:
                yy.addComponent("component_db", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 55:
                yy.addComponent("component_queue", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 56:
                yy.addComponent("external_component", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 57:
                yy.addComponent("external_component_db", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 58:
                yy.addComponent("external_component_queue", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 60:
                yy.addRel("rel", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 61:
                yy.addRel("birel", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 62:
                yy.addRel("rel_u", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 63:
                yy.addRel("rel_d", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 64:
                yy.addRel("rel_l", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 65:
                yy.addRel("rel_r", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 66:
                yy.addRel("rel_b", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 67:
                $$[$0].splice(0, 1);
                yy.addRel("rel", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 68:
                yy.updateElStyle("update_el_style", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 69:
                yy.updateRelStyle("update_rel_style", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 70:
                yy.updateLayoutConfig("update_layout_config", ...$$[$0]);
                this.$ = $$[$0];
                break;
              case 71:
                this.$ = [$$[$0]];
                break;
              case 72:
                $$[$0].unshift($$[$0 - 1]);
                this.$ = $$[$0];
                break;
              case 73:
              case 75:
                this.$ = $$[$0].trim();
                break;
              case 74:
                let kv = {};
                kv[$$[$0 - 1].trim()] = $$[$0].trim();
                this.$ = kv;
                break;
              case 76:
                this.$ = "";
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 7: [1, 6], 8: [1, 7], 9: [1, 8], 10: 4, 11: [1, 9], 15: [1, 10], 16: [1, 11], 17: [1, 12], 18: [1, 13] }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 7] }, { 1: [2, 3] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 12: [1, 14] }, { 12: [1, 15] }, { 12: [1, 16] }, { 12: [1, 17] }, { 12: [1, 18] }, { 13: 19, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 70, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 71, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 72, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 73, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 14: [1, 74] }, o2($VH, [2, 13], { 43: 23, 29: 49, 30: 61, 32: 62, 20: 75, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o2($VH, [2, 14]), o2($VI, [2, 16], { 12: [1, 76] }), o2($VH, [2, 36], { 12: [1, 77] }), o2($VJ, [2, 19]), o2($VJ, [2, 20]), { 25: [1, 78] }, { 27: [1, 79] }, o2($VJ, [2, 23]), { 35: 80, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 86, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 87, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 88, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 89, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 90, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 91, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 92, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 93, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 94, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 95, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 96, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 97, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 98, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 99, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 100, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 101, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 102, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 103, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 104, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, o2($VO, [2, 59]), { 35: 105, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 106, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 107, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 108, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 109, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 110, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 111, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 112, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 113, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 114, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 115, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 20: 116, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 12: [1, 118], 33: [1, 117] }, { 35: 119, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 120, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 121, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 122, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 123, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 124, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 125, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 14: [1, 126] }, { 14: [1, 127] }, { 14: [1, 128] }, { 14: [1, 129] }, { 1: [2, 8] }, o2($VH, [2, 15]), o2($VI, [2, 17], { 21: 22, 19: 130, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4 }), o2($VH, [2, 37], { 19: 20, 20: 21, 21: 22, 43: 23, 29: 49, 30: 61, 32: 62, 13: 131, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o2($VJ, [2, 21]), o2($VJ, [2, 22]), o2($VO, [2, 39]), o2($VP, [2, 71], { 75: 81, 35: 132, 76: $VK, 77: $VL, 79: $VM, 80: $VN }), o2($VQ, [2, 73]), { 78: [1, 133] }, o2($VQ, [2, 75]), o2($VQ, [2, 76]), o2($VO, [2, 40]), o2($VO, [2, 41]), o2($VO, [2, 42]), o2($VO, [2, 43]), o2($VO, [2, 44]), o2($VO, [2, 45]), o2($VO, [2, 46]), o2($VO, [2, 47]), o2($VO, [2, 48]), o2($VO, [2, 49]), o2($VO, [2, 50]), o2($VO, [2, 51]), o2($VO, [2, 52]), o2($VO, [2, 53]), o2($VO, [2, 54]), o2($VO, [2, 55]), o2($VO, [2, 56]), o2($VO, [2, 57]), o2($VO, [2, 58]), o2($VO, [2, 60]), o2($VO, [2, 61]), o2($VO, [2, 62]), o2($VO, [2, 63]), o2($VO, [2, 64]), o2($VO, [2, 65]), o2($VO, [2, 66]), o2($VO, [2, 67]), o2($VO, [2, 68]), o2($VO, [2, 69]), o2($VO, [2, 70]), { 31: 134, 42: [1, 135] }, { 12: [1, 136] }, { 33: [1, 137] }, o2($VR, [2, 28]), o2($VR, [2, 29]), o2($VR, [2, 30]), o2($VR, [2, 31]), o2($VR, [2, 32]), o2($VR, [2, 33]), o2($VR, [2, 34]), { 1: [2, 9] }, { 1: [2, 10] }, { 1: [2, 11] }, { 1: [2, 12] }, o2($VI, [2, 18]), o2($VH, [2, 38]), o2($VP, [2, 72]), o2($VQ, [2, 74]), o2($VO, [2, 24]), o2($VO, [2, 35]), o2($VS, [2, 25]), o2($VS, [2, 26], { 12: [1, 138] }), o2($VS, [2, 27])],
          defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 7], 5: [2, 3], 6: [2, 4], 7: [2, 5], 8: [2, 6], 74: [2, 8], 126: [2, 9], 127: [2, 10], 128: [2, 11], 129: [2, 12] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: {},
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  return 6;
                  break;
                case 1:
                  return 7;
                  break;
                case 2:
                  return 8;
                  break;
                case 3:
                  return 9;
                  break;
                case 4:
                  return 22;
                  break;
                case 5:
                  return 23;
                  break;
                case 6:
                  this.begin("acc_title");
                  return 24;
                  break;
                case 7:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 8:
                  this.begin("acc_descr");
                  return 26;
                  break;
                case 9:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 10:
                  this.begin("acc_descr_multiline");
                  break;
                case 11:
                  this.popState();
                  break;
                case 12:
                  return "acc_descr_multiline_value";
                  break;
                case 13:
                  break;
                case 14:
                  c;
                  break;
                case 15:
                  return 12;
                  break;
                case 16:
                  break;
                case 17:
                  return 11;
                  break;
                case 18:
                  return 15;
                  break;
                case 19:
                  return 16;
                  break;
                case 20:
                  return 17;
                  break;
                case 21:
                  return 18;
                  break;
                case 22:
                  this.begin("person_ext");
                  return 45;
                  break;
                case 23:
                  this.begin("person");
                  return 44;
                  break;
                case 24:
                  this.begin("system_ext_queue");
                  return 51;
                  break;
                case 25:
                  this.begin("system_ext_db");
                  return 50;
                  break;
                case 26:
                  this.begin("system_ext");
                  return 49;
                  break;
                case 27:
                  this.begin("system_queue");
                  return 48;
                  break;
                case 28:
                  this.begin("system_db");
                  return 47;
                  break;
                case 29:
                  this.begin("system");
                  return 46;
                  break;
                case 30:
                  this.begin("boundary");
                  return 37;
                  break;
                case 31:
                  this.begin("enterprise_boundary");
                  return 34;
                  break;
                case 32:
                  this.begin("system_boundary");
                  return 36;
                  break;
                case 33:
                  this.begin("container_ext_queue");
                  return 57;
                  break;
                case 34:
                  this.begin("container_ext_db");
                  return 56;
                  break;
                case 35:
                  this.begin("container_ext");
                  return 55;
                  break;
                case 36:
                  this.begin("container_queue");
                  return 54;
                  break;
                case 37:
                  this.begin("container_db");
                  return 53;
                  break;
                case 38:
                  this.begin("container");
                  return 52;
                  break;
                case 39:
                  this.begin("container_boundary");
                  return 38;
                  break;
                case 40:
                  this.begin("component_ext_queue");
                  return 63;
                  break;
                case 41:
                  this.begin("component_ext_db");
                  return 62;
                  break;
                case 42:
                  this.begin("component_ext");
                  return 61;
                  break;
                case 43:
                  this.begin("component_queue");
                  return 60;
                  break;
                case 44:
                  this.begin("component_db");
                  return 59;
                  break;
                case 45:
                  this.begin("component");
                  return 58;
                  break;
                case 46:
                  this.begin("node");
                  return 39;
                  break;
                case 47:
                  this.begin("node");
                  return 39;
                  break;
                case 48:
                  this.begin("node_l");
                  return 40;
                  break;
                case 49:
                  this.begin("node_r");
                  return 41;
                  break;
                case 50:
                  this.begin("rel");
                  return 64;
                  break;
                case 51:
                  this.begin("birel");
                  return 65;
                  break;
                case 52:
                  this.begin("rel_u");
                  return 66;
                  break;
                case 53:
                  this.begin("rel_u");
                  return 66;
                  break;
                case 54:
                  this.begin("rel_d");
                  return 67;
                  break;
                case 55:
                  this.begin("rel_d");
                  return 67;
                  break;
                case 56:
                  this.begin("rel_l");
                  return 68;
                  break;
                case 57:
                  this.begin("rel_l");
                  return 68;
                  break;
                case 58:
                  this.begin("rel_r");
                  return 69;
                  break;
                case 59:
                  this.begin("rel_r");
                  return 69;
                  break;
                case 60:
                  this.begin("rel_b");
                  return 70;
                  break;
                case 61:
                  this.begin("rel_index");
                  return 71;
                  break;
                case 62:
                  this.begin("update_el_style");
                  return 72;
                  break;
                case 63:
                  this.begin("update_rel_style");
                  return 73;
                  break;
                case 64:
                  this.begin("update_layout_config");
                  return 74;
                  break;
                case 65:
                  return "EOF_IN_STRUCT";
                  break;
                case 66:
                  this.begin("attribute");
                  return "ATTRIBUTE_EMPTY";
                  break;
                case 67:
                  this.begin("attribute");
                  break;
                case 68:
                  this.popState();
                  this.popState();
                  break;
                case 69:
                  return 80;
                  break;
                case 70:
                  break;
                case 71:
                  return 80;
                  break;
                case 72:
                  this.begin("string");
                  break;
                case 73:
                  this.popState();
                  break;
                case 74:
                  return "STR";
                  break;
                case 75:
                  this.begin("string_kv");
                  break;
                case 76:
                  this.begin("string_kv_key");
                  return "STR_KEY";
                  break;
                case 77:
                  this.popState();
                  this.begin("string_kv_value");
                  break;
                case 78:
                  return "STR_VALUE";
                  break;
                case 79:
                  this.popState();
                  this.popState();
                  break;
                case 80:
                  return "STR";
                  break;
                case 81:
                  return "LBRACE";
                  break;
                case 82:
                  return "RBRACE";
                  break;
                case 83:
                  return "SPACE";
                  break;
                case 84:
                  return "EOL";
                  break;
                case 85:
                  return 14;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:title\s[^#\n;]+)/, /^(?:accDescription\s[^#\n;]+)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:C4Context\b)/, /^(?:C4Container\b)/, /^(?:C4Component\b)/, /^(?:C4Dynamic\b)/, /^(?:C4Deployment\b)/, /^(?:Person_Ext\b)/, /^(?:Person\b)/, /^(?:SystemQueue_Ext\b)/, /^(?:SystemDb_Ext\b)/, /^(?:System_Ext\b)/, /^(?:SystemQueue\b)/, /^(?:SystemDb\b)/, /^(?:System\b)/, /^(?:Boundary\b)/, /^(?:Enterprise_Boundary\b)/, /^(?:System_Boundary\b)/, /^(?:ContainerQueue_Ext\b)/, /^(?:ContainerDb_Ext\b)/, /^(?:Container_Ext\b)/, /^(?:ContainerQueue\b)/, /^(?:ContainerDb\b)/, /^(?:Container\b)/, /^(?:Container_Boundary\b)/, /^(?:ComponentQueue_Ext\b)/, /^(?:ComponentDb_Ext\b)/, /^(?:Component_Ext\b)/, /^(?:ComponentQueue\b)/, /^(?:ComponentDb\b)/, /^(?:Component\b)/, /^(?:Deployment_Node\b)/, /^(?:Node\b)/, /^(?:Node_L\b)/, /^(?:Node_R\b)/, /^(?:Rel\b)/, /^(?:BiRel\b)/, /^(?:Rel_Up\b)/, /^(?:Rel_U\b)/, /^(?:Rel_Down\b)/, /^(?:Rel_D\b)/, /^(?:Rel_Left\b)/, /^(?:Rel_L\b)/, /^(?:Rel_Right\b)/, /^(?:Rel_R\b)/, /^(?:Rel_Back\b)/, /^(?:RelIndex\b)/, /^(?:UpdateElementStyle\b)/, /^(?:UpdateRelStyle\b)/, /^(?:UpdateLayoutConfig\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*["]["])/, /^(?:[ ]*["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[ ]*[\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:[^,]+)/, /^(?:\{)/, /^(?:\})/, /^(?:[\s]+)/, /^(?:[\n\r]+)/, /^(?:$)/],
            conditions: { "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "string_kv_value": { "rules": [78, 79], "inclusive": false }, "string_kv_key": { "rules": [77], "inclusive": false }, "string_kv": { "rules": [76], "inclusive": false }, "string": { "rules": [73, 74], "inclusive": false }, "attribute": { "rules": [68, 69, 70, 71, 72, 75, 80], "inclusive": false }, "update_layout_config": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_rel_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_el_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_b": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_d": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_u": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_bi": { "rules": [], "inclusive": false }, "rel": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "node": { "rules": [65, 66, 67, 68], "inclusive": false }, "index": { "rules": [], "inclusive": false }, "rel_index": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container": { "rules": [65, 66, 67, 68], "inclusive": false }, "birel": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "enterprise_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system": { "rules": [65, 66, 67, 68], "inclusive": false }, "person_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "person": { "rules": [65, 66, 67, 68], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 81, 82, 83, 84, 85], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser.parser = parser;
      c4Diagram_default = parser;
    }
  });

  // src/setupGraphViewbox.js
  var d3Attrs, calculateSvgSizeAttrs, configureSvgSize, setupGraphViewbox;
  var init_setupGraphViewbox = __esm({
    "src/setupGraphViewbox.js"() {
      "use strict";
      init_logger();
      d3Attrs = /* @__PURE__ */ __name(function(d3Elem, attrs) {
        for (let attr of attrs) {
          d3Elem.attr(attr[0], attr[1]);
        }
      }, "d3Attrs");
      calculateSvgSizeAttrs = /* @__PURE__ */ __name(function(height2, width3, useMaxWidth) {
        let attrs = /* @__PURE__ */ new Map();
        if (useMaxWidth) {
          attrs.set("width", "100%");
          attrs.set("style", `max-width: ${width3}px;`);
        } else {
          attrs.set("height", height2);
          attrs.set("width", width3);
        }
        return attrs;
      }, "calculateSvgSizeAttrs");
      configureSvgSize = /* @__PURE__ */ __name(function(svgElem, height2, width3, useMaxWidth) {
        const attrs = calculateSvgSizeAttrs(height2, width3, useMaxWidth);
        d3Attrs(svgElem, attrs);
      }, "configureSvgSize");
      setupGraphViewbox = /* @__PURE__ */ __name(function(graph, svgElem, padding, useMaxWidth) {
        const svgBounds = svgElem.node().getBBox();
        const sWidth = svgBounds.width;
        const sHeight = svgBounds.height;
        log.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds);
        let width3 = 0;
        let height2 = 0;
        log.info(`Graph bounds: ${width3}x${height2}`, graph);
        width3 = sWidth + padding * 2;
        height2 = sHeight + padding * 2;
        log.info(`Calculated bounds: ${width3}x${height2}`);
        configureSvgSize(svgElem, height2, width3, useMaxWidth);
        const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${svgBounds.width + 2 * padding} ${svgBounds.height + 2 * padding}`;
        svgElem.attr("viewBox", vBox);
      }, "setupGraphViewbox");
    }
  });

  // src/styles.ts
  function cssStyleSheetToString(cssStyleSheet) {
    return [...cssStyleSheet.cssRules].map((rule) => rule.cssText).join("\n");
  }
  var themes, getStyles, addStylesForDiagram, styles_default;
  var init_styles = __esm({
    "src/styles.ts"() {
      "use strict";
      init_logger();
      themes = {};
      __name(cssStyleSheetToString, "cssStyleSheetToString");
      getStyles = /* @__PURE__ */ __name((type3, userStyles, options2, svgId) => {
        let diagramStyles = "";
        if (type3 in themes && themes[type3]) {
          diagramStyles = themes[type3]({ ...options2, svgId });
        } else {
          log.warn(`No theme found for ${type3}`);
        }
        return `& {
    font-family: ${options2.fontFamily};
    font-size: ${options2.fontSize};
    fill: ${options2.textColor}
  }
  @keyframes edge-animation-frame {
    from {
      stroke-dashoffset: 0;
    }
  }
  @keyframes dash {
    to {
      stroke-dashoffset: 0;
    }
  }
  & .edge-animation-slow {
    stroke-dasharray: 9,5 !important;
    stroke-dashoffset: 900;
    animation: dash 50s linear infinite;
    stroke-linecap: round;
  }
  & .edge-animation-fast {
    stroke-dasharray: 9,5 !important;
    stroke-dashoffset: 900;
    animation: dash 20s linear infinite;
    stroke-linecap: round;
  }
  /* Classes common for multiple diagrams */

  & .error-icon {
    fill: ${options2.errorBkgColor};
  }
  & .error-text {
    fill: ${options2.errorTextColor};
    stroke: ${options2.errorTextColor};
  }

  & .edge-thickness-normal {
    stroke-width: ${options2.strokeWidth ?? 1}px;
  }
  & .edge-thickness-thick {
    stroke-width: 3.5px
  }
  & .edge-pattern-solid {
    stroke-dasharray: 0;
  }
  & .edge-thickness-invisible {
    stroke-width: 0;
    fill: none;
  }
  & .edge-pattern-dashed{
    stroke-dasharray: 3;
  }
  .edge-pattern-dotted {
    stroke-dasharray: 2;
  }

  & .marker {
    fill: ${options2.lineColor};
    stroke: ${options2.lineColor};
  }
  & .marker.cross {
    stroke: ${options2.lineColor};
  }

  & svg {
    font-family: ${options2.fontFamily};
    font-size: ${options2.fontSize};
  }
   & p {
    margin: 0
   }

  ${diagramStyles}
  .node .neo-node {
    stroke: ${options2.nodeBorder};
  }

  [data-look="neo"].node rect, [data-look="neo"].cluster rect, [data-look="neo"].node polygon {
    stroke: ${options2.useGradient ? "url(" + svgId + "-gradient)" : options2.nodeBorder};
    filter: ${options2.dropShadow ? options2.dropShadow.replace("url(#drop-shadow)", `url(${svgId}-drop-shadow)`) : "none"};
  }
  [data-look="neo"].swimlane.cluster rect {
    filter: none;
  }


  [data-look="neo"].node path {
    stroke: ${options2.useGradient ? "url(" + svgId + "-gradient)" : options2.nodeBorder};
    stroke-width: ${options2.strokeWidth ?? 1}px;
  }

  [data-look="neo"].node .outer-path {
    filter: ${options2.dropShadow ? options2.dropShadow.replace("url(#drop-shadow)", `url(${svgId}-drop-shadow)`) : "none"};
  }

  [data-look="neo"].node .neo-line path {
    stroke: ${options2.nodeBorder};
    filter: none;
  }

  [data-look="neo"].node circle{
    stroke: ${options2.useGradient ? "url(" + svgId + "-gradient)" : options2.nodeBorder};
    filter: ${options2.dropShadow ? options2.dropShadow.replace("url(#drop-shadow)", `url(${svgId}-drop-shadow)`) : "none"};
  }

  [data-look="neo"].node circle .state-start{
    fill: #000000;
  }

  [data-look="neo"].icon-shape .icon {
    fill: ${options2.useGradient ? "url(" + svgId + "-gradient)" : options2.nodeBorder};
    filter: ${options2.dropShadow ? options2.dropShadow.replace("url(#drop-shadow)", `url(${svgId}-drop-shadow)`) : "none"};
  }

    [data-look="neo"].icon-shape .icon-neo path {
    stroke: ${options2.useGradient ? "url(" + svgId + "-gradient)" : options2.nodeBorder};
    filter: ${options2.dropShadow ? options2.dropShadow.replace("url(#drop-shadow)", `url(${svgId}-drop-shadow)`) : "none"};
  }

  ${userStyles}
`;
      }, "getStyles");
      addStylesForDiagram = /* @__PURE__ */ __name((type3, diagramTheme) => {
        if (diagramTheme !== void 0) {
          themes[type3] = diagramTheme;
        }
      }, "addStylesForDiagram");
      styles_default = getStyles;
    }
  });

  // src/diagrams/common/commonDb.ts
  var commonDb_exports = {};
  __export(commonDb_exports, {
    clear: () => clear,
    getAccDescription: () => getAccDescription,
    getAccTitle: () => getAccTitle,
    getDiagramTitle: () => getDiagramTitle,
    setAccDescription: () => setAccDescription,
    setAccTitle: () => setAccTitle,
    setDiagramTitle: () => setDiagramTitle
  });
  var accTitle, diagramTitle, accDescription, sanitizeText2, clear, setAccTitle, getAccTitle, setAccDescription, getAccDescription, setDiagramTitle, getDiagramTitle;
  var init_commonDb = __esm({
    "src/diagrams/common/commonDb.ts"() {
      "use strict";
      init_common();
      init_config();
      accTitle = "";
      diagramTitle = "";
      accDescription = "";
      sanitizeText2 = /* @__PURE__ */ __name((txt) => sanitizeText(txt, getConfig()), "sanitizeText");
      clear = /* @__PURE__ */ __name(() => {
        accTitle = "";
        accDescription = "";
        diagramTitle = "";
      }, "clear");
      setAccTitle = /* @__PURE__ */ __name((txt) => {
        accTitle = sanitizeText2(txt).replace(/^\s+/g, "");
      }, "setAccTitle");
      getAccTitle = /* @__PURE__ */ __name(() => accTitle, "getAccTitle");
      setAccDescription = /* @__PURE__ */ __name((txt) => {
        accDescription = sanitizeText2(txt).replace(/\n\s+/g, "\n");
      }, "setAccDescription");
      getAccDescription = /* @__PURE__ */ __name(() => accDescription, "getAccDescription");
      setDiagramTitle = /* @__PURE__ */ __name((txt) => {
        diagramTitle = sanitizeText2(txt);
      }, "setDiagramTitle");
      getDiagramTitle = /* @__PURE__ */ __name(() => diagramTitle, "getDiagramTitle");
    }
  });

  // src/diagram-api/diagramAPI.ts
  var log2, setLogLevel2, getConfig2, setConfig2, defaultConfig2, sanitizeText3, setupGraphViewbox2, getCommonDb, diagrams, registerDiagram, getDiagram, DiagramNotFoundError;
  var init_diagramAPI = __esm({
    "src/diagram-api/diagramAPI.ts"() {
      "use strict";
      init_detectType();
      init_logger();
      init_config();
      init_common();
      init_setupGraphViewbox();
      init_styles();
      init_commonDb();
      log2 = log;
      setLogLevel2 = setLogLevel;
      getConfig2 = getConfig;
      setConfig2 = setConfig;
      defaultConfig2 = defaultConfig;
      sanitizeText3 = /* @__PURE__ */ __name((text4) => sanitizeText(text4, getConfig2()), "sanitizeText");
      setupGraphViewbox2 = setupGraphViewbox;
      getCommonDb = /* @__PURE__ */ __name(() => {
        return commonDb_exports;
      }, "getCommonDb");
      diagrams = {};
      registerDiagram = /* @__PURE__ */ __name((id41, diagram38, detector39) => {
        if (diagrams[id41]) {
          log2.warn(`Diagram with id ${id41} already registered. Overwriting.`);
        }
        diagrams[id41] = diagram38;
        if (detector39) {
          addDetector(id41, detector39);
        }
        addStylesForDiagram(id41, diagram38.styles);
        diagram38.injectUtils?.(
          log2,
          setLogLevel2,
          getConfig2,
          sanitizeText3,
          setupGraphViewbox2,
          getCommonDb(),
          () => {
          }
        );
      }, "registerDiagram");
      getDiagram = /* @__PURE__ */ __name((name) => {
        if (name in diagrams) {
          return diagrams[name];
        }
        throw new DiagramNotFoundError(name);
      }, "getDiagram");
      DiagramNotFoundError = class extends Error {
        static {
          __name(this, "DiagramNotFoundError");
        }
        constructor(name) {
          super(`Diagram ${name} not found.`);
        }
      };
    }
  });

  // src/diagrams/c4/c4Db.js
  var c4ShapeArray, boundaryParseStack, currentBoundaryParse, parentBoundaryParse, boundaries, rels, title, wrapEnabled, c4ShapeInRow, c4BoundaryInRow, c4Type, getC4Type, setC4Type, addRel, addPersonOrSystem, addContainer, addComponent, addPersonOrSystemBoundary, addContainerBoundary, addDeploymentNode, popBoundaryParseStack, updateElStyle, updateRelStyle, updateLayoutConfig, getC4ShapeInRow, getC4BoundaryInRow, getCurrentBoundaryParse, getParentBoundaryParse, getC4ShapeArray, getC4Shape, getC4ShapeKeys, getBoundaries, getBoundarys, getRels, getTitle, setWrap, autoWrap, clear2, LINETYPE, ARROWTYPE, PLACEMENT, setTitle, c4Db_default;
  var init_c4Db = __esm({
    "src/diagrams/c4/c4Db.js"() {
      "use strict";
      init_diagramAPI();
      init_common();
      init_commonDb();
      c4ShapeArray = [];
      boundaryParseStack = [""];
      currentBoundaryParse = "global";
      parentBoundaryParse = "";
      boundaries = [
        {
          alias: "global",
          label: { text: "global" },
          type: { text: "global" },
          tags: null,
          link: null,
          parentBoundary: ""
        }
      ];
      rels = [];
      title = "";
      wrapEnabled = false;
      c4ShapeInRow = 4;
      c4BoundaryInRow = 2;
      getC4Type = /* @__PURE__ */ __name(function() {
        return c4Type;
      }, "getC4Type");
      setC4Type = /* @__PURE__ */ __name(function(c4TypeParam) {
        let sanitizedText = sanitizeText(c4TypeParam, getConfig2());
        c4Type = sanitizedText;
      }, "setC4Type");
      addRel = /* @__PURE__ */ __name(function(type3, from2, to, label, techn, descr, sprite, tags2, link2) {
        if (type3 === void 0 || type3 === null || from2 === void 0 || from2 === null || to === void 0 || to === null || label === void 0 || label === null) {
          return;
        }
        let rel2 = {};
        const old = rels.find((rel3) => rel3.from === from2 && rel3.to === to);
        if (old) {
          rel2 = old;
        } else {
          rels.push(rel2);
        }
        rel2.type = type3;
        rel2.from = from2;
        rel2.to = to;
        rel2.label = { text: label };
        if (techn === void 0 || techn === null) {
          rel2.techn = { text: "" };
        } else {
          if (typeof techn === "object") {
            let [key, value2] = Object.entries(techn)[0];
            rel2[key] = { text: value2 };
          } else {
            rel2.techn = { text: techn };
          }
        }
        if (descr === void 0 || descr === null) {
          rel2.descr = { text: "" };
        } else {
          if (typeof descr === "object") {
            let [key, value2] = Object.entries(descr)[0];
            rel2[key] = { text: value2 };
          } else {
            rel2.descr = { text: descr };
          }
        }
        if (typeof sprite === "object") {
          let [key, value2] = Object.entries(sprite)[0];
          rel2[key] = value2;
        } else {
          rel2.sprite = sprite;
        }
        if (typeof tags2 === "object") {
          let [key, value2] = Object.entries(tags2)[0];
          rel2[key] = value2;
        } else {
          rel2.tags = tags2;
        }
        if (typeof link2 === "object") {
          let [key, value2] = Object.entries(link2)[0];
          rel2[key] = value2;
        } else {
          rel2.link = link2;
        }
        rel2.wrap = autoWrap();
      }, "addRel");
      addPersonOrSystem = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, descr, sprite, tags2, link2) {
        if (alias === null || label === null) {
          return;
        }
        let personOrSystem = {};
        const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias);
        if (old && alias === old.alias) {
          personOrSystem = old;
        } else {
          personOrSystem.alias = alias;
          c4ShapeArray.push(personOrSystem);
        }
        if (label === void 0 || label === null) {
          personOrSystem.label = { text: "" };
        } else {
          personOrSystem.label = { text: label };
        }
        if (descr === void 0 || descr === null) {
          personOrSystem.descr = { text: "" };
        } else {
          if (typeof descr === "object") {
            let [key, value2] = Object.entries(descr)[0];
            personOrSystem[key] = { text: value2 };
          } else {
            personOrSystem.descr = { text: descr };
          }
        }
        if (typeof sprite === "object") {
          let [key, value2] = Object.entries(sprite)[0];
          personOrSystem[key] = value2;
        } else {
          personOrSystem.sprite = sprite;
        }
        if (typeof tags2 === "object") {
          let [key, value2] = Object.entries(tags2)[0];
          personOrSystem[key] = value2;
        } else {
          personOrSystem.tags = tags2;
        }
        if (typeof link2 === "object") {
          let [key, value2] = Object.entries(link2)[0];
          personOrSystem[key] = value2;
        } else {
          personOrSystem.link = link2;
        }
        personOrSystem.typeC4Shape = { text: typeC4Shape };
        personOrSystem.parentBoundary = currentBoundaryParse;
        personOrSystem.wrap = autoWrap();
      }, "addPersonOrSystem");
      addContainer = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags2, link2) {
        if (alias === null || label === null) {
          return;
        }
        let container2 = {};
        const old = c4ShapeArray.find((container3) => container3.alias === alias);
        if (old && alias === old.alias) {
          container2 = old;
        } else {
          container2.alias = alias;
          c4ShapeArray.push(container2);
        }
        if (label === void 0 || label === null) {
          container2.label = { text: "" };
        } else {
          container2.label = { text: label };
        }
        if (techn === void 0 || techn === null) {
          container2.techn = { text: "" };
        } else {
          if (typeof techn === "object") {
            let [key, value2] = Object.entries(techn)[0];
            container2[key] = { text: value2 };
          } else {
            container2.techn = { text: techn };
          }
        }
        if (descr === void 0 || descr === null) {
          container2.descr = { text: "" };
        } else {
          if (typeof descr === "object") {
            let [key, value2] = Object.entries(descr)[0];
            container2[key] = { text: value2 };
          } else {
            container2.descr = { text: descr };
          }
        }
        if (typeof sprite === "object") {
          let [key, value2] = Object.entries(sprite)[0];
          container2[key] = value2;
        } else {
          container2.sprite = sprite;
        }
        if (typeof tags2 === "object") {
          let [key, value2] = Object.entries(tags2)[0];
          container2[key] = value2;
        } else {
          container2.tags = tags2;
        }
        if (typeof link2 === "object") {
          let [key, value2] = Object.entries(link2)[0];
          container2[key] = value2;
        } else {
          container2.link = link2;
        }
        container2.wrap = autoWrap();
        container2.typeC4Shape = { text: typeC4Shape };
        container2.parentBoundary = currentBoundaryParse;
      }, "addContainer");
      addComponent = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags2, link2) {
        if (alias === null || label === null) {
          return;
        }
        let component2 = {};
        const old = c4ShapeArray.find((component3) => component3.alias === alias);
        if (old && alias === old.alias) {
          component2 = old;
        } else {
          component2.alias = alias;
          c4ShapeArray.push(component2);
        }
        if (label === void 0 || label === null) {
          component2.label = { text: "" };
        } else {
          component2.label = { text: label };
        }
        if (techn === void 0 || techn === null) {
          component2.techn = { text: "" };
        } else {
          if (typeof techn === "object") {
            let [key, value2] = Object.entries(techn)[0];
            component2[key] = { text: value2 };
          } else {
            component2.techn = { text: techn };
          }
        }
        if (descr === void 0 || descr === null) {
          component2.descr = { text: "" };
        } else {
          if (typeof descr === "object") {
            let [key, value2] = Object.entries(descr)[0];
            component2[key] = { text: value2 };
          } else {
            component2.descr = { text: descr };
          }
        }
        if (typeof sprite === "object") {
          let [key, value2] = Object.entries(sprite)[0];
          component2[key] = value2;
        } else {
          component2.sprite = sprite;
        }
        if (typeof tags2 === "object") {
          let [key, value2] = Object.entries(tags2)[0];
          component2[key] = value2;
        } else {
          component2.tags = tags2;
        }
        if (typeof link2 === "object") {
          let [key, value2] = Object.entries(link2)[0];
          component2[key] = value2;
        } else {
          component2.link = link2;
        }
        component2.wrap = autoWrap();
        component2.typeC4Shape = { text: typeC4Shape };
        component2.parentBoundary = currentBoundaryParse;
      }, "addComponent");
      addPersonOrSystemBoundary = /* @__PURE__ */ __name(function(alias, label, type3, tags2, link2) {
        if (alias === null || label === null) {
          return;
        }
        let boundary = {};
        const old = boundaries.find((boundary2) => boundary2.alias === alias);
        if (old && alias === old.alias) {
          boundary = old;
        } else {
          boundary.alias = alias;
          boundaries.push(boundary);
        }
        if (label === void 0 || label === null) {
          boundary.label = { text: "" };
        } else {
          boundary.label = { text: label };
        }
        if (type3 === void 0 || type3 === null) {
          boundary.type = { text: "system" };
        } else {
          if (typeof type3 === "object") {
            let [key, value2] = Object.entries(type3)[0];
            boundary[key] = { text: value2 };
          } else {
            boundary.type = { text: type3 };
          }
        }
        if (typeof tags2 === "object") {
          let [key, value2] = Object.entries(tags2)[0];
          boundary[key] = value2;
        } else {
          boundary.tags = tags2;
        }
        if (typeof link2 === "object") {
          let [key, value2] = Object.entries(link2)[0];
          boundary[key] = value2;
        } else {
          boundary.link = link2;
        }
        boundary.parentBoundary = currentBoundaryParse;
        boundary.wrap = autoWrap();
        parentBoundaryParse = currentBoundaryParse;
        currentBoundaryParse = alias;
        boundaryParseStack.push(parentBoundaryParse);
      }, "addPersonOrSystemBoundary");
      addContainerBoundary = /* @__PURE__ */ __name(function(alias, label, type3, tags2, link2) {
        if (alias === null || label === null) {
          return;
        }
        let boundary = {};
        const old = boundaries.find((boundary2) => boundary2.alias === alias);
        if (old && alias === old.alias) {
          boundary = old;
        } else {
          boundary.alias = alias;
          boundaries.push(boundary);
        }
        if (label === void 0 || label === null) {
          boundary.label = { text: "" };
        } else {
          boundary.label = { text: label };
        }
        if (type3 === void 0 || type3 === null) {
          boundary.type = { text: "container" };
        } else {
          if (typeof type3 === "object") {
            let [key, value2] = Object.entries(type3)[0];
            boundary[key] = { text: value2 };
          } else {
            boundary.type = { text: type3 };
          }
        }
        if (typeof tags2 === "object") {
          let [key, value2] = Object.entries(tags2)[0];
          boundary[key] = value2;
        } else {
          boundary.tags = tags2;
        }
        if (typeof link2 === "object") {
          let [key, value2] = Object.entries(link2)[0];
          boundary[key] = value2;
        } else {
          boundary.link = link2;
        }
        boundary.parentBoundary = currentBoundaryParse;
        boundary.wrap = autoWrap();
        parentBoundaryParse = currentBoundaryParse;
        currentBoundaryParse = alias;
        boundaryParseStack.push(parentBoundaryParse);
      }, "addContainerBoundary");
      addDeploymentNode = /* @__PURE__ */ __name(function(nodeType3, alias, label, type3, descr, sprite, tags2, link2) {
        if (alias === null || label === null) {
          return;
        }
        let boundary = {};
        const old = boundaries.find((boundary2) => boundary2.alias === alias);
        if (old && alias === old.alias) {
          boundary = old;
        } else {
          boundary.alias = alias;
          boundaries.push(boundary);
        }
        if (label === void 0 || label === null) {
          boundary.label = { text: "" };
        } else {
          boundary.label = { text: label };
        }
        if (type3 === void 0 || type3 === null) {
          boundary.type = { text: "node" };
        } else {
          if (typeof type3 === "object") {
            let [key, value2] = Object.entries(type3)[0];
            boundary[key] = { text: value2 };
          } else {
            boundary.type = { text: type3 };
          }
        }
        if (descr === void 0 || descr === null) {
          boundary.descr = { text: "" };
        } else {
          if (typeof descr === "object") {
            let [key, value2] = Object.entries(descr)[0];
            boundary[key] = { text: value2 };
          } else {
            boundary.descr = { text: descr };
          }
        }
        if (typeof tags2 === "object") {
          let [key, value2] = Object.entries(tags2)[0];
          boundary[key] = value2;
        } else {
          boundary.tags = tags2;
        }
        if (typeof link2 === "object") {
          let [key, value2] = Object.entries(link2)[0];
          boundary[key] = value2;
        } else {
          boundary.link = link2;
        }
        boundary.nodeType = nodeType3;
        boundary.parentBoundary = currentBoundaryParse;
        boundary.wrap = autoWrap();
        parentBoundaryParse = currentBoundaryParse;
        currentBoundaryParse = alias;
        boundaryParseStack.push(parentBoundaryParse);
      }, "addDeploymentNode");
      popBoundaryParseStack = /* @__PURE__ */ __name(function() {
        currentBoundaryParse = parentBoundaryParse;
        boundaryParseStack.pop();
        parentBoundaryParse = boundaryParseStack.pop();
        boundaryParseStack.push(parentBoundaryParse);
      }, "popBoundaryParseStack");
      updateElStyle = /* @__PURE__ */ __name(function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) {
        let old = c4ShapeArray.find((element3) => element3.alias === elementName);
        if (old === void 0) {
          old = boundaries.find((element3) => element3.alias === elementName);
          if (old === void 0) {
            return;
          }
        }
        if (bgColor !== void 0 && bgColor !== null) {
          if (typeof bgColor === "object") {
            let [key, value2] = Object.entries(bgColor)[0];
            old[key] = value2;
          } else {
            old.bgColor = bgColor;
          }
        }
        if (fontColor !== void 0 && fontColor !== null) {
          if (typeof fontColor === "object") {
            let [key, value2] = Object.entries(fontColor)[0];
            old[key] = value2;
          } else {
            old.fontColor = fontColor;
          }
        }
        if (borderColor !== void 0 && borderColor !== null) {
          if (typeof borderColor === "object") {
            let [key, value2] = Object.entries(borderColor)[0];
            old[key] = value2;
          } else {
            old.borderColor = borderColor;
          }
        }
        if (shadowing !== void 0 && shadowing !== null) {
          if (typeof shadowing === "object") {
            let [key, value2] = Object.entries(shadowing)[0];
            old[key] = value2;
          } else {
            old.shadowing = shadowing;
          }
        }
        if (shape !== void 0 && shape !== null) {
          if (typeof shape === "object") {
            let [key, value2] = Object.entries(shape)[0];
            old[key] = value2;
          } else {
            old.shape = shape;
          }
        }
        if (sprite !== void 0 && sprite !== null) {
          if (typeof sprite === "object") {
            let [key, value2] = Object.entries(sprite)[0];
            old[key] = value2;
          } else {
            old.sprite = sprite;
          }
        }
        if (techn !== void 0 && techn !== null) {
          if (typeof techn === "object") {
            let [key, value2] = Object.entries(techn)[0];
            old[key] = value2;
          } else {
            old.techn = techn;
          }
        }
        if (legendText !== void 0 && legendText !== null) {
          if (typeof legendText === "object") {
            let [key, value2] = Object.entries(legendText)[0];
            old[key] = value2;
          } else {
            old.legendText = legendText;
          }
        }
        if (legendSprite !== void 0 && legendSprite !== null) {
          if (typeof legendSprite === "object") {
            let [key, value2] = Object.entries(legendSprite)[0];
            old[key] = value2;
          } else {
            old.legendSprite = legendSprite;
          }
        }
      }, "updateElStyle");
      updateRelStyle = /* @__PURE__ */ __name(function(typeC4Shape, from2, to, textColor, lineColor, offsetX, offsetY) {
        const old = rels.find((rel2) => rel2.from === from2 && rel2.to === to);
        if (old === void 0) {
          return;
        }
        if (textColor !== void 0 && textColor !== null) {
          if (typeof textColor === "object") {
            let [key, value2] = Object.entries(textColor)[0];
            old[key] = value2;
          } else {
            old.textColor = textColor;
          }
        }
        if (lineColor !== void 0 && lineColor !== null) {
          if (typeof lineColor === "object") {
            let [key, value2] = Object.entries(lineColor)[0];
            old[key] = value2;
          } else {
            old.lineColor = lineColor;
          }
        }
        if (offsetX !== void 0 && offsetX !== null) {
          if (typeof offsetX === "object") {
            let [key, value2] = Object.entries(offsetX)[0];
            old[key] = parseInt(value2);
          } else {
            old.offsetX = parseInt(offsetX);
          }
        }
        if (offsetY !== void 0 && offsetY !== null) {
          if (typeof offsetY === "object") {
            let [key, value2] = Object.entries(offsetY)[0];
            old[key] = parseInt(value2);
          } else {
            old.offsetY = parseInt(offsetY);
          }
        }
      }, "updateRelStyle");
      updateLayoutConfig = /* @__PURE__ */ __name(function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {
        let c4ShapeInRowValue = c4ShapeInRow;
        let c4BoundaryInRowValue = c4BoundaryInRow;
        if (typeof c4ShapeInRowParam === "object") {
          const value2 = Object.values(c4ShapeInRowParam)[0];
          c4ShapeInRowValue = parseInt(value2);
        } else {
          c4ShapeInRowValue = parseInt(c4ShapeInRowParam);
        }
        if (typeof c4BoundaryInRowParam === "object") {
          const value2 = Object.values(c4BoundaryInRowParam)[0];
          c4BoundaryInRowValue = parseInt(value2);
        } else {
          c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);
        }
        if (c4ShapeInRowValue >= 1) {
          c4ShapeInRow = c4ShapeInRowValue;
        }
        if (c4BoundaryInRowValue >= 1) {
          c4BoundaryInRow = c4BoundaryInRowValue;
        }
      }, "updateLayoutConfig");
      getC4ShapeInRow = /* @__PURE__ */ __name(function() {
        return c4ShapeInRow;
      }, "getC4ShapeInRow");
      getC4BoundaryInRow = /* @__PURE__ */ __name(function() {
        return c4BoundaryInRow;
      }, "getC4BoundaryInRow");
      getCurrentBoundaryParse = /* @__PURE__ */ __name(function() {
        return currentBoundaryParse;
      }, "getCurrentBoundaryParse");
      getParentBoundaryParse = /* @__PURE__ */ __name(function() {
        return parentBoundaryParse;
      }, "getParentBoundaryParse");
      getC4ShapeArray = /* @__PURE__ */ __name(function(parentBoundary) {
        if (parentBoundary === void 0 || parentBoundary === null) {
          return c4ShapeArray;
        } else {
          return c4ShapeArray.filter((personOrSystem) => {
            return personOrSystem.parentBoundary === parentBoundary;
          });
        }
      }, "getC4ShapeArray");
      getC4Shape = /* @__PURE__ */ __name(function(alias) {
        return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);
      }, "getC4Shape");
      getC4ShapeKeys = /* @__PURE__ */ __name(function(parentBoundary) {
        return Object.keys(getC4ShapeArray(parentBoundary));
      }, "getC4ShapeKeys");
      getBoundaries = /* @__PURE__ */ __name(function(parentBoundary) {
        if (parentBoundary === void 0 || parentBoundary === null) {
          return boundaries;
        } else {
          return boundaries.filter((boundary) => boundary.parentBoundary === parentBoundary);
        }
      }, "getBoundaries");
      getBoundarys = getBoundaries;
      getRels = /* @__PURE__ */ __name(function() {
        return rels;
      }, "getRels");
      getTitle = /* @__PURE__ */ __name(function() {
        return title;
      }, "getTitle");
      setWrap = /* @__PURE__ */ __name(function(wrapSetting) {
        wrapEnabled = wrapSetting;
      }, "setWrap");
      autoWrap = /* @__PURE__ */ __name(function() {
        return wrapEnabled;
      }, "autoWrap");
      clear2 = /* @__PURE__ */ __name(function() {
        c4ShapeArray = [];
        boundaries = [
          {
            alias: "global",
            label: { text: "global" },
            type: { text: "global" },
            tags: null,
            link: null,
            parentBoundary: ""
          }
        ];
        parentBoundaryParse = "";
        currentBoundaryParse = "global";
        boundaryParseStack = [""];
        rels = [];
        boundaryParseStack = [""];
        title = "";
        wrapEnabled = false;
        c4ShapeInRow = 4;
        c4BoundaryInRow = 2;
      }, "clear");
      LINETYPE = {
        SOLID: 0,
        DOTTED: 1,
        NOTE: 2,
        SOLID_CROSS: 3,
        DOTTED_CROSS: 4,
        SOLID_OPEN: 5,
        DOTTED_OPEN: 6,
        LOOP_START: 10,
        LOOP_END: 11,
        ALT_START: 12,
        ALT_ELSE: 13,
        ALT_END: 14,
        OPT_START: 15,
        OPT_END: 16,
        ACTIVE_START: 17,
        ACTIVE_END: 18,
        PAR_START: 19,
        PAR_AND: 20,
        PAR_END: 21,
        RECT_START: 22,
        RECT_END: 23,
        SOLID_POINT: 24,
        DOTTED_POINT: 25
      };
      ARROWTYPE = {
        FILLED: 0,
        OPEN: 1
      };
      PLACEMENT = {
        LEFTOF: 0,
        RIGHTOF: 1,
        OVER: 2
      };
      setTitle = /* @__PURE__ */ __name(function(txt) {
        let sanitizedText = sanitizeText(txt, getConfig2());
        title = sanitizedText;
      }, "setTitle");
      c4Db_default = {
        addPersonOrSystem,
        addPersonOrSystemBoundary,
        addContainer,
        addContainerBoundary,
        addComponent,
        addDeploymentNode,
        popBoundaryParseStack,
        addRel,
        updateElStyle,
        updateRelStyle,
        updateLayoutConfig,
        autoWrap,
        setWrap,
        getC4ShapeArray,
        getC4Shape,
        getC4ShapeKeys,
        getBoundaries,
        getBoundarys,
        getCurrentBoundaryParse,
        getParentBoundaryParse,
        getRels,
        getTitle,
        getC4Type,
        getC4ShapeInRow,
        getC4BoundaryInRow,
        setAccTitle,
        getAccTitle,
        getAccDescription,
        setAccDescription,
        getConfig: /* @__PURE__ */ __name(() => getConfig2().c4, "getConfig"),
        clear: clear2,
        LINETYPE,
        ARROWTYPE,
        PLACEMENT,
        setTitle,
        setC4Type
        // apply,
      };
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js
  function ascending(a2, b3) {
    return a2 == null || b3 == null ? NaN : a2 < b3 ? -1 : a2 > b3 ? 1 : a2 >= b3 ? 0 : NaN;
  }
  var init_ascending = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js"() {
      "use strict";
      __name(ascending, "ascending");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js
  function descending(a2, b3) {
    return a2 == null || b3 == null ? NaN : b3 < a2 ? -1 : b3 > a2 ? 1 : b3 >= a2 ? 0 : NaN;
  }
  var init_descending = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js"() {
      "use strict";
      __name(descending, "descending");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js
  function bisector(f2) {
    let compare1, compare2, delta;
    if (f2.length !== 2) {
      compare1 = ascending;
      compare2 = /* @__PURE__ */ __name((d3, x5) => ascending(f2(d3), x5), "compare2");
      delta = /* @__PURE__ */ __name((d3, x5) => f2(d3) - x5, "delta");
    } else {
      compare1 = f2 === ascending || f2 === descending ? f2 : zero;
      compare2 = f2;
      delta = f2;
    }
    function left3(a2, x5, lo = 0, hi = a2.length) {
      if (lo < hi) {
        if (compare1(x5, x5) !== 0) return hi;
        do {
          const mid = lo + hi >>> 1;
          if (compare2(a2[mid], x5) < 0) lo = mid + 1;
          else hi = mid;
        } while (lo < hi);
      }
      return lo;
    }
    __name(left3, "left");
    function right3(a2, x5, lo = 0, hi = a2.length) {
      if (lo < hi) {
        if (compare1(x5, x5) !== 0) return hi;
        do {
          const mid = lo + hi >>> 1;
          if (compare2(a2[mid], x5) <= 0) lo = mid + 1;
          else hi = mid;
        } while (lo < hi);
      }
      return lo;
    }
    __name(right3, "right");
    function center4(a2, x5, lo = 0, hi = a2.length) {
      const i2 = left3(a2, x5, lo, hi - 1);
      return i2 > lo && delta(a2[i2 - 1], x5) > -delta(a2[i2], x5) ? i2 - 1 : i2;
    }
    __name(center4, "center");
    return { left: left3, center: center4, right: right3 };
  }
  function zero() {
    return 0;
  }
  var init_bisector = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js"() {
      "use strict";
      init_ascending();
      init_descending();
      __name(bisector, "bisector");
      __name(zero, "zero");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js
  function number(x5) {
    return x5 === null ? NaN : +x5;
  }
  var init_number = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js"() {
      "use strict";
      __name(number, "number");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js
  var ascendingBisect, bisectRight, bisectLeft, bisectCenter, bisect_default;
  var init_bisect = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js"() {
      "use strict";
      init_ascending();
      init_bisector();
      init_number();
      ascendingBisect = bisector(ascending);
      bisectRight = ascendingBisect.right;
      bisectLeft = ascendingBisect.left;
      bisectCenter = bisector(number).center;
      bisect_default = bisectRight;
    }
  });

  // ../../node_modules/.pnpm/internmap@2.0.3/node_modules/internmap/src/index.js
  function intern_get({ _intern, _key }, value2) {
    const key = _key(value2);
    return _intern.has(key) ? _intern.get(key) : value2;
  }
  function intern_set({ _intern, _key }, value2) {
    const key = _key(value2);
    if (_intern.has(key)) return _intern.get(key);
    _intern.set(key, value2);
    return value2;
  }
  function intern_delete({ _intern, _key }, value2) {
    const key = _key(value2);
    if (_intern.has(key)) {
      value2 = _intern.get(key);
      _intern.delete(key);
    }
    return value2;
  }
  function keyof(value2) {
    return value2 !== null && typeof value2 === "object" ? value2.valueOf() : value2;
  }
  var InternMap;
  var init_src = __esm({
    "../../node_modules/.pnpm/internmap@2.0.3/node_modules/internmap/src/index.js"() {
      "use strict";
      InternMap = class extends Map {
        static {
          __name(this, "InternMap");
        }
        constructor(entries2, key = keyof) {
          super();
          Object.defineProperties(this, { _intern: { value: /* @__PURE__ */ new Map() }, _key: { value: key } });
          if (entries2 != null) for (const [key2, value2] of entries2) this.set(key2, value2);
        }
        get(key) {
          return super.get(intern_get(this, key));
        }
        has(key) {
          return super.has(intern_get(this, key));
        }
        set(key, value2) {
          return super.set(intern_set(this, key), value2);
        }
        delete(key) {
          return super.delete(intern_delete(this, key));
        }
      };
      __name(intern_get, "intern_get");
      __name(intern_set, "intern_set");
      __name(intern_delete, "intern_delete");
      __name(keyof, "keyof");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js
  function tickSpec(start3, stop5, count2) {
    const step3 = (stop5 - start3) / Math.max(0, count2), power = Math.floor(Math.log10(step3)), error3 = step3 / Math.pow(10, power), factor = error3 >= e10 ? 10 : error3 >= e5 ? 5 : error3 >= e2 ? 2 : 1;
    let i1, i2, inc;
    if (power < 0) {
      inc = Math.pow(10, -power) / factor;
      i1 = Math.round(start3 * inc);
      i2 = Math.round(stop5 * inc);
      if (i1 / inc < start3) ++i1;
      if (i2 / inc > stop5) --i2;
      inc = -inc;
    } else {
      inc = Math.pow(10, power) * factor;
      i1 = Math.round(start3 / inc);
      i2 = Math.round(stop5 / inc);
      if (i1 * inc < start3) ++i1;
      if (i2 * inc > stop5) --i2;
    }
    if (i2 < i1 && 0.5 <= count2 && count2 < 2) return tickSpec(start3, stop5, count2 * 2);
    return [i1, i2, inc];
  }
  function ticks(start3, stop5, count2) {
    stop5 = +stop5, start3 = +start3, count2 = +count2;
    if (!(count2 > 0)) return [];
    if (start3 === stop5) return [start3];
    const reverse2 = stop5 < start3, [i1, i2, inc] = reverse2 ? tickSpec(stop5, start3, count2) : tickSpec(start3, stop5, count2);
    if (!(i2 >= i1)) return [];
    const n2 = i2 - i1 + 1, ticks2 = new Array(n2);
    if (reverse2) {
      if (inc < 0) for (let i3 = 0; i3 < n2; ++i3) ticks2[i3] = (i2 - i3) / -inc;
      else for (let i3 = 0; i3 < n2; ++i3) ticks2[i3] = (i2 - i3) * inc;
    } else {
      if (inc < 0) for (let i3 = 0; i3 < n2; ++i3) ticks2[i3] = (i1 + i3) / -inc;
      else for (let i3 = 0; i3 < n2; ++i3) ticks2[i3] = (i1 + i3) * inc;
    }
    return ticks2;
  }
  function tickIncrement(start3, stop5, count2) {
    stop5 = +stop5, start3 = +start3, count2 = +count2;
    return tickSpec(start3, stop5, count2)[2];
  }
  function tickStep(start3, stop5, count2) {
    stop5 = +stop5, start3 = +start3, count2 = +count2;
    const reverse2 = stop5 < start3, inc = reverse2 ? tickIncrement(stop5, start3, count2) : tickIncrement(start3, stop5, count2);
    return (reverse2 ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
  }
  var e10, e5, e2;
  var init_ticks = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js"() {
      "use strict";
      e10 = Math.sqrt(50);
      e5 = Math.sqrt(10);
      e2 = Math.sqrt(2);
      __name(tickSpec, "tickSpec");
      __name(ticks, "ticks");
      __name(tickIncrement, "tickIncrement");
      __name(tickStep, "tickStep");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/max.js
  function max(values3, valueof) {
    let max10;
    if (valueof === void 0) {
      for (const value2 of values3) {
        if (value2 != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) {
          max10 = value2;
        }
      }
    } else {
      let index = -1;
      for (let value2 of values3) {
        if ((value2 = valueof(value2, ++index, values3)) != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) {
          max10 = value2;
        }
      }
    }
    return max10;
  }
  var init_max = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/max.js"() {
      "use strict";
      __name(max, "max");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/min.js
  function min(values3, valueof) {
    let min10;
    if (valueof === void 0) {
      for (const value2 of values3) {
        if (value2 != null && (min10 > value2 || min10 === void 0 && value2 >= value2)) {
          min10 = value2;
        }
      }
    } else {
      let index = -1;
      for (let value2 of values3) {
        if ((value2 = valueof(value2, ++index, values3)) != null && (min10 > value2 || min10 === void 0 && value2 >= value2)) {
          min10 = value2;
        }
      }
    }
    return min10;
  }
  var init_min = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/min.js"() {
      "use strict";
      __name(min, "min");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/range.js
  function range(start3, stop5, step3) {
    start3 = +start3, stop5 = +stop5, step3 = (n2 = arguments.length) < 2 ? (stop5 = start3, start3 = 0, 1) : n2 < 3 ? 1 : +step3;
    var i2 = -1, n2 = Math.max(0, Math.ceil((stop5 - start3) / step3)) | 0, range3 = new Array(n2);
    while (++i2 < n2) {
      range3[i2] = start3 + i2 * step3;
    }
    return range3;
  }
  var init_range = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/range.js"() {
      "use strict";
      __name(range, "range");
    }
  });

  // ../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/index.js
  var init_src2 = __esm({
    "../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/index.js"() {
      "use strict";
      init_bisect();
      init_bisector();
      init_max();
      init_min();
      init_range();
      init_ticks();
      init_src();
    }
  });

  // ../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/identity.js
  function identity_default(x5) {
    return x5;
  }
  var init_identity = __esm({
    "../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/identity.js"() {
      "use strict";
      __name(identity_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/axis.js
  function translateX(x5) {
    return "translate(" + x5 + ",0)";
  }
  function translateY(y6) {
    return "translate(0," + y6 + ")";
  }
  function number2(scale3) {
    return (d3) => +scale3(d3);
  }
  function center(scale3, offset) {
    offset = Math.max(0, scale3.bandwidth() - offset * 2) / 2;
    if (scale3.round()) offset = Math.round(offset);
    return (d3) => +scale3(d3) + offset;
  }
  function entering() {
    return !this.__axis;
  }
  function axis(orient, scale3) {
    var tickArguments = [], tickValues = null, tickFormat2 = null, tickSizeInner = 6, tickSizeOuter = 6, tickPadding = 3, offset = typeof window !== "undefined" && window.devicePixelRatio > 1 ? 0 : 0.5, k2 = orient === top || orient === left ? -1 : 1, x5 = orient === left || orient === right ? "x" : "y", transform8 = orient === top || orient === bottom ? translateX : translateY;
    function axis2(context) {
      var values3 = tickValues == null ? scale3.ticks ? scale3.ticks.apply(scale3, tickArguments) : scale3.domain() : tickValues, format3 = tickFormat2 == null ? scale3.tickFormat ? scale3.tickFormat.apply(scale3, tickArguments) : identity_default : tickFormat2, spacing2 = Math.max(tickSizeInner, 0) + tickPadding, range3 = scale3.range(), range0 = +range3[0] + offset, range1 = +range3[range3.length - 1] + offset, position5 = (scale3.bandwidth ? center : number2)(scale3.copy(), offset), selection2 = context.selection ? context.selection() : context, path4 = selection2.selectAll(".domain").data([null]), tick = selection2.selectAll(".tick").data(values3, scale3).order(), tickExit = tick.exit(), tickEnter = tick.enter().append("g").attr("class", "tick"), line2 = tick.select("line"), text4 = tick.select("text");
      path4 = path4.merge(path4.enter().insert("path", ".tick").attr("class", "domain").attr("stroke", "currentColor"));
      tick = tick.merge(tickEnter);
      line2 = line2.merge(tickEnter.append("line").attr("stroke", "currentColor").attr(x5 + "2", k2 * tickSizeInner));
      text4 = text4.merge(tickEnter.append("text").attr("fill", "currentColor").attr(x5, k2 * spacing2).attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
      if (context !== selection2) {
        path4 = path4.transition(context);
        tick = tick.transition(context);
        line2 = line2.transition(context);
        text4 = text4.transition(context);
        tickExit = tickExit.transition(context).attr("opacity", epsilon).attr("transform", function(d3) {
          return isFinite(d3 = position5(d3)) ? transform8(d3 + offset) : this.getAttribute("transform");
        });
        tickEnter.attr("opacity", epsilon).attr("transform", function(d3) {
          var p3 = this.parentNode.__axis;
          return transform8((p3 && isFinite(p3 = p3(d3)) ? p3 : position5(d3)) + offset);
        });
      }
      tickExit.remove();
      path4.attr("d", orient === left || orient === right ? tickSizeOuter ? "M" + k2 * tickSizeOuter + "," + range0 + "H" + offset + "V" + range1 + "H" + k2 * tickSizeOuter : "M" + offset + "," + range0 + "V" + range1 : tickSizeOuter ? "M" + range0 + "," + k2 * tickSizeOuter + "V" + offset + "H" + range1 + "V" + k2 * tickSizeOuter : "M" + range0 + "," + offset + "H" + range1);
      tick.attr("opacity", 1).attr("transform", function(d3) {
        return transform8(position5(d3) + offset);
      });
      line2.attr(x5 + "2", k2 * tickSizeInner);
      text4.attr(x5, k2 * spacing2).text(format3);
      selection2.filter(entering).attr("fill", "none").attr("font-size", 10).attr("font-family", "sans-serif").attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
      selection2.each(function() {
        this.__axis = position5;
      });
    }
    __name(axis2, "axis");
    axis2.scale = function(_3) {
      return arguments.length ? (scale3 = _3, axis2) : scale3;
    };
    axis2.ticks = function() {
      return tickArguments = Array.from(arguments), axis2;
    };
    axis2.tickArguments = function(_3) {
      return arguments.length ? (tickArguments = _3 == null ? [] : Array.from(_3), axis2) : tickArguments.slice();
    };
    axis2.tickValues = function(_3) {
      return arguments.length ? (tickValues = _3 == null ? null : Array.from(_3), axis2) : tickValues && tickValues.slice();
    };
    axis2.tickFormat = function(_3) {
      return arguments.length ? (tickFormat2 = _3, axis2) : tickFormat2;
    };
    axis2.tickSize = function(_3) {
      return arguments.length ? (tickSizeInner = tickSizeOuter = +_3, axis2) : tickSizeInner;
    };
    axis2.tickSizeInner = function(_3) {
      return arguments.length ? (tickSizeInner = +_3, axis2) : tickSizeInner;
    };
    axis2.tickSizeOuter = function(_3) {
      return arguments.length ? (tickSizeOuter = +_3, axis2) : tickSizeOuter;
    };
    axis2.tickPadding = function(_3) {
      return arguments.length ? (tickPadding = +_3, axis2) : tickPadding;
    };
    axis2.offset = function(_3) {
      return arguments.length ? (offset = +_3, axis2) : offset;
    };
    return axis2;
  }
  function axisTop(scale3) {
    return axis(top, scale3);
  }
  function axisBottom(scale3) {
    return axis(bottom, scale3);
  }
  var top, right, bottom, left, epsilon;
  var init_axis = __esm({
    "../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/axis.js"() {
      "use strict";
      init_identity();
      top = 1;
      right = 2;
      bottom = 3;
      left = 4;
      epsilon = 1e-6;
      __name(translateX, "translateX");
      __name(translateY, "translateY");
      __name(number2, "number");
      __name(center, "center");
      __name(entering, "entering");
      __name(axis, "axis");
      __name(axisTop, "axisTop");
      __name(axisBottom, "axisBottom");
    }
  });

  // ../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/index.js
  var init_src3 = __esm({
    "../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/index.js"() {
      "use strict";
      init_axis();
    }
  });

  // ../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js
  function dispatch() {
    for (var i2 = 0, n2 = arguments.length, _3 = {}, t4; i2 < n2; ++i2) {
      if (!(t4 = arguments[i2] + "") || t4 in _3 || /[\s.]/.test(t4)) throw new Error("illegal type: " + t4);
      _3[t4] = [];
    }
    return new Dispatch(_3);
  }
  function Dispatch(_3) {
    this._ = _3;
  }
  function parseTypenames(typenames, types) {
    return typenames.trim().split(/^|\s+/).map(function(t4) {
      var name = "", i2 = t4.indexOf(".");
      if (i2 >= 0) name = t4.slice(i2 + 1), t4 = t4.slice(0, i2);
      if (t4 && !types.hasOwnProperty(t4)) throw new Error("unknown type: " + t4);
      return { type: t4, name };
    });
  }
  function get(type3, name) {
    for (var i2 = 0, n2 = type3.length, c3; i2 < n2; ++i2) {
      if ((c3 = type3[i2]).name === name) {
        return c3.value;
      }
    }
  }
  function set(type3, name, callback) {
    for (var i2 = 0, n2 = type3.length; i2 < n2; ++i2) {
      if (type3[i2].name === name) {
        type3[i2] = noop, type3 = type3.slice(0, i2).concat(type3.slice(i2 + 1));
        break;
      }
    }
    if (callback != null) type3.push({ name, value: callback });
    return type3;
  }
  var noop, dispatch_default;
  var init_dispatch = __esm({
    "../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js"() {
      "use strict";
      noop = { value: /* @__PURE__ */ __name(() => {
      }, "value") };
      __name(dispatch, "dispatch");
      __name(Dispatch, "Dispatch");
      __name(parseTypenames, "parseTypenames");
      Dispatch.prototype = dispatch.prototype = {
        constructor: Dispatch,
        on: /* @__PURE__ */ __name(function(typename, callback) {
          var _3 = this._, T3 = parseTypenames(typename + "", _3), t4, i2 = -1, n2 = T3.length;
          if (arguments.length < 2) {
            while (++i2 < n2) if ((t4 = (typename = T3[i2]).type) && (t4 = get(_3[t4], typename.name))) return t4;
            return;
          }
          if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
          while (++i2 < n2) {
            if (t4 = (typename = T3[i2]).type) _3[t4] = set(_3[t4], typename.name, callback);
            else if (callback == null) for (t4 in _3) _3[t4] = set(_3[t4], typename.name, null);
          }
          return this;
        }, "on"),
        copy: /* @__PURE__ */ __name(function() {
          var copy5 = {}, _3 = this._;
          for (var t4 in _3) copy5[t4] = _3[t4].slice();
          return new Dispatch(copy5);
        }, "copy"),
        call: /* @__PURE__ */ __name(function(type3, that) {
          if ((n2 = arguments.length - 2) > 0) for (var args = new Array(n2), i2 = 0, n2, t4; i2 < n2; ++i2) args[i2] = arguments[i2 + 2];
          if (!this._.hasOwnProperty(type3)) throw new Error("unknown type: " + type3);
          for (t4 = this._[type3], i2 = 0, n2 = t4.length; i2 < n2; ++i2) t4[i2].value.apply(that, args);
        }, "call"),
        apply: /* @__PURE__ */ __name(function(type3, that, args) {
          if (!this._.hasOwnProperty(type3)) throw new Error("unknown type: " + type3);
          for (var t4 = this._[type3], i2 = 0, n2 = t4.length; i2 < n2; ++i2) t4[i2].value.apply(that, args);
        }, "apply")
      };
      __name(get, "get");
      __name(set, "set");
      dispatch_default = dispatch;
    }
  });

  // ../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/index.js
  var init_src4 = __esm({
    "../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/index.js"() {
      "use strict";
      init_dispatch();
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js
  var xhtml, namespaces_default;
  var init_namespaces = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js"() {
      "use strict";
      xhtml = "http://www.w3.org/1999/xhtml";
      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/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespace.js
  function namespace_default(name) {
    var prefix = name += "", i2 = prefix.indexOf(":");
    if (i2 >= 0 && (prefix = name.slice(0, i2)) !== "xmlns") name = name.slice(i2 + 1);
    return namespaces_default.hasOwnProperty(prefix) ? { space: namespaces_default[prefix], local: name } : name;
  }
  var init_namespace = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespace.js"() {
      "use strict";
      init_namespaces();
      __name(namespace_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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);
  }
  var init_creator = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/creator.js"() {
      "use strict";
      init_namespace();
      init_namespaces();
      __name(creatorInherit, "creatorInherit");
      __name(creatorFixed, "creatorFixed");
      __name(creator_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selector.js
  function none() {
  }
  function selector_default(selector) {
    return selector == null ? none : function() {
      return this.querySelector(selector);
    };
  }
  var init_selector = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selector.js"() {
      "use strict";
      __name(none, "none");
      __name(selector_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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, m3 = groups.length, subgroups = new Array(m3), j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, subgroup = subgroups[j3] = new Array(n2), node2, subnode, i2 = 0; i2 < n2; ++i2) {
        if ((node2 = group2[i2]) && (subnode = select.call(node2, node2.__data__, i2, group2))) {
          if ("__data__" in node2) subnode.__data__ = node2.__data__;
          subgroup[i2] = subnode;
        }
      }
    }
    return new Selection(subgroups, this._parents);
  }
  var init_select = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/select.js"() {
      "use strict";
      init_selection();
      init_selector();
      __name(select_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/array.js
  function array(x5) {
    return x5 == null ? [] : Array.isArray(x5) ? x5 : Array.from(x5);
  }
  var init_array = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/array.js"() {
      "use strict";
      __name(array, "array");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectorAll.js
  function empty() {
    return [];
  }
  function selectorAll_default(selector) {
    return selector == null ? empty : function() {
      return this.querySelectorAll(selector);
    };
  }
  var init_selectorAll = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectorAll.js"() {
      "use strict";
      __name(empty, "empty");
      __name(selectorAll_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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, m3 = groups.length, subgroups = [], parents3 = [], j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, node2, i2 = 0; i2 < n2; ++i2) {
        if (node2 = group2[i2]) {
          subgroups.push(select.call(node2, node2.__data__, i2, group2));
          parents3.push(node2);
        }
      }
    }
    return new Selection(subgroups, parents3);
  }
  var init_selectAll = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectAll.js"() {
      "use strict";
      init_selection();
      init_array();
      init_selectorAll();
      __name(arrayAll, "arrayAll");
      __name(selectAll_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/matcher.js
  function matcher_default(selector) {
    return function() {
      return this.matches(selector);
    };
  }
  function childMatcher(selector) {
    return function(node2) {
      return node2.matches(selector);
    };
  }
  var init_matcher = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/matcher.js"() {
      "use strict";
      __name(matcher_default, "default");
      __name(childMatcher, "childMatcher");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChild.js
  function childFind(match3) {
    return function() {
      return find.call(this.children, match3);
    };
  }
  function childFirst() {
    return this.firstElementChild;
  }
  function selectChild_default(match3) {
    return this.select(match3 == null ? childFirst : childFind(typeof match3 === "function" ? match3 : childMatcher(match3)));
  }
  var find;
  var init_selectChild = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChild.js"() {
      "use strict";
      init_matcher();
      find = Array.prototype.find;
      __name(childFind, "childFind");
      __name(childFirst, "childFirst");
      __name(selectChild_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChildren.js
  function children() {
    return Array.from(this.children);
  }
  function childrenFilter(match3) {
    return function() {
      return filter.call(this.children, match3);
    };
  }
  function selectChildren_default(match3) {
    return this.selectAll(match3 == null ? children : childrenFilter(typeof match3 === "function" ? match3 : childMatcher(match3)));
  }
  var filter;
  var init_selectChildren = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChildren.js"() {
      "use strict";
      init_matcher();
      filter = Array.prototype.filter;
      __name(children, "children");
      __name(childrenFilter, "childrenFilter");
      __name(selectChildren_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/filter.js
  function filter_default(match3) {
    if (typeof match3 !== "function") match3 = matcher_default(match3);
    for (var groups = this._groups, m3 = groups.length, subgroups = new Array(m3), j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, subgroup = subgroups[j3] = [], node2, i2 = 0; i2 < n2; ++i2) {
        if ((node2 = group2[i2]) && match3.call(node2, node2.__data__, i2, group2)) {
          subgroup.push(node2);
        }
      }
    }
    return new Selection(subgroups, this._parents);
  }
  var init_filter = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/filter.js"() {
      "use strict";
      init_selection();
      init_matcher();
      __name(filter_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js
  function sparse_default(update2) {
    return new Array(update2.length);
  }
  var init_sparse = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js"() {
      "use strict";
      __name(sparse_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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(parent4, datum2) {
    this.ownerDocument = parent4.ownerDocument;
    this.namespaceURI = parent4.namespaceURI;
    this._next = null;
    this._parent = parent4;
    this.__data__ = datum2;
  }
  var init_enter = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/enter.js"() {
      "use strict";
      init_sparse();
      init_selection();
      __name(enter_default, "default");
      __name(EnterNode, "EnterNode");
      EnterNode.prototype = {
        constructor: EnterNode,
        appendChild: /* @__PURE__ */ __name(function(child) {
          return this._parent.insertBefore(child, this._next);
        }, "appendChild"),
        insertBefore: /* @__PURE__ */ __name(function(child, next3) {
          return this._parent.insertBefore(child, next3);
        }, "insertBefore"),
        querySelector: /* @__PURE__ */ __name(function(selector) {
          return this._parent.querySelector(selector);
        }, "querySelector"),
        querySelectorAll: /* @__PURE__ */ __name(function(selector) {
          return this._parent.querySelectorAll(selector);
        }, "querySelectorAll")
      };
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js
  function constant_default(x5) {
    return function() {
      return x5;
    };
  }
  var init_constant = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js"() {
      "use strict";
      __name(constant_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/data.js
  function bindIndex(parent4, group2, enter, update2, exit, data6) {
    var i2 = 0, node2, groupLength = group2.length, dataLength = data6.length;
    for (; i2 < dataLength; ++i2) {
      if (node2 = group2[i2]) {
        node2.__data__ = data6[i2];
        update2[i2] = node2;
      } else {
        enter[i2] = new EnterNode(parent4, data6[i2]);
      }
    }
    for (; i2 < groupLength; ++i2) {
      if (node2 = group2[i2]) {
        exit[i2] = node2;
      }
    }
  }
  function bindKey(parent4, group2, enter, update2, exit, data6, key) {
    var i2, node2, nodeByKeyValue = /* @__PURE__ */ new Map(), groupLength = group2.length, dataLength = data6.length, keyValues = new Array(groupLength), keyValue;
    for (i2 = 0; i2 < groupLength; ++i2) {
      if (node2 = group2[i2]) {
        keyValues[i2] = keyValue = key.call(node2, node2.__data__, i2, group2) + "";
        if (nodeByKeyValue.has(keyValue)) {
          exit[i2] = node2;
        } else {
          nodeByKeyValue.set(keyValue, node2);
        }
      }
    }
    for (i2 = 0; i2 < dataLength; ++i2) {
      keyValue = key.call(parent4, data6[i2], i2, data6) + "";
      if (node2 = nodeByKeyValue.get(keyValue)) {
        update2[i2] = node2;
        node2.__data__ = data6[i2];
        nodeByKeyValue.delete(keyValue);
      } else {
        enter[i2] = new EnterNode(parent4, data6[i2]);
      }
    }
    for (i2 = 0; i2 < groupLength; ++i2) {
      if ((node2 = group2[i2]) && nodeByKeyValue.get(keyValues[i2]) === node2) {
        exit[i2] = node2;
      }
    }
  }
  function datum(node2) {
    return node2.__data__;
  }
  function data_default(value2, key) {
    if (!arguments.length) return Array.from(this, datum);
    var bind = key ? bindKey : bindIndex, parents3 = this._parents, groups = this._groups;
    if (typeof value2 !== "function") value2 = constant_default(value2);
    for (var m3 = groups.length, update2 = new Array(m3), enter = new Array(m3), exit = new Array(m3), j3 = 0; j3 < m3; ++j3) {
      var parent4 = parents3[j3], group2 = groups[j3], groupLength = group2.length, data6 = arraylike(value2.call(parent4, parent4 && parent4.__data__, j3, parents3)), dataLength = data6.length, enterGroup = enter[j3] = new Array(dataLength), updateGroup = update2[j3] = new Array(dataLength), exitGroup = exit[j3] = new Array(groupLength);
      bind(parent4, group2, enterGroup, updateGroup, exitGroup, data6, key);
      for (var i0 = 0, i1 = 0, previous, next3; i0 < dataLength; ++i0) {
        if (previous = enterGroup[i0]) {
          if (i0 >= i1) i1 = i0 + 1;
          while (!(next3 = updateGroup[i1]) && ++i1 < dataLength) ;
          previous._next = next3 || null;
        }
      }
    }
    update2 = new Selection(update2, parents3);
    update2._enter = enter;
    update2._exit = exit;
    return update2;
  }
  function arraylike(data6) {
    return typeof data6 === "object" && "length" in data6 ? data6 : Array.from(data6);
  }
  var init_data = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/data.js"() {
      "use strict";
      init_selection();
      init_enter();
      init_constant();
      __name(bindIndex, "bindIndex");
      __name(bindKey, "bindKey");
      __name(datum, "datum");
      __name(data_default, "default");
      __name(arraylike, "arraylike");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/exit.js
  function exit_default() {
    return new Selection(this._exit || this._groups.map(sparse_default), this._parents);
  }
  var init_exit = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/exit.js"() {
      "use strict";
      init_sparse();
      init_selection();
      __name(exit_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/join.js
  function join_default(onenter, onupdate, onexit) {
    var enter = this.enter(), update2 = this, exit = this.exit();
    if (typeof onenter === "function") {
      enter = onenter(enter);
      if (enter) enter = enter.selection();
    } else {
      enter = enter.append(onenter + "");
    }
    if (onupdate != null) {
      update2 = onupdate(update2);
      if (update2) update2 = update2.selection();
    }
    if (onexit == null) exit.remove();
    else onexit(exit);
    return enter && update2 ? enter.merge(update2).order() : update2;
  }
  var init_join = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/join.js"() {
      "use strict";
      __name(join_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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, m3 = Math.min(m0, m1), merges = new Array(m0), j3 = 0; j3 < m3; ++j3) {
      for (var group0 = groups0[j3], group1 = groups1[j3], n2 = group0.length, merge6 = merges[j3] = new Array(n2), node2, i2 = 0; i2 < n2; ++i2) {
        if (node2 = group0[i2] || group1[i2]) {
          merge6[i2] = node2;
        }
      }
    }
    for (; j3 < m0; ++j3) {
      merges[j3] = groups0[j3];
    }
    return new Selection(merges, this._parents);
  }
  var init_merge2 = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/merge.js"() {
      "use strict";
      init_selection();
      __name(merge_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/order.js
  function order_default() {
    for (var groups = this._groups, j3 = -1, m3 = groups.length; ++j3 < m3; ) {
      for (var group2 = groups[j3], i2 = group2.length - 1, next3 = group2[i2], node2; --i2 >= 0; ) {
        if (node2 = group2[i2]) {
          if (next3 && node2.compareDocumentPosition(next3) ^ 4) next3.parentNode.insertBefore(node2, next3);
          next3 = node2;
        }
      }
    }
    return this;
  }
  var init_order = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/order.js"() {
      "use strict";
      __name(order_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sort.js
  function sort_default(compare) {
    if (!compare) compare = ascending2;
    function compareNode(a2, b3) {
      return a2 && b3 ? compare(a2.__data__, b3.__data__) : !a2 - !b3;
    }
    __name(compareNode, "compareNode");
    for (var groups = this._groups, m3 = groups.length, sortgroups = new Array(m3), j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, sortgroup = sortgroups[j3] = new Array(n2), node2, i2 = 0; i2 < n2; ++i2) {
        if (node2 = group2[i2]) {
          sortgroup[i2] = node2;
        }
      }
      sortgroup.sort(compareNode);
    }
    return new Selection(sortgroups, this._parents).order();
  }
  function ascending2(a2, b3) {
    return a2 < b3 ? -1 : a2 > b3 ? 1 : a2 >= b3 ? 0 : NaN;
  }
  var init_sort = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sort.js"() {
      "use strict";
      init_selection();
      __name(sort_default, "default");
      __name(ascending2, "ascending");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/call.js
  function call_default() {
    var callback = arguments[0];
    arguments[0] = this;
    callback.apply(null, arguments);
    return this;
  }
  var init_call = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/call.js"() {
      "use strict";
      __name(call_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js
  function nodes_default() {
    return Array.from(this);
  }
  var init_nodes = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js"() {
      "use strict";
      __name(nodes_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/node.js
  function node_default() {
    for (var groups = this._groups, j3 = 0, m3 = groups.length; j3 < m3; ++j3) {
      for (var group2 = groups[j3], i2 = 0, n2 = group2.length; i2 < n2; ++i2) {
        var node2 = group2[i2];
        if (node2) return node2;
      }
    }
    return null;
  }
  var init_node = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/node.js"() {
      "use strict";
      __name(node_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js
  function size_default() {
    let size4 = 0;
    for (const node2 of this) ++size4;
    return size4;
  }
  var init_size2 = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js"() {
      "use strict";
      __name(size_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/empty.js
  function empty_default() {
    return !this.node();
  }
  var init_empty = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/empty.js"() {
      "use strict";
      __name(empty_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/each.js
  function each_default(callback) {
    for (var groups = this._groups, j3 = 0, m3 = groups.length; j3 < m3; ++j3) {
      for (var group2 = groups[j3], i2 = 0, n2 = group2.length, node2; i2 < n2; ++i2) {
        if (node2 = group2[i2]) callback.call(node2, node2.__data__, i2, group2);
      }
    }
    return this;
  }
  var init_each = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/each.js"() {
      "use strict";
      __name(each_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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, value2) {
    return function() {
      this.setAttribute(name, value2);
    };
  }
  function attrConstantNS(fullname, value2) {
    return function() {
      this.setAttributeNS(fullname.space, fullname.local, value2);
    };
  }
  function attrFunction(name, value2) {
    return function() {
      var v3 = value2.apply(this, arguments);
      if (v3 == null) this.removeAttribute(name);
      else this.setAttribute(name, v3);
    };
  }
  function attrFunctionNS(fullname, value2) {
    return function() {
      var v3 = value2.apply(this, arguments);
      if (v3 == null) this.removeAttributeNS(fullname.space, fullname.local);
      else this.setAttributeNS(fullname.space, fullname.local, v3);
    };
  }
  function attr_default(name, value2) {
    var fullname = namespace_default(name);
    if (arguments.length < 2) {
      var node2 = this.node();
      return fullname.local ? node2.getAttributeNS(fullname.space, fullname.local) : node2.getAttribute(fullname);
    }
    return this.each((value2 == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value2 === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value2));
  }
  var init_attr = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/attr.js"() {
      "use strict";
      init_namespace();
      __name(attrRemove, "attrRemove");
      __name(attrRemoveNS, "attrRemoveNS");
      __name(attrConstant, "attrConstant");
      __name(attrConstantNS, "attrConstantNS");
      __name(attrFunction, "attrFunction");
      __name(attrFunctionNS, "attrFunctionNS");
      __name(attr_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/window.js
  function window_default(node2) {
    return node2.ownerDocument && node2.ownerDocument.defaultView || node2.document && node2 || node2.defaultView;
  }
  var init_window = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/window.js"() {
      "use strict";
      __name(window_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/style.js
  function styleRemove(name) {
    return function() {
      this.style.removeProperty(name);
    };
  }
  function styleConstant(name, value2, priority3) {
    return function() {
      this.style.setProperty(name, value2, priority3);
    };
  }
  function styleFunction(name, value2, priority3) {
    return function() {
      var v3 = value2.apply(this, arguments);
      if (v3 == null) this.style.removeProperty(name);
      else this.style.setProperty(name, v3, priority3);
    };
  }
  function style_default(name, value2, priority3) {
    return arguments.length > 1 ? this.each((value2 == null ? styleRemove : typeof value2 === "function" ? styleFunction : styleConstant)(name, value2, priority3 == null ? "" : priority3)) : styleValue(this.node(), name);
  }
  function styleValue(node2, name) {
    return node2.style.getPropertyValue(name) || window_default(node2).getComputedStyle(node2, null).getPropertyValue(name);
  }
  var init_style = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/style.js"() {
      "use strict";
      init_window();
      __name(styleRemove, "styleRemove");
      __name(styleConstant, "styleConstant");
      __name(styleFunction, "styleFunction");
      __name(style_default, "default");
      __name(styleValue, "styleValue");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/property.js
  function propertyRemove(name) {
    return function() {
      delete this[name];
    };
  }
  function propertyConstant(name, value2) {
    return function() {
      this[name] = value2;
    };
  }
  function propertyFunction(name, value2) {
    return function() {
      var v3 = value2.apply(this, arguments);
      if (v3 == null) delete this[name];
      else this[name] = v3;
    };
  }
  function property_default(name, value2) {
    return arguments.length > 1 ? this.each((value2 == null ? propertyRemove : typeof value2 === "function" ? propertyFunction : propertyConstant)(name, value2)) : this.node()[name];
  }
  var init_property = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/property.js"() {
      "use strict";
      __name(propertyRemove, "propertyRemove");
      __name(propertyConstant, "propertyConstant");
      __name(propertyFunction, "propertyFunction");
      __name(property_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/classed.js
  function classArray(string3) {
    return string3.trim().split(/^|\s+/);
  }
  function classList(node2) {
    return node2.classList || new ClassList(node2);
  }
  function ClassList(node2) {
    this._node = node2;
    this._names = classArray(node2.getAttribute("class") || "");
  }
  function classedAdd(node2, names) {
    var list = classList(node2), i2 = -1, n2 = names.length;
    while (++i2 < n2) list.add(names[i2]);
  }
  function classedRemove(node2, names) {
    var list = classList(node2), i2 = -1, n2 = names.length;
    while (++i2 < n2) list.remove(names[i2]);
  }
  function classedTrue(names) {
    return function() {
      classedAdd(this, names);
    };
  }
  function classedFalse(names) {
    return function() {
      classedRemove(this, names);
    };
  }
  function classedFunction(names, value2) {
    return function() {
      (value2.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
    };
  }
  function classed_default(name, value2) {
    var names = classArray(name + "");
    if (arguments.length < 2) {
      var list = classList(this.node()), i2 = -1, n2 = names.length;
      while (++i2 < n2) if (!list.contains(names[i2])) return false;
      return true;
    }
    return this.each((typeof value2 === "function" ? classedFunction : value2 ? classedTrue : classedFalse)(names, value2));
  }
  var init_classed = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/classed.js"() {
      "use strict";
      __name(classArray, "classArray");
      __name(classList, "classList");
      __name(ClassList, "ClassList");
      ClassList.prototype = {
        add: /* @__PURE__ */ __name(function(name) {
          var i2 = this._names.indexOf(name);
          if (i2 < 0) {
            this._names.push(name);
            this._node.setAttribute("class", this._names.join(" "));
          }
        }, "add"),
        remove: /* @__PURE__ */ __name(function(name) {
          var i2 = this._names.indexOf(name);
          if (i2 >= 0) {
            this._names.splice(i2, 1);
            this._node.setAttribute("class", this._names.join(" "));
          }
        }, "remove"),
        contains: /* @__PURE__ */ __name(function(name) {
          return this._names.indexOf(name) >= 0;
        }, "contains")
      };
      __name(classedAdd, "classedAdd");
      __name(classedRemove, "classedRemove");
      __name(classedTrue, "classedTrue");
      __name(classedFalse, "classedFalse");
      __name(classedFunction, "classedFunction");
      __name(classed_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/text.js
  function textRemove() {
    this.textContent = "";
  }
  function textConstant(value2) {
    return function() {
      this.textContent = value2;
    };
  }
  function textFunction(value2) {
    return function() {
      var v3 = value2.apply(this, arguments);
      this.textContent = v3 == null ? "" : v3;
    };
  }
  function text_default(value2) {
    return arguments.length ? this.each(value2 == null ? textRemove : (typeof value2 === "function" ? textFunction : textConstant)(value2)) : this.node().textContent;
  }
  var init_text = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/text.js"() {
      "use strict";
      __name(textRemove, "textRemove");
      __name(textConstant, "textConstant");
      __name(textFunction, "textFunction");
      __name(text_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/html.js
  function htmlRemove() {
    this.innerHTML = "";
  }
  function htmlConstant(value2) {
    return function() {
      this.innerHTML = value2;
    };
  }
  function htmlFunction(value2) {
    return function() {
      var v3 = value2.apply(this, arguments);
      this.innerHTML = v3 == null ? "" : v3;
    };
  }
  function html_default(value2) {
    return arguments.length ? this.each(value2 == null ? htmlRemove : (typeof value2 === "function" ? htmlFunction : htmlConstant)(value2)) : this.node().innerHTML;
  }
  var init_html2 = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/html.js"() {
      "use strict";
      __name(htmlRemove, "htmlRemove");
      __name(htmlConstant, "htmlConstant");
      __name(htmlFunction, "htmlFunction");
      __name(html_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/raise.js
  function raise() {
    if (this.nextSibling) this.parentNode.appendChild(this);
  }
  function raise_default() {
    return this.each(raise);
  }
  var init_raise = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/raise.js"() {
      "use strict";
      __name(raise, "raise");
      __name(raise_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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);
  }
  var init_lower = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/lower.js"() {
      "use strict";
      __name(lower, "lower");
      __name(lower_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/append.js
  function append_default(name) {
    var create4 = typeof name === "function" ? name : creator_default(name);
    return this.select(function() {
      return this.appendChild(create4.apply(this, arguments));
    });
  }
  var init_append = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/append.js"() {
      "use strict";
      init_creator();
      __name(append_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/insert.js
  function constantNull() {
    return null;
  }
  function insert_default(name, before) {
    var create4 = 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(create4.apply(this, arguments), select.apply(this, arguments) || null);
    });
  }
  var init_insert = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/insert.js"() {
      "use strict";
      init_creator();
      init_selector();
      __name(constantNull, "constantNull");
      __name(insert_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/remove.js
  function remove() {
    var parent4 = this.parentNode;
    if (parent4) parent4.removeChild(this);
  }
  function remove_default() {
    return this.each(remove);
  }
  var init_remove = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/remove.js"() {
      "use strict";
      __name(remove, "remove");
      __name(remove_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/clone.js
  function selection_cloneShallow() {
    var clone9 = this.cloneNode(false), parent4 = this.parentNode;
    return parent4 ? parent4.insertBefore(clone9, this.nextSibling) : clone9;
  }
  function selection_cloneDeep() {
    var clone9 = this.cloneNode(true), parent4 = this.parentNode;
    return parent4 ? parent4.insertBefore(clone9, this.nextSibling) : clone9;
  }
  function clone_default(deep) {
    return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
  }
  var init_clone = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/clone.js"() {
      "use strict";
      __name(selection_cloneShallow, "selection_cloneShallow");
      __name(selection_cloneDeep, "selection_cloneDeep");
      __name(clone_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/datum.js
  function datum_default(value2) {
    return arguments.length ? this.property("__data__", value2) : this.node().__data__;
  }
  var init_datum = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/datum.js"() {
      "use strict";
      __name(datum_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js
  function contextListener(listener) {
    return function(event3) {
      listener.call(this, event3, this.__data__);
    };
  }
  function parseTypenames2(typenames) {
    return typenames.trim().split(/^|\s+/).map(function(t4) {
      var name = "", i2 = t4.indexOf(".");
      if (i2 >= 0) name = t4.slice(i2 + 1), t4 = t4.slice(0, i2);
      return { type: t4, name };
    });
  }
  function onRemove(typename) {
    return function() {
      var on3 = this.__on;
      if (!on3) return;
      for (var j3 = 0, i2 = -1, m3 = on3.length, o2; j3 < m3; ++j3) {
        if (o2 = on3[j3], (!typename.type || o2.type === typename.type) && o2.name === typename.name) {
          this.removeEventListener(o2.type, o2.listener, o2.options);
        } else {
          on3[++i2] = o2;
        }
      }
      if (++i2) on3.length = i2;
      else delete this.__on;
    };
  }
  function onAdd(typename, value2, options2) {
    return function() {
      var on3 = this.__on, o2, listener = contextListener(value2);
      if (on3) for (var j3 = 0, m3 = on3.length; j3 < m3; ++j3) {
        if ((o2 = on3[j3]).type === typename.type && o2.name === typename.name) {
          this.removeEventListener(o2.type, o2.listener, o2.options);
          this.addEventListener(o2.type, o2.listener = listener, o2.options = options2);
          o2.value = value2;
          return;
        }
      }
      this.addEventListener(typename.type, listener, options2);
      o2 = { type: typename.type, name: typename.name, value: value2, listener, options: options2 };
      if (!on3) this.__on = [o2];
      else on3.push(o2);
    };
  }
  function on_default(typename, value2, options2) {
    var typenames = parseTypenames2(typename + ""), i2, n2 = typenames.length, t4;
    if (arguments.length < 2) {
      var on3 = this.node().__on;
      if (on3) for (var j3 = 0, m3 = on3.length, o2; j3 < m3; ++j3) {
        for (i2 = 0, o2 = on3[j3]; i2 < n2; ++i2) {
          if ((t4 = typenames[i2]).type === o2.type && t4.name === o2.name) {
            return o2.value;
          }
        }
      }
      return;
    }
    on3 = value2 ? onAdd : onRemove;
    for (i2 = 0; i2 < n2; ++i2) this.each(on3(typenames[i2], value2, options2));
    return this;
  }
  var init_on = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js"() {
      "use strict";
      __name(contextListener, "contextListener");
      __name(parseTypenames2, "parseTypenames");
      __name(onRemove, "onRemove");
      __name(onAdd, "onAdd");
      __name(on_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/dispatch.js
  function dispatchEvent(node2, type3, params) {
    var window3 = window_default(node2), event3 = window3.CustomEvent;
    if (typeof event3 === "function") {
      event3 = new event3(type3, params);
    } else {
      event3 = window3.document.createEvent("Event");
      if (params) event3.initEvent(type3, params.bubbles, params.cancelable), event3.detail = params.detail;
      else event3.initEvent(type3, false, false);
    }
    node2.dispatchEvent(event3);
  }
  function dispatchConstant(type3, params) {
    return function() {
      return dispatchEvent(this, type3, params);
    };
  }
  function dispatchFunction(type3, params) {
    return function() {
      return dispatchEvent(this, type3, params.apply(this, arguments));
    };
  }
  function dispatch_default2(type3, params) {
    return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type3, params));
  }
  var init_dispatch2 = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/dispatch.js"() {
      "use strict";
      init_window();
      __name(dispatchEvent, "dispatchEvent");
      __name(dispatchConstant, "dispatchConstant");
      __name(dispatchFunction, "dispatchFunction");
      __name(dispatch_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/iterator.js
  function* iterator_default() {
    for (var groups = this._groups, j3 = 0, m3 = groups.length; j3 < m3; ++j3) {
      for (var group2 = groups[j3], i2 = 0, n2 = group2.length, node2; i2 < n2; ++i2) {
        if (node2 = group2[i2]) yield node2;
      }
    }
  }
  var init_iterator = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/iterator.js"() {
      "use strict";
      __name(iterator_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js
  function Selection(groups, parents3) {
    this._groups = groups;
    this._parents = parents3;
  }
  function selection() {
    return new Selection([[document.documentElement]], root);
  }
  function selection_selection() {
    return this;
  }
  var root, selection_default;
  var init_selection = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js"() {
      "use strict";
      init_select();
      init_selectAll();
      init_selectChild();
      init_selectChildren();
      init_filter();
      init_data();
      init_enter();
      init_exit();
      init_join();
      init_merge2();
      init_order();
      init_sort();
      init_call();
      init_nodes();
      init_node();
      init_size2();
      init_empty();
      init_each();
      init_attr();
      init_style();
      init_property();
      init_classed();
      init_text();
      init_html2();
      init_raise();
      init_lower();
      init_append();
      init_insert();
      init_remove();
      init_clone();
      init_datum();
      init_on();
      init_dispatch2();
      init_iterator();
      root = [null];
      __name(Selection, "Selection");
      __name(selection, "selection");
      __name(selection_selection, "selection_selection");
      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
      };
      selection_default = selection;
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/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);
  }
  var init_select2 = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/select.js"() {
      "use strict";
      init_selection();
      __name(select_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/index.js
  var init_src5 = __esm({
    "../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/index.js"() {
      "use strict";
      init_matcher();
      init_namespace();
      init_select2();
      init_selection();
      init_selector();
      init_selectorAll();
      init_style();
    }
  });

  // ../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/index.js
  var init_src6 = __esm({
    "../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js
  function define_default(constructor, factory, prototype) {
    constructor.prototype = factory.prototype = prototype;
    prototype.constructor = constructor;
  }
  function extend(parent4, definition) {
    var prototype = Object.create(parent4.prototype);
    for (var key in definition) prototype[key] = definition[key];
    return prototype;
  }
  var init_define = __esm({
    "../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js"() {
      "use strict";
      __name(define_default, "default");
      __name(extend, "extend");
    }
  });

  // ../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js
  function Color2() {
  }
  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(format3) {
    var m3, l4;
    format3 = (format3 + "").trim().toLowerCase();
    return (m3 = reHex.exec(format3)) ? (l4 = m3[1].length, m3 = parseInt(m3[1], 16), l4 === 6 ? rgbn(m3) : l4 === 3 ? new Rgb(m3 >> 8 & 15 | m3 >> 4 & 240, m3 >> 4 & 15 | m3 & 240, (m3 & 15) << 4 | m3 & 15, 1) : l4 === 8 ? rgba2(m3 >> 24 & 255, m3 >> 16 & 255, m3 >> 8 & 255, (m3 & 255) / 255) : l4 === 4 ? rgba2(m3 >> 12 & 15 | m3 >> 8 & 240, m3 >> 8 & 15 | m3 >> 4 & 240, m3 >> 4 & 15 | m3 & 240, ((m3 & 15) << 4 | m3 & 15) / 255) : null) : (m3 = reRgbInteger.exec(format3)) ? new Rgb(m3[1], m3[2], m3[3], 1) : (m3 = reRgbPercent.exec(format3)) ? new Rgb(m3[1] * 255 / 100, m3[2] * 255 / 100, m3[3] * 255 / 100, 1) : (m3 = reRgbaInteger.exec(format3)) ? rgba2(m3[1], m3[2], m3[3], m3[4]) : (m3 = reRgbaPercent.exec(format3)) ? rgba2(m3[1] * 255 / 100, m3[2] * 255 / 100, m3[3] * 255 / 100, m3[4]) : (m3 = reHslPercent.exec(format3)) ? hsla(m3[1], m3[2] / 100, m3[3] / 100, 1) : (m3 = reHslaPercent.exec(format3)) ? hsla(m3[1], m3[2] / 100, m3[3] / 100, m3[4]) : named.hasOwnProperty(format3) ? rgbn(named[format3]) : format3 === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;
  }
  function rgbn(n2) {
    return new Rgb(n2 >> 16 & 255, n2 >> 8 & 255, n2 & 255, 1);
  }
  function rgba2(r2, g2, b3, a2) {
    if (a2 <= 0) r2 = g2 = b3 = NaN;
    return new Rgb(r2, g2, b3, a2);
  }
  function rgbConvert(o2) {
    if (!(o2 instanceof Color2)) o2 = color(o2);
    if (!o2) return new Rgb();
    o2 = o2.rgb();
    return new Rgb(o2.r, o2.g, o2.b, o2.opacity);
  }
  function rgb(r2, g2, b3, opacity) {
    return arguments.length === 1 ? rgbConvert(r2) : new Rgb(r2, g2, b3, opacity == null ? 1 : opacity);
  }
  function Rgb(r2, g2, b3, opacity) {
    this.r = +r2;
    this.g = +g2;
    this.b = +b3;
    this.opacity = +opacity;
  }
  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(value2) {
    return Math.max(0, Math.min(255, Math.round(value2) || 0));
  }
  function hex(value2) {
    value2 = clampi(value2);
    return (value2 < 16 ? "0" : "") + value2.toString(16);
  }
  function hsla(h3, s2, l4, a2) {
    if (a2 <= 0) h3 = s2 = l4 = NaN;
    else if (l4 <= 0 || l4 >= 1) h3 = s2 = NaN;
    else if (s2 <= 0) h3 = NaN;
    return new Hsl(h3, s2, l4, a2);
  }
  function hslConvert(o2) {
    if (o2 instanceof Hsl) return new Hsl(o2.h, o2.s, o2.l, o2.opacity);
    if (!(o2 instanceof Color2)) o2 = color(o2);
    if (!o2) return new Hsl();
    if (o2 instanceof Hsl) return o2;
    o2 = o2.rgb();
    var r2 = o2.r / 255, g2 = o2.g / 255, b3 = o2.b / 255, min10 = Math.min(r2, g2, b3), max10 = Math.max(r2, g2, b3), h3 = NaN, s2 = max10 - min10, l4 = (max10 + min10) / 2;
    if (s2) {
      if (r2 === max10) h3 = (g2 - b3) / s2 + (g2 < b3) * 6;
      else if (g2 === max10) h3 = (b3 - r2) / s2 + 2;
      else h3 = (r2 - g2) / s2 + 4;
      s2 /= l4 < 0.5 ? max10 + min10 : 2 - max10 - min10;
      h3 *= 60;
    } else {
      s2 = l4 > 0 && l4 < 1 ? 0 : h3;
    }
    return new Hsl(h3, s2, l4, o2.opacity);
  }
  function hsl(h3, s2, l4, opacity) {
    return arguments.length === 1 ? hslConvert(h3) : new Hsl(h3, s2, l4, opacity == null ? 1 : opacity);
  }
  function Hsl(h3, s2, l4, opacity) {
    this.h = +h3;
    this.s = +s2;
    this.l = +l4;
    this.opacity = +opacity;
  }
  function clamph(value2) {
    value2 = (value2 || 0) % 360;
    return value2 < 0 ? value2 + 360 : value2;
  }
  function clampt(value2) {
    return Math.max(0, Math.min(1, value2 || 0));
  }
  function hsl2rgb(h3, m1, m22) {
    return (h3 < 60 ? m1 + (m22 - m1) * h3 / 60 : h3 < 180 ? m22 : h3 < 240 ? m1 + (m22 - m1) * (240 - h3) / 60 : m1) * 255;
  }
  var darker, brighter, reI, reN, reP, reHex, reRgbInteger, reRgbPercent, reRgbaInteger, reRgbaPercent, reHslPercent, reHslaPercent, named;
  var init_color2 = __esm({
    "../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js"() {
      "use strict";
      init_define();
      __name(Color2, "Color");
      darker = 0.7;
      brighter = 1 / darker;
      reI = "\\s*([+-]?\\d+)\\s*";
      reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*";
      reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*";
      reHex = /^#([0-9a-f]{3,8})$/;
      reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`);
      reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`);
      reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`);
      reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`);
      reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`);
      reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
      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(Color2, color, {
        copy(channels2) {
          return Object.assign(new this.constructor(), this, channels2);
        },
        displayable() {
          return this.rgb().displayable();
        },
        hex: color_formatHex,
        // Deprecated! Use color.formatHex.
        formatHex: color_formatHex,
        formatHex8: color_formatHex8,
        formatHsl: color_formatHsl,
        formatRgb: color_formatRgb,
        toString: color_formatRgb
      });
      __name(color_formatHex, "color_formatHex");
      __name(color_formatHex8, "color_formatHex8");
      __name(color_formatHsl, "color_formatHsl");
      __name(color_formatRgb, "color_formatRgb");
      __name(color, "color");
      __name(rgbn, "rgbn");
      __name(rgba2, "rgba");
      __name(rgbConvert, "rgbConvert");
      __name(rgb, "rgb");
      __name(Rgb, "Rgb");
      define_default(Rgb, rgb, extend(Color2, {
        brighter(k2) {
          k2 = k2 == null ? brighter : Math.pow(brighter, k2);
          return new Rgb(this.r * k2, this.g * k2, this.b * k2, this.opacity);
        },
        darker(k2) {
          k2 = k2 == null ? darker : Math.pow(darker, k2);
          return new Rgb(this.r * k2, this.g * k2, this.b * k2, 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,
        // Deprecated! Use color.formatHex.
        formatHex: rgb_formatHex,
        formatHex8: rgb_formatHex8,
        formatRgb: rgb_formatRgb,
        toString: rgb_formatRgb
      }));
      __name(rgb_formatHex, "rgb_formatHex");
      __name(rgb_formatHex8, "rgb_formatHex8");
      __name(rgb_formatRgb, "rgb_formatRgb");
      __name(clampa, "clampa");
      __name(clampi, "clampi");
      __name(hex, "hex");
      __name(hsla, "hsla");
      __name(hslConvert, "hslConvert");
      __name(hsl, "hsl");
      __name(Hsl, "Hsl");
      define_default(Hsl, hsl, extend(Color2, {
        brighter(k2) {
          k2 = k2 == null ? brighter : Math.pow(brighter, k2);
          return new Hsl(this.h, this.s, this.l * k2, this.opacity);
        },
        darker(k2) {
          k2 = k2 == null ? darker : Math.pow(darker, k2);
          return new Hsl(this.h, this.s, this.l * k2, this.opacity);
        },
        rgb() {
          var h3 = this.h % 360 + (this.h < 0) * 360, s2 = isNaN(h3) || isNaN(this.s) ? 0 : this.s, l4 = this.l, m22 = l4 + (l4 < 0.5 ? l4 : 1 - l4) * s2, m1 = 2 * l4 - m22;
          return new Rgb(
            hsl2rgb(h3 >= 240 ? h3 - 240 : h3 + 120, m1, m22),
            hsl2rgb(h3, m1, m22),
            hsl2rgb(h3 < 120 ? h3 + 240 : h3 - 120, m1, m22),
            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})`}`;
        }
      }));
      __name(clamph, "clamph");
      __name(clampt, "clampt");
      __name(hsl2rgb, "hsl2rgb");
    }
  });

  // ../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/math.js
  var radians, degrees;
  var init_math = __esm({
    "../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/math.js"() {
      "use strict";
      radians = Math.PI / 180;
      degrees = 180 / Math.PI;
    }
  });

  // ../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/lab.js
  function labConvert(o2) {
    if (o2 instanceof Lab) return new Lab(o2.l, o2.a, o2.b, o2.opacity);
    if (o2 instanceof Hcl) return hcl2lab(o2);
    if (!(o2 instanceof Rgb)) o2 = rgbConvert(o2);
    var r2 = rgb2lrgb(o2.r), g2 = rgb2lrgb(o2.g), b3 = rgb2lrgb(o2.b), y6 = xyz2lab((0.2225045 * r2 + 0.7168786 * g2 + 0.0606169 * b3) / Yn), x5, z3;
    if (r2 === g2 && g2 === b3) x5 = z3 = y6;
    else {
      x5 = xyz2lab((0.4360747 * r2 + 0.3850649 * g2 + 0.1430804 * b3) / Xn);
      z3 = xyz2lab((0.0139322 * r2 + 0.0971045 * g2 + 0.7141733 * b3) / Zn);
    }
    return new Lab(116 * y6 - 16, 500 * (x5 - y6), 200 * (y6 - z3), o2.opacity);
  }
  function lab(l4, a2, b3, opacity) {
    return arguments.length === 1 ? labConvert(l4) : new Lab(l4, a2, b3, opacity == null ? 1 : opacity);
  }
  function Lab(l4, a2, b3, opacity) {
    this.l = +l4;
    this.a = +a2;
    this.b = +b3;
    this.opacity = +opacity;
  }
  function xyz2lab(t4) {
    return t4 > t3 ? Math.pow(t4, 1 / 3) : t4 / t2 + t0;
  }
  function lab2xyz(t4) {
    return t4 > t1 ? t4 * t4 * t4 : t2 * (t4 - t0);
  }
  function lrgb2rgb(x5) {
    return 255 * (x5 <= 31308e-7 ? 12.92 * x5 : 1.055 * Math.pow(x5, 1 / 2.4) - 0.055);
  }
  function rgb2lrgb(x5) {
    return (x5 /= 255) <= 0.04045 ? x5 / 12.92 : Math.pow((x5 + 0.055) / 1.055, 2.4);
  }
  function hclConvert(o2) {
    if (o2 instanceof Hcl) return new Hcl(o2.h, o2.c, o2.l, o2.opacity);
    if (!(o2 instanceof Lab)) o2 = labConvert(o2);
    if (o2.a === 0 && o2.b === 0) return new Hcl(NaN, 0 < o2.l && o2.l < 100 ? 0 : NaN, o2.l, o2.opacity);
    var h3 = Math.atan2(o2.b, o2.a) * degrees;
    return new Hcl(h3 < 0 ? h3 + 360 : h3, Math.sqrt(o2.a * o2.a + o2.b * o2.b), o2.l, o2.opacity);
  }
  function hcl(h3, c3, l4, opacity) {
    return arguments.length === 1 ? hclConvert(h3) : new Hcl(h3, c3, l4, opacity == null ? 1 : opacity);
  }
  function Hcl(h3, c3, l4, opacity) {
    this.h = +h3;
    this.c = +c3;
    this.l = +l4;
    this.opacity = +opacity;
  }
  function hcl2lab(o2) {
    if (isNaN(o2.h)) return new Lab(o2.l, 0, 0, o2.opacity);
    var h3 = o2.h * radians;
    return new Lab(o2.l, Math.cos(h3) * o2.c, Math.sin(h3) * o2.c, o2.opacity);
  }
  var K, Xn, Yn, Zn, t0, t1, t2, t3;
  var init_lab = __esm({
    "../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/lab.js"() {
      "use strict";
      init_define();
      init_color2();
      init_math();
      K = 18;
      Xn = 0.96422;
      Yn = 1;
      Zn = 0.82521;
      t0 = 4 / 29;
      t1 = 6 / 29;
      t2 = 3 * t1 * t1;
      t3 = t1 * t1 * t1;
      __name(labConvert, "labConvert");
      __name(lab, "lab");
      __name(Lab, "Lab");
      define_default(Lab, lab, extend(Color2, {
        brighter(k2) {
          return new Lab(this.l + K * (k2 == null ? 1 : k2), this.a, this.b, this.opacity);
        },
        darker(k2) {
          return new Lab(this.l - K * (k2 == null ? 1 : k2), this.a, this.b, this.opacity);
        },
        rgb() {
          var y6 = (this.l + 16) / 116, x5 = isNaN(this.a) ? y6 : y6 + this.a / 500, z3 = isNaN(this.b) ? y6 : y6 - this.b / 200;
          x5 = Xn * lab2xyz(x5);
          y6 = Yn * lab2xyz(y6);
          z3 = Zn * lab2xyz(z3);
          return new Rgb(
            lrgb2rgb(3.1338561 * x5 - 1.6168667 * y6 - 0.4906146 * z3),
            lrgb2rgb(-0.9787684 * x5 + 1.9161415 * y6 + 0.033454 * z3),
            lrgb2rgb(0.0719453 * x5 - 0.2289914 * y6 + 1.4052427 * z3),
            this.opacity
          );
        }
      }));
      __name(xyz2lab, "xyz2lab");
      __name(lab2xyz, "lab2xyz");
      __name(lrgb2rgb, "lrgb2rgb");
      __name(rgb2lrgb, "rgb2lrgb");
      __name(hclConvert, "hclConvert");
      __name(hcl, "hcl");
      __name(Hcl, "Hcl");
      __name(hcl2lab, "hcl2lab");
      define_default(Hcl, hcl, extend(Color2, {
        brighter(k2) {
          return new Hcl(this.h, this.c, this.l + K * (k2 == null ? 1 : k2), this.opacity);
        },
        darker(k2) {
          return new Hcl(this.h, this.c, this.l - K * (k2 == null ? 1 : k2), this.opacity);
        },
        rgb() {
          return hcl2lab(this).rgb();
        }
      }));
    }
  });

  // ../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/index.js
  var init_src7 = __esm({
    "../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/index.js"() {
      "use strict";
      init_color2();
      init_lab();
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basis.js
  function basis(t13, v0, v12, v23, v3) {
    var t22 = t13 * t13, t32 = t22 * t13;
    return ((1 - 3 * t13 + 3 * t22 - t32) * v0 + (4 - 6 * t22 + 3 * t32) * v12 + (1 + 3 * t13 + 3 * t22 - 3 * t32) * v23 + t32 * v3) / 6;
  }
  function basis_default(values3) {
    var n2 = values3.length - 1;
    return function(t4) {
      var i2 = t4 <= 0 ? t4 = 0 : t4 >= 1 ? (t4 = 1, n2 - 1) : Math.floor(t4 * n2), v12 = values3[i2], v23 = values3[i2 + 1], v0 = i2 > 0 ? values3[i2 - 1] : 2 * v12 - v23, v3 = i2 < n2 - 1 ? values3[i2 + 2] : 2 * v23 - v12;
      return basis((t4 - i2 / n2) * n2, v0, v12, v23, v3);
    };
  }
  var init_basis = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basis.js"() {
      "use strict";
      __name(basis, "basis");
      __name(basis_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basisClosed.js
  function basisClosed_default(values3) {
    var n2 = values3.length;
    return function(t4) {
      var i2 = Math.floor(((t4 %= 1) < 0 ? ++t4 : t4) * n2), v0 = values3[(i2 + n2 - 1) % n2], v12 = values3[i2 % n2], v23 = values3[(i2 + 1) % n2], v3 = values3[(i2 + 2) % n2];
      return basis((t4 - i2 / n2) * n2, v0, v12, v23, v3);
    };
  }
  var init_basisClosed = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basisClosed.js"() {
      "use strict";
      init_basis();
      __name(basisClosed_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js
  var constant_default2;
  var init_constant2 = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js"() {
      "use strict";
      constant_default2 = /* @__PURE__ */ __name((x5) => () => x5, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js
  function linear(a2, d3) {
    return function(t4) {
      return a2 + t4 * d3;
    };
  }
  function exponential(a2, b3, y6) {
    return a2 = Math.pow(a2, y6), b3 = Math.pow(b3, y6) - a2, y6 = 1 / y6, function(t4) {
      return Math.pow(a2 + t4 * b3, y6);
    };
  }
  function hue(a2, b3) {
    var d3 = b3 - a2;
    return d3 ? linear(a2, d3 > 180 || d3 < -180 ? d3 - 360 * Math.round(d3 / 360) : d3) : constant_default2(isNaN(a2) ? b3 : a2);
  }
  function gamma(y6) {
    return (y6 = +y6) === 1 ? nogamma : function(a2, b3) {
      return b3 - a2 ? exponential(a2, b3, y6) : constant_default2(isNaN(a2) ? b3 : a2);
    };
  }
  function nogamma(a2, b3) {
    var d3 = b3 - a2;
    return d3 ? linear(a2, d3) : constant_default2(isNaN(a2) ? b3 : a2);
  }
  var init_color3 = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js"() {
      "use strict";
      init_constant2();
      __name(linear, "linear");
      __name(exponential, "exponential");
      __name(hue, "hue");
      __name(gamma, "gamma");
      __name(nogamma, "nogamma");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js
  function rgbSpline(spline) {
    return function(colors2) {
      var n2 = colors2.length, r2 = new Array(n2), g2 = new Array(n2), b3 = new Array(n2), i2, color2;
      for (i2 = 0; i2 < n2; ++i2) {
        color2 = rgb(colors2[i2]);
        r2[i2] = color2.r || 0;
        g2[i2] = color2.g || 0;
        b3[i2] = color2.b || 0;
      }
      r2 = spline(r2);
      g2 = spline(g2);
      b3 = spline(b3);
      color2.opacity = 1;
      return function(t4) {
        color2.r = r2(t4);
        color2.g = g2(t4);
        color2.b = b3(t4);
        return color2 + "";
      };
    };
  }
  var rgb_default2, rgbBasis, rgbBasisClosed;
  var init_rgb2 = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js"() {
      "use strict";
      init_src7();
      init_basis();
      init_basisClosed();
      init_color3();
      rgb_default2 = (/* @__PURE__ */ __name((function rgbGamma(y6) {
        var color2 = gamma(y6);
        function rgb2(start3, end2) {
          var r2 = color2((start3 = rgb(start3)).r, (end2 = rgb(end2)).r), g2 = color2(start3.g, end2.g), b3 = color2(start3.b, end2.b), opacity = nogamma(start3.opacity, end2.opacity);
          return function(t4) {
            start3.r = r2(t4);
            start3.g = g2(t4);
            start3.b = b3(t4);
            start3.opacity = opacity(t4);
            return start3 + "";
          };
        }
        __name(rgb2, "rgb");
        rgb2.gamma = rgbGamma;
        return rgb2;
      }), "rgbGamma"))(1);
      __name(rgbSpline, "rgbSpline");
      rgbBasis = rgbSpline(basis_default);
      rgbBasisClosed = rgbSpline(basisClosed_default);
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js
  function numberArray_default(a2, b3) {
    if (!b3) b3 = [];
    var n2 = a2 ? Math.min(b3.length, a2.length) : 0, c3 = b3.slice(), i2;
    return function(t4) {
      for (i2 = 0; i2 < n2; ++i2) c3[i2] = a2[i2] * (1 - t4) + b3[i2] * t4;
      return c3;
    };
  }
  function isNumberArray(x5) {
    return ArrayBuffer.isView(x5) && !(x5 instanceof DataView);
  }
  var init_numberArray = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js"() {
      "use strict";
      __name(numberArray_default, "default");
      __name(isNumberArray, "isNumberArray");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js
  function genericArray(a2, b3) {
    var nb = b3 ? b3.length : 0, na = a2 ? Math.min(nb, a2.length) : 0, x5 = new Array(na), c3 = new Array(nb), i2;
    for (i2 = 0; i2 < na; ++i2) x5[i2] = value_default(a2[i2], b3[i2]);
    for (; i2 < nb; ++i2) c3[i2] = b3[i2];
    return function(t4) {
      for (i2 = 0; i2 < na; ++i2) c3[i2] = x5[i2](t4);
      return c3;
    };
  }
  var init_array2 = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js"() {
      "use strict";
      init_value();
      __name(genericArray, "genericArray");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js
  function date_default(a2, b3) {
    var d3 = /* @__PURE__ */ new Date();
    return a2 = +a2, b3 = +b3, function(t4) {
      return d3.setTime(a2 * (1 - t4) + b3 * t4), d3;
    };
  }
  var init_date = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js"() {
      "use strict";
      __name(date_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js
  function number_default(a2, b3) {
    return a2 = +a2, b3 = +b3, function(t4) {
      return a2 * (1 - t4) + b3 * t4;
    };
  }
  var init_number2 = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js"() {
      "use strict";
      __name(number_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js
  function object_default(a2, b3) {
    var i2 = {}, c3 = {}, k2;
    if (a2 === null || typeof a2 !== "object") a2 = {};
    if (b3 === null || typeof b3 !== "object") b3 = {};
    for (k2 in b3) {
      if (k2 in a2) {
        i2[k2] = value_default(a2[k2], b3[k2]);
      } else {
        c3[k2] = b3[k2];
      }
    }
    return function(t4) {
      for (k2 in i2) c3[k2] = i2[k2](t4);
      return c3;
    };
  }
  var init_object = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js"() {
      "use strict";
      init_value();
      __name(object_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js
  function zero2(b3) {
    return function() {
      return b3;
    };
  }
  function one(b3) {
    return function(t4) {
      return b3(t4) + "";
    };
  }
  function string_default(a2, b3) {
    var bi = reA.lastIndex = reB.lastIndex = 0, am, bm, bs, i2 = -1, s2 = [], q3 = [];
    a2 = a2 + "", b3 = b3 + "";
    while ((am = reA.exec(a2)) && (bm = reB.exec(b3))) {
      if ((bs = bm.index) > bi) {
        bs = b3.slice(bi, bs);
        if (s2[i2]) s2[i2] += bs;
        else s2[++i2] = bs;
      }
      if ((am = am[0]) === (bm = bm[0])) {
        if (s2[i2]) s2[i2] += bm;
        else s2[++i2] = bm;
      } else {
        s2[++i2] = null;
        q3.push({ i: i2, x: number_default(am, bm) });
      }
      bi = reB.lastIndex;
    }
    if (bi < b3.length) {
      bs = b3.slice(bi);
      if (s2[i2]) s2[i2] += bs;
      else s2[++i2] = bs;
    }
    return s2.length < 2 ? q3[0] ? one(q3[0].x) : zero2(b3) : (b3 = q3.length, function(t4) {
      for (var i3 = 0, o2; i3 < b3; ++i3) s2[(o2 = q3[i3]).i] = o2.x(t4);
      return s2.join("");
    });
  }
  var reA, reB;
  var init_string = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js"() {
      "use strict";
      init_number2();
      reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
      reB = new RegExp(reA.source, "g");
      __name(zero2, "zero");
      __name(one, "one");
      __name(string_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js
  function value_default(a2, b3) {
    var t4 = typeof b3, c3;
    return b3 == null || t4 === "boolean" ? constant_default2(b3) : (t4 === "number" ? number_default : t4 === "string" ? (c3 = color(b3)) ? (b3 = c3, rgb_default2) : string_default : b3 instanceof color ? rgb_default2 : b3 instanceof Date ? date_default : isNumberArray(b3) ? numberArray_default : Array.isArray(b3) ? genericArray : typeof b3.valueOf !== "function" && typeof b3.toString !== "function" || isNaN(b3) ? object_default : number_default)(a2, b3);
  }
  var init_value = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js"() {
      "use strict";
      init_src7();
      init_rgb2();
      init_array2();
      init_date();
      init_number2();
      init_object();
      init_string();
      init_constant2();
      init_numberArray();
      __name(value_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js
  function round_default(a2, b3) {
    return a2 = +a2, b3 = +b3, function(t4) {
      return Math.round(a2 * (1 - t4) + b3 * t4);
    };
  }
  var init_round = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js"() {
      "use strict";
      __name(round_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js
  function decompose_default(a2, b3, c3, d3, e3, f2) {
    var scaleX, scaleY, skewX;
    if (scaleX = Math.sqrt(a2 * a2 + b3 * b3)) a2 /= scaleX, b3 /= scaleX;
    if (skewX = a2 * c3 + b3 * d3) c3 -= a2 * skewX, d3 -= b3 * skewX;
    if (scaleY = Math.sqrt(c3 * c3 + d3 * d3)) c3 /= scaleY, d3 /= scaleY, skewX /= scaleY;
    if (a2 * d3 < b3 * c3) a2 = -a2, b3 = -b3, skewX = -skewX, scaleX = -scaleX;
    return {
      translateX: e3,
      translateY: f2,
      rotate: Math.atan2(b3, a2) * degrees2,
      skewX: Math.atan(skewX) * degrees2,
      scaleX,
      scaleY
    };
  }
  var degrees2, identity;
  var init_decompose = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js"() {
      "use strict";
      degrees2 = 180 / Math.PI;
      identity = {
        translateX: 0,
        translateY: 0,
        rotate: 0,
        skewX: 0,
        scaleX: 1,
        scaleY: 1
      };
      __name(decompose_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js
  function parseCss(value2) {
    const m3 = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value2 + "");
    return m3.isIdentity ? identity : decompose_default(m3.a, m3.b, m3.c, m3.d, m3.e, m3.f);
  }
  function parseSvg(value2) {
    if (value2 == null) return identity;
    if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
    svgNode.setAttribute("transform", value2);
    if (!(value2 = svgNode.transform.baseVal.consolidate())) return identity;
    value2 = value2.matrix;
    return decompose_default(value2.a, value2.b, value2.c, value2.d, value2.e, value2.f);
  }
  var svgNode;
  var init_parse = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js"() {
      "use strict";
      init_decompose();
      __name(parseCss, "parseCss");
      __name(parseSvg, "parseSvg");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js
  function interpolateTransform(parse7, pxComma, pxParen, degParen) {
    function pop(s2) {
      return s2.length ? s2.pop() + " " : "";
    }
    __name(pop, "pop");
    function translate2(xa, ya, xb, yb, s2, q3) {
      if (xa !== xb || ya !== yb) {
        var i2 = s2.push("translate(", null, pxComma, null, pxParen);
        q3.push({ i: i2 - 4, x: number_default(xa, xb) }, { i: i2 - 2, x: number_default(ya, yb) });
      } else if (xb || yb) {
        s2.push("translate(" + xb + pxComma + yb + pxParen);
      }
    }
    __name(translate2, "translate");
    function rotate2(a2, b3, s2, q3) {
      if (a2 !== b3) {
        if (a2 - b3 > 180) b3 += 360;
        else if (b3 - a2 > 180) a2 += 360;
        q3.push({ i: s2.push(pop(s2) + "rotate(", null, degParen) - 2, x: number_default(a2, b3) });
      } else if (b3) {
        s2.push(pop(s2) + "rotate(" + b3 + degParen);
      }
    }
    __name(rotate2, "rotate");
    function skewX(a2, b3, s2, q3) {
      if (a2 !== b3) {
        q3.push({ i: s2.push(pop(s2) + "skewX(", null, degParen) - 2, x: number_default(a2, b3) });
      } else if (b3) {
        s2.push(pop(s2) + "skewX(" + b3 + degParen);
      }
    }
    __name(skewX, "skewX");
    function scale3(xa, ya, xb, yb, s2, q3) {
      if (xa !== xb || ya !== yb) {
        var i2 = s2.push(pop(s2) + "scale(", null, ",", null, ")");
        q3.push({ i: i2 - 4, x: number_default(xa, xb) }, { i: i2 - 2, x: number_default(ya, yb) });
      } else if (xb !== 1 || yb !== 1) {
        s2.push(pop(s2) + "scale(" + xb + "," + yb + ")");
      }
    }
    __name(scale3, "scale");
    return function(a2, b3) {
      var s2 = [], q3 = [];
      a2 = parse7(a2), b3 = parse7(b3);
      translate2(a2.translateX, a2.translateY, b3.translateX, b3.translateY, s2, q3);
      rotate2(a2.rotate, b3.rotate, s2, q3);
      skewX(a2.skewX, b3.skewX, s2, q3);
      scale3(a2.scaleX, a2.scaleY, b3.scaleX, b3.scaleY, s2, q3);
      a2 = b3 = null;
      return function(t4) {
        var i2 = -1, n2 = q3.length, o2;
        while (++i2 < n2) s2[(o2 = q3[i2]).i] = o2.x(t4);
        return s2.join("");
      };
    };
  }
  var interpolateTransformCss, interpolateTransformSvg;
  var init_transform = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js"() {
      "use strict";
      init_number2();
      init_parse();
      __name(interpolateTransform, "interpolateTransform");
      interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
      interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/hcl.js
  function hcl2(hue2) {
    return function(start3, end2) {
      var h3 = hue2((start3 = hcl(start3)).h, (end2 = hcl(end2)).h), c3 = nogamma(start3.c, end2.c), l4 = nogamma(start3.l, end2.l), opacity = nogamma(start3.opacity, end2.opacity);
      return function(t4) {
        start3.h = h3(t4);
        start3.c = c3(t4);
        start3.l = l4(t4);
        start3.opacity = opacity(t4);
        return start3 + "";
      };
    };
  }
  var hcl_default, hclLong;
  var init_hcl = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/hcl.js"() {
      "use strict";
      init_src7();
      init_color3();
      __name(hcl2, "hcl");
      hcl_default = hcl2(hue);
      hclLong = hcl2(nogamma);
    }
  });

  // ../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/index.js
  var init_src8 = __esm({
    "../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/index.js"() {
      "use strict";
      init_value();
      init_number2();
      init_round();
      init_string();
      init_transform();
      init_rgb2();
      init_hcl();
    }
  });

  // ../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js
  function now() {
    return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
  }
  function clearNow() {
    clockNow = 0;
  }
  function Timer() {
    this._call = this._time = this._next = null;
  }
  function timer(callback, delay2, time4) {
    var t4 = new Timer();
    t4.restart(callback, delay2, time4);
    return t4;
  }
  function timerFlush() {
    now();
    ++frame;
    var t4 = taskHead, e3;
    while (t4) {
      if ((e3 = clockNow - t4._time) >= 0) t4._call.call(void 0, e3);
      t4 = t4._next;
    }
    --frame;
  }
  function wake() {
    clockNow = (clockLast = clock.now()) + clockSkew;
    frame = timeout = 0;
    try {
      timerFlush();
    } finally {
      frame = 0;
      nap();
      clockNow = 0;
    }
  }
  function poke() {
    var now3 = clock.now(), delay2 = now3 - clockLast;
    if (delay2 > pokeDelay) clockSkew -= delay2, clockLast = now3;
  }
  function nap() {
    var t03, t13 = taskHead, t22, time4 = Infinity;
    while (t13) {
      if (t13._call) {
        if (time4 > t13._time) time4 = t13._time;
        t03 = t13, t13 = t13._next;
      } else {
        t22 = t13._next, t13._next = null;
        t13 = t03 ? t03._next = t22 : taskHead = t22;
      }
    }
    taskTail = t03;
    sleep(time4);
  }
  function sleep(time4) {
    if (frame) return;
    if (timeout) timeout = clearTimeout(timeout);
    var delay2 = time4 - clockNow;
    if (delay2 > 24) {
      if (time4 < Infinity) timeout = setTimeout(wake, time4 - clock.now() - clockSkew);
      if (interval) interval = clearInterval(interval);
    } else {
      if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
      frame = 1, setFrame(wake);
    }
  }
  var frame, timeout, interval, pokeDelay, taskHead, taskTail, clockLast, clockNow, clockSkew, clock, setFrame;
  var init_timer = __esm({
    "../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js"() {
      "use strict";
      frame = 0;
      timeout = 0;
      interval = 0;
      pokeDelay = 1e3;
      clockLast = 0;
      clockNow = 0;
      clockSkew = 0;
      clock = typeof performance === "object" && performance.now ? performance : Date;
      setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f2) {
        setTimeout(f2, 17);
      };
      __name(now, "now");
      __name(clearNow, "clearNow");
      __name(Timer, "Timer");
      Timer.prototype = timer.prototype = {
        constructor: Timer,
        restart: /* @__PURE__ */ __name(function(callback, delay2, time4) {
          if (typeof callback !== "function") throw new TypeError("callback is not a function");
          time4 = (time4 == null ? now() : +time4) + (delay2 == null ? 0 : +delay2);
          if (!this._next && taskTail !== this) {
            if (taskTail) taskTail._next = this;
            else taskHead = this;
            taskTail = this;
          }
          this._call = callback;
          this._time = time4;
          sleep();
        }, "restart"),
        stop: /* @__PURE__ */ __name(function() {
          if (this._call) {
            this._call = null;
            this._time = Infinity;
            sleep();
          }
        }, "stop")
      };
      __name(timer, "timer");
      __name(timerFlush, "timerFlush");
      __name(wake, "wake");
      __name(poke, "poke");
      __name(nap, "nap");
      __name(sleep, "sleep");
    }
  });

  // ../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js
  function timeout_default(callback, delay2, time4) {
    var t4 = new Timer();
    delay2 = delay2 == null ? 0 : +delay2;
    t4.restart((elapsed) => {
      t4.stop();
      callback(elapsed + delay2);
    }, delay2, time4);
    return t4;
  }
  var init_timeout = __esm({
    "../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js"() {
      "use strict";
      init_timer();
      __name(timeout_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/index.js
  var init_src9 = __esm({
    "../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/index.js"() {
      "use strict";
      init_timer();
      init_timeout();
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js
  function schedule_default(node2, name, id41, index, group2, timing) {
    var schedules = node2.__transition;
    if (!schedules) node2.__transition = {};
    else if (id41 in schedules) return;
    create2(node2, id41, {
      name,
      index,
      // For context during callback.
      group: group2,
      // For context during callback.
      on: emptyOn,
      tween: emptyTween,
      time: timing.time,
      delay: timing.delay,
      duration: timing.duration,
      ease: timing.ease,
      timer: null,
      state: CREATED
    });
  }
  function init(node2, id41) {
    var schedule = get2(node2, id41);
    if (schedule.state > CREATED) throw new Error("too late; already scheduled");
    return schedule;
  }
  function set2(node2, id41) {
    var schedule = get2(node2, id41);
    if (schedule.state > STARTED) throw new Error("too late; already running");
    return schedule;
  }
  function get2(node2, id41) {
    var schedule = node2.__transition;
    if (!schedule || !(schedule = schedule[id41])) throw new Error("transition not found");
    return schedule;
  }
  function create2(node2, id41, self2) {
    var schedules = node2.__transition, tween;
    schedules[id41] = self2;
    self2.timer = timer(schedule, 0, self2.time);
    function schedule(elapsed) {
      self2.state = SCHEDULED;
      self2.timer.restart(start3, self2.delay, self2.time);
      if (self2.delay <= elapsed) start3(elapsed - self2.delay);
    }
    __name(schedule, "schedule");
    function start3(elapsed) {
      var i2, j3, n2, o2;
      if (self2.state !== SCHEDULED) return stop5();
      for (i2 in schedules) {
        o2 = schedules[i2];
        if (o2.name !== self2.name) continue;
        if (o2.state === STARTED) return timeout_default(start3);
        if (o2.state === RUNNING) {
          o2.state = ENDED;
          o2.timer.stop();
          o2.on.call("interrupt", node2, node2.__data__, o2.index, o2.group);
          delete schedules[i2];
        } else if (+i2 < id41) {
          o2.state = ENDED;
          o2.timer.stop();
          o2.on.call("cancel", node2, node2.__data__, o2.index, o2.group);
          delete schedules[i2];
        }
      }
      timeout_default(function() {
        if (self2.state === STARTED) {
          self2.state = RUNNING;
          self2.timer.restart(tick, self2.delay, self2.time);
          tick(elapsed);
        }
      });
      self2.state = STARTING;
      self2.on.call("start", node2, node2.__data__, self2.index, self2.group);
      if (self2.state !== STARTING) return;
      self2.state = STARTED;
      tween = new Array(n2 = self2.tween.length);
      for (i2 = 0, j3 = -1; i2 < n2; ++i2) {
        if (o2 = self2.tween[i2].value.call(node2, node2.__data__, self2.index, self2.group)) {
          tween[++j3] = o2;
        }
      }
      tween.length = j3 + 1;
    }
    __name(start3, "start");
    function tick(elapsed) {
      var t4 = elapsed < self2.duration ? self2.ease.call(null, elapsed / self2.duration) : (self2.timer.restart(stop5), self2.state = ENDING, 1), i2 = -1, n2 = tween.length;
      while (++i2 < n2) {
        tween[i2].call(node2, t4);
      }
      if (self2.state === ENDING) {
        self2.on.call("end", node2, node2.__data__, self2.index, self2.group);
        stop5();
      }
    }
    __name(tick, "tick");
    function stop5() {
      self2.state = ENDED;
      self2.timer.stop();
      delete schedules[id41];
      for (var i2 in schedules) return;
      delete node2.__transition;
    }
    __name(stop5, "stop");
  }
  var emptyOn, emptyTween, CREATED, SCHEDULED, STARTING, STARTED, RUNNING, ENDING, ENDED;
  var init_schedule = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js"() {
      "use strict";
      init_src4();
      init_src9();
      emptyOn = dispatch_default("start", "end", "cancel", "interrupt");
      emptyTween = [];
      CREATED = 0;
      SCHEDULED = 1;
      STARTING = 2;
      STARTED = 3;
      RUNNING = 4;
      ENDING = 5;
      ENDED = 6;
      __name(schedule_default, "default");
      __name(init, "init");
      __name(set2, "set");
      __name(get2, "get");
      __name(create2, "create");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js
  function interrupt_default(node2, name) {
    var schedules = node2.__transition, schedule, active, empty3 = true, i2;
    if (!schedules) return;
    name = name == null ? null : name + "";
    for (i2 in schedules) {
      if ((schedule = schedules[i2]).name !== name) {
        empty3 = false;
        continue;
      }
      active = schedule.state > STARTING && schedule.state < ENDING;
      schedule.state = ENDED;
      schedule.timer.stop();
      schedule.on.call(active ? "interrupt" : "cancel", node2, node2.__data__, schedule.index, schedule.group);
      delete schedules[i2];
    }
    if (empty3) delete node2.__transition;
  }
  var init_interrupt = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js"() {
      "use strict";
      init_schedule();
      __name(interrupt_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js
  function interrupt_default2(name) {
    return this.each(function() {
      interrupt_default(this, name);
    });
  }
  var init_interrupt2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js"() {
      "use strict";
      init_interrupt();
      __name(interrupt_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js
  function tweenRemove(id41, name) {
    var tween0, tween1;
    return function() {
      var schedule = set2(this, id41), tween = schedule.tween;
      if (tween !== tween0) {
        tween1 = tween0 = tween;
        for (var i2 = 0, n2 = tween1.length; i2 < n2; ++i2) {
          if (tween1[i2].name === name) {
            tween1 = tween1.slice();
            tween1.splice(i2, 1);
            break;
          }
        }
      }
      schedule.tween = tween1;
    };
  }
  function tweenFunction(id41, name, value2) {
    var tween0, tween1;
    if (typeof value2 !== "function") throw new Error();
    return function() {
      var schedule = set2(this, id41), tween = schedule.tween;
      if (tween !== tween0) {
        tween1 = (tween0 = tween).slice();
        for (var t4 = { name, value: value2 }, i2 = 0, n2 = tween1.length; i2 < n2; ++i2) {
          if (tween1[i2].name === name) {
            tween1[i2] = t4;
            break;
          }
        }
        if (i2 === n2) tween1.push(t4);
      }
      schedule.tween = tween1;
    };
  }
  function tween_default(name, value2) {
    var id41 = this._id;
    name += "";
    if (arguments.length < 2) {
      var tween = get2(this.node(), id41).tween;
      for (var i2 = 0, n2 = tween.length, t4; i2 < n2; ++i2) {
        if ((t4 = tween[i2]).name === name) {
          return t4.value;
        }
      }
      return null;
    }
    return this.each((value2 == null ? tweenRemove : tweenFunction)(id41, name, value2));
  }
  function tweenValue(transition2, name, value2) {
    var id41 = transition2._id;
    transition2.each(function() {
      var schedule = set2(this, id41);
      (schedule.value || (schedule.value = {}))[name] = value2.apply(this, arguments);
    });
    return function(node2) {
      return get2(node2, id41).value[name];
    };
  }
  var init_tween = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js"() {
      "use strict";
      init_schedule();
      __name(tweenRemove, "tweenRemove");
      __name(tweenFunction, "tweenFunction");
      __name(tween_default, "default");
      __name(tweenValue, "tweenValue");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js
  function interpolate_default(a2, b3) {
    var c3;
    return (typeof b3 === "number" ? number_default : b3 instanceof color ? rgb_default2 : (c3 = color(b3)) ? (b3 = c3, rgb_default2) : string_default)(a2, b3);
  }
  var init_interpolate = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js"() {
      "use strict";
      init_src7();
      init_src8();
      __name(interpolate_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/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, value2) {
    var string00, string10, interpolate0;
    return function() {
      var string0, value1 = value2(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, value2) {
    var string00, string10, interpolate0;
    return function() {
      var string0, value1 = value2(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, value2) {
    var fullname = namespace_default(name), i2 = fullname === "transform" ? interpolateTransformSvg : interpolate_default;
    return this.attrTween(name, typeof value2 === "function" ? (fullname.local ? attrFunctionNS2 : attrFunction2)(fullname, i2, tweenValue(this, "attr." + name, value2)) : value2 == null ? (fullname.local ? attrRemoveNS2 : attrRemove2)(fullname) : (fullname.local ? attrConstantNS2 : attrConstant2)(fullname, i2, value2));
  }
  var init_attr2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js"() {
      "use strict";
      init_src8();
      init_src5();
      init_tween();
      init_interpolate();
      __name(attrRemove2, "attrRemove");
      __name(attrRemoveNS2, "attrRemoveNS");
      __name(attrConstant2, "attrConstant");
      __name(attrConstantNS2, "attrConstantNS");
      __name(attrFunction2, "attrFunction");
      __name(attrFunctionNS2, "attrFunctionNS");
      __name(attr_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js
  function attrInterpolate(name, i2) {
    return function(t4) {
      this.setAttribute(name, i2.call(this, t4));
    };
  }
  function attrInterpolateNS(fullname, i2) {
    return function(t4) {
      this.setAttributeNS(fullname.space, fullname.local, i2.call(this, t4));
    };
  }
  function attrTweenNS(fullname, value2) {
    var t03, i0;
    function tween() {
      var i2 = value2.apply(this, arguments);
      if (i2 !== i0) t03 = (i0 = i2) && attrInterpolateNS(fullname, i2);
      return t03;
    }
    __name(tween, "tween");
    tween._value = value2;
    return tween;
  }
  function attrTween(name, value2) {
    var t03, i0;
    function tween() {
      var i2 = value2.apply(this, arguments);
      if (i2 !== i0) t03 = (i0 = i2) && attrInterpolate(name, i2);
      return t03;
    }
    __name(tween, "tween");
    tween._value = value2;
    return tween;
  }
  function attrTween_default(name, value2) {
    var key = "attr." + name;
    if (arguments.length < 2) return (key = this.tween(key)) && key._value;
    if (value2 == null) return this.tween(key, null);
    if (typeof value2 !== "function") throw new Error();
    var fullname = namespace_default(name);
    return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value2));
  }
  var init_attrTween = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js"() {
      "use strict";
      init_src5();
      __name(attrInterpolate, "attrInterpolate");
      __name(attrInterpolateNS, "attrInterpolateNS");
      __name(attrTweenNS, "attrTweenNS");
      __name(attrTween, "attrTween");
      __name(attrTween_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js
  function delayFunction(id41, value2) {
    return function() {
      init(this, id41).delay = +value2.apply(this, arguments);
    };
  }
  function delayConstant(id41, value2) {
    return value2 = +value2, function() {
      init(this, id41).delay = value2;
    };
  }
  function delay_default(value2) {
    var id41 = this._id;
    return arguments.length ? this.each((typeof value2 === "function" ? delayFunction : delayConstant)(id41, value2)) : get2(this.node(), id41).delay;
  }
  var init_delay = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js"() {
      "use strict";
      init_schedule();
      __name(delayFunction, "delayFunction");
      __name(delayConstant, "delayConstant");
      __name(delay_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js
  function durationFunction(id41, value2) {
    return function() {
      set2(this, id41).duration = +value2.apply(this, arguments);
    };
  }
  function durationConstant(id41, value2) {
    return value2 = +value2, function() {
      set2(this, id41).duration = value2;
    };
  }
  function duration_default(value2) {
    var id41 = this._id;
    return arguments.length ? this.each((typeof value2 === "function" ? durationFunction : durationConstant)(id41, value2)) : get2(this.node(), id41).duration;
  }
  var init_duration = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js"() {
      "use strict";
      init_schedule();
      __name(durationFunction, "durationFunction");
      __name(durationConstant, "durationConstant");
      __name(duration_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js
  function easeConstant(id41, value2) {
    if (typeof value2 !== "function") throw new Error();
    return function() {
      set2(this, id41).ease = value2;
    };
  }
  function ease_default(value2) {
    var id41 = this._id;
    return arguments.length ? this.each(easeConstant(id41, value2)) : get2(this.node(), id41).ease;
  }
  var init_ease = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js"() {
      "use strict";
      init_schedule();
      __name(easeConstant, "easeConstant");
      __name(ease_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js
  function easeVarying(id41, value2) {
    return function() {
      var v3 = value2.apply(this, arguments);
      if (typeof v3 !== "function") throw new Error();
      set2(this, id41).ease = v3;
    };
  }
  function easeVarying_default(value2) {
    if (typeof value2 !== "function") throw new Error();
    return this.each(easeVarying(this._id, value2));
  }
  var init_easeVarying = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js"() {
      "use strict";
      init_schedule();
      __name(easeVarying, "easeVarying");
      __name(easeVarying_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js
  function filter_default2(match3) {
    if (typeof match3 !== "function") match3 = matcher_default(match3);
    for (var groups = this._groups, m3 = groups.length, subgroups = new Array(m3), j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, subgroup = subgroups[j3] = [], node2, i2 = 0; i2 < n2; ++i2) {
        if ((node2 = group2[i2]) && match3.call(node2, node2.__data__, i2, group2)) {
          subgroup.push(node2);
        }
      }
    }
    return new Transition(subgroups, this._parents, this._name, this._id);
  }
  var init_filter2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js"() {
      "use strict";
      init_src5();
      init_transition2();
      __name(filter_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js
  function merge_default2(transition2) {
    if (transition2._id !== this._id) throw new Error();
    for (var groups0 = this._groups, groups1 = transition2._groups, m0 = groups0.length, m1 = groups1.length, m3 = Math.min(m0, m1), merges = new Array(m0), j3 = 0; j3 < m3; ++j3) {
      for (var group0 = groups0[j3], group1 = groups1[j3], n2 = group0.length, merge6 = merges[j3] = new Array(n2), node2, i2 = 0; i2 < n2; ++i2) {
        if (node2 = group0[i2] || group1[i2]) {
          merge6[i2] = node2;
        }
      }
    }
    for (; j3 < m0; ++j3) {
      merges[j3] = groups0[j3];
    }
    return new Transition(merges, this._parents, this._name, this._id);
  }
  var init_merge3 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js"() {
      "use strict";
      init_transition2();
      __name(merge_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js
  function start(name) {
    return (name + "").trim().split(/^|\s+/).every(function(t4) {
      var i2 = t4.indexOf(".");
      if (i2 >= 0) t4 = t4.slice(0, i2);
      return !t4 || t4 === "start";
    });
  }
  function onFunction(id41, name, listener) {
    var on0, on1, sit = start(name) ? init : set2;
    return function() {
      var schedule = sit(this, id41), on3 = schedule.on;
      if (on3 !== on0) (on1 = (on0 = on3).copy()).on(name, listener);
      schedule.on = on1;
    };
  }
  function on_default2(name, listener) {
    var id41 = this._id;
    return arguments.length < 2 ? get2(this.node(), id41).on.on(name) : this.each(onFunction(id41, name, listener));
  }
  var init_on2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js"() {
      "use strict";
      init_schedule();
      __name(start, "start");
      __name(onFunction, "onFunction");
      __name(on_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js
  function removeFunction(id41) {
    return function() {
      var parent4 = this.parentNode;
      for (var i2 in this.__transition) if (+i2 !== id41) return;
      if (parent4) parent4.removeChild(this);
    };
  }
  function remove_default2() {
    return this.on("end.remove", removeFunction(this._id));
  }
  var init_remove2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js"() {
      "use strict";
      __name(removeFunction, "removeFunction");
      __name(remove_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js
  function select_default3(select) {
    var name = this._name, id41 = this._id;
    if (typeof select !== "function") select = selector_default(select);
    for (var groups = this._groups, m3 = groups.length, subgroups = new Array(m3), j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, subgroup = subgroups[j3] = new Array(n2), node2, subnode, i2 = 0; i2 < n2; ++i2) {
        if ((node2 = group2[i2]) && (subnode = select.call(node2, node2.__data__, i2, group2))) {
          if ("__data__" in node2) subnode.__data__ = node2.__data__;
          subgroup[i2] = subnode;
          schedule_default(subgroup[i2], name, id41, i2, subgroup, get2(node2, id41));
        }
      }
    }
    return new Transition(subgroups, this._parents, name, id41);
  }
  var init_select3 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js"() {
      "use strict";
      init_src5();
      init_transition2();
      init_schedule();
      __name(select_default3, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js
  function selectAll_default2(select) {
    var name = this._name, id41 = this._id;
    if (typeof select !== "function") select = selectorAll_default(select);
    for (var groups = this._groups, m3 = groups.length, subgroups = [], parents3 = [], j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, node2, i2 = 0; i2 < n2; ++i2) {
        if (node2 = group2[i2]) {
          for (var children2 = select.call(node2, node2.__data__, i2, group2), child, inherit2 = get2(node2, id41), k2 = 0, l4 = children2.length; k2 < l4; ++k2) {
            if (child = children2[k2]) {
              schedule_default(child, name, id41, k2, children2, inherit2);
            }
          }
          subgroups.push(children2);
          parents3.push(node2);
        }
      }
    }
    return new Transition(subgroups, parents3, name, id41);
  }
  var init_selectAll2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js"() {
      "use strict";
      init_src5();
      init_transition2();
      init_schedule();
      __name(selectAll_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js
  function selection_default2() {
    return new Selection2(this._groups, this._parents);
  }
  var Selection2;
  var init_selection2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js"() {
      "use strict";
      init_src5();
      Selection2 = selection_default.prototype.constructor;
      __name(selection_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/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, value2) {
    var string00, string10, interpolate0;
    return function() {
      var string0 = styleValue(this, name), value1 = value2(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(id41, name) {
    var on0, on1, listener0, key = "style." + name, event3 = "end." + key, remove3;
    return function() {
      var schedule = set2(this, id41), on3 = schedule.on, listener = schedule.value[key] == null ? remove3 || (remove3 = styleRemove2(name)) : void 0;
      if (on3 !== on0 || listener0 !== listener) (on1 = (on0 = on3).copy()).on(event3, listener0 = listener);
      schedule.on = on1;
    };
  }
  function style_default2(name, value2, priority3) {
    var i2 = (name += "") === "transform" ? interpolateTransformCss : interpolate_default;
    return value2 == null ? this.styleTween(name, styleNull(name, i2)).on("end.style." + name, styleRemove2(name)) : typeof value2 === "function" ? this.styleTween(name, styleFunction2(name, i2, tweenValue(this, "style." + name, value2))).each(styleMaybeRemove(this._id, name)) : this.styleTween(name, styleConstant2(name, i2, value2), priority3).on("end.style." + name, null);
  }
  var init_style2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js"() {
      "use strict";
      init_src8();
      init_src5();
      init_schedule();
      init_tween();
      init_interpolate();
      __name(styleNull, "styleNull");
      __name(styleRemove2, "styleRemove");
      __name(styleConstant2, "styleConstant");
      __name(styleFunction2, "styleFunction");
      __name(styleMaybeRemove, "styleMaybeRemove");
      __name(style_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js
  function styleInterpolate(name, i2, priority3) {
    return function(t4) {
      this.style.setProperty(name, i2.call(this, t4), priority3);
    };
  }
  function styleTween(name, value2, priority3) {
    var t4, i0;
    function tween() {
      var i2 = value2.apply(this, arguments);
      if (i2 !== i0) t4 = (i0 = i2) && styleInterpolate(name, i2, priority3);
      return t4;
    }
    __name(tween, "tween");
    tween._value = value2;
    return tween;
  }
  function styleTween_default(name, value2, priority3) {
    var key = "style." + (name += "");
    if (arguments.length < 2) return (key = this.tween(key)) && key._value;
    if (value2 == null) return this.tween(key, null);
    if (typeof value2 !== "function") throw new Error();
    return this.tween(key, styleTween(name, value2, priority3 == null ? "" : priority3));
  }
  var init_styleTween = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js"() {
      "use strict";
      __name(styleInterpolate, "styleInterpolate");
      __name(styleTween, "styleTween");
      __name(styleTween_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js
  function textConstant2(value2) {
    return function() {
      this.textContent = value2;
    };
  }
  function textFunction2(value2) {
    return function() {
      var value1 = value2(this);
      this.textContent = value1 == null ? "" : value1;
    };
  }
  function text_default2(value2) {
    return this.tween("text", typeof value2 === "function" ? textFunction2(tweenValue(this, "text", value2)) : textConstant2(value2 == null ? "" : value2 + ""));
  }
  var init_text2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js"() {
      "use strict";
      init_tween();
      __name(textConstant2, "textConstant");
      __name(textFunction2, "textFunction");
      __name(text_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js
  function textInterpolate(i2) {
    return function(t4) {
      this.textContent = i2.call(this, t4);
    };
  }
  function textTween(value2) {
    var t03, i0;
    function tween() {
      var i2 = value2.apply(this, arguments);
      if (i2 !== i0) t03 = (i0 = i2) && textInterpolate(i2);
      return t03;
    }
    __name(tween, "tween");
    tween._value = value2;
    return tween;
  }
  function textTween_default(value2) {
    var key = "text";
    if (arguments.length < 1) return (key = this.tween(key)) && key._value;
    if (value2 == null) return this.tween(key, null);
    if (typeof value2 !== "function") throw new Error();
    return this.tween(key, textTween(value2));
  }
  var init_textTween = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js"() {
      "use strict";
      __name(textInterpolate, "textInterpolate");
      __name(textTween, "textTween");
      __name(textTween_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/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, m3 = groups.length, j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, node2, i2 = 0; i2 < n2; ++i2) {
        if (node2 = group2[i2]) {
          var inherit2 = get2(node2, id0);
          schedule_default(node2, name, id1, i2, group2, {
            time: inherit2.time + inherit2.delay + inherit2.duration,
            delay: 0,
            duration: inherit2.duration,
            ease: inherit2.ease
          });
        }
      }
    }
    return new Transition(groups, this._parents, name, id1);
  }
  var init_transition = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js"() {
      "use strict";
      init_transition2();
      init_schedule();
      __name(transition_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js
  function end_default() {
    var on0, on1, that = this, id41 = that._id, size4 = that.size();
    return new Promise(function(resolve2, reject3) {
      var cancel = { value: reject3 }, end2 = { value: /* @__PURE__ */ __name(function() {
        if (--size4 === 0) resolve2();
      }, "value") };
      that.each(function() {
        var schedule = set2(this, id41), on3 = schedule.on;
        if (on3 !== on0) {
          on1 = (on0 = on3).copy();
          on1._.cancel.push(cancel);
          on1._.interrupt.push(cancel);
          on1._.end.push(end2);
        }
        schedule.on = on1;
      });
      if (size4 === 0) resolve2();
    });
  }
  var init_end = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js"() {
      "use strict";
      init_schedule();
      __name(end_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js
  function Transition(groups, parents3, name, id41) {
    this._groups = groups;
    this._parents = parents3;
    this._name = name;
    this._id = id41;
  }
  function transition(name) {
    return selection_default().transition(name);
  }
  function newId() {
    return ++id;
  }
  var id, selection_prototype;
  var init_transition2 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js"() {
      "use strict";
      init_src5();
      init_attr2();
      init_attrTween();
      init_delay();
      init_duration();
      init_ease();
      init_easeVarying();
      init_filter2();
      init_merge3();
      init_on2();
      init_remove2();
      init_select3();
      init_selectAll2();
      init_selection2();
      init_style2();
      init_styleTween();
      init_text2();
      init_textTween();
      init_transition();
      init_tween();
      init_end();
      id = 0;
      __name(Transition, "Transition");
      __name(transition, "transition");
      __name(newId, "newId");
      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/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js
  function cubicInOut(t4) {
    return ((t4 *= 2) <= 1 ? t4 * t4 * t4 : (t4 -= 2) * t4 * t4 + 2) / 2;
  }
  var init_cubic = __esm({
    "../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js"() {
      "use strict";
      __name(cubicInOut, "cubicInOut");
    }
  });

  // ../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/index.js
  var init_src10 = __esm({
    "../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/index.js"() {
      "use strict";
      init_cubic();
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js
  function inherit(node2, id41) {
    var timing;
    while (!(timing = node2.__transition) || !(timing = timing[id41])) {
      if (!(node2 = node2.parentNode)) {
        throw new Error(`transition ${id41} not found`);
      }
    }
    return timing;
  }
  function transition_default2(name) {
    var id41, timing;
    if (name instanceof Transition) {
      id41 = name._id, name = name._name;
    } else {
      id41 = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
    }
    for (var groups = this._groups, m3 = groups.length, j3 = 0; j3 < m3; ++j3) {
      for (var group2 = groups[j3], n2 = group2.length, node2, i2 = 0; i2 < n2; ++i2) {
        if (node2 = group2[i2]) {
          schedule_default(node2, name, id41, i2, group2, timing || inherit(node2, id41));
        }
      }
    }
    return new Transition(groups, this._parents, name, id41);
  }
  var defaultTiming;
  var init_transition3 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js"() {
      "use strict";
      init_transition2();
      init_schedule();
      init_src10();
      init_src9();
      defaultTiming = {
        time: null,
        // Set on use.
        delay: 0,
        duration: 250,
        ease: cubicInOut
      };
      __name(inherit, "inherit");
      __name(transition_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js
  var init_selection3 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js"() {
      "use strict";
      init_src5();
      init_interrupt2();
      init_transition3();
      selection_default.prototype.interrupt = interrupt_default2;
      selection_default.prototype.transition = transition_default2;
    }
  });

  // ../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/index.js
  var init_src11 = __esm({
    "../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/index.js"() {
      "use strict";
      init_selection3();
    }
  });

  // ../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/constant.js
  var init_constant3 = __esm({
    "../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/constant.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/event.js
  var init_event = __esm({
    "../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/event.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/noevent.js
  var init_noevent = __esm({
    "../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/noevent.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/brush.js
  function number1(e3) {
    return [+e3[0], +e3[1]];
  }
  function number22(e3) {
    return [number1(e3[0]), number1(e3[1])];
  }
  function type(t4) {
    return { type: t4 };
  }
  var abs, max2, min2, X, Y, XY;
  var init_brush = __esm({
    "../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/brush.js"() {
      "use strict";
      init_src11();
      init_constant3();
      init_event();
      init_noevent();
      ({ abs, max: max2, min: min2 } = Math);
      __name(number1, "number1");
      __name(number22, "number2");
      X = {
        name: "x",
        handles: ["w", "e"].map(type),
        input: /* @__PURE__ */ __name(function(x5, e3) {
          return x5 == null ? null : [[+x5[0], e3[0][1]], [+x5[1], e3[1][1]]];
        }, "input"),
        output: /* @__PURE__ */ __name(function(xy) {
          return xy && [xy[0][0], xy[1][0]];
        }, "output")
      };
      Y = {
        name: "y",
        handles: ["n", "s"].map(type),
        input: /* @__PURE__ */ __name(function(y6, e3) {
          return y6 == null ? null : [[e3[0][0], +y6[0]], [e3[1][0], +y6[1]]];
        }, "input"),
        output: /* @__PURE__ */ __name(function(xy) {
          return xy && [xy[0][1], xy[1][1]];
        }, "output")
      };
      XY = {
        name: "xy",
        handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),
        input: /* @__PURE__ */ __name(function(xy) {
          return xy == null ? null : number22(xy);
        }, "input"),
        output: /* @__PURE__ */ __name(function(xy) {
          return xy;
        }, "output")
      };
      __name(type, "type");
    }
  });

  // ../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/index.js
  var init_src12 = __esm({
    "../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/index.js"() {
      "use strict";
      init_brush();
    }
  });

  // ../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js
  function append(strings) {
    this._ += strings[0];
    for (let i2 = 1, n2 = strings.length; i2 < n2; ++i2) {
      this._ += arguments[i2] + strings[i2];
    }
  }
  function appendRound(digits) {
    let d3 = Math.floor(digits);
    if (!(d3 >= 0)) throw new Error(`invalid digits: ${digits}`);
    if (d3 > 15) return append;
    const k2 = 10 ** d3;
    return function(strings) {
      this._ += strings[0];
      for (let i2 = 1, n2 = strings.length; i2 < n2; ++i2) {
        this._ += Math.round(arguments[i2] * k2) / k2 + strings[i2];
      }
    };
  }
  function path2() {
    return new Path();
  }
  var pi, tau, epsilon2, tauEpsilon, Path;
  var init_path = __esm({
    "../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js"() {
      "use strict";
      pi = Math.PI;
      tau = 2 * pi;
      epsilon2 = 1e-6;
      tauEpsilon = tau - epsilon2;
      __name(append, "append");
      __name(appendRound, "appendRound");
      Path = class {
        static {
          __name(this, "Path");
        }
        constructor(digits) {
          this._x0 = this._y0 = // start of current subpath
          this._x1 = this._y1 = null;
          this._ = "";
          this._append = digits == null ? append : appendRound(digits);
        }
        moveTo(x5, y6) {
          this._append`M${this._x0 = this._x1 = +x5},${this._y0 = this._y1 = +y6}`;
        }
        closePath() {
          if (this._x1 !== null) {
            this._x1 = this._x0, this._y1 = this._y0;
            this._append`Z`;
          }
        }
        lineTo(x5, y6) {
          this._append`L${this._x1 = +x5},${this._y1 = +y6}`;
        }
        quadraticCurveTo(x1, y1, x5, y6) {
          this._append`Q${+x1},${+y1},${this._x1 = +x5},${this._y1 = +y6}`;
        }
        bezierCurveTo(x1, y1, x22, y22, x5, y6) {
          this._append`C${+x1},${+y1},${+x22},${+y22},${this._x1 = +x5},${this._y1 = +y6}`;
        }
        arcTo(x1, y1, x22, y22, r2) {
          x1 = +x1, y1 = +y1, x22 = +x22, y22 = +y22, r2 = +r2;
          if (r2 < 0) throw new Error(`negative radius: ${r2}`);
          let x0 = this._x1, y0 = this._y1, x21 = x22 - x1, y21 = y22 - y1, x01 = x0 - x1, y01 = y0 - y1, l01_2 = x01 * x01 + y01 * y01;
          if (this._x1 === null) {
            this._append`M${this._x1 = x1},${this._y1 = y1}`;
          } else if (!(l01_2 > epsilon2)) ;
          else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon2) || !r2) {
            this._append`L${this._x1 = x1},${this._y1 = y1}`;
          } else {
            let x20 = x22 - x0, y20 = y22 - y0, l21_2 = x21 * x21 + y21 * y21, l20_2 = x20 * x20 + y20 * y20, l21 = Math.sqrt(l21_2), l01 = Math.sqrt(l01_2), l4 = r2 * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), t01 = l4 / l01, t21 = l4 / l21;
            if (Math.abs(t01 - 1) > epsilon2) {
              this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;
            }
            this._append`A${r2},${r2},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;
          }
        }
        arc(x5, y6, r2, a0, a1, ccw) {
          x5 = +x5, y6 = +y6, r2 = +r2, ccw = !!ccw;
          if (r2 < 0) throw new Error(`negative radius: ${r2}`);
          let dx = r2 * Math.cos(a0), dy = r2 * Math.sin(a0), x0 = x5 + dx, y0 = y6 + dy, cw = 1 ^ ccw, da = ccw ? a0 - a1 : a1 - a0;
          if (this._x1 === null) {
            this._append`M${x0},${y0}`;
          } else if (Math.abs(this._x1 - x0) > epsilon2 || Math.abs(this._y1 - y0) > epsilon2) {
            this._append`L${x0},${y0}`;
          }
          if (!r2) return;
          if (da < 0) da = da % tau + tau;
          if (da > tauEpsilon) {
            this._append`A${r2},${r2},0,1,${cw},${x5 - dx},${y6 - dy}A${r2},${r2},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;
          } else if (da > epsilon2) {
            this._append`A${r2},${r2},0,${+(da >= pi)},${cw},${this._x1 = x5 + r2 * Math.cos(a1)},${this._y1 = y6 + r2 * Math.sin(a1)}`;
          }
        }
        rect(x5, y6, w4, h3) {
          this._append`M${this._x0 = this._x1 = +x5},${this._y0 = this._y1 = +y6}h${w4 = +w4}v${+h3}h${-w4}Z`;
        }
        toString() {
          return this._;
        }
      };
      __name(path2, "path");
      path2.prototype = Path.prototype;
    }
  });

  // ../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/index.js
  var init_src13 = __esm({
    "../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/index.js"() {
      "use strict";
      init_path();
    }
  });

  // ../../node_modules/.pnpm/d3-chord@3.0.1/node_modules/d3-chord/src/index.js
  var init_src14 = __esm({
    "../../node_modules/.pnpm/d3-chord@3.0.1/node_modules/d3-chord/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-contour@4.0.2/node_modules/d3-contour/src/index.js
  var init_src15 = __esm({
    "../../node_modules/.pnpm/d3-contour@4.0.2/node_modules/d3-contour/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-delaunay@6.0.4/node_modules/d3-delaunay/src/index.js
  var init_src16 = __esm({
    "../../node_modules/.pnpm/d3-delaunay@6.0.4/node_modules/d3-delaunay/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-dsv@3.0.1/node_modules/d3-dsv/src/index.js
  var init_src17 = __esm({
    "../../node_modules/.pnpm/d3-dsv@3.0.1/node_modules/d3-dsv/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-fetch@3.0.1/node_modules/d3-fetch/src/index.js
  var init_src18 = __esm({
    "../../node_modules/.pnpm/d3-fetch@3.0.1/node_modules/d3-fetch/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/index.js
  var init_src19 = __esm({
    "../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/index.js
  var init_src20 = __esm({
    "../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js
  function formatDecimal_default(x5) {
    return Math.abs(x5 = Math.round(x5)) >= 1e21 ? x5.toLocaleString("en").replace(/,/g, "") : x5.toString(10);
  }
  function formatDecimalParts(x5, p3) {
    if ((i2 = (x5 = p3 ? x5.toExponential(p3 - 1) : x5.toExponential()).indexOf("e")) < 0) return null;
    var i2, coefficient = x5.slice(0, i2);
    return [
      coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
      +x5.slice(i2 + 1)
    ];
  }
  var init_formatDecimal = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js"() {
      "use strict";
      __name(formatDecimal_default, "default");
      __name(formatDecimalParts, "formatDecimalParts");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js
  function exponent_default(x5) {
    return x5 = formatDecimalParts(Math.abs(x5)), x5 ? x5[1] : NaN;
  }
  var init_exponent = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js"() {
      "use strict";
      init_formatDecimal();
      __name(exponent_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js
  function formatGroup_default(grouping, thousands) {
    return function(value2, width3) {
      var i2 = value2.length, t4 = [], j3 = 0, g2 = grouping[0], length2 = 0;
      while (i2 > 0 && g2 > 0) {
        if (length2 + g2 + 1 > width3) g2 = Math.max(1, width3 - length2);
        t4.push(value2.substring(i2 -= g2, i2 + g2));
        if ((length2 += g2 + 1) > width3) break;
        g2 = grouping[j3 = (j3 + 1) % grouping.length];
      }
      return t4.reverse().join(thousands);
    };
  }
  var init_formatGroup = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js"() {
      "use strict";
      __name(formatGroup_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js
  function formatNumerals_default(numerals) {
    return function(value2) {
      return value2.replace(/[0-9]/g, function(i2) {
        return numerals[+i2];
      });
    };
  }
  var init_formatNumerals = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js"() {
      "use strict";
      __name(formatNumerals_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js
  function formatSpecifier(specifier) {
    if (!(match3 = re.exec(specifier))) throw new Error("invalid format: " + specifier);
    var match3;
    return new FormatSpecifier({
      fill: match3[1],
      align: match3[2],
      sign: match3[3],
      symbol: match3[4],
      zero: match3[5],
      width: match3[6],
      comma: match3[7],
      precision: match3[8] && match3[8].slice(1),
      trim: match3[9],
      type: match3[10]
    });
  }
  function FormatSpecifier(specifier) {
    this.fill = specifier.fill === void 0 ? " " : specifier.fill + "";
    this.align = specifier.align === void 0 ? ">" : specifier.align + "";
    this.sign = specifier.sign === void 0 ? "-" : specifier.sign + "";
    this.symbol = specifier.symbol === void 0 ? "" : specifier.symbol + "";
    this.zero = !!specifier.zero;
    this.width = specifier.width === void 0 ? void 0 : +specifier.width;
    this.comma = !!specifier.comma;
    this.precision = specifier.precision === void 0 ? void 0 : +specifier.precision;
    this.trim = !!specifier.trim;
    this.type = specifier.type === void 0 ? "" : specifier.type + "";
  }
  var re;
  var init_formatSpecifier = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js"() {
      "use strict";
      re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
      __name(formatSpecifier, "formatSpecifier");
      formatSpecifier.prototype = FormatSpecifier.prototype;
      __name(FormatSpecifier, "FormatSpecifier");
      FormatSpecifier.prototype.toString = function() {
        return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (this.width === void 0 ? "" : Math.max(1, this.width | 0)) + (this.comma ? "," : "") + (this.precision === void 0 ? "" : "." + Math.max(0, this.precision | 0)) + (this.trim ? "~" : "") + this.type;
      };
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js
  function formatTrim_default(s2) {
    out: for (var n2 = s2.length, i2 = 1, i0 = -1, i1; i2 < n2; ++i2) {
      switch (s2[i2]) {
        case ".":
          i0 = i1 = i2;
          break;
        case "0":
          if (i0 === 0) i0 = i2;
          i1 = i2;
          break;
        default:
          if (!+s2[i2]) break out;
          if (i0 > 0) i0 = 0;
          break;
      }
    }
    return i0 > 0 ? s2.slice(0, i0) + s2.slice(i1 + 1) : s2;
  }
  var init_formatTrim = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js"() {
      "use strict";
      __name(formatTrim_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js
  function formatPrefixAuto_default(x5, p3) {
    var d3 = formatDecimalParts(x5, p3);
    if (!d3) return x5 + "";
    var coefficient = d3[0], exponent = d3[1], i2 = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, n2 = coefficient.length;
    return i2 === n2 ? coefficient : i2 > n2 ? coefficient + new Array(i2 - n2 + 1).join("0") : i2 > 0 ? coefficient.slice(0, i2) + "." + coefficient.slice(i2) : "0." + new Array(1 - i2).join("0") + formatDecimalParts(x5, Math.max(0, p3 + i2 - 1))[0];
  }
  var prefixExponent;
  var init_formatPrefixAuto = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js"() {
      "use strict";
      init_formatDecimal();
      __name(formatPrefixAuto_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js
  function formatRounded_default(x5, p3) {
    var d3 = formatDecimalParts(x5, p3);
    if (!d3) return x5 + "";
    var coefficient = d3[0], exponent = d3[1];
    return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) : coefficient + new Array(exponent - coefficient.length + 2).join("0");
  }
  var init_formatRounded = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js"() {
      "use strict";
      init_formatDecimal();
      __name(formatRounded_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js
  var formatTypes_default;
  var init_formatTypes = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js"() {
      "use strict";
      init_formatDecimal();
      init_formatPrefixAuto();
      init_formatRounded();
      formatTypes_default = {
        "%": /* @__PURE__ */ __name((x5, p3) => (x5 * 100).toFixed(p3), "%"),
        "b": /* @__PURE__ */ __name((x5) => Math.round(x5).toString(2), "b"),
        "c": /* @__PURE__ */ __name((x5) => x5 + "", "c"),
        "d": formatDecimal_default,
        "e": /* @__PURE__ */ __name((x5, p3) => x5.toExponential(p3), "e"),
        "f": /* @__PURE__ */ __name((x5, p3) => x5.toFixed(p3), "f"),
        "g": /* @__PURE__ */ __name((x5, p3) => x5.toPrecision(p3), "g"),
        "o": /* @__PURE__ */ __name((x5) => Math.round(x5).toString(8), "o"),
        "p": /* @__PURE__ */ __name((x5, p3) => formatRounded_default(x5 * 100, p3), "p"),
        "r": formatRounded_default,
        "s": formatPrefixAuto_default,
        "X": /* @__PURE__ */ __name((x5) => Math.round(x5).toString(16).toUpperCase(), "X"),
        "x": /* @__PURE__ */ __name((x5) => Math.round(x5).toString(16), "x")
      };
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js
  function identity_default2(x5) {
    return x5;
  }
  var init_identity2 = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js"() {
      "use strict";
      __name(identity_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js
  function locale_default(locale3) {
    var group2 = locale3.grouping === void 0 || locale3.thousands === void 0 ? identity_default2 : formatGroup_default(map.call(locale3.grouping, Number), locale3.thousands + ""), currencyPrefix = locale3.currency === void 0 ? "" : locale3.currency[0] + "", currencySuffix = locale3.currency === void 0 ? "" : locale3.currency[1] + "", decimal = locale3.decimal === void 0 ? "." : locale3.decimal + "", numerals = locale3.numerals === void 0 ? identity_default2 : formatNumerals_default(map.call(locale3.numerals, String)), percent = locale3.percent === void 0 ? "%" : locale3.percent + "", minus = locale3.minus === void 0 ? "\u2212" : locale3.minus + "", nan = locale3.nan === void 0 ? "NaN" : locale3.nan + "";
    function newFormat(specifier) {
      specifier = formatSpecifier(specifier);
      var fill = specifier.fill, align = specifier.align, sign2 = specifier.sign, symbol = specifier.symbol, zero3 = specifier.zero, width3 = specifier.width, comma = specifier.comma, precision = specifier.precision, trim2 = specifier.trim, type3 = specifier.type;
      if (type3 === "n") comma = true, type3 = "g";
      else if (!formatTypes_default[type3]) precision === void 0 && (precision = 12), trim2 = true, type3 = "g";
      if (zero3 || fill === "0" && align === "=") zero3 = true, fill = "0", align = "=";
      var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type3) ? "0" + type3.toLowerCase() : "", suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type3) ? percent : "";
      var formatType = formatTypes_default[type3], maybeSuffix = /[defgprs%]/.test(type3);
      precision = precision === void 0 ? 6 : /[gprs]/.test(type3) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
      function format3(value2) {
        var valuePrefix = prefix, valueSuffix = suffix, i2, n2, c3;
        if (type3 === "c") {
          valueSuffix = formatType(value2) + valueSuffix;
          value2 = "";
        } else {
          value2 = +value2;
          var valueNegative = value2 < 0 || 1 / value2 < 0;
          value2 = isNaN(value2) ? nan : formatType(Math.abs(value2), precision);
          if (trim2) value2 = formatTrim_default(value2);
          if (valueNegative && +value2 === 0 && sign2 !== "+") valueNegative = false;
          valuePrefix = (valueNegative ? sign2 === "(" ? sign2 : minus : sign2 === "-" || sign2 === "(" ? "" : sign2) + valuePrefix;
          valueSuffix = (type3 === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign2 === "(" ? ")" : "");
          if (maybeSuffix) {
            i2 = -1, n2 = value2.length;
            while (++i2 < n2) {
              if (c3 = value2.charCodeAt(i2), 48 > c3 || c3 > 57) {
                valueSuffix = (c3 === 46 ? decimal + value2.slice(i2 + 1) : value2.slice(i2)) + valueSuffix;
                value2 = value2.slice(0, i2);
                break;
              }
            }
          }
        }
        if (comma && !zero3) value2 = group2(value2, Infinity);
        var length2 = valuePrefix.length + value2.length + valueSuffix.length, padding = length2 < width3 ? new Array(width3 - length2 + 1).join(fill) : "";
        if (comma && zero3) value2 = group2(padding + value2, padding.length ? width3 - valueSuffix.length : Infinity), padding = "";
        switch (align) {
          case "<":
            value2 = valuePrefix + value2 + valueSuffix + padding;
            break;
          case "=":
            value2 = valuePrefix + padding + value2 + valueSuffix;
            break;
          case "^":
            value2 = padding.slice(0, length2 = padding.length >> 1) + valuePrefix + value2 + valueSuffix + padding.slice(length2);
            break;
          default:
            value2 = padding + valuePrefix + value2 + valueSuffix;
            break;
        }
        return numerals(value2);
      }
      __name(format3, "format");
      format3.toString = function() {
        return specifier + "";
      };
      return format3;
    }
    __name(newFormat, "newFormat");
    function formatPrefix2(specifier, value2) {
      var f2 = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), e3 = Math.max(-8, Math.min(8, Math.floor(exponent_default(value2) / 3))) * 3, k2 = Math.pow(10, -e3), prefix = prefixes[8 + e3 / 3];
      return function(value3) {
        return f2(k2 * value3) + prefix;
      };
    }
    __name(formatPrefix2, "formatPrefix");
    return {
      format: newFormat,
      formatPrefix: formatPrefix2
    };
  }
  var map, prefixes;
  var init_locale = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js"() {
      "use strict";
      init_exponent();
      init_formatGroup();
      init_formatNumerals();
      init_formatSpecifier();
      init_formatTrim();
      init_formatTypes();
      init_formatPrefixAuto();
      init_identity2();
      map = Array.prototype.map;
      prefixes = ["y", "z", "a", "f", "p", "n", "\xB5", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
      __name(locale_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js
  function defaultLocale(definition) {
    locale = locale_default(definition);
    format2 = locale.format;
    formatPrefix = locale.formatPrefix;
    return locale;
  }
  var locale, format2, formatPrefix;
  var init_defaultLocale = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js"() {
      "use strict";
      init_locale();
      defaultLocale({
        thousands: ",",
        grouping: [3],
        currency: ["$", ""]
      });
      __name(defaultLocale, "defaultLocale");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js
  function precisionFixed_default(step3) {
    return Math.max(0, -exponent_default(Math.abs(step3)));
  }
  var init_precisionFixed = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js"() {
      "use strict";
      init_exponent();
      __name(precisionFixed_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js
  function precisionPrefix_default(step3, value2) {
    return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent_default(value2) / 3))) * 3 - exponent_default(Math.abs(step3)));
  }
  var init_precisionPrefix = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js"() {
      "use strict";
      init_exponent();
      __name(precisionPrefix_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js
  function precisionRound_default(step3, max10) {
    step3 = Math.abs(step3), max10 = Math.abs(max10) - step3;
    return Math.max(0, exponent_default(max10) - exponent_default(step3)) + 1;
  }
  var init_precisionRound = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js"() {
      "use strict";
      init_exponent();
      __name(precisionRound_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/index.js
  var init_src21 = __esm({
    "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/index.js"() {
      "use strict";
      init_defaultLocale();
      init_formatSpecifier();
      init_precisionFixed();
      init_precisionPrefix();
      init_precisionRound();
    }
  });

  // ../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/index.js
  var init_src22 = __esm({
    "../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/count.js
  function count(node2) {
    var sum2 = 0, children2 = node2.children, i2 = children2 && children2.length;
    if (!i2) sum2 = 1;
    else while (--i2 >= 0) sum2 += children2[i2].value;
    node2.value = sum2;
  }
  function count_default() {
    return this.eachAfter(count);
  }
  var init_count = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/count.js"() {
      "use strict";
      __name(count, "count");
      __name(count_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/each.js
  function each_default2(callback, that) {
    let index = -1;
    for (const node2 of this) {
      callback.call(that, node2, ++index, this);
    }
    return this;
  }
  var init_each2 = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/each.js"() {
      "use strict";
      __name(each_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js
  function eachBefore_default(callback, that) {
    var node2 = this, nodes5 = [node2], children2, i2, index = -1;
    while (node2 = nodes5.pop()) {
      callback.call(that, node2, ++index, this);
      if (children2 = node2.children) {
        for (i2 = children2.length - 1; i2 >= 0; --i2) {
          nodes5.push(children2[i2]);
        }
      }
    }
    return this;
  }
  var init_eachBefore = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js"() {
      "use strict";
      __name(eachBefore_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js
  function eachAfter_default(callback, that) {
    var node2 = this, nodes5 = [node2], next3 = [], children2, i2, n2, index = -1;
    while (node2 = nodes5.pop()) {
      next3.push(node2);
      if (children2 = node2.children) {
        for (i2 = 0, n2 = children2.length; i2 < n2; ++i2) {
          nodes5.push(children2[i2]);
        }
      }
    }
    while (node2 = next3.pop()) {
      callback.call(that, node2, ++index, this);
    }
    return this;
  }
  var init_eachAfter = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js"() {
      "use strict";
      __name(eachAfter_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/find.js
  function find_default(callback, that) {
    let index = -1;
    for (const node2 of this) {
      if (callback.call(that, node2, ++index, this)) {
        return node2;
      }
    }
  }
  var init_find = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/find.js"() {
      "use strict";
      __name(find_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/sum.js
  function sum_default(value2) {
    return this.eachAfter(function(node2) {
      var sum2 = +value2(node2.data) || 0, children2 = node2.children, i2 = children2 && children2.length;
      while (--i2 >= 0) sum2 += children2[i2].value;
      node2.value = sum2;
    });
  }
  var init_sum = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/sum.js"() {
      "use strict";
      __name(sum_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/sort.js
  function sort_default2(compare) {
    return this.eachBefore(function(node2) {
      if (node2.children) {
        node2.children.sort(compare);
      }
    });
  }
  var init_sort2 = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/sort.js"() {
      "use strict";
      __name(sort_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/path.js
  function path_default(end2) {
    var start3 = this, ancestor = leastCommonAncestor(start3, end2), nodes5 = [start3];
    while (start3 !== ancestor) {
      start3 = start3.parent;
      nodes5.push(start3);
    }
    var k2 = nodes5.length;
    while (end2 !== ancestor) {
      nodes5.splice(k2, 0, end2);
      end2 = end2.parent;
    }
    return nodes5;
  }
  function leastCommonAncestor(a2, b3) {
    if (a2 === b3) return a2;
    var aNodes = a2.ancestors(), bNodes = b3.ancestors(), c3 = null;
    a2 = aNodes.pop();
    b3 = bNodes.pop();
    while (a2 === b3) {
      c3 = a2;
      a2 = aNodes.pop();
      b3 = bNodes.pop();
    }
    return c3;
  }
  var init_path2 = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/path.js"() {
      "use strict";
      __name(path_default, "default");
      __name(leastCommonAncestor, "leastCommonAncestor");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/ancestors.js
  function ancestors_default() {
    var node2 = this, nodes5 = [node2];
    while (node2 = node2.parent) {
      nodes5.push(node2);
    }
    return nodes5;
  }
  var init_ancestors = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/ancestors.js"() {
      "use strict";
      __name(ancestors_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/descendants.js
  function descendants_default() {
    return Array.from(this);
  }
  var init_descendants = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/descendants.js"() {
      "use strict";
      __name(descendants_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/leaves.js
  function leaves_default() {
    var leaves = [];
    this.eachBefore(function(node2) {
      if (!node2.children) {
        leaves.push(node2);
      }
    });
    return leaves;
  }
  var init_leaves = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/leaves.js"() {
      "use strict";
      __name(leaves_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/links.js
  function links_default() {
    var root4 = this, links3 = [];
    root4.each(function(node2) {
      if (node2 !== root4) {
        links3.push({ source: node2.parent, target: node2 });
      }
    });
    return links3;
  }
  var init_links = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/links.js"() {
      "use strict";
      __name(links_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/iterator.js
  function* iterator_default2() {
    var node2 = this, current, next3 = [node2], children2, i2, n2;
    do {
      current = next3.reverse(), next3 = [];
      while (node2 = current.pop()) {
        yield node2;
        if (children2 = node2.children) {
          for (i2 = 0, n2 = children2.length; i2 < n2; ++i2) {
            next3.push(children2[i2]);
          }
        }
      }
    } while (next3.length);
  }
  var init_iterator2 = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/iterator.js"() {
      "use strict";
      __name(iterator_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/index.js
  function hierarchy(data6, children2) {
    if (data6 instanceof Map) {
      data6 = [void 0, data6];
      if (children2 === void 0) children2 = mapChildren;
    } else if (children2 === void 0) {
      children2 = objectChildren;
    }
    var root4 = new Node(data6), node2, nodes5 = [root4], child, childs, i2, n2;
    while (node2 = nodes5.pop()) {
      if ((childs = children2(node2.data)) && (n2 = (childs = Array.from(childs)).length)) {
        node2.children = childs;
        for (i2 = n2 - 1; i2 >= 0; --i2) {
          nodes5.push(child = childs[i2] = new Node(childs[i2]));
          child.parent = node2;
          child.depth = node2.depth + 1;
        }
      }
    }
    return root4.eachBefore(computeHeight);
  }
  function node_copy() {
    return hierarchy(this).eachBefore(copyData);
  }
  function objectChildren(d3) {
    return d3.children;
  }
  function mapChildren(d3) {
    return Array.isArray(d3) ? d3[1] : null;
  }
  function copyData(node2) {
    if (node2.data.value !== void 0) node2.value = node2.data.value;
    node2.data = node2.data.data;
  }
  function computeHeight(node2) {
    var height2 = 0;
    do
      node2.height = height2;
    while ((node2 = node2.parent) && node2.height < ++height2);
  }
  function Node(data6) {
    this.data = data6;
    this.depth = this.height = 0;
    this.parent = null;
  }
  var init_hierarchy = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/index.js"() {
      "use strict";
      init_count();
      init_each2();
      init_eachBefore();
      init_eachAfter();
      init_find();
      init_sum();
      init_sort2();
      init_path2();
      init_ancestors();
      init_descendants();
      init_leaves();
      init_links();
      init_iterator2();
      __name(hierarchy, "hierarchy");
      __name(node_copy, "node_copy");
      __name(objectChildren, "objectChildren");
      __name(mapChildren, "mapChildren");
      __name(copyData, "copyData");
      __name(computeHeight, "computeHeight");
      __name(Node, "Node");
      Node.prototype = hierarchy.prototype = {
        constructor: Node,
        count: count_default,
        each: each_default2,
        eachAfter: eachAfter_default,
        eachBefore: eachBefore_default,
        find: find_default,
        sum: sum_default,
        sort: sort_default2,
        path: path_default,
        ancestors: ancestors_default,
        descendants: descendants_default,
        leaves: leaves_default,
        links: links_default,
        copy: node_copy,
        [Symbol.iterator]: iterator_default2
      };
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/accessors.js
  function required(f2) {
    if (typeof f2 !== "function") throw new Error();
    return f2;
  }
  var init_accessors = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/accessors.js"() {
      "use strict";
      __name(required, "required");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/constant.js
  function constantZero() {
    return 0;
  }
  function constant_default4(x5) {
    return function() {
      return x5;
    };
  }
  var init_constant4 = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/constant.js"() {
      "use strict";
      __name(constantZero, "constantZero");
      __name(constant_default4, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/round.js
  function round_default2(node2) {
    node2.x0 = Math.round(node2.x0);
    node2.y0 = Math.round(node2.y0);
    node2.x1 = Math.round(node2.x1);
    node2.y1 = Math.round(node2.y1);
  }
  var init_round2 = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/round.js"() {
      "use strict";
      __name(round_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/dice.js
  function dice_default(parent4, x0, y0, x1, y1) {
    var nodes5 = parent4.children, node2, i2 = -1, n2 = nodes5.length, k2 = parent4.value && (x1 - x0) / parent4.value;
    while (++i2 < n2) {
      node2 = nodes5[i2], node2.y0 = y0, node2.y1 = y1;
      node2.x0 = x0, node2.x1 = x0 += node2.value * k2;
    }
  }
  var init_dice = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/dice.js"() {
      "use strict";
      __name(dice_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/slice.js
  function slice_default(parent4, x0, y0, x1, y1) {
    var nodes5 = parent4.children, node2, i2 = -1, n2 = nodes5.length, k2 = parent4.value && (y1 - y0) / parent4.value;
    while (++i2 < n2) {
      node2 = nodes5[i2], node2.x0 = x0, node2.x1 = x1;
      node2.y0 = y0, node2.y1 = y0 += node2.value * k2;
    }
  }
  var init_slice = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/slice.js"() {
      "use strict";
      __name(slice_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/squarify.js
  function squarifyRatio(ratio, parent4, x0, y0, x1, y1) {
    var rows = [], nodes5 = parent4.children, row, nodeValue, i0 = 0, i1 = 0, n2 = nodes5.length, dx, dy, value2 = parent4.value, sumValue, minValue, maxValue, newRatio, minRatio, alpha, beta;
    while (i0 < n2) {
      dx = x1 - x0, dy = y1 - y0;
      do
        sumValue = nodes5[i1++].value;
      while (!sumValue && i1 < n2);
      minValue = maxValue = sumValue;
      alpha = Math.max(dy / dx, dx / dy) / (value2 * ratio);
      beta = sumValue * sumValue * alpha;
      minRatio = Math.max(maxValue / beta, beta / minValue);
      for (; i1 < n2; ++i1) {
        sumValue += nodeValue = nodes5[i1].value;
        if (nodeValue < minValue) minValue = nodeValue;
        if (nodeValue > maxValue) maxValue = nodeValue;
        beta = sumValue * sumValue * alpha;
        newRatio = Math.max(maxValue / beta, beta / minValue);
        if (newRatio > minRatio) {
          sumValue -= nodeValue;
          break;
        }
        minRatio = newRatio;
      }
      rows.push(row = { value: sumValue, dice: dx < dy, children: nodes5.slice(i0, i1) });
      if (row.dice) dice_default(row, x0, y0, x1, value2 ? y0 += dy * sumValue / value2 : y1);
      else slice_default(row, x0, y0, value2 ? x0 += dx * sumValue / value2 : x1, y1);
      value2 -= sumValue, i0 = i1;
    }
    return rows;
  }
  var phi, squarify_default;
  var init_squarify = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/squarify.js"() {
      "use strict";
      init_dice();
      init_slice();
      phi = (1 + Math.sqrt(5)) / 2;
      __name(squarifyRatio, "squarifyRatio");
      squarify_default = (/* @__PURE__ */ __name((function custom(ratio) {
        function squarify(parent4, x0, y0, x1, y1) {
          squarifyRatio(ratio, parent4, x0, y0, x1, y1);
        }
        __name(squarify, "squarify");
        squarify.ratio = function(x5) {
          return custom((x5 = +x5) > 1 ? x5 : 1);
        };
        return squarify;
      }), "custom"))(phi);
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/index.js
  function treemap_default() {
    var tile = squarify_default, round = false, dx = 1, dy = 1, paddingStack = [0], paddingInner = constantZero, paddingTop = constantZero, paddingRight = constantZero, paddingBottom = constantZero, paddingLeft = constantZero;
    function treemap2(root4) {
      root4.x0 = root4.y0 = 0;
      root4.x1 = dx;
      root4.y1 = dy;
      root4.eachBefore(positionNode3);
      paddingStack = [0];
      if (round) root4.eachBefore(round_default2);
      return root4;
    }
    __name(treemap2, "treemap");
    function positionNode3(node2) {
      var p3 = paddingStack[node2.depth], x0 = node2.x0 + p3, y0 = node2.y0 + p3, x1 = node2.x1 - p3, y1 = node2.y1 - p3;
      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
      node2.x0 = x0;
      node2.y0 = y0;
      node2.x1 = x1;
      node2.y1 = y1;
      if (node2.children) {
        p3 = paddingStack[node2.depth + 1] = paddingInner(node2) / 2;
        x0 += paddingLeft(node2) - p3;
        y0 += paddingTop(node2) - p3;
        x1 -= paddingRight(node2) - p3;
        y1 -= paddingBottom(node2) - p3;
        if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
        if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
        tile(node2, x0, y0, x1, y1);
      }
    }
    __name(positionNode3, "positionNode");
    treemap2.round = function(x5) {
      return arguments.length ? (round = !!x5, treemap2) : round;
    };
    treemap2.size = function(x5) {
      return arguments.length ? (dx = +x5[0], dy = +x5[1], treemap2) : [dx, dy];
    };
    treemap2.tile = function(x5) {
      return arguments.length ? (tile = required(x5), treemap2) : tile;
    };
    treemap2.padding = function(x5) {
      return arguments.length ? treemap2.paddingInner(x5).paddingOuter(x5) : treemap2.paddingInner();
    };
    treemap2.paddingInner = function(x5) {
      return arguments.length ? (paddingInner = typeof x5 === "function" ? x5 : constant_default4(+x5), treemap2) : paddingInner;
    };
    treemap2.paddingOuter = function(x5) {
      return arguments.length ? treemap2.paddingTop(x5).paddingRight(x5).paddingBottom(x5).paddingLeft(x5) : treemap2.paddingTop();
    };
    treemap2.paddingTop = function(x5) {
      return arguments.length ? (paddingTop = typeof x5 === "function" ? x5 : constant_default4(+x5), treemap2) : paddingTop;
    };
    treemap2.paddingRight = function(x5) {
      return arguments.length ? (paddingRight = typeof x5 === "function" ? x5 : constant_default4(+x5), treemap2) : paddingRight;
    };
    treemap2.paddingBottom = function(x5) {
      return arguments.length ? (paddingBottom = typeof x5 === "function" ? x5 : constant_default4(+x5), treemap2) : paddingBottom;
    };
    treemap2.paddingLeft = function(x5) {
      return arguments.length ? (paddingLeft = typeof x5 === "function" ? x5 : constant_default4(+x5), treemap2) : paddingLeft;
    };
    return treemap2;
  }
  var init_treemap = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/index.js"() {
      "use strict";
      init_round2();
      init_squarify();
      init_accessors();
      init_constant4();
      __name(treemap_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/index.js
  var init_src23 = __esm({
    "../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/index.js"() {
      "use strict";
      init_hierarchy();
      init_treemap();
    }
  });

  // ../../node_modules/.pnpm/d3-polygon@3.0.1/node_modules/d3-polygon/src/index.js
  var init_src24 = __esm({
    "../../node_modules/.pnpm/d3-polygon@3.0.1/node_modules/d3-polygon/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-random@3.0.1/node_modules/d3-random/src/index.js
  var init_src25 = __esm({
    "../../node_modules/.pnpm/d3-random@3.0.1/node_modules/d3-random/src/index.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js
  function initRange(domain, range3) {
    switch (arguments.length) {
      case 0:
        break;
      case 1:
        this.range(domain);
        break;
      default:
        this.range(range3).domain(domain);
        break;
    }
    return this;
  }
  var init_init = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js"() {
      "use strict";
      __name(initRange, "initRange");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/ordinal.js
  function ordinal() {
    var index = new InternMap(), domain = [], range3 = [], unknown = implicit;
    function scale3(d3) {
      let i2 = index.get(d3);
      if (i2 === void 0) {
        if (unknown !== implicit) return unknown;
        index.set(d3, i2 = domain.push(d3) - 1);
      }
      return range3[i2 % range3.length];
    }
    __name(scale3, "scale");
    scale3.domain = function(_3) {
      if (!arguments.length) return domain.slice();
      domain = [], index = new InternMap();
      for (const value2 of _3) {
        if (index.has(value2)) continue;
        index.set(value2, domain.push(value2) - 1);
      }
      return scale3;
    };
    scale3.range = function(_3) {
      return arguments.length ? (range3 = Array.from(_3), scale3) : range3.slice();
    };
    scale3.unknown = function(_3) {
      return arguments.length ? (unknown = _3, scale3) : unknown;
    };
    scale3.copy = function() {
      return ordinal(domain, range3).unknown(unknown);
    };
    initRange.apply(scale3, arguments);
    return scale3;
  }
  var implicit;
  var init_ordinal = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/ordinal.js"() {
      "use strict";
      init_src2();
      init_init();
      implicit = Symbol("implicit");
      __name(ordinal, "ordinal");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/band.js
  function band() {
    var scale3 = ordinal().unknown(void 0), domain = scale3.domain, ordinalRange = scale3.range, r0 = 0, r1 = 1, step3, bandwidth, round = false, paddingInner = 0, paddingOuter = 0, align = 0.5;
    delete scale3.unknown;
    function rescale() {
      var n2 = domain().length, reverse2 = r1 < r0, start3 = reverse2 ? r1 : r0, stop5 = reverse2 ? r0 : r1;
      step3 = (stop5 - start3) / Math.max(1, n2 - paddingInner + paddingOuter * 2);
      if (round) step3 = Math.floor(step3);
      start3 += (stop5 - start3 - step3 * (n2 - paddingInner)) * align;
      bandwidth = step3 * (1 - paddingInner);
      if (round) start3 = Math.round(start3), bandwidth = Math.round(bandwidth);
      var values3 = range(n2).map(function(i2) {
        return start3 + step3 * i2;
      });
      return ordinalRange(reverse2 ? values3.reverse() : values3);
    }
    __name(rescale, "rescale");
    scale3.domain = function(_3) {
      return arguments.length ? (domain(_3), rescale()) : domain();
    };
    scale3.range = function(_3) {
      return arguments.length ? ([r0, r1] = _3, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];
    };
    scale3.rangeRound = function(_3) {
      return [r0, r1] = _3, r0 = +r0, r1 = +r1, round = true, rescale();
    };
    scale3.bandwidth = function() {
      return bandwidth;
    };
    scale3.step = function() {
      return step3;
    };
    scale3.round = function(_3) {
      return arguments.length ? (round = !!_3, rescale()) : round;
    };
    scale3.padding = function(_3) {
      return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_3), rescale()) : paddingInner;
    };
    scale3.paddingInner = function(_3) {
      return arguments.length ? (paddingInner = Math.min(1, _3), rescale()) : paddingInner;
    };
    scale3.paddingOuter = function(_3) {
      return arguments.length ? (paddingOuter = +_3, rescale()) : paddingOuter;
    };
    scale3.align = function(_3) {
      return arguments.length ? (align = Math.max(0, Math.min(1, _3)), rescale()) : align;
    };
    scale3.copy = function() {
      return band(domain(), [r0, r1]).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);
    };
    return initRange.apply(rescale(), arguments);
  }
  var init_band = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/band.js"() {
      "use strict";
      init_src2();
      init_init();
      init_ordinal();
      __name(band, "band");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js
  function constants(x5) {
    return function() {
      return x5;
    };
  }
  var init_constant5 = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js"() {
      "use strict";
      __name(constants, "constants");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js
  function number3(x5) {
    return +x5;
  }
  var init_number3 = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js"() {
      "use strict";
      __name(number3, "number");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js
  function identity2(x5) {
    return x5;
  }
  function normalize(a2, b3) {
    return (b3 -= a2 = +a2) ? function(x5) {
      return (x5 - a2) / b3;
    } : constants(isNaN(b3) ? NaN : 0.5);
  }
  function clamper(a2, b3) {
    var t4;
    if (a2 > b3) t4 = a2, a2 = b3, b3 = t4;
    return function(x5) {
      return Math.max(a2, Math.min(b3, x5));
    };
  }
  function bimap(domain, range3, interpolate) {
    var d0 = domain[0], d1 = domain[1], r0 = range3[0], r1 = range3[1];
    if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);
    else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
    return function(x5) {
      return r0(d0(x5));
    };
  }
  function polymap(domain, range3, interpolate) {
    var j3 = Math.min(domain.length, range3.length) - 1, d3 = new Array(j3), r2 = new Array(j3), i2 = -1;
    if (domain[j3] < domain[0]) {
      domain = domain.slice().reverse();
      range3 = range3.slice().reverse();
    }
    while (++i2 < j3) {
      d3[i2] = normalize(domain[i2], domain[i2 + 1]);
      r2[i2] = interpolate(range3[i2], range3[i2 + 1]);
    }
    return function(x5) {
      var i3 = bisect_default(domain, x5, 1, j3) - 1;
      return r2[i3](d3[i3](x5));
    };
  }
  function copy(source, target) {
    return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown());
  }
  function transformer() {
    var domain = unit, range3 = unit, interpolate = value_default, transform8, untransform, unknown, clamp2 = identity2, piecewise, output2, input;
    function rescale() {
      var n2 = Math.min(domain.length, range3.length);
      if (clamp2 !== identity2) clamp2 = clamper(domain[0], domain[n2 - 1]);
      piecewise = n2 > 2 ? polymap : bimap;
      output2 = input = null;
      return scale3;
    }
    __name(rescale, "rescale");
    function scale3(x5) {
      return x5 == null || isNaN(x5 = +x5) ? unknown : (output2 || (output2 = piecewise(domain.map(transform8), range3, interpolate)))(transform8(clamp2(x5)));
    }
    __name(scale3, "scale");
    scale3.invert = function(y6) {
      return clamp2(untransform((input || (input = piecewise(range3, domain.map(transform8), number_default)))(y6)));
    };
    scale3.domain = function(_3) {
      return arguments.length ? (domain = Array.from(_3, number3), rescale()) : domain.slice();
    };
    scale3.range = function(_3) {
      return arguments.length ? (range3 = Array.from(_3), rescale()) : range3.slice();
    };
    scale3.rangeRound = function(_3) {
      return range3 = Array.from(_3), interpolate = round_default, rescale();
    };
    scale3.clamp = function(_3) {
      return arguments.length ? (clamp2 = _3 ? true : identity2, rescale()) : clamp2 !== identity2;
    };
    scale3.interpolate = function(_3) {
      return arguments.length ? (interpolate = _3, rescale()) : interpolate;
    };
    scale3.unknown = function(_3) {
      return arguments.length ? (unknown = _3, scale3) : unknown;
    };
    return function(t4, u2) {
      transform8 = t4, untransform = u2;
      return rescale();
    };
  }
  function continuous() {
    return transformer()(identity2, identity2);
  }
  var unit;
  var init_continuous = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js"() {
      "use strict";
      init_src2();
      init_src8();
      init_constant5();
      init_number3();
      unit = [0, 1];
      __name(identity2, "identity");
      __name(normalize, "normalize");
      __name(clamper, "clamper");
      __name(bimap, "bimap");
      __name(polymap, "polymap");
      __name(copy, "copy");
      __name(transformer, "transformer");
      __name(continuous, "continuous");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js
  function tickFormat(start3, stop5, count2, specifier) {
    var step3 = tickStep(start3, stop5, count2), precision;
    specifier = formatSpecifier(specifier == null ? ",f" : specifier);
    switch (specifier.type) {
      case "s": {
        var value2 = Math.max(Math.abs(start3), Math.abs(stop5));
        if (specifier.precision == null && !isNaN(precision = precisionPrefix_default(step3, value2))) specifier.precision = precision;
        return formatPrefix(specifier, value2);
      }
      case "":
      case "e":
      case "g":
      case "p":
      case "r": {
        if (specifier.precision == null && !isNaN(precision = precisionRound_default(step3, Math.max(Math.abs(start3), Math.abs(stop5))))) specifier.precision = precision - (specifier.type === "e");
        break;
      }
      case "f":
      case "%": {
        if (specifier.precision == null && !isNaN(precision = precisionFixed_default(step3))) specifier.precision = precision - (specifier.type === "%") * 2;
        break;
      }
    }
    return format2(specifier);
  }
  var init_tickFormat = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js"() {
      "use strict";
      init_src2();
      init_src21();
      __name(tickFormat, "tickFormat");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js
  function linearish(scale3) {
    var domain = scale3.domain;
    scale3.ticks = function(count2) {
      var d3 = domain();
      return ticks(d3[0], d3[d3.length - 1], count2 == null ? 10 : count2);
    };
    scale3.tickFormat = function(count2, specifier) {
      var d3 = domain();
      return tickFormat(d3[0], d3[d3.length - 1], count2 == null ? 10 : count2, specifier);
    };
    scale3.nice = function(count2) {
      if (count2 == null) count2 = 10;
      var d3 = domain();
      var i0 = 0;
      var i1 = d3.length - 1;
      var start3 = d3[i0];
      var stop5 = d3[i1];
      var prestep;
      var step3;
      var maxIter = 10;
      if (stop5 < start3) {
        step3 = start3, start3 = stop5, stop5 = step3;
        step3 = i0, i0 = i1, i1 = step3;
      }
      while (maxIter-- > 0) {
        step3 = tickIncrement(start3, stop5, count2);
        if (step3 === prestep) {
          d3[i0] = start3;
          d3[i1] = stop5;
          return domain(d3);
        } else if (step3 > 0) {
          start3 = Math.floor(start3 / step3) * step3;
          stop5 = Math.ceil(stop5 / step3) * step3;
        } else if (step3 < 0) {
          start3 = Math.ceil(start3 * step3) / step3;
          stop5 = Math.floor(stop5 * step3) / step3;
        } else {
          break;
        }
        prestep = step3;
      }
      return scale3;
    };
    return scale3;
  }
  function linear2() {
    var scale3 = continuous();
    scale3.copy = function() {
      return copy(scale3, linear2());
    };
    initRange.apply(scale3, arguments);
    return linearish(scale3);
  }
  var init_linear = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js"() {
      "use strict";
      init_src2();
      init_continuous();
      init_init();
      init_tickFormat();
      __name(linearish, "linearish");
      __name(linear2, "linear");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/nice.js
  function nice(domain, interval2) {
    domain = domain.slice();
    var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], t4;
    if (x1 < x0) {
      t4 = i0, i0 = i1, i1 = t4;
      t4 = x0, x0 = x1, x1 = t4;
    }
    domain[i0] = interval2.floor(x0);
    domain[i1] = interval2.ceil(x1);
    return domain;
  }
  var init_nice = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/nice.js"() {
      "use strict";
      __name(nice, "nice");
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/interval.js
  function timeInterval(floori, offseti, count2, field) {
    function interval2(date2) {
      return floori(date2 = arguments.length === 0 ? /* @__PURE__ */ new Date() : /* @__PURE__ */ new Date(+date2)), date2;
    }
    __name(interval2, "interval");
    interval2.floor = (date2) => {
      return floori(date2 = /* @__PURE__ */ new Date(+date2)), date2;
    };
    interval2.ceil = (date2) => {
      return floori(date2 = new Date(date2 - 1)), offseti(date2, 1), floori(date2), date2;
    };
    interval2.round = (date2) => {
      const d0 = interval2(date2), d1 = interval2.ceil(date2);
      return date2 - d0 < d1 - date2 ? d0 : d1;
    };
    interval2.offset = (date2, step3) => {
      return offseti(date2 = /* @__PURE__ */ new Date(+date2), step3 == null ? 1 : Math.floor(step3)), date2;
    };
    interval2.range = (start3, stop5, step3) => {
      const range3 = [];
      start3 = interval2.ceil(start3);
      step3 = step3 == null ? 1 : Math.floor(step3);
      if (!(start3 < stop5) || !(step3 > 0)) return range3;
      let previous;
      do
        range3.push(previous = /* @__PURE__ */ new Date(+start3)), offseti(start3, step3), floori(start3);
      while (previous < start3 && start3 < stop5);
      return range3;
    };
    interval2.filter = (test) => {
      return timeInterval((date2) => {
        if (date2 >= date2) while (floori(date2), !test(date2)) date2.setTime(date2 - 1);
      }, (date2, step3) => {
        if (date2 >= date2) {
          if (step3 < 0) while (++step3 <= 0) {
            while (offseti(date2, -1), !test(date2)) {
            }
          }
          else while (--step3 >= 0) {
            while (offseti(date2, 1), !test(date2)) {
            }
          }
        }
      });
    };
    if (count2) {
      interval2.count = (start3, end2) => {
        t02.setTime(+start3), t12.setTime(+end2);
        floori(t02), floori(t12);
        return Math.floor(count2(t02, t12));
      };
      interval2.every = (step3) => {
        step3 = Math.floor(step3);
        return !isFinite(step3) || !(step3 > 0) ? null : !(step3 > 1) ? interval2 : interval2.filter(field ? (d3) => field(d3) % step3 === 0 : (d3) => interval2.count(0, d3) % step3 === 0);
      };
    }
    return interval2;
  }
  var t02, t12;
  var init_interval = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/interval.js"() {
      "use strict";
      t02 = /* @__PURE__ */ new Date();
      t12 = /* @__PURE__ */ new Date();
      __name(timeInterval, "timeInterval");
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/millisecond.js
  var millisecond, milliseconds;
  var init_millisecond = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/millisecond.js"() {
      "use strict";
      init_interval();
      millisecond = timeInterval(() => {
      }, (date2, step3) => {
        date2.setTime(+date2 + step3);
      }, (start3, end2) => {
        return end2 - start3;
      });
      millisecond.every = (k2) => {
        k2 = Math.floor(k2);
        if (!isFinite(k2) || !(k2 > 0)) return null;
        if (!(k2 > 1)) return millisecond;
        return timeInterval((date2) => {
          date2.setTime(Math.floor(date2 / k2) * k2);
        }, (date2, step3) => {
          date2.setTime(+date2 + step3 * k2);
        }, (start3, end2) => {
          return (end2 - start3) / k2;
        });
      };
      milliseconds = millisecond.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/duration.js
  var durationSecond, durationMinute, durationHour, durationDay, durationWeek, durationMonth, durationYear;
  var init_duration2 = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/duration.js"() {
      "use strict";
      durationSecond = 1e3;
      durationMinute = durationSecond * 60;
      durationHour = durationMinute * 60;
      durationDay = durationHour * 24;
      durationWeek = durationDay * 7;
      durationMonth = durationDay * 30;
      durationYear = durationDay * 365;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/second.js
  var second, seconds;
  var init_second = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/second.js"() {
      "use strict";
      init_interval();
      init_duration2();
      second = timeInterval((date2) => {
        date2.setTime(date2 - date2.getMilliseconds());
      }, (date2, step3) => {
        date2.setTime(+date2 + step3 * durationSecond);
      }, (start3, end2) => {
        return (end2 - start3) / durationSecond;
      }, (date2) => {
        return date2.getUTCSeconds();
      });
      seconds = second.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/minute.js
  var timeMinute, timeMinutes, utcMinute, utcMinutes;
  var init_minute = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/minute.js"() {
      "use strict";
      init_interval();
      init_duration2();
      timeMinute = timeInterval((date2) => {
        date2.setTime(date2 - date2.getMilliseconds() - date2.getSeconds() * durationSecond);
      }, (date2, step3) => {
        date2.setTime(+date2 + step3 * durationMinute);
      }, (start3, end2) => {
        return (end2 - start3) / durationMinute;
      }, (date2) => {
        return date2.getMinutes();
      });
      timeMinutes = timeMinute.range;
      utcMinute = timeInterval((date2) => {
        date2.setUTCSeconds(0, 0);
      }, (date2, step3) => {
        date2.setTime(+date2 + step3 * durationMinute);
      }, (start3, end2) => {
        return (end2 - start3) / durationMinute;
      }, (date2) => {
        return date2.getUTCMinutes();
      });
      utcMinutes = utcMinute.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/hour.js
  var timeHour, timeHours, utcHour, utcHours;
  var init_hour = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/hour.js"() {
      "use strict";
      init_interval();
      init_duration2();
      timeHour = timeInterval((date2) => {
        date2.setTime(date2 - date2.getMilliseconds() - date2.getSeconds() * durationSecond - date2.getMinutes() * durationMinute);
      }, (date2, step3) => {
        date2.setTime(+date2 + step3 * durationHour);
      }, (start3, end2) => {
        return (end2 - start3) / durationHour;
      }, (date2) => {
        return date2.getHours();
      });
      timeHours = timeHour.range;
      utcHour = timeInterval((date2) => {
        date2.setUTCMinutes(0, 0, 0);
      }, (date2, step3) => {
        date2.setTime(+date2 + step3 * durationHour);
      }, (start3, end2) => {
        return (end2 - start3) / durationHour;
      }, (date2) => {
        return date2.getUTCHours();
      });
      utcHours = utcHour.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/day.js
  var timeDay, timeDays, utcDay, utcDays, unixDay, unixDays;
  var init_day = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/day.js"() {
      "use strict";
      init_interval();
      init_duration2();
      timeDay = timeInterval(
        (date2) => date2.setHours(0, 0, 0, 0),
        (date2, step3) => date2.setDate(date2.getDate() + step3),
        (start3, end2) => (end2 - start3 - (end2.getTimezoneOffset() - start3.getTimezoneOffset()) * durationMinute) / durationDay,
        (date2) => date2.getDate() - 1
      );
      timeDays = timeDay.range;
      utcDay = timeInterval((date2) => {
        date2.setUTCHours(0, 0, 0, 0);
      }, (date2, step3) => {
        date2.setUTCDate(date2.getUTCDate() + step3);
      }, (start3, end2) => {
        return (end2 - start3) / durationDay;
      }, (date2) => {
        return date2.getUTCDate() - 1;
      });
      utcDays = utcDay.range;
      unixDay = timeInterval((date2) => {
        date2.setUTCHours(0, 0, 0, 0);
      }, (date2, step3) => {
        date2.setUTCDate(date2.getUTCDate() + step3);
      }, (start3, end2) => {
        return (end2 - start3) / durationDay;
      }, (date2) => {
        return Math.floor(date2 / durationDay);
      });
      unixDays = unixDay.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/week.js
  function timeWeekday(i2) {
    return timeInterval((date2) => {
      date2.setDate(date2.getDate() - (date2.getDay() + 7 - i2) % 7);
      date2.setHours(0, 0, 0, 0);
    }, (date2, step3) => {
      date2.setDate(date2.getDate() + step3 * 7);
    }, (start3, end2) => {
      return (end2 - start3 - (end2.getTimezoneOffset() - start3.getTimezoneOffset()) * durationMinute) / durationWeek;
    });
  }
  function utcWeekday(i2) {
    return timeInterval((date2) => {
      date2.setUTCDate(date2.getUTCDate() - (date2.getUTCDay() + 7 - i2) % 7);
      date2.setUTCHours(0, 0, 0, 0);
    }, (date2, step3) => {
      date2.setUTCDate(date2.getUTCDate() + step3 * 7);
    }, (start3, end2) => {
      return (end2 - start3) / durationWeek;
    });
  }
  var timeSunday, timeMonday, timeTuesday, timeWednesday, timeThursday, timeFriday, timeSaturday, timeSundays, timeMondays, timeTuesdays, timeWednesdays, timeThursdays, timeFridays, timeSaturdays, utcSunday, utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSundays, utcMondays, utcTuesdays, utcWednesdays, utcThursdays, utcFridays, utcSaturdays;
  var init_week = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/week.js"() {
      "use strict";
      init_interval();
      init_duration2();
      __name(timeWeekday, "timeWeekday");
      timeSunday = timeWeekday(0);
      timeMonday = timeWeekday(1);
      timeTuesday = timeWeekday(2);
      timeWednesday = timeWeekday(3);
      timeThursday = timeWeekday(4);
      timeFriday = timeWeekday(5);
      timeSaturday = timeWeekday(6);
      timeSundays = timeSunday.range;
      timeMondays = timeMonday.range;
      timeTuesdays = timeTuesday.range;
      timeWednesdays = timeWednesday.range;
      timeThursdays = timeThursday.range;
      timeFridays = timeFriday.range;
      timeSaturdays = timeSaturday.range;
      __name(utcWeekday, "utcWeekday");
      utcSunday = utcWeekday(0);
      utcMonday = utcWeekday(1);
      utcTuesday = utcWeekday(2);
      utcWednesday = utcWeekday(3);
      utcThursday = utcWeekday(4);
      utcFriday = utcWeekday(5);
      utcSaturday = utcWeekday(6);
      utcSundays = utcSunday.range;
      utcMondays = utcMonday.range;
      utcTuesdays = utcTuesday.range;
      utcWednesdays = utcWednesday.range;
      utcThursdays = utcThursday.range;
      utcFridays = utcFriday.range;
      utcSaturdays = utcSaturday.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/month.js
  var timeMonth, timeMonths, utcMonth, utcMonths;
  var init_month = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/month.js"() {
      "use strict";
      init_interval();
      timeMonth = timeInterval((date2) => {
        date2.setDate(1);
        date2.setHours(0, 0, 0, 0);
      }, (date2, step3) => {
        date2.setMonth(date2.getMonth() + step3);
      }, (start3, end2) => {
        return end2.getMonth() - start3.getMonth() + (end2.getFullYear() - start3.getFullYear()) * 12;
      }, (date2) => {
        return date2.getMonth();
      });
      timeMonths = timeMonth.range;
      utcMonth = timeInterval((date2) => {
        date2.setUTCDate(1);
        date2.setUTCHours(0, 0, 0, 0);
      }, (date2, step3) => {
        date2.setUTCMonth(date2.getUTCMonth() + step3);
      }, (start3, end2) => {
        return end2.getUTCMonth() - start3.getUTCMonth() + (end2.getUTCFullYear() - start3.getUTCFullYear()) * 12;
      }, (date2) => {
        return date2.getUTCMonth();
      });
      utcMonths = utcMonth.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/year.js
  var timeYear, timeYears, utcYear, utcYears;
  var init_year = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/year.js"() {
      "use strict";
      init_interval();
      timeYear = timeInterval((date2) => {
        date2.setMonth(0, 1);
        date2.setHours(0, 0, 0, 0);
      }, (date2, step3) => {
        date2.setFullYear(date2.getFullYear() + step3);
      }, (start3, end2) => {
        return end2.getFullYear() - start3.getFullYear();
      }, (date2) => {
        return date2.getFullYear();
      });
      timeYear.every = (k2) => {
        return !isFinite(k2 = Math.floor(k2)) || !(k2 > 0) ? null : timeInterval((date2) => {
          date2.setFullYear(Math.floor(date2.getFullYear() / k2) * k2);
          date2.setMonth(0, 1);
          date2.setHours(0, 0, 0, 0);
        }, (date2, step3) => {
          date2.setFullYear(date2.getFullYear() + step3 * k2);
        });
      };
      timeYears = timeYear.range;
      utcYear = timeInterval((date2) => {
        date2.setUTCMonth(0, 1);
        date2.setUTCHours(0, 0, 0, 0);
      }, (date2, step3) => {
        date2.setUTCFullYear(date2.getUTCFullYear() + step3);
      }, (start3, end2) => {
        return end2.getUTCFullYear() - start3.getUTCFullYear();
      }, (date2) => {
        return date2.getUTCFullYear();
      });
      utcYear.every = (k2) => {
        return !isFinite(k2 = Math.floor(k2)) || !(k2 > 0) ? null : timeInterval((date2) => {
          date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / k2) * k2);
          date2.setUTCMonth(0, 1);
          date2.setUTCHours(0, 0, 0, 0);
        }, (date2, step3) => {
          date2.setUTCFullYear(date2.getUTCFullYear() + step3 * k2);
        });
      };
      utcYears = utcYear.range;
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/ticks.js
  function ticker(year, month, week, day, hour, minute) {
    const tickIntervals = [
      [second, 1, durationSecond],
      [second, 5, 5 * durationSecond],
      [second, 15, 15 * durationSecond],
      [second, 30, 30 * durationSecond],
      [minute, 1, durationMinute],
      [minute, 5, 5 * durationMinute],
      [minute, 15, 15 * durationMinute],
      [minute, 30, 30 * durationMinute],
      [hour, 1, durationHour],
      [hour, 3, 3 * durationHour],
      [hour, 6, 6 * durationHour],
      [hour, 12, 12 * durationHour],
      [day, 1, durationDay],
      [day, 2, 2 * durationDay],
      [week, 1, durationWeek],
      [month, 1, durationMonth],
      [month, 3, 3 * durationMonth],
      [year, 1, durationYear]
    ];
    function ticks2(start3, stop5, count2) {
      const reverse2 = stop5 < start3;
      if (reverse2) [start3, stop5] = [stop5, start3];
      const interval2 = count2 && typeof count2.range === "function" ? count2 : tickInterval2(start3, stop5, count2);
      const ticks3 = interval2 ? interval2.range(start3, +stop5 + 1) : [];
      return reverse2 ? ticks3.reverse() : ticks3;
    }
    __name(ticks2, "ticks");
    function tickInterval2(start3, stop5, count2) {
      const target = Math.abs(stop5 - start3) / count2;
      const i2 = bisector(([, , step4]) => step4).right(tickIntervals, target);
      if (i2 === tickIntervals.length) return year.every(tickStep(start3 / durationYear, stop5 / durationYear, count2));
      if (i2 === 0) return millisecond.every(Math.max(tickStep(start3, stop5, count2), 1));
      const [t4, step3] = tickIntervals[target / tickIntervals[i2 - 1][2] < tickIntervals[i2][2] / target ? i2 - 1 : i2];
      return t4.every(step3);
    }
    __name(tickInterval2, "tickInterval");
    return [ticks2, tickInterval2];
  }
  var utcTicks, utcTickInterval, timeTicks, timeTickInterval;
  var init_ticks2 = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/ticks.js"() {
      "use strict";
      init_src2();
      init_duration2();
      init_millisecond();
      init_second();
      init_minute();
      init_hour();
      init_day();
      init_week();
      init_month();
      init_year();
      __name(ticker, "ticker");
      [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);
      [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);
    }
  });

  // ../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/index.js
  var init_src26 = __esm({
    "../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/index.js"() {
      "use strict";
      init_millisecond();
      init_second();
      init_minute();
      init_hour();
      init_day();
      init_week();
      init_month();
      init_year();
      init_ticks2();
    }
  });

  // ../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/locale.js
  function localDate(d3) {
    if (0 <= d3.y && d3.y < 100) {
      var date2 = new Date(-1, d3.m, d3.d, d3.H, d3.M, d3.S, d3.L);
      date2.setFullYear(d3.y);
      return date2;
    }
    return new Date(d3.y, d3.m, d3.d, d3.H, d3.M, d3.S, d3.L);
  }
  function utcDate(d3) {
    if (0 <= d3.y && d3.y < 100) {
      var date2 = new Date(Date.UTC(-1, d3.m, d3.d, d3.H, d3.M, d3.S, d3.L));
      date2.setUTCFullYear(d3.y);
      return date2;
    }
    return new Date(Date.UTC(d3.y, d3.m, d3.d, d3.H, d3.M, d3.S, d3.L));
  }
  function newDate(y6, m3, d3) {
    return { y: y6, m: m3, d: d3, H: 0, M: 0, S: 0, L: 0 };
  }
  function formatLocale(locale3) {
    var locale_dateTime = locale3.dateTime, locale_date = locale3.date, locale_time = locale3.time, locale_periods = locale3.periods, locale_weekdays = locale3.days, locale_shortWeekdays = locale3.shortDays, locale_months = locale3.months, locale_shortMonths = locale3.shortMonths;
    var periodRe = formatRe(locale_periods), periodLookup = formatLookup(locale_periods), weekdayRe = formatRe(locale_weekdays), weekdayLookup = formatLookup(locale_weekdays), shortWeekdayRe = formatRe(locale_shortWeekdays), shortWeekdayLookup = formatLookup(locale_shortWeekdays), monthRe = formatRe(locale_months), monthLookup = formatLookup(locale_months), shortMonthRe = formatRe(locale_shortMonths), shortMonthLookup = formatLookup(locale_shortMonths);
    var formats = {
      "a": formatShortWeekday,
      "A": formatWeekday,
      "b": formatShortMonth,
      "B": formatMonth,
      "c": null,
      "d": formatDayOfMonth,
      "e": formatDayOfMonth,
      "f": formatMicroseconds,
      "g": formatYearISO,
      "G": formatFullYearISO,
      "H": formatHour24,
      "I": formatHour12,
      "j": formatDayOfYear,
      "L": formatMilliseconds,
      "m": formatMonthNumber,
      "M": formatMinutes,
      "p": formatPeriod,
      "q": formatQuarter,
      "Q": formatUnixTimestamp,
      "s": formatUnixTimestampSeconds,
      "S": formatSeconds,
      "u": formatWeekdayNumberMonday,
      "U": formatWeekNumberSunday,
      "V": formatWeekNumberISO,
      "w": formatWeekdayNumberSunday,
      "W": formatWeekNumberMonday,
      "x": null,
      "X": null,
      "y": formatYear,
      "Y": formatFullYear,
      "Z": formatZone,
      "%": formatLiteralPercent
    };
    var utcFormats = {
      "a": formatUTCShortWeekday,
      "A": formatUTCWeekday,
      "b": formatUTCShortMonth,
      "B": formatUTCMonth,
      "c": null,
      "d": formatUTCDayOfMonth,
      "e": formatUTCDayOfMonth,
      "f": formatUTCMicroseconds,
      "g": formatUTCYearISO,
      "G": formatUTCFullYearISO,
      "H": formatUTCHour24,
      "I": formatUTCHour12,
      "j": formatUTCDayOfYear,
      "L": formatUTCMilliseconds,
      "m": formatUTCMonthNumber,
      "M": formatUTCMinutes,
      "p": formatUTCPeriod,
      "q": formatUTCQuarter,
      "Q": formatUnixTimestamp,
      "s": formatUnixTimestampSeconds,
      "S": formatUTCSeconds,
      "u": formatUTCWeekdayNumberMonday,
      "U": formatUTCWeekNumberSunday,
      "V": formatUTCWeekNumberISO,
      "w": formatUTCWeekdayNumberSunday,
      "W": formatUTCWeekNumberMonday,
      "x": null,
      "X": null,
      "y": formatUTCYear,
      "Y": formatUTCFullYear,
      "Z": formatUTCZone,
      "%": formatLiteralPercent
    };
    var parses = {
      "a": parseShortWeekday,
      "A": parseWeekday,
      "b": parseShortMonth,
      "B": parseMonth,
      "c": parseLocaleDateTime,
      "d": parseDayOfMonth,
      "e": parseDayOfMonth,
      "f": parseMicroseconds,
      "g": parseYear,
      "G": parseFullYear,
      "H": parseHour24,
      "I": parseHour24,
      "j": parseDayOfYear,
      "L": parseMilliseconds,
      "m": parseMonthNumber,
      "M": parseMinutes,
      "p": parsePeriod,
      "q": parseQuarter,
      "Q": parseUnixTimestamp,
      "s": parseUnixTimestampSeconds,
      "S": parseSeconds,
      "u": parseWeekdayNumberMonday,
      "U": parseWeekNumberSunday,
      "V": parseWeekNumberISO,
      "w": parseWeekdayNumberSunday,
      "W": parseWeekNumberMonday,
      "x": parseLocaleDate,
      "X": parseLocaleTime,
      "y": parseYear,
      "Y": parseFullYear,
      "Z": parseZone,
      "%": parseLiteralPercent
    };
    formats.x = newFormat(locale_date, formats);
    formats.X = newFormat(locale_time, formats);
    formats.c = newFormat(locale_dateTime, formats);
    utcFormats.x = newFormat(locale_date, utcFormats);
    utcFormats.X = newFormat(locale_time, utcFormats);
    utcFormats.c = newFormat(locale_dateTime, utcFormats);
    function newFormat(specifier, formats2) {
      return function(date2) {
        var string3 = [], i2 = -1, j3 = 0, n2 = specifier.length, c3, pad3, format3;
        if (!(date2 instanceof Date)) date2 = /* @__PURE__ */ new Date(+date2);
        while (++i2 < n2) {
          if (specifier.charCodeAt(i2) === 37) {
            string3.push(specifier.slice(j3, i2));
            if ((pad3 = pads[c3 = specifier.charAt(++i2)]) != null) c3 = specifier.charAt(++i2);
            else pad3 = c3 === "e" ? " " : "0";
            if (format3 = formats2[c3]) c3 = format3(date2, pad3);
            string3.push(c3);
            j3 = i2 + 1;
          }
        }
        string3.push(specifier.slice(j3, i2));
        return string3.join("");
      };
    }
    __name(newFormat, "newFormat");
    function newParse(specifier, Z2) {
      return function(string3) {
        var d3 = newDate(1900, void 0, 1), i2 = parseSpecifier(d3, specifier, string3 += "", 0), week, day;
        if (i2 != string3.length) return null;
        if ("Q" in d3) return new Date(d3.Q);
        if ("s" in d3) return new Date(d3.s * 1e3 + ("L" in d3 ? d3.L : 0));
        if (Z2 && !("Z" in d3)) d3.Z = 0;
        if ("p" in d3) d3.H = d3.H % 12 + d3.p * 12;
        if (d3.m === void 0) d3.m = "q" in d3 ? d3.q : 0;
        if ("V" in d3) {
          if (d3.V < 1 || d3.V > 53) return null;
          if (!("w" in d3)) d3.w = 1;
          if ("Z" in d3) {
            week = utcDate(newDate(d3.y, 0, 1)), day = week.getUTCDay();
            week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);
            week = utcDay.offset(week, (d3.V - 1) * 7);
            d3.y = week.getUTCFullYear();
            d3.m = week.getUTCMonth();
            d3.d = week.getUTCDate() + (d3.w + 6) % 7;
          } else {
            week = localDate(newDate(d3.y, 0, 1)), day = week.getDay();
            week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);
            week = timeDay.offset(week, (d3.V - 1) * 7);
            d3.y = week.getFullYear();
            d3.m = week.getMonth();
            d3.d = week.getDate() + (d3.w + 6) % 7;
          }
        } else if ("W" in d3 || "U" in d3) {
          if (!("w" in d3)) d3.w = "u" in d3 ? d3.u % 7 : "W" in d3 ? 1 : 0;
          day = "Z" in d3 ? utcDate(newDate(d3.y, 0, 1)).getUTCDay() : localDate(newDate(d3.y, 0, 1)).getDay();
          d3.m = 0;
          d3.d = "W" in d3 ? (d3.w + 6) % 7 + d3.W * 7 - (day + 5) % 7 : d3.w + d3.U * 7 - (day + 6) % 7;
        }
        if ("Z" in d3) {
          d3.H += d3.Z / 100 | 0;
          d3.M += d3.Z % 100;
          return utcDate(d3);
        }
        return localDate(d3);
      };
    }
    __name(newParse, "newParse");
    function parseSpecifier(d3, specifier, string3, j3) {
      var i2 = 0, n2 = specifier.length, m3 = string3.length, c3, parse7;
      while (i2 < n2) {
        if (j3 >= m3) return -1;
        c3 = specifier.charCodeAt(i2++);
        if (c3 === 37) {
          c3 = specifier.charAt(i2++);
          parse7 = parses[c3 in pads ? specifier.charAt(i2++) : c3];
          if (!parse7 || (j3 = parse7(d3, string3, j3)) < 0) return -1;
        } else if (c3 != string3.charCodeAt(j3++)) {
          return -1;
        }
      }
      return j3;
    }
    __name(parseSpecifier, "parseSpecifier");
    function parsePeriod(d3, string3, i2) {
      var n2 = periodRe.exec(string3.slice(i2));
      return n2 ? (d3.p = periodLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1;
    }
    __name(parsePeriod, "parsePeriod");
    function parseShortWeekday(d3, string3, i2) {
      var n2 = shortWeekdayRe.exec(string3.slice(i2));
      return n2 ? (d3.w = shortWeekdayLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1;
    }
    __name(parseShortWeekday, "parseShortWeekday");
    function parseWeekday(d3, string3, i2) {
      var n2 = weekdayRe.exec(string3.slice(i2));
      return n2 ? (d3.w = weekdayLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1;
    }
    __name(parseWeekday, "parseWeekday");
    function parseShortMonth(d3, string3, i2) {
      var n2 = shortMonthRe.exec(string3.slice(i2));
      return n2 ? (d3.m = shortMonthLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1;
    }
    __name(parseShortMonth, "parseShortMonth");
    function parseMonth(d3, string3, i2) {
      var n2 = monthRe.exec(string3.slice(i2));
      return n2 ? (d3.m = monthLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1;
    }
    __name(parseMonth, "parseMonth");
    function parseLocaleDateTime(d3, string3, i2) {
      return parseSpecifier(d3, locale_dateTime, string3, i2);
    }
    __name(parseLocaleDateTime, "parseLocaleDateTime");
    function parseLocaleDate(d3, string3, i2) {
      return parseSpecifier(d3, locale_date, string3, i2);
    }
    __name(parseLocaleDate, "parseLocaleDate");
    function parseLocaleTime(d3, string3, i2) {
      return parseSpecifier(d3, locale_time, string3, i2);
    }
    __name(parseLocaleTime, "parseLocaleTime");
    function formatShortWeekday(d3) {
      return locale_shortWeekdays[d3.getDay()];
    }
    __name(formatShortWeekday, "formatShortWeekday");
    function formatWeekday(d3) {
      return locale_weekdays[d3.getDay()];
    }
    __name(formatWeekday, "formatWeekday");
    function formatShortMonth(d3) {
      return locale_shortMonths[d3.getMonth()];
    }
    __name(formatShortMonth, "formatShortMonth");
    function formatMonth(d3) {
      return locale_months[d3.getMonth()];
    }
    __name(formatMonth, "formatMonth");
    function formatPeriod(d3) {
      return locale_periods[+(d3.getHours() >= 12)];
    }
    __name(formatPeriod, "formatPeriod");
    function formatQuarter(d3) {
      return 1 + ~~(d3.getMonth() / 3);
    }
    __name(formatQuarter, "formatQuarter");
    function formatUTCShortWeekday(d3) {
      return locale_shortWeekdays[d3.getUTCDay()];
    }
    __name(formatUTCShortWeekday, "formatUTCShortWeekday");
    function formatUTCWeekday(d3) {
      return locale_weekdays[d3.getUTCDay()];
    }
    __name(formatUTCWeekday, "formatUTCWeekday");
    function formatUTCShortMonth(d3) {
      return locale_shortMonths[d3.getUTCMonth()];
    }
    __name(formatUTCShortMonth, "formatUTCShortMonth");
    function formatUTCMonth(d3) {
      return locale_months[d3.getUTCMonth()];
    }
    __name(formatUTCMonth, "formatUTCMonth");
    function formatUTCPeriod(d3) {
      return locale_periods[+(d3.getUTCHours() >= 12)];
    }
    __name(formatUTCPeriod, "formatUTCPeriod");
    function formatUTCQuarter(d3) {
      return 1 + ~~(d3.getUTCMonth() / 3);
    }
    __name(formatUTCQuarter, "formatUTCQuarter");
    return {
      format: /* @__PURE__ */ __name(function(specifier) {
        var f2 = newFormat(specifier += "", formats);
        f2.toString = function() {
          return specifier;
        };
        return f2;
      }, "format"),
      parse: /* @__PURE__ */ __name(function(specifier) {
        var p3 = newParse(specifier += "", false);
        p3.toString = function() {
          return specifier;
        };
        return p3;
      }, "parse"),
      utcFormat: /* @__PURE__ */ __name(function(specifier) {
        var f2 = newFormat(specifier += "", utcFormats);
        f2.toString = function() {
          return specifier;
        };
        return f2;
      }, "utcFormat"),
      utcParse: /* @__PURE__ */ __name(function(specifier) {
        var p3 = newParse(specifier += "", true);
        p3.toString = function() {
          return specifier;
        };
        return p3;
      }, "utcParse")
    };
  }
  function pad2(value2, fill, width3) {
    var sign2 = value2 < 0 ? "-" : "", string3 = (sign2 ? -value2 : value2) + "", length2 = string3.length;
    return sign2 + (length2 < width3 ? new Array(width3 - length2 + 1).join(fill) + string3 : string3);
  }
  function requote(s2) {
    return s2.replace(requoteRe, "\\$&");
  }
  function formatRe(names) {
    return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
  }
  function formatLookup(names) {
    return new Map(names.map((name, i2) => [name.toLowerCase(), i2]));
  }
  function parseWeekdayNumberSunday(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 1));
    return n2 ? (d3.w = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseWeekdayNumberMonday(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 1));
    return n2 ? (d3.u = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseWeekNumberSunday(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.U = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseWeekNumberISO(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.V = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseWeekNumberMonday(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.W = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseFullYear(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 4));
    return n2 ? (d3.y = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseYear(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.y = +n2[0] + (+n2[0] > 68 ? 1900 : 2e3), i2 + n2[0].length) : -1;
  }
  function parseZone(d3, string3, i2) {
    var n2 = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string3.slice(i2, i2 + 6));
    return n2 ? (d3.Z = n2[1] ? 0 : -(n2[2] + (n2[3] || "00")), i2 + n2[0].length) : -1;
  }
  function parseQuarter(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 1));
    return n2 ? (d3.q = n2[0] * 3 - 3, i2 + n2[0].length) : -1;
  }
  function parseMonthNumber(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.m = n2[0] - 1, i2 + n2[0].length) : -1;
  }
  function parseDayOfMonth(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.d = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseDayOfYear(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 3));
    return n2 ? (d3.m = 0, d3.d = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseHour24(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.H = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseMinutes(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.M = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseSeconds(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 2));
    return n2 ? (d3.S = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseMilliseconds(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 3));
    return n2 ? (d3.L = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseMicroseconds(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2, i2 + 6));
    return n2 ? (d3.L = Math.floor(n2[0] / 1e3), i2 + n2[0].length) : -1;
  }
  function parseLiteralPercent(d3, string3, i2) {
    var n2 = percentRe.exec(string3.slice(i2, i2 + 1));
    return n2 ? i2 + n2[0].length : -1;
  }
  function parseUnixTimestamp(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2));
    return n2 ? (d3.Q = +n2[0], i2 + n2[0].length) : -1;
  }
  function parseUnixTimestampSeconds(d3, string3, i2) {
    var n2 = numberRe.exec(string3.slice(i2));
    return n2 ? (d3.s = +n2[0], i2 + n2[0].length) : -1;
  }
  function formatDayOfMonth(d3, p3) {
    return pad2(d3.getDate(), p3, 2);
  }
  function formatHour24(d3, p3) {
    return pad2(d3.getHours(), p3, 2);
  }
  function formatHour12(d3, p3) {
    return pad2(d3.getHours() % 12 || 12, p3, 2);
  }
  function formatDayOfYear(d3, p3) {
    return pad2(1 + timeDay.count(timeYear(d3), d3), p3, 3);
  }
  function formatMilliseconds(d3, p3) {
    return pad2(d3.getMilliseconds(), p3, 3);
  }
  function formatMicroseconds(d3, p3) {
    return formatMilliseconds(d3, p3) + "000";
  }
  function formatMonthNumber(d3, p3) {
    return pad2(d3.getMonth() + 1, p3, 2);
  }
  function formatMinutes(d3, p3) {
    return pad2(d3.getMinutes(), p3, 2);
  }
  function formatSeconds(d3, p3) {
    return pad2(d3.getSeconds(), p3, 2);
  }
  function formatWeekdayNumberMonday(d3) {
    var day = d3.getDay();
    return day === 0 ? 7 : day;
  }
  function formatWeekNumberSunday(d3, p3) {
    return pad2(timeSunday.count(timeYear(d3) - 1, d3), p3, 2);
  }
  function dISO(d3) {
    var day = d3.getDay();
    return day >= 4 || day === 0 ? timeThursday(d3) : timeThursday.ceil(d3);
  }
  function formatWeekNumberISO(d3, p3) {
    d3 = dISO(d3);
    return pad2(timeThursday.count(timeYear(d3), d3) + (timeYear(d3).getDay() === 4), p3, 2);
  }
  function formatWeekdayNumberSunday(d3) {
    return d3.getDay();
  }
  function formatWeekNumberMonday(d3, p3) {
    return pad2(timeMonday.count(timeYear(d3) - 1, d3), p3, 2);
  }
  function formatYear(d3, p3) {
    return pad2(d3.getFullYear() % 100, p3, 2);
  }
  function formatYearISO(d3, p3) {
    d3 = dISO(d3);
    return pad2(d3.getFullYear() % 100, p3, 2);
  }
  function formatFullYear(d3, p3) {
    return pad2(d3.getFullYear() % 1e4, p3, 4);
  }
  function formatFullYearISO(d3, p3) {
    var day = d3.getDay();
    d3 = day >= 4 || day === 0 ? timeThursday(d3) : timeThursday.ceil(d3);
    return pad2(d3.getFullYear() % 1e4, p3, 4);
  }
  function formatZone(d3) {
    var z3 = d3.getTimezoneOffset();
    return (z3 > 0 ? "-" : (z3 *= -1, "+")) + pad2(z3 / 60 | 0, "0", 2) + pad2(z3 % 60, "0", 2);
  }
  function formatUTCDayOfMonth(d3, p3) {
    return pad2(d3.getUTCDate(), p3, 2);
  }
  function formatUTCHour24(d3, p3) {
    return pad2(d3.getUTCHours(), p3, 2);
  }
  function formatUTCHour12(d3, p3) {
    return pad2(d3.getUTCHours() % 12 || 12, p3, 2);
  }
  function formatUTCDayOfYear(d3, p3) {
    return pad2(1 + utcDay.count(utcYear(d3), d3), p3, 3);
  }
  function formatUTCMilliseconds(d3, p3) {
    return pad2(d3.getUTCMilliseconds(), p3, 3);
  }
  function formatUTCMicroseconds(d3, p3) {
    return formatUTCMilliseconds(d3, p3) + "000";
  }
  function formatUTCMonthNumber(d3, p3) {
    return pad2(d3.getUTCMonth() + 1, p3, 2);
  }
  function formatUTCMinutes(d3, p3) {
    return pad2(d3.getUTCMinutes(), p3, 2);
  }
  function formatUTCSeconds(d3, p3) {
    return pad2(d3.getUTCSeconds(), p3, 2);
  }
  function formatUTCWeekdayNumberMonday(d3) {
    var dow = d3.getUTCDay();
    return dow === 0 ? 7 : dow;
  }
  function formatUTCWeekNumberSunday(d3, p3) {
    return pad2(utcSunday.count(utcYear(d3) - 1, d3), p3, 2);
  }
  function UTCdISO(d3) {
    var day = d3.getUTCDay();
    return day >= 4 || day === 0 ? utcThursday(d3) : utcThursday.ceil(d3);
  }
  function formatUTCWeekNumberISO(d3, p3) {
    d3 = UTCdISO(d3);
    return pad2(utcThursday.count(utcYear(d3), d3) + (utcYear(d3).getUTCDay() === 4), p3, 2);
  }
  function formatUTCWeekdayNumberSunday(d3) {
    return d3.getUTCDay();
  }
  function formatUTCWeekNumberMonday(d3, p3) {
    return pad2(utcMonday.count(utcYear(d3) - 1, d3), p3, 2);
  }
  function formatUTCYear(d3, p3) {
    return pad2(d3.getUTCFullYear() % 100, p3, 2);
  }
  function formatUTCYearISO(d3, p3) {
    d3 = UTCdISO(d3);
    return pad2(d3.getUTCFullYear() % 100, p3, 2);
  }
  function formatUTCFullYear(d3, p3) {
    return pad2(d3.getUTCFullYear() % 1e4, p3, 4);
  }
  function formatUTCFullYearISO(d3, p3) {
    var day = d3.getUTCDay();
    d3 = day >= 4 || day === 0 ? utcThursday(d3) : utcThursday.ceil(d3);
    return pad2(d3.getUTCFullYear() % 1e4, p3, 4);
  }
  function formatUTCZone() {
    return "+0000";
  }
  function formatLiteralPercent() {
    return "%";
  }
  function formatUnixTimestamp(d3) {
    return +d3;
  }
  function formatUnixTimestampSeconds(d3) {
    return Math.floor(+d3 / 1e3);
  }
  var pads, numberRe, percentRe, requoteRe;
  var init_locale2 = __esm({
    "../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/locale.js"() {
      "use strict";
      init_src26();
      __name(localDate, "localDate");
      __name(utcDate, "utcDate");
      __name(newDate, "newDate");
      __name(formatLocale, "formatLocale");
      pads = { "-": "", "_": " ", "0": "0" };
      numberRe = /^\s*\d+/;
      percentRe = /^%/;
      requoteRe = /[\\^$*+?|[\]().{}]/g;
      __name(pad2, "pad");
      __name(requote, "requote");
      __name(formatRe, "formatRe");
      __name(formatLookup, "formatLookup");
      __name(parseWeekdayNumberSunday, "parseWeekdayNumberSunday");
      __name(parseWeekdayNumberMonday, "parseWeekdayNumberMonday");
      __name(parseWeekNumberSunday, "parseWeekNumberSunday");
      __name(parseWeekNumberISO, "parseWeekNumberISO");
      __name(parseWeekNumberMonday, "parseWeekNumberMonday");
      __name(parseFullYear, "parseFullYear");
      __name(parseYear, "parseYear");
      __name(parseZone, "parseZone");
      __name(parseQuarter, "parseQuarter");
      __name(parseMonthNumber, "parseMonthNumber");
      __name(parseDayOfMonth, "parseDayOfMonth");
      __name(parseDayOfYear, "parseDayOfYear");
      __name(parseHour24, "parseHour24");
      __name(parseMinutes, "parseMinutes");
      __name(parseSeconds, "parseSeconds");
      __name(parseMilliseconds, "parseMilliseconds");
      __name(parseMicroseconds, "parseMicroseconds");
      __name(parseLiteralPercent, "parseLiteralPercent");
      __name(parseUnixTimestamp, "parseUnixTimestamp");
      __name(parseUnixTimestampSeconds, "parseUnixTimestampSeconds");
      __name(formatDayOfMonth, "formatDayOfMonth");
      __name(formatHour24, "formatHour24");
      __name(formatHour12, "formatHour12");
      __name(formatDayOfYear, "formatDayOfYear");
      __name(formatMilliseconds, "formatMilliseconds");
      __name(formatMicroseconds, "formatMicroseconds");
      __name(formatMonthNumber, "formatMonthNumber");
      __name(formatMinutes, "formatMinutes");
      __name(formatSeconds, "formatSeconds");
      __name(formatWeekdayNumberMonday, "formatWeekdayNumberMonday");
      __name(formatWeekNumberSunday, "formatWeekNumberSunday");
      __name(dISO, "dISO");
      __name(formatWeekNumberISO, "formatWeekNumberISO");
      __name(formatWeekdayNumberSunday, "formatWeekdayNumberSunday");
      __name(formatWeekNumberMonday, "formatWeekNumberMonday");
      __name(formatYear, "formatYear");
      __name(formatYearISO, "formatYearISO");
      __name(formatFullYear, "formatFullYear");
      __name(formatFullYearISO, "formatFullYearISO");
      __name(formatZone, "formatZone");
      __name(formatUTCDayOfMonth, "formatUTCDayOfMonth");
      __name(formatUTCHour24, "formatUTCHour24");
      __name(formatUTCHour12, "formatUTCHour12");
      __name(formatUTCDayOfYear, "formatUTCDayOfYear");
      __name(formatUTCMilliseconds, "formatUTCMilliseconds");
      __name(formatUTCMicroseconds, "formatUTCMicroseconds");
      __name(formatUTCMonthNumber, "formatUTCMonthNumber");
      __name(formatUTCMinutes, "formatUTCMinutes");
      __name(formatUTCSeconds, "formatUTCSeconds");
      __name(formatUTCWeekdayNumberMonday, "formatUTCWeekdayNumberMonday");
      __name(formatUTCWeekNumberSunday, "formatUTCWeekNumberSunday");
      __name(UTCdISO, "UTCdISO");
      __name(formatUTCWeekNumberISO, "formatUTCWeekNumberISO");
      __name(formatUTCWeekdayNumberSunday, "formatUTCWeekdayNumberSunday");
      __name(formatUTCWeekNumberMonday, "formatUTCWeekNumberMonday");
      __name(formatUTCYear, "formatUTCYear");
      __name(formatUTCYearISO, "formatUTCYearISO");
      __name(formatUTCFullYear, "formatUTCFullYear");
      __name(formatUTCFullYearISO, "formatUTCFullYearISO");
      __name(formatUTCZone, "formatUTCZone");
      __name(formatLiteralPercent, "formatLiteralPercent");
      __name(formatUnixTimestamp, "formatUnixTimestamp");
      __name(formatUnixTimestampSeconds, "formatUnixTimestampSeconds");
    }
  });

  // ../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/defaultLocale.js
  function defaultLocale2(definition) {
    locale2 = formatLocale(definition);
    timeFormat = locale2.format;
    timeParse = locale2.parse;
    utcFormat = locale2.utcFormat;
    utcParse = locale2.utcParse;
    return locale2;
  }
  var locale2, timeFormat, timeParse, utcFormat, utcParse;
  var init_defaultLocale2 = __esm({
    "../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/defaultLocale.js"() {
      "use strict";
      init_locale2();
      defaultLocale2({
        dateTime: "%x, %X",
        date: "%-m/%-d/%Y",
        time: "%-I:%M:%S %p",
        periods: ["AM", "PM"],
        days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
        shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
      });
      __name(defaultLocale2, "defaultLocale");
    }
  });

  // ../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/index.js
  var init_src27 = __esm({
    "../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/index.js"() {
      "use strict";
      init_defaultLocale2();
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/time.js
  function date(t4) {
    return new Date(t4);
  }
  function number4(t4) {
    return t4 instanceof Date ? +t4 : +/* @__PURE__ */ new Date(+t4);
  }
  function calendar(ticks2, tickInterval2, year, month, week, day, hour, minute, second2, format3) {
    var scale3 = continuous(), invert2 = scale3.invert, domain = scale3.domain;
    var formatMillisecond = format3(".%L"), formatSecond = format3(":%S"), formatMinute = format3("%I:%M"), formatHour = format3("%I %p"), formatDay = format3("%a %d"), formatWeek = format3("%b %d"), formatMonth = format3("%B"), formatYear2 = format3("%Y");
    function tickFormat2(date2) {
      return (second2(date2) < date2 ? formatMillisecond : minute(date2) < date2 ? formatSecond : hour(date2) < date2 ? formatMinute : day(date2) < date2 ? formatHour : month(date2) < date2 ? week(date2) < date2 ? formatDay : formatWeek : year(date2) < date2 ? formatMonth : formatYear2)(date2);
    }
    __name(tickFormat2, "tickFormat");
    scale3.invert = function(y6) {
      return new Date(invert2(y6));
    };
    scale3.domain = function(_3) {
      return arguments.length ? domain(Array.from(_3, number4)) : domain().map(date);
    };
    scale3.ticks = function(interval2) {
      var d3 = domain();
      return ticks2(d3[0], d3[d3.length - 1], interval2 == null ? 10 : interval2);
    };
    scale3.tickFormat = function(count2, specifier) {
      return specifier == null ? tickFormat2 : format3(specifier);
    };
    scale3.nice = function(interval2) {
      var d3 = domain();
      if (!interval2 || typeof interval2.range !== "function") interval2 = tickInterval2(d3[0], d3[d3.length - 1], interval2 == null ? 10 : interval2);
      return interval2 ? domain(nice(d3, interval2)) : scale3;
    };
    scale3.copy = function() {
      return copy(scale3, calendar(ticks2, tickInterval2, year, month, week, day, hour, minute, second2, format3));
    };
    return scale3;
  }
  function time() {
    return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute, second, timeFormat).domain([new Date(2e3, 0, 1), new Date(2e3, 0, 2)]), arguments);
  }
  var init_time = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/time.js"() {
      "use strict";
      init_src26();
      init_src27();
      init_continuous();
      init_init();
      init_nice();
      __name(date, "date");
      __name(number4, "number");
      __name(calendar, "calendar");
      __name(time, "time");
    }
  });

  // ../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index.js
  var init_src28 = __esm({
    "../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index.js"() {
      "use strict";
      init_band();
      init_linear();
      init_ordinal();
      init_time();
    }
  });

  // ../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/colors.js
  function colors_default(specifier) {
    var n2 = specifier.length / 6 | 0, colors2 = new Array(n2), i2 = 0;
    while (i2 < n2) colors2[i2] = "#" + specifier.slice(i2 * 6, ++i2 * 6);
    return colors2;
  }
  var init_colors = __esm({
    "../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/colors.js"() {
      "use strict";
      __name(colors_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/categorical/Tableau10.js
  var Tableau10_default;
  var init_Tableau10 = __esm({
    "../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/categorical/Tableau10.js"() {
      "use strict";
      init_colors();
      Tableau10_default = colors_default("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");
    }
  });

  // ../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/index.js
  var init_src29 = __esm({
    "../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/index.js"() {
      "use strict";
      init_Tableau10();
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js
  function constant_default5(x5) {
    return /* @__PURE__ */ __name(function constant4() {
      return x5;
    }, "constant");
  }
  var init_constant6 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js"() {
      "use strict";
      __name(constant_default5, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/math.js
  function acos(x5) {
    return x5 > 1 ? 0 : x5 < -1 ? pi2 : Math.acos(x5);
  }
  function asin(x5) {
    return x5 >= 1 ? halfPi : x5 <= -1 ? -halfPi : Math.asin(x5);
  }
  var abs2, atan2, cos, max3, min3, sin, sqrt, epsilon3, pi2, halfPi, tau2;
  var init_math2 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/math.js"() {
      "use strict";
      abs2 = Math.abs;
      atan2 = Math.atan2;
      cos = Math.cos;
      max3 = Math.max;
      min3 = Math.min;
      sin = Math.sin;
      sqrt = Math.sqrt;
      epsilon3 = 1e-12;
      pi2 = Math.PI;
      halfPi = pi2 / 2;
      tau2 = 2 * pi2;
      __name(acos, "acos");
      __name(asin, "asin");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js
  function withPath(shape) {
    let digits = 3;
    shape.digits = function(_3) {
      if (!arguments.length) return digits;
      if (_3 == null) {
        digits = null;
      } else {
        const d3 = Math.floor(_3);
        if (!(d3 >= 0)) throw new RangeError(`invalid digits: ${_3}`);
        digits = d3;
      }
      return shape;
    };
    return () => new Path(digits);
  }
  var init_path3 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js"() {
      "use strict";
      init_src13();
      __name(withPath, "withPath");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/arc.js
  function arcInnerRadius(d3) {
    return d3.innerRadius;
  }
  function arcOuterRadius(d3) {
    return d3.outerRadius;
  }
  function arcStartAngle(d3) {
    return d3.startAngle;
  }
  function arcEndAngle(d3) {
    return d3.endAngle;
  }
  function arcPadAngle(d3) {
    return d3 && d3.padAngle;
  }
  function intersect(x0, y0, x1, y1, x22, y22, x32, y32) {
    var x10 = x1 - x0, y10 = y1 - y0, x322 = x32 - x22, y322 = y32 - y22, t4 = y322 * x10 - x322 * y10;
    if (t4 * t4 < epsilon3) return;
    t4 = (x322 * (y0 - y22) - y322 * (x0 - x22)) / t4;
    return [x0 + t4 * x10, y0 + t4 * y10];
  }
  function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
    var x01 = x0 - x1, y01 = y0 - y1, lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x11 = x0 + ox, y11 = y0 + oy, x10 = x1 + ox, y10 = y1 + oy, x00 = (x11 + x10) / 2, y00 = (y11 + y10) / 2, dx = x10 - x11, dy = y10 - y11, d22 = dx * dx + dy * dy, r2 = r1 - rc, D4 = x11 * y10 - x10 * y11, d3 = (dy < 0 ? -1 : 1) * sqrt(max3(0, r2 * r2 * d22 - D4 * D4)), cx0 = (D4 * dy - dx * d3) / d22, cy0 = (-D4 * dx - dy * d3) / d22, cx1 = (D4 * dy + dx * d3) / d22, cy1 = (-D4 * dx + dy * d3) / d22, dx0 = cx0 - x00, dy0 = cy0 - y00, dx1 = cx1 - x00, dy1 = cy1 - y00;
    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
    return {
      cx: cx0,
      cy: cy0,
      x01: -ox,
      y01: -oy,
      x11: cx0 * (r1 / r2 - 1),
      y11: cy0 * (r1 / r2 - 1)
    };
  }
  function arc_default() {
    var innerRadius = arcInnerRadius, outerRadius = arcOuterRadius, cornerRadius = constant_default5(0), padRadius = null, startAngle = arcStartAngle, endAngle = arcEndAngle, padAngle = arcPadAngle, context = null, path4 = withPath(arc);
    function arc() {
      var buffer, r2, r0 = +innerRadius.apply(this, arguments), r1 = +outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) - halfPi, a1 = endAngle.apply(this, arguments) - halfPi, da = abs2(a1 - a0), cw = a1 > a0;
      if (!context) context = buffer = path4();
      if (r1 < r0) r2 = r1, r1 = r0, r0 = r2;
      if (!(r1 > epsilon3)) context.moveTo(0, 0);
      else if (da > tau2 - epsilon3) {
        context.moveTo(r1 * cos(a0), r1 * sin(a0));
        context.arc(0, 0, r1, a0, a1, !cw);
        if (r0 > epsilon3) {
          context.moveTo(r0 * cos(a1), r0 * sin(a1));
          context.arc(0, 0, r0, a1, a0, cw);
        }
      } else {
        var a01 = a0, a11 = a1, a00 = a0, a10 = a1, da0 = da, da1 = da, ap = padAngle.apply(this, arguments) / 2, rp = ap > epsilon3 && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)), rc = min3(abs2(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), rc0 = rc, rc1 = rc, t03, t13;
        if (rp > epsilon3) {
          var p0 = asin(rp / r0 * sin(ap)), p1 = asin(rp / r1 * sin(ap));
          if ((da0 -= p0 * 2) > epsilon3) p0 *= cw ? 1 : -1, a00 += p0, a10 -= p0;
          else da0 = 0, a00 = a10 = (a0 + a1) / 2;
          if ((da1 -= p1 * 2) > epsilon3) p1 *= cw ? 1 : -1, a01 += p1, a11 -= p1;
          else da1 = 0, a01 = a11 = (a0 + a1) / 2;
        }
        var x01 = r1 * cos(a01), y01 = r1 * sin(a01), x10 = r0 * cos(a10), y10 = r0 * sin(a10);
        if (rc > epsilon3) {
          var x11 = r1 * cos(a11), y11 = r1 * sin(a11), x00 = r0 * cos(a00), y00 = r0 * sin(a00), oc;
          if (da < pi2) {
            if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {
              var ax = x01 - oc[0], ay = y01 - oc[1], bx = x11 - oc[0], by = y11 - oc[1], kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2), lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
              rc0 = min3(rc, (r0 - lc) / (kc - 1));
              rc1 = min3(rc, (r1 - lc) / (kc + 1));
            } else {
              rc0 = rc1 = 0;
            }
          }
        }
        if (!(da1 > epsilon3)) context.moveTo(x01, y01);
        else if (rc1 > epsilon3) {
          t03 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
          t13 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
          context.moveTo(t03.cx + t03.x01, t03.cy + t03.y01);
          if (rc1 < rc) context.arc(t03.cx, t03.cy, rc1, atan2(t03.y01, t03.x01), atan2(t13.y01, t13.x01), !cw);
          else {
            context.arc(t03.cx, t03.cy, rc1, atan2(t03.y01, t03.x01), atan2(t03.y11, t03.x11), !cw);
            context.arc(0, 0, r1, atan2(t03.cy + t03.y11, t03.cx + t03.x11), atan2(t13.cy + t13.y11, t13.cx + t13.x11), !cw);
            context.arc(t13.cx, t13.cy, rc1, atan2(t13.y11, t13.x11), atan2(t13.y01, t13.x01), !cw);
          }
        } else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
        if (!(r0 > epsilon3) || !(da0 > epsilon3)) context.lineTo(x10, y10);
        else if (rc0 > epsilon3) {
          t03 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
          t13 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
          context.lineTo(t03.cx + t03.x01, t03.cy + t03.y01);
          if (rc0 < rc) context.arc(t03.cx, t03.cy, rc0, atan2(t03.y01, t03.x01), atan2(t13.y01, t13.x01), !cw);
          else {
            context.arc(t03.cx, t03.cy, rc0, atan2(t03.y01, t03.x01), atan2(t03.y11, t03.x11), !cw);
            context.arc(0, 0, r0, atan2(t03.cy + t03.y11, t03.cx + t03.x11), atan2(t13.cy + t13.y11, t13.cx + t13.x11), cw);
            context.arc(t13.cx, t13.cy, rc0, atan2(t13.y11, t13.x11), atan2(t13.y01, t13.x01), !cw);
          }
        } else context.arc(0, 0, r0, a10, a00, cw);
      }
      context.closePath();
      if (buffer) return context = null, buffer + "" || null;
    }
    __name(arc, "arc");
    arc.centroid = function() {
      var r2 = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a2 = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi2 / 2;
      return [cos(a2) * r2, sin(a2) * r2];
    };
    arc.innerRadius = function(_3) {
      return arguments.length ? (innerRadius = typeof _3 === "function" ? _3 : constant_default5(+_3), arc) : innerRadius;
    };
    arc.outerRadius = function(_3) {
      return arguments.length ? (outerRadius = typeof _3 === "function" ? _3 : constant_default5(+_3), arc) : outerRadius;
    };
    arc.cornerRadius = function(_3) {
      return arguments.length ? (cornerRadius = typeof _3 === "function" ? _3 : constant_default5(+_3), arc) : cornerRadius;
    };
    arc.padRadius = function(_3) {
      return arguments.length ? (padRadius = _3 == null ? null : typeof _3 === "function" ? _3 : constant_default5(+_3), arc) : padRadius;
    };
    arc.startAngle = function(_3) {
      return arguments.length ? (startAngle = typeof _3 === "function" ? _3 : constant_default5(+_3), arc) : startAngle;
    };
    arc.endAngle = function(_3) {
      return arguments.length ? (endAngle = typeof _3 === "function" ? _3 : constant_default5(+_3), arc) : endAngle;
    };
    arc.padAngle = function(_3) {
      return arguments.length ? (padAngle = typeof _3 === "function" ? _3 : constant_default5(+_3), arc) : padAngle;
    };
    arc.context = function(_3) {
      return arguments.length ? (context = _3 == null ? null : _3, arc) : context;
    };
    return arc;
  }
  var init_arc = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/arc.js"() {
      "use strict";
      init_constant6();
      init_math2();
      init_path3();
      __name(arcInnerRadius, "arcInnerRadius");
      __name(arcOuterRadius, "arcOuterRadius");
      __name(arcStartAngle, "arcStartAngle");
      __name(arcEndAngle, "arcEndAngle");
      __name(arcPadAngle, "arcPadAngle");
      __name(intersect, "intersect");
      __name(cornerTangents, "cornerTangents");
      __name(arc_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js
  function array_default(x5) {
    return typeof x5 === "object" && "length" in x5 ? x5 : Array.from(x5);
  }
  var slice;
  var init_array3 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js"() {
      "use strict";
      slice = Array.prototype.slice;
      __name(array_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js
  function Linear(context) {
    this._context = context;
  }
  function linear_default(context) {
    return new Linear(context);
  }
  var init_linear2 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js"() {
      "use strict";
      __name(Linear, "Linear");
      Linear.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              this._line ? this._context.lineTo(x5, y6) : this._context.moveTo(x5, y6);
              break;
            case 1:
              this._point = 2;
            // falls through
            default:
              this._context.lineTo(x5, y6);
              break;
          }
        }, "point")
      };
      __name(linear_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js
  function x(p3) {
    return p3[0];
  }
  function y(p3) {
    return p3[1];
  }
  var init_point = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js"() {
      "use strict";
      __name(x, "x");
      __name(y, "y");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js
  function line_default(x5, y6) {
    var defined = constant_default5(true), context = null, curve = linear_default, output2 = null, path4 = withPath(line2);
    x5 = typeof x5 === "function" ? x5 : x5 === void 0 ? x : constant_default5(x5);
    y6 = typeof y6 === "function" ? y6 : y6 === void 0 ? y : constant_default5(y6);
    function line2(data6) {
      var i2, n2 = (data6 = array_default(data6)).length, d3, defined0 = false, buffer;
      if (context == null) output2 = curve(buffer = path4());
      for (i2 = 0; i2 <= n2; ++i2) {
        if (!(i2 < n2 && defined(d3 = data6[i2], i2, data6)) === defined0) {
          if (defined0 = !defined0) output2.lineStart();
          else output2.lineEnd();
        }
        if (defined0) output2.point(+x5(d3, i2, data6), +y6(d3, i2, data6));
      }
      if (buffer) return output2 = null, buffer + "" || null;
    }
    __name(line2, "line");
    line2.x = function(_3) {
      return arguments.length ? (x5 = typeof _3 === "function" ? _3 : constant_default5(+_3), line2) : x5;
    };
    line2.y = function(_3) {
      return arguments.length ? (y6 = typeof _3 === "function" ? _3 : constant_default5(+_3), line2) : y6;
    };
    line2.defined = function(_3) {
      return arguments.length ? (defined = typeof _3 === "function" ? _3 : constant_default5(!!_3), line2) : defined;
    };
    line2.curve = function(_3) {
      return arguments.length ? (curve = _3, context != null && (output2 = curve(context)), line2) : curve;
    };
    line2.context = function(_3) {
      return arguments.length ? (_3 == null ? context = output2 = null : output2 = curve(context = _3), line2) : context;
    };
    return line2;
  }
  var init_line = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js"() {
      "use strict";
      init_array3();
      init_constant6();
      init_linear2();
      init_path3();
      init_point();
      __name(line_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/descending.js
  function descending_default(a2, b3) {
    return b3 < a2 ? -1 : b3 > a2 ? 1 : b3 >= a2 ? 0 : NaN;
  }
  var init_descending2 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/descending.js"() {
      "use strict";
      __name(descending_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/identity.js
  function identity_default3(d3) {
    return d3;
  }
  var init_identity3 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/identity.js"() {
      "use strict";
      __name(identity_default3, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/pie.js
  function pie_default() {
    var value2 = identity_default3, sortValues = descending_default, sort3 = null, startAngle = constant_default5(0), endAngle = constant_default5(tau2), padAngle = constant_default5(0);
    function pie2(data6) {
      var i2, n2 = (data6 = array_default(data6)).length, j3, k2, sum2 = 0, index = new Array(n2), arcs = new Array(n2), a0 = +startAngle.apply(this, arguments), da = Math.min(tau2, Math.max(-tau2, endAngle.apply(this, arguments) - a0)), a1, p3 = Math.min(Math.abs(da) / n2, padAngle.apply(this, arguments)), pa = p3 * (da < 0 ? -1 : 1), v3;
      for (i2 = 0; i2 < n2; ++i2) {
        if ((v3 = arcs[index[i2] = i2] = +value2(data6[i2], i2, data6)) > 0) {
          sum2 += v3;
        }
      }
      if (sortValues != null) index.sort(function(i3, j4) {
        return sortValues(arcs[i3], arcs[j4]);
      });
      else if (sort3 != null) index.sort(function(i3, j4) {
        return sort3(data6[i3], data6[j4]);
      });
      for (i2 = 0, k2 = sum2 ? (da - n2 * pa) / sum2 : 0; i2 < n2; ++i2, a0 = a1) {
        j3 = index[i2], v3 = arcs[j3], a1 = a0 + (v3 > 0 ? v3 * k2 : 0) + pa, arcs[j3] = {
          data: data6[j3],
          index: i2,
          value: v3,
          startAngle: a0,
          endAngle: a1,
          padAngle: p3
        };
      }
      return arcs;
    }
    __name(pie2, "pie");
    pie2.value = function(_3) {
      return arguments.length ? (value2 = typeof _3 === "function" ? _3 : constant_default5(+_3), pie2) : value2;
    };
    pie2.sortValues = function(_3) {
      return arguments.length ? (sortValues = _3, sort3 = null, pie2) : sortValues;
    };
    pie2.sort = function(_3) {
      return arguments.length ? (sort3 = _3, sortValues = null, pie2) : sort3;
    };
    pie2.startAngle = function(_3) {
      return arguments.length ? (startAngle = typeof _3 === "function" ? _3 : constant_default5(+_3), pie2) : startAngle;
    };
    pie2.endAngle = function(_3) {
      return arguments.length ? (endAngle = typeof _3 === "function" ? _3 : constant_default5(+_3), pie2) : endAngle;
    };
    pie2.padAngle = function(_3) {
      return arguments.length ? (padAngle = typeof _3 === "function" ? _3 : constant_default5(+_3), pie2) : padAngle;
    };
    return pie2;
  }
  var init_pie = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/pie.js"() {
      "use strict";
      init_array3();
      init_constant6();
      init_descending2();
      init_identity3();
      init_math2();
      __name(pie_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/bump.js
  function bumpX(context) {
    return new Bump(context, true);
  }
  function bumpY(context) {
    return new Bump(context, false);
  }
  var Bump;
  var init_bump = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/bump.js"() {
      "use strict";
      Bump = class {
        static {
          __name(this, "Bump");
        }
        constructor(context, x5) {
          this._context = context;
          this._x = x5;
        }
        areaStart() {
          this._line = 0;
        }
        areaEnd() {
          this._line = NaN;
        }
        lineStart() {
          this._point = 0;
        }
        lineEnd() {
          if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
          this._line = 1 - this._line;
        }
        point(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0: {
              this._point = 1;
              if (this._line) this._context.lineTo(x5, y6);
              else this._context.moveTo(x5, y6);
              break;
            }
            case 1:
              this._point = 2;
            // falls through
            default: {
              if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x5) / 2, this._y0, this._x0, y6, x5, y6);
              else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y6) / 2, x5, this._y0, x5, y6);
              break;
            }
          }
          this._x0 = x5, this._y0 = y6;
        }
      };
      __name(bumpX, "bumpX");
      __name(bumpY, "bumpY");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/noop.js
  function noop_default() {
  }
  var init_noop = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/noop.js"() {
      "use strict";
      __name(noop_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basis.js
  function point2(that, x5, y6) {
    that._context.bezierCurveTo(
      (2 * that._x0 + that._x1) / 3,
      (2 * that._y0 + that._y1) / 3,
      (that._x0 + 2 * that._x1) / 3,
      (that._y0 + 2 * that._y1) / 3,
      (that._x0 + 4 * that._x1 + x5) / 6,
      (that._y0 + 4 * that._y1 + y6) / 6
    );
  }
  function Basis(context) {
    this._context = context;
  }
  function basis_default2(context) {
    return new Basis(context);
  }
  var init_basis2 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basis.js"() {
      "use strict";
      __name(point2, "point");
      __name(Basis, "Basis");
      Basis.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._y0 = this._y1 = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          switch (this._point) {
            case 3:
              point2(this, this._x1, this._y1);
            // falls through
            case 2:
              this._context.lineTo(this._x1, this._y1);
              break;
          }
          if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              this._line ? this._context.lineTo(x5, y6) : this._context.moveTo(x5, y6);
              break;
            case 1:
              this._point = 2;
              break;
            case 2:
              this._point = 3;
              this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6);
            // falls through
            default:
              point2(this, x5, y6);
              break;
          }
          this._x0 = this._x1, this._x1 = x5;
          this._y0 = this._y1, this._y1 = y6;
        }, "point")
      };
      __name(basis_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisClosed.js
  function BasisClosed(context) {
    this._context = context;
  }
  function basisClosed_default2(context) {
    return new BasisClosed(context);
  }
  var init_basisClosed2 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisClosed.js"() {
      "use strict";
      init_noop();
      init_basis2();
      __name(BasisClosed, "BasisClosed");
      BasisClosed.prototype = {
        areaStart: noop_default,
        areaEnd: noop_default,
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          switch (this._point) {
            case 1: {
              this._context.moveTo(this._x2, this._y2);
              this._context.closePath();
              break;
            }
            case 2: {
              this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
              this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
              this._context.closePath();
              break;
            }
            case 3: {
              this.point(this._x2, this._y2);
              this.point(this._x3, this._y3);
              this.point(this._x4, this._y4);
              break;
            }
          }
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              this._x2 = x5, this._y2 = y6;
              break;
            case 1:
              this._point = 2;
              this._x3 = x5, this._y3 = y6;
              break;
            case 2:
              this._point = 3;
              this._x4 = x5, this._y4 = y6;
              this._context.moveTo((this._x0 + 4 * this._x1 + x5) / 6, (this._y0 + 4 * this._y1 + y6) / 6);
              break;
            default:
              point2(this, x5, y6);
              break;
          }
          this._x0 = this._x1, this._x1 = x5;
          this._y0 = this._y1, this._y1 = y6;
        }, "point")
      };
      __name(basisClosed_default2, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisOpen.js
  function BasisOpen(context) {
    this._context = context;
  }
  function basisOpen_default(context) {
    return new BasisOpen(context);
  }
  var init_basisOpen = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisOpen.js"() {
      "use strict";
      init_basis2();
      __name(BasisOpen, "BasisOpen");
      BasisOpen.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._y0 = this._y1 = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              break;
            case 1:
              this._point = 2;
              break;
            case 2:
              this._point = 3;
              var x0 = (this._x0 + 4 * this._x1 + x5) / 6, y0 = (this._y0 + 4 * this._y1 + y6) / 6;
              this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0);
              break;
            case 3:
              this._point = 4;
            // falls through
            default:
              point2(this, x5, y6);
              break;
          }
          this._x0 = this._x1, this._x1 = x5;
          this._y0 = this._y1, this._y1 = y6;
        }, "point")
      };
      __name(basisOpen_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/bundle.js
  function Bundle(context, beta) {
    this._basis = new Basis(context);
    this._beta = beta;
  }
  var bundle_default;
  var init_bundle = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/bundle.js"() {
      "use strict";
      init_basis2();
      __name(Bundle, "Bundle");
      Bundle.prototype = {
        lineStart: /* @__PURE__ */ __name(function() {
          this._x = [];
          this._y = [];
          this._basis.lineStart();
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          var x5 = this._x, y6 = this._y, j3 = x5.length - 1;
          if (j3 > 0) {
            var x0 = x5[0], y0 = y6[0], dx = x5[j3] - x0, dy = y6[j3] - y0, i2 = -1, t4;
            while (++i2 <= j3) {
              t4 = i2 / j3;
              this._basis.point(
                this._beta * x5[i2] + (1 - this._beta) * (x0 + t4 * dx),
                this._beta * y6[i2] + (1 - this._beta) * (y0 + t4 * dy)
              );
            }
          }
          this._x = this._y = null;
          this._basis.lineEnd();
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          this._x.push(+x5);
          this._y.push(+y6);
        }, "point")
      };
      bundle_default = (/* @__PURE__ */ __name((function custom2(beta) {
        function bundle(context) {
          return beta === 1 ? new Basis(context) : new Bundle(context, beta);
        }
        __name(bundle, "bundle");
        bundle.beta = function(beta2) {
          return custom2(+beta2);
        };
        return bundle;
      }), "custom"))(0.85);
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinal.js
  function point3(that, x5, y6) {
    that._context.bezierCurveTo(
      that._x1 + that._k * (that._x2 - that._x0),
      that._y1 + that._k * (that._y2 - that._y0),
      that._x2 + that._k * (that._x1 - x5),
      that._y2 + that._k * (that._y1 - y6),
      that._x2,
      that._y2
    );
  }
  function Cardinal(context, tension) {
    this._context = context;
    this._k = (1 - tension) / 6;
  }
  var cardinal_default;
  var init_cardinal = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinal.js"() {
      "use strict";
      __name(point3, "point");
      __name(Cardinal, "Cardinal");
      Cardinal.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          switch (this._point) {
            case 2:
              this._context.lineTo(this._x2, this._y2);
              break;
            case 3:
              point3(this, this._x1, this._y1);
              break;
          }
          if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              this._line ? this._context.lineTo(x5, y6) : this._context.moveTo(x5, y6);
              break;
            case 1:
              this._point = 2;
              this._x1 = x5, this._y1 = y6;
              break;
            case 2:
              this._point = 3;
            // falls through
            default:
              point3(this, x5, y6);
              break;
          }
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y6;
        }, "point")
      };
      cardinal_default = (/* @__PURE__ */ __name((function custom3(tension) {
        function cardinal(context) {
          return new Cardinal(context, tension);
        }
        __name(cardinal, "cardinal");
        cardinal.tension = function(tension2) {
          return custom3(+tension2);
        };
        return cardinal;
      }), "custom"))(0);
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalClosed.js
  function CardinalClosed(context, tension) {
    this._context = context;
    this._k = (1 - tension) / 6;
  }
  var cardinalClosed_default;
  var init_cardinalClosed = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalClosed.js"() {
      "use strict";
      init_noop();
      init_cardinal();
      __name(CardinalClosed, "CardinalClosed");
      CardinalClosed.prototype = {
        areaStart: noop_default,
        areaEnd: noop_default,
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          switch (this._point) {
            case 1: {
              this._context.moveTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 2: {
              this._context.lineTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 3: {
              this.point(this._x3, this._y3);
              this.point(this._x4, this._y4);
              this.point(this._x5, this._y5);
              break;
            }
          }
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              this._x3 = x5, this._y3 = y6;
              break;
            case 1:
              this._point = 2;
              this._context.moveTo(this._x4 = x5, this._y4 = y6);
              break;
            case 2:
              this._point = 3;
              this._x5 = x5, this._y5 = y6;
              break;
            default:
              point3(this, x5, y6);
              break;
          }
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y6;
        }, "point")
      };
      cardinalClosed_default = (/* @__PURE__ */ __name((function custom4(tension) {
        function cardinal(context) {
          return new CardinalClosed(context, tension);
        }
        __name(cardinal, "cardinal");
        cardinal.tension = function(tension2) {
          return custom4(+tension2);
        };
        return cardinal;
      }), "custom"))(0);
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalOpen.js
  function CardinalOpen(context, tension) {
    this._context = context;
    this._k = (1 - tension) / 6;
  }
  var cardinalOpen_default;
  var init_cardinalOpen = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalOpen.js"() {
      "use strict";
      init_cardinal();
      __name(CardinalOpen, "CardinalOpen");
      CardinalOpen.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              break;
            case 1:
              this._point = 2;
              break;
            case 2:
              this._point = 3;
              this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2);
              break;
            case 3:
              this._point = 4;
            // falls through
            default:
              point3(this, x5, y6);
              break;
          }
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y6;
        }, "point")
      };
      cardinalOpen_default = (/* @__PURE__ */ __name((function custom5(tension) {
        function cardinal(context) {
          return new CardinalOpen(context, tension);
        }
        __name(cardinal, "cardinal");
        cardinal.tension = function(tension2) {
          return custom5(+tension2);
        };
        return cardinal;
      }), "custom"))(0);
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRom.js
  function point4(that, x5, y6) {
    var x1 = that._x1, y1 = that._y1, x22 = that._x2, y22 = that._y2;
    if (that._l01_a > epsilon3) {
      var a2 = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, n2 = 3 * that._l01_a * (that._l01_a + that._l12_a);
      x1 = (x1 * a2 - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n2;
      y1 = (y1 * a2 - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n2;
    }
    if (that._l23_a > epsilon3) {
      var b3 = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, m3 = 3 * that._l23_a * (that._l23_a + that._l12_a);
      x22 = (x22 * b3 + that._x1 * that._l23_2a - x5 * that._l12_2a) / m3;
      y22 = (y22 * b3 + that._y1 * that._l23_2a - y6 * that._l12_2a) / m3;
    }
    that._context.bezierCurveTo(x1, y1, x22, y22, that._x2, that._y2);
  }
  function CatmullRom(context, alpha) {
    this._context = context;
    this._alpha = alpha;
  }
  var catmullRom_default;
  var init_catmullRom = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRom.js"() {
      "use strict";
      init_math2();
      init_cardinal();
      __name(point4, "point");
      __name(CatmullRom, "CatmullRom");
      CatmullRom.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
          this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          switch (this._point) {
            case 2:
              this._context.lineTo(this._x2, this._y2);
              break;
            case 3:
              this.point(this._x2, this._y2);
              break;
          }
          if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          if (this._point) {
            var x23 = this._x2 - x5, y23 = this._y2 - y6;
            this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
          }
          switch (this._point) {
            case 0:
              this._point = 1;
              this._line ? this._context.lineTo(x5, y6) : this._context.moveTo(x5, y6);
              break;
            case 1:
              this._point = 2;
              break;
            case 2:
              this._point = 3;
            // falls through
            default:
              point4(this, x5, y6);
              break;
          }
          this._l01_a = this._l12_a, this._l12_a = this._l23_a;
          this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y6;
        }, "point")
      };
      catmullRom_default = (/* @__PURE__ */ __name((function custom6(alpha) {
        function catmullRom(context) {
          return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
        }
        __name(catmullRom, "catmullRom");
        catmullRom.alpha = function(alpha2) {
          return custom6(+alpha2);
        };
        return catmullRom;
      }), "custom"))(0.5);
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomClosed.js
  function CatmullRomClosed(context, alpha) {
    this._context = context;
    this._alpha = alpha;
  }
  var catmullRomClosed_default;
  var init_catmullRomClosed = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomClosed.js"() {
      "use strict";
      init_cardinalClosed();
      init_noop();
      init_catmullRom();
      __name(CatmullRomClosed, "CatmullRomClosed");
      CatmullRomClosed.prototype = {
        areaStart: noop_default,
        areaEnd: noop_default,
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
          this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          switch (this._point) {
            case 1: {
              this._context.moveTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 2: {
              this._context.lineTo(this._x3, this._y3);
              this._context.closePath();
              break;
            }
            case 3: {
              this.point(this._x3, this._y3);
              this.point(this._x4, this._y4);
              this.point(this._x5, this._y5);
              break;
            }
          }
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          if (this._point) {
            var x23 = this._x2 - x5, y23 = this._y2 - y6;
            this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
          }
          switch (this._point) {
            case 0:
              this._point = 1;
              this._x3 = x5, this._y3 = y6;
              break;
            case 1:
              this._point = 2;
              this._context.moveTo(this._x4 = x5, this._y4 = y6);
              break;
            case 2:
              this._point = 3;
              this._x5 = x5, this._y5 = y6;
              break;
            default:
              point4(this, x5, y6);
              break;
          }
          this._l01_a = this._l12_a, this._l12_a = this._l23_a;
          this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y6;
        }, "point")
      };
      catmullRomClosed_default = (/* @__PURE__ */ __name((function custom7(alpha) {
        function catmullRom(context) {
          return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
        }
        __name(catmullRom, "catmullRom");
        catmullRom.alpha = function(alpha2) {
          return custom7(+alpha2);
        };
        return catmullRom;
      }), "custom"))(0.5);
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomOpen.js
  function CatmullRomOpen(context, alpha) {
    this._context = context;
    this._alpha = alpha;
  }
  var catmullRomOpen_default;
  var init_catmullRomOpen = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomOpen.js"() {
      "use strict";
      init_cardinalOpen();
      init_catmullRom();
      __name(CatmullRomOpen, "CatmullRomOpen");
      CatmullRomOpen.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
          this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          if (this._point) {
            var x23 = this._x2 - x5, y23 = this._y2 - y6;
            this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
          }
          switch (this._point) {
            case 0:
              this._point = 1;
              break;
            case 1:
              this._point = 2;
              break;
            case 2:
              this._point = 3;
              this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2);
              break;
            case 3:
              this._point = 4;
            // falls through
            default:
              point4(this, x5, y6);
              break;
          }
          this._l01_a = this._l12_a, this._l12_a = this._l23_a;
          this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
          this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5;
          this._y0 = this._y1, this._y1 = this._y2, this._y2 = y6;
        }, "point")
      };
      catmullRomOpen_default = (/* @__PURE__ */ __name((function custom8(alpha) {
        function catmullRom(context) {
          return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
        }
        __name(catmullRom, "catmullRom");
        catmullRom.alpha = function(alpha2) {
          return custom8(+alpha2);
        };
        return catmullRom;
      }), "custom"))(0.5);
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linearClosed.js
  function LinearClosed(context) {
    this._context = context;
  }
  function linearClosed_default(context) {
    return new LinearClosed(context);
  }
  var init_linearClosed = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linearClosed.js"() {
      "use strict";
      init_noop();
      __name(LinearClosed, "LinearClosed");
      LinearClosed.prototype = {
        areaStart: noop_default,
        areaEnd: noop_default,
        lineStart: /* @__PURE__ */ __name(function() {
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          if (this._point) this._context.closePath();
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          if (this._point) this._context.lineTo(x5, y6);
          else this._point = 1, this._context.moveTo(x5, y6);
        }, "point")
      };
      __name(linearClosed_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/monotone.js
  function sign(x5) {
    return x5 < 0 ? -1 : 1;
  }
  function slope3(that, x22, y22) {
    var h0 = that._x1 - that._x0, h1 = x22 - that._x1, s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), s1 = (y22 - that._y1) / (h1 || h0 < 0 && -0), p3 = (s0 * h1 + s1 * h0) / (h0 + h1);
    return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p3)) || 0;
  }
  function slope2(that, t4) {
    var h3 = that._x1 - that._x0;
    return h3 ? (3 * (that._y1 - that._y0) / h3 - t4) / 2 : t4;
  }
  function point5(that, t03, t13) {
    var x0 = that._x0, y0 = that._y0, x1 = that._x1, y1 = that._y1, dx = (x1 - x0) / 3;
    that._context.bezierCurveTo(x0 + dx, y0 + dx * t03, x1 - dx, y1 - dx * t13, x1, y1);
  }
  function MonotoneX(context) {
    this._context = context;
  }
  function MonotoneY(context) {
    this._context = new ReflectContext(context);
  }
  function ReflectContext(context) {
    this._context = context;
  }
  function monotoneX(context) {
    return new MonotoneX(context);
  }
  function monotoneY(context) {
    return new MonotoneY(context);
  }
  var init_monotone = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/monotone.js"() {
      "use strict";
      __name(sign, "sign");
      __name(slope3, "slope3");
      __name(slope2, "slope2");
      __name(point5, "point");
      __name(MonotoneX, "MonotoneX");
      MonotoneX.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x0 = this._x1 = this._y0 = this._y1 = this._t0 = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          switch (this._point) {
            case 2:
              this._context.lineTo(this._x1, this._y1);
              break;
            case 3:
              point5(this, this._t0, slope2(this, this._t0));
              break;
          }
          if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
          this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          var t13 = NaN;
          x5 = +x5, y6 = +y6;
          if (x5 === this._x1 && y6 === this._y1) return;
          switch (this._point) {
            case 0:
              this._point = 1;
              this._line ? this._context.lineTo(x5, y6) : this._context.moveTo(x5, y6);
              break;
            case 1:
              this._point = 2;
              break;
            case 2:
              this._point = 3;
              point5(this, slope2(this, t13 = slope3(this, x5, y6)), t13);
              break;
            default:
              point5(this, this._t0, t13 = slope3(this, x5, y6));
              break;
          }
          this._x0 = this._x1, this._x1 = x5;
          this._y0 = this._y1, this._y1 = y6;
          this._t0 = t13;
        }, "point")
      };
      __name(MonotoneY, "MonotoneY");
      (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x5, y6) {
        MonotoneX.prototype.point.call(this, y6, x5);
      };
      __name(ReflectContext, "ReflectContext");
      ReflectContext.prototype = {
        moveTo: /* @__PURE__ */ __name(function(x5, y6) {
          this._context.moveTo(y6, x5);
        }, "moveTo"),
        closePath: /* @__PURE__ */ __name(function() {
          this._context.closePath();
        }, "closePath"),
        lineTo: /* @__PURE__ */ __name(function(x5, y6) {
          this._context.lineTo(y6, x5);
        }, "lineTo"),
        bezierCurveTo: /* @__PURE__ */ __name(function(x1, y1, x22, y22, x5, y6) {
          this._context.bezierCurveTo(y1, x1, y22, x22, y6, x5);
        }, "bezierCurveTo")
      };
      __name(monotoneX, "monotoneX");
      __name(monotoneY, "monotoneY");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/natural.js
  function Natural(context) {
    this._context = context;
  }
  function controlPoints(x5) {
    var i2, n2 = x5.length - 1, m3, a2 = new Array(n2), b3 = new Array(n2), r2 = new Array(n2);
    a2[0] = 0, b3[0] = 2, r2[0] = x5[0] + 2 * x5[1];
    for (i2 = 1; i2 < n2 - 1; ++i2) a2[i2] = 1, b3[i2] = 4, r2[i2] = 4 * x5[i2] + 2 * x5[i2 + 1];
    a2[n2 - 1] = 2, b3[n2 - 1] = 7, r2[n2 - 1] = 8 * x5[n2 - 1] + x5[n2];
    for (i2 = 1; i2 < n2; ++i2) m3 = a2[i2] / b3[i2 - 1], b3[i2] -= m3, r2[i2] -= m3 * r2[i2 - 1];
    a2[n2 - 1] = r2[n2 - 1] / b3[n2 - 1];
    for (i2 = n2 - 2; i2 >= 0; --i2) a2[i2] = (r2[i2] - a2[i2 + 1]) / b3[i2];
    b3[n2 - 1] = (x5[n2] + a2[n2 - 1]) / 2;
    for (i2 = 0; i2 < n2 - 1; ++i2) b3[i2] = 2 * x5[i2 + 1] - a2[i2 + 1];
    return [a2, b3];
  }
  function natural_default(context) {
    return new Natural(context);
  }
  var init_natural = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/natural.js"() {
      "use strict";
      __name(Natural, "Natural");
      Natural.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x = [];
          this._y = [];
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          var x5 = this._x, y6 = this._y, n2 = x5.length;
          if (n2) {
            this._line ? this._context.lineTo(x5[0], y6[0]) : this._context.moveTo(x5[0], y6[0]);
            if (n2 === 2) {
              this._context.lineTo(x5[1], y6[1]);
            } else {
              var px = controlPoints(x5), py = controlPoints(y6);
              for (var i0 = 0, i1 = 1; i1 < n2; ++i0, ++i1) {
                this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x5[i1], y6[i1]);
              }
            }
          }
          if (this._line || this._line !== 0 && n2 === 1) this._context.closePath();
          this._line = 1 - this._line;
          this._x = this._y = null;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          this._x.push(+x5);
          this._y.push(+y6);
        }, "point")
      };
      __name(controlPoints, "controlPoints");
      __name(natural_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/step.js
  function Step(context, t4) {
    this._context = context;
    this._t = t4;
  }
  function step_default(context) {
    return new Step(context, 0.5);
  }
  function stepBefore(context) {
    return new Step(context, 0);
  }
  function stepAfter(context) {
    return new Step(context, 1);
  }
  var init_step = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/step.js"() {
      "use strict";
      __name(Step, "Step");
      Step.prototype = {
        areaStart: /* @__PURE__ */ __name(function() {
          this._line = 0;
        }, "areaStart"),
        areaEnd: /* @__PURE__ */ __name(function() {
          this._line = NaN;
        }, "areaEnd"),
        lineStart: /* @__PURE__ */ __name(function() {
          this._x = this._y = NaN;
          this._point = 0;
        }, "lineStart"),
        lineEnd: /* @__PURE__ */ __name(function() {
          if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
          if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
          if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
        }, "lineEnd"),
        point: /* @__PURE__ */ __name(function(x5, y6) {
          x5 = +x5, y6 = +y6;
          switch (this._point) {
            case 0:
              this._point = 1;
              this._line ? this._context.lineTo(x5, y6) : this._context.moveTo(x5, y6);
              break;
            case 1:
              this._point = 2;
            // falls through
            default: {
              if (this._t <= 0) {
                this._context.lineTo(this._x, y6);
                this._context.lineTo(x5, y6);
              } else {
                var x1 = this._x * (1 - this._t) + x5 * this._t;
                this._context.lineTo(x1, this._y);
                this._context.lineTo(x1, y6);
              }
              break;
            }
          }
          this._x = x5, this._y = y6;
        }, "point")
      };
      __name(step_default, "default");
      __name(stepBefore, "stepBefore");
      __name(stepAfter, "stepAfter");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/index.js
  var init_src30 = __esm({
    "../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/index.js"() {
      "use strict";
      init_arc();
      init_line();
      init_pie();
      init_basisClosed2();
      init_basisOpen();
      init_basis2();
      init_bump();
      init_bundle();
      init_cardinalClosed();
      init_cardinalOpen();
      init_cardinal();
      init_catmullRomClosed();
      init_catmullRomOpen();
      init_catmullRom();
      init_linearClosed();
      init_linear2();
      init_monotone();
      init_natural();
      init_step();
    }
  });

  // ../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/constant.js
  var init_constant7 = __esm({
    "../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/constant.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/event.js
  var init_event2 = __esm({
    "../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/event.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js
  function Transform(k2, x5, y6) {
    this.k = k2;
    this.x = x5;
    this.y = y6;
  }
  function transform(node2) {
    while (!node2.__zoom) if (!(node2 = node2.parentNode)) return identity3;
    return node2.__zoom;
  }
  var identity3;
  var init_transform2 = __esm({
    "../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js"() {
      "use strict";
      __name(Transform, "Transform");
      Transform.prototype = {
        constructor: Transform,
        scale: /* @__PURE__ */ __name(function(k2) {
          return k2 === 1 ? this : new Transform(this.k * k2, this.x, this.y);
        }, "scale"),
        translate: /* @__PURE__ */ __name(function(x5, y6) {
          return x5 === 0 & y6 === 0 ? this : new Transform(this.k, this.x + this.k * x5, this.y + this.k * y6);
        }, "translate"),
        apply: /* @__PURE__ */ __name(function(point8) {
          return [point8[0] * this.k + this.x, point8[1] * this.k + this.y];
        }, "apply"),
        applyX: /* @__PURE__ */ __name(function(x5) {
          return x5 * this.k + this.x;
        }, "applyX"),
        applyY: /* @__PURE__ */ __name(function(y6) {
          return y6 * this.k + this.y;
        }, "applyY"),
        invert: /* @__PURE__ */ __name(function(location2) {
          return [(location2[0] - this.x) / this.k, (location2[1] - this.y) / this.k];
        }, "invert"),
        invertX: /* @__PURE__ */ __name(function(x5) {
          return (x5 - this.x) / this.k;
        }, "invertX"),
        invertY: /* @__PURE__ */ __name(function(y6) {
          return (y6 - this.y) / this.k;
        }, "invertY"),
        rescaleX: /* @__PURE__ */ __name(function(x5) {
          return x5.copy().domain(x5.range().map(this.invertX, this).map(x5.invert, x5));
        }, "rescaleX"),
        rescaleY: /* @__PURE__ */ __name(function(y6) {
          return y6.copy().domain(y6.range().map(this.invertY, this).map(y6.invert, y6));
        }, "rescaleY"),
        toString: /* @__PURE__ */ __name(function() {
          return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
        }, "toString")
      };
      identity3 = new Transform(1, 0, 0);
      transform.prototype = Transform.prototype;
      __name(transform, "transform");
    }
  });

  // ../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/noevent.js
  var init_noevent2 = __esm({
    "../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/noevent.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/zoom.js
  var init_zoom = __esm({
    "../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/zoom.js"() {
      "use strict";
      init_src11();
      init_constant7();
      init_event2();
      init_transform2();
      init_noevent2();
    }
  });

  // ../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/index.js
  var init_src31 = __esm({
    "../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/index.js"() {
      "use strict";
      init_zoom();
      init_transform2();
    }
  });

  // ../../node_modules/.pnpm/d3@7.9.0/node_modules/d3/src/index.js
  var init_src32 = __esm({
    "../../node_modules/.pnpm/d3@7.9.0/node_modules/d3/src/index.js"() {
      "use strict";
      init_src2();
      init_src3();
      init_src12();
      init_src14();
      init_src7();
      init_src15();
      init_src16();
      init_src4();
      init_src6();
      init_src17();
      init_src10();
      init_src18();
      init_src20();
      init_src21();
      init_src22();
      init_src23();
      init_src8();
      init_src13();
      init_src24();
      init_src19();
      init_src25();
      init_src28();
      init_src29();
      init_src5();
      init_src30();
      init_src26();
      init_src27();
      init_src9();
      init_src11();
      init_src31();
    }
  });

  // ../../node_modules/.pnpm/@braintree+sanitize-url@7.1.2/node_modules/@braintree/sanitize-url/dist/constants.js
  var require_constants = __commonJS({
    "../../node_modules/.pnpm/@braintree+sanitize-url@7.1.2/node_modules/@braintree/sanitize-url/dist/constants.js"(exports2) {
      "use strict";
      Object.defineProperty(exports2, "__esModule", { value: true });
      exports2.BLANK_URL = exports2.relativeFirstCharacters = exports2.whitespaceEscapeCharsRegex = exports2.urlSchemeRegex = exports2.ctrlCharactersRegex = exports2.htmlCtrlEntityRegex = exports2.htmlEntitiesRegex = exports2.invalidProtocolRegex = void 0;
      exports2.invalidProtocolRegex = /^([^\w]*)(javascript|data|vbscript)/im;
      exports2.htmlEntitiesRegex = /&#(\w+)(^\w|;)?/g;
      exports2.htmlCtrlEntityRegex = /&(newline|tab);/gi;
      exports2.ctrlCharactersRegex = /[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;
      exports2.urlSchemeRegex = /^.+(:|&colon;)/gim;
      exports2.whitespaceEscapeCharsRegex = /(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;
      exports2.relativeFirstCharacters = [".", "/"];
      exports2.BLANK_URL = "about:blank";
    }
  });

  // ../../node_modules/.pnpm/@braintree+sanitize-url@7.1.2/node_modules/@braintree/sanitize-url/dist/index.js
  var require_dist = __commonJS({
    "../../node_modules/.pnpm/@braintree+sanitize-url@7.1.2/node_modules/@braintree/sanitize-url/dist/index.js"(exports2) {
      "use strict";
      Object.defineProperty(exports2, "__esModule", { value: true });
      exports2.sanitizeUrl = sanitizeUrl6;
      var constants_1 = require_constants();
      function isRelativeUrlWithoutProtocol(url) {
        return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;
      }
      __name(isRelativeUrlWithoutProtocol, "isRelativeUrlWithoutProtocol");
      function decodeHtmlCharacters(str2) {
        var removedNullByte = str2.replace(constants_1.ctrlCharactersRegex, "");
        return removedNullByte.replace(constants_1.htmlEntitiesRegex, function(match3, dec) {
          return String.fromCharCode(dec);
        });
      }
      __name(decodeHtmlCharacters, "decodeHtmlCharacters");
      function isValidUrl(url) {
        return URL.canParse(url);
      }
      __name(isValidUrl, "isValidUrl");
      function decodeURI(uri) {
        try {
          return decodeURIComponent(uri);
        } catch (e3) {
          return uri;
        }
      }
      __name(decodeURI, "decodeURI");
      function sanitizeUrl6(url) {
        if (!url) {
          return constants_1.BLANK_URL;
        }
        var charsToDecode;
        var decodedUrl = decodeURI(url.trim());
        do {
          decodedUrl = decodeHtmlCharacters(decodedUrl).replace(constants_1.htmlCtrlEntityRegex, "").replace(constants_1.ctrlCharactersRegex, "").replace(constants_1.whitespaceEscapeCharsRegex, "").trim();
          decodedUrl = decodeURI(decodedUrl);
          charsToDecode = decodedUrl.match(constants_1.ctrlCharactersRegex) || decodedUrl.match(constants_1.htmlEntitiesRegex) || decodedUrl.match(constants_1.htmlCtrlEntityRegex) || decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);
        } while (charsToDecode && charsToDecode.length > 0);
        var sanitizedUrl = decodedUrl;
        if (!sanitizedUrl) {
          return constants_1.BLANK_URL;
        }
        if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {
          return sanitizedUrl;
        }
        var trimmedUrl = sanitizedUrl.trimStart();
        var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);
        if (!urlSchemeParseResults) {
          return sanitizedUrl;
        }
        var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();
        if (constants_1.invalidProtocolRegex.test(urlScheme)) {
          return constants_1.BLANK_URL;
        }
        var backSanitized = trimmedUrl.replace(/\\/g, "/");
        if (urlScheme === "mailto:" || urlScheme.includes("://")) {
          return backSanitized;
        }
        if (urlScheme === "http:" || urlScheme === "https:") {
          if (!isValidUrl(backSanitized)) {
            return constants_1.BLANK_URL;
          }
          var url_1 = new URL(backSanitized);
          url_1.protocol = url_1.protocol.toLowerCase();
          url_1.hostname = url_1.hostname.toLowerCase();
          return url_1.toString();
        }
        return backSanitized;
      }
      __name(sanitizeUrl6, "sanitizeUrl");
    }
  });

  // src/diagrams/common/svgDrawCommon.ts
  var import_sanitize_url, drawRect, drawBackgroundRect, drawText, drawImage, drawEmbeddedImage, getNoteRect, getTextObj, createTooltip;
  var init_svgDrawCommon = __esm({
    "src/diagrams/common/svgDrawCommon.ts"() {
      "use strict";
      import_sanitize_url = __toESM(require_dist(), 1);
      init_src32();
      init_common();
      drawRect = /* @__PURE__ */ __name((element3, rectData) => {
        const rectElement = element3.append("rect");
        rectElement.attr("x", rectData.x);
        rectElement.attr("y", rectData.y);
        rectElement.attr("fill", rectData.fill);
        rectElement.attr("stroke", rectData.stroke);
        rectElement.attr("width", rectData.width);
        rectElement.attr("height", rectData.height);
        if (rectData.name) {
          rectElement.attr("name", rectData.name);
        }
        if (rectData.rx) {
          rectElement.attr("rx", rectData.rx);
        }
        if (rectData.ry) {
          rectElement.attr("ry", rectData.ry);
        }
        if (rectData.attrs !== void 0) {
          for (const attrKey in rectData.attrs) {
            rectElement.attr(attrKey, rectData.attrs[attrKey]);
          }
        }
        if (rectData.class) {
          rectElement.attr("class", rectData.class);
        }
        return rectElement;
      }, "drawRect");
      drawBackgroundRect = /* @__PURE__ */ __name((element3, bounds4) => {
        const rectData = {
          x: bounds4.startx,
          y: bounds4.starty,
          width: bounds4.stopx - bounds4.startx,
          height: bounds4.stopy - bounds4.starty,
          fill: bounds4.fill,
          stroke: bounds4.stroke,
          class: "rect"
        };
        const rectElement = drawRect(element3, rectData);
        rectElement.lower();
      }, "drawBackgroundRect");
      drawText = /* @__PURE__ */ __name((element3, textData) => {
        const nText = textData.text.replace(lineBreakRegex, " ");
        const textElem = element3.append("text");
        textElem.attr("x", textData.x);
        textElem.attr("y", textData.y);
        textElem.attr("class", "legend");
        textElem.style("text-anchor", textData.anchor);
        if (textData.class) {
          textElem.attr("class", textData.class);
        }
        const tspan = textElem.append("tspan");
        tspan.attr("x", textData.x + textData.textMargin * 2);
        tspan.text(nText);
        return textElem;
      }, "drawText");
      drawImage = /* @__PURE__ */ __name((elem, x5, y6, link2) => {
        const imageElement = elem.append("image");
        imageElement.attr("x", x5);
        imageElement.attr("y", y6);
        const sanitizedLink = (0, import_sanitize_url.sanitizeUrl)(link2);
        imageElement.attr("xlink:href", sanitizedLink);
      }, "drawImage");
      drawEmbeddedImage = /* @__PURE__ */ __name((element3, x5, y6, link2) => {
        const imageElement = element3.append("use");
        imageElement.attr("x", x5);
        imageElement.attr("y", y6);
        const sanitizedLink = (0, import_sanitize_url.sanitizeUrl)(link2);
        imageElement.attr("xlink:href", `#${sanitizedLink}`);
      }, "drawEmbeddedImage");
      getNoteRect = /* @__PURE__ */ __name(() => {
        const noteRectData = {
          x: 0,
          y: 0,
          width: 100,
          height: 100,
          fill: "#EDF2AE",
          stroke: "#666",
          anchor: "start",
          rx: 0,
          ry: 0
        };
        return noteRectData;
      }, "getNoteRect");
      getTextObj = /* @__PURE__ */ __name(() => {
        const testObject = {
          x: 0,
          y: 0,
          width: 100,
          height: 100,
          "text-anchor": "start",
          style: "#666",
          textMargin: 0,
          rx: 0,
          ry: 0,
          tspan: true
        };
        return testObject;
      }, "getTextObj");
      createTooltip = /* @__PURE__ */ __name(() => {
        let tooltipElem = select_default2(".mermaidTooltip");
        if (tooltipElem.empty()) {
          tooltipElem = select_default2("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0).style("position", "absolute").style("text-align", "center").style("max-width", "200px").style("padding", "2px").style("font-size", "12px").style("background", "#ffffde").style("border", "1px solid #333").style("border-radius", "2px").style("pointer-events", "none").style("z-index", "100");
        }
        return tooltipElem;
      }, "createTooltip");
    }
  });

  // src/diagrams/c4/svgDraw.js
  var import_sanitize_url2, drawRect2, drawImage2, drawRels, drawBoundary, drawC4Shape, insertDatabaseIcon, insertComputerIcon, insertClockIcon, insertArrowHead, insertArrowEnd, insertArrowFilledHead, insertArrowCrossHead, getC4ShapeFont, _drawTextCandidateFunc, svgDraw_default;
  var init_svgDraw = __esm({
    "src/diagrams/c4/svgDraw.js"() {
      "use strict";
      init_common();
      init_svgDrawCommon();
      import_sanitize_url2 = __toESM(require_dist(), 1);
      drawRect2 = /* @__PURE__ */ __name(function(elem, rectData) {
        return drawRect(elem, rectData);
      }, "drawRect");
      drawImage2 = /* @__PURE__ */ __name(function(elem, width3, height2, x5, y6, link2) {
        const imageElem = elem.append("image");
        imageElem.attr("width", width3);
        imageElem.attr("height", height2);
        imageElem.attr("x", x5);
        imageElem.attr("y", y6);
        let sanitizedLink = link2.startsWith("data:image/png;base64") ? link2 : (0, import_sanitize_url2.sanitizeUrl)(link2);
        imageElem.attr("xlink:href", sanitizedLink);
      }, "drawImage");
      drawRels = /* @__PURE__ */ __name((elem, rels2, conf5, diagramId3) => {
        const relsElem = elem.append("g");
        let i2 = 0;
        for (let rel2 of rels2) {
          let textColor = rel2.textColor ? rel2.textColor : "#444444";
          let strokeColor = rel2.lineColor ? rel2.lineColor : "#444444";
          let offsetX = rel2.offsetX ? parseInt(rel2.offsetX) : 0;
          let offsetY = rel2.offsetY ? parseInt(rel2.offsetY) : 0;
          let url = "";
          if (i2 === 0) {
            let line2 = relsElem.append("line");
            line2.attr("x1", rel2.startPoint.x);
            line2.attr("y1", rel2.startPoint.y);
            line2.attr("x2", rel2.endPoint.x);
            line2.attr("y2", rel2.endPoint.y);
            line2.attr("stroke-width", "1");
            line2.attr("stroke", strokeColor);
            line2.style("fill", "none");
            if (rel2.type !== "rel_b") {
              line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-arrowhead)");
            }
            if (rel2.type === "birel" || rel2.type === "rel_b") {
              line2.attr("marker-start", "url(" + url + "#" + diagramId3 + "-arrowend)");
            }
            i2 = -1;
          } else {
            let line2 = relsElem.append("path");
            line2.attr("fill", "none").attr("stroke-width", "1").attr("stroke", strokeColor).attr(
              "d",
              "Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx", rel2.startPoint.x).replaceAll("starty", rel2.startPoint.y).replaceAll(
                "controlx",
                rel2.startPoint.x + (rel2.endPoint.x - rel2.startPoint.x) / 2 - (rel2.endPoint.x - rel2.startPoint.x) / 4
              ).replaceAll("controly", rel2.startPoint.y + (rel2.endPoint.y - rel2.startPoint.y) / 2).replaceAll("stopx", rel2.endPoint.x).replaceAll("stopy", rel2.endPoint.y)
            );
            if (rel2.type !== "rel_b") {
              line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-arrowhead)");
            }
            if (rel2.type === "birel" || rel2.type === "rel_b") {
              line2.attr("marker-start", "url(" + url + "#" + diagramId3 + "-arrowend)");
            }
          }
          let messageConf = conf5.messageFont();
          _drawTextCandidateFunc(conf5)(
            rel2.label.text,
            relsElem,
            Math.min(rel2.startPoint.x, rel2.endPoint.x) + Math.abs(rel2.endPoint.x - rel2.startPoint.x) / 2 + offsetX,
            Math.min(rel2.startPoint.y, rel2.endPoint.y) + Math.abs(rel2.endPoint.y - rel2.startPoint.y) / 2 + offsetY,
            rel2.label.width,
            rel2.label.height,
            { fill: textColor },
            messageConf
          );
          if (rel2.techn && rel2.techn.text !== "") {
            messageConf = conf5.messageFont();
            _drawTextCandidateFunc(conf5)(
              "[" + rel2.techn.text + "]",
              relsElem,
              Math.min(rel2.startPoint.x, rel2.endPoint.x) + Math.abs(rel2.endPoint.x - rel2.startPoint.x) / 2 + offsetX,
              Math.min(rel2.startPoint.y, rel2.endPoint.y) + Math.abs(rel2.endPoint.y - rel2.startPoint.y) / 2 + conf5.messageFontSize + 5 + offsetY,
              Math.max(rel2.label.width, rel2.techn.width),
              rel2.techn.height,
              { fill: textColor, "font-style": "italic" },
              messageConf
            );
          }
        }
      }, "drawRels");
      drawBoundary = /* @__PURE__ */ __name(function(elem, boundary, conf5) {
        const boundaryElem = elem.append("g");
        let fillColor = boundary.bgColor ? boundary.bgColor : "none";
        let strokeColor = boundary.borderColor ? boundary.borderColor : "#444444";
        let fontColor = boundary.fontColor ? boundary.fontColor : "black";
        let attrsValue = { "stroke-width": 1, "stroke-dasharray": "7.0,7.0" };
        if (boundary.nodeType) {
          attrsValue = { "stroke-width": 1 };
        }
        let rectData = {
          x: boundary.x,
          y: boundary.y,
          fill: fillColor,
          stroke: strokeColor,
          width: boundary.width,
          height: boundary.height,
          rx: 2.5,
          ry: 2.5,
          attrs: attrsValue
        };
        drawRect2(boundaryElem, rectData);
        let boundaryConf = conf5.boundaryFont();
        boundaryConf.fontWeight = "bold";
        boundaryConf.fontSize = boundaryConf.fontSize + 2;
        boundaryConf.fontColor = fontColor;
        _drawTextCandidateFunc(conf5)(
          boundary.label.text,
          boundaryElem,
          boundary.x,
          boundary.y + boundary.label.Y,
          boundary.width,
          boundary.height,
          { fill: "#444444" },
          boundaryConf
        );
        if (boundary.type && boundary.type.text !== "") {
          boundaryConf = conf5.boundaryFont();
          boundaryConf.fontColor = fontColor;
          _drawTextCandidateFunc(conf5)(
            boundary.type.text,
            boundaryElem,
            boundary.x,
            boundary.y + boundary.type.Y,
            boundary.width,
            boundary.height,
            { fill: "#444444" },
            boundaryConf
          );
        }
        if (boundary.descr && boundary.descr.text !== "") {
          boundaryConf = conf5.boundaryFont();
          boundaryConf.fontSize = boundaryConf.fontSize - 2;
          boundaryConf.fontColor = fontColor;
          _drawTextCandidateFunc(conf5)(
            boundary.descr.text,
            boundaryElem,
            boundary.x,
            boundary.y + boundary.descr.Y,
            boundary.width,
            boundary.height,
            { fill: "#444444" },
            boundaryConf
          );
        }
      }, "drawBoundary");
      drawC4Shape = /* @__PURE__ */ __name(function(elem, c4Shape, conf5) {
        let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf5[c4Shape.typeC4Shape.text + "_bg_color"];
        let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf5[c4Shape.typeC4Shape.text + "_border_color"];
        let fontColor = c4Shape.fontColor ? c4Shape.fontColor : "#FFFFFF";
        let personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";
        switch (c4Shape.typeC4Shape.text) {
          case "person":
            personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";
            break;
          case "external_person":
            personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";
            break;
        }
        const c4ShapeElem = elem.append("g");
        c4ShapeElem.attr("class", "person-man");
        const rect3 = getNoteRect();
        switch (c4Shape.typeC4Shape.text) {
          case "person":
          case "external_person":
          case "system":
          case "external_system":
          case "container":
          case "external_container":
          case "component":
          case "external_component":
            rect3.x = c4Shape.x;
            rect3.y = c4Shape.y;
            rect3.fill = fillColor;
            rect3.width = c4Shape.width;
            rect3.height = c4Shape.height;
            rect3.stroke = strokeColor;
            rect3.rx = 2.5;
            rect3.ry = 2.5;
            rect3.attrs = { "stroke-width": 0.5 };
            drawRect2(c4ShapeElem, rect3);
            break;
          case "system_db":
          case "external_system_db":
          case "container_db":
          case "external_container_db":
          case "component_db":
          case "external_component_db":
            c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
              "d",
              "Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2).replaceAll("height", c4Shape.height)
            );
            c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
              "d",
              "Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2)
            );
            break;
          case "system_queue":
          case "external_system_queue":
          case "container_queue":
          case "external_container_queue":
          case "component_queue":
          case "external_component_queue":
            c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
              "d",
              "Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("width", c4Shape.width).replaceAll("half", c4Shape.height / 2)
            );
            c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
              "d",
              "Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx", c4Shape.x + c4Shape.width).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.height / 2)
            );
            break;
        }
        let c4ShapeFontConf = getC4ShapeFont(conf5, c4Shape.typeC4Shape.text);
        c4ShapeElem.append("text").attr("fill", fontColor).attr("font-family", c4ShapeFontConf.fontFamily).attr("font-size", c4ShapeFontConf.fontSize - 2).attr("font-style", "italic").attr("lengthAdjust", "spacing").attr("textLength", c4Shape.typeC4Shape.width).attr("x", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr("y", c4Shape.y + c4Shape.typeC4Shape.Y).text("<<" + c4Shape.typeC4Shape.text + ">>");
        switch (c4Shape.typeC4Shape.text) {
          case "person":
          case "external_person":
            drawImage2(
              c4ShapeElem,
              48,
              48,
              c4Shape.x + c4Shape.width / 2 - 24,
              c4Shape.y + c4Shape.image.Y,
              personImg
            );
            break;
        }
        let textFontConf = conf5[c4Shape.typeC4Shape.text + "Font"]();
        textFontConf.fontWeight = "bold";
        textFontConf.fontSize = textFontConf.fontSize + 2;
        textFontConf.fontColor = fontColor;
        _drawTextCandidateFunc(conf5)(
          c4Shape.label.text,
          c4ShapeElem,
          c4Shape.x,
          c4Shape.y + c4Shape.label.Y,
          c4Shape.width,
          c4Shape.height,
          { fill: fontColor },
          textFontConf
        );
        textFontConf = conf5[c4Shape.typeC4Shape.text + "Font"]();
        textFontConf.fontColor = fontColor;
        if (c4Shape.techn && c4Shape.techn?.text !== "") {
          _drawTextCandidateFunc(conf5)(
            c4Shape.techn.text,
            c4ShapeElem,
            c4Shape.x,
            c4Shape.y + c4Shape.techn.Y,
            c4Shape.width,
            c4Shape.height,
            { fill: fontColor, "font-style": "italic" },
            textFontConf
          );
        } else if (c4Shape.type && c4Shape.type.text !== "") {
          _drawTextCandidateFunc(conf5)(
            c4Shape.type.text,
            c4ShapeElem,
            c4Shape.x,
            c4Shape.y + c4Shape.type.Y,
            c4Shape.width,
            c4Shape.height,
            { fill: fontColor, "font-style": "italic" },
            textFontConf
          );
        }
        if (c4Shape.descr && c4Shape.descr.text !== "") {
          textFontConf = conf5.personFont();
          textFontConf.fontColor = fontColor;
          _drawTextCandidateFunc(conf5)(
            c4Shape.descr.text,
            c4ShapeElem,
            c4Shape.x,
            c4Shape.y + c4Shape.descr.Y,
            c4Shape.width,
            c4Shape.height,
            { fill: fontColor },
            textFontConf
          );
        }
        return c4Shape.height;
      }, "drawC4Shape");
      insertDatabaseIcon = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("symbol").attr("id", id41 + "-database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr(
          "d",
          "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"
        );
      }, "insertDatabaseIcon");
      insertComputerIcon = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("symbol").attr("id", id41 + "-computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
          "d",
          "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"
        );
      }, "insertComputerIcon");
      insertClockIcon = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("symbol").attr("id", id41 + "-clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
          "d",
          "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"
        );
      }, "insertClockIcon");
      insertArrowHead = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z");
      }, "insertArrowHead");
      insertArrowEnd = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-arrowend").attr("refX", 1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 z");
      }, "insertArrowEnd");
      insertArrowFilledHead = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
      }, "insertArrowFilledHead");
      insertArrowCrossHead = /* @__PURE__ */ __name(function(elem, id41) {
        const defs2 = elem.append("defs");
        const marker = defs2.append("marker").attr("id", id41 + "-crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 16).attr("refY", 4);
        marker.append("path").attr("fill", "black").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 9,2 V 6 L16,4 Z");
        marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 0,1 L 6,7 M 6,1 L 0,7");
      }, "insertArrowCrossHead");
      getC4ShapeFont = /* @__PURE__ */ __name((cnf, typeC4Shape) => {
        return {
          fontFamily: cnf[typeC4Shape + "FontFamily"],
          fontSize: cnf[typeC4Shape + "FontSize"],
          fontWeight: cnf[typeC4Shape + "FontWeight"]
        };
      }, "getC4ShapeFont");
      _drawTextCandidateFunc = /* @__PURE__ */ (function() {
        function byText(content, g2, x5, y6, width3, height2, textAttrs) {
          const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6 + height2 / 2 + 5).style("text-anchor", "middle").text(content);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byText, "byText");
        function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const { fontSize, fontFamily, fontWeight } = conf5;
          const lines = content.split(common_default.lineBreakRegex);
          for (let i2 = 0; i2 < lines.length; i2++) {
            const dy = i2 * fontSize - fontSize * (lines.length - 1) / 2;
            const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily);
            text4.append("tspan").attr("dy", dy).text(lines[i2]).attr("alignment-baseline", "mathematical");
            _setTextAttrs(text4, textAttrs);
          }
        }
        __name(byTspan, "byTspan");
        function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const s2 = g2.append("switch");
          const f2 = s2.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2);
          const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
          text4.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
          byTspan(content, s2, x5, y6, width3, height2, textAttrs, conf5);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byFo, "byFo");
        function _setTextAttrs(toText, fromTextAttrsDict) {
          for (const key in fromTextAttrsDict) {
            if (fromTextAttrsDict.hasOwnProperty(key)) {
              toText.attr(key, fromTextAttrsDict[key]);
            }
          }
        }
        __name(_setTextAttrs, "_setTextAttrs");
        return function(conf5) {
          return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan;
        };
      })();
      svgDraw_default = {
        drawRect: drawRect2,
        drawBoundary,
        drawC4Shape,
        drawRels,
        drawImage: drawImage2,
        insertArrowHead,
        insertArrowEnd,
        insertArrowFilledHead,
        insertArrowCrossHead,
        insertDatabaseIcon,
        insertComputerIcon,
        insertClockIcon
      };
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/predicate/isLength.mjs
  function isLength(value2) {
    return Number.isSafeInteger(value2) && value2 >= 0;
  }
  var init_isLength = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/predicate/isLength.mjs"() {
      "use strict";
      __name(isLength, "isLength");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.mjs
  function isArrayLike(value2) {
    return value2 != null && typeof value2 !== "function" && isLength(value2.length);
  }
  var init_isArrayLike = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.mjs"() {
      "use strict";
      init_isLength();
      __name(isArrayLike, "isArrayLike");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs
  function isUnsafeProperty(key) {
    return key === "__proto__";
  }
  var init_isUnsafeProperty = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs"() {
      "use strict";
      __name(isUnsafeProperty, "isUnsafeProperty");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/predicate/isPrimitive.mjs
  function isPrimitive(value2) {
    return value2 == null || typeof value2 !== "object" && typeof value2 !== "function";
  }
  var init_isPrimitive = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/predicate/isPrimitive.mjs"() {
      "use strict";
      __name(isPrimitive, "isPrimitive");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs
  function getSymbols(object3) {
    return Object.getOwnPropertySymbols(object3).filter((symbol) => Object.prototype.propertyIsEnumerable.call(object3, symbol));
  }
  var init_getSymbols = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs"() {
      "use strict";
      __name(getSymbols, "getSymbols");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/getTag.mjs
  function getTag(value2) {
    if (value2 == null) {
      return value2 === void 0 ? "[object Undefined]" : "[object Null]";
    }
    return Object.prototype.toString.call(value2);
  }
  var init_getTag = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/getTag.mjs"() {
      "use strict";
      __name(getTag, "getTag");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/tags.mjs
  var regexpTag, stringTag, numberTag, booleanTag, argumentsTag, symbolTag, dateTag, mapTag, setTag, arrayTag, arrayBufferTag, objectTag, dataViewTag, uint8ArrayTag, uint8ClampedArrayTag, uint16ArrayTag, uint32ArrayTag, int8ArrayTag, int16ArrayTag, int32ArrayTag, float32ArrayTag, float64ArrayTag;
  var init_tags = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/tags.mjs"() {
      "use strict";
      regexpTag = "[object RegExp]";
      stringTag = "[object String]";
      numberTag = "[object Number]";
      booleanTag = "[object Boolean]";
      argumentsTag = "[object Arguments]";
      symbolTag = "[object Symbol]";
      dateTag = "[object Date]";
      mapTag = "[object Map]";
      setTag = "[object Set]";
      arrayTag = "[object Array]";
      arrayBufferTag = "[object ArrayBuffer]";
      objectTag = "[object Object]";
      dataViewTag = "[object DataView]";
      uint8ArrayTag = "[object Uint8Array]";
      uint8ClampedArrayTag = "[object Uint8ClampedArray]";
      uint16ArrayTag = "[object Uint16Array]";
      uint32ArrayTag = "[object Uint32Array]";
      int8ArrayTag = "[object Int8Array]";
      int16ArrayTag = "[object Int16Array]";
      int32ArrayTag = "[object Int32Array]";
      float32ArrayTag = "[object Float32Array]";
      float64ArrayTag = "[object Float64Array]";
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/predicate/isTypedArray.mjs
  function isTypedArray(x5) {
    return ArrayBuffer.isView(x5) && !(x5 instanceof DataView);
  }
  var init_isTypedArray = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/predicate/isTypedArray.mjs"() {
      "use strict";
      __name(isTypedArray, "isTypedArray");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/object/cloneDeepWith.mjs
  function cloneDeepWith(obj, cloneValue) {
    return cloneDeepWithImpl(obj, void 0, obj, /* @__PURE__ */ new Map(), cloneValue);
  }
  function cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = /* @__PURE__ */ new Map(), cloneValue = void 0) {
    const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);
    if (cloned !== void 0) {
      return cloned;
    }
    if (isPrimitive(valueToClone)) {
      return valueToClone;
    }
    if (stack.has(valueToClone)) {
      return stack.get(valueToClone);
    }
    if (Array.isArray(valueToClone)) {
      const result = new Array(valueToClone.length);
      stack.set(valueToClone, result);
      for (let i2 = 0; i2 < valueToClone.length; i2++) {
        result[i2] = cloneDeepWithImpl(valueToClone[i2], i2, objectToClone, stack, cloneValue);
      }
      if (Object.hasOwn(valueToClone, "index")) {
        result.index = valueToClone.index;
      }
      if (Object.hasOwn(valueToClone, "input")) {
        result.input = valueToClone.input;
      }
      return result;
    }
    if (valueToClone instanceof Date) {
      return new Date(valueToClone.getTime());
    }
    if (valueToClone instanceof RegExp) {
      const result = new RegExp(valueToClone.source, valueToClone.flags);
      result.lastIndex = valueToClone.lastIndex;
      return result;
    }
    if (valueToClone instanceof Map) {
      const result = /* @__PURE__ */ new Map();
      stack.set(valueToClone, result);
      for (const [key, value2] of valueToClone) {
        result.set(key, cloneDeepWithImpl(value2, key, objectToClone, stack, cloneValue));
      }
      return result;
    }
    if (valueToClone instanceof Set) {
      const result = /* @__PURE__ */ new Set();
      stack.set(valueToClone, result);
      for (const value2 of valueToClone) {
        result.add(cloneDeepWithImpl(value2, void 0, objectToClone, stack, cloneValue));
      }
      return result;
    }
    if (typeof Buffer !== "undefined" && Buffer.isBuffer(valueToClone)) {
      return valueToClone.subarray();
    }
    if (isTypedArray(valueToClone)) {
      const result = new (Object.getPrototypeOf(valueToClone)).constructor(valueToClone.length);
      stack.set(valueToClone, result);
      for (let i2 = 0; i2 < valueToClone.length; i2++) {
        result[i2] = cloneDeepWithImpl(valueToClone[i2], i2, objectToClone, stack, cloneValue);
      }
      return result;
    }
    if (valueToClone instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && valueToClone instanceof SharedArrayBuffer) {
      return valueToClone.slice(0);
    }
    if (valueToClone instanceof DataView) {
      const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);
      stack.set(valueToClone, result);
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    if (typeof File !== "undefined" && valueToClone instanceof File) {
      const result = new File([valueToClone], valueToClone.name, {
        type: valueToClone.type
      });
      stack.set(valueToClone, result);
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    if (typeof Blob !== "undefined" && valueToClone instanceof Blob) {
      const result = new Blob([valueToClone], { type: valueToClone.type });
      stack.set(valueToClone, result);
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    if (valueToClone instanceof Error) {
      const result = structuredClone(valueToClone);
      stack.set(valueToClone, result);
      result.message = valueToClone.message;
      result.name = valueToClone.name;
      result.stack = valueToClone.stack;
      result.cause = valueToClone.cause;
      result.constructor = valueToClone.constructor;
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    if (valueToClone instanceof Boolean) {
      const result = new Boolean(valueToClone.valueOf());
      stack.set(valueToClone, result);
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    if (valueToClone instanceof Number) {
      const result = new Number(valueToClone.valueOf());
      stack.set(valueToClone, result);
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    if (valueToClone instanceof String) {
      const result = new String(valueToClone.valueOf());
      stack.set(valueToClone, result);
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    if (typeof valueToClone === "object" && isCloneableObject(valueToClone)) {
      const result = Object.create(Object.getPrototypeOf(valueToClone));
      stack.set(valueToClone, result);
      copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
      return result;
    }
    return valueToClone;
  }
  function copyProperties(target, source, objectToClone = target, stack, cloneValue) {
    const keys3 = [...Object.keys(source), ...getSymbols(source)];
    for (let i2 = 0; i2 < keys3.length; i2++) {
      const key = keys3[i2];
      const descriptor = Object.getOwnPropertyDescriptor(target, key);
      if (descriptor == null || descriptor.writable) {
        target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);
      }
    }
  }
  function isCloneableObject(object3) {
    switch (getTag(object3)) {
      case argumentsTag:
      case arrayTag:
      case arrayBufferTag:
      case dataViewTag:
      case booleanTag:
      case dateTag:
      case float32ArrayTag:
      case float64ArrayTag:
      case int8ArrayTag:
      case int16ArrayTag:
      case int32ArrayTag:
      case mapTag:
      case numberTag:
      case objectTag:
      case regexpTag:
      case setTag:
      case stringTag:
      case symbolTag:
      case uint8ArrayTag:
      case uint8ClampedArrayTag:
      case uint16ArrayTag:
      case uint32ArrayTag: {
        return true;
      }
      default: {
        return false;
      }
    }
  }
  var init_cloneDeepWith = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/object/cloneDeepWith.mjs"() {
      "use strict";
      init_getSymbols();
      init_getTag();
      init_tags();
      init_isPrimitive();
      init_isTypedArray();
      __name(cloneDeepWith, "cloneDeepWith");
      __name(cloneDeepWithImpl, "cloneDeepWithImpl");
      __name(copyProperties, "copyProperties");
      __name(isCloneableObject, "isCloneableObject");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.mjs
  function cloneDeepWith2(obj, customizer) {
    return cloneDeepWith(obj, (value2, key, object3, stack) => {
      const cloned = customizer?.(value2, key, object3, stack);
      if (cloned !== void 0) {
        return cloned;
      }
      if (typeof obj !== "object") {
        return void 0;
      }
      if (getTag(obj) === objectTag && typeof obj.constructor !== "function") {
        const result = {};
        stack.set(obj, result);
        copyProperties(result, obj, object3, stack);
        return result;
      }
      switch (Object.prototype.toString.call(obj)) {
        case numberTag:
        case stringTag:
        case booleanTag: {
          const result = new obj.constructor(obj?.valueOf());
          copyProperties(result, obj);
          return result;
        }
        case argumentsTag: {
          const result = {};
          copyProperties(result, obj);
          result.length = obj.length;
          result[Symbol.iterator] = obj[Symbol.iterator];
          return result;
        }
        default: {
          return void 0;
        }
      }
    });
  }
  var init_cloneDeepWith2 = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.mjs"() {
      "use strict";
      init_cloneDeepWith();
      init_getTag();
      init_tags();
      __name(cloneDeepWith2, "cloneDeepWith");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/cloneDeep.mjs
  function cloneDeep(obj) {
    return cloneDeepWith2(obj);
  }
  var init_cloneDeep = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/cloneDeep.mjs"() {
      "use strict";
      init_cloneDeepWith2();
      __name(cloneDeep, "cloneDeep");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArguments.mjs
  function isArguments(value2) {
    return value2 !== null && typeof value2 === "object" && getTag(value2) === "[object Arguments]";
  }
  var init_isArguments = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArguments.mjs"() {
      "use strict";
      init_getTag();
      __name(isArguments, "isArguments");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs
  function isObjectLike(value2) {
    return typeof value2 === "object" && value2 !== null;
  }
  var init_isObjectLike = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs"() {
      "use strict";
      __name(isObjectLike, "isObjectLike");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.mjs
  function isArrayLikeObject(value2) {
    return isObjectLike(value2) && isArrayLike(value2);
  }
  var init_isArrayLikeObject = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.mjs"() {
      "use strict";
      init_isArrayLike();
      init_isObjectLike();
      __name(isArrayLikeObject, "isArrayLikeObject");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArray.mjs
  function isArray(value2) {
    return Array.isArray(value2);
  }
  var init_isArray = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isArray.mjs"() {
      "use strict";
      __name(isArray, "isArray");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/function/memoize.mjs
  function memoize(func, resolver3) {
    if (typeof func !== "function" || resolver3 != null && typeof resolver3 !== "function") {
      throw new TypeError("Expected a function");
    }
    const memoized = /* @__PURE__ */ __name(function(...args) {
      const key = resolver3 ? resolver3.apply(this, args) : args[0];
      const cache3 = memoized.cache;
      if (cache3.has(key)) {
        return cache3.get(key);
      }
      const result = func.apply(this, args);
      memoized.cache = cache3.set(key, result) || cache3;
      return result;
    }, "memoized");
    const CacheConstructor = memoize.Cache || Map;
    memoized.cache = new CacheConstructor();
    return memoized;
  }
  var init_memoize = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/function/memoize.mjs"() {
      "use strict";
      __name(memoize, "memoize");
      memoize.Cache = Map;
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/function/noop.mjs
  function noop2() {
  }
  var init_noop2 = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/function/noop.mjs"() {
      "use strict";
      __name(noop2, "noop");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs
  function isPrototype(value2) {
    const constructor = value2?.constructor;
    const prototype = typeof constructor === "function" ? constructor.prototype : Object.prototype;
    return value2 === prototype;
  }
  var init_isPrototype = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs"() {
      "use strict";
      __name(isPrototype, "isPrototype");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.mjs
  function isTypedArray2(x5) {
    return isTypedArray(x5);
  }
  var init_isTypedArray2 = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.mjs"() {
      "use strict";
      init_isTypedArray();
      __name(isTypedArray2, "isTypedArray");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/clone.mjs
  function clone2(obj) {
    if (isPrimitive(obj)) {
      return obj;
    }
    const tag = getTag(obj);
    if (!isCloneableObject2(obj)) {
      return {};
    }
    if (isArray(obj)) {
      const result2 = Array.from(obj);
      if (obj.length > 0 && typeof obj[0] === "string" && Object.hasOwn(obj, "index")) {
        result2.index = obj.index;
        result2.input = obj.input;
      }
      return result2;
    }
    if (isTypedArray2(obj)) {
      const typedArray = obj;
      const Ctor = typedArray.constructor;
      return new Ctor(typedArray.buffer, typedArray.byteOffset, typedArray.length);
    }
    if (tag === arrayBufferTag) {
      return new ArrayBuffer(obj.byteLength);
    }
    if (tag === dataViewTag) {
      const dataView = obj;
      const buffer = dataView.buffer;
      const byteOffset = dataView.byteOffset;
      const byteLength = dataView.byteLength;
      const clonedBuffer = new ArrayBuffer(byteLength);
      const srcView = new Uint8Array(buffer, byteOffset, byteLength);
      const destView = new Uint8Array(clonedBuffer);
      destView.set(srcView);
      return new DataView(clonedBuffer);
    }
    if (tag === booleanTag || tag === numberTag || tag === stringTag) {
      const Ctor = obj.constructor;
      const clone9 = new Ctor(obj.valueOf());
      if (tag === stringTag) {
        cloneStringObjectProperties(clone9, obj);
      } else {
        copyOwnProperties(clone9, obj);
      }
      return clone9;
    }
    if (tag === dateTag) {
      return new Date(Number(obj));
    }
    if (tag === regexpTag) {
      const regExp = obj;
      const clone9 = new RegExp(regExp.source, regExp.flags);
      clone9.lastIndex = regExp.lastIndex;
      return clone9;
    }
    if (tag === symbolTag) {
      return Object(Symbol.prototype.valueOf.call(obj));
    }
    if (tag === mapTag) {
      const map6 = obj;
      const result2 = /* @__PURE__ */ new Map();
      map6.forEach((obj2, key) => {
        result2.set(key, obj2);
      });
      return result2;
    }
    if (tag === setTag) {
      const set5 = obj;
      const result2 = /* @__PURE__ */ new Set();
      set5.forEach((obj2) => {
        result2.add(obj2);
      });
      return result2;
    }
    if (tag === argumentsTag) {
      const args = obj;
      const result2 = {};
      copyOwnProperties(result2, args);
      result2.length = args.length;
      result2[Symbol.iterator] = args[Symbol.iterator];
      return result2;
    }
    const result = {};
    copyPrototype(result, obj);
    copyOwnProperties(result, obj);
    copySymbolProperties(result, obj);
    return result;
  }
  function isCloneableObject2(object3) {
    switch (getTag(object3)) {
      case argumentsTag:
      case arrayTag:
      case arrayBufferTag:
      case dataViewTag:
      case booleanTag:
      case dateTag:
      case float32ArrayTag:
      case float64ArrayTag:
      case int8ArrayTag:
      case int16ArrayTag:
      case int32ArrayTag:
      case mapTag:
      case numberTag:
      case objectTag:
      case regexpTag:
      case setTag:
      case stringTag:
      case symbolTag:
      case uint8ArrayTag:
      case uint8ClampedArrayTag:
      case uint16ArrayTag:
      case uint32ArrayTag: {
        return true;
      }
      default: {
        return false;
      }
    }
  }
  function copyOwnProperties(target, source) {
    for (const key in source) {
      if (Object.hasOwn(source, key)) {
        target[key] = source[key];
      }
    }
  }
  function copySymbolProperties(target, source) {
    const symbols2 = Object.getOwnPropertySymbols(source);
    for (let i2 = 0; i2 < symbols2.length; i2++) {
      const symbol = symbols2[i2];
      if (Object.prototype.propertyIsEnumerable.call(source, symbol)) {
        target[symbol] = source[symbol];
      }
    }
  }
  function cloneStringObjectProperties(target, source) {
    const stringLength = source.valueOf().length;
    for (const key in source) {
      if (Object.hasOwn(source, key) && (Number.isNaN(Number(key)) || Number(key) >= stringLength)) {
        target[key] = source[key];
      }
    }
  }
  function copyPrototype(target, source) {
    const proto = Object.getPrototypeOf(source);
    if (proto !== null) {
      const Ctor = source.constructor;
      if (typeof Ctor === "function") {
        Object.setPrototypeOf(target, proto);
      }
    }
  }
  var init_clone2 = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/clone.mjs"() {
      "use strict";
      init_isPrimitive();
      init_getTag();
      init_tags();
      init_isArray();
      init_isTypedArray2();
      __name(clone2, "clone");
      __name(isCloneableObject2, "isCloneableObject");
      __name(copyOwnProperties, "copyOwnProperties");
      __name(copySymbolProperties, "copySymbolProperties");
      __name(cloneStringObjectProperties, "cloneStringObjectProperties");
      __name(copyPrototype, "copyPrototype");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.mjs
  function isPlainObject(object3) {
    if (typeof object3 !== "object") {
      return false;
    }
    if (object3 == null) {
      return false;
    }
    if (Object.getPrototypeOf(object3) === null) {
      return true;
    }
    if (Object.prototype.toString.call(object3) !== "[object Object]") {
      const tag = object3[Symbol.toStringTag];
      if (tag == null) {
        return false;
      }
      const isTagReadonly = !Object.getOwnPropertyDescriptor(object3, Symbol.toStringTag)?.writable;
      if (isTagReadonly) {
        return false;
      }
      return object3.toString() === `[object ${tag}]`;
    }
    let proto = object3;
    while (Object.getPrototypeOf(proto) !== null) {
      proto = Object.getPrototypeOf(proto);
    }
    return Object.getPrototypeOf(object3) === proto;
  }
  var init_isPlainObject = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.mjs"() {
      "use strict";
      __name(isPlainObject, "isPlainObject");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/object/clone.mjs
  function clone3(obj) {
    if (isPrimitive(obj)) {
      return obj;
    }
    if (Array.isArray(obj) || isTypedArray(obj) || obj instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && obj instanceof SharedArrayBuffer) {
      return obj.slice(0);
    }
    const prototype = Object.getPrototypeOf(obj);
    if (prototype == null) {
      return Object.assign(Object.create(prototype), obj);
    }
    const Constructor = prototype.constructor;
    if (obj instanceof Date || obj instanceof Map || obj instanceof Set) {
      return new Constructor(obj);
    }
    if (obj instanceof RegExp) {
      const newRegExp = new Constructor(obj);
      newRegExp.lastIndex = obj.lastIndex;
      return newRegExp;
    }
    if (obj instanceof DataView) {
      return new Constructor(obj.buffer.slice(0));
    }
    if (obj instanceof Error) {
      let newError;
      if (obj instanceof AggregateError) {
        newError = new Constructor(obj.errors, obj.message, { cause: obj.cause });
      } else {
        newError = new Constructor(obj.message, { cause: obj.cause });
      }
      newError.stack = obj.stack;
      Object.assign(newError, obj);
      return newError;
    }
    if (typeof File !== "undefined" && obj instanceof File) {
      const newFile = new Constructor([obj], obj.name, { type: obj.type, lastModified: obj.lastModified });
      return newFile;
    }
    if (typeof obj === "object") {
      const newObject = Object.create(prototype);
      return Object.assign(newObject, obj);
    }
    return obj;
  }
  var init_clone3 = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/object/clone.mjs"() {
      "use strict";
      init_isPrimitive();
      init_isTypedArray();
      __name(clone3, "clone");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/mergeWith.mjs
  function mergeWith(object3, ...otherArgs) {
    const sources = otherArgs.slice(0, -1);
    const merge6 = otherArgs[otherArgs.length - 1];
    let result = object3;
    for (let i2 = 0; i2 < sources.length; i2++) {
      const source = sources[i2];
      result = mergeWithDeep(result, source, merge6, /* @__PURE__ */ new Map());
    }
    return result;
  }
  function mergeWithDeep(target, source, merge6, stack) {
    if (isPrimitive(target)) {
      target = Object(target);
    }
    if (source == null || typeof source !== "object") {
      return target;
    }
    if (stack.has(source)) {
      return clone3(stack.get(source));
    }
    stack.set(source, target);
    if (Array.isArray(source)) {
      source = source.slice();
      for (let i2 = 0; i2 < source.length; i2++) {
        source[i2] = source[i2] ?? void 0;
      }
    }
    const sourceKeys = [...Object.keys(source), ...getSymbols(source)];
    for (let i2 = 0; i2 < sourceKeys.length; i2++) {
      const key = sourceKeys[i2];
      if (isUnsafeProperty(key)) {
        continue;
      }
      let sourceValue = source[key];
      let targetValue = target[key];
      if (isArguments(sourceValue)) {
        sourceValue = { ...sourceValue };
      }
      if (isArguments(targetValue)) {
        targetValue = { ...targetValue };
      }
      if (typeof Buffer !== "undefined" && Buffer.isBuffer(sourceValue)) {
        sourceValue = cloneDeep(sourceValue);
      }
      if (Array.isArray(sourceValue)) {
        if (Array.isArray(targetValue)) {
          const cloned = [];
          const targetKeys = Reflect.ownKeys(targetValue);
          for (let i3 = 0; i3 < targetKeys.length; i3++) {
            const targetKey = targetKeys[i3];
            cloned[targetKey] = targetValue[targetKey];
          }
          targetValue = cloned;
        } else if (isArrayLikeObject(targetValue)) {
          const cloned = [];
          for (let i3 = 0; i3 < targetValue.length; i3++) {
            cloned[i3] = targetValue[i3];
          }
          targetValue = cloned;
        } else {
          targetValue = [];
        }
      }
      const merged = merge6(targetValue, sourceValue, key, target, source, stack);
      if (merged !== void 0) {
        target[key] = merged;
      } else if (Array.isArray(sourceValue)) {
        target[key] = mergeWithDeep(targetValue, sourceValue, merge6, stack);
      } else if (isObjectLike(targetValue) && isObjectLike(sourceValue) && (isPlainObject(targetValue) || isPlainObject(sourceValue) || isTypedArray2(targetValue) || isTypedArray2(sourceValue))) {
        target[key] = mergeWithDeep(targetValue, sourceValue, merge6, stack);
      } else if (targetValue == null && isPlainObject(sourceValue)) {
        target[key] = mergeWithDeep({}, sourceValue, merge6, stack);
      } else if (targetValue == null && isTypedArray2(sourceValue)) {
        target[key] = cloneDeep(sourceValue);
      } else if (targetValue === void 0 || sourceValue !== void 0) {
        target[key] = sourceValue;
      }
    }
    return target;
  }
  var init_mergeWith = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/mergeWith.mjs"() {
      "use strict";
      init_cloneDeep();
      init_isUnsafeProperty();
      init_clone3();
      init_isPrimitive();
      init_getSymbols();
      init_isArguments();
      init_isArrayLikeObject();
      init_isObjectLike();
      init_isPlainObject();
      init_isTypedArray2();
      __name(mergeWith, "mergeWith");
      __name(mergeWithDeep, "mergeWithDeep");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/merge.mjs
  function merge(object3, ...sources) {
    return mergeWith(object3, ...sources, noop2);
  }
  var init_merge4 = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/object/merge.mjs"() {
      "use strict";
      init_mergeWith();
      init_noop2();
      __name(merge, "merge");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs
  function isEmpty(value2) {
    if (value2 == null) {
      return true;
    }
    if (isArrayLike(value2)) {
      if (typeof value2.splice !== "function" && typeof value2 !== "string" && (typeof Buffer === "undefined" || !Buffer.isBuffer(value2)) && !isTypedArray2(value2) && !isArguments(value2)) {
        return false;
      }
      return value2.length === 0;
    }
    if (typeof value2 === "object") {
      if (value2 instanceof Map || value2 instanceof Set) {
        return value2.size === 0;
      }
      const keys3 = Object.keys(value2);
      if (isPrototype(value2)) {
        return keys3.filter((x5) => x5 !== "constructor").length === 0;
      }
      return keys3.length === 0;
    }
    return true;
  }
  var init_isEmpty = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs"() {
      "use strict";
      init_isArguments();
      init_isArrayLike();
      init_isTypedArray2();
      init_isPrototype();
      __name(isEmpty, "isEmpty");
    }
  });

  // ../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/index.mjs
  var init_compat = __esm({
    "../../node_modules/.pnpm/es-toolkit@1.45.1/node_modules/es-toolkit/dist/compat/index.mjs"() {
      "use strict";
      init_memoize();
      init_clone2();
      init_merge4();
      init_isEmpty();
    }
  });

  // src/utils.ts
  function interpolateToCurve(interpolate, defaultCurve) {
    if (!interpolate) {
      return defaultCurve;
    }
    const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;
    return d3CurveTypes[curveName] ?? defaultCurve;
  }
  function formatUrl(linkStr, config3) {
    const url = linkStr.trim();
    if (!url) {
      return void 0;
    }
    if (config3.securityLevel !== "loose") {
      return (0, import_sanitize_url3.sanitizeUrl)(url);
    }
    return url;
  }
  function distance(p1, p22) {
    if (!p1 || !p22) {
      return 0;
    }
    return Math.sqrt(Math.pow(p22.x - p1.x, 2) + Math.pow(p22.y - p1.y, 2));
  }
  function traverseEdge(points) {
    let prevPoint;
    let totalDistance = 0;
    points.forEach((point8) => {
      totalDistance += distance(point8, prevPoint);
      prevPoint = point8;
    });
    const remainingDistance = totalDistance / 2;
    return calculatePoint(points, remainingDistance);
  }
  function calcLabelPosition(points) {
    if (points.length === 1) {
      return points[0];
    }
    return traverseEdge(points);
  }
  function calcTerminalLabelPosition(terminalMarkerSize, position5, _points) {
    const points = structuredClone(_points);
    log.info("our points", points);
    if (position5 !== "start_left" && position5 !== "start_right") {
      points.reverse();
    }
    const distanceToCardinalityPoint = 25 + terminalMarkerSize;
    const center4 = calculatePoint(points, distanceToCardinalityPoint);
    const d3 = 10 + terminalMarkerSize * 0.5;
    const angle2 = Math.atan2(points[0].y - center4.y, points[0].x - center4.x);
    const cardinalityPosition = { x: 0, y: 0 };
    if (position5 === "start_left") {
      cardinalityPosition.x = Math.sin(angle2 + Math.PI) * d3 + (points[0].x + center4.x) / 2;
      cardinalityPosition.y = -Math.cos(angle2 + Math.PI) * d3 + (points[0].y + center4.y) / 2;
    } else if (position5 === "end_right") {
      cardinalityPosition.x = Math.sin(angle2 - Math.PI) * d3 + (points[0].x + center4.x) / 2 - 5;
      cardinalityPosition.y = -Math.cos(angle2 - Math.PI) * d3 + (points[0].y + center4.y) / 2 - 5;
    } else if (position5 === "end_left") {
      cardinalityPosition.x = Math.sin(angle2) * d3 + (points[0].x + center4.x) / 2 - 5;
      cardinalityPosition.y = -Math.cos(angle2) * d3 + (points[0].y + center4.y) / 2 - 5;
    } else {
      cardinalityPosition.x = Math.sin(angle2) * d3 + (points[0].x + center4.x) / 2;
      cardinalityPosition.y = -Math.cos(angle2) * d3 + (points[0].y + center4.y) / 2;
    }
    return cardinalityPosition;
  }
  function getStylesFromArray(arr) {
    let style3 = "";
    let labelStyle = "";
    for (const element3 of arr) {
      if (element3 !== void 0) {
        if (element3.startsWith("color:") || element3.startsWith("text-align:")) {
          labelStyle = labelStyle + element3 + ";";
        } else {
          style3 = style3 + element3 + ";";
        }
      }
    }
    return { style: style3, labelStyle };
  }
  function makeRandomHex(length2) {
    let result = "";
    const characters2 = "0123456789abcdef";
    const charactersLength = characters2.length;
    for (let i2 = 0; i2 < length2; i2++) {
      result += characters2.charAt(Math.floor(Math.random() * charactersLength));
    }
    return result;
  }
  function calculateTextHeight(text4, config3) {
    return calculateTextDimensions(text4, config3).height;
  }
  function calculateTextWidth(text4, config3) {
    return calculateTextDimensions(text4, config3).width;
  }
  function isDetailedError(error3) {
    return "str" in error3;
  }
  function cleanAndMerge(defaultData, data6) {
    return merge({}, defaultData, data6);
  }
  function handleUndefinedAttr(attrValue) {
    return attrValue ?? null;
  }
  function isLabelCoordinateInPath(point8, dAttr) {
    const roundedX = Math.round(point8.x);
    const roundedY = Math.round(point8.y);
    const sanitizedD = dAttr.replace(
      /(\d+\.\d+)/g,
      (match3) => Math.round(parseFloat(match3)).toString()
    );
    return sanitizedD.includes(roundedX.toString()) || sanitizedD.includes(roundedY.toString());
  }
  var import_sanitize_url3, ZERO_WIDTH_SPACE, d3CurveTypes, directiveWithoutOpen, detectInit, detectDirective, removeDirectives, isSubstringInArray, runFunc, roundNumber, calculatePoint, calcCardinalityPosition, cnt, generateId, random, getTextObj2, drawSimpleText, wrapLabel, breakString, calculateTextDimensions, InitIDGenerator, decoder, entityDecode, insertTitle, parseFontSize, utils_default2, encodeEntities, decodeEntities, getEdgeId;
  var init_utils2 = __esm({
    "src/utils.ts"() {
      "use strict";
      import_sanitize_url3 = __toESM(require_dist(), 1);
      init_src32();
      init_common();
      init_sanitizeDirective();
      init_logger();
      init_detectType();
      init_assignWithDepth();
      init_compat();
      init_regexes();
      ZERO_WIDTH_SPACE = "\u200B";
      d3CurveTypes = {
        curveBasis: basis_default2,
        curveBasisClosed: basisClosed_default2,
        curveBasisOpen: basisOpen_default,
        curveBumpX: bumpX,
        curveBumpY: bumpY,
        curveBundle: bundle_default,
        curveCardinalClosed: cardinalClosed_default,
        curveCardinalOpen: cardinalOpen_default,
        curveCardinal: cardinal_default,
        curveCatmullRomClosed: catmullRomClosed_default,
        curveCatmullRomOpen: catmullRomOpen_default,
        curveCatmullRom: catmullRom_default,
        curveLinear: linear_default,
        curveLinearClosed: linearClosed_default,
        curveMonotoneX: monotoneX,
        curveMonotoneY: monotoneY,
        curveNatural: natural_default,
        curveStep: step_default,
        curveStepAfter: stepAfter,
        curveStepBefore: stepBefore
      };
      directiveWithoutOpen = /\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
      detectInit = /* @__PURE__ */ __name(function(text4, config3) {
        const inits = detectDirective(text4, /(?:init\b)|(?:initialize\b)/);
        let results = {};
        if (Array.isArray(inits)) {
          const args = inits.map((init3) => init3.args);
          sanitizeDirective(args);
          results = assignWithDepth_default(results, [...args]);
        } else {
          results = inits.args;
        }
        if (!results) {
          return;
        }
        let type3 = detectType(text4, config3);
        const prop = "config";
        if (results[prop] !== void 0) {
          if (type3 === "flowchart-v2") {
            type3 = "flowchart";
          }
          results[type3] = results[prop];
          delete results[prop];
        }
        return results;
      }, "detectInit");
      detectDirective = /* @__PURE__ */ __name(function(text4, type3 = null) {
        try {
          const commentWithoutDirectives = new RegExp(
            `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*
`,
            "ig"
          );
          text4 = text4.trim().replace(commentWithoutDirectives, "").replace(/'/gm, '"');
          log.debug(
            `Detecting diagram directive${type3 !== null ? " type:" + type3 : ""} based on the text:${text4}`
          );
          let match3;
          const result = [];
          while ((match3 = directiveRegex.exec(text4)) !== null) {
            if (match3.index === directiveRegex.lastIndex) {
              directiveRegex.lastIndex++;
            }
            if (match3 && !type3 || type3 && match3[1]?.match(type3) || type3 && match3[2]?.match(type3)) {
              const type4 = match3[1] ? match3[1] : match3[2];
              const args = match3[3] ? match3[3].trim() : match3[4] ? JSON.parse(match3[4].trim()) : null;
              result.push({ type: type4, args });
            }
          }
          if (result.length === 0) {
            return { type: text4, args: null };
          }
          return result.length === 1 ? result[0] : result;
        } catch (error3) {
          log.error(
            `ERROR: ${error3.message} - Unable to parse directive type: '${type3}' based on the text: '${text4}'`
          );
          return { type: void 0, args: null };
        }
      }, "detectDirective");
      removeDirectives = /* @__PURE__ */ __name(function(text4) {
        return text4.replace(directiveRegex, "");
      }, "removeDirectives");
      isSubstringInArray = /* @__PURE__ */ __name(function(str2, arr) {
        for (const [i2, element3] of arr.entries()) {
          if (element3.match(str2)) {
            return i2;
          }
        }
        return -1;
      }, "isSubstringInArray");
      __name(interpolateToCurve, "interpolateToCurve");
      __name(formatUrl, "formatUrl");
      runFunc = /* @__PURE__ */ __name((functionName, ...params) => {
        const arrPaths = functionName.split(".");
        const len = arrPaths.length - 1;
        const fnName = arrPaths[len];
        let obj = window;
        for (let i2 = 0; i2 < len; i2++) {
          obj = obj[arrPaths[i2]];
          if (!obj) {
            log.error(`Function name: ${functionName} not found in window`);
            return;
          }
        }
        obj[fnName](...params);
      }, "runFunc");
      __name(distance, "distance");
      __name(traverseEdge, "traverseEdge");
      __name(calcLabelPosition, "calcLabelPosition");
      roundNumber = /* @__PURE__ */ __name((num, precision = 2) => {
        const factor = Math.pow(10, precision);
        return Math.round(num * factor) / factor;
      }, "roundNumber");
      calculatePoint = /* @__PURE__ */ __name((points, distanceToTraverse) => {
        let prevPoint = void 0;
        let remainingDistance = distanceToTraverse;
        for (const point8 of points) {
          if (prevPoint) {
            const vectorDistance = distance(point8, prevPoint);
            if (vectorDistance === 0) {
              return prevPoint;
            }
            if (vectorDistance < remainingDistance) {
              remainingDistance -= vectorDistance;
            } else {
              const distanceRatio = remainingDistance / vectorDistance;
              if (distanceRatio <= 0) {
                return prevPoint;
              }
              if (distanceRatio >= 1) {
                return { x: point8.x, y: point8.y };
              }
              if (distanceRatio > 0 && distanceRatio < 1) {
                return {
                  x: roundNumber((1 - distanceRatio) * prevPoint.x + distanceRatio * point8.x, 5),
                  y: roundNumber((1 - distanceRatio) * prevPoint.y + distanceRatio * point8.y, 5)
                };
              }
            }
          }
          prevPoint = point8;
        }
        throw new Error("Could not find a suitable point for the given distance");
      }, "calculatePoint");
      calcCardinalityPosition = /* @__PURE__ */ __name((isRelationTypePresent, points, initialPosition) => {
        log.info(`our points ${JSON.stringify(points)}`);
        if (points[0] !== initialPosition) {
          points = points.reverse();
        }
        const distanceToCardinalityPoint = 25;
        const center4 = calculatePoint(points, distanceToCardinalityPoint);
        const d3 = isRelationTypePresent ? 10 : 5;
        const angle2 = Math.atan2(points[0].y - center4.y, points[0].x - center4.x);
        const cardinalityPosition = { x: 0, y: 0 };
        cardinalityPosition.x = Math.sin(angle2) * d3 + (points[0].x + center4.x) / 2;
        cardinalityPosition.y = -Math.cos(angle2) * d3 + (points[0].y + center4.y) / 2;
        return cardinalityPosition;
      }, "calcCardinalityPosition");
      __name(calcTerminalLabelPosition, "calcTerminalLabelPosition");
      __name(getStylesFromArray, "getStylesFromArray");
      cnt = 0;
      generateId = /* @__PURE__ */ __name(() => {
        cnt++;
        return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt;
      }, "generateId");
      __name(makeRandomHex, "makeRandomHex");
      random = /* @__PURE__ */ __name((options2) => {
        return makeRandomHex(options2.length);
      }, "random");
      getTextObj2 = /* @__PURE__ */ __name(function() {
        return {
          x: 0,
          y: 0,
          fill: void 0,
          anchor: "start",
          style: "#666",
          width: 100,
          height: 100,
          textMargin: 0,
          rx: 0,
          ry: 0,
          valign: void 0,
          text: ""
        };
      }, "getTextObj");
      drawSimpleText = /* @__PURE__ */ __name(function(elem, textData) {
        const nText = textData.text.replace(common_default.lineBreakRegex, " ");
        const [, _fontSizePx] = parseFontSize(textData.fontSize);
        const textElem = elem.append("text");
        textElem.attr("x", textData.x);
        textElem.attr("y", textData.y);
        textElem.style("text-anchor", textData.anchor);
        textElem.style("font-family", textData.fontFamily);
        textElem.style("font-size", _fontSizePx);
        textElem.style("font-weight", textData.fontWeight);
        textElem.attr("fill", textData.fill);
        if (textData.class !== void 0) {
          textElem.attr("class", textData.class);
        }
        const span = textElem.append("tspan");
        span.attr("x", textData.x + textData.textMargin * 2);
        span.attr("fill", textData.fill);
        span.text(nText);
        return textElem;
      }, "drawSimpleText");
      wrapLabel = memoize(
        (label, maxWidth2, config3) => {
          if (!label) {
            return label;
          }
          config3 = Object.assign(
            { fontSize: 12, fontWeight: 400, fontFamily: "Arial", joinWith: "<br/>" },
            config3
          );
          if (common_default.lineBreakRegex.test(label)) {
            return label;
          }
          const words = label.split(" ").filter(Boolean);
          const completedLines = [];
          let nextLine = "";
          words.forEach((word, index) => {
            const wordLength = calculateTextWidth(`${word} `, config3);
            const nextLineLength = calculateTextWidth(nextLine, config3);
            if (wordLength > maxWidth2) {
              const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth2, "-", config3);
              completedLines.push(nextLine, ...hyphenatedStrings);
              nextLine = remainingWord;
            } else if (nextLineLength + wordLength >= maxWidth2) {
              completedLines.push(nextLine);
              nextLine = word;
            } else {
              nextLine = [nextLine, word].filter(Boolean).join(" ");
            }
            const currentWord = index + 1;
            const isLastWord = currentWord === words.length;
            if (isLastWord) {
              completedLines.push(nextLine);
            }
          });
          return completedLines.filter((line2) => line2 !== "").join(config3.joinWith);
        },
        (label, maxWidth2, config3) => `${label}${maxWidth2}${config3.fontSize}${config3.fontWeight}${config3.fontFamily}${config3.joinWith}`
      );
      breakString = memoize(
        (word, maxWidth2, hyphenCharacter = "-", config3) => {
          config3 = Object.assign(
            { fontSize: 12, fontWeight: 400, fontFamily: "Arial", margin: 0 },
            config3
          );
          const characters2 = [...word];
          const lines = [];
          let currentLine = "";
          characters2.forEach((character2, index) => {
            const nextLine = `${currentLine}${character2}`;
            const lineWidth = calculateTextWidth(nextLine, config3);
            if (lineWidth >= maxWidth2) {
              const currentCharacter = index + 1;
              const isLastLine = characters2.length === currentCharacter;
              const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;
              lines.push(isLastLine ? nextLine : hyphenatedNextLine);
              currentLine = "";
            } else {
              currentLine = nextLine;
            }
          });
          return { hyphenatedStrings: lines, remainingWord: currentLine };
        },
        (word, maxWidth2, hyphenCharacter = "-", config3) => `${word}${maxWidth2}${hyphenCharacter}${config3.fontSize}${config3.fontWeight}${config3.fontFamily}`
      );
      __name(calculateTextHeight, "calculateTextHeight");
      __name(calculateTextWidth, "calculateTextWidth");
      calculateTextDimensions = memoize(
        (text4, config3) => {
          const { fontSize = 12, fontFamily = "Arial", fontWeight = 400 } = config3;
          if (!text4) {
            return { width: 0, height: 0 };
          }
          const [, _fontSizePx] = parseFontSize(fontSize);
          const fontFamilies = ["sans-serif", fontFamily];
          const lines = text4.split(common_default.lineBreakRegex);
          const dims = [];
          const body = select_default2("body");
          if (!body.remove) {
            return { width: 0, height: 0, lineHeight: 0 };
          }
          const g2 = body.append("svg");
          for (const fontFamily2 of fontFamilies) {
            let cHeight = 0;
            const dim = { width: 0, height: 0, lineHeight: 0 };
            for (const line2 of lines) {
              const textObj = getTextObj2();
              textObj.text = line2 || ZERO_WIDTH_SPACE;
              const textElem = drawSimpleText(g2, textObj).style("font-size", _fontSizePx).style("font-weight", fontWeight).style("font-family", fontFamily2);
              const bBox = (textElem._groups || textElem)[0][0].getBBox();
              if (bBox.width === 0 && bBox.height === 0) {
                throw new Error("svg element not in render tree");
              }
              dim.width = Math.round(Math.max(dim.width, bBox.width));
              cHeight = Math.round(bBox.height);
              dim.height += cHeight;
              dim.lineHeight = Math.round(Math.max(dim.lineHeight, cHeight));
            }
            dims.push(dim);
          }
          g2.remove();
          const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;
          return dims[index];
        },
        (text4, config3) => `${text4}${config3.fontSize}${config3.fontWeight}${config3.fontFamily}`
      );
      InitIDGenerator = class {
        constructor(deterministic = false, seed) {
          this.count = 0;
          this.count = seed ? seed.length : 0;
          this.next = deterministic ? () => this.count++ : () => Date.now();
        }
        static {
          __name(this, "InitIDGenerator");
        }
      };
      entityDecode = /* @__PURE__ */ __name(function(html2) {
        decoder = decoder || document.createElement("div");
        html2 = escape(html2).replace(/%26/g, "&").replace(/%23/g, "#").replace(/%3B/g, ";");
        decoder.innerHTML = html2;
        return unescape(decoder.textContent);
      }, "entityDecode");
      __name(isDetailedError, "isDetailedError");
      insertTitle = /* @__PURE__ */ __name((parent4, cssClass, titleTopMargin, title2) => {
        if (!title2) {
          return;
        }
        const bounds4 = parent4.node()?.getBBox();
        if (!bounds4) {
          return;
        }
        parent4.append("text").text(title2).attr("text-anchor", "middle").attr("x", bounds4.x + bounds4.width / 2).attr("y", -titleTopMargin).attr("class", cssClass);
      }, "insertTitle");
      parseFontSize = /* @__PURE__ */ __name((fontSize) => {
        if (typeof fontSize === "number") {
          return [fontSize, fontSize + "px"];
        }
        const fontSizeNumber = parseInt(fontSize ?? "", 10);
        if (Number.isNaN(fontSizeNumber)) {
          return [void 0, void 0];
        } else if (fontSize === String(fontSizeNumber)) {
          return [fontSizeNumber, fontSize + "px"];
        } else {
          return [fontSizeNumber, fontSize];
        }
      }, "parseFontSize");
      __name(cleanAndMerge, "cleanAndMerge");
      utils_default2 = {
        assignWithDepth: assignWithDepth_default,
        wrapLabel,
        calculateTextHeight,
        calculateTextWidth,
        calculateTextDimensions,
        cleanAndMerge,
        detectInit,
        detectDirective,
        isSubstringInArray,
        interpolateToCurve,
        calcLabelPosition,
        calcCardinalityPosition,
        calcTerminalLabelPosition,
        formatUrl,
        getStylesFromArray,
        generateId,
        random,
        runFunc,
        entityDecode,
        insertTitle,
        isLabelCoordinateInPath,
        parseFontSize,
        InitIDGenerator
      };
      encodeEntities = /* @__PURE__ */ __name(function(text4) {
        let txt = text4;
        txt = txt.replace(/style.*:\S*#.*;/g, function(s2) {
          return s2.substring(0, s2.length - 1);
        });
        txt = txt.replace(/classDef.*:\S*#.*;/g, function(s2) {
          return s2.substring(0, s2.length - 1);
        });
        txt = txt.replace(/#\w+;/g, function(s2) {
          const innerTxt = s2.substring(1, s2.length - 1);
          const isInt = /^\+?\d+$/.test(innerTxt);
          if (isInt) {
            return "\uFB02\xB0\xB0" + innerTxt + "\xB6\xDF";
          } else {
            return "\uFB02\xB0" + innerTxt + "\xB6\xDF";
          }
        });
        return txt;
      }, "encodeEntities");
      decodeEntities = /* @__PURE__ */ __name(function(text4) {
        return text4.replace(/ﬂ°°/g, "&#").replace(/ﬂ°/g, "&").replace(/¶ß/g, ";");
      }, "decodeEntities");
      getEdgeId = /* @__PURE__ */ __name((from2, to, {
        counter: counter2 = 0,
        prefix,
        suffix
      }, id41) => {
        if (id41) {
          return id41;
        }
        return `${prefix ? `${prefix}_` : ""}${from2}_${to}_${counter2}${suffix ? `_${suffix}` : ""}`;
      }, "getEdgeId");
      __name(handleUndefinedAttr, "handleUndefinedAttr");
      __name(isLabelCoordinateInPath, "isLabelCoordinateInPath");
    }
  });

  // src/diagrams/c4/c4Renderer.js
  function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {
    if (!c4Shape[textType].width) {
      if (c4ShapeTextWrap) {
        c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf);
        c4Shape[textType].textLines = c4Shape[textType].text.split(common_default.lineBreakRegex).length;
        c4Shape[textType].width = textLimitWidth;
        c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf);
      } else {
        let lines = c4Shape[textType].text.split(common_default.lineBreakRegex);
        c4Shape[textType].textLines = lines.length;
        let lineHeight = 0;
        c4Shape[textType].height = 0;
        c4Shape[textType].width = 0;
        for (const line2 of lines) {
          c4Shape[textType].width = Math.max(
            calculateTextWidth(line2, textConf),
            c4Shape[textType].width
          );
          lineHeight = calculateTextHeight(line2, textConf);
          c4Shape[textType].height = c4Shape[textType].height + lineHeight;
        }
      }
    }
  }
  function drawInsideBoundary(diagram38, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) {
    let currentBounds = new Bounds(diagObj);
    currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow2, currentBoundaries.length);
    for (let [i2, currentBoundary] of currentBoundaries.entries()) {
      let Y3 = 0;
      currentBoundary.image = { width: 0, height: 0, Y: 0 };
      if (currentBoundary.sprite) {
        currentBoundary.image.width = 48;
        currentBoundary.image.height = 48;
        currentBoundary.image.Y = Y3;
        Y3 = currentBoundary.image.Y + currentBoundary.image.height;
      }
      let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap;
      let currentBoundaryLabelConf = boundaryFont(conf);
      currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;
      currentBoundaryLabelConf.fontWeight = "bold";
      calcC4ShapeTextWH(
        "label",
        currentBoundary,
        currentBoundaryTextWrap,
        currentBoundaryLabelConf,
        currentBounds.data.widthLimit
      );
      currentBoundary.label.Y = Y3 + 8;
      Y3 = currentBoundary.label.Y + currentBoundary.label.height;
      if (currentBoundary.type && currentBoundary.type.text !== "") {
        currentBoundary.type.text = "[" + currentBoundary.type.text + "]";
        let currentBoundaryTypeConf = boundaryFont(conf);
        calcC4ShapeTextWH(
          "type",
          currentBoundary,
          currentBoundaryTextWrap,
          currentBoundaryTypeConf,
          currentBounds.data.widthLimit
        );
        currentBoundary.type.Y = Y3 + 5;
        Y3 = currentBoundary.type.Y + currentBoundary.type.height;
      }
      if (currentBoundary.descr && currentBoundary.descr.text !== "") {
        let currentBoundaryDescrConf = boundaryFont(conf);
        currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;
        calcC4ShapeTextWH(
          "descr",
          currentBoundary,
          currentBoundaryTextWrap,
          currentBoundaryDescrConf,
          currentBounds.data.widthLimit
        );
        currentBoundary.descr.Y = Y3 + 20;
        Y3 = currentBoundary.descr.Y + currentBoundary.descr.height;
      }
      if (i2 == 0 || i2 % c4BoundaryInRow2 === 0) {
        let _x = parentBounds.data.startx + conf.diagramMarginX;
        let _y = parentBounds.data.stopy + conf.diagramMarginY + Y3;
        currentBounds.setData(_x, _x, _y, _y);
      } else {
        let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx;
        let _y = currentBounds.data.starty;
        currentBounds.setData(_x, _x, _y, _y);
      }
      currentBounds.name = currentBoundary.alias;
      let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias);
      let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias);
      if (currentPersonOrSystemKeys.length > 0) {
        drawC4ShapeArray(
          currentBounds,
          diagram38,
          currentPersonOrSystemArray,
          currentPersonOrSystemKeys
        );
      }
      parentBoundaryAlias = currentBoundary.alias;
      let nextCurrentBoundaries = diagObj.db.getBoundaries(parentBoundaryAlias);
      if (nextCurrentBoundaries.length > 0) {
        drawInsideBoundary(
          diagram38,
          parentBoundaryAlias,
          currentBounds,
          nextCurrentBoundaries,
          diagObj
        );
      }
      if (currentBoundary.alias !== "global") {
        drawBoundary2(diagram38, currentBoundary, currentBounds);
      }
      parentBounds.data.stopy = Math.max(
        currentBounds.data.stopy + conf.c4ShapeMargin,
        parentBounds.data.stopy
      );
      parentBounds.data.stopx = Math.max(
        currentBounds.data.stopx + conf.c4ShapeMargin,
        parentBounds.data.stopx
      );
      globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);
      globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);
    }
  }
  var globalBoundaryMaxX, globalBoundaryMaxY, c4ShapeInRow2, c4BoundaryInRow2, conf, Bounds, setConf, c4ShapeFont, boundaryFont, messageFont, drawBoundary2, drawC4ShapeArray, Point2, getIntersectPoint, getIntersectPoints, drawRels2, draw, c4Renderer_default;
  var init_c4Renderer = __esm({
    "src/diagrams/c4/c4Renderer.js"() {
      "use strict";
      init_src32();
      init_svgDraw();
      init_logger();
      init_c4Diagram();
      init_common();
      init_c4Db();
      init_diagramAPI();
      init_assignWithDepth();
      init_utils2();
      init_setupGraphViewbox();
      globalBoundaryMaxX = 0;
      globalBoundaryMaxY = 0;
      c4ShapeInRow2 = 4;
      c4BoundaryInRow2 = 2;
      parser.yy = c4Db_default;
      conf = {};
      Bounds = class {
        static {
          __name(this, "Bounds");
        }
        constructor(diagObj) {
          this.name = "";
          this.data = {};
          this.data.startx = void 0;
          this.data.stopx = void 0;
          this.data.starty = void 0;
          this.data.stopy = void 0;
          this.data.widthLimit = void 0;
          this.nextData = {};
          this.nextData.startx = void 0;
          this.nextData.stopx = void 0;
          this.nextData.starty = void 0;
          this.nextData.stopy = void 0;
          this.nextData.cnt = 0;
          setConf(diagObj.db.getConfig());
        }
        setData(startx, stopx, starty, stopy) {
          this.nextData.startx = this.data.startx = startx;
          this.nextData.stopx = this.data.stopx = stopx;
          this.nextData.starty = this.data.starty = starty;
          this.nextData.stopy = this.data.stopy = stopy;
        }
        updateVal(obj, key, val, fun) {
          if (obj[key] === void 0) {
            obj[key] = val;
          } else {
            obj[key] = fun(val, obj[key]);
          }
        }
        insert(c4Shape) {
          this.nextData.cnt = this.nextData.cnt + 1;
          let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2;
          let _stopx = _startx + c4Shape.width;
          let _starty = this.nextData.starty + c4Shape.margin * 2;
          let _stopy = _starty + c4Shape.height;
          if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow2) {
            _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX;
            _starty = this.nextData.stopy + c4Shape.margin * 2;
            this.nextData.stopx = _stopx = _startx + c4Shape.width;
            this.nextData.starty = this.nextData.stopy;
            this.nextData.stopy = _stopy = _starty + c4Shape.height;
            this.nextData.cnt = 1;
          }
          c4Shape.x = _startx;
          c4Shape.y = _starty;
          this.updateVal(this.data, "startx", _startx, Math.min);
          this.updateVal(this.data, "starty", _starty, Math.min);
          this.updateVal(this.data, "stopx", _stopx, Math.max);
          this.updateVal(this.data, "stopy", _stopy, Math.max);
          this.updateVal(this.nextData, "startx", _startx, Math.min);
          this.updateVal(this.nextData, "starty", _starty, Math.min);
          this.updateVal(this.nextData, "stopx", _stopx, Math.max);
          this.updateVal(this.nextData, "stopy", _stopy, Math.max);
        }
        init(diagObj) {
          this.name = "";
          this.data = {
            startx: void 0,
            stopx: void 0,
            starty: void 0,
            stopy: void 0,
            widthLimit: void 0
          };
          this.nextData = {
            startx: void 0,
            stopx: void 0,
            starty: void 0,
            stopy: void 0,
            cnt: 0
          };
          setConf(diagObj.db.getConfig());
        }
        bumpLastMargin(margin) {
          this.data.stopx += margin;
          this.data.stopy += margin;
        }
      };
      setConf = /* @__PURE__ */ __name(function(cnf) {
        assignWithDepth_default(conf, cnf);
        if (cnf.fontFamily) {
          conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily;
        }
        if (cnf.fontSize) {
          conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize;
        }
        if (cnf.fontWeight) {
          conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight;
        }
      }, "setConf");
      c4ShapeFont = /* @__PURE__ */ __name((cnf, typeC4Shape) => {
        return {
          fontFamily: cnf[typeC4Shape + "FontFamily"],
          fontSize: cnf[typeC4Shape + "FontSize"],
          fontWeight: cnf[typeC4Shape + "FontWeight"]
        };
      }, "c4ShapeFont");
      boundaryFont = /* @__PURE__ */ __name((cnf) => {
        return {
          fontFamily: cnf.boundaryFontFamily,
          fontSize: cnf.boundaryFontSize,
          fontWeight: cnf.boundaryFontWeight
        };
      }, "boundaryFont");
      messageFont = /* @__PURE__ */ __name((cnf) => {
        return {
          fontFamily: cnf.messageFontFamily,
          fontSize: cnf.messageFontSize,
          fontWeight: cnf.messageFontWeight
        };
      }, "messageFont");
      __name(calcC4ShapeTextWH, "calcC4ShapeTextWH");
      drawBoundary2 = /* @__PURE__ */ __name(function(diagram38, boundary, bounds4) {
        boundary.x = bounds4.data.startx;
        boundary.y = bounds4.data.starty;
        boundary.width = bounds4.data.stopx - bounds4.data.startx;
        boundary.height = bounds4.data.stopy - bounds4.data.starty;
        boundary.label.y = conf.c4ShapeMargin - 35;
        let boundaryTextWrap = boundary.wrap && conf.wrap;
        let boundaryLabelConf = boundaryFont(conf);
        boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;
        boundaryLabelConf.fontWeight = "bold";
        let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf);
        calcC4ShapeTextWH("label", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);
        svgDraw_default.drawBoundary(diagram38, boundary, conf);
      }, "drawBoundary");
      drawC4ShapeArray = /* @__PURE__ */ __name(function(currentBounds, diagram38, c4ShapeArray2, c4ShapeKeys) {
        let Y3 = 0;
        for (const c4ShapeKey of c4ShapeKeys) {
          Y3 = 0;
          const c4Shape = c4ShapeArray2[c4ShapeKey];
          let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);
          c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;
          c4Shape.typeC4Shape.width = calculateTextWidth(
            "\xAB" + c4Shape.typeC4Shape.text + "\xBB",
            c4ShapeTypeConf
          );
          c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;
          c4Shape.typeC4Shape.Y = conf.c4ShapePadding;
          Y3 = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;
          c4Shape.image = { width: 0, height: 0, Y: 0 };
          switch (c4Shape.typeC4Shape.text) {
            case "person":
            case "external_person":
              c4Shape.image.width = 48;
              c4Shape.image.height = 48;
              c4Shape.image.Y = Y3;
              Y3 = c4Shape.image.Y + c4Shape.image.height;
              break;
          }
          if (c4Shape.sprite) {
            c4Shape.image.width = 48;
            c4Shape.image.height = 48;
            c4Shape.image.Y = Y3;
            Y3 = c4Shape.image.Y + c4Shape.image.height;
          }
          let c4ShapeTextWrap = c4Shape.wrap && conf.wrap;
          let textLimitWidth = conf.width - conf.c4ShapePadding * 2;
          let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);
          c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;
          c4ShapeLabelConf.fontWeight = "bold";
          calcC4ShapeTextWH("label", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);
          c4Shape.label.Y = Y3 + 8;
          Y3 = c4Shape.label.Y + c4Shape.label.height;
          if (c4Shape.type && c4Shape.type.text !== "") {
            c4Shape.type.text = "[" + c4Shape.type.text + "]";
            let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text);
            calcC4ShapeTextWH("type", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth);
            c4Shape.type.Y = Y3 + 5;
            Y3 = c4Shape.type.Y + c4Shape.type.height;
          } else if (c4Shape.techn && c4Shape.techn.text !== "") {
            c4Shape.techn.text = "[" + c4Shape.techn.text + "]";
            let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);
            calcC4ShapeTextWH("techn", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);
            c4Shape.techn.Y = Y3 + 5;
            Y3 = c4Shape.techn.Y + c4Shape.techn.height;
          }
          let rectHeight = Y3;
          let rectWidth = c4Shape.label.width;
          if (c4Shape.descr && c4Shape.descr.text !== "") {
            let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);
            calcC4ShapeTextWH("descr", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);
            c4Shape.descr.Y = Y3 + 20;
            Y3 = c4Shape.descr.Y + c4Shape.descr.height;
            rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);
            rectHeight = Y3 - c4Shape.descr.textLines * 5;
          }
          rectWidth = rectWidth + conf.c4ShapePadding;
          c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width);
          c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height);
          c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin;
          currentBounds.insert(c4Shape);
          svgDraw_default.drawC4Shape(diagram38, c4Shape, conf);
        }
        currentBounds.bumpLastMargin(conf.c4ShapeMargin);
      }, "drawC4ShapeArray");
      Point2 = class {
        static {
          __name(this, "Point");
        }
        constructor(x5, y6) {
          this.x = x5;
          this.y = y6;
        }
      };
      getIntersectPoint = /* @__PURE__ */ __name(function(fromNode, endPoint) {
        let x1 = fromNode.x;
        let y1 = fromNode.y;
        let x22 = endPoint.x;
        let y22 = endPoint.y;
        let fromCenterX = x1 + fromNode.width / 2;
        let fromCenterY = y1 + fromNode.height / 2;
        let dx = Math.abs(x1 - x22);
        let dy = Math.abs(y1 - y22);
        let tanDYX = dy / dx;
        let fromDYX = fromNode.height / fromNode.width;
        let returnPoint = null;
        if (y1 == y22 && x1 < x22) {
          returnPoint = new Point2(x1 + fromNode.width, fromCenterY);
        } else if (y1 == y22 && x1 > x22) {
          returnPoint = new Point2(x1, fromCenterY);
        } else if (x1 == x22 && y1 < y22) {
          returnPoint = new Point2(fromCenterX, y1 + fromNode.height);
        } else if (x1 == x22 && y1 > y22) {
          returnPoint = new Point2(fromCenterX, y1);
        }
        if (x1 > x22 && y1 < y22) {
          if (fromDYX >= tanDYX) {
            returnPoint = new Point2(x1, fromCenterY + tanDYX * fromNode.width / 2);
          } else {
            returnPoint = new Point2(
              fromCenterX - dx / dy * fromNode.height / 2,
              y1 + fromNode.height
            );
          }
        } else if (x1 < x22 && y1 < y22) {
          if (fromDYX >= tanDYX) {
            returnPoint = new Point2(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2);
          } else {
            returnPoint = new Point2(
              fromCenterX + dx / dy * fromNode.height / 2,
              y1 + fromNode.height
            );
          }
        } else if (x1 < x22 && y1 > y22) {
          if (fromDYX >= tanDYX) {
            returnPoint = new Point2(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2);
          } else {
            returnPoint = new Point2(fromCenterX + fromNode.height / 2 * dx / dy, y1);
          }
        } else if (x1 > x22 && y1 > y22) {
          if (fromDYX >= tanDYX) {
            returnPoint = new Point2(x1, fromCenterY - fromNode.width / 2 * tanDYX);
          } else {
            returnPoint = new Point2(fromCenterX - fromNode.height / 2 * dx / dy, y1);
          }
        }
        return returnPoint;
      }, "getIntersectPoint");
      getIntersectPoints = /* @__PURE__ */ __name(function(fromNode, endNode) {
        let endIntersectPoint = { x: 0, y: 0 };
        endIntersectPoint.x = endNode.x + endNode.width / 2;
        endIntersectPoint.y = endNode.y + endNode.height / 2;
        let startPoint = getIntersectPoint(fromNode, endIntersectPoint);
        endIntersectPoint.x = fromNode.x + fromNode.width / 2;
        endIntersectPoint.y = fromNode.y + fromNode.height / 2;
        let endPoint = getIntersectPoint(endNode, endIntersectPoint);
        return { startPoint, endPoint };
      }, "getIntersectPoints");
      drawRels2 = /* @__PURE__ */ __name(function(diagram38, rels2, getC4ShapeObj, diagObj, diagramId3) {
        let i2 = 0;
        for (let rel2 of rels2) {
          i2 = i2 + 1;
          let relTextWrap = rel2.wrap && conf.wrap;
          let relConf = messageFont(conf);
          let diagramType = diagObj.db.getC4Type();
          if (diagramType === "C4Dynamic") {
            rel2.label.text = i2 + ": " + rel2.label.text;
          }
          let textLimitWidth = calculateTextWidth(rel2.label.text, relConf);
          calcC4ShapeTextWH("label", rel2, relTextWrap, relConf, textLimitWidth);
          if (rel2.techn && rel2.techn.text !== "") {
            textLimitWidth = calculateTextWidth(rel2.techn.text, relConf);
            calcC4ShapeTextWH("techn", rel2, relTextWrap, relConf, textLimitWidth);
          }
          if (rel2.descr && rel2.descr.text !== "") {
            textLimitWidth = calculateTextWidth(rel2.descr.text, relConf);
            calcC4ShapeTextWH("descr", rel2, relTextWrap, relConf, textLimitWidth);
          }
          let fromNode = getC4ShapeObj(rel2.from);
          let endNode = getC4ShapeObj(rel2.to);
          let points = getIntersectPoints(fromNode, endNode);
          rel2.startPoint = points.startPoint;
          rel2.endPoint = points.endPoint;
        }
        svgDraw_default.drawRels(diagram38, rels2, conf, diagramId3);
      }, "drawRels");
      __name(drawInsideBoundary, "drawInsideBoundary");
      draw = /* @__PURE__ */ __name(function(_text, id41, _version, diagObj) {
        conf = getConfig2().c4;
        const securityLevel = getConfig2().securityLevel;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        let db12 = diagObj.db;
        diagObj.db.setWrap(conf.wrap);
        c4ShapeInRow2 = db12.getC4ShapeInRow();
        c4BoundaryInRow2 = db12.getC4BoundaryInRow();
        log.debug(`C:${JSON.stringify(conf, null, 2)}`);
        const diagram38 = securityLevel === "sandbox" ? root4.select(`[id="${id41}"]`) : select_default2(`[id="${id41}"]`);
        svgDraw_default.insertComputerIcon(diagram38, id41);
        svgDraw_default.insertDatabaseIcon(diagram38, id41);
        svgDraw_default.insertClockIcon(diagram38, id41);
        let screenBounds = new Bounds(diagObj);
        screenBounds.setData(
          conf.diagramMarginX,
          conf.diagramMarginX,
          conf.diagramMarginY,
          conf.diagramMarginY
        );
        screenBounds.data.widthLimit = screen.availWidth;
        globalBoundaryMaxX = conf.diagramMarginX;
        globalBoundaryMaxY = conf.diagramMarginY;
        const title2 = diagObj.db.getTitle();
        let currentBoundaries = diagObj.db.getBoundaries("");
        drawInsideBoundary(diagram38, "", screenBounds, currentBoundaries, diagObj);
        svgDraw_default.insertArrowHead(diagram38, id41);
        svgDraw_default.insertArrowEnd(diagram38, id41);
        svgDraw_default.insertArrowCrossHead(diagram38, id41);
        svgDraw_default.insertArrowFilledHead(diagram38, id41);
        drawRels2(diagram38, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj, id41);
        screenBounds.data.stopx = globalBoundaryMaxX;
        screenBounds.data.stopy = globalBoundaryMaxY;
        const box = screenBounds.data;
        let boxHeight = box.stopy - box.starty;
        let height2 = boxHeight + 2 * conf.diagramMarginY;
        let boxWidth = box.stopx - box.startx;
        const width3 = boxWidth + 2 * conf.diagramMarginX;
        if (title2) {
          diagram38.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr("y", box.starty + conf.diagramMarginY);
        }
        configureSvgSize(diagram38, height2, width3, conf.useMaxWidth);
        const extraVertForTitle = title2 ? 60 : 0;
        diagram38.attr(
          "viewBox",
          box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width3 + " " + (height2 + extraVertForTitle)
        );
        log.debug(`models:`, box);
      }, "draw");
      c4Renderer_default = {
        drawPersonOrSystemArray: drawC4ShapeArray,
        drawBoundary: drawBoundary2,
        setConf,
        draw
      };
    }
  });

  // src/diagrams/c4/styles.js
  var getStyles2, styles_default2;
  var init_styles2 = __esm({
    "src/diagrams/c4/styles.js"() {
      "use strict";
      getStyles2 = /* @__PURE__ */ __name((options2) => `.person {
    stroke: ${options2.personBorder};
    fill: ${options2.personBkg};
  }
`, "getStyles");
      styles_default2 = getStyles2;
    }
  });

  // src/diagrams/c4/c4Diagram.ts
  var c4Diagram_exports = {};
  __export(c4Diagram_exports, {
    diagram: () => diagram
  });
  var diagram;
  var init_c4Diagram2 = __esm({
    "src/diagrams/c4/c4Diagram.ts"() {
      "use strict";
      init_c4Diagram();
      init_c4Db();
      init_c4Renderer();
      init_styles2();
      diagram = {
        parser: c4Diagram_default,
        db: c4Db_default,
        renderer: c4Renderer_default,
        styles: styles_default2,
        init: /* @__PURE__ */ __name(({ c4, wrap: wrap3 }) => {
          c4Renderer_default.setConf(c4);
          c4Db_default.setWrap(wrap3);
        }, "init")
      };
    }
  });

  // ../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs
  function isNothing(subject) {
    return typeof subject === "undefined" || subject === null;
  }
  function isObject(subject) {
    return typeof subject === "object" && subject !== null;
  }
  function toArray(sequence) {
    if (Array.isArray(sequence)) return sequence;
    else if (isNothing(sequence)) return [];
    return [sequence];
  }
  function extend2(target, source) {
    var index, length2, key, sourceKeys;
    if (source) {
      sourceKeys = Object.keys(source);
      for (index = 0, length2 = sourceKeys.length; index < length2; index += 1) {
        key = sourceKeys[index];
        target[key] = source[key];
      }
    }
    return target;
  }
  function repeat(string3, count2) {
    var result = "", cycle;
    for (cycle = 0; cycle < count2; cycle += 1) {
      result += string3;
    }
    return result;
  }
  function isNegativeZero(number7) {
    return number7 === 0 && Number.NEGATIVE_INFINITY === 1 / number7;
  }
  function formatError(exception2, compact2) {
    var where = "", message = exception2.reason || "(unknown reason)";
    if (!exception2.mark) return message;
    if (exception2.mark.name) {
      where += 'in "' + exception2.mark.name + '" ';
    }
    where += "(" + (exception2.mark.line + 1) + ":" + (exception2.mark.column + 1) + ")";
    if (!compact2 && exception2.mark.snippet) {
      where += "\n\n" + exception2.mark.snippet;
    }
    return message + " " + where;
  }
  function YAMLException$1(reason, mark) {
    Error.call(this);
    this.name = "YAMLException";
    this.reason = reason;
    this.mark = mark;
    this.message = formatError(this, false);
    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, this.constructor);
    } else {
      this.stack = new Error().stack || "";
    }
  }
  function getLine(buffer, lineStart, lineEnd, position5, maxLineLength) {
    var head2 = "";
    var tail = "";
    var maxHalfLength = Math.floor(maxLineLength / 2) - 1;
    if (position5 - lineStart > maxHalfLength) {
      head2 = " ... ";
      lineStart = position5 - maxHalfLength + head2.length;
    }
    if (lineEnd - position5 > maxHalfLength) {
      tail = " ...";
      lineEnd = position5 + maxHalfLength - tail.length;
    }
    return {
      str: head2 + buffer.slice(lineStart, lineEnd).replace(/\t/g, "\u2192") + tail,
      pos: position5 - lineStart + head2.length
      // relative position
    };
  }
  function padStart(string3, max10) {
    return common.repeat(" ", max10 - string3.length) + string3;
  }
  function makeSnippet(mark, options2) {
    options2 = Object.create(options2 || null);
    if (!mark.buffer) return null;
    if (!options2.maxLength) options2.maxLength = 79;
    if (typeof options2.indent !== "number") options2.indent = 1;
    if (typeof options2.linesBefore !== "number") options2.linesBefore = 3;
    if (typeof options2.linesAfter !== "number") options2.linesAfter = 2;
    var re3 = /\r?\n|\r|\0/g;
    var lineStarts = [0];
    var lineEnds = [];
    var match3;
    var foundLineNo = -1;
    while (match3 = re3.exec(mark.buffer)) {
      lineEnds.push(match3.index);
      lineStarts.push(match3.index + match3[0].length);
      if (mark.position <= match3.index && foundLineNo < 0) {
        foundLineNo = lineStarts.length - 2;
      }
    }
    if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;
    var result = "", i2, line2;
    var lineNoLength = Math.min(mark.line + options2.linesAfter, lineEnds.length).toString().length;
    var maxLineLength = options2.maxLength - (options2.indent + lineNoLength + 3);
    for (i2 = 1; i2 <= options2.linesBefore; i2++) {
      if (foundLineNo - i2 < 0) break;
      line2 = getLine(
        mark.buffer,
        lineStarts[foundLineNo - i2],
        lineEnds[foundLineNo - i2],
        mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i2]),
        maxLineLength
      );
      result = common.repeat(" ", options2.indent) + padStart((mark.line - i2 + 1).toString(), lineNoLength) + " | " + line2.str + "\n" + result;
    }
    line2 = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);
    result += common.repeat(" ", options2.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line2.str + "\n";
    result += common.repeat("-", options2.indent + lineNoLength + 3 + line2.pos) + "^\n";
    for (i2 = 1; i2 <= options2.linesAfter; i2++) {
      if (foundLineNo + i2 >= lineEnds.length) break;
      line2 = getLine(
        mark.buffer,
        lineStarts[foundLineNo + i2],
        lineEnds[foundLineNo + i2],
        mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i2]),
        maxLineLength
      );
      result += common.repeat(" ", options2.indent) + padStart((mark.line + i2 + 1).toString(), lineNoLength) + " | " + line2.str + "\n";
    }
    return result.replace(/\n$/, "");
  }
  function compileStyleAliases(map6) {
    var result = {};
    if (map6 !== null) {
      Object.keys(map6).forEach(function(style3) {
        map6[style3].forEach(function(alias) {
          result[String(alias)] = style3;
        });
      });
    }
    return result;
  }
  function Type$1(tag, options2) {
    options2 = options2 || {};
    Object.keys(options2).forEach(function(name) {
      if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
        throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.');
      }
    });
    this.options = options2;
    this.tag = tag;
    this.kind = options2["kind"] || null;
    this.resolve = options2["resolve"] || function() {
      return true;
    };
    this.construct = options2["construct"] || function(data6) {
      return data6;
    };
    this.instanceOf = options2["instanceOf"] || null;
    this.predicate = options2["predicate"] || null;
    this.represent = options2["represent"] || null;
    this.representName = options2["representName"] || null;
    this.defaultStyle = options2["defaultStyle"] || null;
    this.multi = options2["multi"] || false;
    this.styleAliases = compileStyleAliases(options2["styleAliases"] || null);
    if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
      throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
    }
  }
  function compileList(schema2, name) {
    var result = [];
    schema2[name].forEach(function(currentType) {
      var newIndex = result.length;
      result.forEach(function(previousType, previousIndex) {
        if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {
          newIndex = previousIndex;
        }
      });
      result[newIndex] = currentType;
    });
    return result;
  }
  function compileMap() {
    var result = {
      scalar: {},
      sequence: {},
      mapping: {},
      fallback: {},
      multi: {
        scalar: [],
        sequence: [],
        mapping: [],
        fallback: []
      }
    }, index, length2;
    function collectType(type3) {
      if (type3.multi) {
        result.multi[type3.kind].push(type3);
        result.multi["fallback"].push(type3);
      } else {
        result[type3.kind][type3.tag] = result["fallback"][type3.tag] = type3;
      }
    }
    __name(collectType, "collectType");
    for (index = 0, length2 = arguments.length; index < length2; index += 1) {
      arguments[index].forEach(collectType);
    }
    return result;
  }
  function Schema$1(definition) {
    return this.extend(definition);
  }
  function resolveYamlNull(data6) {
    if (data6 === null) return true;
    var max10 = data6.length;
    return max10 === 1 && data6 === "~" || max10 === 4 && (data6 === "null" || data6 === "Null" || data6 === "NULL");
  }
  function constructYamlNull() {
    return null;
  }
  function isNull(object3) {
    return object3 === null;
  }
  function resolveYamlBoolean(data6) {
    if (data6 === null) return false;
    var max10 = data6.length;
    return max10 === 4 && (data6 === "true" || data6 === "True" || data6 === "TRUE") || max10 === 5 && (data6 === "false" || data6 === "False" || data6 === "FALSE");
  }
  function constructYamlBoolean(data6) {
    return data6 === "true" || data6 === "True" || data6 === "TRUE";
  }
  function isBoolean(object3) {
    return Object.prototype.toString.call(object3) === "[object Boolean]";
  }
  function isHexCode(c3) {
    return 48 <= c3 && c3 <= 57 || 65 <= c3 && c3 <= 70 || 97 <= c3 && c3 <= 102;
  }
  function isOctCode(c3) {
    return 48 <= c3 && c3 <= 55;
  }
  function isDecCode(c3) {
    return 48 <= c3 && c3 <= 57;
  }
  function resolveYamlInteger(data6) {
    if (data6 === null) return false;
    var max10 = data6.length, index = 0, hasDigits = false, ch;
    if (!max10) return false;
    ch = data6[index];
    if (ch === "-" || ch === "+") {
      ch = data6[++index];
    }
    if (ch === "0") {
      if (index + 1 === max10) return true;
      ch = data6[++index];
      if (ch === "b") {
        index++;
        for (; index < max10; index++) {
          ch = data6[index];
          if (ch === "_") continue;
          if (ch !== "0" && ch !== "1") return false;
          hasDigits = true;
        }
        return hasDigits && ch !== "_";
      }
      if (ch === "x") {
        index++;
        for (; index < max10; index++) {
          ch = data6[index];
          if (ch === "_") continue;
          if (!isHexCode(data6.charCodeAt(index))) return false;
          hasDigits = true;
        }
        return hasDigits && ch !== "_";
      }
      if (ch === "o") {
        index++;
        for (; index < max10; index++) {
          ch = data6[index];
          if (ch === "_") continue;
          if (!isOctCode(data6.charCodeAt(index))) return false;
          hasDigits = true;
        }
        return hasDigits && ch !== "_";
      }
    }
    if (ch === "_") return false;
    for (; index < max10; index++) {
      ch = data6[index];
      if (ch === "_") continue;
      if (!isDecCode(data6.charCodeAt(index))) {
        return false;
      }
      hasDigits = true;
    }
    if (!hasDigits || ch === "_") return false;
    return true;
  }
  function constructYamlInteger(data6) {
    var value2 = data6, sign2 = 1, ch;
    if (value2.indexOf("_") !== -1) {
      value2 = value2.replace(/_/g, "");
    }
    ch = value2[0];
    if (ch === "-" || ch === "+") {
      if (ch === "-") sign2 = -1;
      value2 = value2.slice(1);
      ch = value2[0];
    }
    if (value2 === "0") return 0;
    if (ch === "0") {
      if (value2[1] === "b") return sign2 * parseInt(value2.slice(2), 2);
      if (value2[1] === "x") return sign2 * parseInt(value2.slice(2), 16);
      if (value2[1] === "o") return sign2 * parseInt(value2.slice(2), 8);
    }
    return sign2 * parseInt(value2, 10);
  }
  function isInteger(object3) {
    return Object.prototype.toString.call(object3) === "[object Number]" && (object3 % 1 === 0 && !common.isNegativeZero(object3));
  }
  function resolveYamlFloat(data6) {
    if (data6 === null) return false;
    if (!YAML_FLOAT_PATTERN.test(data6) || // Quick hack to not allow integers end with `_`
    // Probably should update regexp & check speed
    data6[data6.length - 1] === "_") {
      return false;
    }
    return true;
  }
  function constructYamlFloat(data6) {
    var value2, sign2;
    value2 = data6.replace(/_/g, "").toLowerCase();
    sign2 = value2[0] === "-" ? -1 : 1;
    if ("+-".indexOf(value2[0]) >= 0) {
      value2 = value2.slice(1);
    }
    if (value2 === ".inf") {
      return sign2 === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
    } else if (value2 === ".nan") {
      return NaN;
    }
    return sign2 * parseFloat(value2, 10);
  }
  function representYamlFloat(object3, style3) {
    var res;
    if (isNaN(object3)) {
      switch (style3) {
        case "lowercase":
          return ".nan";
        case "uppercase":
          return ".NAN";
        case "camelcase":
          return ".NaN";
      }
    } else if (Number.POSITIVE_INFINITY === object3) {
      switch (style3) {
        case "lowercase":
          return ".inf";
        case "uppercase":
          return ".INF";
        case "camelcase":
          return ".Inf";
      }
    } else if (Number.NEGATIVE_INFINITY === object3) {
      switch (style3) {
        case "lowercase":
          return "-.inf";
        case "uppercase":
          return "-.INF";
        case "camelcase":
          return "-.Inf";
      }
    } else if (common.isNegativeZero(object3)) {
      return "-0.0";
    }
    res = object3.toString(10);
    return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
  }
  function isFloat(object3) {
    return Object.prototype.toString.call(object3) === "[object Number]" && (object3 % 1 !== 0 || common.isNegativeZero(object3));
  }
  function resolveYamlTimestamp(data6) {
    if (data6 === null) return false;
    if (YAML_DATE_REGEXP.exec(data6) !== null) return true;
    if (YAML_TIMESTAMP_REGEXP.exec(data6) !== null) return true;
    return false;
  }
  function constructYamlTimestamp(data6) {
    var match3, year, month, day, hour, minute, second2, fraction = 0, delta = null, tz_hour, tz_minute, date2;
    match3 = YAML_DATE_REGEXP.exec(data6);
    if (match3 === null) match3 = YAML_TIMESTAMP_REGEXP.exec(data6);
    if (match3 === null) throw new Error("Date resolve error");
    year = +match3[1];
    month = +match3[2] - 1;
    day = +match3[3];
    if (!match3[4]) {
      return new Date(Date.UTC(year, month, day));
    }
    hour = +match3[4];
    minute = +match3[5];
    second2 = +match3[6];
    if (match3[7]) {
      fraction = match3[7].slice(0, 3);
      while (fraction.length < 3) {
        fraction += "0";
      }
      fraction = +fraction;
    }
    if (match3[9]) {
      tz_hour = +match3[10];
      tz_minute = +(match3[11] || 0);
      delta = (tz_hour * 60 + tz_minute) * 6e4;
      if (match3[9] === "-") delta = -delta;
    }
    date2 = new Date(Date.UTC(year, month, day, hour, minute, second2, fraction));
    if (delta) date2.setTime(date2.getTime() - delta);
    return date2;
  }
  function representYamlTimestamp(object3) {
    return object3.toISOString();
  }
  function resolveYamlMerge(data6) {
    return data6 === "<<" || data6 === null;
  }
  function resolveYamlBinary(data6) {
    if (data6 === null) return false;
    var code, idx, bitlen = 0, max10 = data6.length, map6 = BASE64_MAP;
    for (idx = 0; idx < max10; idx++) {
      code = map6.indexOf(data6.charAt(idx));
      if (code > 64) continue;
      if (code < 0) return false;
      bitlen += 6;
    }
    return bitlen % 8 === 0;
  }
  function constructYamlBinary(data6) {
    var idx, tailbits, input = data6.replace(/[\r\n=]/g, ""), max10 = input.length, map6 = BASE64_MAP, bits = 0, result = [];
    for (idx = 0; idx < max10; idx++) {
      if (idx % 4 === 0 && idx) {
        result.push(bits >> 16 & 255);
        result.push(bits >> 8 & 255);
        result.push(bits & 255);
      }
      bits = bits << 6 | map6.indexOf(input.charAt(idx));
    }
    tailbits = max10 % 4 * 6;
    if (tailbits === 0) {
      result.push(bits >> 16 & 255);
      result.push(bits >> 8 & 255);
      result.push(bits & 255);
    } else if (tailbits === 18) {
      result.push(bits >> 10 & 255);
      result.push(bits >> 2 & 255);
    } else if (tailbits === 12) {
      result.push(bits >> 4 & 255);
    }
    return new Uint8Array(result);
  }
  function representYamlBinary(object3) {
    var result = "", bits = 0, idx, tail, max10 = object3.length, map6 = BASE64_MAP;
    for (idx = 0; idx < max10; idx++) {
      if (idx % 3 === 0 && idx) {
        result += map6[bits >> 18 & 63];
        result += map6[bits >> 12 & 63];
        result += map6[bits >> 6 & 63];
        result += map6[bits & 63];
      }
      bits = (bits << 8) + object3[idx];
    }
    tail = max10 % 3;
    if (tail === 0) {
      result += map6[bits >> 18 & 63];
      result += map6[bits >> 12 & 63];
      result += map6[bits >> 6 & 63];
      result += map6[bits & 63];
    } else if (tail === 2) {
      result += map6[bits >> 10 & 63];
      result += map6[bits >> 4 & 63];
      result += map6[bits << 2 & 63];
      result += map6[64];
    } else if (tail === 1) {
      result += map6[bits >> 2 & 63];
      result += map6[bits << 4 & 63];
      result += map6[64];
      result += map6[64];
    }
    return result;
  }
  function isBinary(obj) {
    return Object.prototype.toString.call(obj) === "[object Uint8Array]";
  }
  function resolveYamlOmap(data6) {
    if (data6 === null) return true;
    var objectKeys = [], index, length2, pair, pairKey2, pairHasKey, object3 = data6;
    for (index = 0, length2 = object3.length; index < length2; index += 1) {
      pair = object3[index];
      pairHasKey = false;
      if (_toString$2.call(pair) !== "[object Object]") return false;
      for (pairKey2 in pair) {
        if (_hasOwnProperty$3.call(pair, pairKey2)) {
          if (!pairHasKey) pairHasKey = true;
          else return false;
        }
      }
      if (!pairHasKey) return false;
      if (objectKeys.indexOf(pairKey2) === -1) objectKeys.push(pairKey2);
      else return false;
    }
    return true;
  }
  function constructYamlOmap(data6) {
    return data6 !== null ? data6 : [];
  }
  function resolveYamlPairs(data6) {
    if (data6 === null) return true;
    var index, length2, pair, keys3, result, object3 = data6;
    result = new Array(object3.length);
    for (index = 0, length2 = object3.length; index < length2; index += 1) {
      pair = object3[index];
      if (_toString$1.call(pair) !== "[object Object]") return false;
      keys3 = Object.keys(pair);
      if (keys3.length !== 1) return false;
      result[index] = [keys3[0], pair[keys3[0]]];
    }
    return true;
  }
  function constructYamlPairs(data6) {
    if (data6 === null) return [];
    var index, length2, pair, keys3, result, object3 = data6;
    result = new Array(object3.length);
    for (index = 0, length2 = object3.length; index < length2; index += 1) {
      pair = object3[index];
      keys3 = Object.keys(pair);
      result[index] = [keys3[0], pair[keys3[0]]];
    }
    return result;
  }
  function resolveYamlSet(data6) {
    if (data6 === null) return true;
    var key, object3 = data6;
    for (key in object3) {
      if (_hasOwnProperty$2.call(object3, key)) {
        if (object3[key] !== null) return false;
      }
    }
    return true;
  }
  function constructYamlSet(data6) {
    return data6 !== null ? data6 : {};
  }
  function _class(obj) {
    return Object.prototype.toString.call(obj);
  }
  function is_EOL(c3) {
    return c3 === 10 || c3 === 13;
  }
  function is_WHITE_SPACE(c3) {
    return c3 === 9 || c3 === 32;
  }
  function is_WS_OR_EOL(c3) {
    return c3 === 9 || c3 === 32 || c3 === 10 || c3 === 13;
  }
  function is_FLOW_INDICATOR(c3) {
    return c3 === 44 || c3 === 91 || c3 === 93 || c3 === 123 || c3 === 125;
  }
  function fromHexCode(c3) {
    var lc;
    if (48 <= c3 && c3 <= 57) {
      return c3 - 48;
    }
    lc = c3 | 32;
    if (97 <= lc && lc <= 102) {
      return lc - 97 + 10;
    }
    return -1;
  }
  function escapedHexLen(c3) {
    if (c3 === 120) {
      return 2;
    }
    if (c3 === 117) {
      return 4;
    }
    if (c3 === 85) {
      return 8;
    }
    return 0;
  }
  function fromDecimalCode(c3) {
    if (48 <= c3 && c3 <= 57) {
      return c3 - 48;
    }
    return -1;
  }
  function simpleEscapeSequence(c3) {
    return c3 === 48 ? "\0" : c3 === 97 ? "\x07" : c3 === 98 ? "\b" : c3 === 116 ? "	" : c3 === 9 ? "	" : c3 === 110 ? "\n" : c3 === 118 ? "\v" : c3 === 102 ? "\f" : c3 === 114 ? "\r" : c3 === 101 ? "\x1B" : c3 === 32 ? " " : c3 === 34 ? '"' : c3 === 47 ? "/" : c3 === 92 ? "\\" : c3 === 78 ? "\x85" : c3 === 95 ? "\xA0" : c3 === 76 ? "\u2028" : c3 === 80 ? "\u2029" : "";
  }
  function charFromCodepoint(c3) {
    if (c3 <= 65535) {
      return String.fromCharCode(c3);
    }
    return String.fromCharCode(
      (c3 - 65536 >> 10) + 55296,
      (c3 - 65536 & 1023) + 56320
    );
  }
  function setProperty(object3, key, value2) {
    if (key === "__proto__") {
      Object.defineProperty(object3, key, {
        configurable: true,
        enumerable: true,
        writable: true,
        value: value2
      });
    } else {
      object3[key] = value2;
    }
  }
  function State$1(input, options2) {
    this.input = input;
    this.filename = options2["filename"] || null;
    this.schema = options2["schema"] || _default;
    this.onWarning = options2["onWarning"] || null;
    this.legacy = options2["legacy"] || false;
    this.json = options2["json"] || false;
    this.listener = options2["listener"] || null;
    this.implicitTypes = this.schema.compiledImplicit;
    this.typeMap = this.schema.compiledTypeMap;
    this.length = input.length;
    this.position = 0;
    this.line = 0;
    this.lineStart = 0;
    this.lineIndent = 0;
    this.firstTabInLine = -1;
    this.documents = [];
  }
  function generateError(state4, message) {
    var mark = {
      name: state4.filename,
      buffer: state4.input.slice(0, -1),
      // omit trailing \0
      position: state4.position,
      line: state4.line,
      column: state4.position - state4.lineStart
    };
    mark.snippet = snippet(mark);
    return new exception(message, mark);
  }
  function throwError(state4, message) {
    throw generateError(state4, message);
  }
  function throwWarning(state4, message) {
    if (state4.onWarning) {
      state4.onWarning.call(null, generateError(state4, message));
    }
  }
  function captureSegment(state4, start3, end2, checkJson) {
    var _position, _length, _character, _result;
    if (start3 < end2) {
      _result = state4.input.slice(start3, end2);
      if (checkJson) {
        for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
          _character = _result.charCodeAt(_position);
          if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {
            throwError(state4, "expected valid JSON character");
          }
        }
      } else if (PATTERN_NON_PRINTABLE.test(_result)) {
        throwError(state4, "the stream contains non-printable characters");
      }
      state4.result += _result;
    }
  }
  function mergeMappings(state4, destination, source, overridableKeys) {
    var sourceKeys, key, index, quantity;
    if (!common.isObject(source)) {
      throwError(state4, "cannot merge mappings; the provided source object is unacceptable");
    }
    sourceKeys = Object.keys(source);
    for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
      key = sourceKeys[index];
      if (!_hasOwnProperty$1.call(destination, key)) {
        setProperty(destination, key, source[key]);
        overridableKeys[key] = true;
      }
    }
  }
  function storeMappingPair(state4, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {
    var index, quantity;
    if (Array.isArray(keyNode)) {
      keyNode = Array.prototype.slice.call(keyNode);
      for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
        if (Array.isArray(keyNode[index])) {
          throwError(state4, "nested arrays are not supported inside keys");
        }
        if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") {
          keyNode[index] = "[object Object]";
        }
      }
    }
    if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") {
      keyNode = "[object Object]";
    }
    keyNode = String(keyNode);
    if (_result === null) {
      _result = {};
    }
    if (keyTag === "tag:yaml.org,2002:merge") {
      if (Array.isArray(valueNode)) {
        for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
          mergeMappings(state4, _result, valueNode[index], overridableKeys);
        }
      } else {
        mergeMappings(state4, _result, valueNode, overridableKeys);
      }
    } else {
      if (!state4.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {
        state4.line = startLine || state4.line;
        state4.lineStart = startLineStart || state4.lineStart;
        state4.position = startPos || state4.position;
        throwError(state4, "duplicated mapping key");
      }
      setProperty(_result, keyNode, valueNode);
      delete overridableKeys[keyNode];
    }
    return _result;
  }
  function readLineBreak(state4) {
    var ch;
    ch = state4.input.charCodeAt(state4.position);
    if (ch === 10) {
      state4.position++;
    } else if (ch === 13) {
      state4.position++;
      if (state4.input.charCodeAt(state4.position) === 10) {
        state4.position++;
      }
    } else {
      throwError(state4, "a line break is expected");
    }
    state4.line += 1;
    state4.lineStart = state4.position;
    state4.firstTabInLine = -1;
  }
  function skipSeparationSpace(state4, allowComments, checkIndent) {
    var lineBreaks = 0, ch = state4.input.charCodeAt(state4.position);
    while (ch !== 0) {
      while (is_WHITE_SPACE(ch)) {
        if (ch === 9 && state4.firstTabInLine === -1) {
          state4.firstTabInLine = state4.position;
        }
        ch = state4.input.charCodeAt(++state4.position);
      }
      if (allowComments && ch === 35) {
        do {
          ch = state4.input.charCodeAt(++state4.position);
        } while (ch !== 10 && ch !== 13 && ch !== 0);
      }
      if (is_EOL(ch)) {
        readLineBreak(state4);
        ch = state4.input.charCodeAt(state4.position);
        lineBreaks++;
        state4.lineIndent = 0;
        while (ch === 32) {
          state4.lineIndent++;
          ch = state4.input.charCodeAt(++state4.position);
        }
      } else {
        break;
      }
    }
    if (checkIndent !== -1 && lineBreaks !== 0 && state4.lineIndent < checkIndent) {
      throwWarning(state4, "deficient indentation");
    }
    return lineBreaks;
  }
  function testDocumentSeparator(state4) {
    var _position = state4.position, ch;
    ch = state4.input.charCodeAt(_position);
    if ((ch === 45 || ch === 46) && ch === state4.input.charCodeAt(_position + 1) && ch === state4.input.charCodeAt(_position + 2)) {
      _position += 3;
      ch = state4.input.charCodeAt(_position);
      if (ch === 0 || is_WS_OR_EOL(ch)) {
        return true;
      }
    }
    return false;
  }
  function writeFoldedLines(state4, count2) {
    if (count2 === 1) {
      state4.result += " ";
    } else if (count2 > 1) {
      state4.result += common.repeat("\n", count2 - 1);
    }
  }
  function readPlainScalar(state4, nodeIndent, withinFlowCollection) {
    var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state4.kind, _result = state4.result, ch;
    ch = state4.input.charCodeAt(state4.position);
    if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {
      return false;
    }
    if (ch === 63 || ch === 45) {
      following = state4.input.charCodeAt(state4.position + 1);
      if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
        return false;
      }
    }
    state4.kind = "scalar";
    state4.result = "";
    captureStart = captureEnd = state4.position;
    hasPendingContent = false;
    while (ch !== 0) {
      if (ch === 58) {
        following = state4.input.charCodeAt(state4.position + 1);
        if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
          break;
        }
      } else if (ch === 35) {
        preceding = state4.input.charCodeAt(state4.position - 1);
        if (is_WS_OR_EOL(preceding)) {
          break;
        }
      } else if (state4.position === state4.lineStart && testDocumentSeparator(state4) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
        break;
      } else if (is_EOL(ch)) {
        _line = state4.line;
        _lineStart = state4.lineStart;
        _lineIndent = state4.lineIndent;
        skipSeparationSpace(state4, false, -1);
        if (state4.lineIndent >= nodeIndent) {
          hasPendingContent = true;
          ch = state4.input.charCodeAt(state4.position);
          continue;
        } else {
          state4.position = captureEnd;
          state4.line = _line;
          state4.lineStart = _lineStart;
          state4.lineIndent = _lineIndent;
          break;
        }
      }
      if (hasPendingContent) {
        captureSegment(state4, captureStart, captureEnd, false);
        writeFoldedLines(state4, state4.line - _line);
        captureStart = captureEnd = state4.position;
        hasPendingContent = false;
      }
      if (!is_WHITE_SPACE(ch)) {
        captureEnd = state4.position + 1;
      }
      ch = state4.input.charCodeAt(++state4.position);
    }
    captureSegment(state4, captureStart, captureEnd, false);
    if (state4.result) {
      return true;
    }
    state4.kind = _kind;
    state4.result = _result;
    return false;
  }
  function readSingleQuotedScalar(state4, nodeIndent) {
    var ch, captureStart, captureEnd;
    ch = state4.input.charCodeAt(state4.position);
    if (ch !== 39) {
      return false;
    }
    state4.kind = "scalar";
    state4.result = "";
    state4.position++;
    captureStart = captureEnd = state4.position;
    while ((ch = state4.input.charCodeAt(state4.position)) !== 0) {
      if (ch === 39) {
        captureSegment(state4, captureStart, state4.position, true);
        ch = state4.input.charCodeAt(++state4.position);
        if (ch === 39) {
          captureStart = state4.position;
          state4.position++;
          captureEnd = state4.position;
        } else {
          return true;
        }
      } else if (is_EOL(ch)) {
        captureSegment(state4, captureStart, captureEnd, true);
        writeFoldedLines(state4, skipSeparationSpace(state4, false, nodeIndent));
        captureStart = captureEnd = state4.position;
      } else if (state4.position === state4.lineStart && testDocumentSeparator(state4)) {
        throwError(state4, "unexpected end of the document within a single quoted scalar");
      } else {
        state4.position++;
        captureEnd = state4.position;
      }
    }
    throwError(state4, "unexpected end of the stream within a single quoted scalar");
  }
  function readDoubleQuotedScalar(state4, nodeIndent) {
    var captureStart, captureEnd, hexLength, hexResult, tmp, ch;
    ch = state4.input.charCodeAt(state4.position);
    if (ch !== 34) {
      return false;
    }
    state4.kind = "scalar";
    state4.result = "";
    state4.position++;
    captureStart = captureEnd = state4.position;
    while ((ch = state4.input.charCodeAt(state4.position)) !== 0) {
      if (ch === 34) {
        captureSegment(state4, captureStart, state4.position, true);
        state4.position++;
        return true;
      } else if (ch === 92) {
        captureSegment(state4, captureStart, state4.position, true);
        ch = state4.input.charCodeAt(++state4.position);
        if (is_EOL(ch)) {
          skipSeparationSpace(state4, false, nodeIndent);
        } else if (ch < 256 && simpleEscapeCheck[ch]) {
          state4.result += simpleEscapeMap[ch];
          state4.position++;
        } else if ((tmp = escapedHexLen(ch)) > 0) {
          hexLength = tmp;
          hexResult = 0;
          for (; hexLength > 0; hexLength--) {
            ch = state4.input.charCodeAt(++state4.position);
            if ((tmp = fromHexCode(ch)) >= 0) {
              hexResult = (hexResult << 4) + tmp;
            } else {
              throwError(state4, "expected hexadecimal character");
            }
          }
          state4.result += charFromCodepoint(hexResult);
          state4.position++;
        } else {
          throwError(state4, "unknown escape sequence");
        }
        captureStart = captureEnd = state4.position;
      } else if (is_EOL(ch)) {
        captureSegment(state4, captureStart, captureEnd, true);
        writeFoldedLines(state4, skipSeparationSpace(state4, false, nodeIndent));
        captureStart = captureEnd = state4.position;
      } else if (state4.position === state4.lineStart && testDocumentSeparator(state4)) {
        throwError(state4, "unexpected end of the document within a double quoted scalar");
      } else {
        state4.position++;
        captureEnd = state4.position;
      }
    }
    throwError(state4, "unexpected end of the stream within a double quoted scalar");
  }
  function readFlowCollection(state4, nodeIndent) {
    var readNext = true, _line, _lineStart, _pos, _tag = state4.tag, _result, _anchor = state4.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;
    ch = state4.input.charCodeAt(state4.position);
    if (ch === 91) {
      terminator = 93;
      isMapping = false;
      _result = [];
    } else if (ch === 123) {
      terminator = 125;
      isMapping = true;
      _result = {};
    } else {
      return false;
    }
    if (state4.anchor !== null) {
      state4.anchorMap[state4.anchor] = _result;
    }
    ch = state4.input.charCodeAt(++state4.position);
    while (ch !== 0) {
      skipSeparationSpace(state4, true, nodeIndent);
      ch = state4.input.charCodeAt(state4.position);
      if (ch === terminator) {
        state4.position++;
        state4.tag = _tag;
        state4.anchor = _anchor;
        state4.kind = isMapping ? "mapping" : "sequence";
        state4.result = _result;
        return true;
      } else if (!readNext) {
        throwError(state4, "missed comma between flow collection entries");
      } else if (ch === 44) {
        throwError(state4, "expected the node content, but found ','");
      }
      keyTag = keyNode = valueNode = null;
      isPair = isExplicitPair = false;
      if (ch === 63) {
        following = state4.input.charCodeAt(state4.position + 1);
        if (is_WS_OR_EOL(following)) {
          isPair = isExplicitPair = true;
          state4.position++;
          skipSeparationSpace(state4, true, nodeIndent);
        }
      }
      _line = state4.line;
      _lineStart = state4.lineStart;
      _pos = state4.position;
      composeNode(state4, nodeIndent, CONTEXT_FLOW_IN, false, true);
      keyTag = state4.tag;
      keyNode = state4.result;
      skipSeparationSpace(state4, true, nodeIndent);
      ch = state4.input.charCodeAt(state4.position);
      if ((isExplicitPair || state4.line === _line) && ch === 58) {
        isPair = true;
        ch = state4.input.charCodeAt(++state4.position);
        skipSeparationSpace(state4, true, nodeIndent);
        composeNode(state4, nodeIndent, CONTEXT_FLOW_IN, false, true);
        valueNode = state4.result;
      }
      if (isMapping) {
        storeMappingPair(state4, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);
      } else if (isPair) {
        _result.push(storeMappingPair(state4, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));
      } else {
        _result.push(keyNode);
      }
      skipSeparationSpace(state4, true, nodeIndent);
      ch = state4.input.charCodeAt(state4.position);
      if (ch === 44) {
        readNext = true;
        ch = state4.input.charCodeAt(++state4.position);
      } else {
        readNext = false;
      }
    }
    throwError(state4, "unexpected end of the stream within a flow collection");
  }
  function readBlockScalar(state4, nodeIndent) {
    var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;
    ch = state4.input.charCodeAt(state4.position);
    if (ch === 124) {
      folding = false;
    } else if (ch === 62) {
      folding = true;
    } else {
      return false;
    }
    state4.kind = "scalar";
    state4.result = "";
    while (ch !== 0) {
      ch = state4.input.charCodeAt(++state4.position);
      if (ch === 43 || ch === 45) {
        if (CHOMPING_CLIP === chomping) {
          chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;
        } else {
          throwError(state4, "repeat of a chomping mode identifier");
        }
      } else if ((tmp = fromDecimalCode(ch)) >= 0) {
        if (tmp === 0) {
          throwError(state4, "bad explicit indentation width of a block scalar; it cannot be less than one");
        } else if (!detectedIndent) {
          textIndent = nodeIndent + tmp - 1;
          detectedIndent = true;
        } else {
          throwError(state4, "repeat of an indentation width identifier");
        }
      } else {
        break;
      }
    }
    if (is_WHITE_SPACE(ch)) {
      do {
        ch = state4.input.charCodeAt(++state4.position);
      } while (is_WHITE_SPACE(ch));
      if (ch === 35) {
        do {
          ch = state4.input.charCodeAt(++state4.position);
        } while (!is_EOL(ch) && ch !== 0);
      }
    }
    while (ch !== 0) {
      readLineBreak(state4);
      state4.lineIndent = 0;
      ch = state4.input.charCodeAt(state4.position);
      while ((!detectedIndent || state4.lineIndent < textIndent) && ch === 32) {
        state4.lineIndent++;
        ch = state4.input.charCodeAt(++state4.position);
      }
      if (!detectedIndent && state4.lineIndent > textIndent) {
        textIndent = state4.lineIndent;
      }
      if (is_EOL(ch)) {
        emptyLines++;
        continue;
      }
      if (state4.lineIndent < textIndent) {
        if (chomping === CHOMPING_KEEP) {
          state4.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
        } else if (chomping === CHOMPING_CLIP) {
          if (didReadContent) {
            state4.result += "\n";
          }
        }
        break;
      }
      if (folding) {
        if (is_WHITE_SPACE(ch)) {
          atMoreIndented = true;
          state4.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
        } else if (atMoreIndented) {
          atMoreIndented = false;
          state4.result += common.repeat("\n", emptyLines + 1);
        } else if (emptyLines === 0) {
          if (didReadContent) {
            state4.result += " ";
          }
        } else {
          state4.result += common.repeat("\n", emptyLines);
        }
      } else {
        state4.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
      }
      didReadContent = true;
      detectedIndent = true;
      emptyLines = 0;
      captureStart = state4.position;
      while (!is_EOL(ch) && ch !== 0) {
        ch = state4.input.charCodeAt(++state4.position);
      }
      captureSegment(state4, captureStart, state4.position, false);
    }
    return true;
  }
  function readBlockSequence(state4, nodeIndent) {
    var _line, _tag = state4.tag, _anchor = state4.anchor, _result = [], following, detected = false, ch;
    if (state4.firstTabInLine !== -1) return false;
    if (state4.anchor !== null) {
      state4.anchorMap[state4.anchor] = _result;
    }
    ch = state4.input.charCodeAt(state4.position);
    while (ch !== 0) {
      if (state4.firstTabInLine !== -1) {
        state4.position = state4.firstTabInLine;
        throwError(state4, "tab characters must not be used in indentation");
      }
      if (ch !== 45) {
        break;
      }
      following = state4.input.charCodeAt(state4.position + 1);
      if (!is_WS_OR_EOL(following)) {
        break;
      }
      detected = true;
      state4.position++;
      if (skipSeparationSpace(state4, true, -1)) {
        if (state4.lineIndent <= nodeIndent) {
          _result.push(null);
          ch = state4.input.charCodeAt(state4.position);
          continue;
        }
      }
      _line = state4.line;
      composeNode(state4, nodeIndent, CONTEXT_BLOCK_IN, false, true);
      _result.push(state4.result);
      skipSeparationSpace(state4, true, -1);
      ch = state4.input.charCodeAt(state4.position);
      if ((state4.line === _line || state4.lineIndent > nodeIndent) && ch !== 0) {
        throwError(state4, "bad indentation of a sequence entry");
      } else if (state4.lineIndent < nodeIndent) {
        break;
      }
    }
    if (detected) {
      state4.tag = _tag;
      state4.anchor = _anchor;
      state4.kind = "sequence";
      state4.result = _result;
      return true;
    }
    return false;
  }
  function readBlockMapping(state4, nodeIndent, flowIndent) {
    var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state4.tag, _anchor = state4.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;
    if (state4.firstTabInLine !== -1) return false;
    if (state4.anchor !== null) {
      state4.anchorMap[state4.anchor] = _result;
    }
    ch = state4.input.charCodeAt(state4.position);
    while (ch !== 0) {
      if (!atExplicitKey && state4.firstTabInLine !== -1) {
        state4.position = state4.firstTabInLine;
        throwError(state4, "tab characters must not be used in indentation");
      }
      following = state4.input.charCodeAt(state4.position + 1);
      _line = state4.line;
      if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {
        if (ch === 63) {
          if (atExplicitKey) {
            storeMappingPair(state4, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
            keyTag = keyNode = valueNode = null;
          }
          detected = true;
          atExplicitKey = true;
          allowCompact = true;
        } else if (atExplicitKey) {
          atExplicitKey = false;
          allowCompact = true;
        } else {
          throwError(state4, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line");
        }
        state4.position += 1;
        ch = following;
      } else {
        _keyLine = state4.line;
        _keyLineStart = state4.lineStart;
        _keyPos = state4.position;
        if (!composeNode(state4, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
          break;
        }
        if (state4.line === _line) {
          ch = state4.input.charCodeAt(state4.position);
          while (is_WHITE_SPACE(ch)) {
            ch = state4.input.charCodeAt(++state4.position);
          }
          if (ch === 58) {
            ch = state4.input.charCodeAt(++state4.position);
            if (!is_WS_OR_EOL(ch)) {
              throwError(state4, "a whitespace character is expected after the key-value separator within a block mapping");
            }
            if (atExplicitKey) {
              storeMappingPair(state4, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
              keyTag = keyNode = valueNode = null;
            }
            detected = true;
            atExplicitKey = false;
            allowCompact = false;
            keyTag = state4.tag;
            keyNode = state4.result;
          } else if (detected) {
            throwError(state4, "can not read an implicit mapping pair; a colon is missed");
          } else {
            state4.tag = _tag;
            state4.anchor = _anchor;
            return true;
          }
        } else if (detected) {
          throwError(state4, "can not read a block mapping entry; a multiline key may not be an implicit key");
        } else {
          state4.tag = _tag;
          state4.anchor = _anchor;
          return true;
        }
      }
      if (state4.line === _line || state4.lineIndent > nodeIndent) {
        if (atExplicitKey) {
          _keyLine = state4.line;
          _keyLineStart = state4.lineStart;
          _keyPos = state4.position;
        }
        if (composeNode(state4, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
          if (atExplicitKey) {
            keyNode = state4.result;
          } else {
            valueNode = state4.result;
          }
        }
        if (!atExplicitKey) {
          storeMappingPair(state4, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);
          keyTag = keyNode = valueNode = null;
        }
        skipSeparationSpace(state4, true, -1);
        ch = state4.input.charCodeAt(state4.position);
      }
      if ((state4.line === _line || state4.lineIndent > nodeIndent) && ch !== 0) {
        throwError(state4, "bad indentation of a mapping entry");
      } else if (state4.lineIndent < nodeIndent) {
        break;
      }
    }
    if (atExplicitKey) {
      storeMappingPair(state4, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
    }
    if (detected) {
      state4.tag = _tag;
      state4.anchor = _anchor;
      state4.kind = "mapping";
      state4.result = _result;
    }
    return detected;
  }
  function readTagProperty(state4) {
    var _position, isVerbatim = false, isNamed2 = false, tagHandle, tagName, ch;
    ch = state4.input.charCodeAt(state4.position);
    if (ch !== 33) return false;
    if (state4.tag !== null) {
      throwError(state4, "duplication of a tag property");
    }
    ch = state4.input.charCodeAt(++state4.position);
    if (ch === 60) {
      isVerbatim = true;
      ch = state4.input.charCodeAt(++state4.position);
    } else if (ch === 33) {
      isNamed2 = true;
      tagHandle = "!!";
      ch = state4.input.charCodeAt(++state4.position);
    } else {
      tagHandle = "!";
    }
    _position = state4.position;
    if (isVerbatim) {
      do {
        ch = state4.input.charCodeAt(++state4.position);
      } while (ch !== 0 && ch !== 62);
      if (state4.position < state4.length) {
        tagName = state4.input.slice(_position, state4.position);
        ch = state4.input.charCodeAt(++state4.position);
      } else {
        throwError(state4, "unexpected end of the stream within a verbatim tag");
      }
    } else {
      while (ch !== 0 && !is_WS_OR_EOL(ch)) {
        if (ch === 33) {
          if (!isNamed2) {
            tagHandle = state4.input.slice(_position - 1, state4.position + 1);
            if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
              throwError(state4, "named tag handle cannot contain such characters");
            }
            isNamed2 = true;
            _position = state4.position + 1;
          } else {
            throwError(state4, "tag suffix cannot contain exclamation marks");
          }
        }
        ch = state4.input.charCodeAt(++state4.position);
      }
      tagName = state4.input.slice(_position, state4.position);
      if (PATTERN_FLOW_INDICATORS.test(tagName)) {
        throwError(state4, "tag suffix cannot contain flow indicator characters");
      }
    }
    if (tagName && !PATTERN_TAG_URI.test(tagName)) {
      throwError(state4, "tag name cannot contain such characters: " + tagName);
    }
    try {
      tagName = decodeURIComponent(tagName);
    } catch (err) {
      throwError(state4, "tag name is malformed: " + tagName);
    }
    if (isVerbatim) {
      state4.tag = tagName;
    } else if (_hasOwnProperty$1.call(state4.tagMap, tagHandle)) {
      state4.tag = state4.tagMap[tagHandle] + tagName;
    } else if (tagHandle === "!") {
      state4.tag = "!" + tagName;
    } else if (tagHandle === "!!") {
      state4.tag = "tag:yaml.org,2002:" + tagName;
    } else {
      throwError(state4, 'undeclared tag handle "' + tagHandle + '"');
    }
    return true;
  }
  function readAnchorProperty(state4) {
    var _position, ch;
    ch = state4.input.charCodeAt(state4.position);
    if (ch !== 38) return false;
    if (state4.anchor !== null) {
      throwError(state4, "duplication of an anchor property");
    }
    ch = state4.input.charCodeAt(++state4.position);
    _position = state4.position;
    while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
      ch = state4.input.charCodeAt(++state4.position);
    }
    if (state4.position === _position) {
      throwError(state4, "name of an anchor node must contain at least one character");
    }
    state4.anchor = state4.input.slice(_position, state4.position);
    return true;
  }
  function readAlias(state4) {
    var _position, alias, ch;
    ch = state4.input.charCodeAt(state4.position);
    if (ch !== 42) return false;
    ch = state4.input.charCodeAt(++state4.position);
    _position = state4.position;
    while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
      ch = state4.input.charCodeAt(++state4.position);
    }
    if (state4.position === _position) {
      throwError(state4, "name of an alias node must contain at least one character");
    }
    alias = state4.input.slice(_position, state4.position);
    if (!_hasOwnProperty$1.call(state4.anchorMap, alias)) {
      throwError(state4, 'unidentified alias "' + alias + '"');
    }
    state4.result = state4.anchorMap[alias];
    skipSeparationSpace(state4, true, -1);
    return true;
  }
  function composeNode(state4, parentIndent, nodeContext, allowToSeek, allowCompact) {
    var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type3, flowIndent, blockIndent;
    if (state4.listener !== null) {
      state4.listener("open", state4);
    }
    state4.tag = null;
    state4.anchor = null;
    state4.kind = null;
    state4.result = null;
    allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;
    if (allowToSeek) {
      if (skipSeparationSpace(state4, true, -1)) {
        atNewLine = true;
        if (state4.lineIndent > parentIndent) {
          indentStatus = 1;
        } else if (state4.lineIndent === parentIndent) {
          indentStatus = 0;
        } else if (state4.lineIndent < parentIndent) {
          indentStatus = -1;
        }
      }
    }
    if (indentStatus === 1) {
      while (readTagProperty(state4) || readAnchorProperty(state4)) {
        if (skipSeparationSpace(state4, true, -1)) {
          atNewLine = true;
          allowBlockCollections = allowBlockStyles;
          if (state4.lineIndent > parentIndent) {
            indentStatus = 1;
          } else if (state4.lineIndent === parentIndent) {
            indentStatus = 0;
          } else if (state4.lineIndent < parentIndent) {
            indentStatus = -1;
          }
        } else {
          allowBlockCollections = false;
        }
      }
    }
    if (allowBlockCollections) {
      allowBlockCollections = atNewLine || allowCompact;
    }
    if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
      if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
        flowIndent = parentIndent;
      } else {
        flowIndent = parentIndent + 1;
      }
      blockIndent = state4.position - state4.lineStart;
      if (indentStatus === 1) {
        if (allowBlockCollections && (readBlockSequence(state4, blockIndent) || readBlockMapping(state4, blockIndent, flowIndent)) || readFlowCollection(state4, flowIndent)) {
          hasContent = true;
        } else {
          if (allowBlockScalars && readBlockScalar(state4, flowIndent) || readSingleQuotedScalar(state4, flowIndent) || readDoubleQuotedScalar(state4, flowIndent)) {
            hasContent = true;
          } else if (readAlias(state4)) {
            hasContent = true;
            if (state4.tag !== null || state4.anchor !== null) {
              throwError(state4, "alias node should not have any properties");
            }
          } else if (readPlainScalar(state4, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
            hasContent = true;
            if (state4.tag === null) {
              state4.tag = "?";
            }
          }
          if (state4.anchor !== null) {
            state4.anchorMap[state4.anchor] = state4.result;
          }
        }
      } else if (indentStatus === 0) {
        hasContent = allowBlockCollections && readBlockSequence(state4, blockIndent);
      }
    }
    if (state4.tag === null) {
      if (state4.anchor !== null) {
        state4.anchorMap[state4.anchor] = state4.result;
      }
    } else if (state4.tag === "?") {
      if (state4.result !== null && state4.kind !== "scalar") {
        throwError(state4, 'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state4.kind + '"');
      }
      for (typeIndex = 0, typeQuantity = state4.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
        type3 = state4.implicitTypes[typeIndex];
        if (type3.resolve(state4.result)) {
          state4.result = type3.construct(state4.result);
          state4.tag = type3.tag;
          if (state4.anchor !== null) {
            state4.anchorMap[state4.anchor] = state4.result;
          }
          break;
        }
      }
    } else if (state4.tag !== "!") {
      if (_hasOwnProperty$1.call(state4.typeMap[state4.kind || "fallback"], state4.tag)) {
        type3 = state4.typeMap[state4.kind || "fallback"][state4.tag];
      } else {
        type3 = null;
        typeList = state4.typeMap.multi[state4.kind || "fallback"];
        for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {
          if (state4.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {
            type3 = typeList[typeIndex];
            break;
          }
        }
      }
      if (!type3) {
        throwError(state4, "unknown tag !<" + state4.tag + ">");
      }
      if (state4.result !== null && type3.kind !== state4.kind) {
        throwError(state4, "unacceptable node kind for !<" + state4.tag + '> tag; it should be "' + type3.kind + '", not "' + state4.kind + '"');
      }
      if (!type3.resolve(state4.result, state4.tag)) {
        throwError(state4, "cannot resolve a node with !<" + state4.tag + "> explicit tag");
      } else {
        state4.result = type3.construct(state4.result, state4.tag);
        if (state4.anchor !== null) {
          state4.anchorMap[state4.anchor] = state4.result;
        }
      }
    }
    if (state4.listener !== null) {
      state4.listener("close", state4);
    }
    return state4.tag !== null || state4.anchor !== null || hasContent;
  }
  function readDocument(state4) {
    var documentStart = state4.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;
    state4.version = null;
    state4.checkLineBreaks = state4.legacy;
    state4.tagMap = /* @__PURE__ */ Object.create(null);
    state4.anchorMap = /* @__PURE__ */ Object.create(null);
    while ((ch = state4.input.charCodeAt(state4.position)) !== 0) {
      skipSeparationSpace(state4, true, -1);
      ch = state4.input.charCodeAt(state4.position);
      if (state4.lineIndent > 0 || ch !== 37) {
        break;
      }
      hasDirectives = true;
      ch = state4.input.charCodeAt(++state4.position);
      _position = state4.position;
      while (ch !== 0 && !is_WS_OR_EOL(ch)) {
        ch = state4.input.charCodeAt(++state4.position);
      }
      directiveName = state4.input.slice(_position, state4.position);
      directiveArgs = [];
      if (directiveName.length < 1) {
        throwError(state4, "directive name must not be less than one character in length");
      }
      while (ch !== 0) {
        while (is_WHITE_SPACE(ch)) {
          ch = state4.input.charCodeAt(++state4.position);
        }
        if (ch === 35) {
          do {
            ch = state4.input.charCodeAt(++state4.position);
          } while (ch !== 0 && !is_EOL(ch));
          break;
        }
        if (is_EOL(ch)) break;
        _position = state4.position;
        while (ch !== 0 && !is_WS_OR_EOL(ch)) {
          ch = state4.input.charCodeAt(++state4.position);
        }
        directiveArgs.push(state4.input.slice(_position, state4.position));
      }
      if (ch !== 0) readLineBreak(state4);
      if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
        directiveHandlers[directiveName](state4, directiveName, directiveArgs);
      } else {
        throwWarning(state4, 'unknown document directive "' + directiveName + '"');
      }
    }
    skipSeparationSpace(state4, true, -1);
    if (state4.lineIndent === 0 && state4.input.charCodeAt(state4.position) === 45 && state4.input.charCodeAt(state4.position + 1) === 45 && state4.input.charCodeAt(state4.position + 2) === 45) {
      state4.position += 3;
      skipSeparationSpace(state4, true, -1);
    } else if (hasDirectives) {
      throwError(state4, "directives end mark is expected");
    }
    composeNode(state4, state4.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
    skipSeparationSpace(state4, true, -1);
    if (state4.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state4.input.slice(documentStart, state4.position))) {
      throwWarning(state4, "non-ASCII line breaks are interpreted as content");
    }
    state4.documents.push(state4.result);
    if (state4.position === state4.lineStart && testDocumentSeparator(state4)) {
      if (state4.input.charCodeAt(state4.position) === 46) {
        state4.position += 3;
        skipSeparationSpace(state4, true, -1);
      }
      return;
    }
    if (state4.position < state4.length - 1) {
      throwError(state4, "end of the stream or a document separator is expected");
    } else {
      return;
    }
  }
  function loadDocuments(input, options2) {
    input = String(input);
    options2 = options2 || {};
    if (input.length !== 0) {
      if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {
        input += "\n";
      }
      if (input.charCodeAt(0) === 65279) {
        input = input.slice(1);
      }
    }
    var state4 = new State$1(input, options2);
    var nullpos = input.indexOf("\0");
    if (nullpos !== -1) {
      state4.position = nullpos;
      throwError(state4, "null byte is not allowed in input");
    }
    state4.input += "\0";
    while (state4.input.charCodeAt(state4.position) === 32) {
      state4.lineIndent += 1;
      state4.position += 1;
    }
    while (state4.position < state4.length - 1) {
      readDocument(state4);
    }
    return state4.documents;
  }
  function loadAll$1(input, iterator, options2) {
    if (iterator !== null && typeof iterator === "object" && typeof options2 === "undefined") {
      options2 = iterator;
      iterator = null;
    }
    var documents = loadDocuments(input, options2);
    if (typeof iterator !== "function") {
      return documents;
    }
    for (var index = 0, length2 = documents.length; index < length2; index += 1) {
      iterator(documents[index]);
    }
  }
  function load$1(input, options2) {
    var documents = loadDocuments(input, options2);
    if (documents.length === 0) {
      return void 0;
    } else if (documents.length === 1) {
      return documents[0];
    }
    throw new exception("expected a single document in the stream, but found more");
  }
  function compileStyleMap(schema2, map6) {
    var result, keys3, index, length2, tag, style3, type3;
    if (map6 === null) return {};
    result = {};
    keys3 = Object.keys(map6);
    for (index = 0, length2 = keys3.length; index < length2; index += 1) {
      tag = keys3[index];
      style3 = String(map6[tag]);
      if (tag.slice(0, 2) === "!!") {
        tag = "tag:yaml.org,2002:" + tag.slice(2);
      }
      type3 = schema2.compiledTypeMap["fallback"][tag];
      if (type3 && _hasOwnProperty.call(type3.styleAliases, style3)) {
        style3 = type3.styleAliases[style3];
      }
      result[tag] = style3;
    }
    return result;
  }
  function encodeHex(character2) {
    var string3, handle, length2;
    string3 = character2.toString(16).toUpperCase();
    if (character2 <= 255) {
      handle = "x";
      length2 = 2;
    } else if (character2 <= 65535) {
      handle = "u";
      length2 = 4;
    } else if (character2 <= 4294967295) {
      handle = "U";
      length2 = 8;
    } else {
      throw new exception("code point within a string may not be greater than 0xFFFFFFFF");
    }
    return "\\" + handle + common.repeat("0", length2 - string3.length) + string3;
  }
  function State(options2) {
    this.schema = options2["schema"] || _default;
    this.indent = Math.max(1, options2["indent"] || 2);
    this.noArrayIndent = options2["noArrayIndent"] || false;
    this.skipInvalid = options2["skipInvalid"] || false;
    this.flowLevel = common.isNothing(options2["flowLevel"]) ? -1 : options2["flowLevel"];
    this.styleMap = compileStyleMap(this.schema, options2["styles"] || null);
    this.sortKeys = options2["sortKeys"] || false;
    this.lineWidth = options2["lineWidth"] || 80;
    this.noRefs = options2["noRefs"] || false;
    this.noCompatMode = options2["noCompatMode"] || false;
    this.condenseFlow = options2["condenseFlow"] || false;
    this.quotingType = options2["quotingType"] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;
    this.forceQuotes = options2["forceQuotes"] || false;
    this.replacer = typeof options2["replacer"] === "function" ? options2["replacer"] : null;
    this.implicitTypes = this.schema.compiledImplicit;
    this.explicitTypes = this.schema.compiledExplicit;
    this.tag = null;
    this.result = "";
    this.duplicates = [];
    this.usedDuplicates = null;
  }
  function indentString(string3, spaces) {
    var ind = common.repeat(" ", spaces), position5 = 0, next3 = -1, result = "", line2, length2 = string3.length;
    while (position5 < length2) {
      next3 = string3.indexOf("\n", position5);
      if (next3 === -1) {
        line2 = string3.slice(position5);
        position5 = length2;
      } else {
        line2 = string3.slice(position5, next3 + 1);
        position5 = next3 + 1;
      }
      if (line2.length && line2 !== "\n") result += ind;
      result += line2;
    }
    return result;
  }
  function generateNextLine(state4, level) {
    return "\n" + common.repeat(" ", state4.indent * level);
  }
  function testImplicitResolving(state4, str2) {
    var index, length2, type3;
    for (index = 0, length2 = state4.implicitTypes.length; index < length2; index += 1) {
      type3 = state4.implicitTypes[index];
      if (type3.resolve(str2)) {
        return true;
      }
    }
    return false;
  }
  function isWhitespace(c3) {
    return c3 === CHAR_SPACE || c3 === CHAR_TAB;
  }
  function isPrintable(c3) {
    return 32 <= c3 && c3 <= 126 || 161 <= c3 && c3 <= 55295 && c3 !== 8232 && c3 !== 8233 || 57344 <= c3 && c3 <= 65533 && c3 !== CHAR_BOM || 65536 <= c3 && c3 <= 1114111;
  }
  function isNsCharOrWhitespace(c3) {
    return isPrintable(c3) && c3 !== CHAR_BOM && c3 !== CHAR_CARRIAGE_RETURN && c3 !== CHAR_LINE_FEED;
  }
  function isPlainSafe(c3, prev2, inblock) {
    var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c3);
    var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c3);
    return (
      // ns-plain-safe
      (inblock ? (
        // c = flow-in
        cIsNsCharOrWhitespace
      ) : cIsNsCharOrWhitespace && c3 !== CHAR_COMMA && c3 !== CHAR_LEFT_SQUARE_BRACKET && c3 !== CHAR_RIGHT_SQUARE_BRACKET && c3 !== CHAR_LEFT_CURLY_BRACKET && c3 !== CHAR_RIGHT_CURLY_BRACKET) && c3 !== CHAR_SHARP && !(prev2 === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev2) && !isWhitespace(prev2) && c3 === CHAR_SHARP || prev2 === CHAR_COLON && cIsNsChar
    );
  }
  function isPlainSafeFirst(c3) {
    return isPrintable(c3) && c3 !== CHAR_BOM && !isWhitespace(c3) && c3 !== CHAR_MINUS && c3 !== CHAR_QUESTION && c3 !== CHAR_COLON && c3 !== CHAR_COMMA && c3 !== CHAR_LEFT_SQUARE_BRACKET && c3 !== CHAR_RIGHT_SQUARE_BRACKET && c3 !== CHAR_LEFT_CURLY_BRACKET && c3 !== CHAR_RIGHT_CURLY_BRACKET && c3 !== CHAR_SHARP && c3 !== CHAR_AMPERSAND && c3 !== CHAR_ASTERISK && c3 !== CHAR_EXCLAMATION && c3 !== CHAR_VERTICAL_LINE && c3 !== CHAR_EQUALS && c3 !== CHAR_GREATER_THAN && c3 !== CHAR_SINGLE_QUOTE && c3 !== CHAR_DOUBLE_QUOTE && c3 !== CHAR_PERCENT && c3 !== CHAR_COMMERCIAL_AT && c3 !== CHAR_GRAVE_ACCENT;
  }
  function isPlainSafeLast(c3) {
    return !isWhitespace(c3) && c3 !== CHAR_COLON;
  }
  function codePointAt(string3, pos) {
    var first3 = string3.charCodeAt(pos), second2;
    if (first3 >= 55296 && first3 <= 56319 && pos + 1 < string3.length) {
      second2 = string3.charCodeAt(pos + 1);
      if (second2 >= 56320 && second2 <= 57343) {
        return (first3 - 55296) * 1024 + second2 - 56320 + 65536;
      }
    }
    return first3;
  }
  function needIndentIndicator(string3) {
    var leadingSpaceRe = /^\n* /;
    return leadingSpaceRe.test(string3);
  }
  function chooseScalarStyle(string3, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {
    var i2;
    var char2 = 0;
    var prevChar = null;
    var hasLineBreak = false;
    var hasFoldableLine = false;
    var shouldTrackWidth = lineWidth !== -1;
    var previousLineBreak = -1;
    var plain = isPlainSafeFirst(codePointAt(string3, 0)) && isPlainSafeLast(codePointAt(string3, string3.length - 1));
    if (singleLineOnly || forceQuotes) {
      for (i2 = 0; i2 < string3.length; char2 >= 65536 ? i2 += 2 : i2++) {
        char2 = codePointAt(string3, i2);
        if (!isPrintable(char2)) {
          return STYLE_DOUBLE;
        }
        plain = plain && isPlainSafe(char2, prevChar, inblock);
        prevChar = char2;
      }
    } else {
      for (i2 = 0; i2 < string3.length; char2 >= 65536 ? i2 += 2 : i2++) {
        char2 = codePointAt(string3, i2);
        if (char2 === CHAR_LINE_FEED) {
          hasLineBreak = true;
          if (shouldTrackWidth) {
            hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.
            i2 - previousLineBreak - 1 > lineWidth && string3[previousLineBreak + 1] !== " ";
            previousLineBreak = i2;
          }
        } else if (!isPrintable(char2)) {
          return STYLE_DOUBLE;
        }
        plain = plain && isPlainSafe(char2, prevChar, inblock);
        prevChar = char2;
      }
      hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i2 - previousLineBreak - 1 > lineWidth && string3[previousLineBreak + 1] !== " ");
    }
    if (!hasLineBreak && !hasFoldableLine) {
      if (plain && !forceQuotes && !testAmbiguousType(string3)) {
        return STYLE_PLAIN;
      }
      return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
    }
    if (indentPerLevel > 9 && needIndentIndicator(string3)) {
      return STYLE_DOUBLE;
    }
    if (!forceQuotes) {
      return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
    }
    return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
  }
  function writeScalar(state4, string3, level, iskey, inblock) {
    state4.dump = (function() {
      if (string3.length === 0) {
        return state4.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''";
      }
      if (!state4.noCompatMode) {
        if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string3) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string3)) {
          return state4.quotingType === QUOTING_TYPE_DOUBLE ? '"' + string3 + '"' : "'" + string3 + "'";
        }
      }
      var indent = state4.indent * Math.max(1, level);
      var lineWidth = state4.lineWidth === -1 ? -1 : Math.max(Math.min(state4.lineWidth, 40), state4.lineWidth - indent);
      var singleLineOnly = iskey || state4.flowLevel > -1 && level >= state4.flowLevel;
      function testAmbiguity(string4) {
        return testImplicitResolving(state4, string4);
      }
      __name(testAmbiguity, "testAmbiguity");
      switch (chooseScalarStyle(
        string3,
        singleLineOnly,
        state4.indent,
        lineWidth,
        testAmbiguity,
        state4.quotingType,
        state4.forceQuotes && !iskey,
        inblock
      )) {
        case STYLE_PLAIN:
          return string3;
        case STYLE_SINGLE:
          return "'" + string3.replace(/'/g, "''") + "'";
        case STYLE_LITERAL:
          return "|" + blockHeader(string3, state4.indent) + dropEndingNewline(indentString(string3, indent));
        case STYLE_FOLDED:
          return ">" + blockHeader(string3, state4.indent) + dropEndingNewline(indentString(foldString(string3, lineWidth), indent));
        case STYLE_DOUBLE:
          return '"' + escapeString(string3) + '"';
        default:
          throw new exception("impossible error: invalid scalar style");
      }
    })();
  }
  function blockHeader(string3, indentPerLevel) {
    var indentIndicator = needIndentIndicator(string3) ? String(indentPerLevel) : "";
    var clip = string3[string3.length - 1] === "\n";
    var keep = clip && (string3[string3.length - 2] === "\n" || string3 === "\n");
    var chomp = keep ? "+" : clip ? "" : "-";
    return indentIndicator + chomp + "\n";
  }
  function dropEndingNewline(string3) {
    return string3[string3.length - 1] === "\n" ? string3.slice(0, -1) : string3;
  }
  function foldString(string3, width3) {
    var lineRe = /(\n+)([^\n]*)/g;
    var result = (function() {
      var nextLF = string3.indexOf("\n");
      nextLF = nextLF !== -1 ? nextLF : string3.length;
      lineRe.lastIndex = nextLF;
      return foldLine(string3.slice(0, nextLF), width3);
    })();
    var prevMoreIndented = string3[0] === "\n" || string3[0] === " ";
    var moreIndented;
    var match3;
    while (match3 = lineRe.exec(string3)) {
      var prefix = match3[1], line2 = match3[2];
      moreIndented = line2[0] === " ";
      result += prefix + (!prevMoreIndented && !moreIndented && line2 !== "" ? "\n" : "") + foldLine(line2, width3);
      prevMoreIndented = moreIndented;
    }
    return result;
  }
  function foldLine(line2, width3) {
    if (line2 === "" || line2[0] === " ") return line2;
    var breakRe = / [^ ]/g;
    var match3;
    var start3 = 0, end2, curr = 0, next3 = 0;
    var result = "";
    while (match3 = breakRe.exec(line2)) {
      next3 = match3.index;
      if (next3 - start3 > width3) {
        end2 = curr > start3 ? curr : next3;
        result += "\n" + line2.slice(start3, end2);
        start3 = end2 + 1;
      }
      curr = next3;
    }
    result += "\n";
    if (line2.length - start3 > width3 && curr > start3) {
      result += line2.slice(start3, curr) + "\n" + line2.slice(curr + 1);
    } else {
      result += line2.slice(start3);
    }
    return result.slice(1);
  }
  function escapeString(string3) {
    var result = "";
    var char2 = 0;
    var escapeSeq;
    for (var i2 = 0; i2 < string3.length; char2 >= 65536 ? i2 += 2 : i2++) {
      char2 = codePointAt(string3, i2);
      escapeSeq = ESCAPE_SEQUENCES[char2];
      if (!escapeSeq && isPrintable(char2)) {
        result += string3[i2];
        if (char2 >= 65536) result += string3[i2 + 1];
      } else {
        result += escapeSeq || encodeHex(char2);
      }
    }
    return result;
  }
  function writeFlowSequence(state4, level, object3) {
    var _result = "", _tag = state4.tag, index, length2, value2;
    for (index = 0, length2 = object3.length; index < length2; index += 1) {
      value2 = object3[index];
      if (state4.replacer) {
        value2 = state4.replacer.call(object3, String(index), value2);
      }
      if (writeNode(state4, level, value2, false, false) || typeof value2 === "undefined" && writeNode(state4, level, null, false, false)) {
        if (_result !== "") _result += "," + (!state4.condenseFlow ? " " : "");
        _result += state4.dump;
      }
    }
    state4.tag = _tag;
    state4.dump = "[" + _result + "]";
  }
  function writeBlockSequence(state4, level, object3, compact2) {
    var _result = "", _tag = state4.tag, index, length2, value2;
    for (index = 0, length2 = object3.length; index < length2; index += 1) {
      value2 = object3[index];
      if (state4.replacer) {
        value2 = state4.replacer.call(object3, String(index), value2);
      }
      if (writeNode(state4, level + 1, value2, true, true, false, true) || typeof value2 === "undefined" && writeNode(state4, level + 1, null, true, true, false, true)) {
        if (!compact2 || _result !== "") {
          _result += generateNextLine(state4, level);
        }
        if (state4.dump && CHAR_LINE_FEED === state4.dump.charCodeAt(0)) {
          _result += "-";
        } else {
          _result += "- ";
        }
        _result += state4.dump;
      }
    }
    state4.tag = _tag;
    state4.dump = _result || "[]";
  }
  function writeFlowMapping(state4, level, object3) {
    var _result = "", _tag = state4.tag, objectKeyList = Object.keys(object3), index, length2, objectKey, objectValue, pairBuffer;
    for (index = 0, length2 = objectKeyList.length; index < length2; index += 1) {
      pairBuffer = "";
      if (_result !== "") pairBuffer += ", ";
      if (state4.condenseFlow) pairBuffer += '"';
      objectKey = objectKeyList[index];
      objectValue = object3[objectKey];
      if (state4.replacer) {
        objectValue = state4.replacer.call(object3, objectKey, objectValue);
      }
      if (!writeNode(state4, level, objectKey, false, false)) {
        continue;
      }
      if (state4.dump.length > 1024) pairBuffer += "? ";
      pairBuffer += state4.dump + (state4.condenseFlow ? '"' : "") + ":" + (state4.condenseFlow ? "" : " ");
      if (!writeNode(state4, level, objectValue, false, false)) {
        continue;
      }
      pairBuffer += state4.dump;
      _result += pairBuffer;
    }
    state4.tag = _tag;
    state4.dump = "{" + _result + "}";
  }
  function writeBlockMapping(state4, level, object3, compact2) {
    var _result = "", _tag = state4.tag, objectKeyList = Object.keys(object3), index, length2, objectKey, objectValue, explicitPair, pairBuffer;
    if (state4.sortKeys === true) {
      objectKeyList.sort();
    } else if (typeof state4.sortKeys === "function") {
      objectKeyList.sort(state4.sortKeys);
    } else if (state4.sortKeys) {
      throw new exception("sortKeys must be a boolean or a function");
    }
    for (index = 0, length2 = objectKeyList.length; index < length2; index += 1) {
      pairBuffer = "";
      if (!compact2 || _result !== "") {
        pairBuffer += generateNextLine(state4, level);
      }
      objectKey = objectKeyList[index];
      objectValue = object3[objectKey];
      if (state4.replacer) {
        objectValue = state4.replacer.call(object3, objectKey, objectValue);
      }
      if (!writeNode(state4, level + 1, objectKey, true, true, true)) {
        continue;
      }
      explicitPair = state4.tag !== null && state4.tag !== "?" || state4.dump && state4.dump.length > 1024;
      if (explicitPair) {
        if (state4.dump && CHAR_LINE_FEED === state4.dump.charCodeAt(0)) {
          pairBuffer += "?";
        } else {
          pairBuffer += "? ";
        }
      }
      pairBuffer += state4.dump;
      if (explicitPair) {
        pairBuffer += generateNextLine(state4, level);
      }
      if (!writeNode(state4, level + 1, objectValue, true, explicitPair)) {
        continue;
      }
      if (state4.dump && CHAR_LINE_FEED === state4.dump.charCodeAt(0)) {
        pairBuffer += ":";
      } else {
        pairBuffer += ": ";
      }
      pairBuffer += state4.dump;
      _result += pairBuffer;
    }
    state4.tag = _tag;
    state4.dump = _result || "{}";
  }
  function detectType2(state4, object3, explicit) {
    var _result, typeList, index, length2, type3, style3;
    typeList = explicit ? state4.explicitTypes : state4.implicitTypes;
    for (index = 0, length2 = typeList.length; index < length2; index += 1) {
      type3 = typeList[index];
      if ((type3.instanceOf || type3.predicate) && (!type3.instanceOf || typeof object3 === "object" && object3 instanceof type3.instanceOf) && (!type3.predicate || type3.predicate(object3))) {
        if (explicit) {
          if (type3.multi && type3.representName) {
            state4.tag = type3.representName(object3);
          } else {
            state4.tag = type3.tag;
          }
        } else {
          state4.tag = "?";
        }
        if (type3.represent) {
          style3 = state4.styleMap[type3.tag] || type3.defaultStyle;
          if (_toString.call(type3.represent) === "[object Function]") {
            _result = type3.represent(object3, style3);
          } else if (_hasOwnProperty.call(type3.represent, style3)) {
            _result = type3.represent[style3](object3, style3);
          } else {
            throw new exception("!<" + type3.tag + '> tag resolver accepts not "' + style3 + '" style');
          }
          state4.dump = _result;
        }
        return true;
      }
    }
    return false;
  }
  function writeNode(state4, level, object3, block2, compact2, iskey, isblockseq) {
    state4.tag = null;
    state4.dump = object3;
    if (!detectType2(state4, object3, false)) {
      detectType2(state4, object3, true);
    }
    var type3 = _toString.call(state4.dump);
    var inblock = block2;
    var tagStr;
    if (block2) {
      block2 = state4.flowLevel < 0 || state4.flowLevel > level;
    }
    var objectOrArray = type3 === "[object Object]" || type3 === "[object Array]", duplicateIndex, duplicate;
    if (objectOrArray) {
      duplicateIndex = state4.duplicates.indexOf(object3);
      duplicate = duplicateIndex !== -1;
    }
    if (state4.tag !== null && state4.tag !== "?" || duplicate || state4.indent !== 2 && level > 0) {
      compact2 = false;
    }
    if (duplicate && state4.usedDuplicates[duplicateIndex]) {
      state4.dump = "*ref_" + duplicateIndex;
    } else {
      if (objectOrArray && duplicate && !state4.usedDuplicates[duplicateIndex]) {
        state4.usedDuplicates[duplicateIndex] = true;
      }
      if (type3 === "[object Object]") {
        if (block2 && Object.keys(state4.dump).length !== 0) {
          writeBlockMapping(state4, level, state4.dump, compact2);
          if (duplicate) {
            state4.dump = "&ref_" + duplicateIndex + state4.dump;
          }
        } else {
          writeFlowMapping(state4, level, state4.dump);
          if (duplicate) {
            state4.dump = "&ref_" + duplicateIndex + " " + state4.dump;
          }
        }
      } else if (type3 === "[object Array]") {
        if (block2 && state4.dump.length !== 0) {
          if (state4.noArrayIndent && !isblockseq && level > 0) {
            writeBlockSequence(state4, level - 1, state4.dump, compact2);
          } else {
            writeBlockSequence(state4, level, state4.dump, compact2);
          }
          if (duplicate) {
            state4.dump = "&ref_" + duplicateIndex + state4.dump;
          }
        } else {
          writeFlowSequence(state4, level, state4.dump);
          if (duplicate) {
            state4.dump = "&ref_" + duplicateIndex + " " + state4.dump;
          }
        }
      } else if (type3 === "[object String]") {
        if (state4.tag !== "?") {
          writeScalar(state4, state4.dump, level, iskey, inblock);
        }
      } else if (type3 === "[object Undefined]") {
        return false;
      } else {
        if (state4.skipInvalid) return false;
        throw new exception("unacceptable kind of an object to dump " + type3);
      }
      if (state4.tag !== null && state4.tag !== "?") {
        tagStr = encodeURI(
          state4.tag[0] === "!" ? state4.tag.slice(1) : state4.tag
        ).replace(/!/g, "%21");
        if (state4.tag[0] === "!") {
          tagStr = "!" + tagStr;
        } else if (tagStr.slice(0, 18) === "tag:yaml.org,2002:") {
          tagStr = "!!" + tagStr.slice(18);
        } else {
          tagStr = "!<" + tagStr + ">";
        }
        state4.dump = tagStr + " " + state4.dump;
      }
    }
    return true;
  }
  function getDuplicateReferences(object3, state4) {
    var objects = [], duplicatesIndexes = [], index, length2;
    inspectNode(object3, objects, duplicatesIndexes);
    for (index = 0, length2 = duplicatesIndexes.length; index < length2; index += 1) {
      state4.duplicates.push(objects[duplicatesIndexes[index]]);
    }
    state4.usedDuplicates = new Array(length2);
  }
  function inspectNode(object3, objects, duplicatesIndexes) {
    var objectKeyList, index, length2;
    if (object3 !== null && typeof object3 === "object") {
      index = objects.indexOf(object3);
      if (index !== -1) {
        if (duplicatesIndexes.indexOf(index) === -1) {
          duplicatesIndexes.push(index);
        }
      } else {
        objects.push(object3);
        if (Array.isArray(object3)) {
          for (index = 0, length2 = object3.length; index < length2; index += 1) {
            inspectNode(object3[index], objects, duplicatesIndexes);
          }
        } else {
          objectKeyList = Object.keys(object3);
          for (index = 0, length2 = objectKeyList.length; index < length2; index += 1) {
            inspectNode(object3[objectKeyList[index]], objects, duplicatesIndexes);
          }
        }
      }
    }
  }
  function dump$1(input, options2) {
    options2 = options2 || {};
    var state4 = new State(options2);
    if (!state4.noRefs) getDuplicateReferences(input, state4);
    var value2 = input;
    if (state4.replacer) {
      value2 = state4.replacer.call({ "": value2 }, "", value2);
    }
    if (writeNode(state4, 0, value2, true, true)) return state4.dump + "\n";
    return "";
  }
  function renamed(from2, to) {
    return function() {
      throw new Error("Function yaml." + from2 + " is removed in js-yaml 4. Use yaml." + to + " instead, which is now safe by default.");
    };
  }
  var isNothing_1, isObject_1, toArray_1, repeat_1, isNegativeZero_1, extend_1, common, exception, snippet, TYPE_CONSTRUCTOR_OPTIONS, YAML_NODE_KINDS, type2, schema, str, seq, map2, failsafe, _null, bool, int, YAML_FLOAT_PATTERN, SCIENTIFIC_WITHOUT_DOT, float, json, core, YAML_DATE_REGEXP, YAML_TIMESTAMP_REGEXP, timestamp, merge2, BASE64_MAP, binary, _hasOwnProperty$3, _toString$2, omap, _toString$1, pairs, _hasOwnProperty$2, set3, _default, _hasOwnProperty$1, CONTEXT_FLOW_IN, CONTEXT_FLOW_OUT, CONTEXT_BLOCK_IN, CONTEXT_BLOCK_OUT, CHOMPING_CLIP, CHOMPING_STRIP, CHOMPING_KEEP, PATTERN_NON_PRINTABLE, PATTERN_NON_ASCII_LINE_BREAKS, PATTERN_FLOW_INDICATORS, PATTERN_TAG_HANDLE, PATTERN_TAG_URI, simpleEscapeCheck, simpleEscapeMap, i2, directiveHandlers, loadAll_1, load_1, loader2, _toString, _hasOwnProperty, CHAR_BOM, CHAR_TAB, CHAR_LINE_FEED, CHAR_CARRIAGE_RETURN, CHAR_SPACE, CHAR_EXCLAMATION, CHAR_DOUBLE_QUOTE, CHAR_SHARP, CHAR_PERCENT, CHAR_AMPERSAND, CHAR_SINGLE_QUOTE, CHAR_ASTERISK, CHAR_COMMA, CHAR_MINUS, CHAR_COLON, CHAR_EQUALS, CHAR_GREATER_THAN, CHAR_QUESTION, CHAR_COMMERCIAL_AT, CHAR_LEFT_SQUARE_BRACKET, CHAR_RIGHT_SQUARE_BRACKET, CHAR_GRAVE_ACCENT, CHAR_LEFT_CURLY_BRACKET, CHAR_VERTICAL_LINE, CHAR_RIGHT_CURLY_BRACKET, ESCAPE_SEQUENCES, DEPRECATED_BOOLEANS_SYNTAX, DEPRECATED_BASE60_SYNTAX, QUOTING_TYPE_SINGLE, QUOTING_TYPE_DOUBLE, STYLE_PLAIN, STYLE_SINGLE, STYLE_LITERAL, STYLE_FOLDED, STYLE_DOUBLE, dump_1, dumper, JSON_SCHEMA, load, loadAll, dump, safeLoad, safeLoadAll, safeDump;
  var init_js_yaml = __esm({
    "../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs"() {
      "use strict";
      __name(isNothing, "isNothing");
      __name(isObject, "isObject");
      __name(toArray, "toArray");
      __name(extend2, "extend");
      __name(repeat, "repeat");
      __name(isNegativeZero, "isNegativeZero");
      isNothing_1 = isNothing;
      isObject_1 = isObject;
      toArray_1 = toArray;
      repeat_1 = repeat;
      isNegativeZero_1 = isNegativeZero;
      extend_1 = extend2;
      common = {
        isNothing: isNothing_1,
        isObject: isObject_1,
        toArray: toArray_1,
        repeat: repeat_1,
        isNegativeZero: isNegativeZero_1,
        extend: extend_1
      };
      __name(formatError, "formatError");
      __name(YAMLException$1, "YAMLException$1");
      YAMLException$1.prototype = Object.create(Error.prototype);
      YAMLException$1.prototype.constructor = YAMLException$1;
      YAMLException$1.prototype.toString = /* @__PURE__ */ __name(function toString(compact2) {
        return this.name + ": " + formatError(this, compact2);
      }, "toString");
      exception = YAMLException$1;
      __name(getLine, "getLine");
      __name(padStart, "padStart");
      __name(makeSnippet, "makeSnippet");
      snippet = makeSnippet;
      TYPE_CONSTRUCTOR_OPTIONS = [
        "kind",
        "multi",
        "resolve",
        "construct",
        "instanceOf",
        "predicate",
        "represent",
        "representName",
        "defaultStyle",
        "styleAliases"
      ];
      YAML_NODE_KINDS = [
        "scalar",
        "sequence",
        "mapping"
      ];
      __name(compileStyleAliases, "compileStyleAliases");
      __name(Type$1, "Type$1");
      type2 = Type$1;
      __name(compileList, "compileList");
      __name(compileMap, "compileMap");
      __name(Schema$1, "Schema$1");
      Schema$1.prototype.extend = /* @__PURE__ */ __name(function extend3(definition) {
        var implicit2 = [];
        var explicit = [];
        if (definition instanceof type2) {
          explicit.push(definition);
        } else if (Array.isArray(definition)) {
          explicit = explicit.concat(definition);
        } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {
          if (definition.implicit) implicit2 = implicit2.concat(definition.implicit);
          if (definition.explicit) explicit = explicit.concat(definition.explicit);
        } else {
          throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");
        }
        implicit2.forEach(function(type$1) {
          if (!(type$1 instanceof type2)) {
            throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
          }
          if (type$1.loadKind && type$1.loadKind !== "scalar") {
            throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");
          }
          if (type$1.multi) {
            throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.");
          }
        });
        explicit.forEach(function(type$1) {
          if (!(type$1 instanceof type2)) {
            throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
          }
        });
        var result = Object.create(Schema$1.prototype);
        result.implicit = (this.implicit || []).concat(implicit2);
        result.explicit = (this.explicit || []).concat(explicit);
        result.compiledImplicit = compileList(result, "implicit");
        result.compiledExplicit = compileList(result, "explicit");
        result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);
        return result;
      }, "extend");
      schema = Schema$1;
      str = new type2("tag:yaml.org,2002:str", {
        kind: "scalar",
        construct: /* @__PURE__ */ __name(function(data6) {
          return data6 !== null ? data6 : "";
        }, "construct")
      });
      seq = new type2("tag:yaml.org,2002:seq", {
        kind: "sequence",
        construct: /* @__PURE__ */ __name(function(data6) {
          return data6 !== null ? data6 : [];
        }, "construct")
      });
      map2 = new type2("tag:yaml.org,2002:map", {
        kind: "mapping",
        construct: /* @__PURE__ */ __name(function(data6) {
          return data6 !== null ? data6 : {};
        }, "construct")
      });
      failsafe = new schema({
        explicit: [
          str,
          seq,
          map2
        ]
      });
      __name(resolveYamlNull, "resolveYamlNull");
      __name(constructYamlNull, "constructYamlNull");
      __name(isNull, "isNull");
      _null = new type2("tag:yaml.org,2002:null", {
        kind: "scalar",
        resolve: resolveYamlNull,
        construct: constructYamlNull,
        predicate: isNull,
        represent: {
          canonical: /* @__PURE__ */ __name(function() {
            return "~";
          }, "canonical"),
          lowercase: /* @__PURE__ */ __name(function() {
            return "null";
          }, "lowercase"),
          uppercase: /* @__PURE__ */ __name(function() {
            return "NULL";
          }, "uppercase"),
          camelcase: /* @__PURE__ */ __name(function() {
            return "Null";
          }, "camelcase"),
          empty: /* @__PURE__ */ __name(function() {
            return "";
          }, "empty")
        },
        defaultStyle: "lowercase"
      });
      __name(resolveYamlBoolean, "resolveYamlBoolean");
      __name(constructYamlBoolean, "constructYamlBoolean");
      __name(isBoolean, "isBoolean");
      bool = new type2("tag:yaml.org,2002:bool", {
        kind: "scalar",
        resolve: resolveYamlBoolean,
        construct: constructYamlBoolean,
        predicate: isBoolean,
        represent: {
          lowercase: /* @__PURE__ */ __name(function(object3) {
            return object3 ? "true" : "false";
          }, "lowercase"),
          uppercase: /* @__PURE__ */ __name(function(object3) {
            return object3 ? "TRUE" : "FALSE";
          }, "uppercase"),
          camelcase: /* @__PURE__ */ __name(function(object3) {
            return object3 ? "True" : "False";
          }, "camelcase")
        },
        defaultStyle: "lowercase"
      });
      __name(isHexCode, "isHexCode");
      __name(isOctCode, "isOctCode");
      __name(isDecCode, "isDecCode");
      __name(resolveYamlInteger, "resolveYamlInteger");
      __name(constructYamlInteger, "constructYamlInteger");
      __name(isInteger, "isInteger");
      int = new type2("tag:yaml.org,2002:int", {
        kind: "scalar",
        resolve: resolveYamlInteger,
        construct: constructYamlInteger,
        predicate: isInteger,
        represent: {
          binary: /* @__PURE__ */ __name(function(obj) {
            return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1);
          }, "binary"),
          octal: /* @__PURE__ */ __name(function(obj) {
            return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1);
          }, "octal"),
          decimal: /* @__PURE__ */ __name(function(obj) {
            return obj.toString(10);
          }, "decimal"),
          /* eslint-disable max-len */
          hexadecimal: /* @__PURE__ */ __name(function(obj) {
            return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1);
          }, "hexadecimal")
        },
        defaultStyle: "decimal",
        styleAliases: {
          binary: [2, "bin"],
          octal: [8, "oct"],
          decimal: [10, "dec"],
          hexadecimal: [16, "hex"]
        }
      });
      YAML_FLOAT_PATTERN = new RegExp(
        // 2.5e4, 2.5 and integers
        "^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"
      );
      __name(resolveYamlFloat, "resolveYamlFloat");
      __name(constructYamlFloat, "constructYamlFloat");
      SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
      __name(representYamlFloat, "representYamlFloat");
      __name(isFloat, "isFloat");
      float = new type2("tag:yaml.org,2002:float", {
        kind: "scalar",
        resolve: resolveYamlFloat,
        construct: constructYamlFloat,
        predicate: isFloat,
        represent: representYamlFloat,
        defaultStyle: "lowercase"
      });
      json = failsafe.extend({
        implicit: [
          _null,
          bool,
          int,
          float
        ]
      });
      core = json;
      YAML_DATE_REGEXP = new RegExp(
        "^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"
      );
      YAML_TIMESTAMP_REGEXP = new RegExp(
        "^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"
      );
      __name(resolveYamlTimestamp, "resolveYamlTimestamp");
      __name(constructYamlTimestamp, "constructYamlTimestamp");
      __name(representYamlTimestamp, "representYamlTimestamp");
      timestamp = new type2("tag:yaml.org,2002:timestamp", {
        kind: "scalar",
        resolve: resolveYamlTimestamp,
        construct: constructYamlTimestamp,
        instanceOf: Date,
        represent: representYamlTimestamp
      });
      __name(resolveYamlMerge, "resolveYamlMerge");
      merge2 = new type2("tag:yaml.org,2002:merge", {
        kind: "scalar",
        resolve: resolveYamlMerge
      });
      BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";
      __name(resolveYamlBinary, "resolveYamlBinary");
      __name(constructYamlBinary, "constructYamlBinary");
      __name(representYamlBinary, "representYamlBinary");
      __name(isBinary, "isBinary");
      binary = new type2("tag:yaml.org,2002:binary", {
        kind: "scalar",
        resolve: resolveYamlBinary,
        construct: constructYamlBinary,
        predicate: isBinary,
        represent: representYamlBinary
      });
      _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
      _toString$2 = Object.prototype.toString;
      __name(resolveYamlOmap, "resolveYamlOmap");
      __name(constructYamlOmap, "constructYamlOmap");
      omap = new type2("tag:yaml.org,2002:omap", {
        kind: "sequence",
        resolve: resolveYamlOmap,
        construct: constructYamlOmap
      });
      _toString$1 = Object.prototype.toString;
      __name(resolveYamlPairs, "resolveYamlPairs");
      __name(constructYamlPairs, "constructYamlPairs");
      pairs = new type2("tag:yaml.org,2002:pairs", {
        kind: "sequence",
        resolve: resolveYamlPairs,
        construct: constructYamlPairs
      });
      _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
      __name(resolveYamlSet, "resolveYamlSet");
      __name(constructYamlSet, "constructYamlSet");
      set3 = new type2("tag:yaml.org,2002:set", {
        kind: "mapping",
        resolve: resolveYamlSet,
        construct: constructYamlSet
      });
      _default = core.extend({
        implicit: [
          timestamp,
          merge2
        ],
        explicit: [
          binary,
          omap,
          pairs,
          set3
        ]
      });
      _hasOwnProperty$1 = Object.prototype.hasOwnProperty;
      CONTEXT_FLOW_IN = 1;
      CONTEXT_FLOW_OUT = 2;
      CONTEXT_BLOCK_IN = 3;
      CONTEXT_BLOCK_OUT = 4;
      CHOMPING_CLIP = 1;
      CHOMPING_STRIP = 2;
      CHOMPING_KEEP = 3;
      PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
      PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
      PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
      PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
      PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
      __name(_class, "_class");
      __name(is_EOL, "is_EOL");
      __name(is_WHITE_SPACE, "is_WHITE_SPACE");
      __name(is_WS_OR_EOL, "is_WS_OR_EOL");
      __name(is_FLOW_INDICATOR, "is_FLOW_INDICATOR");
      __name(fromHexCode, "fromHexCode");
      __name(escapedHexLen, "escapedHexLen");
      __name(fromDecimalCode, "fromDecimalCode");
      __name(simpleEscapeSequence, "simpleEscapeSequence");
      __name(charFromCodepoint, "charFromCodepoint");
      __name(setProperty, "setProperty");
      simpleEscapeCheck = new Array(256);
      simpleEscapeMap = new Array(256);
      for (i2 = 0; i2 < 256; i2++) {
        simpleEscapeCheck[i2] = simpleEscapeSequence(i2) ? 1 : 0;
        simpleEscapeMap[i2] = simpleEscapeSequence(i2);
      }
      __name(State$1, "State$1");
      __name(generateError, "generateError");
      __name(throwError, "throwError");
      __name(throwWarning, "throwWarning");
      directiveHandlers = {
        YAML: /* @__PURE__ */ __name(function handleYamlDirective(state4, name, args) {
          var match3, major, minor;
          if (state4.version !== null) {
            throwError(state4, "duplication of %YAML directive");
          }
          if (args.length !== 1) {
            throwError(state4, "YAML directive accepts exactly one argument");
          }
          match3 = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
          if (match3 === null) {
            throwError(state4, "ill-formed argument of the YAML directive");
          }
          major = parseInt(match3[1], 10);
          minor = parseInt(match3[2], 10);
          if (major !== 1) {
            throwError(state4, "unacceptable YAML version of the document");
          }
          state4.version = args[0];
          state4.checkLineBreaks = minor < 2;
          if (minor !== 1 && minor !== 2) {
            throwWarning(state4, "unsupported YAML version of the document");
          }
        }, "handleYamlDirective"),
        TAG: /* @__PURE__ */ __name(function handleTagDirective(state4, name, args) {
          var handle, prefix;
          if (args.length !== 2) {
            throwError(state4, "TAG directive accepts exactly two arguments");
          }
          handle = args[0];
          prefix = args[1];
          if (!PATTERN_TAG_HANDLE.test(handle)) {
            throwError(state4, "ill-formed tag handle (first argument) of the TAG directive");
          }
          if (_hasOwnProperty$1.call(state4.tagMap, handle)) {
            throwError(state4, 'there is a previously declared suffix for "' + handle + '" tag handle');
          }
          if (!PATTERN_TAG_URI.test(prefix)) {
            throwError(state4, "ill-formed tag prefix (second argument) of the TAG directive");
          }
          try {
            prefix = decodeURIComponent(prefix);
          } catch (err) {
            throwError(state4, "tag prefix is malformed: " + prefix);
          }
          state4.tagMap[handle] = prefix;
        }, "handleTagDirective")
      };
      __name(captureSegment, "captureSegment");
      __name(mergeMappings, "mergeMappings");
      __name(storeMappingPair, "storeMappingPair");
      __name(readLineBreak, "readLineBreak");
      __name(skipSeparationSpace, "skipSeparationSpace");
      __name(testDocumentSeparator, "testDocumentSeparator");
      __name(writeFoldedLines, "writeFoldedLines");
      __name(readPlainScalar, "readPlainScalar");
      __name(readSingleQuotedScalar, "readSingleQuotedScalar");
      __name(readDoubleQuotedScalar, "readDoubleQuotedScalar");
      __name(readFlowCollection, "readFlowCollection");
      __name(readBlockScalar, "readBlockScalar");
      __name(readBlockSequence, "readBlockSequence");
      __name(readBlockMapping, "readBlockMapping");
      __name(readTagProperty, "readTagProperty");
      __name(readAnchorProperty, "readAnchorProperty");
      __name(readAlias, "readAlias");
      __name(composeNode, "composeNode");
      __name(readDocument, "readDocument");
      __name(loadDocuments, "loadDocuments");
      __name(loadAll$1, "loadAll$1");
      __name(load$1, "load$1");
      loadAll_1 = loadAll$1;
      load_1 = load$1;
      loader2 = {
        loadAll: loadAll_1,
        load: load_1
      };
      _toString = Object.prototype.toString;
      _hasOwnProperty = Object.prototype.hasOwnProperty;
      CHAR_BOM = 65279;
      CHAR_TAB = 9;
      CHAR_LINE_FEED = 10;
      CHAR_CARRIAGE_RETURN = 13;
      CHAR_SPACE = 32;
      CHAR_EXCLAMATION = 33;
      CHAR_DOUBLE_QUOTE = 34;
      CHAR_SHARP = 35;
      CHAR_PERCENT = 37;
      CHAR_AMPERSAND = 38;
      CHAR_SINGLE_QUOTE = 39;
      CHAR_ASTERISK = 42;
      CHAR_COMMA = 44;
      CHAR_MINUS = 45;
      CHAR_COLON = 58;
      CHAR_EQUALS = 61;
      CHAR_GREATER_THAN = 62;
      CHAR_QUESTION = 63;
      CHAR_COMMERCIAL_AT = 64;
      CHAR_LEFT_SQUARE_BRACKET = 91;
      CHAR_RIGHT_SQUARE_BRACKET = 93;
      CHAR_GRAVE_ACCENT = 96;
      CHAR_LEFT_CURLY_BRACKET = 123;
      CHAR_VERTICAL_LINE = 124;
      CHAR_RIGHT_CURLY_BRACKET = 125;
      ESCAPE_SEQUENCES = {};
      ESCAPE_SEQUENCES[0] = "\\0";
      ESCAPE_SEQUENCES[7] = "\\a";
      ESCAPE_SEQUENCES[8] = "\\b";
      ESCAPE_SEQUENCES[9] = "\\t";
      ESCAPE_SEQUENCES[10] = "\\n";
      ESCAPE_SEQUENCES[11] = "\\v";
      ESCAPE_SEQUENCES[12] = "\\f";
      ESCAPE_SEQUENCES[13] = "\\r";
      ESCAPE_SEQUENCES[27] = "\\e";
      ESCAPE_SEQUENCES[34] = '\\"';
      ESCAPE_SEQUENCES[92] = "\\\\";
      ESCAPE_SEQUENCES[133] = "\\N";
      ESCAPE_SEQUENCES[160] = "\\_";
      ESCAPE_SEQUENCES[8232] = "\\L";
      ESCAPE_SEQUENCES[8233] = "\\P";
      DEPRECATED_BOOLEANS_SYNTAX = [
        "y",
        "Y",
        "yes",
        "Yes",
        "YES",
        "on",
        "On",
        "ON",
        "n",
        "N",
        "no",
        "No",
        "NO",
        "off",
        "Off",
        "OFF"
      ];
      DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;
      __name(compileStyleMap, "compileStyleMap");
      __name(encodeHex, "encodeHex");
      QUOTING_TYPE_SINGLE = 1;
      QUOTING_TYPE_DOUBLE = 2;
      __name(State, "State");
      __name(indentString, "indentString");
      __name(generateNextLine, "generateNextLine");
      __name(testImplicitResolving, "testImplicitResolving");
      __name(isWhitespace, "isWhitespace");
      __name(isPrintable, "isPrintable");
      __name(isNsCharOrWhitespace, "isNsCharOrWhitespace");
      __name(isPlainSafe, "isPlainSafe");
      __name(isPlainSafeFirst, "isPlainSafeFirst");
      __name(isPlainSafeLast, "isPlainSafeLast");
      __name(codePointAt, "codePointAt");
      __name(needIndentIndicator, "needIndentIndicator");
      STYLE_PLAIN = 1;
      STYLE_SINGLE = 2;
      STYLE_LITERAL = 3;
      STYLE_FOLDED = 4;
      STYLE_DOUBLE = 5;
      __name(chooseScalarStyle, "chooseScalarStyle");
      __name(writeScalar, "writeScalar");
      __name(blockHeader, "blockHeader");
      __name(dropEndingNewline, "dropEndingNewline");
      __name(foldString, "foldString");
      __name(foldLine, "foldLine");
      __name(escapeString, "escapeString");
      __name(writeFlowSequence, "writeFlowSequence");
      __name(writeBlockSequence, "writeBlockSequence");
      __name(writeFlowMapping, "writeFlowMapping");
      __name(writeBlockMapping, "writeBlockMapping");
      __name(detectType2, "detectType");
      __name(writeNode, "writeNode");
      __name(getDuplicateReferences, "getDuplicateReferences");
      __name(inspectNode, "inspectNode");
      __name(dump$1, "dump$1");
      dump_1 = dump$1;
      dumper = {
        dump: dump_1
      };
      __name(renamed, "renamed");
      JSON_SCHEMA = json;
      load = loader2.load;
      loadAll = loader2.loadAll;
      dump = dumper.dump;
      safeLoad = renamed("safeLoad", "load");
      safeLoadAll = renamed("safeLoadAll", "loadAll");
      safeDump = renamed("safeDump", "dump");
    }
  });

  // ../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/lib/marked.esm.js
  function L() {
    return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
  }
  function G(l4) {
    O = l4;
  }
  function h(l4, e3 = "") {
    let t4 = typeof l4 == "string" ? l4 : l4.source, n2 = { replace: /* @__PURE__ */ __name((r2, i2) => {
      let s2 = typeof i2 == "string" ? i2 : i2.source;
      return s2 = s2.replace(m.caret, "$1"), t4 = t4.replace(r2, s2), n2;
    }, "replace"), getRegex: /* @__PURE__ */ __name(() => new RegExp(t4, e3), "getRegex") };
    return n2;
  }
  function w(l4, e3) {
    if (e3) {
      if (m.escapeTest.test(l4)) return l4.replace(m.escapeReplace, ke);
    } else if (m.escapeTestNoEncode.test(l4)) return l4.replace(m.escapeReplaceNoEncode, ke);
    return l4;
  }
  function J(l4) {
    try {
      l4 = encodeURI(l4).replace(m.percentDecode, "%");
    } catch {
      return null;
    }
    return l4;
  }
  function V(l4, e3) {
    let t4 = l4.replace(m.findPipe, (i2, s2, o2) => {
      let a2 = false, u2 = s2;
      for (; --u2 >= 0 && o2[u2] === "\\"; ) a2 = !a2;
      return a2 ? "|" : " |";
    }), n2 = t4.split(m.splitPipe), r2 = 0;
    if (n2[0].trim() || n2.shift(), n2.length > 0 && !n2.at(-1)?.trim() && n2.pop(), e3) if (n2.length > e3) n2.splice(e3);
    else for (; n2.length < e3; ) n2.push("");
    for (; r2 < n2.length; r2++) n2[r2] = n2[r2].trim().replace(m.slashPipe, "|");
    return n2;
  }
  function z(l4, e3, t4) {
    let n2 = l4.length;
    if (n2 === 0) return "";
    let r2 = 0;
    for (; r2 < n2; ) {
      let i2 = l4.charAt(n2 - r2 - 1);
      if (i2 === e3 && !t4) r2++;
      else if (i2 !== e3 && t4) r2++;
      else break;
    }
    return l4.slice(0, n2 - r2);
  }
  function ge(l4, e3) {
    if (l4.indexOf(e3[1]) === -1) return -1;
    let t4 = 0;
    for (let n2 = 0; n2 < l4.length; n2++) if (l4[n2] === "\\") n2++;
    else if (l4[n2] === e3[0]) t4++;
    else if (l4[n2] === e3[1] && (t4--, t4 < 0)) return n2;
    return t4 > 0 ? -2 : -1;
  }
  function fe(l4, e3, t4, n2, r2) {
    let i2 = e3.href, s2 = e3.title || null, o2 = l4[1].replace(r2.other.outputLinkReplace, "$1");
    n2.state.inLink = true;
    let a2 = { type: l4[0].charAt(0) === "!" ? "image" : "link", raw: t4, href: i2, title: s2, text: o2, tokens: n2.inlineTokens(o2) };
    return n2.state.inLink = false, a2;
  }
  function Je(l4, e3, t4) {
    let n2 = l4.match(t4.other.indentCodeCompensation);
    if (n2 === null) return e3;
    let r2 = n2[1];
    return e3.split(`
`).map((i2) => {
      let s2 = i2.match(t4.other.beginningSpace);
      if (s2 === null) return i2;
      let [o2] = s2;
      return o2.length >= r2.length ? i2.slice(r2.length) : i2;
    }).join(`
`);
  }
  function d(l4, e3) {
    return _.parse(l4, e3);
  }
  var O, E, m, xe, be, Re, C, Oe, j, se, ie, Te, F, we, Q, ye, Pe, v, U, Se, oe, $e, K2, re2, _e, Le, Me, ze, ae, Ae, D2, W, le, Ee, ue, Ce, Ie, Be, pe, qe, ve, ce, De, He, Ze, Ge, Ne, je, Fe, q, Qe, he, de, Ue, X2, Ke, N, We, I, M, Xe, ke, y2, b, P, $, R, S2, B, _, Dt, Ht, Zt, Gt, Nt, Ft, Qt;
  var init_marked_esm = __esm({
    "../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/lib/marked.esm.js"() {
      "use strict";
      __name(L, "L");
      O = L();
      __name(G, "G");
      E = { exec: /* @__PURE__ */ __name(() => null, "exec") };
      __name(h, "h");
      m = { codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceTabs: /^\t+/, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] /, listReplaceTask: /^\[[ xX]\] +/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, unescapeTest: /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: /* @__PURE__ */ __name((l4) => new RegExp(`^( {0,3}${l4})((?:[	 ][^\\n]*)?(?:\\n|$))`), "listItemRegex"), nextBulletRegex: /* @__PURE__ */ __name((l4) => new RegExp(`^ {0,${Math.min(3, l4 - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ 	][^\\n]*)?(?:\\n|$))`), "nextBulletRegex"), hrRegex: /* @__PURE__ */ __name((l4) => new RegExp(`^ {0,${Math.min(3, l4 - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), "hrRegex"), fencesBeginRegex: /* @__PURE__ */ __name((l4) => new RegExp(`^ {0,${Math.min(3, l4 - 1)}}(?:\`\`\`|~~~)`), "fencesBeginRegex"), headingBeginRegex: /* @__PURE__ */ __name((l4) => new RegExp(`^ {0,${Math.min(3, l4 - 1)}}#`), "headingBeginRegex"), htmlBeginRegex: /* @__PURE__ */ __name((l4) => new RegExp(`^ {0,${Math.min(3, l4 - 1)}}<(?:[a-z].*>|!--)`, "i"), "htmlBeginRegex") };
      xe = /^(?:[ \t]*(?:\n|$))+/;
      be = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
      Re = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
      C = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
      Oe = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
      j = /(?:[*+-]|\d{1,9}[.)])/;
      se = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;
      ie = h(se).replace(/bull/g, j).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex();
      Te = h(se).replace(/bull/g, j).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();
      F = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
      we = /^[^\n]+/;
      Q = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
      ye = h(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", Q).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
      Pe = h(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, j).getRegex();
      v = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
      U = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
      Se = h("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$))", "i").replace("comment", U).replace("tag", v).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
      oe = h(F).replace("hr", C).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
      $e = h(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", oe).getRegex();
      K2 = { blockquote: $e, code: be, def: ye, fences: Re, heading: Oe, hr: C, html: Se, lheading: ie, list: Pe, newline: xe, paragraph: oe, table: E, text: we };
      re2 = h("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", C).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3}	)[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
      _e = { ...K2, lheading: Te, table: re2, paragraph: h(F).replace("hr", C).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", re2).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex() };
      Le = { ...K2, html: h(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", U).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: E, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: h(F).replace("hr", C).replace("heading", ` *#{1,6} *[^
]`).replace("lheading", ie).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
      Me = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
      ze = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
      ae = /^( {2,}|\\)\n(?!\s*$)/;
      Ae = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
      D2 = /[\p{P}\p{S}]/u;
      W = /[\s\p{P}\p{S}]/u;
      le = /[^\s\p{P}\p{S}]/u;
      Ee = h(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, W).getRegex();
      ue = /(?!~)[\p{P}\p{S}]/u;
      Ce = /(?!~)[\s\p{P}\p{S}]/u;
      Ie = /(?:[^\s\p{P}\p{S}]|~)/u;
      Be = /\[[^\[\]]*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)|`[^`]*?`|<(?! )[^<>]*?>/g;
      pe = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/;
      qe = h(pe, "u").replace(/punct/g, D2).getRegex();
      ve = h(pe, "u").replace(/punct/g, ue).getRegex();
      ce = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
      De = h(ce, "gu").replace(/notPunctSpace/g, le).replace(/punctSpace/g, W).replace(/punct/g, D2).getRegex();
      He = h(ce, "gu").replace(/notPunctSpace/g, Ie).replace(/punctSpace/g, Ce).replace(/punct/g, ue).getRegex();
      Ze = h("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, le).replace(/punctSpace/g, W).replace(/punct/g, D2).getRegex();
      Ge = h(/\\(punct)/, "gu").replace(/punct/g, D2).getRegex();
      Ne = h(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
      je = h(U).replace("(?:-->|$)", "-->").getRegex();
      Fe = h("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", je).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
      q = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/;
      Qe = h(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", q).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
      he = h(/^!?\[(label)\]\[(ref)\]/).replace("label", q).replace("ref", Q).getRegex();
      de = h(/^!?\[(ref)\](?:\[\])?/).replace("ref", Q).getRegex();
      Ue = h("reflink|nolink(?!\\()", "g").replace("reflink", he).replace("nolink", de).getRegex();
      X2 = { _backpedal: E, anyPunctuation: Ge, autolink: Ne, blockSkip: Be, br: ae, code: ze, del: E, emStrongLDelim: qe, emStrongRDelimAst: De, emStrongRDelimUnd: Ze, escape: Me, link: Qe, nolink: de, punctuation: Ee, reflink: he, reflinkSearch: Ue, tag: Fe, text: Ae, url: E };
      Ke = { ...X2, link: h(/^!?\[(label)\]\((.*?)\)/).replace("label", q).getRegex(), reflink: h(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", q).getRegex() };
      N = { ...X2, emStrongRDelimAst: He, emStrongLDelim: ve, url: h(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, "i").replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/ };
      We = { ...N, br: h(ae).replace("{2,}", "*").getRegex(), text: h(N.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() };
      I = { normal: K2, gfm: _e, pedantic: Le };
      M = { normal: X2, gfm: N, breaks: We, pedantic: Ke };
      Xe = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
      ke = /* @__PURE__ */ __name((l4) => Xe[l4], "ke");
      __name(w, "w");
      __name(J, "J");
      __name(V, "V");
      __name(z, "z");
      __name(ge, "ge");
      __name(fe, "fe");
      __name(Je, "Je");
      y2 = class {
        static {
          __name(this, "y");
        }
        options;
        rules;
        lexer;
        constructor(e3) {
          this.options = e3 || O;
        }
        space(e3) {
          let t4 = this.rules.block.newline.exec(e3);
          if (t4 && t4[0].length > 0) return { type: "space", raw: t4[0] };
        }
        code(e3) {
          let t4 = this.rules.block.code.exec(e3);
          if (t4) {
            let n2 = t4[0].replace(this.rules.other.codeRemoveIndent, "");
            return { type: "code", raw: t4[0], codeBlockStyle: "indented", text: this.options.pedantic ? n2 : z(n2, `
`) };
          }
        }
        fences(e3) {
          let t4 = this.rules.block.fences.exec(e3);
          if (t4) {
            let n2 = t4[0], r2 = Je(n2, t4[3] || "", this.rules);
            return { type: "code", raw: n2, lang: t4[2] ? t4[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t4[2], text: r2 };
          }
        }
        heading(e3) {
          let t4 = this.rules.block.heading.exec(e3);
          if (t4) {
            let n2 = t4[2].trim();
            if (this.rules.other.endingHash.test(n2)) {
              let r2 = z(n2, "#");
              (this.options.pedantic || !r2 || this.rules.other.endingSpaceChar.test(r2)) && (n2 = r2.trim());
            }
            return { type: "heading", raw: t4[0], depth: t4[1].length, text: n2, tokens: this.lexer.inline(n2) };
          }
        }
        hr(e3) {
          let t4 = this.rules.block.hr.exec(e3);
          if (t4) return { type: "hr", raw: z(t4[0], `
`) };
        }
        blockquote(e3) {
          let t4 = this.rules.block.blockquote.exec(e3);
          if (t4) {
            let n2 = z(t4[0], `
`).split(`
`), r2 = "", i2 = "", s2 = [];
            for (; n2.length > 0; ) {
              let o2 = false, a2 = [], u2;
              for (u2 = 0; u2 < n2.length; u2++) if (this.rules.other.blockquoteStart.test(n2[u2])) a2.push(n2[u2]), o2 = true;
              else if (!o2) a2.push(n2[u2]);
              else break;
              n2 = n2.slice(u2);
              let p3 = a2.join(`
`), c3 = p3.replace(this.rules.other.blockquoteSetextReplace, `
    $1`).replace(this.rules.other.blockquoteSetextReplace2, "");
              r2 = r2 ? `${r2}
${p3}` : p3, i2 = i2 ? `${i2}
${c3}` : c3;
              let f2 = this.lexer.state.top;
              if (this.lexer.state.top = true, this.lexer.blockTokens(c3, s2, true), this.lexer.state.top = f2, n2.length === 0) break;
              let k2 = s2.at(-1);
              if (k2?.type === "code") break;
              if (k2?.type === "blockquote") {
                let x5 = k2, g2 = x5.raw + `
` + n2.join(`
`), T3 = this.blockquote(g2);
                s2[s2.length - 1] = T3, r2 = r2.substring(0, r2.length - x5.raw.length) + T3.raw, i2 = i2.substring(0, i2.length - x5.text.length) + T3.text;
                break;
              } else if (k2?.type === "list") {
                let x5 = k2, g2 = x5.raw + `
` + n2.join(`
`), T3 = this.list(g2);
                s2[s2.length - 1] = T3, r2 = r2.substring(0, r2.length - k2.raw.length) + T3.raw, i2 = i2.substring(0, i2.length - x5.raw.length) + T3.raw, n2 = g2.substring(s2.at(-1).raw.length).split(`
`);
                continue;
              }
            }
            return { type: "blockquote", raw: r2, tokens: s2, text: i2 };
          }
        }
        list(e3) {
          let t4 = this.rules.block.list.exec(e3);
          if (t4) {
            let n2 = t4[1].trim(), r2 = n2.length > 1, i2 = { type: "list", raw: "", ordered: r2, start: r2 ? +n2.slice(0, -1) : "", loose: false, items: [] };
            n2 = r2 ? `\\d{1,9}\\${n2.slice(-1)}` : `\\${n2}`, this.options.pedantic && (n2 = r2 ? n2 : "[*+-]");
            let s2 = this.rules.other.listItemRegex(n2), o2 = false;
            for (; e3; ) {
              let u2 = false, p3 = "", c3 = "";
              if (!(t4 = s2.exec(e3)) || this.rules.block.hr.test(e3)) break;
              p3 = t4[0], e3 = e3.substring(p3.length);
              let f2 = t4[2].split(`
`, 1)[0].replace(this.rules.other.listReplaceTabs, (H2) => " ".repeat(3 * H2.length)), k2 = e3.split(`
`, 1)[0], x5 = !f2.trim(), g2 = 0;
              if (this.options.pedantic ? (g2 = 2, c3 = f2.trimStart()) : x5 ? g2 = t4[1].length + 1 : (g2 = t4[2].search(this.rules.other.nonSpaceChar), g2 = g2 > 4 ? 1 : g2, c3 = f2.slice(g2), g2 += t4[1].length), x5 && this.rules.other.blankLine.test(k2) && (p3 += k2 + `
`, e3 = e3.substring(k2.length + 1), u2 = true), !u2) {
                let H2 = this.rules.other.nextBulletRegex(g2), ee = this.rules.other.hrRegex(g2), te = this.rules.other.fencesBeginRegex(g2), ne = this.rules.other.headingBeginRegex(g2), me = this.rules.other.htmlBeginRegex(g2);
                for (; e3; ) {
                  let Z2 = e3.split(`
`, 1)[0], A2;
                  if (k2 = Z2, this.options.pedantic ? (k2 = k2.replace(this.rules.other.listReplaceNesting, "  "), A2 = k2) : A2 = k2.replace(this.rules.other.tabCharGlobal, "    "), te.test(k2) || ne.test(k2) || me.test(k2) || H2.test(k2) || ee.test(k2)) break;
                  if (A2.search(this.rules.other.nonSpaceChar) >= g2 || !k2.trim()) c3 += `
` + A2.slice(g2);
                  else {
                    if (x5 || f2.replace(this.rules.other.tabCharGlobal, "    ").search(this.rules.other.nonSpaceChar) >= 4 || te.test(f2) || ne.test(f2) || ee.test(f2)) break;
                    c3 += `
` + k2;
                  }
                  !x5 && !k2.trim() && (x5 = true), p3 += Z2 + `
`, e3 = e3.substring(Z2.length + 1), f2 = A2.slice(g2);
                }
              }
              i2.loose || (o2 ? i2.loose = true : this.rules.other.doubleBlankLine.test(p3) && (o2 = true));
              let T3 = null, Y3;
              this.options.gfm && (T3 = this.rules.other.listIsTask.exec(c3), T3 && (Y3 = T3[0] !== "[ ] ", c3 = c3.replace(this.rules.other.listReplaceTask, ""))), i2.items.push({ type: "list_item", raw: p3, task: !!T3, checked: Y3, loose: false, text: c3, tokens: [] }), i2.raw += p3;
            }
            let a2 = i2.items.at(-1);
            if (a2) a2.raw = a2.raw.trimEnd(), a2.text = a2.text.trimEnd();
            else return;
            i2.raw = i2.raw.trimEnd();
            for (let u2 = 0; u2 < i2.items.length; u2++) if (this.lexer.state.top = false, i2.items[u2].tokens = this.lexer.blockTokens(i2.items[u2].text, []), !i2.loose) {
              let p3 = i2.items[u2].tokens.filter((f2) => f2.type === "space"), c3 = p3.length > 0 && p3.some((f2) => this.rules.other.anyLine.test(f2.raw));
              i2.loose = c3;
            }
            if (i2.loose) for (let u2 = 0; u2 < i2.items.length; u2++) i2.items[u2].loose = true;
            return i2;
          }
        }
        html(e3) {
          let t4 = this.rules.block.html.exec(e3);
          if (t4) return { type: "html", block: true, raw: t4[0], pre: t4[1] === "pre" || t4[1] === "script" || t4[1] === "style", text: t4[0] };
        }
        def(e3) {
          let t4 = this.rules.block.def.exec(e3);
          if (t4) {
            let n2 = t4[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), r2 = t4[2] ? t4[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", i2 = t4[3] ? t4[3].substring(1, t4[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t4[3];
            return { type: "def", tag: n2, raw: t4[0], href: r2, title: i2 };
          }
        }
        table(e3) {
          let t4 = this.rules.block.table.exec(e3);
          if (!t4 || !this.rules.other.tableDelimiter.test(t4[2])) return;
          let n2 = V(t4[1]), r2 = t4[2].replace(this.rules.other.tableAlignChars, "").split("|"), i2 = t4[3]?.trim() ? t4[3].replace(this.rules.other.tableRowBlankLine, "").split(`
`) : [], s2 = { type: "table", raw: t4[0], header: [], align: [], rows: [] };
          if (n2.length === r2.length) {
            for (let o2 of r2) this.rules.other.tableAlignRight.test(o2) ? s2.align.push("right") : this.rules.other.tableAlignCenter.test(o2) ? s2.align.push("center") : this.rules.other.tableAlignLeft.test(o2) ? s2.align.push("left") : s2.align.push(null);
            for (let o2 = 0; o2 < n2.length; o2++) s2.header.push({ text: n2[o2], tokens: this.lexer.inline(n2[o2]), header: true, align: s2.align[o2] });
            for (let o2 of i2) s2.rows.push(V(o2, s2.header.length).map((a2, u2) => ({ text: a2, tokens: this.lexer.inline(a2), header: false, align: s2.align[u2] })));
            return s2;
          }
        }
        lheading(e3) {
          let t4 = this.rules.block.lheading.exec(e3);
          if (t4) return { type: "heading", raw: t4[0], depth: t4[2].charAt(0) === "=" ? 1 : 2, text: t4[1], tokens: this.lexer.inline(t4[1]) };
        }
        paragraph(e3) {
          let t4 = this.rules.block.paragraph.exec(e3);
          if (t4) {
            let n2 = t4[1].charAt(t4[1].length - 1) === `
` ? t4[1].slice(0, -1) : t4[1];
            return { type: "paragraph", raw: t4[0], text: n2, tokens: this.lexer.inline(n2) };
          }
        }
        text(e3) {
          let t4 = this.rules.block.text.exec(e3);
          if (t4) return { type: "text", raw: t4[0], text: t4[0], tokens: this.lexer.inline(t4[0]) };
        }
        escape(e3) {
          let t4 = this.rules.inline.escape.exec(e3);
          if (t4) return { type: "escape", raw: t4[0], text: t4[1] };
        }
        tag(e3) {
          let t4 = this.rules.inline.tag.exec(e3);
          if (t4) return !this.lexer.state.inLink && this.rules.other.startATag.test(t4[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t4[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t4[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t4[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t4[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t4[0] };
        }
        link(e3) {
          let t4 = this.rules.inline.link.exec(e3);
          if (t4) {
            let n2 = t4[2].trim();
            if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n2)) {
              if (!this.rules.other.endAngleBracket.test(n2)) return;
              let s2 = z(n2.slice(0, -1), "\\");
              if ((n2.length - s2.length) % 2 === 0) return;
            } else {
              let s2 = ge(t4[2], "()");
              if (s2 === -2) return;
              if (s2 > -1) {
                let a2 = (t4[0].indexOf("!") === 0 ? 5 : 4) + t4[1].length + s2;
                t4[2] = t4[2].substring(0, s2), t4[0] = t4[0].substring(0, a2).trim(), t4[3] = "";
              }
            }
            let r2 = t4[2], i2 = "";
            if (this.options.pedantic) {
              let s2 = this.rules.other.pedanticHrefTitle.exec(r2);
              s2 && (r2 = s2[1], i2 = s2[3]);
            } else i2 = t4[3] ? t4[3].slice(1, -1) : "";
            return r2 = r2.trim(), this.rules.other.startAngleBracket.test(r2) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n2) ? r2 = r2.slice(1) : r2 = r2.slice(1, -1)), fe(t4, { href: r2 && r2.replace(this.rules.inline.anyPunctuation, "$1"), title: i2 && i2.replace(this.rules.inline.anyPunctuation, "$1") }, t4[0], this.lexer, this.rules);
          }
        }
        reflink(e3, t4) {
          let n2;
          if ((n2 = this.rules.inline.reflink.exec(e3)) || (n2 = this.rules.inline.nolink.exec(e3))) {
            let r2 = (n2[2] || n2[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i2 = t4[r2.toLowerCase()];
            if (!i2) {
              let s2 = n2[0].charAt(0);
              return { type: "text", raw: s2, text: s2 };
            }
            return fe(n2, i2, n2[0], this.lexer, this.rules);
          }
        }
        emStrong(e3, t4, n2 = "") {
          let r2 = this.rules.inline.emStrongLDelim.exec(e3);
          if (!r2 || r2[3] && n2.match(this.rules.other.unicodeAlphaNumeric)) return;
          if (!(r2[1] || r2[2] || "") || !n2 || this.rules.inline.punctuation.exec(n2)) {
            let s2 = [...r2[0]].length - 1, o2, a2, u2 = s2, p3 = 0, c3 = r2[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
            for (c3.lastIndex = 0, t4 = t4.slice(-1 * e3.length + s2); (r2 = c3.exec(t4)) != null; ) {
              if (o2 = r2[1] || r2[2] || r2[3] || r2[4] || r2[5] || r2[6], !o2) continue;
              if (a2 = [...o2].length, r2[3] || r2[4]) {
                u2 += a2;
                continue;
              } else if ((r2[5] || r2[6]) && s2 % 3 && !((s2 + a2) % 3)) {
                p3 += a2;
                continue;
              }
              if (u2 -= a2, u2 > 0) continue;
              a2 = Math.min(a2, a2 + u2 + p3);
              let f2 = [...r2[0]][0].length, k2 = e3.slice(0, s2 + r2.index + f2 + a2);
              if (Math.min(s2, a2) % 2) {
                let g2 = k2.slice(1, -1);
                return { type: "em", raw: k2, text: g2, tokens: this.lexer.inlineTokens(g2) };
              }
              let x5 = k2.slice(2, -2);
              return { type: "strong", raw: k2, text: x5, tokens: this.lexer.inlineTokens(x5) };
            }
          }
        }
        codespan(e3) {
          let t4 = this.rules.inline.code.exec(e3);
          if (t4) {
            let n2 = t4[2].replace(this.rules.other.newLineCharGlobal, " "), r2 = this.rules.other.nonSpaceChar.test(n2), i2 = this.rules.other.startingSpaceChar.test(n2) && this.rules.other.endingSpaceChar.test(n2);
            return r2 && i2 && (n2 = n2.substring(1, n2.length - 1)), { type: "codespan", raw: t4[0], text: n2 };
          }
        }
        br(e3) {
          let t4 = this.rules.inline.br.exec(e3);
          if (t4) return { type: "br", raw: t4[0] };
        }
        del(e3) {
          let t4 = this.rules.inline.del.exec(e3);
          if (t4) return { type: "del", raw: t4[0], text: t4[2], tokens: this.lexer.inlineTokens(t4[2]) };
        }
        autolink(e3) {
          let t4 = this.rules.inline.autolink.exec(e3);
          if (t4) {
            let n2, r2;
            return t4[2] === "@" ? (n2 = t4[1], r2 = "mailto:" + n2) : (n2 = t4[1], r2 = n2), { type: "link", raw: t4[0], text: n2, href: r2, tokens: [{ type: "text", raw: n2, text: n2 }] };
          }
        }
        url(e3) {
          let t4;
          if (t4 = this.rules.inline.url.exec(e3)) {
            let n2, r2;
            if (t4[2] === "@") n2 = t4[0], r2 = "mailto:" + n2;
            else {
              let i2;
              do
                i2 = t4[0], t4[0] = this.rules.inline._backpedal.exec(t4[0])?.[0] ?? "";
              while (i2 !== t4[0]);
              n2 = t4[0], t4[1] === "www." ? r2 = "http://" + t4[0] : r2 = t4[0];
            }
            return { type: "link", raw: t4[0], text: n2, href: r2, tokens: [{ type: "text", raw: n2, text: n2 }] };
          }
        }
        inlineText(e3) {
          let t4 = this.rules.inline.text.exec(e3);
          if (t4) {
            let n2 = this.lexer.state.inRawBlock;
            return { type: "text", raw: t4[0], text: t4[0], escaped: n2 };
          }
        }
      };
      b = class l {
        static {
          __name(this, "l");
        }
        tokens;
        options;
        state;
        tokenizer;
        inlineQueue;
        constructor(e3) {
          this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e3 || O, this.options.tokenizer = this.options.tokenizer || new y2(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true };
          let t4 = { other: m, block: I.normal, inline: M.normal };
          this.options.pedantic ? (t4.block = I.pedantic, t4.inline = M.pedantic) : this.options.gfm && (t4.block = I.gfm, this.options.breaks ? t4.inline = M.breaks : t4.inline = M.gfm), this.tokenizer.rules = t4;
        }
        static get rules() {
          return { block: I, inline: M };
        }
        static lex(e3, t4) {
          return new l(t4).lex(e3);
        }
        static lexInline(e3, t4) {
          return new l(t4).inlineTokens(e3);
        }
        lex(e3) {
          e3 = e3.replace(m.carriageReturn, `
`), this.blockTokens(e3, this.tokens);
          for (let t4 = 0; t4 < this.inlineQueue.length; t4++) {
            let n2 = this.inlineQueue[t4];
            this.inlineTokens(n2.src, n2.tokens);
          }
          return this.inlineQueue = [], this.tokens;
        }
        blockTokens(e3, t4 = [], n2 = false) {
          for (this.options.pedantic && (e3 = e3.replace(m.tabCharGlobal, "    ").replace(m.spaceLine, "")); e3; ) {
            let r2;
            if (this.options.extensions?.block?.some((s2) => (r2 = s2.call({ lexer: this }, e3, t4)) ? (e3 = e3.substring(r2.raw.length), t4.push(r2), true) : false)) continue;
            if (r2 = this.tokenizer.space(e3)) {
              e3 = e3.substring(r2.raw.length);
              let s2 = t4.at(-1);
              r2.raw.length === 1 && s2 !== void 0 ? s2.raw += `
` : t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.code(e3)) {
              e3 = e3.substring(r2.raw.length);
              let s2 = t4.at(-1);
              s2?.type === "paragraph" || s2?.type === "text" ? (s2.raw += (s2.raw.endsWith(`
`) ? "" : `
`) + r2.raw, s2.text += `
` + r2.text, this.inlineQueue.at(-1).src = s2.text) : t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.fences(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.heading(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.hr(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.blockquote(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.list(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.html(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.def(e3)) {
              e3 = e3.substring(r2.raw.length);
              let s2 = t4.at(-1);
              s2?.type === "paragraph" || s2?.type === "text" ? (s2.raw += (s2.raw.endsWith(`
`) ? "" : `
`) + r2.raw, s2.text += `
` + r2.raw, this.inlineQueue.at(-1).src = s2.text) : this.tokens.links[r2.tag] || (this.tokens.links[r2.tag] = { href: r2.href, title: r2.title }, t4.push(r2));
              continue;
            }
            if (r2 = this.tokenizer.table(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            if (r2 = this.tokenizer.lheading(e3)) {
              e3 = e3.substring(r2.raw.length), t4.push(r2);
              continue;
            }
            let i2 = e3;
            if (this.options.extensions?.startBlock) {
              let s2 = 1 / 0, o2 = e3.slice(1), a2;
              this.options.extensions.startBlock.forEach((u2) => {
                a2 = u2.call({ lexer: this }, o2), typeof a2 == "number" && a2 >= 0 && (s2 = Math.min(s2, a2));
              }), s2 < 1 / 0 && s2 >= 0 && (i2 = e3.substring(0, s2 + 1));
            }
            if (this.state.top && (r2 = this.tokenizer.paragraph(i2))) {
              let s2 = t4.at(-1);
              n2 && s2?.type === "paragraph" ? (s2.raw += (s2.raw.endsWith(`
`) ? "" : `
`) + r2.raw, s2.text += `
` + r2.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s2.text) : t4.push(r2), n2 = i2.length !== e3.length, e3 = e3.substring(r2.raw.length);
              continue;
            }
            if (r2 = this.tokenizer.text(e3)) {
              e3 = e3.substring(r2.raw.length);
              let s2 = t4.at(-1);
              s2?.type === "text" ? (s2.raw += (s2.raw.endsWith(`
`) ? "" : `
`) + r2.raw, s2.text += `
` + r2.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s2.text) : t4.push(r2);
              continue;
            }
            if (e3) {
              let s2 = "Infinite loop on byte: " + e3.charCodeAt(0);
              if (this.options.silent) {
                console.error(s2);
                break;
              } else throw new Error(s2);
            }
          }
          return this.state.top = true, t4;
        }
        inline(e3, t4 = []) {
          return this.inlineQueue.push({ src: e3, tokens: t4 }), t4;
        }
        inlineTokens(e3, t4 = []) {
          let n2 = e3, r2 = null;
          if (this.tokens.links) {
            let o2 = Object.keys(this.tokens.links);
            if (o2.length > 0) for (; (r2 = this.tokenizer.rules.inline.reflinkSearch.exec(n2)) != null; ) o2.includes(r2[0].slice(r2[0].lastIndexOf("[") + 1, -1)) && (n2 = n2.slice(0, r2.index) + "[" + "a".repeat(r2[0].length - 2) + "]" + n2.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));
          }
          for (; (r2 = this.tokenizer.rules.inline.anyPunctuation.exec(n2)) != null; ) n2 = n2.slice(0, r2.index) + "++" + n2.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
          for (; (r2 = this.tokenizer.rules.inline.blockSkip.exec(n2)) != null; ) n2 = n2.slice(0, r2.index) + "[" + "a".repeat(r2[0].length - 2) + "]" + n2.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
          n2 = this.options.hooks?.emStrongMask?.call({ lexer: this }, n2) ?? n2;
          let i2 = false, s2 = "";
          for (; e3; ) {
            i2 || (s2 = ""), i2 = false;
            let o2;
            if (this.options.extensions?.inline?.some((u2) => (o2 = u2.call({ lexer: this }, e3, t4)) ? (e3 = e3.substring(o2.raw.length), t4.push(o2), true) : false)) continue;
            if (o2 = this.tokenizer.escape(e3)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.tag(e3)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.link(e3)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.reflink(e3, this.tokens.links)) {
              e3 = e3.substring(o2.raw.length);
              let u2 = t4.at(-1);
              o2.type === "text" && u2?.type === "text" ? (u2.raw += o2.raw, u2.text += o2.text) : t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.emStrong(e3, n2, s2)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.codespan(e3)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.br(e3)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.del(e3)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (o2 = this.tokenizer.autolink(e3)) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            if (!this.state.inLink && (o2 = this.tokenizer.url(e3))) {
              e3 = e3.substring(o2.raw.length), t4.push(o2);
              continue;
            }
            let a2 = e3;
            if (this.options.extensions?.startInline) {
              let u2 = 1 / 0, p3 = e3.slice(1), c3;
              this.options.extensions.startInline.forEach((f2) => {
                c3 = f2.call({ lexer: this }, p3), typeof c3 == "number" && c3 >= 0 && (u2 = Math.min(u2, c3));
              }), u2 < 1 / 0 && u2 >= 0 && (a2 = e3.substring(0, u2 + 1));
            }
            if (o2 = this.tokenizer.inlineText(a2)) {
              e3 = e3.substring(o2.raw.length), o2.raw.slice(-1) !== "_" && (s2 = o2.raw.slice(-1)), i2 = true;
              let u2 = t4.at(-1);
              u2?.type === "text" ? (u2.raw += o2.raw, u2.text += o2.text) : t4.push(o2);
              continue;
            }
            if (e3) {
              let u2 = "Infinite loop on byte: " + e3.charCodeAt(0);
              if (this.options.silent) {
                console.error(u2);
                break;
              } else throw new Error(u2);
            }
          }
          return t4;
        }
      };
      P = class {
        static {
          __name(this, "P");
        }
        options;
        parser;
        constructor(e3) {
          this.options = e3 || O;
        }
        space(e3) {
          return "";
        }
        code({ text: e3, lang: t4, escaped: n2 }) {
          let r2 = (t4 || "").match(m.notSpaceStart)?.[0], i2 = e3.replace(m.endingNewline, "") + `
`;
          return r2 ? '<pre><code class="language-' + w(r2) + '">' + (n2 ? i2 : w(i2, true)) + `</code></pre>
` : "<pre><code>" + (n2 ? i2 : w(i2, true)) + `</code></pre>
`;
        }
        blockquote({ tokens: e3 }) {
          return `<blockquote>
${this.parser.parse(e3)}</blockquote>
`;
        }
        html({ text: e3 }) {
          return e3;
        }
        def(e3) {
          return "";
        }
        heading({ tokens: e3, depth: t4 }) {
          return `<h${t4}>${this.parser.parseInline(e3)}</h${t4}>
`;
        }
        hr(e3) {
          return `<hr>
`;
        }
        list(e3) {
          let t4 = e3.ordered, n2 = e3.start, r2 = "";
          for (let o2 = 0; o2 < e3.items.length; o2++) {
            let a2 = e3.items[o2];
            r2 += this.listitem(a2);
          }
          let i2 = t4 ? "ol" : "ul", s2 = t4 && n2 !== 1 ? ' start="' + n2 + '"' : "";
          return "<" + i2 + s2 + `>
` + r2 + "</" + i2 + `>
`;
        }
        listitem(e3) {
          let t4 = "";
          if (e3.task) {
            let n2 = this.checkbox({ checked: !!e3.checked });
            e3.loose ? e3.tokens[0]?.type === "paragraph" ? (e3.tokens[0].text = n2 + " " + e3.tokens[0].text, e3.tokens[0].tokens && e3.tokens[0].tokens.length > 0 && e3.tokens[0].tokens[0].type === "text" && (e3.tokens[0].tokens[0].text = n2 + " " + w(e3.tokens[0].tokens[0].text), e3.tokens[0].tokens[0].escaped = true)) : e3.tokens.unshift({ type: "text", raw: n2 + " ", text: n2 + " ", escaped: true }) : t4 += n2 + " ";
          }
          return t4 += this.parser.parse(e3.tokens, !!e3.loose), `<li>${t4}</li>
`;
        }
        checkbox({ checked: e3 }) {
          return "<input " + (e3 ? 'checked="" ' : "") + 'disabled="" type="checkbox">';
        }
        paragraph({ tokens: e3 }) {
          return `<p>${this.parser.parseInline(e3)}</p>
`;
        }
        table(e3) {
          let t4 = "", n2 = "";
          for (let i2 = 0; i2 < e3.header.length; i2++) n2 += this.tablecell(e3.header[i2]);
          t4 += this.tablerow({ text: n2 });
          let r2 = "";
          for (let i2 = 0; i2 < e3.rows.length; i2++) {
            let s2 = e3.rows[i2];
            n2 = "";
            for (let o2 = 0; o2 < s2.length; o2++) n2 += this.tablecell(s2[o2]);
            r2 += this.tablerow({ text: n2 });
          }
          return r2 && (r2 = `<tbody>${r2}</tbody>`), `<table>
<thead>
` + t4 + `</thead>
` + r2 + `</table>
`;
        }
        tablerow({ text: e3 }) {
          return `<tr>
${e3}</tr>
`;
        }
        tablecell(e3) {
          let t4 = this.parser.parseInline(e3.tokens), n2 = e3.header ? "th" : "td";
          return (e3.align ? `<${n2} align="${e3.align}">` : `<${n2}>`) + t4 + `</${n2}>
`;
        }
        strong({ tokens: e3 }) {
          return `<strong>${this.parser.parseInline(e3)}</strong>`;
        }
        em({ tokens: e3 }) {
          return `<em>${this.parser.parseInline(e3)}</em>`;
        }
        codespan({ text: e3 }) {
          return `<code>${w(e3, true)}</code>`;
        }
        br(e3) {
          return "<br>";
        }
        del({ tokens: e3 }) {
          return `<del>${this.parser.parseInline(e3)}</del>`;
        }
        link({ href: e3, title: t4, tokens: n2 }) {
          let r2 = this.parser.parseInline(n2), i2 = J(e3);
          if (i2 === null) return r2;
          e3 = i2;
          let s2 = '<a href="' + e3 + '"';
          return t4 && (s2 += ' title="' + w(t4) + '"'), s2 += ">" + r2 + "</a>", s2;
        }
        image({ href: e3, title: t4, text: n2, tokens: r2 }) {
          r2 && (n2 = this.parser.parseInline(r2, this.parser.textRenderer));
          let i2 = J(e3);
          if (i2 === null) return w(n2);
          e3 = i2;
          let s2 = `<img src="${e3}" alt="${n2}"`;
          return t4 && (s2 += ` title="${w(t4)}"`), s2 += ">", s2;
        }
        text(e3) {
          return "tokens" in e3 && e3.tokens ? this.parser.parseInline(e3.tokens) : "escaped" in e3 && e3.escaped ? e3.text : w(e3.text);
        }
      };
      $ = class {
        static {
          __name(this, "$");
        }
        strong({ text: e3 }) {
          return e3;
        }
        em({ text: e3 }) {
          return e3;
        }
        codespan({ text: e3 }) {
          return e3;
        }
        del({ text: e3 }) {
          return e3;
        }
        html({ text: e3 }) {
          return e3;
        }
        text({ text: e3 }) {
          return e3;
        }
        link({ text: e3 }) {
          return "" + e3;
        }
        image({ text: e3 }) {
          return "" + e3;
        }
        br() {
          return "";
        }
      };
      R = class l2 {
        static {
          __name(this, "l");
        }
        options;
        renderer;
        textRenderer;
        constructor(e3) {
          this.options = e3 || O, this.options.renderer = this.options.renderer || new P(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new $();
        }
        static parse(e3, t4) {
          return new l2(t4).parse(e3);
        }
        static parseInline(e3, t4) {
          return new l2(t4).parseInline(e3);
        }
        parse(e3, t4 = true) {
          let n2 = "";
          for (let r2 = 0; r2 < e3.length; r2++) {
            let i2 = e3[r2];
            if (this.options.extensions?.renderers?.[i2.type]) {
              let o2 = i2, a2 = this.options.extensions.renderers[o2.type].call({ parser: this }, o2);
              if (a2 !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(o2.type)) {
                n2 += a2 || "";
                continue;
              }
            }
            let s2 = i2;
            switch (s2.type) {
              case "space": {
                n2 += this.renderer.space(s2);
                continue;
              }
              case "hr": {
                n2 += this.renderer.hr(s2);
                continue;
              }
              case "heading": {
                n2 += this.renderer.heading(s2);
                continue;
              }
              case "code": {
                n2 += this.renderer.code(s2);
                continue;
              }
              case "table": {
                n2 += this.renderer.table(s2);
                continue;
              }
              case "blockquote": {
                n2 += this.renderer.blockquote(s2);
                continue;
              }
              case "list": {
                n2 += this.renderer.list(s2);
                continue;
              }
              case "html": {
                n2 += this.renderer.html(s2);
                continue;
              }
              case "def": {
                n2 += this.renderer.def(s2);
                continue;
              }
              case "paragraph": {
                n2 += this.renderer.paragraph(s2);
                continue;
              }
              case "text": {
                let o2 = s2, a2 = this.renderer.text(o2);
                for (; r2 + 1 < e3.length && e3[r2 + 1].type === "text"; ) o2 = e3[++r2], a2 += `
` + this.renderer.text(o2);
                t4 ? n2 += this.renderer.paragraph({ type: "paragraph", raw: a2, text: a2, tokens: [{ type: "text", raw: a2, text: a2, escaped: true }] }) : n2 += a2;
                continue;
              }
              default: {
                let o2 = 'Token with "' + s2.type + '" type was not found.';
                if (this.options.silent) return console.error(o2), "";
                throw new Error(o2);
              }
            }
          }
          return n2;
        }
        parseInline(e3, t4 = this.renderer) {
          let n2 = "";
          for (let r2 = 0; r2 < e3.length; r2++) {
            let i2 = e3[r2];
            if (this.options.extensions?.renderers?.[i2.type]) {
              let o2 = this.options.extensions.renderers[i2.type].call({ parser: this }, i2);
              if (o2 !== false || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(i2.type)) {
                n2 += o2 || "";
                continue;
              }
            }
            let s2 = i2;
            switch (s2.type) {
              case "escape": {
                n2 += t4.text(s2);
                break;
              }
              case "html": {
                n2 += t4.html(s2);
                break;
              }
              case "link": {
                n2 += t4.link(s2);
                break;
              }
              case "image": {
                n2 += t4.image(s2);
                break;
              }
              case "strong": {
                n2 += t4.strong(s2);
                break;
              }
              case "em": {
                n2 += t4.em(s2);
                break;
              }
              case "codespan": {
                n2 += t4.codespan(s2);
                break;
              }
              case "br": {
                n2 += t4.br(s2);
                break;
              }
              case "del": {
                n2 += t4.del(s2);
                break;
              }
              case "text": {
                n2 += t4.text(s2);
                break;
              }
              default: {
                let o2 = 'Token with "' + s2.type + '" type was not found.';
                if (this.options.silent) return console.error(o2), "";
                throw new Error(o2);
              }
            }
          }
          return n2;
        }
      };
      S2 = class {
        static {
          __name(this, "S");
        }
        options;
        block;
        constructor(e3) {
          this.options = e3 || O;
        }
        static passThroughHooks = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"]);
        static passThroughHooksRespectAsync = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens"]);
        preprocess(e3) {
          return e3;
        }
        postprocess(e3) {
          return e3;
        }
        processAllTokens(e3) {
          return e3;
        }
        emStrongMask(e3) {
          return e3;
        }
        provideLexer() {
          return this.block ? b.lex : b.lexInline;
        }
        provideParser() {
          return this.block ? R.parse : R.parseInline;
        }
      };
      B = class {
        static {
          __name(this, "B");
        }
        defaults = L();
        options = this.setOptions;
        parse = this.parseMarkdown(true);
        parseInline = this.parseMarkdown(false);
        Parser = R;
        Renderer = P;
        TextRenderer = $;
        Lexer = b;
        Tokenizer = y2;
        Hooks = S2;
        constructor(...e3) {
          this.use(...e3);
        }
        walkTokens(e3, t4) {
          let n2 = [];
          for (let r2 of e3) switch (n2 = n2.concat(t4.call(this, r2)), r2.type) {
            case "table": {
              let i2 = r2;
              for (let s2 of i2.header) n2 = n2.concat(this.walkTokens(s2.tokens, t4));
              for (let s2 of i2.rows) for (let o2 of s2) n2 = n2.concat(this.walkTokens(o2.tokens, t4));
              break;
            }
            case "list": {
              let i2 = r2;
              n2 = n2.concat(this.walkTokens(i2.items, t4));
              break;
            }
            default: {
              let i2 = r2;
              this.defaults.extensions?.childTokens?.[i2.type] ? this.defaults.extensions.childTokens[i2.type].forEach((s2) => {
                let o2 = i2[s2].flat(1 / 0);
                n2 = n2.concat(this.walkTokens(o2, t4));
              }) : i2.tokens && (n2 = n2.concat(this.walkTokens(i2.tokens, t4)));
            }
          }
          return n2;
        }
        use(...e3) {
          let t4 = this.defaults.extensions || { renderers: {}, childTokens: {} };
          return e3.forEach((n2) => {
            let r2 = { ...n2 };
            if (r2.async = this.defaults.async || r2.async || false, n2.extensions && (n2.extensions.forEach((i2) => {
              if (!i2.name) throw new Error("extension name required");
              if ("renderer" in i2) {
                let s2 = t4.renderers[i2.name];
                s2 ? t4.renderers[i2.name] = function(...o2) {
                  let a2 = i2.renderer.apply(this, o2);
                  return a2 === false && (a2 = s2.apply(this, o2)), a2;
                } : t4.renderers[i2.name] = i2.renderer;
              }
              if ("tokenizer" in i2) {
                if (!i2.level || i2.level !== "block" && i2.level !== "inline") throw new Error("extension level must be 'block' or 'inline'");
                let s2 = t4[i2.level];
                s2 ? s2.unshift(i2.tokenizer) : t4[i2.level] = [i2.tokenizer], i2.start && (i2.level === "block" ? t4.startBlock ? t4.startBlock.push(i2.start) : t4.startBlock = [i2.start] : i2.level === "inline" && (t4.startInline ? t4.startInline.push(i2.start) : t4.startInline = [i2.start]));
              }
              "childTokens" in i2 && i2.childTokens && (t4.childTokens[i2.name] = i2.childTokens);
            }), r2.extensions = t4), n2.renderer) {
              let i2 = this.defaults.renderer || new P(this.defaults);
              for (let s2 in n2.renderer) {
                if (!(s2 in i2)) throw new Error(`renderer '${s2}' does not exist`);
                if (["options", "parser"].includes(s2)) continue;
                let o2 = s2, a2 = n2.renderer[o2], u2 = i2[o2];
                i2[o2] = (...p3) => {
                  let c3 = a2.apply(i2, p3);
                  return c3 === false && (c3 = u2.apply(i2, p3)), c3 || "";
                };
              }
              r2.renderer = i2;
            }
            if (n2.tokenizer) {
              let i2 = this.defaults.tokenizer || new y2(this.defaults);
              for (let s2 in n2.tokenizer) {
                if (!(s2 in i2)) throw new Error(`tokenizer '${s2}' does not exist`);
                if (["options", "rules", "lexer"].includes(s2)) continue;
                let o2 = s2, a2 = n2.tokenizer[o2], u2 = i2[o2];
                i2[o2] = (...p3) => {
                  let c3 = a2.apply(i2, p3);
                  return c3 === false && (c3 = u2.apply(i2, p3)), c3;
                };
              }
              r2.tokenizer = i2;
            }
            if (n2.hooks) {
              let i2 = this.defaults.hooks || new S2();
              for (let s2 in n2.hooks) {
                if (!(s2 in i2)) throw new Error(`hook '${s2}' does not exist`);
                if (["options", "block"].includes(s2)) continue;
                let o2 = s2, a2 = n2.hooks[o2], u2 = i2[o2];
                S2.passThroughHooks.has(s2) ? i2[o2] = (p3) => {
                  if (this.defaults.async && S2.passThroughHooksRespectAsync.has(s2)) return Promise.resolve(a2.call(i2, p3)).then((f2) => u2.call(i2, f2));
                  let c3 = a2.call(i2, p3);
                  return u2.call(i2, c3);
                } : i2[o2] = (...p3) => {
                  let c3 = a2.apply(i2, p3);
                  return c3 === false && (c3 = u2.apply(i2, p3)), c3;
                };
              }
              r2.hooks = i2;
            }
            if (n2.walkTokens) {
              let i2 = this.defaults.walkTokens, s2 = n2.walkTokens;
              r2.walkTokens = function(o2) {
                let a2 = [];
                return a2.push(s2.call(this, o2)), i2 && (a2 = a2.concat(i2.call(this, o2))), a2;
              };
            }
            this.defaults = { ...this.defaults, ...r2 };
          }), this;
        }
        setOptions(e3) {
          return this.defaults = { ...this.defaults, ...e3 }, this;
        }
        lexer(e3, t4) {
          return b.lex(e3, t4 ?? this.defaults);
        }
        parser(e3, t4) {
          return R.parse(e3, t4 ?? this.defaults);
        }
        parseMarkdown(e3) {
          return (n2, r2) => {
            let i2 = { ...r2 }, s2 = { ...this.defaults, ...i2 }, o2 = this.onError(!!s2.silent, !!s2.async);
            if (this.defaults.async === true && i2.async === false) return o2(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
            if (typeof n2 > "u" || n2 === null) return o2(new Error("marked(): input parameter is undefined or null"));
            if (typeof n2 != "string") return o2(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n2) + ", string expected"));
            s2.hooks && (s2.hooks.options = s2, s2.hooks.block = e3);
            let a2 = s2.hooks ? s2.hooks.provideLexer() : e3 ? b.lex : b.lexInline, u2 = s2.hooks ? s2.hooks.provideParser() : e3 ? R.parse : R.parseInline;
            if (s2.async) return Promise.resolve(s2.hooks ? s2.hooks.preprocess(n2) : n2).then((p3) => a2(p3, s2)).then((p3) => s2.hooks ? s2.hooks.processAllTokens(p3) : p3).then((p3) => s2.walkTokens ? Promise.all(this.walkTokens(p3, s2.walkTokens)).then(() => p3) : p3).then((p3) => u2(p3, s2)).then((p3) => s2.hooks ? s2.hooks.postprocess(p3) : p3).catch(o2);
            try {
              s2.hooks && (n2 = s2.hooks.preprocess(n2));
              let p3 = a2(n2, s2);
              s2.hooks && (p3 = s2.hooks.processAllTokens(p3)), s2.walkTokens && this.walkTokens(p3, s2.walkTokens);
              let c3 = u2(p3, s2);
              return s2.hooks && (c3 = s2.hooks.postprocess(c3)), c3;
            } catch (p3) {
              return o2(p3);
            }
          };
        }
        onError(e3, t4) {
          return (n2) => {
            if (n2.message += `
Please report this to https://github.com/markedjs/marked.`, e3) {
              let r2 = "<p>An error occurred:</p><pre>" + w(n2.message + "", true) + "</pre>";
              return t4 ? Promise.resolve(r2) : r2;
            }
            if (t4) return Promise.reject(n2);
            throw n2;
          };
        }
      };
      _ = new B();
      __name(d, "d");
      d.options = d.setOptions = function(l4) {
        return _.setOptions(l4), d.defaults = _.defaults, G(d.defaults), d;
      };
      d.getDefaults = L;
      d.defaults = O;
      d.use = function(...l4) {
        return _.use(...l4), d.defaults = _.defaults, G(d.defaults), d;
      };
      d.walkTokens = function(l4, e3) {
        return _.walkTokens(l4, e3);
      };
      d.parseInline = _.parseInline;
      d.Parser = R;
      d.parser = R.parse;
      d.Renderer = P;
      d.TextRenderer = $;
      d.Lexer = b;
      d.lexer = b.lex;
      d.Tokenizer = y2;
      d.Hooks = S2;
      d.parse = d;
      Dt = d.options;
      Ht = d.setOptions;
      Zt = d.use;
      Gt = d.walkTokens;
      Nt = d.parseInline;
      Ft = R.parse;
      Qt = b.lex;
    }
  });

  // src/rendering-util/handle-markdown-text.ts
  function preprocessMarkdown(markdown, { markdownAutoWrap }) {
    const withoutBR = markdown.replace(/<br\/>/g, "\n");
    const withoutMultipleNewlines = withoutBR.replace(/\n{2,}/g, "\n");
    const withoutExtraSpaces = dedent(withoutMultipleNewlines);
    if (markdownAutoWrap === false) {
    }
    return withoutExtraSpaces;
  }
  function nonMarkdownToLines(nonMarkdownText) {
    return nonMarkdownText.split(/\\n|\n|<br\s*\/?>/gi).map(
      (line2) => line2.trim().match(/<[^>]+>|[^\s<>]+/g)?.map((word) => ({ content: word, type: "normal" })) ?? []
    );
  }
  function markdownToLines(markdown, config3 = {}) {
    const preprocessedMarkdown = preprocessMarkdown(markdown, config3);
    const nodes5 = d.lexer(preprocessedMarkdown);
    const lines = [[]];
    let currentLine = 0;
    function processNode(node2, parentType = "normal") {
      if (node2.type === "text") {
        const textLines = node2.text.split("\n");
        textLines.forEach((textLine, index) => {
          if (index !== 0) {
            currentLine++;
            lines.push([]);
          }
          textLine.split(" ").forEach((word) => {
            word = word.replace(/&#39;/g, `'`);
            if (word) {
              lines[currentLine].push({ content: word, type: parentType });
            }
          });
        });
      } else if (node2.type === "strong" || node2.type === "em") {
        node2.tokens.forEach((contentNode) => {
          processNode(contentNode, node2.type);
        });
      } else if (node2.type === "html") {
        lines[currentLine].push({ content: node2.text, type: "normal" });
      }
    }
    __name(processNode, "processNode");
    nodes5.forEach((treeNode) => {
      if (treeNode.type === "paragraph") {
        treeNode.tokens?.forEach((contentNode) => {
          processNode(contentNode);
        });
      } else if (treeNode.type === "html") {
        lines[currentLine].push({ content: treeNode.text, type: "normal" });
      } else {
        lines[currentLine].push({ content: treeNode.raw, type: "normal" });
      }
    });
    return lines;
  }
  function nonMarkdownToHTML(text4) {
    if (!text4) {
      return "";
    }
    return `<p>${/**
     * Replace new lines with <br /> tags.
     *
     * Unlike in markdown text, `\n` sequences are treated as line breaks here.
     */
    text4.replace(/\\n|\n/g, "<br />")}</p>`;
  }
  function markdownToHTML(markdown, { markdownAutoWrap } = {}) {
    const nodes5 = d.lexer(markdown);
    function output2(node2) {
      if (node2.type === "text") {
        if (markdownAutoWrap === false) {
          return node2.text.replace(/\n */g, "<br/>").replace(/ /g, "&nbsp;");
        }
        return node2.text.replace(/\n */g, "<br/>");
      } else if (node2.type === "strong") {
        return `<strong>${node2.tokens?.map(output2).join("")}</strong>`;
      } else if (node2.type === "em") {
        return `<em>${node2.tokens?.map(output2).join("")}</em>`;
      } else if (node2.type === "paragraph") {
        return `<p>${node2.tokens?.map(output2).join("")}</p>`;
      } else if (node2.type === "space") {
        return "";
      } else if (node2.type === "html") {
        return `${node2.text}`;
      } else if (node2.type === "escape") {
        return node2.text;
      }
      log.warn(`Unsupported markdown: ${node2.type}`);
      return node2.raw;
    }
    __name(output2, "output");
    return nodes5.map(output2).join("");
  }
  var init_handle_markdown_text = __esm({
    "src/rendering-util/handle-markdown-text.ts"() {
      "use strict";
      init_marked_esm();
      init_esm();
      init_logger();
      __name(preprocessMarkdown, "preprocessMarkdown");
      __name(nonMarkdownToLines, "nonMarkdownToLines");
      __name(markdownToLines, "markdownToLines");
      __name(nonMarkdownToHTML, "nonMarkdownToHTML");
      __name(markdownToHTML, "markdownToHTML");
    }
  });

  // src/rendering-util/splitText.ts
  function splitTextToChars(text4) {
    if (Intl.Segmenter) {
      return [...new Intl.Segmenter().segment(text4)].map((s2) => s2.segment);
    }
    return [...text4];
  }
  function splitWordToFitWidth(checkFit, word) {
    const characters2 = splitTextToChars(word.content);
    return splitWordToFitWidthRecursion(checkFit, [], characters2, word.type);
  }
  function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type3) {
    if (remainingChars.length === 0) {
      return [
        { content: usedChars.join(""), type: type3 },
        { content: "", type: type3 }
      ];
    }
    const [nextChar, ...rest] = remainingChars;
    const newWord = [...usedChars, nextChar];
    if (checkFit([{ content: newWord.join(""), type: type3 }])) {
      return splitWordToFitWidthRecursion(checkFit, newWord, rest, type3);
    }
    if (usedChars.length === 0 && nextChar) {
      usedChars.push(nextChar);
      remainingChars.shift();
    }
    return [
      { content: usedChars.join(""), type: type3 },
      { content: remainingChars.join(""), type: type3 }
    ];
  }
  function splitLineToFitWidth(line2, checkFit) {
    if (line2.some(({ content }) => content.includes("\n"))) {
      throw new Error("splitLineToFitWidth does not support newlines in the line");
    }
    return splitLineToFitWidthRecursion(line2, checkFit);
  }
  function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) {
    if (words.length === 0) {
      if (newLine.length > 0) {
        lines.push(newLine);
      }
      return lines.length > 0 ? lines : [];
    }
    let joiner = "";
    if (words[0].content === " ") {
      joiner = " ";
      words.shift();
    }
    const nextWord = words.shift() ?? { content: " ", type: "normal" };
    const lineWithNextWord = [...newLine];
    if (joiner !== "") {
      lineWithNextWord.push({ content: joiner, type: "normal" });
    }
    lineWithNextWord.push(nextWord);
    if (checkFit(lineWithNextWord)) {
      return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);
    }
    if (newLine.length > 0) {
      lines.push(newLine);
      words.unshift(nextWord);
    } else if (nextWord.content) {
      const [line2, rest] = splitWordToFitWidth(checkFit, nextWord);
      lines.push([line2]);
      if (rest.content) {
        words.unshift(rest);
      }
    }
    return splitLineToFitWidthRecursion(words, checkFit, lines);
  }
  var init_splitText = __esm({
    "src/rendering-util/splitText.ts"() {
      "use strict";
      __name(splitTextToChars, "splitTextToChars");
      __name(splitWordToFitWidth, "splitWordToFitWidth");
      __name(splitWordToFitWidthRecursion, "splitWordToFitWidthRecursion");
      __name(splitLineToFitWidth, "splitLineToFitWidth");
      __name(splitLineToFitWidthRecursion, "splitLineToFitWidthRecursion");
    }
  });

  // src/rendering-util/createText.ts
  function applyStyle(dom, styleFn) {
    if (styleFn) {
      dom.attr("style", styleFn);
    }
  }
  async function addHtmlSpan(element3, node2, width3, classes3, addBackground = false, config3 = getConfig()) {
    const fo = element3.append("foreignObject");
    fo.attr("width", `${Math.min(10 * width3, maxSafeSizeForWidth)}px`);
    fo.attr("height", `${Math.min(10 * width3, maxSafeSizeForWidth)}px`);
    const div = fo.append("xhtml:div");
    const sanitizedLabel = hasKatex(node2.label) ? await renderKatexSanitized(node2.label.replace(common_default.lineBreakRegex, "\n"), config3) : sanitizeText(node2.label, config3);
    const labelClass = node2.isNode ? "nodeLabel" : "edgeLabel";
    const span = div.append("span");
    span.html(sanitizedLabel);
    applyStyle(span, node2.labelStyle);
    span.attr("class", `${labelClass} ${classes3}`);
    applyStyle(div, node2.labelStyle);
    div.style("display", "table-cell");
    div.style("white-space", "nowrap");
    div.style("line-height", "1.5");
    if (width3 !== Number.POSITIVE_INFINITY) {
      div.style("max-width", width3 + "px");
      div.style("text-align", "center");
    }
    div.attr("xmlns", "http://www.w3.org/1999/xhtml");
    if (addBackground) {
      div.attr("class", "labelBkg");
    }
    let bbox = div.node().getBoundingClientRect();
    if (bbox.width === width3) {
      div.style("display", "table");
      div.style("white-space", "break-spaces");
      div.style("width", width3 + "px");
      bbox = div.node().getBoundingClientRect();
    }
    return fo.node();
  }
  function createTspan(textElement, lineIndex, lineHeight, centerText = false) {
    const tspan = textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em");
    if (centerText) {
      tspan.attr("text-anchor", "middle");
    }
    return tspan;
  }
  function computeWidthOfText(parentNode, lineHeight, line2) {
    const testElement = parentNode.append("text");
    const testSpan = createTspan(testElement, 1, lineHeight);
    updateTextContentAndStyles(testSpan, line2);
    const textLength = testSpan.node().getComputedTextLength();
    testElement.remove();
    return textLength;
  }
  function computeDimensionOfText(parentNode, lineHeight, text4) {
    const testElement = parentNode.append("text");
    const testSpan = createTspan(testElement, 1, lineHeight);
    updateTextContentAndStyles(testSpan, [{ content: text4, type: "normal" }]);
    const textDimension = testSpan.node()?.getBoundingClientRect();
    if (textDimension) {
      testElement.remove();
    }
    return textDimension;
  }
  function createFormattedText(width3, g2, structuredText, addBackground = false, centerText = false) {
    const lineHeight = 1.1;
    const labelGroup = g2.append("g");
    const bkg = labelGroup.insert("rect").attr("class", "background").attr("style", "stroke: none");
    const textElement = labelGroup.append("text").attr("y", "-10.1");
    if (centerText) {
      textElement.attr("text-anchor", "middle");
    }
    let lineIndex = 0;
    for (const line2 of structuredText) {
      const checkWidth = /* @__PURE__ */ __name((line3) => computeWidthOfText(labelGroup, lineHeight, line3) <= width3, "checkWidth");
      const linesUnderWidth = checkWidth(line2) ? [line2] : splitLineToFitWidth(line2, checkWidth);
      for (const preparedLine of linesUnderWidth) {
        const tspan = createTspan(textElement, lineIndex, lineHeight, centerText);
        updateTextContentAndStyles(tspan, preparedLine);
        lineIndex++;
      }
    }
    if (addBackground) {
      const bbox = textElement.node().getBBox();
      const padding = 2;
      bkg.attr("x", bbox.x - padding).attr("y", bbox.y - padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding);
      return labelGroup.node();
    } else {
      return textElement.node();
    }
  }
  function decodeHTMLEntities(text4) {
    const regex2 = /&(amp|lt|gt);/g;
    return text4.replace(regex2, (match3, entity) => {
      switch (entity) {
        case "amp":
          return "&";
        case "lt":
          return "<";
        case "gt":
          return ">";
        default:
          return match3;
      }
    });
  }
  function updateTextContentAndStyles(tspan, wrappedLine) {
    tspan.text("");
    wrappedLine.forEach((word, index) => {
      const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal");
      if (index === 0) {
        innerTspan.text(decodeHTMLEntities(word.content));
      } else {
        innerTspan.text(" " + decodeHTMLEntities(word.content));
      }
    });
  }
  async function replaceIconSubstring(text4, config3 = {}) {
    const pendingReplacements = [];
    text4.replace(/(fa[bklrs]?):fa-([\w-]+)/g, (fullMatch, prefix, iconName) => {
      pendingReplacements.push(
        (async () => {
          const registeredIconName = `${prefix}:${iconName}`;
          if (await isIconAvailable(registeredIconName)) {
            return await getIconSVG(registeredIconName, void 0, { class: "label-icon" });
          } else {
            return `<i class='${sanitizeText(fullMatch, config3).replace(":", " ")}'></i>`;
          }
        })()
      );
      return fullMatch;
    });
    const replacements = await Promise.all(pendingReplacements);
    return text4.replace(/(fa[bklrs]?):fa-([\w-]+)/g, () => replacements.shift() ?? "");
  }
  var maxSafeSizeForWidth, createText;
  var init_createText = __esm({
    "src/rendering-util/createText.ts"() {
      "use strict";
      init_src32();
      init_common();
      init_logger();
      init_handle_markdown_text();
      init_utils2();
      init_icons();
      init_splitText();
      init_config();
      __name(applyStyle, "applyStyle");
      maxSafeSizeForWidth = 16384;
      __name(addHtmlSpan, "addHtmlSpan");
      __name(createTspan, "createTspan");
      __name(computeWidthOfText, "computeWidthOfText");
      __name(computeDimensionOfText, "computeDimensionOfText");
      __name(createFormattedText, "createFormattedText");
      __name(decodeHTMLEntities, "decodeHTMLEntities");
      __name(updateTextContentAndStyles, "updateTextContentAndStyles");
      __name(replaceIconSubstring, "replaceIconSubstring");
      createText = /* @__PURE__ */ __name(async (el, text4 = "", {
        style: style3 = "",
        isTitle = false,
        classes: classes3 = "",
        useHtmlLabels = true,
        markdown = true,
        isNode: isNode2 = true,
        /**
         * The width to wrap the text within. Set to `Number.POSITIVE_INFINITY` for no wrapping.
         */
        width: width3 = 200,
        addSvgBackground = false
      } = {}, config3) => {
        log.debug(
          "XYZ createText",
          text4,
          style3,
          isTitle,
          classes3,
          useHtmlLabels,
          isNode2,
          "addSvgBackground: ",
          addSvgBackground
        );
        if (useHtmlLabels) {
          const htmlText = markdown ? markdownToHTML(text4, config3) : nonMarkdownToHTML(text4);
          const decodedReplacedText = await replaceIconSubstring(decodeEntities(htmlText), config3);
          const inputForKatex = text4.replace(/\\\\/g, "\\");
          const node2 = {
            isNode: isNode2,
            label: hasKatex(text4) ? inputForKatex : decodedReplacedText,
            labelStyle: style3.replace("fill:", "color:")
          };
          const vertexNode = await addHtmlSpan(el, node2, width3, classes3, addSvgBackground, config3);
          return vertexNode;
        } else {
          const sanitizeBR = decodeEntities(text4.replace(/<br\s*\/?>/g, "<br/>"));
          const structuredText = markdown ? markdownToLines(sanitizeBR.replace("<br>", "<br/>"), config3) : nonMarkdownToLines(sanitizeBR);
          const svgLabel = createFormattedText(
            width3,
            el,
            structuredText,
            text4 ? addSvgBackground : false,
            !isNode2
          );
          if (isNode2) {
            if (/stroke:/.exec(style3)) {
              style3 = style3.replace("stroke:", "lineColor:");
            }
            const nodeLabelTextStyle = style3.replace(/stroke:[^;]+;?/g, "").replace(/stroke-width:[^;]+;?/g, "").replace(/fill:[^;]+;?/g, "").replace(/color:/g, "fill:");
            select_default2(svgLabel).attr("style", nodeLabelTextStyle);
          } else {
            const edgeLabelRectStyle = style3.replace(/stroke:[^;]+;?/g, "").replace(/stroke-width:[^;]+;?/g, "").replace(/fill:[^;]+;?/g, "").replace(/background:/g, "fill:");
            select_default2(svgLabel).select("rect").attr("style", edgeLabelRectStyle.replace(/background:/g, "fill:"));
            const edgeLabelTextStyle = style3.replace(/stroke:[^;]+;?/g, "").replace(/stroke-width:[^;]+;?/g, "").replace(/fill:[^;]+;?/g, "").replace(/color:/g, "fill:");
            select_default2(svgLabel).select("text").attr("style", edgeLabelTextStyle);
          }
          if (isTitle) {
            select_default2(svgLabel).selectAll("tspan.text-outer-tspan").classed("title-row", true);
          } else {
            select_default2(svgLabel).selectAll("tspan.text-outer-tspan").classed("row", true);
          }
          return svgLabel;
        }
      }, "createText");
    }
  });

  // src/rendering-util/rendering-elements/shapes/labelImageUtils.ts
  async function configureLabelImages(container2, labelText) {
    const images = container2.getElementsByTagName("img");
    if (!images || images.length === 0) {
      return;
    }
    const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === "";
    await Promise.all(
      [...images].map(
        (img) => new Promise((res) => {
          function setupImage() {
            img.style.display = "flex";
            img.style.flexDirection = "column";
            if (noImgText) {
              const bodyFontSize = getConfig2().fontSize ? getConfig2().fontSize : window.getComputedStyle(document.body).fontSize;
              const enlargingFactor = 5;
              const [parsedBodyFontSize = defaultConfig_default.fontSize] = parseFontSize(bodyFontSize);
              const width3 = parsedBodyFontSize * enlargingFactor + "px";
              img.style.minWidth = width3;
              img.style.maxWidth = width3;
            } else {
              img.style.width = "100%";
            }
            res(img);
          }
          __name(setupImage, "setupImage");
          setTimeout(() => {
            if (img.complete) {
              setupImage();
            }
          });
          img.addEventListener("error", setupImage);
          img.addEventListener("load", setupImage);
        })
      )
    );
  }
  var init_labelImageUtils = __esm({
    "src/rendering-util/rendering-elements/shapes/labelImageUtils.ts"() {
      "use strict";
      init_diagramAPI();
      init_defaultConfig();
      init_utils2();
      __name(configureLabelImages, "configureLabelImages");
    }
  });

  // src/rendering-util/rendering-elements/shapes/util.ts
  function createPathFromPoints(points) {
    const pointStrings = points.map((p3, i2) => `${i2 === 0 ? "M" : "L"}${p3.x},${p3.y}`);
    pointStrings.push("Z");
    return pointStrings.join(" ");
  }
  function generateFullSineWavePoints(x1, y1, x22, y22, amplitude, numCycles) {
    const points = [];
    const steps = 50;
    const deltaX = x22 - x1;
    const deltaY = y22 - y1;
    const cycleLength = deltaX / numCycles;
    const frequency = 2 * Math.PI / cycleLength;
    const midY = y1 + deltaY / 2;
    for (let i2 = 0; i2 <= steps; i2++) {
      const t4 = i2 / steps;
      const x5 = x1 + t4 * deltaX;
      const y6 = midY + amplitude * Math.sin(frequency * (x5 - x1));
      points.push({ x: x5, y: y6 });
    }
    return points;
  }
  function generateCirclePoints(centerX, centerY, radius2, numPoints, startAngle, endAngle) {
    const points = [];
    const startAngleRad = startAngle * Math.PI / 180;
    const endAngleRad = endAngle * Math.PI / 180;
    const angleRange = endAngleRad - startAngleRad;
    const angleStep = angleRange / (numPoints - 1);
    for (let i2 = 0; i2 < numPoints; i2++) {
      const angle2 = startAngleRad + i2 * angleStep;
      const x5 = centerX + radius2 * Math.cos(angle2);
      const y6 = centerY + radius2 * Math.sin(angle2);
      points.push({ x: -x5, y: -y6 });
    }
    return points;
  }
  function mergePaths(roughElement) {
    const paths = Array.from(roughElement.childNodes).filter(
      (node2) => node2.tagName === "path"
    );
    const mergedPath = document.createElementNS("http://www.w3.org/2000/svg", "path");
    const combinedPathData = paths.map((path4) => path4.getAttribute("d")).filter((d3) => d3 !== null).join(" ");
    mergedPath.setAttribute("d", combinedPathData);
    const fillPath = paths.find((path4) => path4.getAttribute("fill") !== "none");
    const strokePath = paths.find((path4) => path4.getAttribute("stroke") !== "none");
    const getAttr = /* @__PURE__ */ __name((element3, attr) => {
      return element3?.getAttribute(attr) ?? void 0;
    }, "getAttr");
    if (fillPath) {
      const fillAttrs = {
        fill: getAttr(fillPath, "fill"),
        "fill-opacity": getAttr(fillPath, "fill-opacity") ?? "1"
      };
      Object.entries(fillAttrs).forEach(([attr, value2]) => {
        if (value2) {
          mergedPath.setAttribute(attr, value2);
        }
      });
    }
    if (strokePath) {
      const strokeAttrs = {
        stroke: getAttr(strokePath, "stroke"),
        "stroke-width": getAttr(strokePath, "stroke-width") ?? "1",
        "stroke-opacity": getAttr(strokePath, "stroke-opacity") ?? "1"
      };
      Object.entries(strokeAttrs).forEach(([attr, value2]) => {
        if (value2) {
          mergedPath.setAttribute(attr, value2);
        }
      });
    }
    const group2 = document.createElementNS("http://www.w3.org/2000/svg", "g");
    group2.appendChild(mergedPath);
    return group2;
  }
  var labelHelper, insertLabel, updateNodeBounds, getNodeClasses;
  var init_util = __esm({
    "src/rendering-util/rendering-elements/shapes/util.ts"() {
      "use strict";
      init_createText();
      init_diagramAPI();
      init_config();
      init_src32();
      init_common();
      init_utils2();
      init_labelImageUtils();
      labelHelper = /* @__PURE__ */ __name(async (parent4, node2, _classes) => {
        let cssClasses;
        const useHtmlLabels = node2.useHtmlLabels || evaluate(getConfig2()?.htmlLabels);
        if (!_classes) {
          cssClasses = "node default";
        } else {
          cssClasses = _classes;
        }
        const shapeSvg = parent4.insert("g").attr("class", cssClasses).attr("id", node2.domId || node2.id);
        const labelEl = shapeSvg.insert("g").attr("class", "label").attr("style", handleUndefinedAttr(node2.labelStyle));
        let label;
        if (node2.label === void 0) {
          label = "";
        } else {
          label = typeof node2.label === "string" ? node2.label : node2.label[0];
        }
        const addBackground = !!node2.icon || !!node2.img;
        const isMarkdown = node2.labelType === "markdown";
        const text4 = await createText(
          labelEl,
          sanitizeText(decodeEntities(label), getConfig2()),
          {
            useHtmlLabels,
            width: node2.width || getConfig2().flowchart?.wrappingWidth,
            classes: isMarkdown ? "markdown-node-label" : "",
            style: node2.labelStyle,
            addSvgBackground: addBackground,
            markdown: isMarkdown
          },
          getConfig2()
        );
        let bbox = text4.getBBox();
        const halfPadding = (node2?.padding ?? 0) / 2;
        if (useHtmlLabels) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          await configureLabelImages(div, label);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        if (useHtmlLabels) {
          labelEl.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
        } else {
          labelEl.attr("transform", "translate(0, " + -bbox.height / 2 + ")");
        }
        if (node2.centerLabel) {
          labelEl.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
        }
        labelEl.insert("rect", ":first-child");
        return { shapeSvg, bbox, halfPadding, label: labelEl };
      }, "labelHelper");
      insertLabel = /* @__PURE__ */ __name(async (parent4, label, options2) => {
        const useHtmlLabels = options2.useHtmlLabels ?? getEffectiveHtmlLabels(getConfig2());
        const labelEl = parent4.insert("g").attr("class", "label").attr("style", options2.labelStyle || "");
        const text4 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), {
          useHtmlLabels,
          width: options2.width || getConfig2()?.flowchart?.wrappingWidth,
          style: options2.labelStyle,
          addSvgBackground: !!options2.icon || !!options2.img
        });
        let bbox = text4.getBBox();
        const halfPadding = options2.padding / 2;
        if (getEffectiveHtmlLabels(getConfig2())) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        if (useHtmlLabels) {
          labelEl.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
        } else {
          labelEl.attr("transform", "translate(0, " + -bbox.height / 2 + ")");
        }
        if (options2.centerLabel) {
          labelEl.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
        }
        labelEl.insert("rect", ":first-child");
        return { shapeSvg: parent4, bbox, halfPadding, label: labelEl };
      }, "insertLabel");
      updateNodeBounds = /* @__PURE__ */ __name((node2, element3) => {
        const bbox = element3.node().getBBox();
        node2.width = bbox.width;
        node2.height = bbox.height;
      }, "updateNodeBounds");
      getNodeClasses = /* @__PURE__ */ __name((node2, extra) => (node2.look === "handDrawn" ? "rough-node" : "node") + " " + node2.cssClasses + " " + (extra || ""), "getNodeClasses");
      __name(createPathFromPoints, "createPathFromPoints");
      __name(generateFullSineWavePoints, "generateFullSineWavePoints");
      __name(generateCirclePoints, "generateCirclePoints");
      __name(mergePaths, "mergePaths");
    }
  });

  // src/rendering-util/rendering-elements/intersect/intersect-node.js
  function intersectNode(node2, point8) {
    return node2.intersect(point8);
  }
  var intersect_node_default;
  var init_intersect_node = __esm({
    "src/rendering-util/rendering-elements/intersect/intersect-node.js"() {
      "use strict";
      __name(intersectNode, "intersectNode");
      intersect_node_default = intersectNode;
    }
  });

  // src/rendering-util/rendering-elements/intersect/intersect-ellipse.js
  function intersectEllipse(node2, rx, ry, point8) {
    var cx = node2.x;
    var cy = node2.y;
    var px = cx - point8.x;
    var py = cy - point8.y;
    var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);
    var dx = Math.abs(rx * ry * px / det);
    if (point8.x < cx) {
      dx = -dx;
    }
    var dy = Math.abs(rx * ry * py / det);
    if (point8.y < cy) {
      dy = -dy;
    }
    return { x: cx + dx, y: cy + dy };
  }
  var intersect_ellipse_default;
  var init_intersect_ellipse = __esm({
    "src/rendering-util/rendering-elements/intersect/intersect-ellipse.js"() {
      "use strict";
      __name(intersectEllipse, "intersectEllipse");
      intersect_ellipse_default = intersectEllipse;
    }
  });

  // src/rendering-util/rendering-elements/intersect/intersect-circle.js
  function intersectCircle(node2, rx, point8) {
    return intersect_ellipse_default(node2, rx, rx, point8);
  }
  var intersect_circle_default;
  var init_intersect_circle = __esm({
    "src/rendering-util/rendering-elements/intersect/intersect-circle.js"() {
      "use strict";
      init_intersect_ellipse();
      __name(intersectCircle, "intersectCircle");
      intersect_circle_default = intersectCircle;
    }
  });

  // src/rendering-util/rendering-elements/intersect/intersect-line.js
  function intersectLine(p1, p22, q1, q22) {
    {
      const a1 = p22.y - p1.y;
      const b1 = p1.x - p22.x;
      const c1 = p22.x * p1.y - p1.x * p22.y;
      const r3 = a1 * q1.x + b1 * q1.y + c1;
      const r4 = a1 * q22.x + b1 * q22.y + c1;
      const epsilon6 = 1e-6;
      if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {
        return;
      }
      const a2 = q22.y - q1.y;
      const b22 = q1.x - q22.x;
      const c22 = q22.x * q1.y - q1.x * q22.y;
      const r1 = a2 * p1.x + b22 * p1.y + c22;
      const r2 = a2 * p22.x + b22 * p22.y + c22;
      if (Math.abs(r1) < epsilon6 && Math.abs(r2) < epsilon6 && sameSign(r1, r2)) {
        return;
      }
      const denom = a1 * b22 - a2 * b1;
      if (denom === 0) {
        return;
      }
      const offset = Math.abs(denom / 2);
      let num = b1 * c22 - b22 * c1;
      const x5 = num < 0 ? (num - offset) / denom : (num + offset) / denom;
      num = a2 * c1 - a1 * c22;
      const y6 = num < 0 ? (num - offset) / denom : (num + offset) / denom;
      return { x: x5, y: y6 };
    }
  }
  function sameSign(r1, r2) {
    return r1 * r2 > 0;
  }
  var intersect_line_default;
  var init_intersect_line = __esm({
    "src/rendering-util/rendering-elements/intersect/intersect-line.js"() {
      "use strict";
      __name(intersectLine, "intersectLine");
      __name(sameSign, "sameSign");
      intersect_line_default = intersectLine;
    }
  });

  // src/rendering-util/rendering-elements/intersect/intersect-polygon.js
  function intersectPolygon(node2, polyPoints, point8) {
    let x1 = node2.x;
    let y1 = node2.y;
    let intersections = [];
    let minX = Number.POSITIVE_INFINITY;
    let minY = Number.POSITIVE_INFINITY;
    if (typeof polyPoints.forEach === "function") {
      polyPoints.forEach(function(entry) {
        minX = Math.min(minX, entry.x);
        minY = Math.min(minY, entry.y);
      });
    } else {
      minX = Math.min(minX, polyPoints.x);
      minY = Math.min(minY, polyPoints.y);
    }
    let left3 = x1 - node2.width / 2 - minX;
    let top2 = y1 - node2.height / 2 - minY;
    for (let i2 = 0; i2 < polyPoints.length; i2++) {
      let p1 = polyPoints[i2];
      let p22 = polyPoints[i2 < polyPoints.length - 1 ? i2 + 1 : 0];
      let intersect3 = intersect_line_default(
        node2,
        point8,
        { x: left3 + p1.x, y: top2 + p1.y },
        { x: left3 + p22.x, y: top2 + p22.y }
      );
      if (intersect3) {
        intersections.push(intersect3);
      }
    }
    if (!intersections.length) {
      return node2;
    }
    if (intersections.length > 1) {
      intersections.sort(function(p3, q3) {
        let pdx = p3.x - point8.x;
        let pdy = p3.y - point8.y;
        let distp = Math.sqrt(pdx * pdx + pdy * pdy);
        let qdx = q3.x - point8.x;
        let qdy = q3.y - point8.y;
        let distq = Math.sqrt(qdx * qdx + qdy * qdy);
        return distp < distq ? -1 : distp === distq ? 0 : 1;
      });
    }
    return intersections[0];
  }
  var intersect_polygon_default;
  var init_intersect_polygon = __esm({
    "src/rendering-util/rendering-elements/intersect/intersect-polygon.js"() {
      "use strict";
      init_intersect_line();
      __name(intersectPolygon, "intersectPolygon");
      intersect_polygon_default = intersectPolygon;
    }
  });

  // src/rendering-util/rendering-elements/intersect/intersect-rect.js
  var intersectRect, intersect_rect_default;
  var init_intersect_rect = __esm({
    "src/rendering-util/rendering-elements/intersect/intersect-rect.js"() {
      "use strict";
      intersectRect = /* @__PURE__ */ __name((node2, point8) => {
        var x5 = node2.x;
        var y6 = node2.y;
        var dx = point8.x - x5;
        var dy = point8.y - y6;
        var w4 = node2.width / 2;
        var h3 = node2.height / 2;
        var sx, sy;
        if (Math.abs(dy) * w4 > Math.abs(dx) * h3) {
          if (dy < 0) {
            h3 = -h3;
          }
          sx = dy === 0 ? 0 : h3 * dx / dy;
          sy = h3;
        } else {
          if (dx < 0) {
            w4 = -w4;
          }
          sx = w4;
          sy = dx === 0 ? 0 : w4 * dy / dx;
        }
        return { x: x5 + sx, y: y6 + sy };
      }, "intersectRect");
      intersect_rect_default = intersectRect;
    }
  });

  // src/rendering-util/rendering-elements/intersect/index.js
  var intersect_default;
  var init_intersect = __esm({
    "src/rendering-util/rendering-elements/intersect/index.js"() {
      "use strict";
      init_intersect_node();
      init_intersect_circle();
      init_intersect_ellipse();
      init_intersect_polygon();
      init_intersect_rect();
      intersect_default = {
        node: intersect_node_default,
        circle: intersect_circle_default,
        ellipse: intersect_ellipse_default,
        polygon: intersect_polygon_default,
        rect: intersect_rect_default
      };
    }
  });

  // src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts
  var solidStateFill, compileStyles, styles2Map, isLabelStyle, styles2String, userNodeOverrides, getStrokeDashArray;
  var init_handDrawnShapeStyles = __esm({
    "src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts"() {
      "use strict";
      init_diagramAPI();
      solidStateFill = /* @__PURE__ */ __name((color2) => {
        const { handDrawnSeed } = getConfig2();
        return {
          fill: color2,
          hachureAngle: 120,
          // angle of hachure,
          hachureGap: 4,
          fillWeight: 2,
          roughness: 0.7,
          stroke: color2,
          seed: handDrawnSeed
        };
      }, "solidStateFill");
      compileStyles = /* @__PURE__ */ __name((node2) => {
        const stylesMap = styles2Map([
          ...node2.cssCompiledStyles || [],
          ...node2.cssStyles || [],
          ...node2.labelStyle || []
        ]);
        return { stylesMap, stylesArray: [...stylesMap] };
      }, "compileStyles");
      styles2Map = /* @__PURE__ */ __name((styles7) => {
        const styleMap2 = /* @__PURE__ */ new Map();
        styles7.forEach((style3) => {
          const [key, value2] = style3.split(":");
          styleMap2.set(key.trim(), value2?.trim());
        });
        return styleMap2;
      }, "styles2Map");
      isLabelStyle = /* @__PURE__ */ __name((key) => {
        return key === "color" || key === "font-size" || key === "font-family" || key === "font-weight" || key === "font-style" || key === "text-decoration" || key === "text-align" || key === "text-transform" || key === "line-height" || key === "letter-spacing" || key === "word-spacing" || key === "text-shadow" || key === "text-overflow" || key === "white-space" || key === "word-wrap" || key === "word-break" || key === "overflow-wrap" || key === "hyphens";
      }, "isLabelStyle");
      styles2String = /* @__PURE__ */ __name((node2) => {
        const { stylesArray } = compileStyles(node2);
        const labelStyles = [];
        const nodeStyles = [];
        const borderStyles = [];
        const backgroundStyles = [];
        stylesArray.forEach((style3) => {
          const key = style3[0];
          if (isLabelStyle(key)) {
            labelStyles.push(style3.join(":") + " !important");
          } else {
            nodeStyles.push(style3.join(":") + " !important");
            if (key.includes("stroke")) {
              borderStyles.push(style3.join(":") + " !important");
            }
            if (key === "fill") {
              backgroundStyles.push(style3.join(":") + " !important");
            }
          }
        });
        return {
          labelStyles: labelStyles.join(";"),
          nodeStyles: nodeStyles.join(";"),
          stylesArray,
          borderStyles,
          backgroundStyles
        };
      }, "styles2String");
      userNodeOverrides = /* @__PURE__ */ __name((node2, options2) => {
        const { themeVariables, handDrawnSeed } = getConfig2();
        const { nodeBorder, mainBkg } = themeVariables;
        const { stylesMap } = compileStyles(node2);
        const result = Object.assign(
          {
            roughness: 0.7,
            fill: stylesMap.get("fill") || mainBkg,
            fillStyle: "hachure",
            // solid fill
            fillWeight: 4,
            hachureGap: 5.2,
            stroke: stylesMap.get("stroke") || nodeBorder,
            seed: handDrawnSeed,
            strokeWidth: stylesMap.get("stroke-width")?.replace("px", "") || 1.3,
            fillLineDash: [0, 0],
            strokeLineDash: getStrokeDashArray(stylesMap.get("stroke-dasharray"))
          },
          options2
        );
        return result;
      }, "userNodeOverrides");
      getStrokeDashArray = /* @__PURE__ */ __name((strokeDasharrayStyle) => {
        if (!strokeDasharrayStyle) {
          return [0, 0];
        }
        const dashArray = strokeDasharrayStyle.trim().split(/\s+/).map(Number);
        if (dashArray.length === 1) {
          const val = isNaN(dashArray[0]) ? 0 : dashArray[0];
          return [val, val];
        }
        const first3 = isNaN(dashArray[0]) ? 0 : dashArray[0];
        const second2 = isNaN(dashArray[1]) ? 0 : dashArray[1];
        return [first3, second2];
      }, "getStrokeDashArray");
    }
  });

  // ../../node_modules/.pnpm/roughjs@4.6.6_patch_hash=3543d47108cb41b68ec6a671c0e1f9d0cfe2ce524fea5b0992511ae84c3c6b64/node_modules/roughjs/bundled/rough.esm.js
  function t(t4, e3, s2) {
    if (t4 && t4.length) {
      const [n2, o2] = e3, a2 = Math.PI / 180 * s2, h3 = Math.cos(a2), r2 = Math.sin(a2);
      for (const e4 of t4) {
        const [t5, s3] = e4;
        e4[0] = (t5 - n2) * h3 - (s3 - o2) * r2 + n2, e4[1] = (t5 - n2) * r2 + (s3 - o2) * h3 + o2;
      }
    }
  }
  function e(t4, e3) {
    return t4[0] === e3[0] && t4[1] === e3[1];
  }
  function s(s2, n2, o2, a2 = 1) {
    const h3 = o2, r2 = Math.max(n2, 0.1), i2 = s2[0] && s2[0][0] && "number" == typeof s2[0][0] ? [s2] : s2, c3 = [0, 0];
    if (h3) for (const e3 of i2) t(e3, c3, h3);
    const l4 = (function(t4, s3, n3) {
      const o3 = [];
      for (const s4 of t4) {
        const t5 = [...s4];
        e(t5[0], t5[t5.length - 1]) || t5.push([t5[0][0], t5[0][1]]), t5.length > 2 && o3.push(t5);
      }
      const a3 = [];
      s3 = Math.max(s3, 0.1);
      const h4 = [];
      for (const t5 of o3) for (let e3 = 0; e3 < t5.length - 1; e3++) {
        const s4 = t5[e3], n4 = t5[e3 + 1];
        if (s4[1] !== n4[1]) {
          const t6 = Math.min(s4[1], n4[1]);
          h4.push({ ymin: t6, ymax: Math.max(s4[1], n4[1]), x: t6 === s4[1] ? s4[0] : n4[0], islope: (n4[0] - s4[0]) / (n4[1] - s4[1]) });
        }
      }
      if (h4.sort(((t5, e3) => t5.ymin < e3.ymin ? -1 : t5.ymin > e3.ymin ? 1 : t5.x < e3.x ? -1 : t5.x > e3.x ? 1 : t5.ymax === e3.ymax ? 0 : (t5.ymax - e3.ymax) / Math.abs(t5.ymax - e3.ymax))), !h4.length) return a3;
      let r3 = [], i3 = h4[0].ymin, c4 = 0;
      for (; r3.length || h4.length; ) {
        if (h4.length) {
          let t5 = -1;
          for (let e3 = 0; e3 < h4.length && !(h4[e3].ymin > i3); e3++) t5 = e3;
          h4.splice(0, t5 + 1).forEach(((t6) => {
            r3.push({ s: i3, edge: t6 });
          }));
        }
        if (r3 = r3.filter(((t5) => !(t5.edge.ymax <= i3))), r3.sort(((t5, e3) => t5.edge.x === e3.edge.x ? 0 : (t5.edge.x - e3.edge.x) / Math.abs(t5.edge.x - e3.edge.x))), (1 !== n3 || c4 % s3 == 0) && r3.length > 1) for (let t5 = 0; t5 < r3.length; t5 += 2) {
          const e3 = t5 + 1;
          if (e3 >= r3.length) break;
          const s4 = r3[t5].edge, n4 = r3[e3].edge;
          a3.push([[Math.round(s4.x), i3], [Math.round(n4.x), i3]]);
        }
        i3 += n3, r3.forEach(((t5) => {
          t5.edge.x = t5.edge.x + n3 * t5.edge.islope;
        })), c4++;
      }
      return a3;
    })(i2, r2, a2);
    if (h3) {
      for (const e3 of i2) t(e3, c3, -h3);
      !(function(e3, s3, n3) {
        const o3 = [];
        e3.forEach(((t4) => o3.push(...t4))), t(o3, s3, n3);
      })(l4, c3, -h3);
    }
    return l4;
  }
  function n(t4, e3) {
    var n2;
    const o2 = e3.hachureAngle + 90;
    let a2 = e3.hachureGap;
    a2 < 0 && (a2 = 4 * e3.strokeWidth), a2 = Math.round(Math.max(a2, 0.1));
    let h3 = 1;
    return e3.roughness >= 1 && ((null === (n2 = e3.randomizer) || void 0 === n2 ? void 0 : n2.next()) || Math.random()) > 0.7 && (h3 = a2), s(t4, a2, o2, h3 || 1);
  }
  function a(t4) {
    const e3 = t4[0], s2 = t4[1];
    return Math.sqrt(Math.pow(e3[0] - s2[0], 2) + Math.pow(e3[1] - s2[1], 2));
  }
  function k(t4, e3) {
    return t4.type === e3;
  }
  function b2(t4) {
    const e3 = [], s2 = (function(t5) {
      const e4 = new Array();
      for (; "" !== t5; ) if (t5.match(/^([ \t\r\n,]+)/)) t5 = t5.substr(RegExp.$1.length);
      else if (t5.match(/^([aAcChHlLmMqQsStTvVzZ])/)) e4[e4.length] = { type: f, text: RegExp.$1 }, t5 = t5.substr(RegExp.$1.length);
      else {
        if (!t5.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/)) return [];
        e4[e4.length] = { type: d2, text: `${parseFloat(RegExp.$1)}` }, t5 = t5.substr(RegExp.$1.length);
      }
      return e4[e4.length] = { type: g, text: "" }, e4;
    })(t4);
    let n2 = "BOD", o2 = 0, a2 = s2[o2];
    for (; !k(a2, g); ) {
      let h3 = 0;
      const r2 = [];
      if ("BOD" === n2) {
        if ("M" !== a2.text && "m" !== a2.text) return b2("M0,0" + t4);
        o2++, h3 = M2[a2.text], n2 = a2.text;
      } else k(a2, d2) ? h3 = M2[n2] : (o2++, h3 = M2[a2.text], n2 = a2.text);
      if (!(o2 + h3 < s2.length)) throw new Error("Path data ended short");
      for (let t5 = o2; t5 < o2 + h3; t5++) {
        const e4 = s2[t5];
        if (!k(e4, d2)) throw new Error("Param not a number: " + n2 + "," + e4.text);
        r2[r2.length] = +e4.text;
      }
      if ("number" != typeof M2[n2]) throw new Error("Bad segment: " + n2);
      {
        const t5 = { key: n2, data: r2 };
        e3.push(t5), o2 += h3, a2 = s2[o2], "M" === n2 && (n2 = "L"), "m" === n2 && (n2 = "l");
      }
    }
    return e3;
  }
  function y3(t4) {
    let e3 = 0, s2 = 0, n2 = 0, o2 = 0;
    const a2 = [];
    for (const { key: h3, data: r2 } of t4) switch (h3) {
      case "M":
        a2.push({ key: "M", data: [...r2] }), [e3, s2] = r2, [n2, o2] = r2;
        break;
      case "m":
        e3 += r2[0], s2 += r2[1], a2.push({ key: "M", data: [e3, s2] }), n2 = e3, o2 = s2;
        break;
      case "L":
        a2.push({ key: "L", data: [...r2] }), [e3, s2] = r2;
        break;
      case "l":
        e3 += r2[0], s2 += r2[1], a2.push({ key: "L", data: [e3, s2] });
        break;
      case "C":
        a2.push({ key: "C", data: [...r2] }), e3 = r2[4], s2 = r2[5];
        break;
      case "c": {
        const t5 = r2.map(((t6, n3) => n3 % 2 ? t6 + s2 : t6 + e3));
        a2.push({ key: "C", data: t5 }), e3 = t5[4], s2 = t5[5];
        break;
      }
      case "Q":
        a2.push({ key: "Q", data: [...r2] }), e3 = r2[2], s2 = r2[3];
        break;
      case "q": {
        const t5 = r2.map(((t6, n3) => n3 % 2 ? t6 + s2 : t6 + e3));
        a2.push({ key: "Q", data: t5 }), e3 = t5[2], s2 = t5[3];
        break;
      }
      case "A":
        a2.push({ key: "A", data: [...r2] }), e3 = r2[5], s2 = r2[6];
        break;
      case "a":
        e3 += r2[5], s2 += r2[6], a2.push({ key: "A", data: [r2[0], r2[1], r2[2], r2[3], r2[4], e3, s2] });
        break;
      case "H":
        a2.push({ key: "H", data: [...r2] }), e3 = r2[0];
        break;
      case "h":
        e3 += r2[0], a2.push({ key: "H", data: [e3] });
        break;
      case "V":
        a2.push({ key: "V", data: [...r2] }), s2 = r2[0];
        break;
      case "v":
        s2 += r2[0], a2.push({ key: "V", data: [s2] });
        break;
      case "S":
        a2.push({ key: "S", data: [...r2] }), e3 = r2[2], s2 = r2[3];
        break;
      case "s": {
        const t5 = r2.map(((t6, n3) => n3 % 2 ? t6 + s2 : t6 + e3));
        a2.push({ key: "S", data: t5 }), e3 = t5[2], s2 = t5[3];
        break;
      }
      case "T":
        a2.push({ key: "T", data: [...r2] }), e3 = r2[0], s2 = r2[1];
        break;
      case "t":
        e3 += r2[0], s2 += r2[1], a2.push({ key: "T", data: [e3, s2] });
        break;
      case "Z":
      case "z":
        a2.push({ key: "Z", data: [] }), e3 = n2, s2 = o2;
    }
    return a2;
  }
  function m2(t4) {
    const e3 = [];
    let s2 = "", n2 = 0, o2 = 0, a2 = 0, h3 = 0, r2 = 0, i2 = 0;
    for (const { key: c3, data: l4 } of t4) {
      switch (c3) {
        case "M":
          e3.push({ key: "M", data: [...l4] }), [n2, o2] = l4, [a2, h3] = l4;
          break;
        case "C":
          e3.push({ key: "C", data: [...l4] }), n2 = l4[4], o2 = l4[5], r2 = l4[2], i2 = l4[3];
          break;
        case "L":
          e3.push({ key: "L", data: [...l4] }), [n2, o2] = l4;
          break;
        case "H":
          n2 = l4[0], e3.push({ key: "L", data: [n2, o2] });
          break;
        case "V":
          o2 = l4[0], e3.push({ key: "L", data: [n2, o2] });
          break;
        case "S": {
          let t5 = 0, a3 = 0;
          "C" === s2 || "S" === s2 ? (t5 = n2 + (n2 - r2), a3 = o2 + (o2 - i2)) : (t5 = n2, a3 = o2), e3.push({ key: "C", data: [t5, a3, ...l4] }), r2 = l4[0], i2 = l4[1], n2 = l4[2], o2 = l4[3];
          break;
        }
        case "T": {
          const [t5, a3] = l4;
          let h4 = 0, c4 = 0;
          "Q" === s2 || "T" === s2 ? (h4 = n2 + (n2 - r2), c4 = o2 + (o2 - i2)) : (h4 = n2, c4 = o2);
          const u2 = n2 + 2 * (h4 - n2) / 3, p3 = o2 + 2 * (c4 - o2) / 3, f2 = t5 + 2 * (h4 - t5) / 3, d3 = a3 + 2 * (c4 - a3) / 3;
          e3.push({ key: "C", data: [u2, p3, f2, d3, t5, a3] }), r2 = h4, i2 = c4, n2 = t5, o2 = a3;
          break;
        }
        case "Q": {
          const [t5, s3, a3, h4] = l4, c4 = n2 + 2 * (t5 - n2) / 3, u2 = o2 + 2 * (s3 - o2) / 3, p3 = a3 + 2 * (t5 - a3) / 3, f2 = h4 + 2 * (s3 - h4) / 3;
          e3.push({ key: "C", data: [c4, u2, p3, f2, a3, h4] }), r2 = t5, i2 = s3, n2 = a3, o2 = h4;
          break;
        }
        case "A": {
          const t5 = Math.abs(l4[0]), s3 = Math.abs(l4[1]), a3 = l4[2], h4 = l4[3], r3 = l4[4], i3 = l4[5], c4 = l4[6];
          if (0 === t5 || 0 === s3) e3.push({ key: "C", data: [n2, o2, i3, c4, i3, c4] }), n2 = i3, o2 = c4;
          else if (n2 !== i3 || o2 !== c4) {
            x2(n2, o2, i3, c4, t5, s3, a3, h4, r3).forEach((function(t6) {
              e3.push({ key: "C", data: t6 });
            })), n2 = i3, o2 = c4;
          }
          break;
        }
        case "Z":
          e3.push({ key: "Z", data: [] }), n2 = a2, o2 = h3;
      }
      s2 = c3;
    }
    return e3;
  }
  function w2(t4, e3, s2) {
    return [t4 * Math.cos(s2) - e3 * Math.sin(s2), t4 * Math.sin(s2) + e3 * Math.cos(s2)];
  }
  function x2(t4, e3, s2, n2, o2, a2, h3, r2, i2, c3) {
    const l4 = (u2 = h3, Math.PI * u2 / 180);
    var u2;
    let p3 = [], f2 = 0, d3 = 0, g2 = 0, M3 = 0;
    if (c3) [f2, d3, g2, M3] = c3;
    else {
      [t4, e3] = w2(t4, e3, -l4), [s2, n2] = w2(s2, n2, -l4);
      const h4 = (t4 - s2) / 2, c4 = (e3 - n2) / 2;
      let u3 = h4 * h4 / (o2 * o2) + c4 * c4 / (a2 * a2);
      u3 > 1 && (u3 = Math.sqrt(u3), o2 *= u3, a2 *= u3);
      const p4 = o2 * o2, k3 = a2 * a2, b4 = p4 * k3 - p4 * c4 * c4 - k3 * h4 * h4, y7 = p4 * c4 * c4 + k3 * h4 * h4, m4 = (r2 === i2 ? -1 : 1) * Math.sqrt(Math.abs(b4 / y7));
      g2 = m4 * o2 * c4 / a2 + (t4 + s2) / 2, M3 = m4 * -a2 * h4 / o2 + (e3 + n2) / 2, f2 = Math.asin(parseFloat(((e3 - M3) / a2).toFixed(9))), d3 = Math.asin(parseFloat(((n2 - M3) / a2).toFixed(9))), t4 < g2 && (f2 = Math.PI - f2), s2 < g2 && (d3 = Math.PI - d3), f2 < 0 && (f2 = 2 * Math.PI + f2), d3 < 0 && (d3 = 2 * Math.PI + d3), i2 && f2 > d3 && (f2 -= 2 * Math.PI), !i2 && d3 > f2 && (d3 -= 2 * Math.PI);
    }
    let k2 = d3 - f2;
    if (Math.abs(k2) > 120 * Math.PI / 180) {
      const t5 = d3, e4 = s2, r3 = n2;
      d3 = i2 && d3 > f2 ? f2 + 120 * Math.PI / 180 * 1 : f2 + 120 * Math.PI / 180 * -1, p3 = x2(s2 = g2 + o2 * Math.cos(d3), n2 = M3 + a2 * Math.sin(d3), e4, r3, o2, a2, h3, 0, i2, [d3, t5, g2, M3]);
    }
    k2 = d3 - f2;
    const b3 = Math.cos(f2), y6 = Math.sin(f2), m3 = Math.cos(d3), P3 = Math.sin(d3), v3 = Math.tan(k2 / 4), S4 = 4 / 3 * o2 * v3, O3 = 4 / 3 * a2 * v3, L3 = [t4, e3], T3 = [t4 + S4 * y6, e3 - O3 * b3], D4 = [s2 + S4 * P3, n2 - O3 * m3], A2 = [s2, n2];
    if (T3[0] = 2 * L3[0] - T3[0], T3[1] = 2 * L3[1] - T3[1], c3) return [T3, D4, A2].concat(p3);
    {
      p3 = [T3, D4, A2].concat(p3);
      const t5 = [];
      for (let e4 = 0; e4 < p3.length; e4 += 3) {
        const s3 = w2(p3[e4][0], p3[e4][1], l4), n3 = w2(p3[e4 + 1][0], p3[e4 + 1][1], l4), o3 = w2(p3[e4 + 2][0], p3[e4 + 2][1], l4);
        t5.push([s3[0], s3[1], n3[0], n3[1], o3[0], o3[1]]);
      }
      return t5;
    }
  }
  function v2(t4, e3, s2, n2, o2) {
    return { type: "path", ops: $2(t4, e3, s2, n2, o2) };
  }
  function S3(t4, e3, s2) {
    const n2 = (t4 || []).length;
    if (n2 > 2) {
      const o2 = [];
      for (let e4 = 0; e4 < n2 - 1; e4++) o2.push(...$2(t4[e4][0], t4[e4][1], t4[e4 + 1][0], t4[e4 + 1][1], s2));
      return e3 && o2.push(...$2(t4[n2 - 1][0], t4[n2 - 1][1], t4[0][0], t4[0][1], s2)), { type: "path", ops: o2 };
    }
    return 2 === n2 ? v2(t4[0][0], t4[0][1], t4[1][0], t4[1][1], s2) : { type: "path", ops: [] };
  }
  function O2(t4, e3, s2, n2, o2) {
    return (function(t5, e4) {
      return S3(t5, true, e4);
    })([[t4, e3], [t4 + s2, e3], [t4 + s2, e3 + n2], [t4, e3 + n2]], o2);
  }
  function L2(t4, e3) {
    if (t4.length) {
      const s2 = "number" == typeof t4[0][0] ? [t4] : t4, n2 = j2(s2[0], 1 * (1 + 0.2 * e3.roughness), e3), o2 = e3.disableMultiStroke ? [] : j2(s2[0], 1.5 * (1 + 0.22 * e3.roughness), z2(e3));
      for (let t5 = 1; t5 < s2.length; t5++) {
        const a2 = s2[t5];
        if (a2.length) {
          const t6 = j2(a2, 1 * (1 + 0.2 * e3.roughness), e3), s3 = e3.disableMultiStroke ? [] : j2(a2, 1.5 * (1 + 0.22 * e3.roughness), z2(e3));
          for (const e4 of t6) "move" !== e4.op && n2.push(e4);
          for (const t7 of s3) "move" !== t7.op && o2.push(t7);
        }
      }
      return { type: "path", ops: n2.concat(o2) };
    }
    return { type: "path", ops: [] };
  }
  function T2(t4, e3, s2) {
    const n2 = Math.sqrt(2 * Math.PI * Math.sqrt((Math.pow(t4 / 2, 2) + Math.pow(e3 / 2, 2)) / 2)), o2 = Math.ceil(Math.max(s2.curveStepCount, s2.curveStepCount / Math.sqrt(200) * n2)), a2 = 2 * Math.PI / o2;
    let h3 = Math.abs(t4 / 2), r2 = Math.abs(e3 / 2);
    const i2 = 1 - s2.curveFitting;
    return h3 += G2(h3 * i2, s2), r2 += G2(r2 * i2, s2), { increment: a2, rx: h3, ry: r2 };
  }
  function D3(t4, e3, s2, n2) {
    const [o2, a2] = F2(n2.increment, t4, e3, n2.rx, n2.ry, 1, n2.increment * E2(0.1, E2(0.4, 1, s2), s2), s2);
    let h3 = q2(o2, null, s2);
    if (!s2.disableMultiStroke && 0 !== s2.roughness) {
      const [o3] = F2(n2.increment, t4, e3, n2.rx, n2.ry, 1.5, 0, s2), a3 = q2(o3, null, s2);
      h3 = h3.concat(a3);
    }
    return { estimatedPoints: a2, opset: { type: "path", ops: h3 } };
  }
  function A(t4, e3, s2, n2, o2, a2, h3, r2, i2) {
    const c3 = t4, l4 = e3;
    let u2 = Math.abs(s2 / 2), p3 = Math.abs(n2 / 2);
    u2 += G2(0.01 * u2, i2), p3 += G2(0.01 * p3, i2);
    let f2 = o2, d3 = a2;
    for (; f2 < 0; ) f2 += 2 * Math.PI, d3 += 2 * Math.PI;
    d3 - f2 > 2 * Math.PI && (f2 = 0, d3 = 2 * Math.PI);
    const g2 = 2 * Math.PI / i2.curveStepCount, M3 = Math.min(g2 / 2, (d3 - f2) / 2), k2 = V2(M3, c3, l4, u2, p3, f2, d3, 1, i2);
    if (!i2.disableMultiStroke) {
      const t5 = V2(M3, c3, l4, u2, p3, f2, d3, 1.5, i2);
      k2.push(...t5);
    }
    return h3 && (r2 ? k2.push(...$2(c3, l4, c3 + u2 * Math.cos(f2), l4 + p3 * Math.sin(f2), i2), ...$2(c3, l4, c3 + u2 * Math.cos(d3), l4 + p3 * Math.sin(d3), i2)) : k2.push({ op: "lineTo", data: [c3, l4] }, { op: "lineTo", data: [c3 + u2 * Math.cos(f2), l4 + p3 * Math.sin(f2)] })), { type: "path", ops: k2 };
  }
  function _2(t4, e3) {
    const s2 = m2(y3(b2(t4))), n2 = [];
    let o2 = [0, 0], a2 = [0, 0];
    for (const { key: t5, data: h3 } of s2) switch (t5) {
      case "M":
        a2 = [h3[0], h3[1]], o2 = [h3[0], h3[1]];
        break;
      case "L":
        n2.push(...$2(a2[0], a2[1], h3[0], h3[1], e3)), a2 = [h3[0], h3[1]];
        break;
      case "C": {
        const [t6, s3, o3, r2, i2, c3] = h3;
        n2.push(...Z(t6, s3, o3, r2, i2, c3, a2, e3)), a2 = [i2, c3];
        break;
      }
      case "Z":
        n2.push(...$2(a2[0], a2[1], o2[0], o2[1], e3)), a2 = [o2[0], o2[1]];
    }
    return { type: "path", ops: n2 };
  }
  function I2(t4, e3) {
    const s2 = [];
    for (const n2 of t4) if (n2.length) {
      const t5 = e3.maxRandomnessOffset || 0, o2 = n2.length;
      if (o2 > 2) {
        s2.push({ op: "move", data: [n2[0][0] + G2(t5, e3), n2[0][1] + G2(t5, e3)] });
        for (let a2 = 1; a2 < o2; a2++) s2.push({ op: "lineTo", data: [n2[a2][0] + G2(t5, e3), n2[a2][1] + G2(t5, e3)] });
      }
    }
    return { type: "fillPath", ops: s2 };
  }
  function C2(t4, e3) {
    return (function(t5, e4) {
      let s2 = t5.fillStyle || "hachure";
      if (!u[s2]) switch (s2) {
        case "zigzag":
          u[s2] || (u[s2] = new h2(e4));
          break;
        case "cross-hatch":
          u[s2] || (u[s2] = new r(e4));
          break;
        case "dots":
          u[s2] || (u[s2] = new i(e4));
          break;
        case "dashed":
          u[s2] || (u[s2] = new c2(e4));
          break;
        case "zigzag-line":
          u[s2] || (u[s2] = new l3(e4));
          break;
        default:
          s2 = "hachure", u[s2] || (u[s2] = new o(e4));
      }
      return u[s2];
    })(e3, P2).fillPolygons(t4, e3);
  }
  function z2(t4) {
    const e3 = Object.assign({}, t4);
    return e3.randomizer = void 0, t4.seed && (e3.seed = t4.seed + 1), e3;
  }
  function W2(t4) {
    return t4.randomizer || (t4.randomizer = new p(t4.seed || 0)), t4.randomizer.next();
  }
  function E2(t4, e3, s2, n2 = 1) {
    return s2.roughness * n2 * (W2(s2) * (e3 - t4) + t4);
  }
  function G2(t4, e3, s2 = 1) {
    return E2(-t4, t4, e3, s2);
  }
  function $2(t4, e3, s2, n2, o2, a2 = false) {
    const h3 = a2 ? o2.disableMultiStrokeFill : o2.disableMultiStroke, r2 = R2(t4, e3, s2, n2, o2, true, false);
    if (h3) return r2;
    const i2 = R2(t4, e3, s2, n2, o2, true, true);
    return r2.concat(i2);
  }
  function R2(t4, e3, s2, n2, o2, a2, h3) {
    const r2 = Math.pow(t4 - s2, 2) + Math.pow(e3 - n2, 2), i2 = Math.sqrt(r2);
    let c3 = 1;
    c3 = i2 < 200 ? 1 : i2 > 500 ? 0.4 : -16668e-7 * i2 + 1.233334;
    let l4 = o2.maxRandomnessOffset || 0;
    l4 * l4 * 100 > r2 && (l4 = i2 / 10);
    const u2 = l4 / 2, p3 = 0.2 + 0.2 * W2(o2);
    let f2 = o2.bowing * o2.maxRandomnessOffset * (n2 - e3) / 200, d3 = o2.bowing * o2.maxRandomnessOffset * (t4 - s2) / 200;
    f2 = G2(f2, o2, c3), d3 = G2(d3, o2, c3);
    const g2 = [], M3 = /* @__PURE__ */ __name(() => G2(u2, o2, c3), "M"), k2 = /* @__PURE__ */ __name(() => G2(l4, o2, c3), "k"), b3 = o2.preserveVertices;
    return a2 && (h3 ? g2.push({ op: "move", data: [t4 + (b3 ? 0 : M3()), e3 + (b3 ? 0 : M3())] }) : g2.push({ op: "move", data: [t4 + (b3 ? 0 : G2(l4, o2, c3)), e3 + (b3 ? 0 : G2(l4, o2, c3))] })), h3 ? g2.push({ op: "bcurveTo", data: [f2 + t4 + (s2 - t4) * p3 + M3(), d3 + e3 + (n2 - e3) * p3 + M3(), f2 + t4 + 2 * (s2 - t4) * p3 + M3(), d3 + e3 + 2 * (n2 - e3) * p3 + M3(), s2 + (b3 ? 0 : M3()), n2 + (b3 ? 0 : M3())] }) : g2.push({ op: "bcurveTo", data: [f2 + t4 + (s2 - t4) * p3 + k2(), d3 + e3 + (n2 - e3) * p3 + k2(), f2 + t4 + 2 * (s2 - t4) * p3 + k2(), d3 + e3 + 2 * (n2 - e3) * p3 + k2(), s2 + (b3 ? 0 : k2()), n2 + (b3 ? 0 : k2())] }), g2;
  }
  function j2(t4, e3, s2) {
    if (!t4.length) return [];
    const n2 = [];
    n2.push([t4[0][0] + G2(e3, s2), t4[0][1] + G2(e3, s2)]), n2.push([t4[0][0] + G2(e3, s2), t4[0][1] + G2(e3, s2)]);
    for (let o2 = 1; o2 < t4.length; o2++) n2.push([t4[o2][0] + G2(e3, s2), t4[o2][1] + G2(e3, s2)]), o2 === t4.length - 1 && n2.push([t4[o2][0] + G2(e3, s2), t4[o2][1] + G2(e3, s2)]);
    return q2(n2, null, s2);
  }
  function q2(t4, e3, s2) {
    const n2 = t4.length, o2 = [];
    if (n2 > 3) {
      const a2 = [], h3 = 1 - s2.curveTightness;
      o2.push({ op: "move", data: [t4[1][0], t4[1][1]] });
      for (let e4 = 1; e4 + 2 < n2; e4++) {
        const s3 = t4[e4];
        a2[0] = [s3[0], s3[1]], a2[1] = [s3[0] + (h3 * t4[e4 + 1][0] - h3 * t4[e4 - 1][0]) / 6, s3[1] + (h3 * t4[e4 + 1][1] - h3 * t4[e4 - 1][1]) / 6], a2[2] = [t4[e4 + 1][0] + (h3 * t4[e4][0] - h3 * t4[e4 + 2][0]) / 6, t4[e4 + 1][1] + (h3 * t4[e4][1] - h3 * t4[e4 + 2][1]) / 6], a2[3] = [t4[e4 + 1][0], t4[e4 + 1][1]], o2.push({ op: "bcurveTo", data: [a2[1][0], a2[1][1], a2[2][0], a2[2][1], a2[3][0], a2[3][1]] });
      }
      if (e3 && 2 === e3.length) {
        const t5 = s2.maxRandomnessOffset;
        o2.push({ op: "lineTo", data: [e3[0] + G2(t5, s2), e3[1] + G2(t5, s2)] });
      }
    } else 3 === n2 ? (o2.push({ op: "move", data: [t4[1][0], t4[1][1]] }), o2.push({ op: "bcurveTo", data: [t4[1][0], t4[1][1], t4[2][0], t4[2][1], t4[2][0], t4[2][1]] })) : 2 === n2 && o2.push(...R2(t4[0][0], t4[0][1], t4[1][0], t4[1][1], s2, true, true));
    return o2;
  }
  function F2(t4, e3, s2, n2, o2, a2, h3, r2) {
    const i2 = [], c3 = [];
    if (0 === r2.roughness) {
      t4 /= 4, c3.push([e3 + n2 * Math.cos(-t4), s2 + o2 * Math.sin(-t4)]);
      for (let a3 = 0; a3 <= 2 * Math.PI; a3 += t4) {
        const t5 = [e3 + n2 * Math.cos(a3), s2 + o2 * Math.sin(a3)];
        i2.push(t5), c3.push(t5);
      }
      c3.push([e3 + n2 * Math.cos(0), s2 + o2 * Math.sin(0)]), c3.push([e3 + n2 * Math.cos(t4), s2 + o2 * Math.sin(t4)]);
    } else {
      const l4 = G2(0.5, r2) - Math.PI / 2;
      c3.push([G2(a2, r2) + e3 + 0.9 * n2 * Math.cos(l4 - t4), G2(a2, r2) + s2 + 0.9 * o2 * Math.sin(l4 - t4)]);
      const u2 = 2 * Math.PI + l4 - 0.01;
      for (let h4 = l4; h4 < u2; h4 += t4) {
        const t5 = [G2(a2, r2) + e3 + n2 * Math.cos(h4), G2(a2, r2) + s2 + o2 * Math.sin(h4)];
        i2.push(t5), c3.push(t5);
      }
      c3.push([G2(a2, r2) + e3 + n2 * Math.cos(l4 + 2 * Math.PI + 0.5 * h3), G2(a2, r2) + s2 + o2 * Math.sin(l4 + 2 * Math.PI + 0.5 * h3)]), c3.push([G2(a2, r2) + e3 + 0.98 * n2 * Math.cos(l4 + h3), G2(a2, r2) + s2 + 0.98 * o2 * Math.sin(l4 + h3)]), c3.push([G2(a2, r2) + e3 + 0.9 * n2 * Math.cos(l4 + 0.5 * h3), G2(a2, r2) + s2 + 0.9 * o2 * Math.sin(l4 + 0.5 * h3)]);
    }
    return [c3, i2];
  }
  function V2(t4, e3, s2, n2, o2, a2, h3, r2, i2) {
    const c3 = a2 + G2(0.1, i2), l4 = [];
    l4.push([G2(r2, i2) + e3 + 0.9 * n2 * Math.cos(c3 - t4), G2(r2, i2) + s2 + 0.9 * o2 * Math.sin(c3 - t4)]);
    for (let a3 = c3; a3 <= h3; a3 += t4) l4.push([G2(r2, i2) + e3 + n2 * Math.cos(a3), G2(r2, i2) + s2 + o2 * Math.sin(a3)]);
    return l4.push([e3 + n2 * Math.cos(h3), s2 + o2 * Math.sin(h3)]), l4.push([e3 + n2 * Math.cos(h3), s2 + o2 * Math.sin(h3)]), q2(l4, null, i2);
  }
  function Z(t4, e3, s2, n2, o2, a2, h3, r2) {
    const i2 = [], c3 = [r2.maxRandomnessOffset || 1, (r2.maxRandomnessOffset || 1) + 0.3];
    let l4 = [0, 0];
    const u2 = r2.disableMultiStroke ? 1 : 2, p3 = r2.preserveVertices;
    for (let f2 = 0; f2 < u2; f2++) 0 === f2 ? i2.push({ op: "move", data: [h3[0], h3[1]] }) : i2.push({ op: "move", data: [h3[0] + (p3 ? 0 : G2(c3[0], r2)), h3[1] + (p3 ? 0 : G2(c3[0], r2))] }), l4 = p3 ? [o2, a2] : [o2 + G2(c3[f2], r2), a2 + G2(c3[f2], r2)], i2.push({ op: "bcurveTo", data: [t4 + G2(c3[f2], r2), e3 + G2(c3[f2], r2), s2 + G2(c3[f2], r2), n2 + G2(c3[f2], r2), l4[0], l4[1]] });
    return i2;
  }
  function Q2(t4) {
    return [...t4];
  }
  function H(t4, e3 = 0) {
    const s2 = t4.length;
    if (s2 < 3) throw new Error("A curve must have at least three points.");
    const n2 = [];
    if (3 === s2) n2.push(Q2(t4[0]), Q2(t4[1]), Q2(t4[2]), Q2(t4[2]));
    else {
      const s3 = [];
      s3.push(t4[0], t4[0]);
      for (let e4 = 1; e4 < t4.length; e4++) s3.push(t4[e4]), e4 === t4.length - 1 && s3.push(t4[e4]);
      const o2 = [], a2 = 1 - e3;
      n2.push(Q2(s3[0]));
      for (let t5 = 1; t5 + 2 < s3.length; t5++) {
        const e4 = s3[t5];
        o2[0] = [e4[0], e4[1]], o2[1] = [e4[0] + (a2 * s3[t5 + 1][0] - a2 * s3[t5 - 1][0]) / 6, e4[1] + (a2 * s3[t5 + 1][1] - a2 * s3[t5 - 1][1]) / 6], o2[2] = [s3[t5 + 1][0] + (a2 * s3[t5][0] - a2 * s3[t5 + 2][0]) / 6, s3[t5 + 1][1] + (a2 * s3[t5][1] - a2 * s3[t5 + 2][1]) / 6], o2[3] = [s3[t5 + 1][0], s3[t5 + 1][1]], n2.push(o2[1], o2[2], o2[3]);
      }
    }
    return n2;
  }
  function N2(t4, e3) {
    return Math.pow(t4[0] - e3[0], 2) + Math.pow(t4[1] - e3[1], 2);
  }
  function B2(t4, e3, s2) {
    const n2 = N2(e3, s2);
    if (0 === n2) return N2(t4, e3);
    let o2 = ((t4[0] - e3[0]) * (s2[0] - e3[0]) + (t4[1] - e3[1]) * (s2[1] - e3[1])) / n2;
    return o2 = Math.max(0, Math.min(1, o2)), N2(t4, J2(e3, s2, o2));
  }
  function J2(t4, e3, s2) {
    return [t4[0] + (e3[0] - t4[0]) * s2, t4[1] + (e3[1] - t4[1]) * s2];
  }
  function K3(t4, e3, s2, n2) {
    const o2 = n2 || [];
    if ((function(t5, e4) {
      const s3 = t5[e4 + 0], n3 = t5[e4 + 1], o3 = t5[e4 + 2], a3 = t5[e4 + 3];
      let h4 = 3 * n3[0] - 2 * s3[0] - a3[0];
      h4 *= h4;
      let r2 = 3 * n3[1] - 2 * s3[1] - a3[1];
      r2 *= r2;
      let i2 = 3 * o3[0] - 2 * a3[0] - s3[0];
      i2 *= i2;
      let c3 = 3 * o3[1] - 2 * a3[1] - s3[1];
      return c3 *= c3, h4 < i2 && (h4 = i2), r2 < c3 && (r2 = c3), h4 + r2;
    })(t4, e3) < s2) {
      const s3 = t4[e3 + 0];
      if (o2.length) {
        (a2 = o2[o2.length - 1], h3 = s3, Math.sqrt(N2(a2, h3))) > 1 && o2.push(s3);
      } else o2.push(s3);
      o2.push(t4[e3 + 3]);
    } else {
      const n3 = 0.5, a3 = t4[e3 + 0], h4 = t4[e3 + 1], r2 = t4[e3 + 2], i2 = t4[e3 + 3], c3 = J2(a3, h4, n3), l4 = J2(h4, r2, n3), u2 = J2(r2, i2, n3), p3 = J2(c3, l4, n3), f2 = J2(l4, u2, n3), d3 = J2(p3, f2, n3);
      K3([a3, c3, p3, d3], 0, s2, o2), K3([d3, f2, u2, i2], 0, s2, o2);
    }
    var a2, h3;
    return o2;
  }
  function U2(t4, e3) {
    return X3(t4, 0, t4.length, e3);
  }
  function X3(t4, e3, s2, n2, o2) {
    const a2 = o2 || [], h3 = t4[e3], r2 = t4[s2 - 1];
    let i2 = 0, c3 = 1;
    for (let n3 = e3 + 1; n3 < s2 - 1; ++n3) {
      const e4 = B2(t4[n3], h3, r2);
      e4 > i2 && (i2 = e4, c3 = n3);
    }
    return Math.sqrt(i2) > n2 ? (X3(t4, e3, c3 + 1, n2, a2), X3(t4, c3, s2, n2, a2)) : (a2.length || a2.push(h3), a2.push(r2)), a2;
  }
  function Y2(t4, e3 = 0.15, s2) {
    const n2 = [], o2 = (t4.length - 1) / 3;
    for (let s3 = 0; s3 < o2; s3++) {
      K3(t4, 3 * s3, e3, n2);
    }
    return s2 && s2 > 0 ? X3(n2, 0, n2.length, s2) : n2;
  }
  var o, h2, r, i, c2, l3, u, p, f, d2, g, M2, P2, tt, et, st, nt, ot, at;
  var init_rough_esm = __esm({
    "../../node_modules/.pnpm/roughjs@4.6.6_patch_hash=3543d47108cb41b68ec6a671c0e1f9d0cfe2ce524fea5b0992511ae84c3c6b64/node_modules/roughjs/bundled/rough.esm.js"() {
      "use strict";
      __name(t, "t");
      __name(e, "e");
      __name(s, "s");
      __name(n, "n");
      o = class {
        static {
          __name(this, "o");
        }
        constructor(t4) {
          this.helper = t4;
        }
        fillPolygons(t4, e3) {
          return this._fillPolygons(t4, e3);
        }
        _fillPolygons(t4, e3) {
          const s2 = n(t4, e3);
          return { type: "fillSketch", ops: this.renderLines(s2, e3) };
        }
        renderLines(t4, e3) {
          const s2 = [];
          for (const n2 of t4) s2.push(...this.helper.doubleLineOps(n2[0][0], n2[0][1], n2[1][0], n2[1][1], e3));
          return s2;
        }
      };
      __name(a, "a");
      h2 = class extends o {
        static {
          __name(this, "h");
        }
        fillPolygons(t4, e3) {
          let s2 = e3.hachureGap;
          s2 < 0 && (s2 = 4 * e3.strokeWidth), s2 = Math.max(s2, 0.1);
          const o2 = n(t4, Object.assign({}, e3, { hachureGap: s2 })), h3 = Math.PI / 180 * e3.hachureAngle, r2 = [], i2 = 0.5 * s2 * Math.cos(h3), c3 = 0.5 * s2 * Math.sin(h3);
          for (const [t5, e4] of o2) a([t5, e4]) && r2.push([[t5[0] - i2, t5[1] + c3], [...e4]], [[t5[0] + i2, t5[1] - c3], [...e4]]);
          return { type: "fillSketch", ops: this.renderLines(r2, e3) };
        }
      };
      r = class extends o {
        static {
          __name(this, "r");
        }
        fillPolygons(t4, e3) {
          const s2 = this._fillPolygons(t4, e3), n2 = Object.assign({}, e3, { hachureAngle: e3.hachureAngle + 90 }), o2 = this._fillPolygons(t4, n2);
          return s2.ops = s2.ops.concat(o2.ops), s2;
        }
      };
      i = class {
        static {
          __name(this, "i");
        }
        constructor(t4) {
          this.helper = t4;
        }
        fillPolygons(t4, e3) {
          const s2 = n(t4, e3 = Object.assign({}, e3, { hachureAngle: 0 }));
          return this.dotsOnLines(s2, e3);
        }
        dotsOnLines(t4, e3) {
          const s2 = [];
          let n2 = e3.hachureGap;
          n2 < 0 && (n2 = 4 * e3.strokeWidth), n2 = Math.max(n2, 0.1);
          let o2 = e3.fillWeight;
          o2 < 0 && (o2 = e3.strokeWidth / 2);
          const h3 = n2 / 4;
          for (const r2 of t4) {
            const t5 = a(r2), i2 = t5 / n2, c3 = Math.ceil(i2) - 1, l4 = t5 - c3 * n2, u2 = (r2[0][0] + r2[1][0]) / 2 - n2 / 4, p3 = Math.min(r2[0][1], r2[1][1]);
            for (let t6 = 0; t6 < c3; t6++) {
              const a2 = p3 + l4 + t6 * n2, r3 = u2 - h3 + 2 * Math.random() * h3, i3 = a2 - h3 + 2 * Math.random() * h3, c4 = this.helper.ellipse(r3, i3, o2, o2, e3);
              s2.push(...c4.ops);
            }
          }
          return { type: "fillSketch", ops: s2 };
        }
      };
      c2 = class {
        static {
          __name(this, "c");
        }
        constructor(t4) {
          this.helper = t4;
        }
        fillPolygons(t4, e3) {
          const s2 = n(t4, e3);
          return { type: "fillSketch", ops: this.dashedLine(s2, e3) };
        }
        dashedLine(t4, e3) {
          const s2 = e3.dashOffset < 0 ? e3.hachureGap < 0 ? 4 * e3.strokeWidth : e3.hachureGap : e3.dashOffset, n2 = e3.dashGap < 0 ? e3.hachureGap < 0 ? 4 * e3.strokeWidth : e3.hachureGap : e3.dashGap, o2 = [];
          return t4.forEach(((t5) => {
            const h3 = a(t5), r2 = Math.floor(h3 / (s2 + n2)), i2 = (h3 + n2 - r2 * (s2 + n2)) / 2;
            let c3 = t5[0], l4 = t5[1];
            c3[0] > l4[0] && (c3 = t5[1], l4 = t5[0]);
            const u2 = Math.atan((l4[1] - c3[1]) / (l4[0] - c3[0]));
            for (let t6 = 0; t6 < r2; t6++) {
              const a2 = t6 * (s2 + n2), h4 = a2 + s2, r3 = [c3[0] + a2 * Math.cos(u2) + i2 * Math.cos(u2), c3[1] + a2 * Math.sin(u2) + i2 * Math.sin(u2)], l5 = [c3[0] + h4 * Math.cos(u2) + i2 * Math.cos(u2), c3[1] + h4 * Math.sin(u2) + i2 * Math.sin(u2)];
              o2.push(...this.helper.doubleLineOps(r3[0], r3[1], l5[0], l5[1], e3));
            }
          })), o2;
        }
      };
      l3 = class {
        static {
          __name(this, "l");
        }
        constructor(t4) {
          this.helper = t4;
        }
        fillPolygons(t4, e3) {
          const s2 = e3.hachureGap < 0 ? 4 * e3.strokeWidth : e3.hachureGap, o2 = e3.zigzagOffset < 0 ? s2 : e3.zigzagOffset, a2 = n(t4, e3 = Object.assign({}, e3, { hachureGap: s2 + o2 }));
          return { type: "fillSketch", ops: this.zigzagLines(a2, o2, e3) };
        }
        zigzagLines(t4, e3, s2) {
          const n2 = [];
          return t4.forEach(((t5) => {
            const o2 = a(t5), h3 = Math.round(o2 / (2 * e3));
            let r2 = t5[0], i2 = t5[1];
            r2[0] > i2[0] && (r2 = t5[1], i2 = t5[0]);
            const c3 = Math.atan((i2[1] - r2[1]) / (i2[0] - r2[0]));
            for (let t6 = 0; t6 < h3; t6++) {
              const o3 = 2 * t6 * e3, a2 = 2 * (t6 + 1) * e3, h4 = Math.sqrt(2 * Math.pow(e3, 2)), i3 = [r2[0] + o3 * Math.cos(c3), r2[1] + o3 * Math.sin(c3)], l4 = [r2[0] + a2 * Math.cos(c3), r2[1] + a2 * Math.sin(c3)], u2 = [i3[0] + h4 * Math.cos(c3 + Math.PI / 4), i3[1] + h4 * Math.sin(c3 + Math.PI / 4)];
              n2.push(...this.helper.doubleLineOps(i3[0], i3[1], u2[0], u2[1], s2), ...this.helper.doubleLineOps(u2[0], u2[1], l4[0], l4[1], s2));
            }
          })), n2;
        }
      };
      u = {};
      p = class {
        static {
          __name(this, "p");
        }
        constructor(t4) {
          this.seed = t4;
        }
        next() {
          return this.seed ? (2 ** 31 - 1 & (this.seed = Math.imul(48271, this.seed))) / 2 ** 31 : Math.random();
        }
      };
      f = 0;
      d2 = 1;
      g = 2;
      M2 = { A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0 };
      __name(k, "k");
      __name(b2, "b");
      __name(y3, "y");
      __name(m2, "m");
      __name(w2, "w");
      __name(x2, "x");
      P2 = { randOffset: /* @__PURE__ */ __name(function(t4, e3) {
        return G2(t4, e3);
      }, "randOffset"), randOffsetWithRange: /* @__PURE__ */ __name(function(t4, e3, s2) {
        return E2(t4, e3, s2);
      }, "randOffsetWithRange"), ellipse: /* @__PURE__ */ __name(function(t4, e3, s2, n2, o2) {
        const a2 = T2(s2, n2, o2);
        return D3(t4, e3, o2, a2).opset;
      }, "ellipse"), doubleLineOps: /* @__PURE__ */ __name(function(t4, e3, s2, n2, o2) {
        return $2(t4, e3, s2, n2, o2, true);
      }, "doubleLineOps") };
      __name(v2, "v");
      __name(S3, "S");
      __name(O2, "O");
      __name(L2, "L");
      __name(T2, "T");
      __name(D3, "D");
      __name(A, "A");
      __name(_2, "_");
      __name(I2, "I");
      __name(C2, "C");
      __name(z2, "z");
      __name(W2, "W");
      __name(E2, "E");
      __name(G2, "G");
      __name($2, "$");
      __name(R2, "R");
      __name(j2, "j");
      __name(q2, "q");
      __name(F2, "F");
      __name(V2, "V");
      __name(Z, "Z");
      __name(Q2, "Q");
      __name(H, "H");
      __name(N2, "N");
      __name(B2, "B");
      __name(J2, "J");
      __name(K3, "K");
      __name(U2, "U");
      __name(X3, "X");
      __name(Y2, "Y");
      tt = "none";
      et = class {
        static {
          __name(this, "et");
        }
        constructor(t4) {
          this.defaultOptions = { maxRandomnessOffset: 2, roughness: 1, bowing: 1, stroke: "#000", strokeWidth: 1, curveTightness: 0, curveFitting: 0.95, curveStepCount: 9, fillStyle: "hachure", fillWeight: -1, hachureAngle: -41, hachureGap: -1, dashOffset: -1, dashGap: -1, zigzagOffset: -1, seed: 0, disableMultiStroke: false, disableMultiStrokeFill: false, preserveVertices: false, fillShapeRoughnessGain: 0.8 }, this.config = t4 || {}, this.config.options && (this.defaultOptions = this._o(this.config.options));
        }
        static newSeed() {
          return Math.floor(Math.random() * 2 ** 31);
        }
        _o(t4) {
          return t4 ? Object.assign({}, this.defaultOptions, t4) : this.defaultOptions;
        }
        _d(t4, e3, s2) {
          return { shape: t4, sets: e3 || [], options: s2 || this.defaultOptions };
        }
        line(t4, e3, s2, n2, o2) {
          const a2 = this._o(o2);
          return this._d("line", [v2(t4, e3, s2, n2, a2)], a2);
        }
        rectangle(t4, e3, s2, n2, o2) {
          const a2 = this._o(o2), h3 = [], r2 = O2(t4, e3, s2, n2, a2);
          if (a2.fill) {
            const o3 = [[t4, e3], [t4 + s2, e3], [t4 + s2, e3 + n2], [t4, e3 + n2]];
            "solid" === a2.fillStyle ? h3.push(I2([o3], a2)) : h3.push(C2([o3], a2));
          }
          return a2.stroke !== tt && h3.push(r2), this._d("rectangle", h3, a2);
        }
        ellipse(t4, e3, s2, n2, o2) {
          const a2 = this._o(o2), h3 = [], r2 = T2(s2, n2, a2), i2 = D3(t4, e3, a2, r2);
          if (a2.fill) if ("solid" === a2.fillStyle) {
            const s3 = D3(t4, e3, a2, r2).opset;
            s3.type = "fillPath", h3.push(s3);
          } else h3.push(C2([i2.estimatedPoints], a2));
          return a2.stroke !== tt && h3.push(i2.opset), this._d("ellipse", h3, a2);
        }
        circle(t4, e3, s2, n2) {
          const o2 = this.ellipse(t4, e3, s2, s2, n2);
          return o2.shape = "circle", o2;
        }
        linearPath(t4, e3) {
          const s2 = this._o(e3);
          return this._d("linearPath", [S3(t4, false, s2)], s2);
        }
        arc(t4, e3, s2, n2, o2, a2, h3 = false, r2) {
          const i2 = this._o(r2), c3 = [], l4 = A(t4, e3, s2, n2, o2, a2, h3, true, i2);
          if (h3 && i2.fill) if ("solid" === i2.fillStyle) {
            const h4 = Object.assign({}, i2);
            h4.disableMultiStroke = true;
            const r3 = A(t4, e3, s2, n2, o2, a2, true, false, h4);
            r3.type = "fillPath", c3.push(r3);
          } else c3.push((function(t5, e4, s3, n3, o3, a3, h4) {
            const r3 = t5, i3 = e4;
            let c4 = Math.abs(s3 / 2), l5 = Math.abs(n3 / 2);
            c4 += G2(0.01 * c4, h4), l5 += G2(0.01 * l5, h4);
            let u2 = o3, p3 = a3;
            for (; u2 < 0; ) u2 += 2 * Math.PI, p3 += 2 * Math.PI;
            p3 - u2 > 2 * Math.PI && (u2 = 0, p3 = 2 * Math.PI);
            const f2 = (p3 - u2) / h4.curveStepCount, d3 = [];
            for (let t6 = u2; t6 <= p3; t6 += f2) d3.push([r3 + c4 * Math.cos(t6), i3 + l5 * Math.sin(t6)]);
            return d3.push([r3 + c4 * Math.cos(p3), i3 + l5 * Math.sin(p3)]), d3.push([r3, i3]), C2([d3], h4);
          })(t4, e3, s2, n2, o2, a2, i2));
          return i2.stroke !== tt && c3.push(l4), this._d("arc", c3, i2);
        }
        curve(t4, e3) {
          const s2 = this._o(e3), n2 = [], o2 = L2(t4, s2);
          if (s2.fill && s2.fill !== tt) if ("solid" === s2.fillStyle) {
            const e4 = L2(t4, Object.assign(Object.assign({}, s2), { disableMultiStroke: true, roughness: s2.roughness ? s2.roughness + s2.fillShapeRoughnessGain : 0 }));
            n2.push({ type: "fillPath", ops: this._mergedShape(e4.ops) });
          } else {
            const e4 = [], o3 = t4;
            if (o3.length) {
              const t5 = "number" == typeof o3[0][0] ? [o3] : o3;
              for (const n3 of t5) n3.length < 3 ? e4.push(...n3) : 3 === n3.length ? e4.push(...Y2(H([n3[0], n3[0], n3[1], n3[2]]), 10, (1 + s2.roughness) / 2)) : e4.push(...Y2(H(n3), 10, (1 + s2.roughness) / 2));
            }
            e4.length && n2.push(C2([e4], s2));
          }
          return s2.stroke !== tt && n2.push(o2), this._d("curve", n2, s2);
        }
        polygon(t4, e3) {
          const s2 = this._o(e3), n2 = [], o2 = S3(t4, true, s2);
          return s2.fill && ("solid" === s2.fillStyle ? n2.push(I2([t4], s2)) : n2.push(C2([t4], s2))), s2.stroke !== tt && n2.push(o2), this._d("polygon", n2, s2);
        }
        path(t4, e3) {
          const s2 = this._o(e3), n2 = [];
          if (!t4) return this._d("path", n2, s2);
          t4 = (t4 || "").replace(/\n/g, " ").replace(/(-\s)/g, "-").replace("/(ss)/g", " ");
          const o2 = s2.fill && "transparent" !== s2.fill && s2.fill !== tt, a2 = s2.stroke !== tt, h3 = !!(s2.simplification && s2.simplification < 1), r2 = (function(t5, e4, s3) {
            const n3 = m2(y3(b2(t5))), o3 = [];
            let a3 = [], h4 = [0, 0], r3 = [];
            const i3 = /* @__PURE__ */ __name(() => {
              r3.length >= 4 && a3.push(...Y2(r3, e4)), r3 = [];
            }, "i"), c3 = /* @__PURE__ */ __name(() => {
              i3(), a3.length && (o3.push(a3), a3 = []);
            }, "c");
            for (const { key: t6, data: e6 } of n3) switch (t6) {
              case "M":
                c3(), h4 = [e6[0], e6[1]], a3.push(h4);
                break;
              case "L":
                i3(), a3.push([e6[0], e6[1]]);
                break;
              case "C":
                if (!r3.length) {
                  const t7 = a3.length ? a3[a3.length - 1] : h4;
                  r3.push([t7[0], t7[1]]);
                }
                r3.push([e6[0], e6[1]]), r3.push([e6[2], e6[3]]), r3.push([e6[4], e6[5]]);
                break;
              case "Z":
                i3(), a3.push([h4[0], h4[1]]);
            }
            if (c3(), !s3) return o3;
            const l4 = [];
            for (const t6 of o3) {
              const e6 = U2(t6, s3);
              e6.length && l4.push(e6);
            }
            return l4;
          })(t4, 1, h3 ? 4 - 4 * (s2.simplification || 1) : (1 + s2.roughness) / 2), i2 = _2(t4, s2);
          if (o2) if ("solid" === s2.fillStyle) if (1 === r2.length) {
            const e4 = _2(t4, Object.assign(Object.assign({}, s2), { disableMultiStroke: true, roughness: s2.roughness ? s2.roughness + s2.fillShapeRoughnessGain : 0 }));
            n2.push({ type: "fillPath", ops: this._mergedShape(e4.ops) });
          } else n2.push(I2(r2, s2));
          else n2.push(C2(r2, s2));
          return a2 && (h3 ? r2.forEach(((t5) => {
            n2.push(S3(t5, false, s2));
          })) : n2.push(i2)), this._d("path", n2, s2);
        }
        opsToPath(t4, e3) {
          let s2 = "";
          for (const n2 of t4.ops) {
            const t5 = "number" == typeof e3 && e3 >= 0 ? n2.data.map(((t6) => +t6.toFixed(e3))) : n2.data;
            switch (n2.op) {
              case "move":
                s2 += `M${t5[0]} ${t5[1]} `;
                break;
              case "bcurveTo":
                s2 += `C${t5[0]} ${t5[1]}, ${t5[2]} ${t5[3]}, ${t5[4]} ${t5[5]} `;
                break;
              case "lineTo":
                s2 += `L${t5[0]} ${t5[1]} `;
            }
          }
          return s2.trim();
        }
        toPaths(t4) {
          const e3 = t4.sets || [], s2 = t4.options || this.defaultOptions, n2 = [];
          for (const t5 of e3) {
            let e4 = null;
            switch (t5.type) {
              case "path":
                e4 = { d: this.opsToPath(t5), stroke: s2.stroke, strokeWidth: s2.strokeWidth, fill: tt };
                break;
              case "fillPath":
                e4 = { d: this.opsToPath(t5), stroke: tt, strokeWidth: 0, fill: s2.fill || tt };
                break;
              case "fillSketch":
                e4 = this.fillSketch(t5, s2);
            }
            e4 && n2.push(e4);
          }
          return n2;
        }
        fillSketch(t4, e3) {
          let s2 = e3.fillWeight;
          return s2 < 0 && (s2 = e3.strokeWidth / 2), { d: this.opsToPath(t4), stroke: e3.fill || tt, strokeWidth: s2, fill: tt };
        }
        _mergedShape(t4) {
          return t4.filter(((t5, e3) => 0 === e3 || "move" !== t5.op));
        }
      };
      st = class {
        static {
          __name(this, "st");
        }
        constructor(t4, e3) {
          this.canvas = t4, this.ctx = this.canvas.getContext("2d"), this.gen = new et(e3);
        }
        draw(t4) {
          const e3 = t4.sets || [], s2 = t4.options || this.getDefaultOptions(), n2 = this.ctx, o2 = t4.options.fixedDecimalPlaceDigits;
          for (const a2 of e3) switch (a2.type) {
            case "path":
              n2.save(), n2.strokeStyle = "none" === s2.stroke ? "transparent" : s2.stroke, n2.lineWidth = s2.strokeWidth, s2.strokeLineDash && n2.setLineDash(s2.strokeLineDash), s2.strokeLineDashOffset && (n2.lineDashOffset = s2.strokeLineDashOffset), this._drawToContext(n2, a2, o2), n2.restore();
              break;
            case "fillPath": {
              n2.save(), n2.fillStyle = s2.fill || "";
              const e4 = "curve" === t4.shape || "polygon" === t4.shape || "path" === t4.shape ? "evenodd" : "nonzero";
              this._drawToContext(n2, a2, o2, e4), n2.restore();
              break;
            }
            case "fillSketch":
              this.fillSketch(n2, a2, s2);
          }
        }
        fillSketch(t4, e3, s2) {
          let n2 = s2.fillWeight;
          n2 < 0 && (n2 = s2.strokeWidth / 2), t4.save(), s2.fillLineDash && t4.setLineDash(s2.fillLineDash), s2.fillLineDashOffset && (t4.lineDashOffset = s2.fillLineDashOffset), t4.strokeStyle = s2.fill || "", t4.lineWidth = n2, this._drawToContext(t4, e3, s2.fixedDecimalPlaceDigits), t4.restore();
        }
        _drawToContext(t4, e3, s2, n2 = "nonzero") {
          t4.beginPath();
          for (const n3 of e3.ops) {
            const e4 = "number" == typeof s2 && s2 >= 0 ? n3.data.map(((t5) => +t5.toFixed(s2))) : n3.data;
            switch (n3.op) {
              case "move":
                t4.moveTo(e4[0], e4[1]);
                break;
              case "bcurveTo":
                t4.bezierCurveTo(e4[0], e4[1], e4[2], e4[3], e4[4], e4[5]);
                break;
              case "lineTo":
                t4.lineTo(e4[0], e4[1]);
            }
          }
          "fillPath" === e3.type ? t4.fill(n2) : t4.stroke();
        }
        get generator() {
          return this.gen;
        }
        getDefaultOptions() {
          return this.gen.defaultOptions;
        }
        line(t4, e3, s2, n2, o2) {
          const a2 = this.gen.line(t4, e3, s2, n2, o2);
          return this.draw(a2), a2;
        }
        rectangle(t4, e3, s2, n2, o2) {
          const a2 = this.gen.rectangle(t4, e3, s2, n2, o2);
          return this.draw(a2), a2;
        }
        ellipse(t4, e3, s2, n2, o2) {
          const a2 = this.gen.ellipse(t4, e3, s2, n2, o2);
          return this.draw(a2), a2;
        }
        circle(t4, e3, s2, n2) {
          const o2 = this.gen.circle(t4, e3, s2, n2);
          return this.draw(o2), o2;
        }
        linearPath(t4, e3) {
          const s2 = this.gen.linearPath(t4, e3);
          return this.draw(s2), s2;
        }
        polygon(t4, e3) {
          const s2 = this.gen.polygon(t4, e3);
          return this.draw(s2), s2;
        }
        arc(t4, e3, s2, n2, o2, a2, h3 = false, r2) {
          const i2 = this.gen.arc(t4, e3, s2, n2, o2, a2, h3, r2);
          return this.draw(i2), i2;
        }
        curve(t4, e3) {
          const s2 = this.gen.curve(t4, e3);
          return this.draw(s2), s2;
        }
        path(t4, e3) {
          const s2 = this.gen.path(t4, e3);
          return this.draw(s2), s2;
        }
      };
      nt = "http://www.w3.org/2000/svg";
      ot = class {
        static {
          __name(this, "ot");
        }
        constructor(t4, e3) {
          this.svg = t4, this.gen = new et(e3);
        }
        draw(t4) {
          const e3 = t4.sets || [], s2 = t4.options || this.getDefaultOptions(), n2 = this.svg.ownerDocument || window.document, o2 = n2.createElementNS(nt, "g"), a2 = t4.options.fixedDecimalPlaceDigits;
          for (const h3 of e3) {
            let e4 = null;
            switch (h3.type) {
              case "path":
                e4 = n2.createElementNS(nt, "path"), e4.setAttribute("d", this.opsToPath(h3, a2)), e4.setAttribute("stroke", s2.stroke), e4.setAttribute("stroke-width", s2.strokeWidth + ""), e4.setAttribute("fill", "none"), s2.strokeLineDash && e4.setAttribute("stroke-dasharray", s2.strokeLineDash.join(" ").trim()), s2.strokeLineDashOffset && e4.setAttribute("stroke-dashoffset", `${s2.strokeLineDashOffset}`);
                break;
              case "fillPath":
                e4 = n2.createElementNS(nt, "path"), e4.setAttribute("d", this.opsToPath(h3, a2)), e4.setAttribute("stroke", "none"), e4.setAttribute("stroke-width", "0"), e4.setAttribute("fill", s2.fill || ""), "curve" !== t4.shape && "polygon" !== t4.shape || e4.setAttribute("fill-rule", "evenodd");
                break;
              case "fillSketch":
                e4 = this.fillSketch(n2, h3, s2);
            }
            e4 && o2.appendChild(e4);
          }
          return o2;
        }
        fillSketch(t4, e3, s2) {
          let n2 = s2.fillWeight;
          n2 < 0 && (n2 = s2.strokeWidth / 2);
          const o2 = t4.createElementNS(nt, "path");
          return o2.setAttribute("d", this.opsToPath(e3, s2.fixedDecimalPlaceDigits)), o2.setAttribute("stroke", s2.fill || ""), o2.setAttribute("stroke-width", n2 + ""), o2.setAttribute("fill", "none"), s2.fillLineDash && o2.setAttribute("stroke-dasharray", s2.fillLineDash.join(" ").trim()), s2.fillLineDashOffset && o2.setAttribute("stroke-dashoffset", `${s2.fillLineDashOffset}`), o2;
        }
        get generator() {
          return this.gen;
        }
        getDefaultOptions() {
          return this.gen.defaultOptions;
        }
        opsToPath(t4, e3) {
          return this.gen.opsToPath(t4, e3);
        }
        line(t4, e3, s2, n2, o2) {
          const a2 = this.gen.line(t4, e3, s2, n2, o2);
          return this.draw(a2);
        }
        rectangle(t4, e3, s2, n2, o2) {
          const a2 = this.gen.rectangle(t4, e3, s2, n2, o2);
          return this.draw(a2);
        }
        ellipse(t4, e3, s2, n2, o2) {
          const a2 = this.gen.ellipse(t4, e3, s2, n2, o2);
          return this.draw(a2);
        }
        circle(t4, e3, s2, n2) {
          const o2 = this.gen.circle(t4, e3, s2, n2);
          return this.draw(o2);
        }
        linearPath(t4, e3) {
          const s2 = this.gen.linearPath(t4, e3);
          return this.draw(s2);
        }
        polygon(t4, e3) {
          const s2 = this.gen.polygon(t4, e3);
          return this.draw(s2);
        }
        arc(t4, e3, s2, n2, o2, a2, h3 = false, r2) {
          const i2 = this.gen.arc(t4, e3, s2, n2, o2, a2, h3, r2);
          return this.draw(i2);
        }
        curve(t4, e3) {
          const s2 = this.gen.curve(t4, e3);
          return this.draw(s2);
        }
        path(t4, e3) {
          const s2 = this.gen.path(t4, e3);
          return this.draw(s2);
        }
      };
      at = { canvas: /* @__PURE__ */ __name((t4, e3) => new st(t4, e3), "canvas"), svg: /* @__PURE__ */ __name((t4, e3) => new ot(t4, e3), "svg"), generator: /* @__PURE__ */ __name((t4) => new et(t4), "generator"), newSeed: /* @__PURE__ */ __name(() => et.newSeed(), "newSeed") };
    }
  });

  // src/rendering-util/rendering-elements/shapes/anchor.ts
  function anchor(parent4, node2) {
    const { labelStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const classes3 = getNodeClasses(node2);
    let cssClasses = classes3;
    if (!classes3) {
      cssClasses = "anchor";
    }
    const shapeSvg = parent4.insert("g").attr("class", cssClasses).attr("id", node2.domId || node2.id);
    const radius2 = 1;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, { fill: "black", stroke: "none", fillStyle: "solid" });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
    }
    const roughNode = rc.circle(0, 0, radius2 * 2, options2);
    const circleElem = shapeSvg.insert(() => roughNode, ":first-child");
    circleElem.attr("class", "anchor").attr("style", handleUndefinedAttr(cssStyles));
    updateNodeBounds(node2, circleElem);
    node2.intersect = function(point8) {
      log.info("Circle intersect", node2, radius2, point8);
      return intersect_default.circle(node2, radius2, point8);
    };
    return shapeSvg;
  }
  var init_anchor = __esm({
    "src/rendering-util/rendering-elements/shapes/anchor.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      __name(anchor, "anchor");
    }
  });

  // src/rendering-util/rendering-elements/shapes/bowTieRect.ts
  function generateArcPoints(x1, y1, x22, y22, rx, ry, clockwise) {
    const numPoints = 20;
    const midX = (x1 + x22) / 2;
    const midY = (y1 + y22) / 2;
    const angle2 = Math.atan2(y22 - y1, x22 - x1);
    const dx = (x22 - x1) / 2;
    const dy = (y22 - y1) / 2;
    const transformedX = dx / rx;
    const transformedY = dy / ry;
    const distance3 = Math.sqrt(transformedX ** 2 + transformedY ** 2);
    if (distance3 > 1) {
      throw new Error("The given radii are too small to create an arc between the points.");
    }
    const scaledCenterDistance = Math.sqrt(1 - distance3 ** 2);
    const centerX = midX + scaledCenterDistance * ry * Math.sin(angle2) * (clockwise ? -1 : 1);
    const centerY = midY - scaledCenterDistance * rx * Math.cos(angle2) * (clockwise ? -1 : 1);
    const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);
    const endAngle = Math.atan2((y22 - centerY) / ry, (x22 - centerX) / rx);
    let angleRange = endAngle - startAngle;
    if (clockwise && angleRange < 0) {
      angleRange += 2 * Math.PI;
    }
    if (!clockwise && angleRange > 0) {
      angleRange -= 2 * Math.PI;
    }
    const points = [];
    for (let i2 = 0; i2 < numPoints; i2++) {
      const t4 = i2 / (numPoints - 1);
      const angle3 = startAngle + t4 * angleRange;
      const x5 = centerX + rx * Math.cos(angle3);
      const y6 = centerY + ry * Math.sin(angle3);
      points.push({ x: x5, y: y6 });
    }
    return points;
  }
  function calculateArcSagitta(chord, radiusX, radiusY) {
    const [semiMajorAxis, semiMinorAxis] = [radiusX, radiusY].sort((a2, b3) => b3 - a2);
    return semiMinorAxis * (1 - Math.sqrt(1 - (chord / semiMajorAxis / 2) ** 2));
  }
  async function bowTieRect(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    const calcTotalHeight = /* @__PURE__ */ __name((labelHeight) => labelHeight + labelPaddingY, "calcTotalHeight");
    const calcEllipseRadius = /* @__PURE__ */ __name((totalHeight2) => {
      const ry2 = totalHeight2 / 2;
      const rx2 = ry2 / (2.5 + totalHeight2 / 50);
      return [rx2, ry2];
    }, "calcEllipseRadius");
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalHeight = calcTotalHeight(node2?.height ? node2?.height : bbox.height);
    const [rx, ry] = calcEllipseRadius(totalHeight);
    const sagitta = calculateArcSagitta(totalHeight, rx, ry);
    const totalWidth = (node2?.width ? node2?.width : bbox.width) + labelPaddingX * 2 + sagitta;
    const w4 = totalWidth - sagitta;
    const h3 = totalHeight;
    const { cssStyles } = node2;
    const points = [
      { x: w4 / 2, y: -h3 / 2 },
      { x: -w4 / 2, y: -h3 / 2 },
      ...generateArcPoints(-w4 / 2, -h3 / 2, -w4 / 2, h3 / 2, rx, ry, false),
      { x: w4 / 2, y: h3 / 2 },
      ...generateArcPoints(w4 / 2, h3 / 2, w4 / 2, -h3 / 2, rx, ry, true)
    ];
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const bowTieRectPath = createPathFromPoints(points);
    const bowTieRectShapePath = rc.path(bowTieRectPath, options2);
    const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, ":first-child");
    bowTieRectShape.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      bowTieRectShape.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      bowTieRectShape.selectAll("path").attr("style", nodeStyles);
    }
    bowTieRectShape.attr("transform", `translate(${rx / 2}, 0)`);
    updateNodeBounds(node2, bowTieRectShape);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_bowTieRect = __esm({
    "src/rendering-util/rendering-elements/shapes/bowTieRect.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(generateArcPoints, "generateArcPoints");
      __name(calculateArcSagitta, "calculateArcSagitta");
      __name(bowTieRect, "bowTieRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts
  function insertPolygonShape(parent4, w4, h3, points) {
    return parent4.insert("polygon", ":first-child").attr(
      "points",
      points.map(function(d3) {
        return d3.x + "," + d3.y;
      }).join(" ")
    ).attr("class", "label-container").attr("transform", "translate(" + -w4 / 2 + "," + h3 / 2 + ")");
  }
  var init_insertPolygonShape = __esm({
    "src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts"() {
      "use strict";
      __name(insertPolygonShape, "insertPolygonShape");
    }
  });

  // src/rendering-util/rendering-elements/shapes/card.ts
  async function card(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 28 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 24 : nodePadding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ?? bbox.width) + (node2.look === "neo" ? labelPaddingX * 2 : labelPaddingX + NOTCH_SIZE);
    const h3 = (node2?.height ?? bbox.height) + (node2.look === "neo" ? labelPaddingY * 2 : labelPaddingY);
    const left3 = 0;
    const right3 = w4;
    const top2 = -h3;
    const bottom2 = 0;
    const points = [
      { x: left3 + NOTCH_SIZE, y: top2 },
      { x: right3, y: top2 },
      { x: right3, y: bottom2 },
      { x: left3, y: bottom2 },
      { x: left3, y: top2 + NOTCH_SIZE },
      { x: left3 + NOTCH_SIZE, y: top2 }
    ];
    let polygon2;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const pathData = createPathFromPoints(points);
      const roughNode = rc.path(pathData, options2);
      polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w4 / 2}, ${h3 / 2})`);
      if (cssStyles) {
        polygon2.attr("style", cssStyles);
      }
    } else {
      polygon2 = insertPolygonShape(shapeSvg, w4, h3, points);
    }
    if (nodeStyles) {
      polygon2.attr("style", nodeStyles);
    }
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var NOTCH_SIZE;
  var init_card = __esm({
    "src/rendering-util/rendering-elements/shapes/card.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      init_util();
      NOTCH_SIZE = 12;
      __name(card, "card");
    }
  });

  // src/rendering-util/rendering-elements/shapes/choice.ts
  function choice(parent4, node2) {
    const { nodeStyles } = styles2String(node2);
    node2.label = "";
    const shapeSvg = parent4.insert("g").attr("class", getNodeClasses(node2)).attr("id", node2.domId ?? node2.id);
    const { cssStyles } = node2;
    const s2 = Math.max(28, node2.width ?? 0);
    const points = [
      { x: 0, y: s2 / 2 },
      { x: s2 / 2, y: 0 },
      { x: 0, y: -s2 / 2 },
      { x: -s2 / 2, y: 0 }
    ];
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const choicePath = createPathFromPoints(points);
    const roughNode = rc.path(choicePath, options2);
    const choiceShape = shapeSvg.insert(() => roughNode, ":first-child");
    if (cssStyles && node2.look !== "handDrawn") {
      choiceShape.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      choiceShape.selectAll("path").attr("style", nodeStyles);
    }
    node2.width = 28;
    node2.height = 28;
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var init_choice = __esm({
    "src/rendering-util/rendering-elements/shapes/choice.ts"() {
      "use strict";
      init_intersect();
      init_rough_esm();
      init_handDrawnShapeStyles();
      init_util();
      __name(choice, "choice");
    }
  });

  // src/rendering-util/rendering-elements/shapes/circle.ts
  async function circle(parent4, node2, options2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, halfPadding } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const labelPadding = 16;
    const padding = options2?.padding ?? halfPadding;
    const radius2 = node2.look === "neo" ? bbox.width / 2 + labelPadding * 2 : bbox.width / 2 + padding;
    let circleElem;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options3 = userNodeOverrides(node2, {});
      const roughNode = rc.circle(0, 0, radius2 * 2, options3);
      circleElem = shapeSvg.insert(() => roughNode, ":first-child");
      circleElem.attr("class", "basic label-container").attr("style", handleUndefinedAttr(cssStyles));
    } else {
      circleElem = shapeSvg.insert("circle", ":first-child").attr("class", "basic label-container").attr("style", nodeStyles).attr("r", radius2).attr("cx", 0).attr("cy", 0);
    }
    updateNodeBounds(node2, circleElem);
    node2.calcIntersect = function(bounds4, point8) {
      const radius3 = bounds4.width / 2;
      return intersect_default.circle(bounds4, radius3, point8);
    };
    node2.intersect = function(point8) {
      log.info("Circle intersect", node2, radius2, point8);
      return intersect_default.circle(node2, radius2, point8);
    };
    return shapeSvg;
  }
  var init_circle = __esm({
    "src/rendering-util/rendering-elements/shapes/circle.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_utils2();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(circle, "circle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/crossedCircle.ts
  function createLine(r2) {
    const xAxis45 = Math.cos(Math.PI / 4);
    const yAxis45 = Math.sin(Math.PI / 4);
    const lineLength = r2 * 2;
    const pointQ1 = { x: lineLength / 2 * xAxis45, y: lineLength / 2 * yAxis45 };
    const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: lineLength / 2 * yAxis45 };
    const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 };
    const pointQ4 = { x: lineLength / 2 * xAxis45, y: -(lineLength / 2) * yAxis45 };
    return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y}
                   M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`;
  }
  function crossedCircle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    node2.label = "";
    const shapeSvg = parent4.insert("g").attr("class", getNodeClasses(node2)).attr("id", node2.domId ?? node2.id);
    const radius2 = Math.max(30, node2?.width ?? 0);
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const circleNode = rc.circle(0, 0, radius2 * 2, options2);
    const linePath = createLine(radius2);
    const lineNode = rc.path(linePath, options2);
    const crossedCircle2 = shapeSvg.insert(() => circleNode, ":first-child");
    crossedCircle2.insert(() => lineNode);
    crossedCircle2.attr("class", "outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      crossedCircle2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      crossedCircle2.selectAll("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, crossedCircle2);
    node2.intersect = function(point8) {
      log.info("crossedCircle intersect", node2, { radius: radius2, point: point8 });
      const pos = intersect_default.circle(node2, radius2, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_crossedCircle = __esm({
    "src/rendering-util/rendering-elements/shapes/crossedCircle.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_intersect();
      __name(createLine, "createLine");
      __name(crossedCircle, "crossedCircle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts
  function generateCirclePoints2(centerX, centerY, radius2, numPoints = 100, startAngle = 0, endAngle = 180) {
    const points = [];
    const startAngleRad = startAngle * Math.PI / 180;
    const endAngleRad = endAngle * Math.PI / 180;
    const angleRange = endAngleRad - startAngleRad;
    const angleStep = angleRange / (numPoints - 1);
    for (let i2 = 0; i2 < numPoints; i2++) {
      const angle2 = startAngleRad + i2 * angleStep;
      const x5 = centerX + radius2 * Math.cos(angle2);
      const y6 = centerY + radius2 * Math.sin(angle2);
      points.push({ x: -x5, y: -y6 });
    }
    return points;
  }
  async function curlyBraceLeft(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const paddingX = node2.look === "neo" ? 18 : node2.padding ?? 0;
    const paddingY = node2.look === "neo" ? 12 : node2.padding ?? 0;
    const w4 = bbox.width + paddingX;
    const h3 = bbox.height + paddingY;
    const radius2 = Math.max(5, h3 * 0.1);
    const { cssStyles } = node2;
    const points = [
      ...generateCirclePoints2(w4 / 2, -h3 / 2, radius2, 30, -90, 0),
      { x: -w4 / 2 - radius2, y: radius2 },
      ...generateCirclePoints2(w4 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270),
      ...generateCirclePoints2(w4 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180),
      { x: -w4 / 2 - radius2, y: -h3 / 2 },
      ...generateCirclePoints2(w4 / 2, h3 / 2, radius2, 20, 0, 90)
    ];
    const rectPoints = [
      { x: w4 / 2, y: -h3 / 2 - radius2 },
      { x: -w4 / 2, y: -h3 / 2 - radius2 },
      ...generateCirclePoints2(w4 / 2, -h3 / 2, radius2, 20, -90, 0),
      { x: -w4 / 2 - radius2, y: -radius2 },
      ...generateCirclePoints2(w4 / 2 + w4 * 0.1, -radius2, radius2, 20, -180, -270),
      ...generateCirclePoints2(w4 / 2 + w4 * 0.1, radius2, radius2, 20, -90, -180),
      { x: -w4 / 2 - radius2, y: h3 / 2 },
      ...generateCirclePoints2(w4 / 2, h3 / 2, radius2, 20, 0, 90),
      { x: -w4 / 2, y: h3 / 2 + radius2 },
      { x: w4 / 2, y: h3 / 2 + radius2 }
    ];
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, { fill: "none" });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const curlyBraceLeftPath = createPathFromPoints(points);
    const newCurlyBracePath = curlyBraceLeftPath.replace("Z", "");
    const curlyBraceLeftNode = rc.path(newCurlyBracePath, options2);
    const rectPath = createPathFromPoints(rectPoints);
    const rectShape = rc.path(rectPath, { ...options2 });
    const curlyBraceLeftShape = shapeSvg.insert("g", ":first-child");
    curlyBraceLeftShape.insert(() => rectShape, ":first-child").attr("stroke-opacity", 0);
    curlyBraceLeftShape.insert(() => curlyBraceLeftNode, ":first-child");
    curlyBraceLeftShape.attr("class", "text");
    if (cssStyles && node2.look !== "handDrawn") {
      curlyBraceLeftShape.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      curlyBraceLeftShape.selectAll("path").attr("style", nodeStyles);
    }
    curlyBraceLeftShape.attr("transform", `translate(${radius2}, 0)`);
    label.attr(
      "transform",
      `translate(${-w4 / 2 + radius2 - (bbox.x - (bbox.left ?? 0))},${-h3 / 2 + (node2.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, curlyBraceLeftShape);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, rectPoints, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_curlyBraceLeft = __esm({
    "src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(generateCirclePoints2, "generateCirclePoints");
      __name(curlyBraceLeft, "curlyBraceLeft");
    }
  });

  // src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts
  function generateCirclePoints3(centerX, centerY, radius2, numPoints = 100, startAngle = 0, endAngle = 180) {
    const points = [];
    const startAngleRad = startAngle * Math.PI / 180;
    const endAngleRad = endAngle * Math.PI / 180;
    const angleRange = endAngleRad - startAngleRad;
    const angleStep = angleRange / (numPoints - 1);
    for (let i2 = 0; i2 < numPoints; i2++) {
      const angle2 = startAngleRad + i2 * angleStep;
      const x5 = centerX + radius2 * Math.cos(angle2);
      const y6 = centerY + radius2 * Math.sin(angle2);
      points.push({ x: x5, y: y6 });
    }
    return points;
  }
  async function curlyBraceRight(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const labelPaddingX = node2.look === "neo" ? 18 : node2.padding ?? 0;
    const labelPaddingY = node2.look === "neo" ? 12 : node2.padding ?? 0;
    const w4 = bbox.width + (node2.look === "neo" ? labelPaddingX * 2 : labelPaddingX);
    const h3 = bbox.height + (node2.look === "neo" ? labelPaddingY * 2 : labelPaddingY);
    const radius2 = Math.max(5, h3 * 0.1);
    const { cssStyles } = node2;
    const points = [
      ...generateCirclePoints3(w4 / 2, -h3 / 2, radius2, 20, -90, 0),
      { x: w4 / 2 + radius2, y: -radius2 },
      ...generateCirclePoints3(w4 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270),
      ...generateCirclePoints3(w4 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180),
      { x: w4 / 2 + radius2, y: h3 / 2 },
      ...generateCirclePoints3(w4 / 2, h3 / 2, radius2, 20, 0, 90)
    ];
    const rectPoints = [
      { x: -w4 / 2, y: -h3 / 2 - radius2 },
      { x: w4 / 2, y: -h3 / 2 - radius2 },
      ...generateCirclePoints3(w4 / 2, -h3 / 2, radius2, 20, -90, 0),
      { x: w4 / 2 + radius2, y: -radius2 },
      ...generateCirclePoints3(w4 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270),
      ...generateCirclePoints3(w4 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180),
      { x: w4 / 2 + radius2, y: h3 / 2 },
      ...generateCirclePoints3(w4 / 2, h3 / 2, radius2, 20, 0, 90),
      { x: w4 / 2, y: h3 / 2 + radius2 },
      { x: -w4 / 2, y: h3 / 2 + radius2 }
    ];
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, { fill: "none" });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const curlyBraceRightPath = createPathFromPoints(points);
    const newCurlyBracePath = curlyBraceRightPath.replace("Z", "");
    const curlyBraceRightNode = rc.path(newCurlyBracePath, options2);
    const rectPath = createPathFromPoints(rectPoints);
    const rectShape = rc.path(rectPath, { ...options2 });
    const curlyBraceRightShape = shapeSvg.insert("g", ":first-child");
    curlyBraceRightShape.insert(() => rectShape, ":first-child").attr("stroke-opacity", 0);
    curlyBraceRightShape.insert(() => curlyBraceRightNode, ":first-child");
    curlyBraceRightShape.attr("class", "text");
    if (cssStyles && node2.look !== "handDrawn") {
      curlyBraceRightShape.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      curlyBraceRightShape.selectAll("path").attr("style", nodeStyles);
    }
    curlyBraceRightShape.attr("transform", `translate(${-radius2}, 0)`);
    label.attr(
      "transform",
      `translate(${-w4 / 2 + (node2.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h3 / 2 + (node2.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, curlyBraceRightShape);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, rectPoints, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_curlyBraceRight = __esm({
    "src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(generateCirclePoints3, "generateCirclePoints");
      __name(curlyBraceRight, "curlyBraceRight");
    }
  });

  // src/rendering-util/rendering-elements/shapes/curlyBraces.ts
  function generateCirclePoints4(centerX, centerY, radius2, numPoints = 100, startAngle = 0, endAngle = 180) {
    const points = [];
    const startAngleRad = startAngle * Math.PI / 180;
    const endAngleRad = endAngle * Math.PI / 180;
    const angleRange = endAngleRad - startAngleRad;
    const angleStep = angleRange / (numPoints - 1);
    for (let i2 = 0; i2 < numPoints; i2++) {
      const angle2 = startAngleRad + i2 * angleStep;
      const x5 = centerX + radius2 * Math.cos(angle2);
      const y6 = centerY + radius2 * Math.sin(angle2);
      points.push({ x: -x5, y: -y6 });
    }
    return points;
  }
  async function curlyBraces(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const labelPaddingX = node2.look === "neo" ? 18 : node2.padding ?? 0;
    const labelPaddingY = node2.look === "neo" ? 12 : node2.padding ?? 0;
    const w4 = bbox.width + (node2.look === "neo" ? labelPaddingX * 2 : labelPaddingX);
    const h3 = bbox.height + (node2.look === "neo" ? labelPaddingY * 2 : labelPaddingY);
    const radius2 = Math.max(5, h3 * 0.1);
    const { cssStyles } = node2;
    const leftCurlyBracePoints = [
      ...generateCirclePoints4(w4 / 2, -h3 / 2, radius2, 30, -90, 0),
      { x: -w4 / 2 - radius2, y: radius2 },
      ...generateCirclePoints4(w4 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270),
      ...generateCirclePoints4(w4 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180),
      { x: -w4 / 2 - radius2, y: -h3 / 2 },
      ...generateCirclePoints4(w4 / 2, h3 / 2, radius2, 20, 0, 90)
    ];
    const rightCurlyBracePoints = [
      ...generateCirclePoints4(-w4 / 2 + radius2 + radius2 / 2, -h3 / 2, radius2, 20, -90, -180),
      { x: w4 / 2 - radius2 / 2, y: radius2 },
      ...generateCirclePoints4(-w4 / 2 - radius2 / 2, -radius2, radius2, 20, 0, 90),
      ...generateCirclePoints4(-w4 / 2 - radius2 / 2, radius2, radius2, 20, -90, 0),
      { x: w4 / 2 - radius2 / 2, y: -radius2 },
      ...generateCirclePoints4(-w4 / 2 + radius2 + radius2 / 2, h3 / 2, radius2, 30, -180, -270)
    ];
    const rectPoints = [
      { x: w4 / 2, y: -h3 / 2 - radius2 },
      { x: -w4 / 2, y: -h3 / 2 - radius2 },
      ...generateCirclePoints4(w4 / 2, -h3 / 2, radius2, 20, -90, 0),
      { x: -w4 / 2 - radius2, y: -radius2 },
      ...generateCirclePoints4(w4 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270),
      ...generateCirclePoints4(w4 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180),
      { x: -w4 / 2 - radius2, y: h3 / 2 },
      ...generateCirclePoints4(w4 / 2, h3 / 2, radius2, 20, 0, 90),
      { x: -w4 / 2, y: h3 / 2 + radius2 },
      { x: w4 / 2 - radius2 - radius2 / 2, y: h3 / 2 + radius2 },
      ...generateCirclePoints4(-w4 / 2 + radius2 + radius2 / 2, -h3 / 2, radius2, 20, -90, -180),
      { x: w4 / 2 - radius2 / 2, y: radius2 },
      ...generateCirclePoints4(-w4 / 2 - radius2 / 2, -radius2, radius2, 20, 0, 90),
      ...generateCirclePoints4(-w4 / 2 - radius2 / 2, radius2, radius2, 20, -90, 0),
      { x: w4 / 2 - radius2 / 2, y: -radius2 },
      ...generateCirclePoints4(-w4 / 2 + radius2 + radius2 / 2, h3 / 2, radius2, 30, -180, -270)
    ];
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, { fill: "none" });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints);
    const newLeftCurlyBracePath = leftCurlyBracePath.replace("Z", "");
    const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options2);
    const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints);
    const newRightCurlyBracePath = rightCurlyBracePath.replace("Z", "");
    const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options2);
    const rectPath = createPathFromPoints(rectPoints);
    const rectShape = rc.path(rectPath, { ...options2 });
    const curlyBracesShape = shapeSvg.insert("g", ":first-child");
    curlyBracesShape.insert(() => rectShape, ":first-child").attr("stroke-opacity", 0);
    curlyBracesShape.insert(() => leftCurlyBraceNode, ":first-child");
    curlyBracesShape.insert(() => rightCurlyBraceNode, ":first-child");
    curlyBracesShape.attr("class", "text");
    if (cssStyles && node2.look !== "handDrawn") {
      curlyBracesShape.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      curlyBracesShape.selectAll("path").attr("style", nodeStyles);
    }
    curlyBracesShape.attr("transform", `translate(${radius2 - radius2 / 4}, 0)`);
    label.attr(
      "transform",
      `translate(${-w4 / 2 + (node2.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h3 / 2 + (node2.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, curlyBracesShape);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, rectPoints, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_curlyBraces = __esm({
    "src/rendering-util/rendering-elements/shapes/curlyBraces.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(generateCirclePoints4, "generateCirclePoints");
      __name(curlyBraces, "curlyBraces");
    }
  });

  // src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts
  async function curvedTrapezoid(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    const minWidth = 20, minHeight = 5;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = Math.max(minWidth, (bbox.width + labelPaddingX * 2) * 1.25, node2?.width ?? 0);
    const h3 = Math.max(minHeight, bbox.height + labelPaddingY * 2, node2?.height ?? 0);
    const radius2 = h3 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const totalWidth = w4, totalHeight = h3;
    const rw = totalWidth - radius2;
    const tw = totalHeight / 4;
    const points = [
      { x: rw, y: 0 },
      { x: tw, y: 0 },
      { x: 0, y: totalHeight / 2 },
      { x: tw, y: totalHeight },
      { x: rw, y: totalHeight },
      ...generateCirclePoints(-rw, -totalHeight / 2, radius2, 50, 270, 90)
    ];
    const pathData = createPathFromPoints(points);
    const shapeNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child");
    polygon2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", nodeStyles);
    }
    polygon2.attr("transform", `translate(${-w4 / 2}, ${-h3 / 2})`);
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_curvedTrapezoid = __esm({
    "src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(curvedTrapezoid, "curvedTrapezoid");
    }
  });

  // src/rendering-util/rendering-elements/shapes/cylinder.ts
  async function cylinder(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 24 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 24 : nodePadding;
    if (node2.width || node2.height) {
      const originalWidth = node2.width ?? 0;
      node2.width = (node2.width ?? 0) - labelPaddingY;
      if (node2.width < MIN_WIDTH) {
        node2.width = MIN_WIDTH;
      }
      const rx2 = originalWidth / 2;
      const ry2 = rx2 / (2.5 + originalWidth / 50);
      node2.height = (node2.height ?? 0) - labelPaddingX - ry2 * 3;
      if (node2.height < MIN_HEIGHT) {
        node2.height = MIN_HEIGHT;
      }
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2.width ? node2.width : bbox.width) + labelPaddingY;
    const rx = w4 / 2;
    const ry = rx / (2.5 + w4 / 50);
    const h3 = (node2.height ? node2.height : bbox.height) + labelPaddingX + ry;
    let cylinder3;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const outerPathData = createOuterCylinderPathD(0, 0, w4, h3, rx, ry);
      const innerPathData = createInnerCylinderPathD(0, ry, w4, h3, rx, ry);
      const options2 = userNodeOverrides(node2, {});
      const outerNode = rc.path(outerPathData, options2);
      const innerLine = rc.path(innerPathData, userNodeOverrides(node2, { fill: "none" }));
      cylinder3 = shapeSvg.insert(() => innerLine, ":first-child");
      cylinder3 = shapeSvg.insert(() => outerNode, ":first-child");
      cylinder3.attr("class", "basic label-container");
      if (cssStyles) {
        cylinder3.attr("style", cssStyles);
      }
    } else {
      const pathData = createCylinderPathD(0, 0, w4, h3, rx, ry);
      cylinder3 = shapeSvg.insert("path", ":first-child").attr("d", pathData).attr("class", "basic label-container outer-path").attr("style", handleUndefinedAttr(cssStyles)).attr("style", nodeStyles);
    }
    cylinder3.attr("label-offset-y", ry);
    cylinder3.attr("transform", `translate(${-w4 / 2}, ${-(h3 / 2 + ry)})`);
    updateNodeBounds(node2, cylinder3);
    label.attr(
      "transform",
      `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node2.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`
    );
    node2.intersect = function(point8) {
      const pos = intersect_default.rect(node2, point8);
      const x5 = pos.x - (node2.x ?? 0);
      if (rx != 0 && (Math.abs(x5) < (node2.width ?? 0) / 2 || Math.abs(x5) == (node2.width ?? 0) / 2 && Math.abs(pos.y - (node2.y ?? 0)) > (node2.height ?? 0) / 2 - ry)) {
        let y6 = ry * ry * (1 - x5 * x5 / (rx * rx));
        if (y6 > 0) {
          y6 = Math.sqrt(y6);
        }
        y6 = ry - y6;
        if (point8.y - (node2.y ?? 0) > 0) {
          y6 = -y6;
        }
        pos.y += y6;
      }
      return pos;
    };
    return shapeSvg;
  }
  var createCylinderPathD, createOuterCylinderPathD, createInnerCylinderPathD, MIN_HEIGHT, MIN_WIDTH;
  var init_cylinder = __esm({
    "src/rendering-util/rendering-elements/shapes/cylinder.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      createCylinderPathD = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry) => {
        return [
          `M${x5},${y6 + ry}`,
          `a${rx},${ry} 0,0,0 ${width3},0`,
          `a${rx},${ry} 0,0,0 ${-width3},0`,
          `l0,${height2}`,
          `a${rx},${ry} 0,0,0 ${width3},0`,
          `l0,${-height2}`
        ].join(" ");
      }, "createCylinderPathD");
      createOuterCylinderPathD = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry) => {
        return [
          `M${x5},${y6 + ry}`,
          `M${x5 + width3},${y6 + ry}`,
          `a${rx},${ry} 0,0,0 ${-width3},0`,
          `l0,${height2}`,
          `a${rx},${ry} 0,0,0 ${width3},0`,
          `l0,${-height2}`
        ].join(" ");
      }, "createOuterCylinderPathD");
      createInnerCylinderPathD = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry) => {
        return [`M${x5 - width3 / 2},${-height2 / 2}`, `a${rx},${ry} 0,0,0 ${width3},0`].join(" ");
      }, "createInnerCylinderPathD");
      MIN_HEIGHT = 8;
      MIN_WIDTH = 8;
      __name(cylinder, "cylinder");
    }
  });

  // src/rendering-util/rendering-elements/shapes/roundedRectPath.ts
  var createRoundedRectPathD;
  var init_roundedRectPath = __esm({
    "src/rendering-util/rendering-elements/shapes/roundedRectPath.ts"() {
      "use strict";
      createRoundedRectPathD = /* @__PURE__ */ __name((x5, y6, totalWidth, totalHeight, radius2) => [
        "M",
        x5 + radius2,
        y6,
        // Move to the first point
        "H",
        x5 + totalWidth - radius2,
        // Draw horizontal line to the beginning of the right corner
        "A",
        radius2,
        radius2,
        0,
        0,
        1,
        x5 + totalWidth,
        y6 + radius2,
        // Draw arc to the right top corner
        "V",
        y6 + totalHeight - radius2,
        // Draw vertical line down to the beginning of the right bottom corner
        "A",
        radius2,
        radius2,
        0,
        0,
        1,
        x5 + totalWidth - radius2,
        y6 + totalHeight,
        // Draw arc to the right bottom corner
        "H",
        x5 + radius2,
        // Draw horizontal line to the beginning of the left bottom corner
        "A",
        radius2,
        radius2,
        0,
        0,
        1,
        x5,
        y6 + totalHeight - radius2,
        // Draw arc to the left bottom corner
        "V",
        y6 + radius2,
        // Draw vertical line up to the beginning of the left top corner
        "A",
        radius2,
        radius2,
        0,
        0,
        1,
        x5 + radius2,
        y6,
        // Draw arc to the left top corner
        "Z"
        // Close the path
      ].join(" "), "createRoundedRectPathD");
    }
  });

  // src/rendering-util/rendering-elements/shapes/drawRect.ts
  async function drawRect3(parent4, node2, options2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = Math.max(bbox.width + options2.labelPaddingX * 2, node2?.width || 0);
    const totalHeight = Math.max(bbox.height + options2.labelPaddingY * 2, node2?.height || 0);
    const x5 = -totalWidth / 2;
    const y6 = -totalHeight / 2;
    let rect3;
    let { rx, ry } = node2;
    const { cssStyles } = node2;
    if (options2?.rx && options2.ry) {
      rx = options2.rx;
      ry = options2.ry;
    }
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options3 = userNodeOverrides(node2, {});
      const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x5, y6, totalWidth, totalHeight, rx || 0), options3) : rc.rectangle(x5, y6, totalWidth, totalHeight, options3);
      rect3 = shapeSvg.insert(() => roughNode, ":first-child");
      rect3.attr("class", "basic label-container").attr("style", handleUndefinedAttr(cssStyles));
    } else {
      rect3 = shapeSvg.insert("rect", ":first-child");
      rect3.attr("class", "basic label-container").attr("style", nodeStyles).attr("rx", handleUndefinedAttr(rx)).attr("ry", handleUndefinedAttr(ry)).attr("x", x5).attr("y", y6).attr("width", totalWidth).attr("height", totalHeight);
    }
    updateNodeBounds(node2, rect3);
    node2.calcIntersect = function(bounds4, point8) {
      return intersect_default.rect(bounds4, point8);
    };
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_drawRect = __esm({
    "src/rendering-util/rendering-elements/shapes/drawRect.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_roundedRectPath();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      __name(drawRect3, "drawRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/datastore.ts
  async function datastore(parent4, node2) {
    const { cssClasses, labelPaddingX, labelPaddingY, padding, width: width3, height: height2 } = node2;
    const rectOptions = {
      rx: 0,
      ry: 0,
      classes: cssClasses ?? "",
      labelPaddingX: labelPaddingX ?? (padding ?? 0) * 2,
      labelPaddingY: labelPaddingY ?? padding ?? 0
    };
    const rect3 = await drawRect3(parent4, node2, rectOptions);
    if (node2.look === "handDrawn") {
      const rc = at.svg(rect3);
      const nodeOverrideOptions = userNodeOverrides(node2, {});
      const borderSelection = rect3.select(".basic.label-container > path:nth-child(2)");
      const borderPath = borderSelection.node();
      if (!borderPath) {
        return rect3;
      }
      let bbox = null;
      if (borderPath instanceof SVGGraphicsElement) {
        bbox = borderPath.getBBox();
      } else {
        return rect3;
      }
      rect3.insert(
        () => rc.line(bbox.x, bbox.y, bbox.x + bbox.width, bbox.y, nodeOverrideOptions),
        ".basic.label-container g.label"
      );
      rect3.insert(
        () => rc.line(
          bbox.x,
          bbox.y + bbox.height,
          bbox.x + bbox.width,
          bbox.y + bbox.height,
          nodeOverrideOptions
        ),
        ".basic.label-container g.label"
      );
      borderSelection.remove();
      return rect3;
    }
    const selection2 = rect3.select(".basic.label-container");
    const datastoreWidth = (Number(selection2.attr("width")) || width3) ?? 0;
    const datastoreHeight = (Number(selection2.attr("height")) || height2) ?? 0;
    if (datastoreWidth > 0 && datastoreHeight > 0) {
      selection2.attr("stroke-dasharray", `${datastoreWidth} ${datastoreHeight}`);
    }
    return rect3;
  }
  var init_datastore = __esm({
    "src/rendering-util/rendering-elements/shapes/datastore.ts"() {
      "use strict";
      init_drawRect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(datastore, "datastore");
    }
  });

  // src/rendering-util/rendering-elements/shapes/dividedRect.ts
  async function dividedRectangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const paddingX = node2.look === "neo" ? 16 : node2.padding ?? 0;
    const paddingY = node2.look === "neo" ? 16 : node2.padding ?? 0;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = bbox.width + paddingX;
    const h3 = bbox.height + paddingY;
    const rectOffset2 = h3 * 0.2;
    const x5 = -w4 / 2;
    const y6 = -h3 / 2 - rectOffset2 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const pts2 = [
      { x: x5, y: y6 + rectOffset2 },
      { x: -x5, y: y6 + rectOffset2 },
      { x: -x5, y: -y6 },
      { x: x5, y: -y6 },
      { x: x5, y: y6 },
      { x: -x5, y: y6 },
      { x: -x5, y: y6 + rectOffset2 }
    ];
    const poly = rc.polygon(
      pts2.map((p3) => [p3.x, p3.y]),
      options2
    );
    const polygon2 = shapeSvg.insert(() => poly, ":first-child");
    polygon2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectAll("path").attr("style", nodeStyles);
    }
    label.attr(
      "transform",
      `translate(${x5 + (node2.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y6 + rectOffset2 + (node2.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      const pos = intersect_default.rect(node2, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_dividedRect = __esm({
    "src/rendering-util/rendering-elements/shapes/dividedRect.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(dividedRectangle, "dividedRectangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/doubleCircle.ts
  async function doublecircle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    const gap = node2.look === "neo" ? 12 : 5;
    node2.labelStyle = labelStyles;
    const padding = node2.padding ?? 0;
    const labelPadding = node2.look === "neo" ? 16 : padding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const outerRadius = (node2?.width ? node2?.width / 2 : bbox.width / 2) + (labelPadding ?? 0);
    const innerRadius = outerRadius - gap;
    let circleGroup;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const outerOptions = userNodeOverrides(node2, { roughness: 0.2, strokeWidth: 2.5 });
      const innerOptions = userNodeOverrides(node2, { roughness: 0.2, strokeWidth: 1.5 });
      const outerRoughNode = rc.circle(0, 0, outerRadius * 2, outerOptions);
      const innerRoughNode = rc.circle(0, 0, innerRadius * 2, innerOptions);
      circleGroup = shapeSvg.insert("g", ":first-child");
      circleGroup.attr("class", handleUndefinedAttr(node2.cssClasses)).attr("style", handleUndefinedAttr(cssStyles));
      circleGroup.node()?.appendChild(outerRoughNode);
      circleGroup.node()?.appendChild(innerRoughNode);
    } else {
      circleGroup = shapeSvg.insert("g", ":first-child");
      const outerCircle = circleGroup.insert("circle", ":first-child");
      const innerCircle = circleGroup.insert("circle");
      circleGroup.attr("class", "basic label-container").attr("style", nodeStyles);
      outerCircle.attr("class", "outer-circle").attr("style", nodeStyles).attr("r", outerRadius).attr("cx", 0).attr("cy", 0);
      innerCircle.attr("class", "inner-circle").attr("style", nodeStyles).attr("r", innerRadius).attr("cx", 0).attr("cy", 0);
    }
    updateNodeBounds(node2, circleGroup);
    node2.intersect = function(point8) {
      log.info("DoubleCircle intersect", node2, outerRadius, point8);
      return intersect_default.circle(node2, outerRadius, point8);
    };
    return shapeSvg;
  }
  var init_doubleCircle = __esm({
    "src/rendering-util/rendering-elements/shapes/doubleCircle.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      __name(doublecircle, "doublecircle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/filledCircle.ts
  function filledCircle(parent4, node2, { config: { themeVariables } }) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.label = "";
    node2.labelStyle = labelStyles;
    const shapeSvg = parent4.insert("g").attr("class", getNodeClasses(node2)).attr("id", node2.domId ?? node2.id);
    const radius2 = 7;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const { nodeBorder } = themeVariables;
    const options2 = userNodeOverrides(node2, { fillStyle: "solid" });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
    }
    const circleNode = rc.circle(0, 0, radius2 * 2, options2);
    const filledCircle2 = shapeSvg.insert(() => circleNode, ":first-child");
    filledCircle2.selectAll("path").attr("style", `fill: ${nodeBorder} !important;`);
    if (cssStyles && cssStyles.length > 0 && node2.look !== "handDrawn") {
      filledCircle2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      filledCircle2.selectAll("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, filledCircle2);
    node2.intersect = function(point8) {
      log.info("filledCircle intersect", node2, { radius: radius2, point: point8 });
      const pos = intersect_default.circle(node2, radius2, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_filledCircle = __esm({
    "src/rendering-util/rendering-elements/shapes/filledCircle.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(filledCircle, "filledCircle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/flippedTriangle.ts
  async function flippedTriangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? nodePadding * 2 : nodePadding;
    if (node2.width || node2.height) {
      node2.height = node2?.height ?? 0;
      if (node2.height < MIN_HEIGHT2) {
        node2.height = MIN_HEIGHT2;
      }
      node2.width = (node2?.width ?? 0) - labelPaddingX - labelPaddingX / 2;
      if (node2.width < MIN_WIDTH2) {
        node2.width = MIN_WIDTH2;
      }
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ? node2?.width : bbox.width) + (labelPaddingX ?? 0);
    const h3 = node2?.height ? node2?.height : w4 + bbox.height;
    const tw = h3;
    const points = [
      { x: 0, y: -h3 },
      { x: tw, y: -h3 },
      { x: tw / 2, y: 0 }
    ];
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const pathData = createPathFromPoints(points);
    const roughNode = rc.path(pathData, options2);
    const flippedTriangle2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-h3 / 2}, ${h3 / 2})`).attr("class", "outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      flippedTriangle2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      flippedTriangle2.selectChildren("path").attr("style", nodeStyles);
    }
    node2.width = w4;
    node2.height = h3;
    updateNodeBounds(node2, flippedTriangle2);
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h3 / 2 + (node2.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`
    );
    node2.intersect = function(point8) {
      log.info("Triangle intersect", node2, points, point8);
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var MIN_HEIGHT2, MIN_WIDTH2;
  var init_flippedTriangle = __esm({
    "src/rendering-util/rendering-elements/shapes/flippedTriangle.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_util();
      MIN_HEIGHT2 = 10;
      MIN_WIDTH2 = 10;
      __name(flippedTriangle, "flippedTriangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/forkJoin.ts
  function forkJoin(parent4, node2, { dir: dir2, config: { state: state4, themeVariables } }) {
    const { nodeStyles } = styles2String(node2);
    node2.label = "";
    const shapeSvg = parent4.insert("g").attr("class", getNodeClasses(node2)).attr("id", node2.domId ?? node2.id);
    const { cssStyles } = node2;
    let width3 = Math.max(70, node2?.width ?? 0);
    let height2 = Math.max(10, node2?.height ?? 0);
    if (dir2 === "LR") {
      width3 = Math.max(10, node2?.width ?? 0);
      height2 = Math.max(70, node2?.height ?? 0);
    }
    const x5 = -1 * width3 / 2;
    const y6 = -1 * height2 / 2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {
      stroke: themeVariables.lineColor,
      fill: themeVariables.lineColor
    });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const roughNode = rc.rectangle(x5, y6, width3, height2, options2);
    const shape = shapeSvg.insert(() => roughNode, ":first-child");
    if (cssStyles && node2.look !== "handDrawn") {
      shape.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      shape.selectAll("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, shape);
    const padding = state4?.padding ?? 0;
    if (node2.width && node2.height) {
      node2.width += padding / 2 || 0;
      node2.height += padding / 2 || 0;
    }
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_forkJoin = __esm({
    "src/rendering-util/rendering-elements/shapes/forkJoin.ts"() {
      "use strict";
      init_rough_esm();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(forkJoin, "forkJoin");
    }
  });

  // src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts
  async function halfRoundedRectangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const minWidth = 15, minHeight = 10;
    const paddingX = node2.look === "neo" ? 16 : node2.padding ?? 0;
    const paddingY = node2.look === "neo" ? 12 : node2.padding ?? 0;
    if (node2.width || node2.height) {
      node2.height = (node2?.height ?? 0) - paddingY * 2;
      if (node2.height < minHeight) {
        node2.height = minHeight;
      }
      node2.width = (node2?.width ?? 0) - paddingX * 2;
      if (node2.width < minWidth) {
        node2.width = minWidth;
      }
    }
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ? node2?.width : Math.max(minWidth, bbox.width)) + paddingX * 2;
    const h3 = (node2?.height ? node2?.height : Math.max(minHeight, bbox.height)) + paddingY * 2;
    const radius2 = h3 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: -w4 / 2, y: -h3 / 2 },
      { x: w4 / 2 - radius2, y: -h3 / 2 },
      ...generateCirclePoints(-w4 / 2 + radius2, 0, radius2, 50, 90, 270),
      { x: w4 / 2 - radius2, y: h3 / 2 },
      { x: -w4 / 2, y: h3 / 2 }
    ];
    const pathData = createPathFromPoints(points);
    const shapeNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child");
    polygon2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      log.info("Pill intersect", node2, { radius: radius2, point: point8 });
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_halfRoundedRectangle = __esm({
    "src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(halfRoundedRectangle, "halfRoundedRectangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/hexagon.ts
  async function hexagon(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    const f2 = node2.look === "neo" ? 3.5 : 4;
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const wa = 70;
    const ha = 32;
    const labelPaddingX = node2.look === "neo" ? wa : nodePadding;
    const labelPaddingY = node2.look === "neo" ? ha : nodePadding;
    if (node2.width || node2.height) {
      const originalHeight = node2.height ?? 0;
      const m4 = originalHeight / f2;
      node2.width = (node2?.width ?? 0) - 2 * m4 - labelPaddingY;
      node2.height = (node2.height ?? 0) - labelPaddingX;
    }
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const h3 = (node2?.height ? node2?.height : bbox.height) + labelPaddingX;
    const m3 = h3 / f2;
    const w4 = (node2?.width ? node2?.width : bbox.width) + 2 * m3 + labelPaddingY;
    const points = [
      { x: m3, y: 0 },
      { x: w4 - m3, y: 0 },
      { x: w4, y: -h3 / 2 },
      { x: w4 - m3, y: -h3 },
      { x: m3, y: -h3 },
      { x: 0, y: -h3 / 2 }
    ];
    let polygon2;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const pathData = createHexagonPathD(0, 0, w4, h3, m3);
      const roughNode = rc.path(pathData, options2);
      polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w4 / 2}, ${h3 / 2})`);
      if (cssStyles) {
        polygon2.attr("style", cssStyles);
      }
    } else {
      polygon2 = insertPolygonShape(shapeSvg, w4, h3, points);
    }
    if (nodeStyles) {
      polygon2.attr("style", nodeStyles);
    }
    node2.width = w4;
    node2.height = h3;
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var createHexagonPathD;
  var init_hexagon = __esm({
    "src/rendering-util/rendering-elements/shapes/hexagon.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      createHexagonPathD = /* @__PURE__ */ __name((x5, y6, width3, height2, m3) => {
        return [
          `M${x5 + m3},${y6}`,
          `L${x5 + width3 - m3},${y6}`,
          `L${x5 + width3},${y6 - height2 / 2}`,
          `L${x5 + width3 - m3},${y6 - height2}`,
          `L${x5 + m3},${y6 - height2}`,
          `L${x5},${y6 - height2 / 2}`,
          "Z"
        ].join(" ");
      }, "createHexagonPathD");
      __name(hexagon, "hexagon");
    }
  });

  // src/rendering-util/rendering-elements/shapes/hourglass.ts
  async function hourglass(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.label = "";
    node2.labelStyle = labelStyles;
    const { shapeSvg } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = Math.max(30, node2?.width ?? 0);
    const h3 = Math.max(30, node2?.height ?? 0);
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: 0, y: 0 },
      { x: w4, y: 0 },
      { x: 0, y: h3 },
      { x: w4, y: h3 }
    ];
    const pathData = createPathFromPoints(points);
    const shapeNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child");
    polygon2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", nodeStyles);
    }
    polygon2.attr("transform", `translate(${-w4 / 2}, ${-h3 / 2})`);
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      log.info("Pill intersect", node2, { points });
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_hourglass = __esm({
    "src/rendering-util/rendering-elements/shapes/hourglass.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(hourglass, "hourglass");
    }
  });

  // src/rendering-util/rendering-elements/shapes/icon.ts
  async function icon(parent4, node2, { config: { themeVariables, flowchart } }) {
    const { labelStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const assetHeight = node2.assetHeight ?? 48;
    const assetWidth = node2.assetWidth ?? 48;
    const iconSize = Math.max(assetHeight, assetWidth);
    const defaultWidth = flowchart?.wrappingWidth;
    node2.width = Math.max(iconSize, defaultWidth ?? 0);
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, "icon-shape default");
    const topLabel = node2.pos === "t";
    const height2 = iconSize;
    const width3 = iconSize;
    const { nodeBorder } = themeVariables;
    const { stylesMap } = compileStyles(node2);
    const x5 = -width3 / 2;
    const y6 = -height2 / 2;
    const labelPadding = node2.label ? 8 : 0;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, { stroke: "none", fill: "none" });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const iconNode = rc.rectangle(x5, y6, width3, height2, options2);
    const outerWidth = Math.max(width3, bbox.width);
    const outerHeight = height2 + bbox.height + labelPadding;
    const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {
      ...options2,
      fill: "transparent",
      stroke: "none"
    });
    const iconShape = shapeSvg.insert(() => iconNode, ":first-child");
    const outerShape = shapeSvg.insert(() => outerNode);
    if (node2.icon) {
      const iconElem = shapeSvg.append("g");
      iconElem.html(
        `<g>${await getIconSVG(node2.icon, {
          height: iconSize,
          width: iconSize,
          fallbackPrefix: ""
        })}</g>`
      );
      const iconBBox = iconElem.node().getBBox();
      const iconWidth = iconBBox.width;
      const iconHeight = iconBBox.height;
      const iconX = iconBBox.x;
      const iconY = iconBBox.y;
      iconElem.attr(
        "transform",
        `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`
      );
      iconElem.attr("style", `color: ${stylesMap.get("stroke") ?? nodeBorder};`);
    }
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`
    );
    iconShape.attr(
      "transform",
      `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`
    );
    updateNodeBounds(node2, outerShape);
    node2.intersect = function(point8) {
      log.info("iconSquare intersect", node2, point8);
      if (!node2.label) {
        return intersect_default.rect(node2, point8);
      }
      const dx = node2.x ?? 0;
      const dy = node2.y ?? 0;
      const nodeHeight = node2.height ?? 0;
      let points = [];
      if (topLabel) {
        points = [
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + width3 / 2, y: dy + nodeHeight / 2 },
          { x: dx - width3 / 2, y: dy + nodeHeight / 2 },
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }
        ];
      } else {
        points = [
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 + height2 }
        ];
      }
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_icon = __esm({
    "src/rendering-util/rendering-elements/shapes/icon.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_icons();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(icon, "icon");
    }
  });

  // src/rendering-util/rendering-elements/shapes/iconCircle.ts
  async function iconCircle(parent4, node2, { config: { themeVariables, flowchart } }) {
    const { labelStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const assetHeight = node2.assetHeight ?? 48;
    const assetWidth = node2.assetWidth ?? 48;
    const iconSize = Math.max(assetHeight, assetWidth);
    const defaultWidth = flowchart?.wrappingWidth;
    node2.width = Math.max(iconSize, defaultWidth ?? 0);
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, "icon-shape default");
    const padding = 20;
    const labelPadding = node2.label ? 8 : 0;
    const topLabel = node2.pos === "t";
    const { nodeBorder, mainBkg } = themeVariables;
    const { stylesMap } = compileStyles(node2);
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const fill = stylesMap.get("fill");
    options2.stroke = fill ?? mainBkg;
    const iconElem = shapeSvg.append("g");
    if (node2.icon) {
      iconElem.html(
        `<g>${await getIconSVG(node2.icon, {
          height: iconSize,
          width: iconSize,
          fallbackPrefix: ""
        })}</g>`
      );
    }
    const iconBBox = iconElem.node().getBBox();
    const iconWidth = iconBBox.width;
    const iconHeight = iconBBox.height;
    const iconX = iconBBox.x;
    const iconY = iconBBox.y;
    const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;
    const iconNode = rc.circle(0, 0, diameter, options2);
    const outerWidth = Math.max(diameter, bbox.width);
    const outerHeight = diameter + bbox.height + labelPadding;
    const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {
      ...options2,
      fill: "transparent",
      stroke: "none"
    });
    const iconShape = shapeSvg.insert(() => iconNode, ":first-child");
    const outerShape = shapeSvg.insert(() => outerNode);
    iconElem.attr(
      "transform",
      `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`
    );
    iconElem.attr("style", `color: ${stylesMap.get("stroke") ?? nodeBorder};`);
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`
    );
    iconShape.attr(
      "transform",
      `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`
    );
    updateNodeBounds(node2, outerShape);
    node2.intersect = function(point8) {
      log.info("iconSquare intersect", node2, point8);
      const pos = intersect_default.rect(node2, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_iconCircle = __esm({
    "src/rendering-util/rendering-elements/shapes/iconCircle.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_icons();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(iconCircle, "iconCircle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/iconRounded.ts
  async function iconRounded(parent4, node2, { config: { themeVariables, flowchart } }) {
    const { labelStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const assetHeight = node2.assetHeight ?? 48;
    const assetWidth = node2.assetWidth ?? 48;
    const iconSize = Math.max(assetHeight, assetWidth);
    const defaultWidth = flowchart?.wrappingWidth;
    node2.width = Math.max(iconSize, defaultWidth ?? 0);
    const { shapeSvg, bbox, halfPadding, label } = await labelHelper(
      parent4,
      node2,
      "icon-shape default"
    );
    const topLabel = node2.pos === "t";
    const height2 = iconSize + halfPadding * 2;
    const width3 = iconSize + halfPadding * 2;
    const { nodeBorder, mainBkg } = themeVariables;
    const { stylesMap } = compileStyles(node2);
    const x5 = -width3 / 2;
    const y6 = -height2 / 2;
    const labelPadding = node2.label ? 8 : 0;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const fill = stylesMap.get("fill");
    options2.stroke = fill ?? mainBkg;
    const iconNode = rc.path(createRoundedRectPathD(x5, y6, width3, height2, 5), options2);
    const outerWidth = Math.max(width3, bbox.width);
    const outerHeight = height2 + bbox.height + labelPadding;
    const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {
      ...options2,
      fill: "transparent",
      stroke: "none"
    });
    const iconShape = shapeSvg.insert(() => iconNode, ":first-child").attr("class", "icon-shape2");
    const outerShape = shapeSvg.insert(() => outerNode);
    if (node2.icon) {
      const iconElem = shapeSvg.append("g");
      iconElem.html(
        `<g>${await getIconSVG(node2.icon, {
          height: iconSize,
          width: iconSize,
          fallbackPrefix: ""
        })}</g>`
      );
      const iconBBox = iconElem.node().getBBox();
      const iconWidth = iconBBox.width;
      const iconHeight = iconBBox.height;
      const iconX = iconBBox.x;
      const iconY = iconBBox.y;
      iconElem.attr(
        "transform",
        `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`
      );
      iconElem.attr("style", `color: ${stylesMap.get("stroke") ?? nodeBorder};`);
    }
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`
    );
    iconShape.attr(
      "transform",
      `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`
    );
    updateNodeBounds(node2, outerShape);
    node2.intersect = function(point8) {
      log.info("iconSquare intersect", node2, point8);
      if (!node2.label) {
        return intersect_default.rect(node2, point8);
      }
      const dx = node2.x ?? 0;
      const dy = node2.y ?? 0;
      const nodeHeight = node2.height ?? 0;
      let points = [];
      if (topLabel) {
        points = [
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + width3 / 2, y: dy + nodeHeight / 2 },
          { x: dx - width3 / 2, y: dy + nodeHeight / 2 },
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }
        ];
      } else {
        points = [
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 + height2 }
        ];
      }
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_iconRounded = __esm({
    "src/rendering-util/rendering-elements/shapes/iconRounded.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_icons();
      init_intersect();
      init_handDrawnShapeStyles();
      init_roundedRectPath();
      init_util();
      __name(iconRounded, "iconRounded");
    }
  });

  // src/rendering-util/rendering-elements/shapes/iconSquare.ts
  async function iconSquare(parent4, node2, { config: { themeVariables, flowchart } }) {
    const { labelStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const assetHeight = node2.assetHeight ?? 48;
    const assetWidth = node2.assetWidth ?? 48;
    const iconSize = Math.max(assetHeight, assetWidth);
    const defaultWidth = flowchart?.wrappingWidth;
    node2.width = Math.max(iconSize, defaultWidth ?? 0);
    const { shapeSvg, bbox, halfPadding, label } = await labelHelper(
      parent4,
      node2,
      "icon-shape default"
    );
    const topLabel = node2.pos === "t";
    const height2 = iconSize + halfPadding * 2;
    const width3 = iconSize + halfPadding * 2;
    const { nodeBorder, mainBkg } = themeVariables;
    const { stylesMap } = compileStyles(node2);
    const x5 = -width3 / 2;
    const y6 = -height2 / 2;
    const labelPadding = node2.label ? 8 : 0;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const fill = stylesMap.get("fill");
    options2.stroke = fill ?? mainBkg;
    const iconNode = rc.path(createRoundedRectPathD(x5, y6, width3, height2, 0.1), options2);
    const outerWidth = Math.max(width3, bbox.width);
    const outerHeight = height2 + bbox.height + labelPadding;
    const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {
      ...options2,
      fill: "transparent",
      stroke: "none"
    });
    const iconShape = shapeSvg.insert(() => iconNode, ":first-child");
    const outerShape = shapeSvg.insert(() => outerNode);
    if (node2.icon) {
      const iconElem = shapeSvg.append("g");
      iconElem.html(
        `<g>${await getIconSVG(node2.icon, {
          height: iconSize,
          width: iconSize,
          fallbackPrefix: ""
        })}</g>`
      );
      const iconBBox = iconElem.node().getBBox();
      const iconWidth = iconBBox.width;
      const iconHeight = iconBBox.height;
      const iconX = iconBBox.x;
      const iconY = iconBBox.y;
      iconElem.attr(
        "transform",
        `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`
      );
      iconElem.attr("style", `color: ${stylesMap.get("stroke") ?? nodeBorder};`);
    }
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`
    );
    iconShape.attr(
      "transform",
      `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`
    );
    updateNodeBounds(node2, outerShape);
    node2.intersect = function(point8) {
      log.info("iconSquare intersect", node2, point8);
      if (!node2.label) {
        return intersect_default.rect(node2, point8);
      }
      const dx = node2.x ?? 0;
      const dy = node2.y ?? 0;
      const nodeHeight = node2.height ?? 0;
      let points = [];
      if (topLabel) {
        points = [
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + width3 / 2, y: dy + nodeHeight / 2 },
          { x: dx - width3 / 2, y: dy + nodeHeight / 2 },
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }
        ];
      } else {
        points = [
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 },
          { x: dx + width3 / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height2 },
          { x: dx - width3 / 2, y: dy - nodeHeight / 2 + height2 }
        ];
      }
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_iconSquare = __esm({
    "src/rendering-util/rendering-elements/shapes/iconSquare.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_icons();
      init_intersect();
      init_roundedRectPath();
      init_handDrawnShapeStyles();
      init_util();
      __name(iconSquare, "iconSquare");
    }
  });

  // src/rendering-util/rendering-elements/shapes/imageSquare.ts
  async function imageSquare(parent4, node2, { config: { flowchart } }) {
    const img = new Image();
    img.src = node2?.img ?? "";
    await img.decode();
    const imageNaturalWidth = Number(img.naturalWidth.toString().replace("px", ""));
    const imageNaturalHeight = Number(img.naturalHeight.toString().replace("px", ""));
    node2.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;
    const { labelStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const defaultWidth = flowchart?.wrappingWidth;
    node2.defaultWidth = flowchart?.wrappingWidth;
    const imageRawWidth = Math.max(
      node2.label ? defaultWidth ?? 0 : 0,
      node2?.assetWidth ?? imageNaturalWidth
    );
    const imageWidth = node2.constraint === "on" ? node2?.assetHeight ? node2.assetHeight * node2.imageAspectRatio : imageRawWidth : imageRawWidth;
    const imageHeight = node2.constraint === "on" ? imageWidth / node2.imageAspectRatio : node2?.assetHeight ?? imageNaturalHeight;
    node2.width = Math.max(imageWidth, defaultWidth ?? 0);
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, "image-shape default");
    const topLabel = node2.pos === "t";
    const x5 = -imageWidth / 2;
    const y6 = -imageHeight / 2;
    const labelPadding = node2.label ? 8 : 0;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const imageNode = rc.rectangle(x5, y6, imageWidth, imageHeight, options2);
    const outerWidth = Math.max(imageWidth, bbox.width);
    const outerHeight = imageHeight + bbox.height + labelPadding;
    const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {
      ...options2,
      fill: "none",
      stroke: "none"
    });
    const iconShape = shapeSvg.insert(() => imageNode, ":first-child");
    const outerShape = shapeSvg.insert(() => outerNode);
    if (node2.img) {
      const image = shapeSvg.append("image");
      image.attr("href", node2.img);
      image.attr("width", imageWidth);
      image.attr("height", imageHeight);
      image.attr("preserveAspectRatio", "none");
      image.attr(
        "transform",
        `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`
      );
    }
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2 : imageHeight / 2 - bbox.height / 2 + labelPadding / 2})`
    );
    iconShape.attr(
      "transform",
      `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`
    );
    updateNodeBounds(node2, outerShape);
    node2.intersect = function(point8) {
      log.info("iconSquare intersect", node2, point8);
      if (!node2.label) {
        return intersect_default.rect(node2, point8);
      }
      const dx = node2.x ?? 0;
      const dy = node2.y ?? 0;
      const nodeHeight = node2.height ?? 0;
      let points = [];
      if (topLabel) {
        points = [
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 },
          { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 },
          { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }
        ];
      } else {
        points = [
          { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 },
          { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 },
          { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },
          { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },
          { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },
          { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },
          { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }
        ];
      }
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_imageSquare = __esm({
    "src/rendering-util/rendering-elements/shapes/imageSquare.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(imageSquare, "imageSquare");
    }
  });

  // src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts
  async function inv_trapezoid(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingY = nodePadding;
    const labelPaddingX = node2.look === "neo" ? nodePadding * 2 : nodePadding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = Math.max(bbox.width + (labelPaddingX ?? 0) * 2, node2?.width ?? 0);
    const h3 = Math.max(bbox.height + (labelPaddingY ?? 0) * 2, node2?.height ?? 0);
    const points = [
      { x: 0, y: 0 },
      { x: w4, y: 0 },
      { x: w4 + 3 * h3 / 6, y: -h3 },
      { x: -3 * h3 / 6, y: -h3 }
    ];
    let polygon2;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const pathData = createPathFromPoints(points);
      const roughNode = rc.path(pathData, options2);
      polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w4 / 2}, ${h3 / 2})`);
      if (cssStyles) {
        polygon2.attr("style", cssStyles);
      }
    } else {
      polygon2 = insertPolygonShape(shapeSvg, w4, h3, points);
    }
    if (nodeStyles) {
      polygon2.attr("style", nodeStyles);
    }
    node2.width = w4;
    node2.height = h3;
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var init_invertedTrapezoid = __esm({
    "src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      __name(inv_trapezoid, "inv_trapezoid");
    }
  });

  // src/rendering-util/rendering-elements/shapes/labelRect.ts
  async function labelRect(parent4, node2) {
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, "label");
    const rect3 = shapeSvg.insert("rect", ":first-child");
    const totalWidth = 0.1;
    const totalHeight = 0.1;
    rect3.attr("width", totalWidth).attr("height", totalHeight);
    shapeSvg.attr("class", "label edgeLabel");
    label.attr(
      "transform",
      `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, rect3);
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_labelRect = __esm({
    "src/rendering-util/rendering-elements/shapes/labelRect.ts"() {
      "use strict";
      init_drawRect();
      init_util();
      init_intersect();
      __name(labelRect, "labelRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/leanLeft.ts
  async function lean_left(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingY = nodePadding;
    const labelPaddingX = node2.look === "neo" ? nodePadding * 2 : nodePadding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const h3 = (node2?.height ?? bbox.height) + labelPaddingY;
    const w4 = (node2?.width ?? bbox.width) + labelPaddingX;
    const points = [
      { x: 0, y: 0 },
      { x: w4 + 3 * h3 / 6, y: 0 },
      { x: w4, y: -h3 },
      { x: -(3 * h3) / 6, y: -h3 }
    ];
    let polygon2;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const pathData = createPathFromPoints(points);
      const roughNode = rc.path(pathData, options2);
      polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w4 / 2}, ${h3 / 2})`);
      if (cssStyles) {
        polygon2.attr("style", cssStyles);
      }
    } else {
      polygon2 = insertPolygonShape(shapeSvg, w4, h3, points);
    }
    if (nodeStyles) {
      polygon2.attr("style", nodeStyles);
    }
    node2.width = w4;
    node2.height = h3;
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var init_leanLeft = __esm({
    "src/rendering-util/rendering-elements/shapes/leanLeft.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      __name(lean_left, "lean_left");
    }
  });

  // src/rendering-util/rendering-elements/shapes/leanRight.ts
  async function lean_right(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingY = nodePadding;
    const labelPaddingX = node2.look === "neo" ? nodePadding * 2 : nodePadding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const h3 = (node2?.height ?? bbox.height) + labelPaddingY;
    const w4 = (node2?.width ?? bbox.width) + labelPaddingX;
    const points = [
      { x: -3 * h3 / 6, y: 0 },
      { x: w4, y: 0 },
      { x: w4 + 3 * h3 / 6, y: -h3 },
      { x: 0, y: -h3 }
    ];
    let polygon2;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const pathData = createPathFromPoints(points);
      const roughNode = rc.path(pathData, options2);
      polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w4 / 2}, ${h3 / 2})`);
      if (cssStyles) {
        polygon2.attr("style", cssStyles);
      }
    } else {
      polygon2 = insertPolygonShape(shapeSvg, w4, h3, points);
    }
    if (nodeStyles) {
      polygon2.attr("style", nodeStyles);
    }
    node2.width = w4;
    node2.height = h3;
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var init_leanRight = __esm({
    "src/rendering-util/rendering-elements/shapes/leanRight.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      __name(lean_right, "lean_right");
    }
  });

  // src/rendering-util/rendering-elements/shapes/lightningBolt.ts
  function lightningBolt(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.label = "";
    node2.labelStyle = labelStyles;
    const shapeSvg = parent4.insert("g").attr("class", getNodeClasses(node2)).attr("id", node2.domId ?? node2.id);
    const { cssStyles } = node2;
    const width3 = Math.max(35, node2?.width ?? 0);
    const height2 = Math.max(35, node2?.height ?? 0);
    const gap = 7;
    const points = [
      { x: width3, y: 0 },
      { x: 0, y: height2 + gap / 2 },
      { x: width3 - 2 * gap, y: height2 + gap / 2 },
      { x: 0, y: 2 * height2 },
      { x: width3, y: height2 - gap / 2 },
      { x: 2 * gap, y: height2 - gap / 2 }
    ];
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const linePath = createPathFromPoints(points);
    const lineNode = rc.path(linePath, options2);
    const lightningBolt2 = shapeSvg.insert(() => lineNode, ":first-child");
    lightningBolt2.attr("class", "outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      lightningBolt2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      lightningBolt2.selectAll("path").attr("style", nodeStyles);
    }
    lightningBolt2.attr("transform", `translate(-${width3 / 2},${-height2})`);
    updateNodeBounds(node2, lightningBolt2);
    node2.intersect = function(point8) {
      log.info("lightningBolt intersect", node2, point8);
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_lightningBolt = __esm({
    "src/rendering-util/rendering-elements/shapes/lightningBolt.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_intersect();
      init_util();
      __name(lightningBolt, "lightningBolt");
    }
  });

  // src/rendering-util/rendering-elements/shapes/linedCylinder.ts
  async function linedCylinder(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 24 : nodePadding;
    if (node2.width || node2.height) {
      const originalWidth = node2.width ?? 0;
      node2.width = (node2.width ?? 0) - labelPaddingX;
      if (node2.width < MIN_WIDTH3) {
        node2.width = MIN_WIDTH3;
      }
      const rx2 = originalWidth / 2;
      const ry2 = rx2 / (2.5 + originalWidth / 50);
      node2.height = (node2.height ?? 0) - labelPaddingY - ry2 * 3;
      if (node2.height < MIN_HEIGHT3) {
        node2.height = MIN_HEIGHT3;
      }
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ? node2?.width : bbox.width) + labelPaddingX * 2;
    const rx = w4 / 2;
    const ry = rx / (2.5 + w4 / 50);
    const h3 = (node2?.height ? node2?.height : bbox.height) + ry + labelPaddingY * 2;
    const outerOffset = h3 * 0.1;
    let cylinder3;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const outerPathData = createOuterCylinderPathD2(0, 0, w4, h3, rx, ry, outerOffset);
      const innerPathData = createInnerCylinderPathD2(0, ry, w4, h3, rx, ry);
      const options2 = userNodeOverrides(node2, {});
      const outerNode = rc.path(outerPathData, options2);
      const innerLine = rc.path(innerPathData, options2);
      const innerLineEl = shapeSvg.insert(() => innerLine, ":first-child");
      innerLineEl.attr("class", "line");
      cylinder3 = shapeSvg.insert(() => outerNode, ":first-child");
      cylinder3.attr("class", "basic label-container");
      if (cssStyles) {
        cylinder3.attr("style", cssStyles);
      }
    } else {
      const pathData = createCylinderPathD2(0, 0, w4, h3, rx, ry, outerOffset);
      cylinder3 = shapeSvg.insert("path", ":first-child").attr("d", pathData).attr("class", "basic label-container outer-path").attr("style", handleUndefinedAttr(cssStyles)).attr("style", nodeStyles);
    }
    cylinder3.attr("label-offset-y", ry);
    cylinder3.attr("transform", `translate(${-w4 / 2}, ${-(h3 / 2 + ry)})`);
    updateNodeBounds(node2, cylinder3);
    label.attr(
      "transform",
      `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`
    );
    node2.intersect = function(point8) {
      const pos = intersect_default.rect(node2, point8);
      const x5 = pos.x - (node2.x ?? 0);
      if (rx != 0 && (Math.abs(x5) < (node2.width ?? 0) / 2 || Math.abs(x5) == (node2.width ?? 0) / 2 && Math.abs(pos.y - (node2.y ?? 0)) > (node2.height ?? 0) / 2 - ry)) {
        let y6 = ry * ry * (1 - x5 * x5 / (rx * rx));
        if (y6 > 0) {
          y6 = Math.sqrt(y6);
        }
        y6 = ry - y6;
        if (point8.y - (node2.y ?? 0) > 0) {
          y6 = -y6;
        }
        pos.y += y6;
      }
      return pos;
    };
    return shapeSvg;
  }
  var createCylinderPathD2, createOuterCylinderPathD2, createInnerCylinderPathD2, MIN_HEIGHT3, MIN_WIDTH3;
  var init_linedCylinder = __esm({
    "src/rendering-util/rendering-elements/shapes/linedCylinder.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      createCylinderPathD2 = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry, outerOffset) => {
        return [
          `M${x5},${y6 + ry}`,
          `a${rx},${ry} 0,0,0 ${width3},0`,
          `a${rx},${ry} 0,0,0 ${-width3},0`,
          `l0,${height2}`,
          `a${rx},${ry} 0,0,0 ${width3},0`,
          `l0,${-height2}`,
          `M${x5},${y6 + ry + outerOffset}`,
          `a${rx},${ry} 0,0,0 ${width3},0`
        ].join(" ");
      }, "createCylinderPathD");
      createOuterCylinderPathD2 = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry, outerOffset) => {
        return [
          `M${x5},${y6 + ry}`,
          `M${x5 + width3},${y6 + ry}`,
          `a${rx},${ry} 0,0,0 ${-width3},0`,
          `l0,${height2}`,
          `a${rx},${ry} 0,0,0 ${width3},0`,
          `l0,${-height2}`,
          `M${x5},${y6 + ry + outerOffset}`,
          `a${rx},${ry} 0,0,0 ${width3},0`
        ].join(" ");
      }, "createOuterCylinderPathD");
      createInnerCylinderPathD2 = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry) => {
        return [`M${x5 - width3 / 2},${-height2 / 2}`, `a${rx},${ry} 0,0,0 ${width3},0`].join(" ");
      }, "createInnerCylinderPathD");
      MIN_HEIGHT3 = 10;
      MIN_WIDTH3 = 10;
      __name(linedCylinder, "linedCylinder");
    }
  });

  // src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts
  async function linedWaveEdgedRect(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    if (node2.width || node2.height) {
      const originalWidth = node2.width;
      node2.width = (originalWidth ?? 0) * 10 / 11 - labelPaddingX * 2;
      if (node2.width < 10) {
        node2.width = 10;
      }
      node2.height = (node2?.height ?? 0) - labelPaddingY * 2;
      if (node2.height < 10) {
        node2.height = 10;
      }
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ? node2?.width : bbox.width) + (labelPaddingX ?? 0) * 2;
    const h3 = (node2?.height ? node2?.height : bbox.height) + (labelPaddingY ?? 0) * 2;
    const waveAmplitude = node2.look === "neo" ? h3 / 4 : h3 / 8;
    const finalH = h3 + waveAmplitude;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: -w4 / 2 - w4 / 2 * 0.1, y: -finalH / 2 },
      { x: -w4 / 2 - w4 / 2 * 0.1, y: finalH / 2 },
      ...generateFullSineWavePoints(
        -w4 / 2 - w4 / 2 * 0.1,
        finalH / 2,
        w4 / 2 + w4 / 2 * 0.1,
        finalH / 2,
        waveAmplitude,
        0.8
      ),
      { x: w4 / 2 + w4 / 2 * 0.1, y: -finalH / 2 },
      { x: -w4 / 2 - w4 / 2 * 0.1, y: -finalH / 2 },
      { x: -w4 / 2, y: -finalH / 2 },
      { x: -w4 / 2, y: finalH / 2 * 1.1 },
      { x: -w4 / 2, y: -finalH / 2 }
    ];
    const poly = rc.polygon(
      points.map((p3) => [p3.x, p3.y]),
      options2
    );
    const waveEdgeRect = shapeSvg.insert(() => poly, ":first-child");
    waveEdgeRect.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      waveEdgeRect.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      waveEdgeRect.selectAll("path").attr("style", nodeStyles);
    }
    waveEdgeRect.attr("transform", `translate(0,${-waveAmplitude / 2})`);
    label.attr(
      "transform",
      `translate(${-w4 / 2 + (node2.padding ?? 0) + w4 / 2 * 0.1 / 2 - (bbox.x - (bbox.left ?? 0))},${-h3 / 2 + (node2.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, waveEdgeRect);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_linedWaveEdgedRect = __esm({
    "src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_rough_esm();
      init_handDrawnShapeStyles();
      __name(linedWaveEdgedRect, "linedWaveEdgedRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/multiRect.ts
  async function multiRect(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    const rectOffset2 = node2.look === "neo" ? 10 : 5;
    if (node2.width || node2.height) {
      node2.width = Math.max((node2?.width ?? 0) - labelPaddingX * 2 - 2 * rectOffset2, 10);
      node2.height = Math.max((node2?.height ?? 0) - labelPaddingY * 2 - 2 * rectOffset2, 10);
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = (node2?.width ? node2?.width : bbox.width) + labelPaddingX * 2 + 2 * rectOffset2;
    const totalHeight = (node2?.height ? node2?.height : bbox.height) + labelPaddingY * 2 + 2 * rectOffset2;
    const w4 = totalWidth - 2 * rectOffset2;
    const h3 = totalHeight - 2 * rectOffset2;
    const x5 = -w4 / 2;
    const y6 = -h3 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    const outerPathPoints = [
      { x: x5 - rectOffset2, y: y6 + rectOffset2 },
      { x: x5 - rectOffset2, y: y6 + h3 + rectOffset2 },
      { x: x5 + w4 - rectOffset2, y: y6 + h3 + rectOffset2 },
      { x: x5 + w4 - rectOffset2, y: y6 + h3 },
      { x: x5 + w4, y: y6 + h3 },
      { x: x5 + w4, y: y6 + h3 - rectOffset2 },
      { x: x5 + w4 + rectOffset2, y: y6 + h3 - rectOffset2 },
      { x: x5 + w4 + rectOffset2, y: y6 - rectOffset2 },
      { x: x5 + rectOffset2, y: y6 - rectOffset2 },
      { x: x5 + rectOffset2, y: y6 },
      { x: x5, y: y6 },
      { x: x5, y: y6 + rectOffset2 }
    ];
    const innerPathPoints = [
      { x: x5, y: y6 + rectOffset2 },
      { x: x5 + w4 - rectOffset2, y: y6 + rectOffset2 },
      { x: x5 + w4 - rectOffset2, y: y6 + h3 },
      { x: x5 + w4, y: y6 + h3 },
      { x: x5 + w4, y: y6 },
      { x: x5, y: y6 }
    ];
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const outerPath = createPathFromPoints(outerPathPoints);
    let outerNode = rc.path(outerPath, options2);
    const innerPath3 = createPathFromPoints(innerPathPoints);
    let innerNode = rc.path(innerPath3, options2);
    if (node2.look !== "handDrawn") {
      outerNode = mergePaths(outerNode);
      innerNode = mergePaths(innerNode);
    }
    const multiRect2 = shapeSvg.insert("g", ":first-child");
    multiRect2.insert(() => outerNode);
    multiRect2.insert(() => innerNode);
    multiRect2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      multiRect2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      multiRect2.selectAll("path").attr("style", nodeStyles);
    }
    label.attr(
      "transform",
      `translate(${-(bbox.width / 2) - rectOffset2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, multiRect2);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, outerPathPoints, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_multiRect = __esm({
    "src/rendering-util/rendering-elements/shapes/multiRect.ts"() {
      "use strict";
      init_util();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_intersect();
      __name(multiRect, "multiRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts
  async function multiWaveEdgedRectangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    let adjustFinalHeight = true;
    if (node2.width || node2.height) {
      adjustFinalHeight = false;
      node2.width = (node2?.width ?? 0) - labelPaddingX * 2;
      node2.height = (node2?.height ?? 0) - labelPaddingY * 3;
    }
    const w4 = Math.max(bbox.width, node2?.width ?? 0) + labelPaddingX * 2;
    const h3 = Math.max(bbox.height, node2?.height ?? 0) + labelPaddingY * 3;
    const waveAmplitude = node2.look === "neo" ? h3 / 4 : h3 / 8;
    const finalH = h3 + (adjustFinalHeight ? waveAmplitude / 2 : -waveAmplitude / 2);
    const x5 = -w4 / 2;
    const y6 = -finalH / 2;
    const rectOffset2 = 10;
    const { cssStyles } = node2;
    const wavePoints = generateFullSineWavePoints(
      x5 - rectOffset2,
      y6 + finalH + rectOffset2,
      x5 + w4 - rectOffset2,
      y6 + finalH + rectOffset2,
      waveAmplitude,
      0.8
    );
    const lastWavePoint = wavePoints?.[wavePoints.length - 1];
    const outerPathPoints = [
      { x: x5 - rectOffset2, y: y6 + rectOffset2 },
      { x: x5 - rectOffset2, y: y6 + finalH + rectOffset2 },
      ...wavePoints,
      { x: x5 + w4 - rectOffset2, y: lastWavePoint.y - rectOffset2 },
      { x: x5 + w4, y: lastWavePoint.y - rectOffset2 },
      { x: x5 + w4, y: lastWavePoint.y - 2 * rectOffset2 },
      { x: x5 + w4 + rectOffset2, y: lastWavePoint.y - 2 * rectOffset2 },
      { x: x5 + w4 + rectOffset2, y: y6 - rectOffset2 },
      { x: x5 + rectOffset2, y: y6 - rectOffset2 },
      { x: x5 + rectOffset2, y: y6 },
      { x: x5, y: y6 },
      { x: x5, y: y6 + rectOffset2 }
    ];
    const innerPathPoints = [
      { x: x5, y: y6 + rectOffset2 },
      { x: x5 + w4 - rectOffset2, y: y6 + rectOffset2 },
      { x: x5 + w4 - rectOffset2, y: lastWavePoint.y - rectOffset2 },
      { x: x5 + w4, y: lastWavePoint.y - rectOffset2 },
      { x: x5 + w4, y: y6 },
      { x: x5, y: y6 }
    ];
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const outerPath = createPathFromPoints(outerPathPoints);
    const outerNode = rc.path(outerPath, options2);
    const innerPath3 = createPathFromPoints(innerPathPoints);
    const innerNode = rc.path(innerPath3, options2);
    const shape = shapeSvg.insert(() => outerNode, ":first-child");
    shape.insert(() => innerNode);
    shape.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      shape.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      shape.selectAll("path").attr("style", nodeStyles);
    }
    shape.attr("transform", `translate(0,${-waveAmplitude / 2})`);
    label.attr(
      "transform",
      `translate(${-(bbox.width / 2) - rectOffset2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset2 - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, shape);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, outerPathPoints, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_multiWaveEdgedRectangle = __esm({
    "src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_rough_esm();
      init_handDrawnShapeStyles();
      __name(multiWaveEdgedRectangle, "multiWaveEdgedRectangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/note.ts
  async function note(parent4, node2, { config: { themeVariables } }) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const useHtmlLabels = node2.useHtmlLabels || getEffectiveHtmlLabels(getConfig());
    if (!useHtmlLabels) {
      node2.centerLabel = true;
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0);
    const totalHeight = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0);
    const x5 = -totalWidth / 2;
    const y6 = -totalHeight / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {
      fill: themeVariables.noteBkgColor,
      stroke: themeVariables.noteBorderColor
    });
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const noteShapeNode = rc.rectangle(x5, y6, totalWidth, totalHeight, options2);
    const rect3 = shapeSvg.insert(() => noteShapeNode, ":first-child");
    rect3.attr("class", "basic label-container outer-path");
    label.attr("class", "label noteLabel");
    if (cssStyles && node2.look !== "handDrawn") {
      rect3.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      rect3.selectAll("path").attr("style", nodeStyles);
    }
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, rect3);
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_note = __esm({
    "src/rendering-util/rendering-elements/shapes/note.ts"() {
      "use strict";
      init_rough_esm();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      init_config();
      init_config();
      __name(note, "note");
    }
  });

  // src/rendering-util/rendering-elements/shapes/question.ts
  async function question(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = bbox.width + (node2.padding ?? 0);
    const h3 = bbox.height + (node2.padding ?? 0);
    const s2 = w4 + h3;
    const adjustment = 0.5;
    const points = [
      { x: s2 / 2, y: 0 },
      { x: s2, y: -s2 / 2 },
      { x: s2 / 2, y: -s2 },
      { x: 0, y: -s2 / 2 }
    ];
    let polygon2;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const pathData = createDecisionBoxPathD(0, 0, s2);
      const roughNode = rc.path(pathData, options2);
      polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-s2 / 2 + adjustment}, ${s2 / 2})`);
      if (cssStyles) {
        polygon2.attr("style", cssStyles);
      }
    } else {
      polygon2 = insertPolygonShape(shapeSvg, s2, s2, points);
      polygon2.attr("transform", `translate(${-s2 / 2 + adjustment}, ${s2 / 2})`);
    }
    if (nodeStyles) {
      polygon2.attr("style", nodeStyles);
    }
    updateNodeBounds(node2, polygon2);
    node2.calcIntersect = function(bounds4, point8) {
      const s3 = bounds4.width;
      const points2 = [
        { x: s3 / 2, y: 0 },
        { x: s3, y: -s3 / 2 },
        { x: s3 / 2, y: -s3 },
        { x: 0, y: -s3 / 2 }
      ];
      const res = intersect_default.polygon(bounds4, points2, point8);
      return { x: res.x - 0.5, y: res.y - 0.5 };
    };
    node2.intersect = function(point8) {
      return this.calcIntersect(node2, point8);
    };
    return shapeSvg;
  }
  var createDecisionBoxPathD;
  var init_question = __esm({
    "src/rendering-util/rendering-elements/shapes/question.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      createDecisionBoxPathD = /* @__PURE__ */ __name((x5, y6, size4) => {
        return [
          `M${x5 + size4 / 2},${y6}`,
          `L${x5 + size4},${y6 - size4 / 2}`,
          `L${x5 + size4 / 2},${y6 - size4}`,
          `L${x5},${y6 - size4 / 2}`,
          "Z"
        ].join(" ");
      }, "createDecisionBoxPathD");
      __name(question, "question");
    }
  });

  // src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts
  async function rect_left_inv_arrow(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 21 : nodePadding ?? 0;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding ?? 0;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ?? bbox.width) + (node2.look === "neo" ? labelPaddingX * 2 : labelPaddingX);
    const h3 = (node2?.height ?? bbox.height) + (node2.look === "neo" ? labelPaddingY * 2 : labelPaddingY);
    const x5 = -w4 / 2;
    const y6 = -h3 / 2;
    const notch = y6 / 2;
    const points = [
      { x: x5 + notch, y: y6 },
      { x: x5, y: 0 },
      { x: x5 + notch, y: -y6 },
      { x: -x5, y: -y6 },
      { x: -x5, y: y6 }
    ];
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const pathData = createPathFromPoints(points);
    const roughNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => roughNode, ":first-child");
    polygon2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectAll("path").attr("style", nodeStyles);
    }
    polygon2.attr("transform", `translate(${-notch / 2},0)`);
    label.attr(
      "transform",
      `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var init_rectLeftInvArrow = __esm({
    "src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(rect_left_inv_arrow, "rect_left_inv_arrow");
    }
  });

  // src/rendering-util/rendering-elements/createLabel.js
  var createLabel, createLabel_default;
  var init_createLabel = __esm({
    "src/rendering-util/rendering-elements/createLabel.js"() {
      "use strict";
      init_config();
      init_diagramAPI();
      init_createText();
      createLabel = /* @__PURE__ */ __name(async (element3, _vertexText, style3, isTitle = false, isNode2 = false) => {
        let vertexText = _vertexText || "";
        if (typeof vertexText === "object") {
          vertexText = vertexText[0];
        }
        const config3 = getConfig2();
        const useHtmlLabels = getEffectiveHtmlLabels(config3);
        return await createText(
          element3,
          vertexText,
          {
            style: style3,
            isTitle,
            useHtmlLabels,
            markdown: false,
            isNode: isNode2,
            width: Number.POSITIVE_INFINITY
          },
          config3
        );
      }, "createLabel");
      createLabel_default = createLabel;
    }
  });

  // src/rendering-util/rendering-elements/shapes/rectWithTitle.ts
  async function rectWithTitle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    let classes3;
    if (!node2.cssClasses) {
      classes3 = "node default";
    } else {
      classes3 = "node " + node2.cssClasses;
    }
    const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId || node2.id);
    const g2 = shapeSvg.insert("g");
    const label = shapeSvg.insert("g").attr("class", "label").attr("style", nodeStyles);
    const description = node2.description;
    const title2 = node2.label;
    const text4 = await createLabel_default(label, title2, node2.labelStyle, true, true);
    let bbox = { width: 0, height: 0 };
    if (getEffectiveHtmlLabels(getConfig2())) {
      const div2 = text4.children[0];
      const dv2 = select_default2(text4);
      bbox = div2.getBoundingClientRect();
      dv2.attr("width", bbox.width);
      dv2.attr("height", bbox.height);
    }
    log.info("Text 2", description);
    const textRows = description || [];
    const titleBox = text4.getBBox();
    const descr = await createLabel_default(
      label,
      Array.isArray(textRows) ? textRows.join("<br/>") : textRows,
      node2.labelStyle,
      true,
      true
    );
    const div = descr.children[0];
    const dv = select_default2(descr);
    bbox = div.getBoundingClientRect();
    dv.attr("width", bbox.width);
    dv.attr("height", bbox.height);
    const halfPadding = (node2.padding || 0) / 2;
    select_default2(descr).attr(
      "transform",
      "translate( " + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")"
    );
    select_default2(text4).attr(
      "transform",
      "translate( " + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)"
    );
    bbox = label.node().getBBox();
    label.attr(
      "transform",
      "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")"
    );
    const totalWidth = bbox.width + (node2.padding || 0);
    const totalHeight = bbox.height + (node2.padding || 0);
    const x5 = -bbox.width / 2 - halfPadding;
    const y6 = -bbox.height / 2 - halfPadding;
    let rect3;
    let innerLine;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const roughNode = rc.path(
        createRoundedRectPathD(x5, y6, totalWidth, totalHeight, node2.rx || 0),
        options2
      );
      const roughLine = rc.line(
        -bbox.width / 2 - halfPadding,
        -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,
        bbox.width / 2 + halfPadding,
        -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,
        options2
      );
      innerLine = shapeSvg.insert(() => {
        log.debug("Rough node insert CXC", roughNode);
        return roughLine;
      }, ":first-child");
      rect3 = shapeSvg.insert(() => {
        log.debug("Rough node insert CXC", roughNode);
        return roughNode;
      }, ":first-child");
    } else {
      rect3 = g2.insert("rect", ":first-child");
      innerLine = g2.insert("line");
      rect3.attr("class", "outer title-state").attr("style", nodeStyles).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + (node2.padding || 0)).attr("height", bbox.height + (node2.padding || 0));
      innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);
    }
    updateNodeBounds(node2, rect3);
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_rectWithTitle = __esm({
    "src/rendering-util/rendering-elements/shapes/rectWithTitle.ts"() {
      "use strict";
      init_src32();
      init_util();
      init_createLabel();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_diagramAPI();
      init_roundedRectPath();
      init_logger();
      init_config();
      __name(rectWithTitle, "rectWithTitle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/roundedRect.ts
  async function roundedRect(parent4, node2, { config: { themeVariables } }) {
    const radius2 = themeVariables?.radius ?? 5;
    const options2 = {
      rx: radius2,
      ry: radius2,
      classes: "",
      labelPaddingX: (node2?.padding ?? 0) * 1,
      labelPaddingY: (node2?.padding ?? 0) * 1
    };
    return drawRect3(parent4, node2, options2);
  }
  var init_roundedRect = __esm({
    "src/rendering-util/rendering-elements/shapes/roundedRect.ts"() {
      "use strict";
      init_drawRect();
      __name(roundedRect, "roundedRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/shadedProcess.ts
  async function shadedProcess(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const paddingX = node2.look === "neo" ? 16 : node2.padding ?? 0;
    const paddingY = node2.look === "neo" ? 12 : node2.padding ?? 0;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = (node2?.width ?? bbox.width) + paddingX * 2 + (node2.look === "neo" ? FRAME_WIDTH : FRAME_WIDTH * 2);
    const totalHeight = (node2?.height ?? bbox.height) + paddingY * 2;
    const w4 = totalWidth - FRAME_WIDTH;
    const h3 = totalHeight;
    const x5 = FRAME_WIDTH - totalWidth / 2;
    const y6 = -totalHeight / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: x5, y: y6 },
      { x: x5 + w4, y: y6 },
      { x: x5 + w4, y: y6 + h3 },
      { x: x5 - FRAME_WIDTH, y: y6 + h3 },
      { x: x5 - FRAME_WIDTH, y: y6 },
      { x: x5, y: y6 },
      { x: x5, y: y6 + h3 }
    ];
    const roughNode = rc.polygon(
      points.map((p3) => [p3.x, p3.y]),
      options2
    );
    const rect3 = shapeSvg.insert(() => roughNode, ":first-child");
    rect3.attr("class", "basic label-container outer-path").attr("style", handleUndefinedAttr(cssStyles));
    if (nodeStyles && node2.look !== "handDrawn") {
      rect3.selectAll("path").attr("style", nodeStyles);
    }
    if (cssStyles && node2.look !== "handDrawn") {
      rect3.selectAll("path").attr("style", nodeStyles);
    }
    label.attr(
      "transform",
      `translate(${FRAME_WIDTH / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, rect3);
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var FRAME_WIDTH;
  var init_shadedProcess = __esm({
    "src/rendering-util/rendering-elements/shapes/shadedProcess.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      FRAME_WIDTH = 8;
      __name(shadedProcess, "shadedProcess");
    }
  });

  // src/rendering-util/rendering-elements/shapes/slopedRect.ts
  async function slopedRect(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    if (node2.width || node2.height) {
      node2.width = Math.max((node2?.width ?? 0) - labelPaddingX * 2, 10);
      node2.height = Math.max((node2?.height ?? 0) / 1.5 - labelPaddingY * 2, 10);
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = (node2?.width ? node2?.width : bbox.width) + labelPaddingX * 2;
    const totalHeight = ((node2?.height ? node2?.height : bbox.height) + labelPaddingY * 2) * 1.5;
    const w4 = totalWidth;
    const h3 = totalHeight / 1.5;
    const x5 = -w4 / 2;
    const y6 = -h3 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: x5, y: y6 },
      { x: x5, y: y6 + h3 },
      { x: x5 + w4, y: y6 + h3 },
      { x: x5 + w4, y: y6 - h3 / 2 }
    ];
    const pathData = createPathFromPoints(points);
    const shapeNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child");
    polygon2.attr("class", "basic label-container  outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", nodeStyles);
    }
    polygon2.attr("transform", `translate(0, ${h3 / 4})`);
    label.attr(
      "transform",
      `translate(${-w4 / 2 + (node2.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h3 / 4 + (node2.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_slopedRect = __esm({
    "src/rendering-util/rendering-elements/shapes/slopedRect.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(slopedRect, "slopedRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/squareRect.ts
  async function squareRect(parent4, node2) {
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding * 2;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    const options2 = {
      rx: 0,
      ry: 0,
      classes: "",
      labelPaddingX: node2.labelPaddingX ?? labelPaddingX,
      labelPaddingY
    };
    return drawRect3(parent4, node2, options2);
  }
  var init_squareRect = __esm({
    "src/rendering-util/rendering-elements/shapes/squareRect.ts"() {
      "use strict";
      init_drawRect();
      __name(squareRect, "squareRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/stadium.ts
  async function stadium(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 20 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const h3 = bbox.height + (node2.look === "neo" ? labelPaddingY * 2 : labelPaddingY);
    const w4 = bbox.width + h3 / 4 + (node2.look === "neo" ? labelPaddingX * 2 : labelPaddingX);
    const radius2 = h3 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: -w4 / 2 + radius2, y: -h3 / 2 },
      { x: w4 / 2 - radius2, y: -h3 / 2 },
      ...generateCirclePoints(-w4 / 2 + radius2, 0, radius2, 50, 90, 270),
      { x: w4 / 2 - radius2, y: h3 / 2 },
      ...generateCirclePoints(w4 / 2 - radius2, 0, radius2, 50, 270, 450)
    ];
    const pathData = createPathFromPoints(points);
    const shapeNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child");
    polygon2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_stadium = __esm({
    "src/rendering-util/rendering-elements/shapes/stadium.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(stadium, "stadium");
    }
  });

  // src/rendering-util/rendering-elements/shapes/state.ts
  async function state(parent4, node2) {
    const options2 = {
      rx: node2.look === "neo" ? 3 : 5,
      ry: node2.look === "neo" ? 3 : 5,
      classes: "flowchart-node"
    };
    return drawRect3(parent4, node2, options2);
  }
  var init_state = __esm({
    "src/rendering-util/rendering-elements/shapes/state.ts"() {
      "use strict";
      init_drawRect();
      __name(state, "state");
    }
  });

  // src/rendering-util/rendering-elements/shapes/stateEnd.ts
  function stateEnd(parent4, node2, { config: { themeVariables } }) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { cssStyles } = node2;
    const { lineColor, stateBorder, nodeBorder, nodeShadow } = themeVariables;
    if (node2.width || node2.height) {
      if ((node2.width ?? 0) < 14) {
        node2.width = 14;
      }
      if ((node2.height ?? 0) < 14) {
        node2.height = 14;
      }
    }
    if (!node2.width) {
      node2.width = 14;
    }
    if (!node2.height) {
      node2.height = 14;
    }
    const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId ?? node2.id);
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const roughNode = rc.circle(0, 0, node2.width, {
      ...options2,
      stroke: lineColor,
      strokeWidth: 2
    });
    const innerFill = stateBorder ?? nodeBorder;
    const innerNodeRadius = (node2.width ?? 0) * 5 / 14;
    const roughInnerNode = rc.circle(0, 0, innerNodeRadius, {
      ...options2,
      fill: innerFill,
      stroke: innerFill,
      strokeWidth: 2,
      fillStyle: "solid"
    });
    const circle6 = shapeSvg.insert(() => roughNode, ":first-child");
    circle6.insert(() => roughInnerNode);
    if (node2.look !== "handDrawn") {
      circle6.attr("class", "outer-path");
    }
    if (cssStyles) {
      circle6.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles) {
      circle6.selectAll("path").attr("style", nodeStyles);
    }
    if (node2.width < 25 && nodeShadow && node2.look !== "handDrawn") {
      const svgId = parent4.node()?.ownerSVGElement?.id ?? "";
      const filterId = svgId ? `${svgId}-drop-shadow-small` : "drop-shadow-small";
      circle6.attr("style", `filter:url(#${filterId})`);
    }
    updateNodeBounds(node2, circle6);
    node2.intersect = function(point8) {
      return intersect_default.circle(node2, (node2.width ?? 0) / 2, point8);
    };
    return shapeSvg;
  }
  var init_stateEnd = __esm({
    "src/rendering-util/rendering-elements/shapes/stateEnd.ts"() {
      "use strict";
      init_rough_esm();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(stateEnd, "stateEnd");
    }
  });

  // src/rendering-util/rendering-elements/shapes/stateStart.ts
  function stateStart(parent4, node2, { config: { themeVariables } }) {
    const { lineColor, nodeShadow } = themeVariables;
    if (node2.width || node2.height) {
      if ((node2.width ?? 0) < 14) {
        node2.width = 14;
      }
      if ((node2.height ?? 0) < 14) {
        node2.height = 14;
      }
    }
    if (!node2.width) {
      node2.width = 14;
    }
    if (!node2.height) {
      node2.height = 14;
    }
    const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id);
    let circle6;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const roughNode = rc.circle(0, 0, node2.width, solidStateFill(lineColor));
      circle6 = shapeSvg.insert(() => roughNode);
      circle6.attr("class", "state-start").attr("r", (node2.width ?? 7) / 2).attr("width", node2.width ?? 14).attr("height", node2.height ?? 14);
    } else {
      circle6 = shapeSvg.insert("circle", ":first-child");
      circle6.attr("class", "state-start").attr("r", (node2.width ?? 7) / 2).attr("width", node2.width ?? 14).attr("height", node2.height ?? 14);
    }
    if (node2.width < 25 && nodeShadow && node2.look !== "handDrawn") {
      const svgId = parent4.node()?.ownerSVGElement?.id ?? "";
      const filterId = svgId ? `${svgId}-drop-shadow-small` : "drop-shadow-small";
      circle6.attr("style", `filter:url(#${filterId})`);
    }
    updateNodeBounds(node2, circle6);
    node2.intersect = function(point8) {
      return intersect_default.circle(node2, (node2.width ?? 7) / 2, point8);
    };
    return shapeSvg;
  }
  var init_stateStart = __esm({
    "src/rendering-util/rendering-elements/shapes/stateStart.ts"() {
      "use strict";
      init_rough_esm();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(stateStart, "stateStart");
    }
  });

  // src/rendering-util/rendering-elements/shapes/subroutine.ts
  async function subroutine(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2?.padding ?? 8;
    const labelPaddingX = node2.look === "neo" ? 28 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = (node2?.width ?? bbox.width) + 2 * FRAME_WIDTH2 + labelPaddingX;
    const totalHeight = (node2?.height ?? bbox.height) + labelPaddingY;
    const w4 = totalWidth - 2 * FRAME_WIDTH2;
    const h3 = totalHeight;
    const x5 = -totalWidth / 2;
    const y6 = -totalHeight / 2;
    const points = [
      { x: 0, y: 0 },
      { x: w4, y: 0 },
      { x: w4, y: -h3 },
      { x: 0, y: -h3 },
      { x: 0, y: 0 },
      { x: -8, y: 0 },
      { x: w4 + 8, y: 0 },
      { x: w4 + 8, y: -h3 },
      { x: -8, y: -h3 },
      { x: -8, y: 0 }
    ];
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const roughNode = rc.rectangle(x5, y6, w4 + 16, h3, options2);
      const l1 = rc.line(x5 + FRAME_WIDTH2, y6, x5 + FRAME_WIDTH2, y6 + h3, options2);
      const l22 = rc.line(x5 + FRAME_WIDTH2 + w4, y6, x5 + FRAME_WIDTH2 + w4, y6 + h3, options2);
      shapeSvg.insert(() => l1, ":first-child");
      shapeSvg.insert(() => l22, ":first-child");
      const rect3 = shapeSvg.insert(() => roughNode, ":first-child");
      const { cssStyles } = node2;
      rect3.attr("class", "basic label-container").attr("style", handleUndefinedAttr(cssStyles));
      updateNodeBounds(node2, rect3);
    } else {
      const el = insertPolygonShape(shapeSvg, w4, h3, points);
      if (nodeStyles) {
        el.attr("style", nodeStyles);
      }
      updateNodeBounds(node2, el);
    }
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var FRAME_WIDTH2;
  var init_subroutine = __esm({
    "src/rendering-util/rendering-elements/shapes/subroutine.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      init_utils2();
      FRAME_WIDTH2 = 8;
      __name(subroutine, "subroutine");
    }
  });

  // src/rendering-util/rendering-elements/shapes/taggedRect.ts
  async function taggedRect(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    if (node2.width || node2.height) {
      node2.height = Math.max((node2?.height ?? 0) - labelPaddingY * 2, 10);
      node2.width = Math.max(
        (node2?.width ?? 0) - labelPaddingX * 2 - TAG_RATIO * (node2.height + labelPaddingY * 2),
        10
      );
    }
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalHeight = (node2?.height ? node2?.height : bbox.height) + labelPaddingY * 2;
    const tagWidth = TAG_RATIO * totalHeight;
    const tagHeight = TAG_RATIO * totalHeight;
    const totalWidth = (node2?.width ? node2?.width : bbox.width) + labelPaddingX * 2 + tagWidth;
    const w4 = totalWidth - tagWidth;
    const h3 = totalHeight;
    const x5 = -w4 / 2;
    const y6 = -h3 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    const rectPoints = [
      { x: x5 - tagWidth / 2, y: y6 },
      { x: x5 + w4 + tagWidth / 2, y: y6 },
      { x: x5 + w4 + tagWidth / 2, y: y6 + h3 },
      { x: x5 - tagWidth / 2, y: y6 + h3 }
    ];
    const tagPoints = [
      { x: x5 + w4 - tagWidth / 2, y: y6 + h3 },
      { x: x5 + w4 + tagWidth / 2, y: y6 + h3 },
      { x: x5 + w4 + tagWidth / 2, y: y6 + h3 - tagHeight }
    ];
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const rectPath = createPathFromPoints(rectPoints);
    const rectNode = rc.path(rectPath, options2);
    const tagPath = createPathFromPoints(tagPoints);
    const tagNode = rc.path(tagPath, { ...options2, fillStyle: "solid" });
    const taggedRect2 = shapeSvg.insert(() => tagNode, ":first-child");
    taggedRect2.insert(() => rectNode, ":first-child");
    taggedRect2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      taggedRect2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      taggedRect2.selectAll("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, taggedRect2);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, rectPoints, point8);
      return pos;
    };
    return shapeSvg;
  }
  var TAG_RATIO;
  var init_taggedRect = __esm({
    "src/rendering-util/rendering-elements/shapes/taggedRect.ts"() {
      "use strict";
      init_util();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_intersect();
      TAG_RATIO = 0.2;
      __name(taggedRect, "taggedRect");
    }
  });

  // src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts
  async function taggedWaveEdgedRectangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0);
    const h3 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0);
    const waveAmplitude = h3 / 8;
    const tagWidth = 0.2 * w4;
    const tagHeight = 0.2 * h3;
    const finalH = h3 + waveAmplitude;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: -w4 / 2 - w4 / 2 * 0.1, y: finalH / 2 },
      ...generateFullSineWavePoints(
        -w4 / 2 - w4 / 2 * 0.1,
        finalH / 2,
        w4 / 2 + w4 / 2 * 0.1,
        finalH / 2,
        waveAmplitude,
        0.8
      ),
      { x: w4 / 2 + w4 / 2 * 0.1, y: -finalH / 2 },
      { x: -w4 / 2 - w4 / 2 * 0.1, y: -finalH / 2 }
    ];
    const x5 = -w4 / 2 + w4 / 2 * 0.1;
    const y6 = -finalH / 2 - tagHeight * 0.4;
    const tagPoints = [
      { x: x5 + w4 - tagWidth, y: (y6 + h3) * 1.3 },
      { x: x5 + w4, y: y6 + h3 - tagHeight },
      { x: x5 + w4, y: (y6 + h3) * 0.9 },
      ...generateFullSineWavePoints(
        x5 + w4,
        (y6 + h3) * 1.25,
        x5 + w4 - tagWidth,
        (y6 + h3) * 1.3,
        -h3 * 0.02,
        0.5
      )
    ];
    const waveEdgeRectPath = createPathFromPoints(points);
    const waveEdgeRectNode = rc.path(waveEdgeRectPath, options2);
    const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);
    const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {
      ...options2,
      fillStyle: "solid"
    });
    const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, ":first-child");
    waveEdgeRect.insert(() => waveEdgeRectNode, ":first-child");
    waveEdgeRect.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      waveEdgeRect.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      waveEdgeRect.selectAll("path").attr("style", nodeStyles);
    }
    waveEdgeRect.attr("transform", `translate(0,${-waveAmplitude / 2})`);
    label.attr(
      "transform",
      `translate(${-w4 / 2 + (node2.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h3 / 2 + (node2.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, waveEdgeRect);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_taggedWaveEdgedRectangle = __esm({
    "src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_rough_esm();
      init_handDrawnShapeStyles();
      __name(taggedWaveEdgedRectangle, "taggedWaveEdgedRectangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/text.ts
  async function text3(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = Math.max(bbox.width + (node2.padding ?? 0), node2?.width || 0);
    const totalHeight = Math.max(bbox.height + (node2.padding ?? 0), node2?.height || 0);
    const x5 = -totalWidth / 2;
    const y6 = -totalHeight / 2;
    const rect3 = shapeSvg.insert("rect", ":first-child");
    rect3.attr("class", "text").attr("style", nodeStyles).attr("rx", 0).attr("ry", 0).attr("x", x5).attr("y", y6).attr("width", totalWidth).attr("height", totalHeight);
    updateNodeBounds(node2, rect3);
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_text3 = __esm({
    "src/rendering-util/rendering-elements/shapes/text.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      __name(text3, "text");
    }
  });

  // src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts
  async function tiltedCylinder(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPadding = node2.look === "neo" ? 12 : nodePadding / 2;
    if (node2.width || node2.height) {
      const originalHeight = node2.height ?? 0;
      node2.height = (node2.height ?? 0) - labelPadding;
      if (node2.height < MIN_HEIGHT4) {
        node2.height = MIN_HEIGHT4;
      }
      const ry2 = originalHeight / 2;
      const rx2 = ry2 / (2.5 + originalHeight / 50);
      node2.width = (node2.width ?? 0) - labelPadding - rx2 * 3;
      if (node2.width < MIN_WIDTH4) {
        node2.width = MIN_WIDTH4;
      }
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const h3 = (node2.height ? node2.height : bbox.height) + labelPadding;
    const ry = h3 / 2;
    const rx = ry / (2.5 + h3 / 50);
    const w4 = (node2.width ? node2.width : bbox.width) + rx + labelPadding;
    const { cssStyles } = node2;
    let cylinder3;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const outerPathData = createOuterCylinderPathD3(0, 0, w4, h3, rx, ry);
      const innerPathData = createInnerCylinderPathD3(0, 0, w4, h3, rx, ry);
      const outerNode = rc.path(outerPathData, userNodeOverrides(node2, {}));
      const innerLine = rc.path(innerPathData, userNodeOverrides(node2, { fill: "none" }));
      cylinder3 = shapeSvg.insert(() => innerLine, ":first-child");
      cylinder3 = shapeSvg.insert(() => outerNode, ":first-child");
      cylinder3.attr("class", "basic label-container");
      if (cssStyles) {
        cylinder3.attr("style", cssStyles);
      }
    } else {
      const pathData = createCylinderPathD3(0, 0, w4, h3, rx, ry);
      cylinder3 = shapeSvg.insert("path", ":first-child").attr("d", pathData).attr("class", "basic label-container").attr("style", handleUndefinedAttr(cssStyles)).attr("style", nodeStyles);
      cylinder3.attr("class", "basic label-container outer-path");
      if (cssStyles) {
        cylinder3.selectAll("path").attr("style", cssStyles);
      }
      if (nodeStyles) {
        cylinder3.selectAll("path").attr("style", nodeStyles);
      }
    }
    cylinder3.attr("label-offset-x", rx);
    cylinder3.attr("transform", `translate(${-w4 / 2}, ${h3 / 2} )`);
    label.attr(
      "transform",
      `translate(${-(bbox.width / 2) - rx - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, cylinder3);
    node2.intersect = function(point8) {
      const pos = intersect_default.rect(node2, point8);
      const y6 = pos.y - (node2.y ?? 0);
      if (ry != 0 && (Math.abs(y6) < (node2.height ?? 0) / 2 || Math.abs(y6) == (node2.height ?? 0) / 2 && Math.abs(pos.x - (node2.x ?? 0)) > (node2.width ?? 0) / 2 - rx)) {
        let x5 = rx * rx * (1 - y6 * y6 / (ry * ry));
        if (x5 != 0) {
          x5 = Math.sqrt(Math.abs(x5));
        }
        x5 = rx - x5;
        if (point8.x - (node2.x ?? 0) > 0) {
          x5 = -x5;
        }
        pos.x += x5;
      }
      return pos;
    };
    return shapeSvg;
  }
  var createCylinderPathD3, createOuterCylinderPathD3, createInnerCylinderPathD3, MIN_HEIGHT4, MIN_WIDTH4;
  var init_tiltedCylinder = __esm({
    "src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts"() {
      "use strict";
      init_util();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_intersect();
      init_utils2();
      createCylinderPathD3 = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry) => {
        return `M${x5},${y6}
    a${rx},${ry} 0,0,1 ${0},${-height2}
    l${width3},${0}
    a${rx},${ry} 0,0,1 ${0},${height2}
    M${width3},${-height2}
    a${rx},${ry} 0,0,0 ${0},${height2}
    l${-width3},${0}`;
      }, "createCylinderPathD");
      createOuterCylinderPathD3 = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry) => {
        return [
          `M${x5},${y6}`,
          `M${x5 + width3},${y6}`,
          `a${rx},${ry} 0,0,0 ${0},${-height2}`,
          `l${-width3},0`,
          `a${rx},${ry} 0,0,0 ${0},${height2}`,
          `l${width3},0`
        ].join(" ");
      }, "createOuterCylinderPathD");
      createInnerCylinderPathD3 = /* @__PURE__ */ __name((x5, y6, width3, height2, rx, ry) => {
        return [`M${x5 + width3 / 2},${-height2 / 2}`, `a${rx},${ry} 0,0,0 0,${height2}`].join(" ");
      }, "createInnerCylinderPathD");
      MIN_HEIGHT4 = 5;
      MIN_WIDTH4 = 10;
      __name(tiltedCylinder, "tiltedCylinder");
    }
  });

  // src/rendering-util/rendering-elements/shapes/trapezoid.ts
  async function trapezoid(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingY = node2.look === "neo" ? nodePadding : nodePadding;
    const labelPaddingX = node2.look === "neo" ? nodePadding * 2 : nodePadding;
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const h3 = (node2?.height ?? bbox.height) + labelPaddingY;
    const w4 = (node2?.width ?? bbox.width) + labelPaddingX;
    const points = [
      { x: -3 * h3 / 6, y: 0 },
      { x: w4 + 3 * h3 / 6, y: 0 },
      { x: w4, y: -h3 },
      { x: 0, y: -h3 }
    ];
    let polygon2;
    const { cssStyles } = node2;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const pathData = createPathFromPoints(points);
      const roughNode = rc.path(pathData, options2);
      polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w4 / 2}, ${h3 / 2})`);
      if (cssStyles) {
        polygon2.attr("style", cssStyles);
      }
    } else {
      polygon2 = insertPolygonShape(shapeSvg, w4, h3, points);
    }
    if (nodeStyles) {
      polygon2.attr("style", nodeStyles);
    }
    node2.width = w4;
    node2.height = h3;
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var init_trapezoid = __esm({
    "src/rendering-util/rendering-elements/shapes/trapezoid.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_insertPolygonShape();
      __name(trapezoid, "trapezoid");
    }
  });

  // src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts
  async function trapezoidalPentagon(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    const minWidth = 15, minHeight = 5;
    if (node2.width || node2.height) {
      node2.height = (node2.height ?? 0) - labelPaddingY * 2;
      if (node2.height < minHeight) {
        node2.height = minHeight;
      }
      node2.width = (node2.width ?? 0) - labelPaddingX * 2;
      if (node2.width < minWidth) {
        node2.width = minWidth;
      }
    }
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ? node2?.width : bbox.width) + labelPaddingX * 2;
    const h3 = (node2?.height ? node2?.height : bbox.height) + labelPaddingY * 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: -w4 / 2 * 0.8, y: -h3 / 2 },
      { x: w4 / 2 * 0.8, y: -h3 / 2 },
      { x: w4 / 2, y: -h3 / 2 * 0.6 },
      { x: w4 / 2, y: h3 / 2 },
      { x: -w4 / 2, y: h3 / 2 },
      { x: -w4 / 2, y: -h3 / 2 * 0.6 }
    ];
    const pathData = createPathFromPoints(points);
    const shapeNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child");
    polygon2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, polygon2);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_trapezoidalPentagon = __esm({
    "src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(trapezoidalPentagon, "trapezoidalPentagon");
    }
  });

  // src/rendering-util/rendering-elements/shapes/triangle.ts
  async function triangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? nodePadding * 2 : nodePadding;
    if (node2.width || node2.height) {
      node2.width = ((node2?.width ?? 0) - labelPaddingX) / 2;
      if (node2.width < MIN_WIDTH5) {
        node2.width = MIN_WIDTH5;
      }
      node2.height = node2?.height ?? 0;
      if (node2.height < MIN_HEIGHT5) {
        node2.height = MIN_HEIGHT5;
      }
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const useHtmlLabels = evaluate(getConfig2().flowchart?.htmlLabels);
    const w4 = (node2?.width ? node2?.width : bbox.width) + labelPaddingX;
    const h3 = node2?.height ? node2?.height : w4 + bbox.height;
    const tw = h3;
    const points = [
      { x: 0, y: 0 },
      { x: tw, y: 0 },
      { x: tw / 2, y: -h3 }
    ];
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const pathData = createPathFromPoints(points);
    const roughNode = rc.path(pathData, options2);
    const polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-h3 / 2}, ${h3 / 2})`).attr("class", "outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      polygon2.selectChildren("path").attr("style", nodeStyles);
    }
    node2.width = w4;
    node2.height = h3;
    updateNodeBounds(node2, polygon2);
    label.attr(
      "transform",
      `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h3 / 2 - (bbox.height + (node2.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`
    );
    node2.intersect = function(point8) {
      log.info("Triangle intersect", node2, points, point8);
      return intersect_default.polygon(node2, points, point8);
    };
    return shapeSvg;
  }
  var MIN_HEIGHT5, MIN_WIDTH5;
  var init_triangle = __esm({
    "src/rendering-util/rendering-elements/shapes/triangle.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_util();
      init_common();
      init_diagramAPI();
      MIN_HEIGHT5 = 10;
      MIN_WIDTH5 = 10;
      __name(triangle, "triangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts
  async function waveEdgedRectangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 12 : nodePadding;
    let adjustFinalHeight = true;
    if (node2.width || node2.height) {
      adjustFinalHeight = false;
      node2.width = (node2?.width ?? 0) - labelPaddingX * 2;
      if (node2.width < 10) {
        node2.width = 10;
      }
      node2.height = (node2?.height ?? 0) - labelPaddingY * 2;
      if (node2.height < 10) {
        node2.height = 10;
      }
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ? node2?.width : bbox.width) + (labelPaddingX ?? 0) * 2;
    const h3 = (node2?.height ? node2?.height : bbox.height) + (labelPaddingY ?? 0) * 2;
    const waveAmplitude = node2.look === "neo" ? h3 / 4 : h3 / 8;
    const finalH = h3 + (adjustFinalHeight ? waveAmplitude : -waveAmplitude);
    const { cssStyles } = node2;
    const minWidth = 14;
    const widthDif = minWidth - w4;
    const extraW = widthDif > 0 ? widthDif / 2 : 0;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: -w4 / 2 - extraW, y: finalH / 2 },
      ...generateFullSineWavePoints(
        -w4 / 2 - extraW,
        finalH / 2,
        w4 / 2 + extraW,
        finalH / 2,
        waveAmplitude,
        0.8
      ),
      { x: w4 / 2 + extraW, y: -finalH / 2 },
      { x: -w4 / 2 - extraW, y: -finalH / 2 }
    ];
    const waveEdgeRectPath = createPathFromPoints(points);
    const waveEdgeRectNode = rc.path(waveEdgeRectPath, options2);
    const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, ":first-child");
    waveEdgeRect.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      waveEdgeRect.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      waveEdgeRect.selectAll("path").attr("style", nodeStyles);
    }
    waveEdgeRect.attr("transform", `translate(0,${-waveAmplitude / 2})`);
    label.attr(
      "transform",
      `translate(${-w4 / 2 + (node2.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h3 / 2 + (node2.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, waveEdgeRect);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_waveEdgedRectangle = __esm({
    "src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_rough_esm();
      init_handDrawnShapeStyles();
      __name(waveEdgedRectangle, "waveEdgedRectangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/waveRectangle.ts
  async function waveRectangle(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const nodePadding = node2.padding ?? 0;
    const labelPaddingX = node2.look === "neo" ? 16 : nodePadding;
    const labelPaddingY = node2.look === "neo" ? 20 : nodePadding;
    if (node2.width || node2.height) {
      node2.width = node2?.width ?? 0;
      if (node2.width < 20) {
        node2.width = 20;
      }
      node2.height = node2?.height ?? 0;
      if (node2.height < 10) {
        node2.height = 10;
      }
      const waveAmplitude2 = Math.min(node2.height * 0.2, node2.height / 4);
      node2.height = Math.ceil(node2.height - labelPaddingY - waveAmplitude2 * (20 / 9));
      node2.width = node2.width - labelPaddingX * 2;
    }
    const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const w4 = (node2?.width ? node2?.width : bbox.width) + labelPaddingX * 2;
    const h3 = (node2?.height ? node2?.height : bbox.height) + labelPaddingY;
    const waveAmplitude = h3 / 8;
    const finalH = h3 + waveAmplitude * 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const points = [
      { x: -w4 / 2, y: finalH / 2 },
      ...generateFullSineWavePoints(-w4 / 2, finalH / 2, w4 / 2, finalH / 2, waveAmplitude, 1),
      { x: w4 / 2, y: -finalH / 2 },
      ...generateFullSineWavePoints(w4 / 2, -finalH / 2, -w4 / 2, -finalH / 2, waveAmplitude, -1)
    ];
    const waveRectPath = createPathFromPoints(points);
    const waveRectNode = rc.path(waveRectPath, options2);
    const waveRect = shapeSvg.insert(() => waveRectNode, ":first-child");
    waveRect.attr("class", "basic label-container");
    if (cssStyles && node2.look !== "handDrawn") {
      waveRect.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      waveRect.selectAll("path").attr("style", nodeStyles);
    }
    updateNodeBounds(node2, waveRect);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, points, point8);
      return pos;
    };
    return shapeSvg;
  }
  var init_waveRectangle = __esm({
    "src/rendering-util/rendering-elements/shapes/waveRectangle.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      __name(waveRectangle, "waveRectangle");
    }
  });

  // src/rendering-util/rendering-elements/shapes/windowPane.ts
  async function windowPane(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const paddingX = node2.look === "neo" ? 16 : node2.padding ?? 0;
    const paddingY = node2.look === "neo" ? 12 : node2.padding ?? 0;
    if (node2.width || node2.height) {
      node2.width = Math.max((node2?.width ?? 0) - paddingX * 2 - rectOffset, 10);
      node2.height = Math.max((node2?.height ?? 0) - paddingY * 2 - rectOffset, 10);
    }
    const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2));
    const totalWidth = (node2?.width ? node2?.width : bbox.width) + paddingX * 2 + rectOffset;
    const totalHeight = (node2?.height ? node2?.height : bbox.height) + paddingY * 2 + rectOffset;
    const w4 = totalWidth - rectOffset;
    const h3 = totalHeight - rectOffset;
    const x5 = -w4 / 2;
    const y6 = -h3 / 2;
    const { cssStyles } = node2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    const outerPathPoints = [
      { x: x5 - rectOffset, y: y6 - rectOffset },
      { x: x5 - rectOffset, y: y6 + h3 },
      { x: x5 + w4, y: y6 + h3 },
      { x: x5 + w4, y: y6 - rectOffset }
    ];
    const path4 = `M${x5 - rectOffset},${y6 - rectOffset} L${x5 + w4},${y6 - rectOffset} L${x5 + w4},${y6 + h3} L${x5 - rectOffset},${y6 + h3} L${x5 - rectOffset},${y6 - rectOffset}
                M${x5 - rectOffset},${y6} L${x5 + w4},${y6}
                M${x5},${y6 - rectOffset} L${x5},${y6 + h3}`;
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const no = rc.path(path4, options2);
    const windowPane2 = shapeSvg.insert(() => no, ":first-child");
    windowPane2.attr("transform", `translate(${rectOffset / 2}, ${rectOffset / 2})`);
    windowPane2.attr("class", "basic label-container outer-path");
    if (cssStyles && node2.look !== "handDrawn") {
      windowPane2.selectAll("path").attr("style", cssStyles);
    }
    if (nodeStyles && node2.look !== "handDrawn") {
      windowPane2.selectAll("path").attr("style", nodeStyles);
    }
    label.attr(
      "transform",
      `translate(${-(bbox.width / 2) + rectOffset / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset / 2 - (bbox.y - (bbox.top ?? 0))})`
    );
    updateNodeBounds(node2, windowPane2);
    node2.intersect = function(point8) {
      const pos = intersect_default.polygon(node2, outerPathPoints, point8);
      return pos;
    };
    return shapeSvg;
  }
  var rectOffset;
  var init_windowPane = __esm({
    "src/rendering-util/rendering-elements/shapes/windowPane.ts"() {
      "use strict";
      init_util();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_intersect();
      rectOffset = 10;
      __name(windowPane, "windowPane");
    }
  });

  // src/rendering-util/rendering-elements/shapes/erBox.ts
  async function erBox(parent4, node2) {
    const entityNode = node2;
    if (entityNode.alias) {
      node2.label = entityNode.alias;
    }
    const { theme, themeVariables } = getConfig();
    const { rowEven, rowOdd, nodeBorder, borderColorArray } = themeVariables;
    if (node2.look === "handDrawn") {
      const { themeVariables: themeVariables2 } = getConfig();
      const { background } = themeVariables2;
      const backgroundNode = {
        ...node2,
        id: node2.id + "-background",
        domId: (node2.domId || node2.id) + "-background",
        look: "default",
        cssStyles: ["stroke: none", `fill: ${background}`]
      };
      await erBox(parent4, backgroundNode);
    }
    const config3 = getConfig();
    node2.useHtmlLabels = config3.htmlLabels;
    let PADDING = config3.er?.diagramPadding ?? 10;
    let TEXT_PADDING = config3.er?.entityPadding ?? 6;
    const { cssStyles } = node2;
    const { labelStyles, nodeStyles } = styles2String(node2);
    if (entityNode.attributes.length === 0 && node2.label) {
      const options3 = {
        rx: 0,
        ry: 0,
        labelPaddingX: PADDING,
        labelPaddingY: PADDING * 1.5,
        classes: ""
      };
      if (calculateTextWidth(node2.label, config3) + options3.labelPaddingX * 2 < config3.er.minEntityWidth) {
        node2.width = config3.er.minEntityWidth;
      }
      const shapeSvg2 = await drawRect3(parent4, node2, options3);
      if (theme != null && COLOR_THEMES.has(theme)) {
        const colorIndex = entityNode.colorIndex ?? 0;
        shapeSvg2.attr("data-color-id", `color-${colorIndex % borderColorArray.length}`);
      }
      if (!evaluate(config3.htmlLabels)) {
        const textElement = shapeSvg2.select("text");
        const bbox = textElement.node()?.getBBox();
        textElement.attr("transform", `translate(${-bbox.width / 2}, 0)`);
      }
      return shapeSvg2;
    }
    if (!config3.htmlLabels) {
      PADDING *= 1.25;
      TEXT_PADDING *= 1.25;
    }
    let cssClasses = getNodeClasses(node2);
    if (!cssClasses) {
      cssClasses = "node default";
    }
    const shapeSvg = parent4.insert("g").attr("class", cssClasses).attr("id", node2.domId || node2.id);
    const nameBBox = await addText(shapeSvg, node2.label ?? "", config3, 0, 0, ["name"], labelStyles);
    nameBBox.height += TEXT_PADDING;
    let yOffset = 0;
    const yOffsets = [];
    const rows = [];
    let maxTypeWidth = 0;
    let maxNameWidth = 0;
    let maxKeysWidth = 0;
    let maxCommentWidth = 0;
    let keysPresent = true;
    let commentPresent = true;
    for (const attribute of entityNode.attributes) {
      const typeBBox = await addText(
        shapeSvg,
        attribute.type,
        config3,
        0,
        yOffset,
        ["attribute-type"],
        labelStyles
      );
      maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width + PADDING);
      const nameBBox2 = await addText(
        shapeSvg,
        attribute.name,
        config3,
        0,
        yOffset,
        ["attribute-name"],
        labelStyles
      );
      maxNameWidth = Math.max(maxNameWidth, nameBBox2.width + PADDING);
      const keysBBox = await addText(
        shapeSvg,
        attribute.keys.join(),
        config3,
        0,
        yOffset,
        ["attribute-keys"],
        labelStyles
      );
      maxKeysWidth = Math.max(maxKeysWidth, keysBBox.width + PADDING);
      const commentBBox = await addText(
        shapeSvg,
        attribute.comment,
        config3,
        0,
        yOffset,
        ["attribute-comment"],
        labelStyles
      );
      maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING);
      const rowHeight = Math.max(typeBBox.height, nameBBox2.height, keysBBox.height, commentBBox.height) + TEXT_PADDING;
      rows.push({ yOffset, rowHeight });
      yOffset += rowHeight;
    }
    let totalWidthSections = 4;
    if (maxKeysWidth <= PADDING) {
      keysPresent = false;
      maxKeysWidth = 0;
      totalWidthSections--;
    }
    if (maxCommentWidth <= PADDING) {
      commentPresent = false;
      maxCommentWidth = 0;
      totalWidthSections--;
    }
    const shapeBBox = shapeSvg.node().getBBox();
    if (nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth) > 0) {
      const difference2 = nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth);
      maxTypeWidth += difference2 / totalWidthSections;
      maxNameWidth += difference2 / totalWidthSections;
      if (maxKeysWidth > 0) {
        maxKeysWidth += difference2 / totalWidthSections;
      }
      if (maxCommentWidth > 0) {
        maxCommentWidth += difference2 / totalWidthSections;
      }
    }
    const maxWidth2 = maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    let totalShapeBBoxHeight = 0;
    if (rows.length > 0) {
      totalShapeBBoxHeight = rows.reduce((sum2, row) => sum2 + (row?.rowHeight ?? 0), 0);
    }
    const w4 = Math.max(shapeBBox.width + PADDING * 2, node2?.width || 0, maxWidth2);
    const h3 = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node2?.height || 0);
    const x5 = -w4 / 2;
    const y6 = -h3 / 2;
    shapeSvg.selectAll("g:not(:first-child)").each((_3, i2, nodes5) => {
      const text4 = select_default2(nodes5[i2]);
      const transform8 = text4.attr("transform");
      let translateX2 = 0;
      let translateY2 = 0;
      if (transform8) {
        const regex2 = RegExp(/translate\(([^,]+),([^)]+)\)/);
        const translate2 = regex2.exec(transform8);
        if (translate2) {
          translateX2 = parseFloat(translate2[1]);
          translateY2 = parseFloat(translate2[2]);
          if (text4.attr("class").includes("attribute-name")) {
            translateX2 += maxTypeWidth;
          } else if (text4.attr("class").includes("attribute-keys")) {
            translateX2 += maxTypeWidth + maxNameWidth;
          } else if (text4.attr("class").includes("attribute-comment")) {
            translateX2 += maxTypeWidth + maxNameWidth + maxKeysWidth;
          }
        }
      }
      text4.attr(
        "transform",
        `translate(${x5 + PADDING / 2 + translateX2}, ${translateY2 + y6 + nameBBox.height + TEXT_PADDING / 2})`
      );
    });
    shapeSvg.select(".name").attr("transform", "translate(" + -nameBBox.width / 2 + ", " + (y6 + TEXT_PADDING / 2) + ")");
    if (theme != null && COLOR_THEMES.has(theme)) {
      const colorIndex = entityNode.colorIndex ?? 0;
      shapeSvg.attr("data-color-id", `color-${colorIndex % borderColorArray.length}`);
    }
    const roughRect = rc.rectangle(x5, y6, w4, h3, options2);
    const rect3 = shapeSvg.insert(() => roughRect, ":first-child").attr("class", "outer-path").attr("style", cssStyles.join(""));
    yOffsets.push(0);
    for (const [i2, row] of rows.entries()) {
      const contentRowIndex = i2 + 1;
      const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0;
      const roughRect2 = rc.rectangle(x5, nameBBox.height + y6 + row?.yOffset, w4, row?.rowHeight, {
        ...options2,
        fill: isEven ? rowEven : rowOdd,
        stroke: nodeBorder
      });
      shapeSvg.insert(() => roughRect2, "g.label").attr("style", cssStyles.join("")).attr("class", `row-rect-${isEven ? "even" : "odd"}`);
    }
    const thickness = 1e-4;
    let points = lineToPolygon(x5, nameBBox.height + y6, w4 + x5, nameBBox.height + y6, thickness);
    let roughLine = rc.polygon(
      points.map((p3) => [p3.x, p3.y]),
      options2
    );
    shapeSvg.insert(() => roughLine).attr("class", "divider");
    points = lineToPolygon(maxTypeWidth + x5, nameBBox.height + y6, maxTypeWidth + x5, h3 + y6, thickness);
    roughLine = rc.polygon(
      points.map((p3) => [p3.x, p3.y]),
      options2
    );
    shapeSvg.insert(() => roughLine).attr("class", "divider");
    if (keysPresent) {
      const xCoord = maxTypeWidth + maxNameWidth + x5;
      points = lineToPolygon(xCoord, nameBBox.height + y6, xCoord, h3 + y6, thickness);
      roughLine = rc.polygon(
        points.map((p3) => [p3.x, p3.y]),
        options2
      );
      shapeSvg.insert(() => roughLine).attr("class", "divider");
    }
    if (commentPresent) {
      const xCoord = maxTypeWidth + maxNameWidth + maxKeysWidth + x5;
      points = lineToPolygon(xCoord, nameBBox.height + y6, xCoord, h3 + y6, thickness);
      roughLine = rc.polygon(
        points.map((p3) => [p3.x, p3.y]),
        options2
      );
      shapeSvg.insert(() => roughLine).attr("class", "divider");
    }
    for (const yOffset2 of yOffsets) {
      const yCoord = nameBBox.height + y6 + yOffset2;
      points = lineToPolygon(x5, yCoord, w4 + x5, yCoord, thickness);
      roughLine = rc.polygon(
        points.map((p3) => [p3.x, p3.y]),
        options2
      );
      shapeSvg.insert(() => roughLine).attr("class", "divider");
    }
    updateNodeBounds(node2, rect3);
    if (nodeStyles && node2.look !== "handDrawn") {
      if (theme != null && REDUX_THEMES.has(theme)) {
        shapeSvg.selectAll("path").attr("style", nodeStyles);
      } else {
        const allStyle = nodeStyles.split(";");
        const strokeStyles = allStyle?.filter((e3) => {
          return e3.includes("stroke");
        })?.map((s2) => `${s2}`).join("; ");
        shapeSvg.selectAll("path").attr("style", strokeStyles ?? "");
        shapeSvg.selectAll(".row-rect-even path").attr("style", nodeStyles);
      }
    }
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  async function addText(shapeSvg, labelText, config3, translateX2 = 0, translateY2 = 0, classes3 = [], style3 = "") {
    const label = shapeSvg.insert("g").attr("class", `label ${classes3.join(" ")}`).attr("transform", `translate(${translateX2}, ${translateY2})`).attr("style", style3);
    if (labelText !== parseGenericTypes(labelText)) {
      labelText = parseGenericTypes(labelText);
      labelText = labelText.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
    }
    const text4 = label.node().appendChild(
      await createText(
        label,
        labelText,
        {
          width: calculateTextWidth(labelText, config3) + 100,
          style: style3,
          useHtmlLabels: config3.htmlLabels
        },
        config3
      )
    );
    if (labelText.includes("&lt;") || labelText.includes("&gt;")) {
      let child = text4.children[0];
      child.textContent = child.textContent.replaceAll("&lt;", "<").replaceAll("&gt;", ">");
      while (child.childNodes[0]) {
        child = child.childNodes[0];
        child.textContent = child.textContent.replaceAll("&lt;", "<").replaceAll("&gt;", ">");
      }
    }
    let bbox = text4.getBBox();
    if (evaluate(config3.htmlLabels)) {
      const div = text4.children[0];
      div.style.textAlign = "start";
      const dv = select_default2(text4);
      bbox = div.getBoundingClientRect();
      dv.attr("width", bbox.width);
      dv.attr("height", bbox.height);
    }
    return bbox;
  }
  function lineToPolygon(x1, y1, x22, y22, thickness) {
    if (x1 === x22) {
      return [
        { x: x1 - thickness / 2, y: y1 },
        { x: x1 + thickness / 2, y: y1 },
        { x: x22 + thickness / 2, y: y22 },
        { x: x22 - thickness / 2, y: y22 }
      ];
    }
    return [
      { x: x1, y: y1 - thickness / 2 },
      { x: x1, y: y1 + thickness / 2 },
      { x: x22, y: y22 + thickness / 2 },
      { x: x22, y: y22 - thickness / 2 }
    ];
  }
  var COLOR_THEMES, REDUX_THEMES;
  var init_erBox = __esm({
    "src/rendering-util/rendering-elements/shapes/erBox.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_drawRect();
      init_config();
      init_createText();
      init_common();
      init_src32();
      init_utils2();
      COLOR_THEMES = /* @__PURE__ */ new Set(["redux-color", "redux-dark-color"]);
      REDUX_THEMES = /* @__PURE__ */ new Set(["redux", "redux-dark", "redux-color", "redux-dark-color"]);
      __name(erBox, "erBox");
      __name(addText, "addText");
      __name(lineToPolygon, "lineToPolygon");
    }
  });

  // src/diagrams/class/shapeUtil.ts
  async function textHelper(parent4, node2, config3, useHtmlLabels, GAP = config3.class.padding ?? 12) {
    const TEXT_PADDING = !useHtmlLabels ? 3 : 0;
    const shapeSvg = parent4.insert("g").attr("class", getNodeClasses(node2)).attr("id", node2.domId || node2.id);
    let annotationGroup = null;
    let labelGroup = null;
    let membersGroup = null;
    let methodsGroup = null;
    let annotationGroupHeight = 0;
    let labelGroupHeight = 0;
    let membersGroupHeight = 0;
    annotationGroup = shapeSvg.insert("g").attr("class", "annotation-group text");
    if (node2.annotations.length > 0) {
      const annotation = node2.annotations[0];
      await addText2(annotationGroup, { text: `\xAB${annotation}\xBB` }, 0);
      const annotationGroupBBox = annotationGroup.node().getBBox();
      annotationGroupHeight = annotationGroupBBox.height;
    }
    labelGroup = shapeSvg.insert("g").attr("class", "label-group text");
    await addText2(labelGroup, node2, 0, ["font-weight: bolder"]);
    const labelGroupBBox = labelGroup.node().getBBox();
    labelGroupHeight = labelGroupBBox.height;
    membersGroup = shapeSvg.insert("g").attr("class", "members-group text");
    let yOffset = 0;
    for (const member of node2.members) {
      const height2 = await addText2(membersGroup, member, yOffset, [member.parseClassifier()]);
      yOffset += height2 + TEXT_PADDING;
    }
    membersGroupHeight = membersGroup.node().getBBox().height;
    if (membersGroupHeight <= 0) {
      membersGroupHeight = GAP / 2;
    }
    methodsGroup = shapeSvg.insert("g").attr("class", "methods-group text");
    let methodsYOffset = 0;
    for (const method of node2.methods) {
      const height2 = await addText2(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);
      methodsYOffset += height2 + TEXT_PADDING;
    }
    let bbox = shapeSvg.node().getBBox();
    if (annotationGroup !== null) {
      const annotationGroupBBox = annotationGroup.node().getBBox();
      annotationGroup.attr("transform", `translate(${-annotationGroupBBox.width / 2})`);
    }
    labelGroup.attr("transform", `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);
    bbox = shapeSvg.node().getBBox();
    membersGroup.attr(
      "transform",
      `translate(${0}, ${annotationGroupHeight + labelGroupHeight + GAP * 2})`
    );
    bbox = shapeSvg.node().getBBox();
    methodsGroup.attr(
      "transform",
      `translate(${0}, ${annotationGroupHeight + labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 4 : GAP * 2)})`
    );
    bbox = shapeSvg.node().getBBox();
    return { shapeSvg, bbox };
  }
  async function addText2(parentGroup, node2, yOffset, styles7 = []) {
    const textEl = parentGroup.insert("g").attr("class", "label").attr("style", styles7.join("; "));
    const config3 = getConfig();
    let useHtmlLabels = "useHtmlLabels" in node2 ? node2.useHtmlLabels : evaluate(config3.htmlLabels) ?? true;
    let textContent = "";
    if ("text" in node2) {
      textContent = node2.text;
    } else {
      textContent = node2.label;
    }
    if (!useHtmlLabels && textContent.startsWith("\\")) {
      textContent = textContent.substring(1);
    }
    if (hasKatex(textContent)) {
      useHtmlLabels = true;
    }
    const text4 = await createText(
      textEl,
      sanitizeText3(decodeEntities(textContent)),
      {
        width: calculateTextWidth(textContent, config3) + 50,
        // Add room for error when splitting text into multiple lines
        classes: "markdown-node-label",
        useHtmlLabels
      },
      config3
    );
    let bbox;
    let numberOfLines = 1;
    if (!useHtmlLabels) {
      if (styles7.includes("font-weight: bolder")) {
        select_default2(text4).selectAll("tspan").attr("font-weight", "");
      }
      numberOfLines = text4.children.length;
      const textChild = text4.children[0];
      if (text4.textContent === "" || text4.textContent.includes("&gt")) {
        textChild.textContent = textContent[0] + textContent.substring(1).replaceAll("&gt;", ">").replaceAll("&lt;", "<").trim();
        const preserveSpace = textContent[1] === " ";
        if (preserveSpace) {
          textChild.textContent = textChild.textContent[0] + " " + textChild.textContent.substring(1);
        }
      }
      if (textChild.textContent === "undefined") {
        textChild.textContent = "";
      }
      bbox = text4.getBBox();
    } else {
      const div = text4.children[0];
      const dv = select_default2(text4);
      numberOfLines = div.innerHTML.split("<br>").length;
      if (div.innerHTML.includes("</math>")) {
        numberOfLines += div.innerHTML.split("<mrow>").length - 1;
      }
      const images = div.getElementsByTagName("img");
      if (images) {
        const noImgText = textContent.replace(/<img[^>]*>/g, "").trim() === "";
        await Promise.all(
          [...images].map(
            (img) => new Promise((res) => {
              function setupImage() {
                img.style.display = "flex";
                img.style.flexDirection = "column";
                if (noImgText) {
                  const bodyFontSize = config3.fontSize?.toString() ?? window.getComputedStyle(document.body).fontSize;
                  const enlargingFactor = 5;
                  const width3 = parseInt(bodyFontSize, 10) * enlargingFactor + "px";
                  img.style.minWidth = width3;
                  img.style.maxWidth = width3;
                } else {
                  img.style.width = "100%";
                }
                res(img);
              }
              __name(setupImage, "setupImage");
              setTimeout(() => {
                if (img.complete) {
                  setupImage();
                }
              });
              img.addEventListener("error", setupImage);
              img.addEventListener("load", setupImage);
            })
          )
        );
      }
      bbox = div.getBoundingClientRect();
      dv.attr("width", bbox.width);
      dv.attr("height", bbox.height);
    }
    textEl.attr("transform", "translate(0," + (-bbox.height / (2 * numberOfLines) + yOffset) + ")");
    return bbox.height;
  }
  var init_shapeUtil = __esm({
    "src/diagrams/class/shapeUtil.ts"() {
      "use strict";
      init_src32();
      init_config();
      init_util();
      init_utils2();
      init_diagramAPI();
      init_createText();
      init_common();
      __name(textHelper, "textHelper");
      __name(addText2, "addText");
    }
  });

  // src/rendering-util/rendering-elements/shapes/classBox.ts
  async function classBox(parent4, node2) {
    const config3 = getConfig2();
    const { themeVariables } = config3;
    const { useGradient } = themeVariables;
    const PADDING = config3.class.padding ?? 12;
    const GAP = PADDING;
    const useHtmlLabels = node2.useHtmlLabels ?? evaluate(config3.htmlLabels) ?? true;
    const classNode = node2;
    classNode.annotations = classNode.annotations ?? [];
    classNode.members = classNode.members ?? [];
    classNode.methods = classNode.methods ?? [];
    const { shapeSvg, bbox } = await textHelper(parent4, node2, config3, useHtmlLabels, GAP);
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    node2.cssStyles = classNode.styles || "";
    const styles7 = classNode.styles?.join(";") || nodeStyles || "";
    if (!node2.cssStyles) {
      node2.cssStyles = styles7.replaceAll("!important", "").split(";");
    }
    const renderExtraBox = classNode.members.length === 0 && classNode.methods.length === 0 && !config3.class?.hideEmptyMembersBox;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const w4 = Math.max(node2.width ?? 0, bbox.width);
    let h3 = Math.max(node2.height ?? 0, bbox.height);
    const nodeHeightGreater = (node2.height ?? 0) > bbox.height;
    if (classNode.members.length === 0 && classNode.methods.length === 0) {
      h3 += GAP;
    } else if (classNode.members.length > 0 && classNode.methods.length === 0) {
      h3 += GAP * 2;
    }
    const x5 = -w4 / 2;
    const y6 = -h3 / 2;
    let extraHeight = renderExtraBox ? PADDING * 2 : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING : 0;
    if (nodeHeightGreater) {
      extraHeight = PADDING * 2;
    }
    const roughRect = rc.rectangle(
      x5 - PADDING,
      y6 - PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0),
      w4 + 2 * PADDING,
      h3 + 2 * PADDING + extraHeight,
      options2
    );
    const rect3 = shapeSvg.insert(() => roughRect, ":first-child");
    rect3.attr("class", "basic label-container outer-path");
    const rectBBox = rect3.node().getBBox();
    const annotationGroupHeight = shapeSvg.select(".annotation-group").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;
    const labelGroupHeight = shapeSvg.select(".label-group").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;
    const membersGroupHeight = shapeSvg.select(".members-group").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;
    const methodsAreaPlacement = (annotationGroupHeight + labelGroupHeight + y6 + PADDING - (y6 - PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0))) / 2;
    shapeSvg.selectAll(".text").each((_3, i2, nodes5) => {
      const text4 = select_default2(nodes5[i2]);
      const transform8 = text4.attr("transform");
      let translateY2 = 0;
      if (transform8) {
        const regex2 = RegExp(/translate\(([^,]+),([^)]+)\)/);
        const translate2 = regex2.exec(transform8);
        if (translate2) {
          translateY2 = parseFloat(translate2[2]);
        }
      }
      let newTranslateY = translateY2 + y6 + PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0);
      if (text4.attr("class").includes("methods-group")) {
        const membersGroupHeightForMethods = Math.max(membersGroupHeight, GAP / 2);
        if (nodeHeightGreater) {
          newTranslateY = Math.max(
            methodsAreaPlacement,
            annotationGroupHeight + labelGroupHeight + membersGroupHeightForMethods + y6 + GAP * 2 + PADDING
          ) + GAP * 2;
        } else {
          newTranslateY = annotationGroupHeight + labelGroupHeight + membersGroupHeightForMethods + y6 + GAP * 4 + PADDING;
        }
      }
      if (classNode.members.length === 0 && classNode.methods.length === 0 && config3.class?.hideEmptyMembersBox) {
        if (classNode.annotations.length > 0) {
          newTranslateY = translateY2 - GAP;
        } else {
          newTranslateY = translateY2;
        }
      }
      if (!useHtmlLabels) {
        newTranslateY -= 4;
      }
      let newTranslateX = x5;
      if (text4.attr("class").includes("label-group") || text4.attr("class").includes("annotation-group")) {
        newTranslateX = -text4.node()?.getBBox().width / 2 || 0;
        shapeSvg.selectAll("text").each(function(_4, i3, nodes6) {
          if (window.getComputedStyle(nodes6[i3]).textAnchor === "middle") {
            newTranslateX = 0;
          }
        });
      }
      text4.attr("transform", `translate(${newTranslateX}, ${newTranslateY})`);
    });
    if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) {
      const firstLineY = annotationGroupHeight + labelGroupHeight + y6 + PADDING;
      const roughLine = rc.line(
        rectBBox.x,
        firstLineY,
        rectBBox.x + rectBBox.width,
        firstLineY + 1e-3,
        options2
      );
      const line2 = shapeSvg.insert(() => roughLine);
      line2.attr("class", `divider${node2.look === "neo" && !useGradient ? " neo-line" : ""}`).attr("style", styles7);
    }
    if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) {
      const secondLineY = annotationGroupHeight + labelGroupHeight + membersGroupHeight + y6 + GAP * 2 + PADDING;
      const roughLine = rc.line(
        rectBBox.x,
        nodeHeightGreater ? Math.max(methodsAreaPlacement, secondLineY) : secondLineY,
        rectBBox.x + rectBBox.width,
        (nodeHeightGreater ? Math.max(methodsAreaPlacement, secondLineY) : secondLineY) + 1e-3,
        options2
      );
      const line2 = shapeSvg.insert(() => roughLine);
      line2.attr("class", `divider${node2.look === "neo" && !useGradient ? " neo-line" : ""}`).attr("style", styles7);
    }
    if (classNode.look !== "handDrawn") {
      shapeSvg.selectAll("path").attr("style", styles7);
    }
    rect3.select(":nth-child(2)").attr("style", styles7);
    shapeSvg.selectAll(".divider").select("path").attr("style", styles7);
    if (node2.labelStyle) {
      shapeSvg.selectAll("span").attr("style", node2.labelStyle);
    } else {
      shapeSvg.selectAll("span").attr("style", styles7);
    }
    if (!useHtmlLabels) {
      const colorRegex = RegExp(/color\s*:\s*([^;]*)/);
      const match3 = colorRegex.exec(styles7);
      if (match3) {
        const colorStyle = match3[0].replace("color", "fill");
        shapeSvg.selectAll("tspan").attr("style", colorStyle);
      } else if (labelStyles) {
        const match4 = colorRegex.exec(labelStyles);
        if (match4) {
          const colorStyle = match4[0].replace("color", "fill");
          shapeSvg.selectAll("tspan").attr("style", colorStyle);
        }
      }
    }
    updateNodeBounds(node2, rect3);
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_classBox = __esm({
    "src/rendering-util/rendering-elements/shapes/classBox.ts"() {
      "use strict";
      init_util();
      init_diagramAPI();
      init_src32();
      init_rough_esm();
      init_handDrawnShapeStyles();
      init_intersect();
      init_shapeUtil();
      init_common();
      __name(classBox, "classBox");
    }
  });

  // src/rendering-util/rendering-elements/shapes/requirementBox.ts
  async function requirementBox(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const requirementNode = node2;
    const elementNode = node2;
    const padding = 20;
    const gap = 20;
    const isRequirementNode = "verifyMethod" in node2;
    const classes3 = getNodeClasses(node2);
    const { themeVariables } = getConfig2();
    const { borderColorArray, requirementEdgeLabelBackground } = themeVariables;
    const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId ?? node2.id);
    let typeHeight;
    if (isRequirementNode) {
      typeHeight = await addText3(
        shapeSvg,
        `&lt;&lt;${requirementNode.type}&gt;&gt;`,
        0,
        node2.labelStyle
      );
    } else {
      typeHeight = await addText3(shapeSvg, "&lt;&lt;Element&gt;&gt;", 0, node2.labelStyle);
    }
    let accumulativeHeight = typeHeight;
    const nameHeight = await addText3(
      shapeSvg,
      requirementNode.name,
      accumulativeHeight,
      node2.labelStyle + "; font-weight: bold;"
    );
    accumulativeHeight += nameHeight + gap;
    if (isRequirementNode) {
      const idHeight = await addText3(
        shapeSvg,
        `${requirementNode.requirementId ? `ID: ${requirementNode.requirementId}` : ""}`,
        accumulativeHeight,
        node2.labelStyle
      );
      accumulativeHeight += idHeight;
      const textHeight = await addText3(
        shapeSvg,
        `${requirementNode.text ? `Text: ${requirementNode.text}` : ""}`,
        accumulativeHeight,
        node2.labelStyle
      );
      accumulativeHeight += textHeight;
      const riskHeight = await addText3(
        shapeSvg,
        `${requirementNode.risk ? `Risk: ${requirementNode.risk}` : ""}`,
        accumulativeHeight,
        node2.labelStyle
      );
      accumulativeHeight += riskHeight;
      await addText3(
        shapeSvg,
        `${requirementNode.verifyMethod ? `Verification: ${requirementNode.verifyMethod}` : ""}`,
        accumulativeHeight,
        node2.labelStyle
      );
    } else {
      const typeHeight2 = await addText3(
        shapeSvg,
        `${elementNode.type ? `Type: ${elementNode.type}` : ""}`,
        accumulativeHeight,
        node2.labelStyle
      );
      accumulativeHeight += typeHeight2;
      await addText3(
        shapeSvg,
        `${elementNode.docRef ? `Doc Ref: ${elementNode.docRef}` : ""}`,
        accumulativeHeight,
        node2.labelStyle
      );
    }
    const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding;
    const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding;
    const x5 = -totalWidth / 2;
    const y6 = -totalHeight / 2;
    const rc = at.svg(shapeSvg);
    const options2 = userNodeOverrides(node2, {});
    if (node2.look !== "handDrawn") {
      options2.roughness = 0;
      options2.fillStyle = "solid";
    }
    const roughRect = rc.rectangle(x5, y6, totalWidth, totalHeight, options2);
    const rect3 = shapeSvg.insert(() => roughRect, ":first-child");
    rect3.attr("class", "basic label-container outer-path").attr("style", nodeStyles);
    if (borderColorArray?.length) {
      const colorIndex = node2.colorIndex ?? 0;
      shapeSvg.attr("data-color-id", `color-${colorIndex % borderColorArray.length}`);
    }
    shapeSvg.selectAll(".label").each((_3, i2, nodes5) => {
      const text4 = select_default2(nodes5[i2]);
      const transform8 = text4.attr("transform");
      let translateX2 = 0;
      let translateY2 = 0;
      if (transform8) {
        const regex2 = RegExp(/translate\(([^,]+),([^)]+)\)/);
        const translate2 = regex2.exec(transform8);
        if (translate2) {
          translateX2 = parseFloat(translate2[1]);
          translateY2 = parseFloat(translate2[2]);
        }
      }
      const newTranslateY = translateY2 - totalHeight / 2;
      let newTranslateX = x5 + padding / 2;
      if (i2 === 0 || i2 === 1) {
        newTranslateX = translateX2;
      }
      text4.attr("transform", `translate(${newTranslateX}, ${newTranslateY + padding})`);
    });
    if (accumulativeHeight > typeHeight + nameHeight + gap) {
      const lineY = y6 + typeHeight + nameHeight + gap;
      let roughLine;
      if (node2.look === "neo") {
        const thickness = 1e-3;
        const polygonPoints = [
          [x5, lineY],
          [x5 + totalWidth, lineY],
          [x5 + totalWidth, lineY + thickness],
          [x5, lineY + thickness]
        ];
        roughLine = rc.polygon(polygonPoints, options2);
      } else {
        roughLine = rc.line(x5, lineY, x5 + totalWidth, lineY, options2);
      }
      const dividerLine = shapeSvg.insert(() => roughLine);
      dividerLine.attr("class", "divider");
    }
    updateNodeBounds(node2, rect3);
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    if (nodeStyles && node2.look !== "handDrawn" && (requirementEdgeLabelBackground || borderColorArray?.length)) {
      shapeSvg.selectAll("path").attr("style", nodeStyles);
    }
    return shapeSvg;
  }
  async function addText3(parentGroup, inputText, yOffset, style3 = "") {
    if (inputText === "") {
      return 0;
    }
    const textEl = parentGroup.insert("g").attr("class", "label").attr("style", style3);
    const config3 = getConfig2();
    const useHtmlLabels = config3.htmlLabels ?? true;
    const text4 = await createText(
      textEl,
      sanitizeText3(decodeEntities(inputText)),
      {
        width: calculateTextWidth(inputText, config3) + 50,
        // Add room for error when splitting text into multiple lines
        classes: "markdown-node-label",
        useHtmlLabels,
        style: style3
      },
      config3
    );
    let bbox;
    if (!useHtmlLabels) {
      const textChild = text4.children[0];
      for (const child of textChild.children) {
        if (style3) {
          child.setAttribute("style", style3);
        }
      }
      bbox = text4.getBBox();
      bbox.height += 6;
    } else {
      const div = text4.children[0];
      const dv = select_default2(text4);
      bbox = div.getBoundingClientRect();
      dv.attr("width", bbox.width);
      dv.attr("height", bbox.height);
    }
    textEl.attr("transform", `translate(${-bbox.width / 2},${-bbox.height / 2 + yOffset})`);
    return bbox.height;
  }
  var init_requirementBox = __esm({
    "src/rendering-util/rendering-elements/shapes/requirementBox.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      init_diagramAPI();
      init_createText();
      init_src32();
      __name(requirementBox, "requirementBox");
      __name(addText3, "addText");
    }
  });

  // src/rendering-util/rendering-elements/shapes/kanbanItem.ts
  async function kanbanItem(parent4, kanbanNode, { config: config3 }) {
    const { labelStyles, nodeStyles } = styles2String(kanbanNode);
    kanbanNode.labelStyle = labelStyles || "";
    const labelPaddingX = 10;
    const orgWidth = kanbanNode.width;
    kanbanNode.width = (kanbanNode.width ?? 200) - 10;
    const {
      shapeSvg,
      bbox,
      label: labelElTitle
    } = await labelHelper(parent4, kanbanNode, getNodeClasses(kanbanNode));
    const padding = kanbanNode.padding || 10;
    let ticketUrl = "";
    let link2;
    if ("ticket" in kanbanNode && kanbanNode.ticket && config3?.kanban?.ticketBaseUrl) {
      ticketUrl = config3?.kanban?.ticketBaseUrl.replace("#TICKET#", kanbanNode.ticket);
      link2 = shapeSvg.insert("svg:a", ":first-child").attr("class", "kanban-ticket-link").attr("xlink:href", ticketUrl).attr("target", "_blank");
    }
    const options2 = {
      useHtmlLabels: kanbanNode.useHtmlLabels,
      labelStyle: kanbanNode.labelStyle || "",
      width: kanbanNode.width,
      img: kanbanNode.img,
      padding: kanbanNode.padding || 8,
      centerLabel: false
    };
    let labelEl, bbox2;
    if (link2) {
      ({ label: labelEl, bbox: bbox2 } = await insertLabel(
        link2,
        "ticket" in kanbanNode && kanbanNode.ticket || "",
        options2
      ));
    } else {
      ({ label: labelEl, bbox: bbox2 } = await insertLabel(
        shapeSvg,
        "ticket" in kanbanNode && kanbanNode.ticket || "",
        options2
      ));
    }
    const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel(
      shapeSvg,
      "assigned" in kanbanNode && kanbanNode.assigned || "",
      options2
    );
    kanbanNode.width = orgWidth;
    const labelPaddingY = 10;
    const totalWidth = kanbanNode?.width || 0;
    const heightAdj = Math.max(bbox2.height, bboxAssigned.height) / 2;
    const totalHeight = Math.max(bbox.height + labelPaddingY * 2, kanbanNode?.height || 0) + heightAdj;
    const x5 = -totalWidth / 2;
    const y6 = -totalHeight / 2;
    labelElTitle.attr(
      "transform",
      "translate(" + (padding - totalWidth / 2) + ", " + (-heightAdj - bbox.height / 2) + ")"
    );
    labelEl.attr(
      "transform",
      "translate(" + (padding - totalWidth / 2) + ", " + (-heightAdj + bbox.height / 2) + ")"
    );
    labelElAssigned.attr(
      "transform",
      "translate(" + (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) + ", " + (-heightAdj + bbox.height / 2) + ")"
    );
    let rect3;
    const { rx, ry } = kanbanNode;
    const { cssStyles } = kanbanNode;
    if (kanbanNode.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options3 = userNodeOverrides(kanbanNode, {});
      const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x5, y6, totalWidth, totalHeight, rx || 0), options3) : rc.rectangle(x5, y6, totalWidth, totalHeight, options3);
      rect3 = shapeSvg.insert(() => roughNode, ":first-child");
      rect3.attr("class", "basic label-container").attr("style", cssStyles ? cssStyles : null);
    } else {
      rect3 = shapeSvg.insert("rect", ":first-child");
      rect3.attr("class", "basic label-container __APA__").attr("style", nodeStyles).attr("rx", rx ?? 5).attr("ry", ry ?? 5).attr("x", x5).attr("y", y6).attr("width", totalWidth).attr("height", totalHeight);
      const priority3 = "priority" in kanbanNode && kanbanNode.priority;
      if (priority3) {
        const line2 = shapeSvg.append("line");
        const lineX = x5 + 2;
        const y1 = y6 + Math.floor((rx ?? 0) / 2);
        const y22 = y6 + totalHeight - Math.floor((rx ?? 0) / 2);
        line2.attr("x1", lineX).attr("y1", y1).attr("x2", lineX).attr("y2", y22).attr("stroke-width", "4").attr("stroke", colorFromPriority(priority3));
      }
    }
    updateNodeBounds(kanbanNode, rect3);
    kanbanNode.height = totalHeight;
    kanbanNode.intersect = function(point8) {
      return intersect_default.rect(kanbanNode, point8);
    };
    return shapeSvg;
  }
  var colorFromPriority;
  var init_kanbanItem = __esm({
    "src/rendering-util/rendering-elements/shapes/kanbanItem.ts"() {
      "use strict";
      init_util();
      init_intersect();
      init_roundedRectPath();
      init_handDrawnShapeStyles();
      init_rough_esm();
      colorFromPriority = /* @__PURE__ */ __name((priority3) => {
        switch (priority3) {
          case "Very High":
            return "red";
          case "High":
            return "orange";
          case "Medium":
            return null;
          // no stroke
          case "Low":
            return "blue";
          case "Very Low":
            return "lightblue";
        }
      }, "colorFromPriority");
      __name(kanbanItem, "kanbanItem");
    }
  });

  // src/rendering-util/rendering-elements/shapes/bang.ts
  async function bang(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, halfPadding, label } = await labelHelper(
      parent4,
      node2,
      getNodeClasses(node2)
    );
    const w4 = bbox.width + 10 * halfPadding;
    const h3 = bbox.height + 8 * halfPadding;
    const r2 = 0.15 * w4;
    const { cssStyles } = node2;
    const minWidth = bbox.width + 20;
    const minHeight = bbox.height + 20;
    const effectiveWidth = Math.max(w4, minWidth);
    const effectiveHeight = Math.max(h3, minHeight);
    label.attr("transform", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);
    let bangElem;
    const path4 = `M0 0 
    a${r2},${r2} 1 0,0 ${effectiveWidth * 0.25},${-1 * effectiveHeight * 0.1}
    a${r2},${r2} 1 0,0 ${effectiveWidth * 0.25},${0}
    a${r2},${r2} 1 0,0 ${effectiveWidth * 0.25},${0}
    a${r2},${r2} 1 0,0 ${effectiveWidth * 0.25},${effectiveHeight * 0.1}

    a${r2},${r2} 1 0,0 ${effectiveWidth * 0.15},${effectiveHeight * 0.33}
    a${r2 * 0.8},${r2 * 0.8} 1 0,0 0,${effectiveHeight * 0.34}
    a${r2},${r2} 1 0,0 ${-1 * effectiveWidth * 0.15},${effectiveHeight * 0.33}

    a${r2},${r2} 1 0,0 ${-1 * effectiveWidth * 0.25},${effectiveHeight * 0.15}
    a${r2},${r2} 1 0,0 ${-1 * effectiveWidth * 0.25},0
    a${r2},${r2} 1 0,0 ${-1 * effectiveWidth * 0.25},0
    a${r2},${r2} 1 0,0 ${-1 * effectiveWidth * 0.25},${-1 * effectiveHeight * 0.15}

    a${r2},${r2} 1 0,0 ${-1 * effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}
    a${r2 * 0.8},${r2 * 0.8} 1 0,0 0,${-1 * effectiveHeight * 0.34}
    a${r2},${r2} 1 0,0 ${effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}
  H0 V0 Z`;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const roughNode = rc.path(path4, options2);
      bangElem = shapeSvg.insert(() => roughNode, ":first-child");
      bangElem.attr("class", "basic label-container").attr("style", handleUndefinedAttr(cssStyles));
    } else {
      bangElem = shapeSvg.insert("path", ":first-child").attr("class", "basic label-container").attr("style", nodeStyles).attr("d", path4);
    }
    bangElem.attr("transform", `translate(${-effectiveWidth / 2}, ${-effectiveHeight / 2})`);
    updateNodeBounds(node2, bangElem);
    node2.calcIntersect = function(bounds4, point8) {
      return intersect_default.rect(bounds4, point8);
    };
    node2.intersect = function(point8) {
      log.info("Bang intersect", node2, point8);
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_bang = __esm({
    "src/rendering-util/rendering-elements/shapes/bang.ts"() {
      "use strict";
      init_logger();
      init_util();
      init_intersect();
      init_handDrawnShapeStyles();
      init_rough_esm();
      init_utils2();
      __name(bang, "bang");
    }
  });

  // src/rendering-util/rendering-elements/shapes/cloud.ts
  async function cloud(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, halfPadding, label } = await labelHelper(
      parent4,
      node2,
      getNodeClasses(node2)
    );
    const w4 = bbox.width + 2 * halfPadding;
    const h3 = bbox.height + 2 * halfPadding;
    const r1 = 0.15 * w4;
    const r2 = 0.25 * w4;
    const r3 = 0.35 * w4;
    const r4 = 0.2 * w4;
    const { cssStyles } = node2;
    let cloudElem;
    const path4 = `M0 0 
    a${r1},${r1} 0 0,1 ${w4 * 0.25},${-1 * w4 * 0.1}
    a${r3},${r3} 1 0,1 ${w4 * 0.4},${-1 * w4 * 0.1}
    a${r2},${r2} 1 0,1 ${w4 * 0.35},${w4 * 0.2}

    a${r1},${r1} 1 0,1 ${w4 * 0.15},${h3 * 0.35}
    a${r4},${r4} 1 0,1 ${-1 * w4 * 0.15},${h3 * 0.65}

    a${r2},${r1} 1 0,1 ${-1 * w4 * 0.25},${w4 * 0.15}
    a${r3},${r3} 1 0,1 ${-1 * w4 * 0.5},0
    a${r1},${r1} 1 0,1 ${-1 * w4 * 0.25},${-1 * w4 * 0.15}

    a${r1},${r1} 1 0,1 ${-1 * w4 * 0.1},${-1 * h3 * 0.35}
    a${r4},${r4} 1 0,1 ${w4 * 0.1},${-1 * h3 * 0.65}
  H0 V0 Z`;
    if (node2.look === "handDrawn") {
      const rc = at.svg(shapeSvg);
      const options2 = userNodeOverrides(node2, {});
      const roughNode = rc.path(path4, options2);
      cloudElem = shapeSvg.insert(() => roughNode, ":first-child");
      cloudElem.attr("class", "basic label-container").attr("style", handleUndefinedAttr(cssStyles));
    } else {
      cloudElem = shapeSvg.insert("path", ":first-child").attr("class", "basic label-container").attr("style", nodeStyles).attr("d", path4);
    }
    label.attr("transform", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);
    cloudElem.attr("transform", `translate(${-w4 / 2}, ${-h3 / 2})`);
    updateNodeBounds(node2, cloudElem);
    node2.calcIntersect = function(bounds4, point8) {
      return intersect_default.rect(bounds4, point8);
    };
    node2.intersect = function(point8) {
      log.info("Cloud intersect", node2, point8);
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_cloud = __esm({
    "src/rendering-util/rendering-elements/shapes/cloud.ts"() {
      "use strict";
      init_rough_esm();
      init_logger();
      init_utils2();
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(cloud, "cloud");
    }
  });

  // src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts
  async function defaultMindmapNode(parent4, node2) {
    const { labelStyles, nodeStyles } = styles2String(node2);
    node2.labelStyle = labelStyles;
    const { shapeSvg, bbox, halfPadding, label } = await labelHelper(
      parent4,
      node2,
      getNodeClasses(node2)
    );
    const w4 = bbox.width + 8 * halfPadding;
    const h3 = bbox.height + 2 * halfPadding;
    const rd = 5;
    const rectPath = node2.look === "neo" ? `
    M${-w4 / 2} ${h3 / 2 - rd}
    v${-h3 + 2 * rd}
    q0,-${rd} ${rd},-${rd}
    h${w4 - 2 * rd}
    q${rd},0 ${rd},${rd}
    v${h3 - rd}
    H${-w4 / 2}
    Z
  ` : `
    M${-w4 / 2} ${h3 / 2 - rd}
    v${-h3 + 2 * rd}
    q0,-${rd} ${rd},-${rd}
    h${w4 - 2 * rd}
    q${rd},0 ${rd},${rd}
    v${h3 - 2 * rd}
    q0,${rd} ${-rd},${rd}
    h${-(w4 - 2 * rd)}
    q${-rd},0 ${-rd},${-rd}
    Z
  `;
    if (!node2.domId) {
      throw new Error(
        `defaultMindmapNode: node "${node2.id}" is missing a domId \u2014 was render.ts domId prefixing skipped?`
      );
    }
    const bg = shapeSvg.append("path").attr("id", node2.domId).attr("class", "node-bkg node-" + node2.type).attr("style", nodeStyles).attr("d", rectPath);
    shapeSvg.append("line").attr("class", "node-line-").attr("x1", -w4 / 2).attr("y1", h3 / 2).attr("x2", w4 / 2).attr("y2", h3 / 2);
    label.attr("transform", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);
    shapeSvg.append(() => label.node());
    updateNodeBounds(node2, bg);
    node2.calcIntersect = function(bounds4, point8) {
      return intersect_default.rect(bounds4, point8);
    };
    node2.intersect = function(point8) {
      return intersect_default.rect(node2, point8);
    };
    return shapeSvg;
  }
  var init_defaultMindmapNode = __esm({
    "src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts"() {
      "use strict";
      init_intersect();
      init_handDrawnShapeStyles();
      init_util();
      __name(defaultMindmapNode, "defaultMindmapNode");
    }
  });

  // src/rendering-util/rendering-elements/shapes/mindmapCircle.ts
  async function mindmapCircle(parent4, node2) {
    const options2 = {
      padding: node2.padding ?? 0
    };
    return circle(parent4, node2, options2);
  }
  var init_mindmapCircle = __esm({
    "src/rendering-util/rendering-elements/shapes/mindmapCircle.ts"() {
      "use strict";
      init_circle();
      __name(mindmapCircle, "mindmapCircle");
    }
  });

  // src/rendering-util/rendering-elements/shapes.ts
  function isValidShape(shape) {
    return shape in shapes;
  }
  var shapesDefs, generateShapeMap, shapes;
  var init_shapes = __esm({
    "src/rendering-util/rendering-elements/shapes.ts"() {
      "use strict";
      init_anchor();
      init_bowTieRect();
      init_card();
      init_choice();
      init_circle();
      init_crossedCircle();
      init_curlyBraceLeft();
      init_curlyBraceRight();
      init_curlyBraces();
      init_curvedTrapezoid();
      init_cylinder();
      init_datastore();
      init_dividedRect();
      init_doubleCircle();
      init_filledCircle();
      init_flippedTriangle();
      init_forkJoin();
      init_halfRoundedRectangle();
      init_hexagon();
      init_hourglass();
      init_icon();
      init_iconCircle();
      init_iconRounded();
      init_iconSquare();
      init_imageSquare();
      init_invertedTrapezoid();
      init_labelRect();
      init_leanLeft();
      init_leanRight();
      init_lightningBolt();
      init_linedCylinder();
      init_linedWaveEdgedRect();
      init_multiRect();
      init_multiWaveEdgedRectangle();
      init_note();
      init_question();
      init_rectLeftInvArrow();
      init_rectWithTitle();
      init_roundedRect();
      init_shadedProcess();
      init_slopedRect();
      init_squareRect();
      init_stadium();
      init_state();
      init_stateEnd();
      init_stateStart();
      init_subroutine();
      init_taggedRect();
      init_taggedWaveEdgedRectangle();
      init_text3();
      init_tiltedCylinder();
      init_trapezoid();
      init_trapezoidalPentagon();
      init_triangle();
      init_waveEdgedRectangle();
      init_waveRectangle();
      init_windowPane();
      init_erBox();
      init_classBox();
      init_requirementBox();
      init_kanbanItem();
      init_bang();
      init_cloud();
      init_defaultMindmapNode();
      init_mindmapCircle();
      shapesDefs = [
        {
          semanticName: "Process",
          name: "Rectangle",
          shortName: "rect",
          description: "Standard process shape",
          aliases: ["proc", "process", "rectangle"],
          internalAliases: ["squareRect"],
          handler: squareRect
        },
        {
          semanticName: "Event",
          name: "Rounded Rectangle",
          shortName: "rounded",
          description: "Represents an event",
          aliases: ["event"],
          internalAliases: ["roundedRect"],
          handler: roundedRect
        },
        {
          semanticName: "Terminal Point",
          name: "Stadium",
          shortName: "stadium",
          description: "Terminal point",
          aliases: ["terminal", "pill"],
          handler: stadium
        },
        {
          semanticName: "Subprocess",
          name: "Framed Rectangle",
          shortName: "fr-rect",
          description: "Subprocess",
          aliases: ["subprocess", "subproc", "framed-rectangle", "subroutine"],
          handler: subroutine
        },
        {
          semanticName: "Database",
          name: "Cylinder",
          shortName: "cyl",
          description: "Database storage",
          aliases: ["db", "database", "cylinder"],
          handler: cylinder
        },
        {
          semanticName: "Data Store",
          name: "Data Store",
          shortName: "datastore",
          description: "Data flow diagram data store",
          aliases: ["data-store"],
          handler: datastore
        },
        {
          semanticName: "Start",
          name: "Circle",
          shortName: "circle",
          description: "Starting point",
          aliases: ["circ"],
          handler: circle
        },
        {
          semanticName: "Bang",
          name: "Bang",
          shortName: "bang",
          description: "Bang",
          aliases: ["bang"],
          handler: bang
        },
        {
          semanticName: "Cloud",
          name: "Cloud",
          shortName: "cloud",
          description: "cloud",
          aliases: ["cloud"],
          handler: cloud
        },
        {
          semanticName: "Decision",
          name: "Diamond",
          shortName: "diam",
          description: "Decision-making step",
          aliases: ["decision", "diamond", "question"],
          handler: question
        },
        {
          semanticName: "Prepare Conditional",
          name: "Hexagon",
          shortName: "hex",
          description: "Preparation or condition step",
          aliases: ["hexagon", "prepare"],
          handler: hexagon
        },
        {
          semanticName: "Data Input/Output",
          name: "Lean Right",
          shortName: "lean-r",
          description: "Represents input or output",
          aliases: ["lean-right", "in-out"],
          internalAliases: ["lean_right"],
          handler: lean_right
        },
        {
          semanticName: "Data Input/Output",
          name: "Lean Left",
          shortName: "lean-l",
          description: "Represents output or input",
          aliases: ["lean-left", "out-in"],
          internalAliases: ["lean_left"],
          handler: lean_left
        },
        {
          semanticName: "Priority Action",
          name: "Trapezoid Base Bottom",
          shortName: "trap-b",
          description: "Priority action",
          aliases: ["priority", "trapezoid-bottom", "trapezoid"],
          handler: trapezoid
        },
        {
          semanticName: "Manual Operation",
          name: "Trapezoid Base Top",
          shortName: "trap-t",
          description: "Represents a manual task",
          aliases: ["manual", "trapezoid-top", "inv-trapezoid"],
          internalAliases: ["inv_trapezoid"],
          handler: inv_trapezoid
        },
        {
          semanticName: "Stop",
          name: "Double Circle",
          shortName: "dbl-circ",
          description: "Represents a stop point",
          aliases: ["double-circle"],
          internalAliases: ["doublecircle"],
          handler: doublecircle
        },
        {
          semanticName: "Text Block",
          name: "Text Block",
          shortName: "text",
          description: "Text block",
          handler: text3
        },
        {
          semanticName: "Card",
          name: "Notched Rectangle",
          shortName: "notch-rect",
          description: "Represents a card",
          aliases: ["card", "notched-rectangle"],
          handler: card
        },
        {
          semanticName: "Lined/Shaded Process",
          name: "Lined Rectangle",
          shortName: "lin-rect",
          description: "Lined process shape",
          aliases: ["lined-rectangle", "lined-process", "lin-proc", "shaded-process"],
          handler: shadedProcess
        },
        {
          semanticName: "Start",
          name: "Small Circle",
          shortName: "sm-circ",
          description: "Small starting point",
          aliases: ["start", "small-circle"],
          internalAliases: ["stateStart"],
          handler: stateStart
        },
        {
          semanticName: "Stop",
          name: "Framed Circle",
          shortName: "fr-circ",
          description: "Stop point",
          aliases: ["stop", "framed-circle"],
          internalAliases: ["stateEnd"],
          handler: stateEnd
        },
        {
          semanticName: "Fork/Join",
          name: "Filled Rectangle",
          shortName: "fork",
          description: "Fork or join in process flow",
          aliases: ["join"],
          internalAliases: ["forkJoin"],
          handler: forkJoin
        },
        {
          semanticName: "Collate",
          name: "Hourglass",
          shortName: "hourglass",
          description: "Represents a collate operation",
          aliases: ["hourglass", "collate"],
          handler: hourglass
        },
        {
          semanticName: "Comment",
          name: "Curly Brace",
          shortName: "brace",
          description: "Adds a comment",
          aliases: ["comment", "brace-l"],
          handler: curlyBraceLeft
        },
        {
          semanticName: "Comment Right",
          name: "Curly Brace",
          shortName: "brace-r",
          description: "Adds a comment",
          handler: curlyBraceRight
        },
        {
          semanticName: "Comment with braces on both sides",
          name: "Curly Braces",
          shortName: "braces",
          description: "Adds a comment",
          handler: curlyBraces
        },
        {
          semanticName: "Com Link",
          name: "Lightning Bolt",
          shortName: "bolt",
          description: "Communication link",
          aliases: ["com-link", "lightning-bolt"],
          handler: lightningBolt
        },
        {
          semanticName: "Document",
          name: "Document",
          shortName: "doc",
          description: "Represents a document",
          aliases: ["doc", "document"],
          handler: waveEdgedRectangle
        },
        {
          semanticName: "Delay",
          name: "Half-Rounded Rectangle",
          shortName: "delay",
          description: "Represents a delay",
          aliases: ["half-rounded-rectangle"],
          handler: halfRoundedRectangle
        },
        {
          semanticName: "Direct Access Storage",
          name: "Horizontal Cylinder",
          shortName: "h-cyl",
          description: "Direct access storage",
          aliases: ["das", "horizontal-cylinder"],
          handler: tiltedCylinder
        },
        {
          semanticName: "Disk Storage",
          name: "Lined Cylinder",
          shortName: "lin-cyl",
          description: "Disk storage",
          aliases: ["disk", "lined-cylinder"],
          handler: linedCylinder
        },
        {
          semanticName: "Display",
          name: "Curved Trapezoid",
          shortName: "curv-trap",
          description: "Represents a display",
          aliases: ["curved-trapezoid", "display"],
          handler: curvedTrapezoid
        },
        {
          semanticName: "Divided Process",
          name: "Divided Rectangle",
          shortName: "div-rect",
          description: "Divided process shape",
          aliases: ["div-proc", "divided-rectangle", "divided-process"],
          handler: dividedRectangle
        },
        {
          semanticName: "Extract",
          name: "Triangle",
          shortName: "tri",
          description: "Extraction process",
          aliases: ["extract", "triangle"],
          handler: triangle
        },
        {
          semanticName: "Internal Storage",
          name: "Window Pane",
          shortName: "win-pane",
          description: "Internal storage",
          aliases: ["internal-storage", "window-pane"],
          handler: windowPane
        },
        {
          semanticName: "Junction",
          name: "Filled Circle",
          shortName: "f-circ",
          description: "Junction point",
          aliases: ["junction", "filled-circle"],
          handler: filledCircle
        },
        {
          semanticName: "Loop Limit",
          name: "Trapezoidal Pentagon",
          shortName: "notch-pent",
          description: "Loop limit step",
          aliases: ["loop-limit", "notched-pentagon"],
          handler: trapezoidalPentagon
        },
        {
          semanticName: "Manual File",
          name: "Flipped Triangle",
          shortName: "flip-tri",
          description: "Manual file operation",
          aliases: ["manual-file", "flipped-triangle"],
          handler: flippedTriangle
        },
        {
          semanticName: "Manual Input",
          name: "Sloped Rectangle",
          shortName: "sl-rect",
          description: "Manual input step",
          aliases: ["manual-input", "sloped-rectangle"],
          handler: slopedRect
        },
        {
          semanticName: "Multi-Document",
          name: "Stacked Document",
          shortName: "docs",
          description: "Multiple documents",
          aliases: ["documents", "st-doc", "stacked-document"],
          handler: multiWaveEdgedRectangle
        },
        {
          semanticName: "Multi-Process",
          name: "Stacked Rectangle",
          shortName: "st-rect",
          description: "Multiple processes",
          aliases: ["procs", "processes", "stacked-rectangle"],
          handler: multiRect
        },
        {
          semanticName: "Stored Data",
          name: "Bow Tie Rectangle",
          shortName: "bow-rect",
          description: "Stored data",
          aliases: ["stored-data", "bow-tie-rectangle"],
          handler: bowTieRect
        },
        {
          semanticName: "Summary",
          name: "Crossed Circle",
          shortName: "cross-circ",
          description: "Summary",
          aliases: ["summary", "crossed-circle"],
          handler: crossedCircle
        },
        {
          semanticName: "Tagged Document",
          name: "Tagged Document",
          shortName: "tag-doc",
          description: "Tagged document",
          aliases: ["tag-doc", "tagged-document"],
          handler: taggedWaveEdgedRectangle
        },
        {
          semanticName: "Tagged Process",
          name: "Tagged Rectangle",
          shortName: "tag-rect",
          description: "Tagged process",
          aliases: ["tagged-rectangle", "tag-proc", "tagged-process"],
          handler: taggedRect
        },
        {
          semanticName: "Paper Tape",
          name: "Flag",
          shortName: "flag",
          description: "Paper tape",
          aliases: ["paper-tape"],
          handler: waveRectangle
        },
        {
          semanticName: "Odd",
          name: "Odd",
          shortName: "odd",
          description: "Odd shape",
          internalAliases: ["rect_left_inv_arrow"],
          handler: rect_left_inv_arrow
        },
        {
          semanticName: "Lined Document",
          name: "Lined Document",
          shortName: "lin-doc",
          description: "Lined document",
          aliases: ["lined-document"],
          handler: linedWaveEdgedRect
        }
      ];
      generateShapeMap = /* @__PURE__ */ __name(() => {
        const undocumentedShapes = {
          // States
          state,
          choice,
          note,
          // Rectangles
          rectWithTitle,
          labelRect,
          // Icons
          iconSquare,
          iconCircle,
          icon,
          iconRounded,
          imageSquare,
          anchor,
          // Kanban diagram
          kanbanItem,
          //Mindmap diagram
          mindmapCircle,
          defaultMindmapNode,
          // class diagram
          classBox,
          // er diagram
          erBox,
          // Requirement diagram
          requirementBox
        };
        const entries2 = [
          ...Object.entries(undocumentedShapes),
          ...shapesDefs.flatMap((shape) => {
            const aliases = [
              shape.shortName,
              ..."aliases" in shape ? shape.aliases : [],
              ..."internalAliases" in shape ? shape.internalAliases : []
            ];
            return aliases.map((alias) => [alias, shape.handler]);
          })
        ];
        return Object.fromEntries(entries2);
      }, "generateShapeMap");
      shapes = generateShapeMap();
      __name(isValidShape, "isValidShape");
    }
  });

  // src/diagrams/flowchart/flowDb.ts
  var MERMAID_DOM_ID_PREFIX, FlowDB;
  var init_flowDb = __esm({
    "src/diagrams/flowchart/flowDb.ts"() {
      "use strict";
      init_src32();
      init_js_yaml();
      init_diagramAPI();
      init_logger();
      init_shapes();
      init_utils2();
      init_common();
      init_commonDb();
      init_svgDrawCommon();
      init_purify_es();
      MERMAID_DOM_ID_PREFIX = "flowchart-";
      FlowDB = class {
        // cspell:ignore funs
        constructor() {
          this.vertexCounter = 0;
          this.config = getConfig2();
          this.diagramId = "";
          this.vertices = /* @__PURE__ */ new Map();
          this.edges = [];
          this.classes = /* @__PURE__ */ new Map();
          this.subGraphs = [];
          this.subGraphLookup = /* @__PURE__ */ new Map();
          this.tooltips = /* @__PURE__ */ new Map();
          this.subCount = 0;
          this.firstGraphFlag = true;
          // As in graph
          this.secCount = -1;
          this.posCrossRef = [];
          // Functions to be run after graph rendering
          this.funs = [];
          this.setAccTitle = setAccTitle;
          this.setAccDescription = setAccDescription;
          this.setDiagramTitle = setDiagramTitle;
          this.getAccTitle = getAccTitle;
          this.getAccDescription = getAccDescription;
          this.getDiagramTitle = getDiagramTitle;
          this.funs.push(this.setupToolTips.bind(this));
          this.addVertex = this.addVertex.bind(this);
          this.firstGraph = this.firstGraph.bind(this);
          this.setDirection = this.setDirection.bind(this);
          this.addSubGraph = this.addSubGraph.bind(this);
          this.addLink = this.addLink.bind(this);
          this.setLink = this.setLink.bind(this);
          this.updateLink = this.updateLink.bind(this);
          this.addClass = this.addClass.bind(this);
          this.setClass = this.setClass.bind(this);
          this.destructLink = this.destructLink.bind(this);
          this.setClickEvent = this.setClickEvent.bind(this);
          this.setTooltip = this.setTooltip.bind(this);
          this.updateLinkInterpolate = this.updateLinkInterpolate.bind(this);
          this.setClickFun = this.setClickFun.bind(this);
          this.bindFunctions = this.bindFunctions.bind(this);
          this.lex = {
            firstGraph: this.firstGraph.bind(this)
          };
          this.clear();
          this.setGen("gen-2");
        }
        static {
          __name(this, "FlowDB");
        }
        sanitizeText(txt) {
          return common_default.sanitizeText(txt, this.config);
        }
        sanitizeNodeLabelType(labelType) {
          switch (labelType) {
            case "markdown":
            case "string":
            case "text":
              return labelType;
            default:
              return "markdown";
          }
        }
        /**
         * Sets the diagram's SVG element ID, used to prefix domIds for uniqueness
         * across multiple diagrams on the same page.
         */
        setDiagramId(svgElementId) {
          this.diagramId = svgElementId;
        }
        /**
         * Function to lookup domId from id in the graph definition.
         * When diagramId is set, returns the prefixed version for DOM uniqueness.
         *
         * @param id - id of the node
         */
        lookUpDomId(id41) {
          for (const vertex of this.vertices.values()) {
            if (vertex.id === id41) {
              return this.diagramId ? `${this.diagramId}-${vertex.domId}` : vertex.domId;
            }
          }
          return this.diagramId ? `${this.diagramId}-${id41}` : id41;
        }
        /**
         * Function called by parser when a node definition has been found
         */
        addVertex(id41, textObj, type3, style3, classes3, dir2, props = {}, metadata) {
          if (!id41 || id41.trim().length === 0) {
            return;
          }
          let doc;
          if (metadata !== void 0) {
            let yamlData;
            if (!metadata.includes("\n")) {
              yamlData = "{\n" + metadata + "\n}";
            } else {
              yamlData = metadata + "\n";
            }
            doc = load(yamlData, { schema: JSON_SCHEMA });
          }
          const edge = this.edges.find((e3) => e3.id === id41);
          if (edge) {
            const edgeDoc = doc;
            if (edgeDoc?.animate !== void 0) {
              edge.animate = edgeDoc.animate;
            }
            if (edgeDoc?.animation !== void 0) {
              edge.animation = edgeDoc.animation;
            }
            if (edgeDoc?.curve !== void 0) {
              edge.interpolate = edgeDoc.curve;
            }
            return;
          }
          let txt;
          let vertex = this.vertices.get(id41);
          if (vertex === void 0) {
            if (textObj === void 0 && type3 === void 0 && style3 !== void 0 && style3 !== null) {
              log.warn(
                `Style applied to unknown node "${id41}". This may indicate a typo. The node will be created automatically.`
              );
            }
            vertex = {
              id: id41,
              labelType: "text",
              domId: MERMAID_DOM_ID_PREFIX + id41 + "-" + this.vertexCounter,
              styles: [],
              classes: []
            };
            this.vertices.set(id41, vertex);
          }
          this.vertexCounter++;
          if (textObj !== void 0) {
            this.config = getConfig2();
            txt = this.sanitizeText(textObj.text.trim());
            vertex.labelType = textObj.type;
            if (txt.startsWith('"') && txt.endsWith('"')) {
              txt = txt.substring(1, txt.length - 1);
            }
            vertex.text = txt;
          } else {
            if (vertex.text === void 0) {
              vertex.text = id41;
            }
          }
          if (type3 !== void 0) {
            vertex.type = type3;
          }
          if (style3 !== void 0 && style3 !== null) {
            style3.forEach((s2) => {
              vertex.styles.push(s2);
            });
          }
          if (classes3 !== void 0 && classes3 !== null) {
            classes3.forEach((s2) => {
              vertex.classes.push(s2);
            });
          }
          if (dir2 !== void 0) {
            vertex.dir = dir2;
          }
          if (vertex.props === void 0) {
            vertex.props = props;
          } else if (props !== void 0) {
            Object.assign(vertex.props, props);
          }
          if (doc !== void 0) {
            if (doc.shape) {
              if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes("_")) {
                throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`);
              } else if (!isValidShape(doc.shape)) {
                throw new Error(`No such shape: ${doc.shape}.`);
              }
              vertex.type = doc?.shape;
            }
            if (doc?.label) {
              vertex.text = doc?.label;
              vertex.labelType = this.sanitizeNodeLabelType(doc?.labelType);
            }
            if (doc?.icon) {
              vertex.icon = doc?.icon;
              if (!doc.label?.trim() && vertex.text === id41) {
                vertex.text = "";
              }
            }
            if (doc?.form) {
              vertex.form = doc?.form;
            }
            if (doc?.pos) {
              vertex.pos = doc?.pos;
            }
            if (doc?.img) {
              vertex.img = doc?.img;
              if (!doc.label?.trim() && vertex.text === id41) {
                vertex.text = "";
              }
            }
            if (doc?.constraint) {
              vertex.constraint = doc.constraint;
            }
            if (doc.w) {
              vertex.assetWidth = Number(doc.w);
            }
            if (doc.h) {
              vertex.assetHeight = Number(doc.h);
            }
          }
        }
        /**
         * Function called by parser when a link/edge definition has been found
         *
         */
        addSingleLink(_start, _end, type3, id41) {
          const start3 = _start;
          const end2 = _end;
          const edge = {
            start: start3,
            end: end2,
            type: void 0,
            text: "",
            labelType: "text",
            classes: [],
            isUserDefinedId: false,
            interpolate: this.edges.defaultInterpolate
          };
          log.info("abc78 Got edge...", edge);
          const linkTextObj = type3.text;
          if (linkTextObj !== void 0) {
            edge.text = this.sanitizeText(linkTextObj.text.trim());
            if (edge.text.startsWith('"') && edge.text.endsWith('"')) {
              edge.text = edge.text.substring(1, edge.text.length - 1);
            }
            edge.labelType = this.sanitizeNodeLabelType(linkTextObj.type);
          }
          if (type3 !== void 0) {
            edge.type = type3.type;
            edge.stroke = type3.stroke;
            edge.length = type3.length > 10 ? 10 : type3.length;
          }
          if (id41 && !this.edges.some((e3) => e3.id === id41)) {
            edge.id = id41;
            edge.isUserDefinedId = true;
          } else {
            const existingLinks = this.edges.filter((e3) => e3.start === edge.start && e3.end === edge.end);
            if (existingLinks.length === 0) {
              edge.id = getEdgeId(edge.start, edge.end, { counter: 0, prefix: "L" });
            } else {
              edge.id = getEdgeId(edge.start, edge.end, {
                counter: existingLinks.length + 1,
                prefix: "L"
              });
            }
          }
          if (this.edges.length < (this.config.maxEdges ?? 500)) {
            log.info("Pushing edge...");
            this.edges.push(edge);
          } else {
            throw new Error(
              `Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.

Initialize mermaid with maxEdges set to a higher number to allow more edges.
You cannot set this config via configuration inside the diagram as it is a secure config.
You have to call mermaid.initialize.`
            );
          }
        }
        isLinkData(value2) {
          return value2 !== null && typeof value2 === "object" && "id" in value2 && typeof value2.id === "string";
        }
        addLink(_start, _end, linkData) {
          const id41 = this.isLinkData(linkData) ? linkData.id.replace("@", "") : void 0;
          log.info("addLink", _start, _end, id41);
          for (const start3 of _start) {
            for (const end2 of _end) {
              const isLastStart = start3 === _start[_start.length - 1];
              const isFirstEnd = end2 === _end[0];
              if (isLastStart && isFirstEnd) {
                this.addSingleLink(start3, end2, linkData, id41);
              } else {
                this.addSingleLink(start3, end2, linkData, void 0);
              }
            }
          }
        }
        /**
         * Updates a link's line interpolation algorithm
         */
        updateLinkInterpolate(positions2, interpolate) {
          positions2.forEach((pos) => {
            if (pos === "default") {
              this.edges.defaultInterpolate = interpolate;
            } else {
              this.edges[pos].interpolate = interpolate;
            }
          });
        }
        /**
         * Updates a link with a style
         *
         */
        updateLink(positions2, style3) {
          positions2.forEach((pos) => {
            if (typeof pos === "number" && pos >= this.edges.length) {
              throw new Error(
                `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)`
              );
            }
            if (pos === "default") {
              this.edges.defaultStyle = style3;
            } else {
              this.edges[pos].style = style3;
              if ((this.edges[pos]?.style?.length ?? 0) > 0 && !this.edges[pos]?.style?.some((s2) => s2?.startsWith("fill"))) {
                this.edges[pos]?.style?.push("fill:none");
              }
            }
          });
        }
        addClass(ids, _style) {
          const style3 = _style.join().replace(/\\,/g, "\xA7\xA7\xA7").replace(/,/g, ";").replace(/§§§/g, ",").split(";");
          ids.split(",").forEach((id41) => {
            let classNode = this.classes.get(id41);
            if (classNode === void 0) {
              classNode = { id: id41, styles: [], textStyles: [] };
              this.classes.set(id41, classNode);
            }
            if (style3 !== void 0 && style3 !== null) {
              style3.forEach((s2) => {
                if (/color/.exec(s2)) {
                  const newStyle = s2.replace("fill", "bgFill");
                  classNode.textStyles.push(newStyle);
                }
                classNode.styles.push(s2);
              });
            }
          });
        }
        /**
         * Called by parser when a graph definition is found, stores the direction of the chart.
         *
         */
        setDirection(dir2) {
          this.direction = dir2.trim();
          if (/.*</.exec(this.direction)) {
            this.direction = "RL";
          }
          if (/.*\^/.exec(this.direction)) {
            this.direction = "BT";
          }
          if (/.*>/.exec(this.direction)) {
            this.direction = "LR";
          }
          if (/.*v/.exec(this.direction)) {
            this.direction = "TB";
          }
          if (this.direction === "TD") {
            this.direction = "TB";
          }
        }
        /**
         * Called by parser when a special node is found, e.g. a clickable element.
         *
         * @param ids - Comma separated list of ids
         * @param className - Class to add
         */
        setClass(ids, className) {
          for (const id41 of ids.split(",")) {
            const vertex = this.vertices.get(id41);
            if (vertex) {
              vertex.classes.push(className);
            }
            const edge = this.edges.find((e3) => e3.id === id41);
            if (edge) {
              edge.classes.push(className);
            }
            const subGraph = this.subGraphLookup.get(id41);
            if (subGraph) {
              subGraph.classes.push(className);
            }
          }
        }
        setTooltip(ids, tooltip) {
          if (tooltip === void 0) {
            return;
          }
          tooltip = this.sanitizeText(tooltip);
          for (const id41 of ids.split(",")) {
            this.tooltips.set(this.version === "gen-1" ? this.lookUpDomId(id41) : id41, tooltip);
          }
        }
        setClickFun(id41, functionName, functionArgs) {
          if (getConfig2().securityLevel !== "loose") {
            return;
          }
          if (functionName === void 0) {
            return;
          }
          let argList = [];
          if (typeof functionArgs === "string") {
            argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
            for (let i2 = 0; i2 < argList.length; i2++) {
              let item = argList[i2].trim();
              if (item.startsWith('"') && item.endsWith('"')) {
                item = item.substr(1, item.length - 2);
              }
              argList[i2] = item;
            }
          }
          if (argList.length === 0) {
            argList.push(id41);
          }
          const vertex = this.vertices.get(id41);
          if (vertex) {
            vertex.haveCallback = true;
            this.funs.push(() => {
              const domId = this.lookUpDomId(id41);
              const elem = document.querySelector(`[id="${domId}"]`);
              if (elem !== null) {
                elem.addEventListener(
                  "click",
                  () => {
                    utils_default2.runFunc(functionName, ...argList);
                  },
                  false
                );
              }
            });
          }
        }
        /**
         * Called by parser when a link is found. Adds the URL to the vertex data.
         *
         * @param ids - Comma separated list of ids
         * @param linkStr - URL to create a link for
         * @param target - Target attribute for the link
         */
        setLink(ids, linkStr, target) {
          ids.split(",").forEach((id41) => {
            const vertex = this.vertices.get(id41);
            if (vertex !== void 0) {
              vertex.link = utils_default2.formatUrl(linkStr, this.config);
              vertex.linkTarget = target;
            }
          });
          this.setClass(ids, "clickable");
        }
        getTooltip(id41) {
          return this.tooltips.get(id41);
        }
        /**
         * Called by parser when a click definition is found. Registers an event handler.
         *
         * @param ids - Comma separated list of ids
         * @param functionName - Function to be called on click
         * @param functionArgs - Arguments to be passed to the function
         */
        setClickEvent(ids, functionName, functionArgs) {
          ids.split(",").forEach((id41) => {
            this.setClickFun(id41, functionName, functionArgs);
          });
          this.setClass(ids, "clickable");
        }
        bindFunctions(element3) {
          this.funs.forEach((fun) => {
            fun(element3);
          });
        }
        getDirection() {
          return this.direction?.trim();
        }
        /**
         * Retrieval function for fetching the found nodes after parsing has completed.
         *
         */
        getVertices() {
          return this.vertices;
        }
        /**
         * Retrieval function for fetching the found links after parsing has completed.
         *
         */
        getEdges() {
          return this.edges;
        }
        /**
         * Retrieval function for fetching the found class definitions after parsing has completed.
         *
         */
        getClasses() {
          return this.classes;
        }
        setupToolTips(element3) {
          const tooltipElem = createTooltip();
          const svg2 = select_default2(element3).select("svg");
          const nodes5 = svg2.selectAll("g.node");
          nodes5.on("mouseover", (e3) => {
            const el = select_default2(e3.currentTarget);
            const title2 = el.attr("title");
            if (title2 === null) {
              return;
            }
            const rect3 = e3.currentTarget?.getBoundingClientRect();
            tooltipElem.transition().duration(200).style("opacity", ".9");
            tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect3.left + (rect3.right - rect3.left) / 2 + "px").style("top", window.scrollY + rect3.bottom + "px");
            tooltipElem.html(purify.sanitize(title2));
            el.classed("hover", true);
          }).on("mouseout", (e3) => {
            tooltipElem.transition().duration(500).style("opacity", 0);
            const el = select_default2(e3.currentTarget);
            el.classed("hover", false);
          });
        }
        /**
         * Clears the internal graph db so that a new graph can be parsed.
         *
         */
        clear(ver = "gen-2") {
          this.vertices = /* @__PURE__ */ new Map();
          this.classes = /* @__PURE__ */ new Map();
          this.edges = [];
          this.funs = [this.setupToolTips.bind(this)];
          this.diagramId = "";
          this.subGraphs = [];
          this.subGraphLookup = /* @__PURE__ */ new Map();
          this.subCount = 0;
          this.tooltips = /* @__PURE__ */ new Map();
          this.firstGraphFlag = true;
          this.version = ver;
          this.config = getConfig2();
          clear();
        }
        setGen(ver) {
          this.version = ver || "gen-2";
        }
        defaultStyle() {
          return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;";
        }
        addSubGraph(_id, list, _title) {
          let id41 = _id.text.trim();
          let title2 = _title.text;
          if (_id === _title && /\s/.exec(_title.text)) {
            id41 = void 0;
          }
          const uniq2 = /* @__PURE__ */ __name((a2) => {
            const prims = { boolean: {}, number: {}, string: {} };
            const objs = [];
            let dir3;
            const nodeList2 = a2.filter(function(item) {
              const type3 = typeof item;
              if (item.stmt && item.stmt === "dir") {
                dir3 = item.value;
                return false;
              }
              if (item.trim() === "") {
                return false;
              }
              if (type3 in prims) {
                return prims[type3].hasOwnProperty(item) ? false : prims[type3][item] = true;
              } else {
                return objs.includes(item) ? false : objs.push(item);
              }
            });
            return { nodeList: nodeList2, dir: dir3 };
          }, "uniq");
          const result = uniq2(list.flat());
          const nodeList = result.nodeList;
          const rawDir = result.dir;
          const hasExplicitDir = rawDir !== void 0;
          const flowchartConfig = getConfig2().flowchart ?? {};
          const dir2 = rawDir ?? (flowchartConfig.inheritDir ? this.getDirection() ?? getConfig2().direction ?? void 0 : void 0);
          if (this.version === "gen-1") {
            for (let i2 = 0; i2 < nodeList.length; i2++) {
              nodeList[i2] = this.lookUpDomId(nodeList[i2]);
            }
          }
          id41 = id41 ?? "subGraph" + this.subCount;
          title2 = title2 || "";
          title2 = this.sanitizeText(title2);
          this.subCount = this.subCount + 1;
          const subGraph = {
            id: id41,
            nodes: nodeList,
            title: title2.trim(),
            classes: [],
            dir: dir2,
            hasExplicitDir,
            labelType: this.sanitizeNodeLabelType(_title?.type)
          };
          log.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir);
          subGraph.nodes = this.makeUniq(subGraph, this.subGraphs).nodes;
          this.subGraphs.push(subGraph);
          this.subGraphLookup.set(id41, subGraph);
          return id41;
        }
        getPosForId(id41) {
          for (const [i2, subGraph] of this.subGraphs.entries()) {
            if (subGraph.id === id41) {
              return i2;
            }
          }
          return -1;
        }
        indexNodes2(id41, pos) {
          const nodes5 = this.subGraphs[pos].nodes;
          this.secCount = this.secCount + 1;
          if (this.secCount > 2e3) {
            return {
              result: false,
              count: 0
            };
          }
          this.posCrossRef[this.secCount] = pos;
          if (this.subGraphs[pos].id === id41) {
            return {
              result: true,
              count: 0
            };
          }
          let count2 = 0;
          let posCount = 1;
          while (count2 < nodes5.length) {
            const childPos = this.getPosForId(nodes5[count2]);
            if (childPos >= 0) {
              const res = this.indexNodes2(id41, childPos);
              if (res.result) {
                return {
                  result: true,
                  count: posCount + res.count
                };
              } else {
                posCount = posCount + res.count;
              }
            }
            count2 = count2 + 1;
          }
          return {
            result: false,
            count: posCount
          };
        }
        getDepthFirstPos(pos) {
          return this.posCrossRef[pos];
        }
        indexNodes() {
          this.secCount = -1;
          if (this.subGraphs.length > 0) {
            this.indexNodes2("none", this.subGraphs.length - 1);
          }
        }
        getSubGraphs() {
          return this.subGraphs;
        }
        firstGraph() {
          if (this.firstGraphFlag) {
            this.firstGraphFlag = false;
            return true;
          }
          return false;
        }
        destructStartLink(_str) {
          let str2 = _str.trim();
          let type3 = "arrow_open";
          switch (str2[0]) {
            case "<":
              type3 = "arrow_point";
              str2 = str2.slice(1);
              break;
            case "x":
              type3 = "arrow_cross";
              str2 = str2.slice(1);
              break;
            case "o":
              type3 = "arrow_circle";
              str2 = str2.slice(1);
              break;
          }
          let stroke = "normal";
          if (str2.includes("=")) {
            stroke = "thick";
          }
          if (str2.includes(".")) {
            stroke = "dotted";
          }
          return { type: type3, stroke };
        }
        countChar(char2, str2) {
          const length2 = str2.length;
          let count2 = 0;
          for (let i2 = 0; i2 < length2; ++i2) {
            if (str2[i2] === char2) {
              ++count2;
            }
          }
          return count2;
        }
        destructEndLink(_str) {
          const str2 = _str.trim();
          let line2 = str2.slice(0, -1);
          let type3 = "arrow_open";
          switch (str2.slice(-1)) {
            case "x":
              type3 = "arrow_cross";
              if (str2.startsWith("x")) {
                type3 = "double_" + type3;
                line2 = line2.slice(1);
              }
              break;
            case ">":
              type3 = "arrow_point";
              if (str2.startsWith("<")) {
                type3 = "double_" + type3;
                line2 = line2.slice(1);
              }
              break;
            case "o":
              type3 = "arrow_circle";
              if (str2.startsWith("o")) {
                type3 = "double_" + type3;
                line2 = line2.slice(1);
              }
              break;
          }
          let stroke = "normal";
          let length2 = line2.length - 1;
          if (line2.startsWith("=")) {
            stroke = "thick";
          }
          if (line2.startsWith("~")) {
            stroke = "invisible";
          }
          const dots = this.countChar(".", line2);
          if (dots) {
            stroke = "dotted";
            length2 = dots;
          }
          return { type: type3, stroke, length: length2 };
        }
        destructLink(_str, _startStr) {
          const info2 = this.destructEndLink(_str);
          let startInfo;
          if (_startStr) {
            startInfo = this.destructStartLink(_startStr);
            if (startInfo.stroke !== info2.stroke) {
              return { type: "INVALID", stroke: "INVALID" };
            }
            if (startInfo.type === "arrow_open") {
              startInfo.type = info2.type;
            } else {
              if (startInfo.type !== info2.type) {
                return { type: "INVALID", stroke: "INVALID" };
              }
              startInfo.type = "double_" + startInfo.type;
            }
            if (startInfo.type === "double_arrow") {
              startInfo.type = "double_arrow_point";
            }
            startInfo.length = info2.length;
            return startInfo;
          }
          return info2;
        }
        // Todo optimizer this by caching existing nodes
        exists(allSgs, _id) {
          for (const sg of allSgs) {
            if (sg.nodes.includes(_id)) {
              return true;
            }
          }
          return false;
        }
        /**
         * Deletes an id from all subgraphs
         *
         */
        makeUniq(sg, allSubgraphs) {
          const res = [];
          sg.nodes.forEach((_id, pos) => {
            if (!this.exists(allSubgraphs, _id)) {
              res.push(sg.nodes[pos]);
            }
          });
          return { nodes: res };
        }
        getTypeFromVertex(vertex) {
          if (vertex.img) {
            return "imageSquare";
          }
          if (vertex.icon) {
            if (vertex.form === "circle") {
              return "iconCircle";
            }
            if (vertex.form === "square") {
              return "iconSquare";
            }
            if (vertex.form === "rounded") {
              return "iconRounded";
            }
            return "icon";
          }
          switch (vertex.type) {
            case "square":
            case void 0:
              return "squareRect";
            case "round":
              return "roundedRect";
            case "ellipse":
              return "ellipse";
            default:
              return vertex.type;
          }
        }
        findNode(nodes5, id41) {
          return nodes5.find((node2) => node2.id === id41);
        }
        destructEdgeType(type3) {
          let arrowTypeStart = "none";
          let arrowTypeEnd = "arrow_point";
          switch (type3) {
            case "arrow_point":
            case "arrow_circle":
            case "arrow_cross":
              arrowTypeEnd = type3;
              break;
            case "double_arrow_point":
            case "double_arrow_circle":
            case "double_arrow_cross":
              arrowTypeStart = type3.replace("double_", "");
              arrowTypeEnd = arrowTypeStart;
              break;
          }
          return { arrowTypeStart, arrowTypeEnd };
        }
        addNodeFromVertex(vertex, nodes5, parentDB, subGraphDB, config3, look) {
          const parentId = parentDB.get(vertex.id);
          const isGroup2 = subGraphDB.get(vertex.id) ?? false;
          const node2 = this.findNode(nodes5, vertex.id);
          if (node2) {
            node2.cssStyles = vertex.styles;
            node2.cssCompiledStyles = this.getCompiledStyles(vertex.classes);
            node2.cssClasses = vertex.classes.join(" ");
          } else {
            const baseNode = {
              id: vertex.id,
              label: vertex.text,
              labelType: vertex.labelType,
              labelStyle: "",
              parentId,
              padding: config3.flowchart?.padding || 8,
              cssStyles: vertex.styles,
              cssCompiledStyles: this.getCompiledStyles(["default", "node", ...vertex.classes]),
              cssClasses: "default " + vertex.classes.join(" "),
              dir: vertex.dir,
              domId: vertex.domId,
              look,
              link: vertex.link,
              linkTarget: vertex.linkTarget,
              tooltip: this.getTooltip(vertex.id),
              icon: vertex.icon,
              pos: vertex.pos,
              img: vertex.img,
              assetWidth: vertex.assetWidth,
              assetHeight: vertex.assetHeight,
              constraint: vertex.constraint
            };
            if (isGroup2) {
              nodes5.push({
                ...baseNode,
                isGroup: true,
                shape: "rect"
              });
            } else {
              nodes5.push({
                ...baseNode,
                isGroup: false,
                shape: this.getTypeFromVertex(vertex)
              });
            }
          }
        }
        getCompiledStyles(classDefs) {
          let compiledStyles = [];
          for (const customClass of classDefs) {
            const cssClass = this.classes.get(customClass);
            if (cssClass?.styles) {
              compiledStyles = [...compiledStyles, ...cssClass.styles ?? []].map((s2) => s2.trim());
            }
            if (cssClass?.textStyles) {
              compiledStyles = [...compiledStyles, ...cssClass.textStyles ?? []].map((s2) => s2.trim());
            }
          }
          return compiledStyles;
        }
        getData() {
          const config3 = getConfig2();
          const nodes5 = [];
          const edges3 = [];
          const subGraphs = this.getSubGraphs();
          const parentDB = /* @__PURE__ */ new Map();
          const subGraphDB = /* @__PURE__ */ new Map();
          for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) {
            const subGraph = subGraphs[i2];
            if (subGraph.nodes.length > 0) {
              subGraphDB.set(subGraph.id, true);
            }
            for (const id41 of subGraph.nodes) {
              parentDB.set(id41, subGraph.id);
            }
          }
          for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) {
            const subGraph = subGraphs[i2];
            nodes5.push({
              id: subGraph.id,
              label: subGraph.title,
              labelStyle: "",
              labelType: subGraph.labelType,
              parentId: parentDB.get(subGraph.id),
              padding: 8,
              cssCompiledStyles: this.getCompiledStyles(subGraph.classes),
              cssClasses: subGraph.classes.join(" "),
              shape: "rect",
              dir: subGraph.dir === "TD" ? "TB" : subGraph.dir,
              // normalize TD→TB for dagre
              explicitDir: subGraph.hasExplicitDir,
              // true only when the user wrote an explicit 'direction X' keyword
              isGroup: true,
              look: config3.look
            });
          }
          const n2 = this.getVertices();
          n2.forEach((vertex) => {
            this.addNodeFromVertex(vertex, nodes5, parentDB, subGraphDB, config3, config3.look || "classic");
          });
          const e3 = this.getEdges();
          e3.forEach((rawEdge, index) => {
            const { arrowTypeStart, arrowTypeEnd } = this.destructEdgeType(rawEdge.type);
            const styles7 = [...e3.defaultStyle ?? []];
            if (rawEdge.style) {
              styles7.push(...rawEdge.style);
            }
            const edge = {
              id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: "L" }, rawEdge.id),
              isUserDefinedId: rawEdge.isUserDefinedId,
              start: rawEdge.start,
              end: rawEdge.end,
              type: rawEdge.type ?? "normal",
              label: rawEdge.text,
              labelType: rawEdge.labelType,
              labelpos: "c",
              thickness: rawEdge.stroke,
              minlen: rawEdge.length,
              classes: rawEdge?.stroke === "invisible" ? "" : "edge-thickness-normal edge-pattern-solid flowchart-link",
              arrowTypeStart: rawEdge?.stroke === "invisible" || rawEdge?.type === "arrow_open" ? "none" : arrowTypeStart,
              arrowTypeEnd: rawEdge?.stroke === "invisible" || rawEdge?.type === "arrow_open" ? "none" : arrowTypeEnd,
              arrowheadStyle: "fill: #333",
              cssCompiledStyles: this.getCompiledStyles(rawEdge.classes),
              labelStyle: styles7,
              style: styles7,
              pattern: rawEdge.stroke,
              look: config3.look,
              animate: rawEdge.animate,
              animation: rawEdge.animation,
              curve: rawEdge.interpolate || this.edges.defaultInterpolate || config3.flowchart?.curve
            };
            edges3.push(edge);
          });
          return { nodes: nodes5, edges: edges3, other: {}, config: config3 };
        }
        defaultConfig() {
          return defaultConfig2.flowchart;
        }
      };
    }
  });

  // src/rendering-util/insertElementsForSize.js
  var getDiagramElement;
  var init_insertElementsForSize = __esm({
    "src/rendering-util/insertElementsForSize.js"() {
      "use strict";
      init_src32();
      getDiagramElement = /* @__PURE__ */ __name((id41, securityLevel) => {
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const svg2 = root4.select(`[id="${id41}"]`);
        return svg2;
      }, "getDiagramElement");
    }
  });

  // src/utils/subGraphTitleMargins.ts
  var getSubGraphTitleMargins;
  var init_subGraphTitleMargins = __esm({
    "src/utils/subGraphTitleMargins.ts"() {
      "use strict";
      getSubGraphTitleMargins = /* @__PURE__ */ __name(({
        flowchart
      }) => {
        const subGraphTitleTopMargin = flowchart?.subGraphTitleMargin?.top ?? 0;
        const subGraphTitleBottomMargin = flowchart?.subGraphTitleMargin?.bottom ?? 0;
        const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin;
        return {
          subGraphTitleTopMargin,
          subGraphTitleBottomMargin,
          subGraphTitleTotalMargin
        };
      }, "getSubGraphTitleMargins");
    }
  });

  // src/rendering-util/rendering-elements/clusters/swimlane.js
  var swimlane;
  var init_swimlane = __esm({
    "src/rendering-util/rendering-elements/clusters/swimlane.js"() {
      "use strict";
      init_diagramAPI();
      init_config();
      init_logger();
      init_src32();
      init_rough_esm();
      init_createText();
      init_intersect_rect();
      init_handDrawnShapeStyles();
      swimlane = /* @__PURE__ */ __name(async (parent4, node2) => {
        const siteConfig2 = getConfig2();
        const { themeVariables, handDrawnSeed } = siteConfig2;
        const { clusterBkg, clusterBorder } = themeVariables;
        const laneStroke = clusterBorder;
        const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node2);
        const shapeSvg = parent4.insert("g").attr("class", "cluster swimlane " + (node2.cssClasses || "")).attr("id", node2.id).attr("data-id", node2.id).attr("data-et", "cluster").attr("data-look", node2.look);
        const useHtmlLabels = evaluate(siteConfig2.flowchart.htmlLabels);
        const isLR = node2.direction === "LR";
        const labelEl = shapeSvg.insert("g").attr("class", "cluster-label swimlane-label");
        const text4 = await createText(labelEl, node2.label, {
          style: node2.labelStyle,
          useHtmlLabels,
          isNode: true,
          width: node2.width
        });
        let bbox = text4.getBBox();
        if (useHtmlLabels) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        const padding = node2.padding ?? 0;
        const width3 = node2.width <= bbox.width + padding ? bbox.width + padding : node2.width;
        if (node2.width <= bbox.width + padding) {
          node2.diff = (width3 - node2.width) / 2 - padding;
        } else {
          node2.diff = -padding;
        }
        const height2 = node2.height;
        const laneTop = node2.y - height2 / 2;
        const laneBottom = node2.y + height2 / 2;
        const laneLeft = node2.x - width3 / 2;
        const contentTop = node2.swimlaneContentTop !== void 0 ? node2.swimlaneContentTop : laneTop + height2 / 3;
        const titlePaddingY = isLR ? 4 : 0;
        const desiredTitleSize = bbox.height + 2 * titlePaddingY;
        let titleRect;
        let bodyRect;
        if (isLR) {
          const titleWidth = Math.max(desiredTitleSize, bbox.height + 2 * titlePaddingY);
          const bodyX = laneLeft + titleWidth;
          const bodyWidth = Math.max(0, width3 - titleWidth);
          if (node2.look === "handDrawn") {
            const rc = at.svg(shapeSvg);
            const titleOptions = userNodeOverrides(node2, {
              roughness: 0.7,
              fill: clusterBkg,
              stroke: laneStroke,
              fillWeight: 3,
              seed: handDrawnSeed
            });
            const bodyOptions = userNodeOverrides(node2, {
              roughness: 0.7,
              fill: "none",
              stroke: laneStroke,
              seed: handDrawnSeed
            });
            const roughTitle = rc.rectangle(laneLeft, laneTop, titleWidth, height2, titleOptions);
            titleRect = shapeSvg.insert(() => roughTitle, ":first-child");
            const roughBody = rc.rectangle(bodyX, laneTop, bodyWidth, height2, bodyOptions);
            bodyRect = shapeSvg.insert(() => roughBody, ":first-child");
            titleRect.select("path:nth-child(2)").attr("style", borderStyles.join(";"));
            titleRect.select("path").attr("style", backgroundStyles.join(";").replace("fill", "stroke"));
          } else {
            titleRect = shapeSvg.insert("rect", ":first-child");
            bodyRect = shapeSvg.insert("rect", ":first-child");
            titleRect.attr("class", "swimlane-title").attr("style", nodeStyles).attr("x", laneLeft).attr("y", laneTop).attr("width", titleWidth).attr("height", height2).attr("fill", clusterBkg).attr("stroke", laneStroke);
            bodyRect.attr("class", "swimlane-body").attr("style", nodeStyles).attr("x", bodyX).attr("y", laneTop).attr("width", bodyWidth).attr("height", height2).attr("fill", "none").attr("stroke", laneStroke);
          }
          const labelCenterX = laneLeft + titleWidth / 2;
          const labelCenterY = node2.y;
          labelEl.attr(
            "transform",
            `translate(${labelCenterX}, ${labelCenterY}) rotate(-90) translate(${-bbox.width / 2}, ${-bbox.height / 2})`
          );
        } else {
          const headerMaxHeight = Math.max(0, contentTop - laneTop);
          const titleHeight = Math.min(desiredTitleSize, headerMaxHeight);
          const bodyY = laneTop + titleHeight;
          const contentHeight = Math.max(0, laneBottom - bodyY);
          const x5 = node2.x - width3 / 2;
          if (node2.look === "handDrawn") {
            const rc = at.svg(shapeSvg);
            const titleOptions = userNodeOverrides(node2, {
              roughness: 0.7,
              fill: clusterBkg,
              stroke: laneStroke,
              fillWeight: 3,
              seed: handDrawnSeed
            });
            const bodyOptions = userNodeOverrides(node2, {
              roughness: 0.7,
              fill: "none",
              stroke: laneStroke,
              seed: handDrawnSeed
            });
            const roughTitle = rc.rectangle(x5, laneTop, width3, titleHeight, titleOptions);
            titleRect = shapeSvg.insert(() => roughTitle, ":first-child");
            const roughBody = rc.rectangle(x5, bodyY, width3, contentHeight, bodyOptions);
            bodyRect = shapeSvg.insert(() => roughBody, ":first-child");
            titleRect.select("path:nth-child(2)").attr("style", borderStyles.join(";"));
            titleRect.select("path").attr("style", backgroundStyles.join(";").replace("fill", "stroke"));
          } else {
            titleRect = shapeSvg.insert("rect", ":first-child");
            bodyRect = shapeSvg.insert("rect", ":first-child");
            titleRect.attr("class", "swimlane-title").attr("style", nodeStyles).attr("x", x5).attr("y", laneTop).attr("width", width3).attr("height", titleHeight).attr("fill", clusterBkg).attr("stroke", laneStroke);
            bodyRect.attr("class", "swimlane-body").attr("style", nodeStyles).attr("x", x5).attr("y", bodyY).attr("width", width3).attr("height", contentHeight).attr("fill", "none").attr("stroke", laneStroke);
          }
          const labelX = node2.x - bbox.width / 2;
          const labelY = laneTop + (titleHeight - bbox.height) / 2;
          labelEl.attr("transform", `translate(${labelX}, ${labelY})`);
        }
        log.trace("Swimlane data ", node2, JSON.stringify(node2));
        if (labelStyles) {
          const span = labelEl.select("span");
          if (span) {
            span.attr("style", labelStyles);
          }
        }
        node2.offsetX = 0;
        node2.width = width3;
        node2.height = height2;
        node2.offsetY = bbox.height - padding / 2;
        node2.intersect = function(point8) {
          return intersect_rect_default(node2, point8);
        };
        return { cluster: shapeSvg, labelBBox: bbox };
      }, "swimlane");
    }
  });

  // src/rendering-util/rendering-elements/clusters.js
  var rect, noteGroup, roundedWithTitle, kanbanSection, divider, squareRect2, shapes2, clusterElems, insertCluster, clear3;
  var init_clusters = __esm({
    "src/rendering-util/rendering-elements/clusters.js"() {
      "use strict";
      init_diagramAPI();
      init_config();
      init_logger();
      init_subGraphTitleMargins();
      init_src32();
      init_rough_esm();
      init_createText();
      init_intersect_rect();
      init_createLabel();
      init_roundedRectPath();
      init_handDrawnShapeStyles();
      init_swimlane();
      rect = /* @__PURE__ */ __name(async (parent4, node2) => {
        log.info("Creating subgraph rect for ", node2.id, node2);
        const siteConfig2 = getConfig2();
        const { themeVariables, handDrawnSeed } = siteConfig2;
        const { clusterBkg, clusterBorder } = themeVariables;
        const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node2);
        const shapeSvg = parent4.insert("g").attr("class", "cluster " + node2.cssClasses).attr("id", node2.domId).attr("data-look", node2.look);
        const useHtmlLabels = getEffectiveHtmlLabels(siteConfig2);
        const labelEl = shapeSvg.insert("g").attr("class", "cluster-label ");
        let text4;
        if (node2.labelType === "markdown") {
          text4 = await createText(labelEl, node2.label, {
            style: node2.labelStyle,
            useHtmlLabels,
            isNode: true,
            width: node2.width
          });
        } else {
          text4 = await createLabel_default(labelEl, node2.label, node2.labelStyle || "", false, true);
        }
        let bbox = text4.getBBox();
        if (getEffectiveHtmlLabels(siteConfig2)) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        const width3 = node2.width <= bbox.width + node2.padding ? bbox.width + node2.padding : node2.width;
        if (node2.width <= bbox.width + node2.padding) {
          node2.diff = (width3 - node2.width) / 2 - node2.padding;
        } else {
          node2.diff = -node2.padding;
        }
        const height2 = node2.height;
        const x5 = node2.x - width3 / 2;
        const y6 = node2.y - height2 / 2;
        log.trace("Data ", node2, JSON.stringify(node2));
        let rect3;
        if (node2.look === "handDrawn") {
          const rc = at.svg(shapeSvg);
          const options2 = userNodeOverrides(node2, {
            roughness: 0.7,
            fill: clusterBkg,
            // fill: 'red',
            stroke: clusterBorder,
            fillWeight: 3,
            seed: handDrawnSeed
          });
          const roughNode = rc.path(createRoundedRectPathD(x5, y6, width3, height2, 0), options2);
          rect3 = shapeSvg.insert(() => {
            log.debug("Rough node insert CXC", roughNode);
            return roughNode;
          }, ":first-child");
          rect3.select("path:nth-child(2)").attr("style", borderStyles.join(";"));
          rect3.select("path").attr("style", backgroundStyles.join(";").replace("fill", "stroke"));
        } else {
          rect3 = shapeSvg.insert("rect", ":first-child");
          rect3.attr("style", nodeStyles).attr("rx", node2.rx).attr("ry", node2.ry).attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2);
        }
        const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig2);
        labelEl.attr(
          "transform",
          // This puts the label on top of the box instead of inside it
          `translate(${node2.x - bbox.width / 2}, ${node2.y - node2.height / 2 + subGraphTitleTopMargin})`
        );
        if (labelStyles) {
          const span = labelEl.select("span");
          if (span) {
            span.attr("style", labelStyles);
          }
        }
        const rectBox = rect3.node().getBBox();
        node2.offsetX = 0;
        node2.width = rectBox.width;
        node2.height = rectBox.height;
        node2.offsetY = bbox.height - node2.padding / 2;
        node2.intersect = function(point8) {
          return intersect_rect_default(node2, point8);
        };
        return { cluster: shapeSvg, labelBBox: bbox };
      }, "rect");
      noteGroup = /* @__PURE__ */ __name((parent4, node2) => {
        const shapeSvg = parent4.insert("g").attr("class", "note-cluster").attr("id", node2.domId);
        const rect3 = shapeSvg.insert("rect", ":first-child");
        const padding = 0 * node2.padding;
        const halfPadding = padding / 2;
        rect3.attr("rx", node2.rx).attr("ry", node2.ry).attr("x", node2.x - node2.width / 2 - halfPadding).attr("y", node2.y - node2.height / 2 - halfPadding).attr("width", node2.width + padding).attr("height", node2.height + padding).attr("fill", "none");
        const rectBox = rect3.node().getBBox();
        node2.width = rectBox.width;
        node2.height = rectBox.height;
        node2.intersect = function(point8) {
          return intersect_rect_default(node2, point8);
        };
        return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };
      }, "noteGroup");
      roundedWithTitle = /* @__PURE__ */ __name(async (parent4, node2) => {
        const siteConfig2 = getConfig2();
        const { themeVariables, handDrawnSeed } = siteConfig2;
        const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } = themeVariables;
        const shapeSvg = parent4.insert("g").attr("class", node2.cssClasses).attr("id", node2.domId).attr("data-id", node2.id).attr("data-look", node2.look);
        const outerRectG = shapeSvg.insert("g", ":first-child");
        const label = shapeSvg.insert("g").attr("class", "cluster-label");
        let innerRect = shapeSvg.append("rect");
        const text4 = await createLabel_default(label, node2.label, node2.labelStyle, void 0, true);
        let bbox = text4.getBBox();
        if (getEffectiveHtmlLabels(siteConfig2)) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        const padding = 0 * node2.padding;
        const halfPadding = padding / 2;
        const width3 = (node2.width <= bbox.width + node2.padding ? bbox.width + node2.padding : node2.width) + padding;
        if (node2.width <= bbox.width + node2.padding) {
          node2.diff = (width3 - node2.width) / 2 - node2.padding;
        } else {
          node2.diff = -node2.padding;
        }
        const height2 = node2.height + padding;
        const innerHeight = node2.height + padding - bbox.height - 6;
        const x5 = node2.x - width3 / 2;
        const y6 = node2.y - height2 / 2;
        node2.width = width3;
        const innerY = node2.y - node2.height / 2 - halfPadding + bbox.height + 2;
        let rect3;
        if (node2.look === "handDrawn") {
          const isAlt = node2.cssClasses.includes("statediagram-cluster-alt");
          const rc = at.svg(shapeSvg);
          const roughOuterNode = node2.rx || node2.ry ? rc.path(createRoundedRectPathD(x5, y6, width3, height2, 10), {
            roughness: 0.7,
            fill: compositeTitleBackground,
            fillStyle: "solid",
            stroke: nodeBorder,
            seed: handDrawnSeed
          }) : rc.rectangle(x5, y6, width3, height2, { seed: handDrawnSeed });
          rect3 = shapeSvg.insert(() => roughOuterNode, ":first-child");
          const roughInnerNode = rc.rectangle(x5, innerY, width3, innerHeight, {
            fill: isAlt ? altBackground : compositeBackground,
            fillStyle: isAlt ? "hachure" : "solid",
            stroke: nodeBorder,
            seed: handDrawnSeed
          });
          rect3 = shapeSvg.insert(() => roughOuterNode, ":first-child");
          innerRect = shapeSvg.insert(() => roughInnerNode);
        } else {
          rect3 = outerRectG.insert("rect", ":first-child");
          const outerRectClass = "outer";
          rect3.attr("class", outerRectClass).attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2).attr("data-look", node2.look);
          innerRect.attr("class", "inner").attr("x", x5).attr("y", innerY).attr("width", width3).attr("height", innerHeight);
        }
        label.attr(
          "transform",
          `translate(${node2.x - bbox.width / 2}, ${y6 + 1 - (getEffectiveHtmlLabels(siteConfig2) ? 0 : 3)})`
        );
        const rectBox = rect3.node().getBBox();
        node2.height = rectBox.height;
        node2.offsetX = 0;
        node2.offsetY = bbox.height - node2.padding / 2;
        node2.labelBBox = bbox;
        node2.intersect = function(point8) {
          return intersect_rect_default(node2, point8);
        };
        return { cluster: shapeSvg, labelBBox: bbox };
      }, "roundedWithTitle");
      kanbanSection = /* @__PURE__ */ __name(async (parent4, node2) => {
        log.info("Creating subgraph rect for ", node2.id, node2);
        const siteConfig2 = getConfig2();
        const { themeVariables, handDrawnSeed } = siteConfig2;
        const { clusterBkg, clusterBorder } = themeVariables;
        const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node2);
        const shapeSvg = parent4.insert("g").attr("class", "cluster " + node2.cssClasses).attr("id", node2.domId).attr("data-look", node2.look);
        const useHtmlLabels = getEffectiveHtmlLabels(siteConfig2);
        const labelEl = shapeSvg.insert("g").attr("class", "cluster-label ");
        const text4 = await createText(labelEl, node2.label, {
          style: node2.labelStyle,
          useHtmlLabels,
          isNode: true,
          width: node2.width
        });
        let bbox = text4.getBBox();
        if (getEffectiveHtmlLabels(siteConfig2)) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        const width3 = node2.width <= bbox.width + node2.padding ? bbox.width + node2.padding : node2.width;
        if (node2.width <= bbox.width + node2.padding) {
          node2.diff = (width3 - node2.width) / 2 - node2.padding;
        } else {
          node2.diff = -node2.padding;
        }
        const height2 = node2.height;
        const x5 = node2.x - width3 / 2;
        const y6 = node2.y - height2 / 2;
        log.trace("Data ", node2, JSON.stringify(node2));
        let rect3;
        if (node2.look === "handDrawn") {
          const rc = at.svg(shapeSvg);
          const options2 = userNodeOverrides(node2, {
            roughness: 0.7,
            fill: clusterBkg,
            // fill: 'red',
            stroke: clusterBorder,
            fillWeight: 4,
            seed: handDrawnSeed
          });
          const roughNode = rc.path(createRoundedRectPathD(x5, y6, width3, height2, node2.rx), options2);
          rect3 = shapeSvg.insert(() => {
            log.debug("Rough node insert CXC", roughNode);
            return roughNode;
          }, ":first-child");
          rect3.select("path:nth-child(2)").attr("style", borderStyles.join(";"));
          rect3.select("path").attr("style", backgroundStyles.join(";").replace("fill", "stroke"));
        } else {
          rect3 = shapeSvg.insert("rect", ":first-child");
          rect3.attr("style", nodeStyles).attr("rx", node2.rx).attr("ry", node2.ry).attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2);
        }
        const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig2);
        labelEl.attr(
          "transform",
          // This puts the label on top of the box instead of inside it
          `translate(${node2.x - bbox.width / 2}, ${node2.y - node2.height / 2 + subGraphTitleTopMargin})`
        );
        if (labelStyles) {
          const span = labelEl.select("span");
          if (span) {
            span.attr("style", labelStyles);
          }
        }
        const rectBox = rect3.node().getBBox();
        node2.offsetX = 0;
        node2.width = rectBox.width;
        node2.height = rectBox.height;
        node2.offsetY = bbox.height - node2.padding / 2;
        node2.intersect = function(point8) {
          return intersect_rect_default(node2, point8);
        };
        return { cluster: shapeSvg, labelBBox: bbox };
      }, "kanbanSection");
      divider = /* @__PURE__ */ __name((parent4, node2) => {
        const siteConfig2 = getConfig2();
        const { themeVariables, handDrawnSeed } = siteConfig2;
        const { nodeBorder } = themeVariables;
        const shapeSvg = parent4.insert("g").attr("class", node2.cssClasses).attr("id", node2.domId).attr("data-look", node2.look);
        const outerRectG = shapeSvg.insert("g", ":first-child");
        const padding = 0 * node2.padding;
        const width3 = node2.width + padding;
        node2.diff = -node2.padding;
        const height2 = node2.height + padding;
        const x5 = node2.x - width3 / 2;
        const y6 = node2.y - height2 / 2;
        node2.width = width3;
        let rect3;
        if (node2.look === "handDrawn") {
          const rc = at.svg(shapeSvg);
          const roughOuterNode = rc.rectangle(x5, y6, width3, height2, {
            fill: "lightgrey",
            roughness: 0.5,
            strokeLineDash: [5],
            stroke: nodeBorder,
            seed: handDrawnSeed
          });
          rect3 = shapeSvg.insert(() => roughOuterNode, ":first-child");
        } else {
          rect3 = outerRectG.insert("rect", ":first-child");
          let outerRectClass = "outer";
          if (node2.look === "neo") {
            outerRectClass = "divider";
          } else {
            outerRectClass = "divider";
          }
          rect3.attr("class", outerRectClass).attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2).attr("data-look", node2.look);
        }
        const rectBox = rect3.node().getBBox();
        node2.height = rectBox.height;
        node2.offsetX = 0;
        node2.offsetY = 0;
        node2.intersect = function(point8) {
          return intersect_rect_default(node2, point8);
        };
        return { cluster: shapeSvg, labelBBox: {} };
      }, "divider");
      squareRect2 = rect;
      shapes2 = {
        rect,
        squareRect: squareRect2,
        roundedWithTitle,
        noteGroup,
        divider,
        kanbanSection,
        swimlane
      };
      clusterElems = /* @__PURE__ */ new Map();
      insertCluster = /* @__PURE__ */ __name(async (elem, node2) => {
        const shape = node2.shape || "rect";
        const cluster = await shapes2[shape](elem, node2);
        clusterElems.set(node2.id, cluster);
        return cluster;
      }, "insertCluster");
      clear3 = /* @__PURE__ */ __name(() => {
        clusterElems = /* @__PURE__ */ new Map();
      }, "clear");
    }
  });

  // src/rendering-util/labelTransform.ts
  var computeLabelTransform;
  var init_labelTransform = __esm({
    "src/rendering-util/labelTransform.ts"() {
      "use strict";
      computeLabelTransform = /* @__PURE__ */ __name((bbox, useHtmlLabels) => {
        if (useHtmlLabels) {
          return "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")";
        }
        const x5 = bbox.x ?? 0;
        const y6 = bbox.y ?? 0;
        return "translate(" + -(x5 + bbox.width / 2) + ", " + -(y6 + bbox.height / 2) + ")";
      }, "computeLabelTransform");
    }
  });

  // src/utils/lineWithOffset.ts
  function calculateDeltaAndAngle(point1, point22) {
    if (point1 === void 0 || point22 === void 0) {
      return { angle: 0, deltaX: 0, deltaY: 0 };
    }
    point1 = pointTransformer(point1);
    point22 = pointTransformer(point22);
    const [x1, y1] = [point1.x, point1.y];
    const [x22, y22] = [point22.x, point22.y];
    const deltaX = x22 - x1;
    const deltaY = y22 - y1;
    return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY };
  }
  var markerOffsets, markerOffsets2, pointTransformer, getLineFunctionsWithOffset;
  var init_lineWithOffset = __esm({
    "src/utils/lineWithOffset.ts"() {
      "use strict";
      markerOffsets = {
        aggregation: 17.25,
        extension: 17.25,
        composition: 17.25,
        dependency: 6,
        lollipop: 13.5,
        arrow_point: 4,
        arrow_barb: 0,
        arrow_barb_neo: 5.5
        //arrow_cross: 24,
      };
      markerOffsets2 = {
        arrow_point: 4,
        arrow_cross: 12.5,
        arrow_circle: 12.5
      };
      __name(calculateDeltaAndAngle, "calculateDeltaAndAngle");
      pointTransformer = /* @__PURE__ */ __name((data6) => {
        if (Array.isArray(data6)) {
          return { x: data6[0], y: data6[1] };
        }
        return data6;
      }, "pointTransformer");
      getLineFunctionsWithOffset = /* @__PURE__ */ __name((edge) => {
        return {
          x: /* @__PURE__ */ __name(function(d3, i2, data6) {
            let offset = 0;
            const DIRECTION = pointTransformer(data6[0]).x < pointTransformer(data6[data6.length - 1]).x ? "left" : "right";
            if (i2 === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {
              const { angle: angle2, deltaX } = calculateDeltaAndAngle(data6[0], data6[1]);
              offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle2) * (deltaX >= 0 ? 1 : -1);
            } else if (i2 === data6.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {
              const { angle: angle2, deltaX } = calculateDeltaAndAngle(
                data6[data6.length - 1],
                data6[data6.length - 2]
              );
              offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle2) * (deltaX >= 0 ? 1 : -1);
            }
            const differenceToEnd = Math.abs(
              pointTransformer(d3).x - pointTransformer(data6[data6.length - 1]).x
            );
            const differenceInYEnd = Math.abs(
              pointTransformer(d3).y - pointTransformer(data6[data6.length - 1]).y
            );
            const differenceToStart = Math.abs(pointTransformer(d3).x - pointTransformer(data6[0]).x);
            const differenceInYStart = Math.abs(pointTransformer(d3).y - pointTransformer(data6[0]).y);
            const startMarkerHeight = markerOffsets[edge.arrowTypeStart];
            const endMarkerHeight = markerOffsets[edge.arrowTypeEnd];
            const extraRoom = 1;
            if (differenceToEnd < endMarkerHeight && differenceToEnd > 0 && differenceInYEnd < endMarkerHeight) {
              let adjustment = endMarkerHeight + extraRoom - differenceToEnd;
              adjustment *= DIRECTION === "right" ? -1 : 1;
              offset -= adjustment;
            }
            if (differenceToStart < startMarkerHeight && differenceToStart > 0 && differenceInYStart < startMarkerHeight) {
              let adjustment = startMarkerHeight + extraRoom - differenceToStart;
              adjustment *= DIRECTION === "right" ? -1 : 1;
              offset += adjustment;
            }
            return pointTransformer(d3).x + offset;
          }, "x"),
          y: /* @__PURE__ */ __name(function(d3, i2, data6) {
            let offset = 0;
            const DIRECTION = pointTransformer(data6[0]).y < pointTransformer(data6[data6.length - 1]).y ? "down" : "up";
            if (i2 === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {
              const { angle: angle2, deltaY } = calculateDeltaAndAngle(data6[0], data6[1]);
              offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle2)) * (deltaY >= 0 ? 1 : -1);
            } else if (i2 === data6.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {
              const { angle: angle2, deltaY } = calculateDeltaAndAngle(
                data6[data6.length - 1],
                data6[data6.length - 2]
              );
              offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle2)) * (deltaY >= 0 ? 1 : -1);
            }
            const differenceToEnd = Math.abs(
              pointTransformer(d3).y - pointTransformer(data6[data6.length - 1]).y
            );
            const differenceInXEnd = Math.abs(
              pointTransformer(d3).x - pointTransformer(data6[data6.length - 1]).x
            );
            const differenceToStart = Math.abs(pointTransformer(d3).y - pointTransformer(data6[0]).y);
            const differenceInXStart = Math.abs(pointTransformer(d3).x - pointTransformer(data6[0]).x);
            const startMarkerHeight = markerOffsets[edge.arrowTypeStart];
            const endMarkerHeight = markerOffsets[edge.arrowTypeEnd];
            const extraRoom = 1;
            if (differenceToEnd < endMarkerHeight && differenceToEnd > 0 && differenceInXEnd < endMarkerHeight) {
              let adjustment = endMarkerHeight + extraRoom - differenceToEnd;
              adjustment *= DIRECTION === "up" ? -1 : 1;
              offset -= adjustment;
            }
            if (differenceToStart < startMarkerHeight && differenceToStart > 0 && differenceInXStart < startMarkerHeight) {
              let adjustment = startMarkerHeight + extraRoom - differenceToStart;
              adjustment *= DIRECTION === "up" ? -1 : 1;
              offset += adjustment;
            }
            return pointTransformer(d3).y + offset;
          }, "y")
        };
      }, "getLineFunctionsWithOffset");
      if (void 0) {
        const { it, expect, describe } = void 0;
        describe("calculateDeltaAndAngle", () => {
          it("should calculate the angle and deltas between two points", () => {
            expect(calculateDeltaAndAngle([0, 0], [0, 1])).toStrictEqual({
              angle: 1.5707963267948966,
              deltaX: 0,
              deltaY: 1
            });
            expect(calculateDeltaAndAngle([1, 0], [0, -1])).toStrictEqual({
              angle: 0.7853981633974483,
              deltaX: -1,
              deltaY: -1
            });
            expect(calculateDeltaAndAngle({ x: 1, y: 0 }, [0, -1])).toStrictEqual({
              angle: 0.7853981633974483,
              deltaX: -1,
              deltaY: -1
            });
            expect(calculateDeltaAndAngle({ x: 1, y: 0 }, { x: 1, y: 0 })).toStrictEqual({
              angle: NaN,
              deltaX: 0,
              deltaY: 0
            });
          });
          it("should calculate the angle and deltas if one point in undefined", () => {
            expect(calculateDeltaAndAngle(void 0, [0, 1])).toStrictEqual({
              angle: 0,
              deltaX: 0,
              deltaY: 0
            });
            expect(calculateDeltaAndAngle([0, 1], void 0)).toStrictEqual({
              angle: 0,
              deltaX: 0,
              deltaY: 0
            });
          });
        });
      }
    }
  });

  // src/rendering-util/rendering-elements/edgeMarker.ts
  var addEdgeMarkers, arrowTypesMap, arrowTypesWithMarginSupport, addEdgeMarker;
  var init_edgeMarker = __esm({
    "src/rendering-util/rendering-elements/edgeMarker.ts"() {
      "use strict";
      init_logger();
      addEdgeMarkers = /* @__PURE__ */ __name((svgPath, edge, url, id41, diagramType, useMargin = false, strokeColor) => {
        if (edge.arrowTypeStart) {
          addEdgeMarker(
            svgPath,
            "start",
            edge.arrowTypeStart,
            url,
            id41,
            diagramType,
            useMargin,
            strokeColor
          );
        }
        if (edge.arrowTypeEnd) {
          addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id41, diagramType, useMargin, strokeColor);
        }
      }, "addEdgeMarkers");
      arrowTypesMap = {
        arrow_cross: { type: "cross", fill: false },
        arrow_point: { type: "point", fill: true },
        arrow_barb: { type: "barb", fill: true },
        arrow_barb_neo: { type: "barb", fill: true },
        arrow_circle: { type: "circle", fill: false },
        aggregation: { type: "aggregation", fill: false },
        extension: { type: "extension", fill: false },
        composition: { type: "composition", fill: true },
        dependency: { type: "dependency", fill: true },
        lollipop: { type: "lollipop", fill: false },
        only_one: { type: "onlyOne", fill: false },
        zero_or_one: { type: "zeroOrOne", fill: false },
        one_or_more: { type: "oneOrMore", fill: false },
        zero_or_more: { type: "zeroOrMore", fill: false },
        requirement_arrow: { type: "requirement_arrow", fill: false },
        requirement_contains: { type: "requirement_contains", fill: false }
      };
      arrowTypesWithMarginSupport = [
        "cross",
        "point",
        "circle",
        "lollipop",
        "aggregation",
        "extension",
        "composition",
        "dependency",
        "barb"
      ];
      addEdgeMarker = /* @__PURE__ */ __name((svgPath, position5, arrowType, url, id41, diagramType, useMargin = false, strokeColor) => {
        const arrowTypeInfo = arrowTypesMap[arrowType];
        const marginSupport = arrowTypeInfo && arrowTypesWithMarginSupport.includes(arrowTypeInfo.type);
        if (!arrowTypeInfo) {
          log.warn(`Unknown arrow type: ${arrowType}`);
          return;
        }
        const endMarkerType = arrowTypeInfo.type;
        const suffix = position5 === "start" ? "Start" : "End";
        const offset = useMargin && marginSupport ? "-margin" : "";
        const originalMarkerId = `${id41}_${diagramType}-${endMarkerType}${suffix}${offset}`;
        if (strokeColor && strokeColor.trim() !== "") {
          const colorId = strokeColor.replace(/[^\dA-Za-z]/g, "_");
          const coloredMarkerId = `${originalMarkerId}_${colorId}`;
          if (!document.getElementById(coloredMarkerId)) {
            const originalMarker = document.getElementById(originalMarkerId);
            if (originalMarker) {
              const coloredMarker = originalMarker.cloneNode(true);
              coloredMarker.id = coloredMarkerId;
              const paths = coloredMarker.querySelectorAll("path, circle, line");
              paths.forEach((path4) => {
                path4.setAttribute("stroke", strokeColor);
                if (arrowTypeInfo.fill) {
                  path4.setAttribute("fill", strokeColor);
                }
              });
              originalMarker.parentNode?.appendChild(coloredMarker);
            }
          }
          svgPath.attr(`marker-${position5}`, `url(${url}#${coloredMarkerId})`);
        } else {
          svgPath.attr(`marker-${position5}`, `url(${url}#${originalMarkerId})`);
        }
      }, "addEdgeMarker");
    }
  });

  // src/rendering-util/rendering-elements/edges.js
  function setTerminalWidth(fo, value2) {
    if (getEffectiveHtmlLabels(getConfig2()) && fo) {
      fo.style.width = value2.length * 9 + "px";
      fo.style.height = "12px";
    }
  }
  function extractCornerPoints(points) {
    const cornerPoints = [];
    const cornerPointPositions = [];
    for (let i2 = 1; i2 < points.length - 1; i2++) {
      const prev2 = points[i2 - 1];
      const curr = points[i2];
      const next3 = points[i2 + 1];
      if (prev2.x === curr.x && curr.y === next3.y && Math.abs(curr.x - next3.x) > 5 && Math.abs(curr.y - prev2.y) > 5) {
        cornerPoints.push(curr);
        cornerPointPositions.push(i2);
      } else if (prev2.y === curr.y && curr.x === next3.x && Math.abs(curr.x - prev2.x) > 5 && Math.abs(curr.y - next3.y) > 5) {
        cornerPoints.push(curr);
        cornerPointPositions.push(i2);
      }
    }
    return { cornerPoints, cornerPointPositions };
  }
  function generateRoundedPath(points, radius2) {
    if (points.length < 2) {
      return "";
    }
    let path4 = "";
    const size4 = points.length;
    const epsilon6 = 1e-5;
    for (let i2 = 0; i2 < size4; i2++) {
      const currPoint = points[i2];
      const prevPoint = points[i2 - 1];
      const nextPoint = points[i2 + 1];
      if (i2 === 0) {
        path4 += `M${currPoint.x},${currPoint.y}`;
      } else if (i2 === size4 - 1) {
        path4 += `L${currPoint.x},${currPoint.y}`;
      } else {
        const dx1 = currPoint.x - prevPoint.x;
        const dy1 = currPoint.y - prevPoint.y;
        const dx2 = nextPoint.x - currPoint.x;
        const dy2 = nextPoint.y - currPoint.y;
        const len1 = Math.hypot(dx1, dy1);
        const len2 = Math.hypot(dx2, dy2);
        if (len1 < epsilon6 || len2 < epsilon6) {
          path4 += `L${currPoint.x},${currPoint.y}`;
          continue;
        }
        const nx1 = dx1 / len1;
        const ny1 = dy1 / len1;
        const nx2 = dx2 / len2;
        const ny2 = dy2 / len2;
        const dot2 = nx1 * nx2 + ny1 * ny2;
        const clampedDot = Math.max(-1, Math.min(1, dot2));
        const angle2 = Math.acos(clampedDot);
        if (angle2 < epsilon6 || Math.abs(Math.PI - angle2) < epsilon6) {
          path4 += `L${currPoint.x},${currPoint.y}`;
          continue;
        }
        const cutLen = Math.min(radius2 / Math.sin(angle2 / 2), len1 / 2, len2 / 2);
        const startX2 = currPoint.x - nx1 * cutLen;
        const startY2 = currPoint.y - ny1 * cutLen;
        const endX = currPoint.x + nx2 * cutLen;
        const endY = currPoint.y + ny2 * cutLen;
        path4 += `L${startX2},${startY2}`;
        path4 += `Q${currPoint.x},${currPoint.y} ${endX},${endY}`;
      }
    }
    return path4;
  }
  function calculateDeltaAndAngle2(point1, point22) {
    if (!point1 || !point22) {
      return { angle: 0, deltaX: 0, deltaY: 0 };
    }
    const deltaX = point22.x - point1.x;
    const deltaY = point22.y - point1.y;
    const angle2 = Math.atan2(deltaY, deltaX);
    return { angle: angle2, deltaX, deltaY };
  }
  function applyMarkerOffsetsToPoints(points, edge) {
    const newPoints = points.map((point8) => ({ ...point8 }));
    if (points.length >= 2 && markerOffsets[edge.arrowTypeStart]) {
      const offsetValue = markerOffsets[edge.arrowTypeStart];
      const point1 = points[0];
      const point22 = points[1];
      const { angle: angle2 } = calculateDeltaAndAngle2(point1, point22);
      const offsetX = offsetValue * Math.cos(angle2);
      const offsetY = offsetValue * Math.sin(angle2);
      newPoints[0].x = point1.x + offsetX;
      newPoints[0].y = point1.y + offsetY;
    }
    const n2 = points.length;
    if (n2 >= 2 && markerOffsets[edge.arrowTypeEnd]) {
      const offsetValue = markerOffsets[edge.arrowTypeEnd];
      const point1 = points[n2 - 1];
      const point22 = points[n2 - 2];
      const { angle: angle2 } = calculateDeltaAndAngle2(point22, point1);
      const offsetX = offsetValue * Math.cos(angle2);
      const offsetY = offsetValue * Math.sin(angle2);
      newPoints[n2 - 1].x = point1.x - offsetX;
      newPoints[n2 - 1].y = point1.y - offsetY;
    }
    return newPoints;
  }
  var resolveEdgeCurveType, edgeLabels, terminalLabels, clear4, getLabelStyles, insertEdgeLabel, positionEdgeLabel, orthogonalizeToLabelClippedPoints, outsideNode, intersection, cutPathAtIntersect, findAdjacentPoint, fixCorners, generateDashArray, insertEdge;
  var init_edges = __esm({
    "src/rendering-util/rendering-elements/edges.js"() {
      "use strict";
      init_diagramAPI();
      init_config();
      init_logger();
      init_createText();
      init_labelTransform();
      init_utils2();
      init_lineWithOffset();
      init_subGraphTitleMargins();
      init_src32();
      init_rough_esm();
      init_createLabel();
      init_edgeMarker();
      init_handDrawnShapeStyles();
      resolveEdgeCurveType = /* @__PURE__ */ __name((edgeCurve) => {
        return typeof edgeCurve === "string" ? edgeCurve : getConfig2()?.flowchart?.curve;
      }, "resolveEdgeCurveType");
      edgeLabels = /* @__PURE__ */ new Map();
      terminalLabels = /* @__PURE__ */ new Map();
      clear4 = /* @__PURE__ */ __name(() => {
        edgeLabels.clear();
        terminalLabels.clear();
      }, "clear");
      getLabelStyles = /* @__PURE__ */ __name((styleArray) => {
        if (!styleArray) {
          return "";
        }
        if (typeof styleArray === "string") {
          return styleArray;
        }
        return styleArray.reduce((acc, style3) => acc + ";" + style3, "");
      }, "getLabelStyles");
      insertEdgeLabel = /* @__PURE__ */ __name(async (elem, edge) => {
        const config3 = getConfig2();
        let useHtmlLabels = getEffectiveHtmlLabels(config3);
        const { labelStyles } = styles2String(edge);
        edge.labelStyle = labelStyles;
        const edgeLabel = elem.insert("g").attr("class", "edgeLabel");
        const label = edgeLabel.insert("g").attr("class", "label").attr("data-id", edge.id);
        const isMarkdown = edge.labelType === "markdown";
        const markdownWidth = void 0;
        const labelElement = await createText(
          elem,
          edge.label,
          {
            style: getLabelStyles(edge.labelStyle),
            useHtmlLabels,
            addSvgBackground: true,
            isNode: false,
            markdown: isMarkdown,
            // Plain text edge labels should auto-wrap, markdown edge labels respect markdownAutoWrap config
            width: isMarkdown ? markdownWidth : void 0
          },
          config3
        );
        label.node().appendChild(labelElement);
        log.info("abc82", edge, edge.labelType);
        let bbox = labelElement.getBBox();
        let transformBbox = bbox;
        if (useHtmlLabels) {
          const div = labelElement.children[0];
          const dv = select_default2(labelElement);
          bbox = div.getBoundingClientRect();
          transformBbox = bbox;
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        } else {
          const textEl = select_default2(labelElement).select("text").node();
          if (textEl && typeof textEl.getBBox === "function") {
            transformBbox = textEl.getBBox();
          }
        }
        label.attr("transform", computeLabelTransform(transformBbox, useHtmlLabels));
        edgeLabels.set(edge.id, edgeLabel);
        edge.width = bbox.width;
        edge.height = bbox.height;
        let fo;
        if (edge.startLabelLeft) {
          const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = startEdgeLabelLeft.insert("g").attr("class", "inner");
          const startLabelElement = await createLabel_default(
            inner2,
            edge.startLabelLeft,
            getLabelStyles(edge.labelStyle) || "",
            false,
            false
          );
          fo = startLabelElement;
          let slBox = startLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = startLabelElement.children[0];
            const dv = select_default2(startLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels.get(edge.id)) {
            terminalLabels.set(edge.id, {});
          }
          terminalLabels.get(edge.id).startLeft = startEdgeLabelLeft;
          setTerminalWidth(fo, edge.startLabelLeft);
        }
        if (edge.startLabelRight) {
          const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = startEdgeLabelRight.insert("g").attr("class", "inner");
          const startLabelElement = await createLabel_default(
            inner2,
            edge.startLabelRight,
            getLabelStyles(edge.labelStyle) || "",
            false,
            false
          );
          fo = startLabelElement;
          let slBox = startLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = startLabelElement.children[0];
            const dv = select_default2(startLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels.get(edge.id)) {
            terminalLabels.set(edge.id, {});
          }
          terminalLabels.get(edge.id).startRight = startEdgeLabelRight;
          setTerminalWidth(fo, edge.startLabelRight);
        }
        if (edge.endLabelLeft) {
          const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = endEdgeLabelLeft.insert("g").attr("class", "inner");
          const endLabelElement = await createLabel_default(
            endEdgeLabelLeft,
            edge.endLabelLeft,
            getLabelStyles(edge.labelStyle) || "",
            false,
            false
          );
          fo = endLabelElement;
          let slBox = endLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = endLabelElement.children[0];
            const dv = select_default2(endLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels.get(edge.id)) {
            terminalLabels.set(edge.id, {});
          }
          terminalLabels.get(edge.id).endLeft = endEdgeLabelLeft;
          setTerminalWidth(fo, edge.endLabelLeft);
        }
        if (edge.endLabelRight) {
          const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = endEdgeLabelRight.insert("g").attr("class", "inner");
          const endLabelElement = await createLabel_default(
            endEdgeLabelRight,
            edge.endLabelRight,
            getLabelStyles(edge.labelStyle) || "",
            false,
            false
          );
          fo = endLabelElement;
          let slBox = endLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = endLabelElement.children[0];
            const dv = select_default2(endLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels.get(edge.id)) {
            terminalLabels.set(edge.id, {});
          }
          terminalLabels.get(edge.id).endRight = endEdgeLabelRight;
          setTerminalWidth(fo, edge.endLabelRight);
        }
        return labelElement;
      }, "insertEdgeLabel");
      __name(setTerminalWidth, "setTerminalWidth");
      positionEdgeLabel = /* @__PURE__ */ __name((edge, paths) => {
        log.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels.get(edge.id), paths);
        let path4 = paths.updatedPath ? paths.updatedPath : paths.originalPath;
        const siteConfig2 = getConfig2();
        const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig2);
        if (edge.label) {
          const el = edgeLabels.get(edge.id);
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcLabelPosition(path4);
            log.debug(
              "Moving label " + edge.label + " from (",
              x5,
              ",",
              y6,
              ") to (",
              pos.x,
              ",",
              pos.y,
              ") abc88"
            );
            if (paths.updatedPath) {
              x5 = pos.x;
              y6 = pos.y;
            }
          }
          el.attr("transform", `translate(${x5}, ${y6 + subGraphTitleTotalMargin / 2})`);
        }
        if (edge.startLabelLeft) {
          const el = terminalLabels.get(edge.id).startLeft;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path4);
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
        if (edge.startLabelRight) {
          const el = terminalLabels.get(edge.id).startRight;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(
              edge.arrowTypeStart ? 10 : 0,
              "start_right",
              path4
            );
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
        if (edge.endLabelLeft) {
          const el = terminalLabels.get(edge.id).endLeft;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path4);
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
        if (edge.endLabelRight) {
          const el = terminalLabels.get(edge.id).endRight;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path4);
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
      }, "positionEdgeLabel");
      orthogonalizeToLabelClippedPoints = /* @__PURE__ */ __name((edge, points) => {
        if (!edge?.isLabelEdge || !edge?.id?.endsWith("-to-label") || !Array.isArray(points)) {
          return points;
        }
        if (points.length !== 2) {
          return points;
        }
        const [start3, end2] = points;
        const dx = Math.abs(end2.x - start3.x);
        const dy = Math.abs(end2.y - start3.y);
        if (dx < 1e-3 || dy < 1e-3) {
          return points;
        }
        if (dy >= dx) {
          return [start3, { x: start3.x, y: end2.y }, end2];
        }
        return [start3, { x: end2.x, y: start3.y }, end2];
      }, "orthogonalizeToLabelClippedPoints");
      outsideNode = /* @__PURE__ */ __name((node2, point8) => {
        const x5 = node2.x;
        const y6 = node2.y;
        const dx = Math.abs(point8.x - x5);
        const dy = Math.abs(point8.y - y6);
        const w4 = node2.width / 2;
        const h3 = node2.height / 2;
        return dx >= w4 || dy >= h3;
      }, "outsideNode");
      intersection = /* @__PURE__ */ __name((node2, outsidePoint, insidePoint) => {
        log.debug(`intersection calc abc89:
  outsidePoint: ${JSON.stringify(outsidePoint)}
  insidePoint : ${JSON.stringify(insidePoint)}
  node        : x:${node2.x} y:${node2.y} w:${node2.width} h:${node2.height}`);
        const x5 = node2.x;
        const y6 = node2.y;
        const dx = Math.abs(x5 - insidePoint.x);
        const w4 = node2.width / 2;
        let r2 = insidePoint.x < outsidePoint.x ? w4 - dx : w4 + dx;
        const h3 = node2.height / 2;
        const Q3 = Math.abs(outsidePoint.y - insidePoint.y);
        const R3 = Math.abs(outsidePoint.x - insidePoint.x);
        if (Math.abs(y6 - outsidePoint.y) * w4 > Math.abs(x5 - outsidePoint.x) * h3) {
          let q3 = insidePoint.y < outsidePoint.y ? outsidePoint.y - h3 - y6 : y6 - h3 - outsidePoint.y;
          r2 = R3 * q3 / Q3;
          const res = {
            x: insidePoint.x < outsidePoint.x ? insidePoint.x + r2 : insidePoint.x - R3 + r2,
            y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q3 - q3 : insidePoint.y - Q3 + q3
          };
          if (r2 === 0) {
            res.x = outsidePoint.x;
            res.y = outsidePoint.y;
          }
          if (R3 === 0) {
            res.x = outsidePoint.x;
          }
          if (Q3 === 0) {
            res.y = outsidePoint.y;
          }
          log.debug(`abc89 top/bottom calc, Q ${Q3}, q ${q3}, R ${R3}, r ${r2}`, res);
          return res;
        } else {
          if (insidePoint.x < outsidePoint.x) {
            r2 = outsidePoint.x - w4 - x5;
          } else {
            r2 = x5 - w4 - outsidePoint.x;
          }
          let q3 = Q3 * r2 / R3;
          let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R3 - r2 : insidePoint.x - R3 + r2;
          let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q3 : insidePoint.y - q3;
          log.debug(`sides calc abc89, Q ${Q3}, q ${q3}, R ${R3}, r ${r2}`, { _x, _y });
          if (r2 === 0) {
            _x = outsidePoint.x;
            _y = outsidePoint.y;
          }
          if (R3 === 0) {
            _x = outsidePoint.x;
          }
          if (Q3 === 0) {
            _y = outsidePoint.y;
          }
          return { x: _x, y: _y };
        }
      }, "intersection");
      cutPathAtIntersect = /* @__PURE__ */ __name((_points, boundaryNode) => {
        log.warn("abc88 cutPathAtIntersect", _points, boundaryNode);
        let points = [];
        let lastPointOutside = _points[0];
        let isInside = false;
        _points.forEach((point8) => {
          log.info("abc88 checking point", point8, boundaryNode);
          if (!outsideNode(boundaryNode, point8) && !isInside) {
            const inter = intersection(boundaryNode, lastPointOutside, point8);
            log.debug("abc88 inside", point8, lastPointOutside, inter);
            log.debug("abc88 intersection", inter, boundaryNode);
            let pointPresent = false;
            points.forEach((p3) => {
              pointPresent = pointPresent || p3.x === inter.x && p3.y === inter.y;
            });
            if (!points.some((e3) => e3.x === inter.x && e3.y === inter.y)) {
              points.push(inter);
            } else {
              log.warn("abc88 no intersect", inter, points);
            }
            isInside = true;
          } else {
            log.warn("abc88 outside", point8, lastPointOutside);
            lastPointOutside = point8;
            if (!isInside) {
              points.push(point8);
            }
          }
        });
        log.debug("returning points", points);
        return points;
      }, "cutPathAtIntersect");
      __name(extractCornerPoints, "extractCornerPoints");
      findAdjacentPoint = /* @__PURE__ */ __name(function(pointA, pointB, distance3) {
        const xDiff = pointB.x - pointA.x;
        const yDiff = pointB.y - pointA.y;
        const length2 = Math.sqrt(xDiff * xDiff + yDiff * yDiff);
        const ratio = distance3 / length2;
        return { x: pointB.x - ratio * xDiff, y: pointB.y - ratio * yDiff };
      }, "findAdjacentPoint");
      fixCorners = /* @__PURE__ */ __name(function(lineData) {
        const { cornerPointPositions } = extractCornerPoints(lineData);
        const newLineData = [];
        for (let i2 = 0; i2 < lineData.length; i2++) {
          if (cornerPointPositions.includes(i2)) {
            const prevPoint = lineData[i2 - 1];
            const nextPoint = lineData[i2 + 1];
            const cornerPoint = lineData[i2];
            const newPrevPoint = findAdjacentPoint(prevPoint, cornerPoint, 5);
            const newNextPoint = findAdjacentPoint(nextPoint, cornerPoint, 5);
            const xDiff = newNextPoint.x - newPrevPoint.x;
            const yDiff = newNextPoint.y - newPrevPoint.y;
            newLineData.push(newPrevPoint);
            const a2 = Math.sqrt(2) * 2;
            let newCornerPoint = { x: cornerPoint.x, y: cornerPoint.y };
            if (Math.abs(nextPoint.x - prevPoint.x) > 10 && Math.abs(nextPoint.y - prevPoint.y) >= 10) {
              log.debug(
                "Corner point fixing",
                Math.abs(nextPoint.x - prevPoint.x),
                Math.abs(nextPoint.y - prevPoint.y)
              );
              const r2 = 5;
              if (cornerPoint.x === newPrevPoint.x) {
                newCornerPoint = {
                  x: xDiff < 0 ? newPrevPoint.x - r2 + a2 : newPrevPoint.x + r2 - a2,
                  y: yDiff < 0 ? newPrevPoint.y - a2 : newPrevPoint.y + a2
                };
              } else {
                newCornerPoint = {
                  x: xDiff < 0 ? newPrevPoint.x - a2 : newPrevPoint.x + a2,
                  y: yDiff < 0 ? newPrevPoint.y - r2 + a2 : newPrevPoint.y + r2 - a2
                };
              }
            } else {
              log.debug(
                "Corner point skipping fixing",
                Math.abs(nextPoint.x - prevPoint.x),
                Math.abs(nextPoint.y - prevPoint.y)
              );
            }
            newLineData.push(newCornerPoint, newNextPoint);
          } else {
            newLineData.push(lineData[i2]);
          }
        }
        return newLineData;
      }, "fixCorners");
      generateDashArray = /* @__PURE__ */ __name((len, oValueS, oValueE) => {
        const middleLength = len - oValueS - oValueE;
        const dashLength = 2;
        const gapLength = 2;
        const dashGapPairLength = dashLength + gapLength;
        const numberOfPairs = Math.floor(middleLength / dashGapPairLength);
        const middlePattern = Array(numberOfPairs).fill(`${dashLength} ${gapLength}`).join(" ");
        const dashArray = `0 ${oValueS} ${middlePattern} ${oValueE}`;
        return dashArray;
      }, "generateDashArray");
      insertEdge = /* @__PURE__ */ __name(function(elem, edge, clusterDb2, diagramType, startNode, endNode, diagramId3, skipIntersect = false) {
        if (!diagramId3) {
          throw new Error(
            `insertEdge: missing diagramId for edge "${edge.id}" \u2014 edge IDs require a diagram prefix for uniqueness`
          );
        }
        const { handDrawnSeed, layout: layout7 } = getConfig2();
        let points = edge.points;
        let pointsHasChanged = false;
        const tail = startNode;
        var head2 = endNode;
        const edgeClassStyles = [];
        for (const key in edge.cssCompiledStyles) {
          if (isLabelStyle(key)) {
            continue;
          }
          edgeClassStyles.push(edge.cssCompiledStyles[key]);
        }
        if (layout7 === "swimlane") {
          if (head2.intersect && tail.intersect && Array.isArray(points) && points.length >= 2) {
            if (points.length === 2) {
              points = [tail.intersect(points[0]), head2.intersect(points[1])];
            } else {
              const innerPoints = points.slice(1, -1);
              const firstInner = innerPoints[0];
              const lastInner = innerPoints[innerPoints.length - 1];
              const TOLERANCE = 0.5;
              const lastIsPinned = Math.abs(points[points.length - 1].x - lastInner.x) < TOLERANCE && Math.abs(points[points.length - 1].y - lastInner.y) < TOLERANCE;
              const newFirst = tail.intersect(firstInner);
              const newLast = lastIsPinned ? lastInner : head2.intersect(lastInner);
              const lastIsDuplicate = Math.abs(newLast.x - lastInner.x) < TOLERANCE && Math.abs(newLast.y - lastInner.y) < TOLERANCE;
              const firstIsDuplicate = Math.abs(newFirst.x - firstInner.x) < TOLERANCE && Math.abs(newFirst.y - firstInner.y) < TOLERANCE;
              const startPoints = firstIsDuplicate ? [] : [newFirst];
              const endPoints = lastIsDuplicate ? [] : [newLast];
              points = [...startPoints, ...innerPoints, ...endPoints];
            }
          }
          points = orthogonalizeToLabelClippedPoints(edge, points);
        } else if (head2.intersect && tail.intersect && !skipIntersect) {
          points = points.slice(1, edge.points.length - 1);
          points.unshift(tail.intersect(points[0]));
          points.push(head2.intersect(points[points.length - 1]));
        }
        const pointsStr = btoa(JSON.stringify(points));
        if (edge.toCluster) {
          log.info("to cluster abc88", clusterDb2.get(edge.toCluster));
          points = cutPathAtIntersect(edge.points, clusterDb2.get(edge.toCluster).node);
          pointsHasChanged = true;
        }
        if (edge.fromCluster) {
          log.debug(
            "from cluster abc88",
            clusterDb2.get(edge.fromCluster),
            JSON.stringify(points, null, 2)
          );
          points = cutPathAtIntersect(points.reverse(), clusterDb2.get(edge.fromCluster).node).reverse();
          pointsHasChanged = true;
        }
        let lineData = points.filter((p3) => !Number.isNaN(p3.y));
        const edgeCurveType = resolveEdgeCurveType(edge.curve);
        if (edgeCurveType !== "rounded") {
          lineData = fixCorners(lineData);
        }
        let curve = linear_default;
        switch (edgeCurveType) {
          case "linear":
            curve = linear_default;
            break;
          case "basis":
            curve = basis_default2;
            break;
          case "cardinal":
            curve = cardinal_default;
            break;
          case "bumpX":
            curve = bumpX;
            break;
          case "bumpY":
            curve = bumpY;
            break;
          case "catmullRom":
            curve = catmullRom_default;
            break;
          case "monotoneX":
            curve = monotoneX;
            break;
          case "monotoneY":
            curve = monotoneY;
            break;
          case "natural":
            curve = natural_default;
            break;
          case "step":
            curve = step_default;
            break;
          case "stepAfter":
            curve = stepAfter;
            break;
          case "stepBefore":
            curve = stepBefore;
            break;
          case "rounded":
            curve = linear_default;
            break;
          default:
            curve = basis_default2;
        }
        const { x: x5, y: y6 } = getLineFunctionsWithOffset(edge);
        const lineFunction = line_default().x(x5).y(y6).curve(curve);
        let strokeClasses;
        switch (edge.thickness) {
          case "normal":
            strokeClasses = "edge-thickness-normal";
            break;
          case "thick":
            strokeClasses = "edge-thickness-thick";
            break;
          case "invisible":
            strokeClasses = "edge-thickness-invisible";
            break;
          default:
            strokeClasses = "edge-thickness-normal";
        }
        switch (edge.pattern) {
          case "solid":
            strokeClasses += " edge-pattern-solid";
            break;
          case "dotted":
            strokeClasses += " edge-pattern-dotted";
            break;
          case "dashed":
            strokeClasses += " edge-pattern-dashed";
            break;
          default:
            strokeClasses += " edge-pattern-solid";
        }
        let svgPath;
        let linePath = edgeCurveType === "rounded" ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5) : lineFunction(lineData);
        const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style];
        let strokeColor = edgeStyles.find((style3) => style3?.startsWith("stroke:"));
        let animationClass = "";
        if (edge.animate) {
          animationClass = "edge-animation-fast";
        }
        if (edge.animation) {
          animationClass = "edge-animation-" + edge.animation;
        }
        let animatedEdge = false;
        if (edge.look === "handDrawn") {
          const rc = at.svg(elem);
          Object.assign([], lineData);
          const svgPathNode = rc.path(linePath, {
            roughness: 0.3,
            seed: handDrawnSeed
          });
          strokeClasses += " transition";
          svgPath = select_default2(svgPathNode).select("path").attr("id", `${diagramId3}-${edge.id}`).attr(
            "class",
            " " + strokeClasses + (edge.classes ? " " + edge.classes : "") + (animationClass ? " " + animationClass : "")
          ).attr("style", edgeStyles ? edgeStyles.reduce((acc, style3) => acc + ";" + style3, "") : "");
          let d3 = svgPath.attr("d");
          svgPath.attr("d", d3);
          elem.node().appendChild(svgPath.node());
        } else {
          const stylesFromClasses = edgeClassStyles.join(";");
          const styles7 = edgeStyles ? edgeStyles.reduce((acc, style3) => acc + style3 + ";", "") : "";
          const pathStyle = (stylesFromClasses ? stylesFromClasses + ";" + styles7 + ";" : styles7) + ";" + (edgeStyles ? edgeStyles.reduce((acc, style3) => acc + ";" + style3, "") : "");
          svgPath = elem.append("path").attr("d", linePath).attr("id", `${diagramId3}-${edge.id}`).attr(
            "class",
            " " + strokeClasses + (edge.classes ? " " + edge.classes : "") + (animationClass ? " " + animationClass : "")
          ).attr("style", pathStyle);
          strokeColor = pathStyle.match(/stroke:([^;]+)/)?.[1];
          animatedEdge = edge.animate === true || !!edge.animation || stylesFromClasses.includes("animation");
          const pathNode = svgPath.node();
          const len = typeof pathNode.getTotalLength === "function" ? pathNode.getTotalLength() : 0;
          const oValueS = markerOffsets2[edge.arrowTypeStart] || 0;
          const oValueE = markerOffsets2[edge.arrowTypeEnd] || 0;
          if (edge.look === "neo" && !animatedEdge) {
            const dashArray = edge.pattern === "dotted" || edge.pattern === "dashed" ? generateDashArray(len, oValueS, oValueE) : `0 ${oValueS} ${len - oValueS - oValueE} ${oValueE}`;
            const mOffset = `stroke-dasharray: ${dashArray}; stroke-dashoffset: 0;`;
            svgPath.attr("style", mOffset + svgPath.attr("style"));
          }
        }
        svgPath.attr("data-edge", true);
        svgPath.attr("data-et", "edge");
        svgPath.attr("data-id", edge.id);
        svgPath.attr("data-points", pointsStr);
        svgPath.attr("data-look", handleUndefinedAttr(edge.look));
        if (edge.showPoints) {
          lineData.forEach((point9) => {
            elem.append("circle").style("stroke", "red").style("fill", "red").attr("r", 1).attr("cx", point9.x).attr("cy", point9.y);
          });
        }
        let url = "";
        if (getConfig2().flowchart.arrowMarkerAbsolute || getConfig2().state.arrowMarkerAbsolute) {
          url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
          url = url.replace(/\(/g, "\\(").replace(/\)/g, "\\)");
        }
        log.info("arrowTypeStart", edge.arrowTypeStart);
        log.info("arrowTypeEnd", edge.arrowTypeEnd);
        const useMargin = !animatedEdge && edge?.look === "neo";
        addEdgeMarkers(svgPath, edge, url, diagramId3, diagramType, useMargin, strokeColor);
        const midIndex = Math.floor(points.length / 2);
        const point8 = points[midIndex];
        if (!utils_default2.isLabelCoordinateInPath(point8, svgPath.attr("d"))) {
          pointsHasChanged = true;
        }
        let paths = {};
        if (pointsHasChanged) {
          paths.updatedPath = points;
        }
        paths.originalPath = edge.points;
        return paths;
      }, "insertEdge");
      __name(generateRoundedPath, "generateRoundedPath");
      __name(calculateDeltaAndAngle2, "calculateDeltaAndAngle");
      __name(applyMarkerOffsetsToPoints, "applyMarkerOffsetsToPoints");
    }
  });

  // src/rendering-util/rendering-elements/markers.js
  var insertMarkers, extension, composition, aggregation, dependency, lollipop, point6, circle2, cross, barb, barbNeo, only_one, zero_or_one, one_or_more, zero_or_more, only_one_neo, zero_or_one_neo, one_or_more_neo, zero_or_more_neo, requirement_arrow, requirement_arrow_neo, requirement_contains, requirement_contains_neo, markers, markers_default;
  var init_markers = __esm({
    "src/rendering-util/rendering-elements/markers.js"() {
      "use strict";
      init_logger();
      init_config();
      insertMarkers = /* @__PURE__ */ __name((elem, markerArray, type3, id41) => {
        markerArray.forEach((markerName) => {
          markers[markerName](elem, type3, id41);
        });
      }, "insertMarkers");
      extension = /* @__PURE__ */ __name((elem, type3, id41) => {
        log.trace("Making markers for ", id41);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-extensionStart").attr("class", "marker extension " + type3).attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").attr("d", "M 1,7 L18,13 V 1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-extensionEnd").attr("class", "marker extension " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-extensionStart-margin").attr("class", "marker extension " + type3).attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").attr("viewBox", "0 0 20 14").append("polygon").attr("points", "10,7 18,13 18,1").style("stroke-width", 2).style("stroke-dasharray", "0");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-extensionEnd-margin").attr("class", "marker extension " + type3).attr("refX", 9).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").attr("viewBox", "0 0 20 14").append("polygon").attr("points", "10,1 10,13 18,7").style("stroke-width", 2).style("stroke-dasharray", "0");
      }, "extension");
      composition = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-compositionStart").attr("class", "marker composition " + type3).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-compositionEnd").attr("class", "marker composition " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-compositionStart-margin").attr("class", "marker composition " + type3).attr("refX", 15).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").style("stroke-width", 0).attr("viewBox", "0 0 15 15").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-compositionEnd-margin").attr("class", "marker composition " + type3).attr("refX", 3.5).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").style("stroke-width", 0).attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
      }, "composition");
      aggregation = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-aggregationStart").attr("class", "marker aggregation " + type3).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-aggregationEnd").attr("class", "marker aggregation " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-aggregationStart-margin").attr("class", "marker aggregation " + type3).attr("refX", 15).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").style("stroke-width", 2).attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-aggregationEnd-margin").attr("class", "marker aggregation " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").style("stroke-width", 2).attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
      }, "aggregation");
      dependency = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-dependencyStart").attr("class", "marker dependency " + type3).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-dependencyEnd").attr("class", "marker dependency " + type3).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-dependencyStart-margin").attr("class", "marker dependency " + type3).attr("refX", 4).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").style("stroke-width", 0).attr("d", "M 5,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-dependencyEnd-margin").attr("class", "marker dependency " + type3).attr("refX", 16).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").style("stroke-width", 0).attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
      }, "dependency");
      lollipop = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-lollipopStart").attr("class", "marker lollipop " + type3).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-lollipopEnd").attr("class", "marker lollipop " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-lollipopStart-margin").attr("class", "marker lollipop " + type3).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("circle").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6).attr("stroke-width", 2);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-lollipopEnd-margin").attr("class", "marker lollipop " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("circle").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6).attr("stroke-width", 2);
      }, "lollipop");
      point6 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("marker").attr("id", id41 + "_" + type3 + "-pointEnd").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", 5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 8).attr("markerHeight", 8).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-pointStart").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 8).attr("markerHeight", 8).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-pointEnd-margin").attr("class", "marker " + type3).attr("viewBox", "0 0 11.5 14").attr("refX", 11.5).attr("refY", 7).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 10.5).attr("markerHeight", 14).attr("orient", "auto").append("path").attr("d", "M 0 0 L 11.5 7 L 0 14 z").attr("class", "arrowMarkerPath").style("stroke-width", 0).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-pointStart-margin").attr("class", "marker " + type3).attr("viewBox", "0 0 11.5 14").attr("refX", 1).attr("refY", 7).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11.5).attr("markerHeight", 14).attr("orient", "auto").append("polygon").attr("points", "0,7 11.5,14 11.5,0").attr("class", "arrowMarkerPath").style("stroke-width", 0).style("stroke-dasharray", "1,0");
      }, "point");
      circle2 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("marker").attr("id", id41 + "_" + type3 + "-circleEnd").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-circleStart").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-circleEnd-margin").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refY", 5).attr("refX", 12.25).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 14).attr("markerHeight", 14).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 0).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-circleStart-margin").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", -2).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 14).attr("markerHeight", 14).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 0).style("stroke-dasharray", "1,0");
      }, "circle");
      cross = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("marker").attr("id", id41 + "_" + type3 + "-crossEnd").attr("class", "marker cross " + type3).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-crossStart").attr("class", "marker cross " + type3).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-crossEnd-margin").attr("class", "marker cross " + type3).attr("viewBox", "0 0 15 15").attr("refX", 17.7).attr("refY", 7.5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 1,1 L 14,14 M 1,14 L 14,1").attr("class", "arrowMarkerPath").style("stroke-width", 2.5);
        elem.append("marker").attr("id", id41 + "_" + type3 + "-crossStart-margin").attr("class", "marker cross " + type3).attr("viewBox", "0 0 15 15").attr("refX", -3.5).attr("refY", 7.5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 1,1 L 14,14 M 1,14 L 14,1").attr("class", "arrowMarkerPath").style("stroke-width", 2.5).style("stroke-dasharray", "1,0");
      }, "cross");
      barb = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "userSpaceOnUse").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z");
      }, "barb");
      barbNeo = /* @__PURE__ */ __name((elem, type3, id41) => {
        const config3 = getConfig();
        const { themeVariables } = config3;
        const { transitionColor } = themeVariables;
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L11,14 L13,7 L11,0 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-barbEnd-margin").attr("refX", 17).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "userSpaceOnUse").attr("orient", "auto").append("path").attr("d", "M 19,7 L11,14 L13,7 L11,0 Z").attr("fill", `${transitionColor}`);
      }, "barbNeo");
      only_one = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-onlyOneStart").attr("class", "marker onlyOne " + type3).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("d", "M9,0 L9,18 M15,0 L15,18");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-onlyOneEnd").attr("class", "marker onlyOne " + type3).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("d", "M3,0 L3,18 M9,0 L9,18");
      }, "only_one");
      zero_or_one = /* @__PURE__ */ __name((elem, type3, id41) => {
        const startMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrOneStart").attr("class", "marker zeroOrOne " + type3).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto");
        startMarker.append("circle").attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6);
        startMarker.append("path").attr("d", "M9,0 L9,18");
        const endMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrOneEnd").attr("class", "marker zeroOrOne " + type3).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto");
        endMarker.append("circle").attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6);
        endMarker.append("path").attr("d", "M21,0 L21,18");
      }, "zero_or_one");
      one_or_more = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-oneOrMoreStart").attr("class", "marker oneOrMore " + type3).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-oneOrMoreEnd").attr("class", "marker oneOrMore " + type3).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18");
      }, "one_or_more");
      zero_or_more = /* @__PURE__ */ __name((elem, type3, id41) => {
        const startMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrMoreStart").attr("class", "marker zeroOrMore " + type3).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto");
        startMarker.append("circle").attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6);
        startMarker.append("path").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18");
        const endMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrMoreEnd").attr("class", "marker zeroOrMore " + type3).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto");
        endMarker.append("circle").attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6);
        endMarker.append("path").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18");
      }, "zero_or_more");
      only_one_neo = /* @__PURE__ */ __name((elem, type3, id41) => {
        const config3 = getConfig();
        const { themeVariables } = config3;
        const { strokeWidth } = themeVariables;
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-onlyOneStart").attr("class", "marker onlyOne " + type3).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").attr("d", "M9,0 L9,18 M15,0 L15,18").attr("stroke-width", `${strokeWidth}`);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-onlyOneEnd").attr("class", "marker onlyOne " + type3).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").attr("d", "M3,0 L3,18 M9,0 L9,18").attr("stroke-width", `${strokeWidth}`);
      }, "only_one_neo");
      zero_or_one_neo = /* @__PURE__ */ __name((elem, type3, id41) => {
        const config3 = getConfig();
        const { themeVariables } = config3;
        const { strokeWidth, mainBkg } = themeVariables;
        const startMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrOneStart").attr("class", "marker zeroOrOne " + type3).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse");
        startMarker.append("circle").attr("fill", mainBkg ?? "white").attr("cx", 21).attr("cy", 9).attr("stroke-width", `${strokeWidth}`).attr("r", 6);
        startMarker.append("path").attr("d", "M9,0 L9,18").attr("stroke-width", `${strokeWidth}`);
        const endMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrOneEnd").attr("class", "marker zeroOrOne " + type3).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("markerUnits", "userSpaceOnUse").attr("orient", "auto");
        endMarker.append("circle").attr("fill", mainBkg ?? "white").attr("cx", 9).attr("cy", 9).attr("stroke-width", `${strokeWidth}`).attr("r", 6);
        endMarker.append("path").attr("d", "M21,0 L21,18").attr("stroke-width", `${strokeWidth}`);
      }, "zero_or_one_neo");
      one_or_more_neo = /* @__PURE__ */ __name((elem, type3, id41) => {
        const config3 = getConfig();
        const { themeVariables } = config3;
        const { strokeWidth } = themeVariables;
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-oneOrMoreStart").attr("class", "marker oneOrMore " + type3).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("path").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27").attr("stroke-width", `${strokeWidth}`);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-oneOrMoreEnd").attr("class", "marker oneOrMore " + type3).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("markerUnits", "userSpaceOnUse").attr("orient", "auto").append("path").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18").attr("stroke-width", `${strokeWidth}`);
      }, "one_or_more_neo");
      zero_or_more_neo = /* @__PURE__ */ __name((elem, type3, id41) => {
        const config3 = getConfig();
        const { themeVariables } = config3;
        const { strokeWidth, mainBkg } = themeVariables;
        const startMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrMoreStart").attr("class", "marker zeroOrMore " + type3).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("markerUnits", "userSpaceOnUse").attr("orient", "auto");
        startMarker.append("circle").attr("fill", mainBkg ?? "white").attr("cx", 45.5).attr("cy", 18).attr("r", 6).attr("stroke-width", `${strokeWidth}`);
        startMarker.append("path").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18").attr("stroke-width", `${strokeWidth}`);
        const endMarker = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-zeroOrMoreEnd").attr("class", "marker zeroOrMore " + type3).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse");
        endMarker.append("circle").attr("fill", mainBkg ?? "white").attr("cx", 11).attr("cy", 18).attr("r", 6).attr("stroke-width", `${strokeWidth}`);
        endMarker.append("path").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18").attr("stroke-width", `${strokeWidth}`);
      }, "zero_or_more_neo");
      requirement_arrow = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-requirement_arrowEnd").attr("refX", 20).attr("refY", 10).attr("markerWidth", 20).attr("markerHeight", 20).attr("orient", "auto").append("path").attr(
          "d",
          `M0,0
      L20,10
      M20,10
      L0,20`
        );
      }, "requirement_arrow");
      requirement_arrow_neo = /* @__PURE__ */ __name((elem, type3, id41) => {
        const config3 = getConfig();
        const { themeVariables } = config3;
        const { strokeWidth } = themeVariables;
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-requirement_arrowEnd").attr("refX", 20).attr("refY", 10).attr("markerWidth", 20).attr("markerHeight", 20).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").attr("stroke-width", `${strokeWidth}`).attr("viewBox", "0 0 25 20").append("path").attr(
          "d",
          `M0,0
      L20,10
      M20,10
      L0,20`
        ).attr("stroke-linejoin", "miter");
      }, "requirement_arrow_neo");
      requirement_contains = /* @__PURE__ */ __name((elem, type3, id41) => {
        const containsNode = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-requirement_containsStart").attr("refX", 0).attr("refY", 10).attr("markerWidth", 20).attr("markerHeight", 20).attr("orient", "auto").append("g");
        containsNode.append("circle").attr("cx", 10).attr("cy", 10).attr("r", 9).attr("fill", "none");
        containsNode.append("line").attr("x1", 1).attr("x2", 19).attr("y1", 10).attr("y2", 10);
        containsNode.append("line").attr("y1", 1).attr("y2", 19).attr("x1", 10).attr("x2", 10);
      }, "requirement_contains");
      requirement_contains_neo = /* @__PURE__ */ __name((elem, type3, id41) => {
        const config3 = getConfig();
        const { themeVariables } = config3;
        const { strokeWidth } = themeVariables;
        const containsNode = elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-requirement_containsStart").attr("refX", 0).attr("refY", 10).attr("markerWidth", 20).attr("markerHeight", 20).attr("orient", "auto").attr("markerUnits", "userSpaceOnUse").append("g");
        containsNode.append("circle").attr("cx", 10).attr("cy", 10).attr("r", 9).attr("fill", "none");
        containsNode.append("line").attr("x1", 1).attr("x2", 19).attr("y1", 10).attr("y2", 10);
        containsNode.append("line").attr("y1", 1).attr("y2", 19).attr("x1", 10).attr("x2", 10);
        containsNode.selectAll("*").attr("stroke-width", `${strokeWidth}`);
      }, "requirement_contains_neo");
      markers = {
        extension,
        composition,
        aggregation,
        dependency,
        lollipop,
        point: point6,
        circle: circle2,
        cross,
        barb,
        barbNeo,
        only_one,
        zero_or_one,
        one_or_more,
        zero_or_more,
        only_one_neo,
        zero_or_one_neo,
        one_or_more_neo,
        zero_or_more_neo,
        requirement_arrow,
        requirement_contains,
        requirement_arrow_neo,
        requirement_contains_neo
      };
      markers_default = insertMarkers;
    }
  });

  // src/rendering-util/rendering-elements/nodes.ts
  async function insertNode(elem, node2, renderOptions) {
    let newEl;
    let el;
    if (node2.shape === "rect") {
      if (node2.rx && node2.ry) {
        node2.shape = "roundedRect";
      } else {
        node2.shape = "squareRect";
      }
    }
    const shapeHandler = node2.shape ? shapes[node2.shape] : void 0;
    if (!shapeHandler) {
      throw new Error(`No such shape: ${node2.shape}. Please check your syntax.`);
    }
    if (node2.link) {
      let target;
      if (renderOptions.config.securityLevel === "sandbox") {
        target = "_top";
      } else if (node2.linkTarget) {
        target = node2.linkTarget || "_blank";
      }
      newEl = elem.insert("svg:a").attr("xlink:href", node2.link).attr("target", target ?? null);
      el = await shapeHandler(newEl, node2, renderOptions);
    } else {
      el = await shapeHandler(elem, node2, renderOptions);
      newEl = el;
    }
    newEl.attr("data-look", handleUndefinedAttr(node2.look));
    if (node2.tooltip) {
      el.attr("title", node2.tooltip);
    }
    nodeElems.set(node2.id, newEl);
    if (node2.haveCallback) {
      newEl.attr("class", newEl.attr("class") + " clickable");
    }
    return newEl;
  }
  var nodeElems, setNodeElem, clear5, positionNode;
  var init_nodes2 = __esm({
    "src/rendering-util/rendering-elements/nodes.ts"() {
      "use strict";
      init_logger();
      init_shapes();
      init_utils2();
      nodeElems = /* @__PURE__ */ new Map();
      __name(insertNode, "insertNode");
      setNodeElem = /* @__PURE__ */ __name((elem, node2) => {
        nodeElems.set(node2.id, elem);
      }, "setNodeElem");
      clear5 = /* @__PURE__ */ __name(() => {
        nodeElems.clear();
      }, "clear");
      positionNode = /* @__PURE__ */ __name((node2) => {
        const el = nodeElems.get(node2.id);
        log.trace(
          "Transforming node",
          node2.diff,
          node2,
          "translate(" + (node2.x - node2.width / 2 - 5) + ", " + node2.width / 2 + ")"
        );
        const padding = 8;
        const diff2 = node2.diff || 0;
        if (node2.clusterNode) {
          el.attr(
            "transform",
            "translate(" + (node2.x + diff2 - node2.width / 2) + ", " + (node2.y - node2.height / 2 - padding) + ")"
          );
        } else {
          el.attr("transform", "translate(" + node2.x + ", " + node2.y + ")");
        }
        return diff2;
      }, "positionNode");
    }
  });

  // src/internals.ts
  var internalHelpers;
  var init_internals = __esm({
    "src/internals.ts"() {
      "use strict";
      init_config();
      init_common();
      init_logger();
      init_clusters();
      init_edges();
      init_markers();
      init_nodes2();
      init_util();
      init_utils2();
      internalHelpers = {
        common: common_default,
        getConfig,
        insertCluster,
        insertEdge,
        insertEdgeLabel,
        insertMarkers: markers_default,
        insertNode,
        interpolateToCurve,
        labelHelper,
        log,
        positionEdgeLabel
      };
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js
  var freeGlobal, freeGlobal_default;
  var init_freeGlobal = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js"() {
      "use strict";
      freeGlobal = typeof global == "object" && global && global.Object === Object && global;
      freeGlobal_default = freeGlobal;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_root.js
  var freeSelf, root2, root_default;
  var init_root = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_root.js"() {
      "use strict";
      init_freeGlobal();
      freeSelf = typeof self == "object" && self && self.Object === Object && self;
      root2 = freeGlobal_default || freeSelf || Function("return this")();
      root_default = root2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js
  var Symbol2, Symbol_default;
  var init_Symbol = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js"() {
      "use strict";
      init_root();
      Symbol2 = root_default.Symbol;
      Symbol_default = Symbol2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js
  function getRawTag(value2) {
    var isOwn = hasOwnProperty.call(value2, symToStringTag), tag = value2[symToStringTag];
    try {
      value2[symToStringTag] = void 0;
      var unmasked = true;
    } catch (e3) {
    }
    var result = nativeObjectToString.call(value2);
    if (unmasked) {
      if (isOwn) {
        value2[symToStringTag] = tag;
      } else {
        delete value2[symToStringTag];
      }
    }
    return result;
  }
  var objectProto, hasOwnProperty, nativeObjectToString, symToStringTag, getRawTag_default;
  var init_getRawTag = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js"() {
      "use strict";
      init_Symbol();
      objectProto = Object.prototype;
      hasOwnProperty = objectProto.hasOwnProperty;
      nativeObjectToString = objectProto.toString;
      symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
      __name(getRawTag, "getRawTag");
      getRawTag_default = getRawTag;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js
  function objectToString(value2) {
    return nativeObjectToString2.call(value2);
  }
  var objectProto2, nativeObjectToString2, objectToString_default;
  var init_objectToString = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js"() {
      "use strict";
      objectProto2 = Object.prototype;
      nativeObjectToString2 = objectProto2.toString;
      __name(objectToString, "objectToString");
      objectToString_default = objectToString;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js
  function baseGetTag(value2) {
    if (value2 == null) {
      return value2 === void 0 ? undefinedTag : nullTag;
    }
    return symToStringTag2 && symToStringTag2 in Object(value2) ? getRawTag_default(value2) : objectToString_default(value2);
  }
  var nullTag, undefinedTag, symToStringTag2, baseGetTag_default;
  var init_baseGetTag = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js"() {
      "use strict";
      init_Symbol();
      init_getRawTag();
      init_objectToString();
      nullTag = "[object Null]";
      undefinedTag = "[object Undefined]";
      symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
      __name(baseGetTag, "baseGetTag");
      baseGetTag_default = baseGetTag;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js
  function isObjectLike2(value2) {
    return value2 != null && typeof value2 == "object";
  }
  var isObjectLike_default;
  var init_isObjectLike2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js"() {
      "use strict";
      __name(isObjectLike2, "isObjectLike");
      isObjectLike_default = isObjectLike2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js
  function isSymbol(value2) {
    return typeof value2 == "symbol" || isObjectLike_default(value2) && baseGetTag_default(value2) == symbolTag2;
  }
  var symbolTag2, isSymbol_default;
  var init_isSymbol = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js"() {
      "use strict";
      init_baseGetTag();
      init_isObjectLike2();
      symbolTag2 = "[object Symbol]";
      __name(isSymbol, "isSymbol");
      isSymbol_default = isSymbol;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js
  function arrayMap(array4, iteratee) {
    var index = -1, length2 = array4 == null ? 0 : array4.length, result = Array(length2);
    while (++index < length2) {
      result[index] = iteratee(array4[index], index, array4);
    }
    return result;
  }
  var arrayMap_default;
  var init_arrayMap = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js"() {
      "use strict";
      __name(arrayMap, "arrayMap");
      arrayMap_default = arrayMap;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArray.js
  var isArray2, isArray_default;
  var init_isArray2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArray.js"() {
      "use strict";
      isArray2 = Array.isArray;
      isArray_default = isArray2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js
  function baseToString(value2) {
    if (typeof value2 == "string") {
      return value2;
    }
    if (isArray_default(value2)) {
      return arrayMap_default(value2, baseToString) + "";
    }
    if (isSymbol_default(value2)) {
      return symbolToString ? symbolToString.call(value2) : "";
    }
    var result = value2 + "";
    return result == "0" && 1 / value2 == -INFINITY ? "-0" : result;
  }
  var INFINITY, symbolProto, symbolToString, baseToString_default;
  var init_baseToString = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js"() {
      "use strict";
      init_Symbol();
      init_arrayMap();
      init_isArray2();
      init_isSymbol();
      INFINITY = 1 / 0;
      symbolProto = Symbol_default ? Symbol_default.prototype : void 0;
      symbolToString = symbolProto ? symbolProto.toString : void 0;
      __name(baseToString, "baseToString");
      baseToString_default = baseToString;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_trimmedEndIndex.js
  function trimmedEndIndex(string3) {
    var index = string3.length;
    while (index-- && reWhitespace.test(string3.charAt(index))) {
    }
    return index;
  }
  var reWhitespace, trimmedEndIndex_default;
  var init_trimmedEndIndex = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_trimmedEndIndex.js"() {
      "use strict";
      reWhitespace = /\s/;
      __name(trimmedEndIndex, "trimmedEndIndex");
      trimmedEndIndex_default = trimmedEndIndex;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTrim.js
  function baseTrim(string3) {
    return string3 ? string3.slice(0, trimmedEndIndex_default(string3) + 1).replace(reTrimStart, "") : string3;
  }
  var reTrimStart, baseTrim_default;
  var init_baseTrim = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTrim.js"() {
      "use strict";
      init_trimmedEndIndex();
      reTrimStart = /^\s+/;
      __name(baseTrim, "baseTrim");
      baseTrim_default = baseTrim;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObject.js
  function isObject2(value2) {
    var type3 = typeof value2;
    return value2 != null && (type3 == "object" || type3 == "function");
  }
  var isObject_default;
  var init_isObject = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObject.js"() {
      "use strict";
      __name(isObject2, "isObject");
      isObject_default = isObject2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toNumber.js
  function toNumber(value2) {
    if (typeof value2 == "number") {
      return value2;
    }
    if (isSymbol_default(value2)) {
      return NAN;
    }
    if (isObject_default(value2)) {
      var other = typeof value2.valueOf == "function" ? value2.valueOf() : value2;
      value2 = isObject_default(other) ? other + "" : other;
    }
    if (typeof value2 != "string") {
      return value2 === 0 ? value2 : +value2;
    }
    value2 = baseTrim_default(value2);
    var isBinary2 = reIsBinary.test(value2);
    return isBinary2 || reIsOctal.test(value2) ? freeParseInt(value2.slice(2), isBinary2 ? 2 : 8) : reIsBadHex.test(value2) ? NAN : +value2;
  }
  var NAN, reIsBadHex, reIsBinary, reIsOctal, freeParseInt, toNumber_default;
  var init_toNumber = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toNumber.js"() {
      "use strict";
      init_baseTrim();
      init_isObject();
      init_isSymbol();
      NAN = 0 / 0;
      reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
      reIsBinary = /^0b[01]+$/i;
      reIsOctal = /^0o[0-7]+$/i;
      freeParseInt = parseInt;
      __name(toNumber, "toNumber");
      toNumber_default = toNumber;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toFinite.js
  function toFinite(value2) {
    if (!value2) {
      return value2 === 0 ? value2 : 0;
    }
    value2 = toNumber_default(value2);
    if (value2 === INFINITY2 || value2 === -INFINITY2) {
      var sign2 = value2 < 0 ? -1 : 1;
      return sign2 * MAX_INTEGER;
    }
    return value2 === value2 ? value2 : 0;
  }
  var INFINITY2, MAX_INTEGER, toFinite_default;
  var init_toFinite = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toFinite.js"() {
      "use strict";
      init_toNumber();
      INFINITY2 = 1 / 0;
      MAX_INTEGER = 17976931348623157e292;
      __name(toFinite, "toFinite");
      toFinite_default = toFinite;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toInteger.js
  function toInteger(value2) {
    var result = toFinite_default(value2), remainder = result % 1;
    return result === result ? remainder ? result - remainder : result : 0;
  }
  var toInteger_default;
  var init_toInteger = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toInteger.js"() {
      "use strict";
      init_toFinite();
      __name(toInteger, "toInteger");
      toInteger_default = toInteger;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.js
  function identity4(value2) {
    return value2;
  }
  var identity_default4;
  var init_identity4 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.js"() {
      "use strict";
      __name(identity4, "identity");
      identity_default4 = identity4;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js
  function isFunction(value2) {
    if (!isObject_default(value2)) {
      return false;
    }
    var tag = baseGetTag_default(value2);
    return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
  }
  var asyncTag, funcTag, genTag, proxyTag, isFunction_default;
  var init_isFunction = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js"() {
      "use strict";
      init_baseGetTag();
      init_isObject();
      asyncTag = "[object AsyncFunction]";
      funcTag = "[object Function]";
      genTag = "[object GeneratorFunction]";
      proxyTag = "[object Proxy]";
      __name(isFunction, "isFunction");
      isFunction_default = isFunction;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js
  var coreJsData, coreJsData_default;
  var init_coreJsData = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js"() {
      "use strict";
      init_root();
      coreJsData = root_default["__core-js_shared__"];
      coreJsData_default = coreJsData;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js
  function isMasked(func) {
    return !!maskSrcKey && maskSrcKey in func;
  }
  var maskSrcKey, isMasked_default;
  var init_isMasked = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js"() {
      "use strict";
      init_coreJsData();
      maskSrcKey = (function() {
        var uid = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || "");
        return uid ? "Symbol(src)_1." + uid : "";
      })();
      __name(isMasked, "isMasked");
      isMasked_default = isMasked;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js
  function toSource(func) {
    if (func != null) {
      try {
        return funcToString.call(func);
      } catch (e3) {
      }
      try {
        return func + "";
      } catch (e3) {
      }
    }
    return "";
  }
  var funcProto, funcToString, toSource_default;
  var init_toSource = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js"() {
      "use strict";
      funcProto = Function.prototype;
      funcToString = funcProto.toString;
      __name(toSource, "toSource");
      toSource_default = toSource;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js
  function baseIsNative(value2) {
    if (!isObject_default(value2) || isMasked_default(value2)) {
      return false;
    }
    var pattern = isFunction_default(value2) ? reIsNative : reIsHostCtor;
    return pattern.test(toSource_default(value2));
  }
  var reRegExpChar, reIsHostCtor, funcProto2, objectProto3, funcToString2, hasOwnProperty2, reIsNative, baseIsNative_default;
  var init_baseIsNative = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js"() {
      "use strict";
      init_isFunction();
      init_isMasked();
      init_isObject();
      init_toSource();
      reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
      reIsHostCtor = /^\[object .+?Constructor\]$/;
      funcProto2 = Function.prototype;
      objectProto3 = Object.prototype;
      funcToString2 = funcProto2.toString;
      hasOwnProperty2 = objectProto3.hasOwnProperty;
      reIsNative = RegExp(
        "^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
      );
      __name(baseIsNative, "baseIsNative");
      baseIsNative_default = baseIsNative;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js
  function getValue(object3, key) {
    return object3 == null ? void 0 : object3[key];
  }
  var getValue_default;
  var init_getValue = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js"() {
      "use strict";
      __name(getValue, "getValue");
      getValue_default = getValue;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js
  function getNative(object3, key) {
    var value2 = getValue_default(object3, key);
    return baseIsNative_default(value2) ? value2 : void 0;
  }
  var getNative_default;
  var init_getNative = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js"() {
      "use strict";
      init_baseIsNative();
      init_getValue();
      __name(getNative, "getNative");
      getNative_default = getNative;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js
  var WeakMap, WeakMap_default;
  var init_WeakMap = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js"() {
      "use strict";
      init_getNative();
      init_root();
      WeakMap = getNative_default(root_default, "WeakMap");
      WeakMap_default = WeakMap;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js
  var objectCreate, baseCreate, baseCreate_default;
  var init_baseCreate = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js"() {
      "use strict";
      init_isObject();
      objectCreate = Object.create;
      baseCreate = /* @__PURE__ */ (function() {
        function object3() {
        }
        __name(object3, "object");
        return function(proto) {
          if (!isObject_default(proto)) {
            return {};
          }
          if (objectCreate) {
            return objectCreate(proto);
          }
          object3.prototype = proto;
          var result = new object3();
          object3.prototype = void 0;
          return result;
        };
      })();
      baseCreate_default = baseCreate;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.js
  function apply2(func, thisArg, args) {
    switch (args.length) {
      case 0:
        return func.call(thisArg);
      case 1:
        return func.call(thisArg, args[0]);
      case 2:
        return func.call(thisArg, args[0], args[1]);
      case 3:
        return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }
  var apply_default;
  var init_apply = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.js"() {
      "use strict";
      __name(apply2, "apply");
      apply_default = apply2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/noop.js
  function noop3() {
  }
  var noop_default2;
  var init_noop3 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/noop.js"() {
      "use strict";
      __name(noop3, "noop");
      noop_default2 = noop3;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js
  function copyArray(source, array4) {
    var index = -1, length2 = source.length;
    array4 || (array4 = Array(length2));
    while (++index < length2) {
      array4[index] = source[index];
    }
    return array4;
  }
  var copyArray_default;
  var init_copyArray = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js"() {
      "use strict";
      __name(copyArray, "copyArray");
      copyArray_default = copyArray;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js
  function shortOut(func) {
    var count2 = 0, lastCalled = 0;
    return function() {
      var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
      lastCalled = stamp;
      if (remaining > 0) {
        if (++count2 >= HOT_COUNT) {
          return arguments[0];
        }
      } else {
        count2 = 0;
      }
      return func.apply(void 0, arguments);
    };
  }
  var HOT_COUNT, HOT_SPAN, nativeNow, shortOut_default;
  var init_shortOut = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js"() {
      "use strict";
      HOT_COUNT = 800;
      HOT_SPAN = 16;
      nativeNow = Date.now;
      __name(shortOut, "shortOut");
      shortOut_default = shortOut;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.js
  function constant(value2) {
    return function() {
      return value2;
    };
  }
  var constant_default7;
  var init_constant8 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.js"() {
      "use strict";
      __name(constant, "constant");
      constant_default7 = constant;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js
  var defineProperty, defineProperty_default;
  var init_defineProperty = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js"() {
      "use strict";
      init_getNative();
      defineProperty = (function() {
        try {
          var func = getNative_default(Object, "defineProperty");
          func({}, "", {});
          return func;
        } catch (e3) {
        }
      })();
      defineProperty_default = defineProperty;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js
  var baseSetToString, baseSetToString_default;
  var init_baseSetToString = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js"() {
      "use strict";
      init_constant8();
      init_defineProperty();
      init_identity4();
      baseSetToString = !defineProperty_default ? identity_default4 : function(func, string3) {
        return defineProperty_default(func, "toString", {
          "configurable": true,
          "enumerable": false,
          "value": constant_default7(string3),
          "writable": true
        });
      };
      baseSetToString_default = baseSetToString;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js
  var setToString, setToString_default;
  var init_setToString = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js"() {
      "use strict";
      init_baseSetToString();
      init_shortOut();
      setToString = shortOut_default(baseSetToString_default);
      setToString_default = setToString;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js
  function arrayEach(array4, iteratee) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (iteratee(array4[index], index, array4) === false) {
        break;
      }
    }
    return array4;
  }
  var arrayEach_default;
  var init_arrayEach = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js"() {
      "use strict";
      __name(arrayEach, "arrayEach");
      arrayEach_default = arrayEach;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFindIndex.js
  function baseFindIndex(array4, predicate, fromIndex, fromRight) {
    var length2 = array4.length, index = fromIndex + (fromRight ? 1 : -1);
    while (fromRight ? index-- : ++index < length2) {
      if (predicate(array4[index], index, array4)) {
        return index;
      }
    }
    return -1;
  }
  var baseFindIndex_default;
  var init_baseFindIndex = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFindIndex.js"() {
      "use strict";
      __name(baseFindIndex, "baseFindIndex");
      baseFindIndex_default = baseFindIndex;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNaN.js
  function baseIsNaN(value2) {
    return value2 !== value2;
  }
  var baseIsNaN_default;
  var init_baseIsNaN = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNaN.js"() {
      "use strict";
      __name(baseIsNaN, "baseIsNaN");
      baseIsNaN_default = baseIsNaN;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_strictIndexOf.js
  function strictIndexOf(array4, value2, fromIndex) {
    var index = fromIndex - 1, length2 = array4.length;
    while (++index < length2) {
      if (array4[index] === value2) {
        return index;
      }
    }
    return -1;
  }
  var strictIndexOf_default;
  var init_strictIndexOf = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_strictIndexOf.js"() {
      "use strict";
      __name(strictIndexOf, "strictIndexOf");
      strictIndexOf_default = strictIndexOf;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIndexOf.js
  function baseIndexOf(array4, value2, fromIndex) {
    return value2 === value2 ? strictIndexOf_default(array4, value2, fromIndex) : baseFindIndex_default(array4, baseIsNaN_default, fromIndex);
  }
  var baseIndexOf_default;
  var init_baseIndexOf = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIndexOf.js"() {
      "use strict";
      init_baseFindIndex();
      init_baseIsNaN();
      init_strictIndexOf();
      __name(baseIndexOf, "baseIndexOf");
      baseIndexOf_default = baseIndexOf;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayIncludes.js
  function arrayIncludes(array4, value2) {
    var length2 = array4 == null ? 0 : array4.length;
    return !!length2 && baseIndexOf_default(array4, value2, 0) > -1;
  }
  var arrayIncludes_default;
  var init_arrayIncludes = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayIncludes.js"() {
      "use strict";
      init_baseIndexOf();
      __name(arrayIncludes, "arrayIncludes");
      arrayIncludes_default = arrayIncludes;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js
  function isIndex(value2, length2) {
    var type3 = typeof value2;
    length2 = length2 == null ? MAX_SAFE_INTEGER : length2;
    return !!length2 && (type3 == "number" || type3 != "symbol" && reIsUint.test(value2)) && (value2 > -1 && value2 % 1 == 0 && value2 < length2);
  }
  var MAX_SAFE_INTEGER, reIsUint, isIndex_default;
  var init_isIndex = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js"() {
      "use strict";
      MAX_SAFE_INTEGER = 9007199254740991;
      reIsUint = /^(?:0|[1-9]\d*)$/;
      __name(isIndex, "isIndex");
      isIndex_default = isIndex;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js
  function baseAssignValue(object3, key, value2) {
    if (key == "__proto__" && defineProperty_default) {
      defineProperty_default(object3, key, {
        "configurable": true,
        "enumerable": true,
        "value": value2,
        "writable": true
      });
    } else {
      object3[key] = value2;
    }
  }
  var baseAssignValue_default;
  var init_baseAssignValue = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js"() {
      "use strict";
      init_defineProperty();
      __name(baseAssignValue, "baseAssignValue");
      baseAssignValue_default = baseAssignValue;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/eq.js
  function eq(value2, other) {
    return value2 === other || value2 !== value2 && other !== other;
  }
  var eq_default;
  var init_eq = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/eq.js"() {
      "use strict";
      __name(eq, "eq");
      eq_default = eq;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js
  function assignValue(object3, key, value2) {
    var objValue = object3[key];
    if (!(hasOwnProperty3.call(object3, key) && eq_default(objValue, value2)) || value2 === void 0 && !(key in object3)) {
      baseAssignValue_default(object3, key, value2);
    }
  }
  var objectProto4, hasOwnProperty3, assignValue_default;
  var init_assignValue = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js"() {
      "use strict";
      init_baseAssignValue();
      init_eq();
      objectProto4 = Object.prototype;
      hasOwnProperty3 = objectProto4.hasOwnProperty;
      __name(assignValue, "assignValue");
      assignValue_default = assignValue;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js
  function copyObject(source, props, object3, customizer) {
    var isNew = !object3;
    object3 || (object3 = {});
    var index = -1, length2 = props.length;
    while (++index < length2) {
      var key = props[index];
      var newValue = customizer ? customizer(object3[key], source[key], key, object3, source) : void 0;
      if (newValue === void 0) {
        newValue = source[key];
      }
      if (isNew) {
        baseAssignValue_default(object3, key, newValue);
      } else {
        assignValue_default(object3, key, newValue);
      }
    }
    return object3;
  }
  var copyObject_default;
  var init_copyObject = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js"() {
      "use strict";
      init_assignValue();
      init_baseAssignValue();
      __name(copyObject, "copyObject");
      copyObject_default = copyObject;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js
  function overRest(func, start3, transform8) {
    start3 = nativeMax(start3 === void 0 ? func.length - 1 : start3, 0);
    return function() {
      var args = arguments, index = -1, length2 = nativeMax(args.length - start3, 0), array4 = Array(length2);
      while (++index < length2) {
        array4[index] = args[start3 + index];
      }
      index = -1;
      var otherArgs = Array(start3 + 1);
      while (++index < start3) {
        otherArgs[index] = args[index];
      }
      otherArgs[start3] = transform8(array4);
      return apply_default(func, this, otherArgs);
    };
  }
  var nativeMax, overRest_default;
  var init_overRest = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js"() {
      "use strict";
      init_apply();
      nativeMax = Math.max;
      __name(overRest, "overRest");
      overRest_default = overRest;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRest.js
  function baseRest(func, start3) {
    return setToString_default(overRest_default(func, start3, identity_default4), func + "");
  }
  var baseRest_default;
  var init_baseRest = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRest.js"() {
      "use strict";
      init_identity4();
      init_overRest();
      init_setToString();
      __name(baseRest, "baseRest");
      baseRest_default = baseRest;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isLength.js
  function isLength2(value2) {
    return typeof value2 == "number" && value2 > -1 && value2 % 1 == 0 && value2 <= MAX_SAFE_INTEGER2;
  }
  var MAX_SAFE_INTEGER2, isLength_default;
  var init_isLength2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isLength.js"() {
      "use strict";
      MAX_SAFE_INTEGER2 = 9007199254740991;
      __name(isLength2, "isLength");
      isLength_default = isLength2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js
  function isArrayLike2(value2) {
    return value2 != null && isLength_default(value2.length) && !isFunction_default(value2);
  }
  var isArrayLike_default;
  var init_isArrayLike2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js"() {
      "use strict";
      init_isFunction();
      init_isLength2();
      __name(isArrayLike2, "isArrayLike");
      isArrayLike_default = isArrayLike2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIterateeCall.js
  function isIterateeCall(value2, index, object3) {
    if (!isObject_default(object3)) {
      return false;
    }
    var type3 = typeof index;
    if (type3 == "number" ? isArrayLike_default(object3) && isIndex_default(index, object3.length) : type3 == "string" && index in object3) {
      return eq_default(object3[index], value2);
    }
    return false;
  }
  var isIterateeCall_default;
  var init_isIterateeCall = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIterateeCall.js"() {
      "use strict";
      init_eq();
      init_isArrayLike2();
      init_isIndex();
      init_isObject();
      __name(isIterateeCall, "isIterateeCall");
      isIterateeCall_default = isIterateeCall;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createAssigner.js
  function createAssigner(assigner) {
    return baseRest_default(function(object3, sources) {
      var index = -1, length2 = sources.length, customizer = length2 > 1 ? sources[length2 - 1] : void 0, guard = length2 > 2 ? sources[2] : void 0;
      customizer = assigner.length > 3 && typeof customizer == "function" ? (length2--, customizer) : void 0;
      if (guard && isIterateeCall_default(sources[0], sources[1], guard)) {
        customizer = length2 < 3 ? void 0 : customizer;
        length2 = 1;
      }
      object3 = Object(object3);
      while (++index < length2) {
        var source = sources[index];
        if (source) {
          assigner(object3, source, index, customizer);
        }
      }
      return object3;
    });
  }
  var createAssigner_default;
  var init_createAssigner = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createAssigner.js"() {
      "use strict";
      init_baseRest();
      init_isIterateeCall();
      __name(createAssigner, "createAssigner");
      createAssigner_default = createAssigner;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js
  function isPrototype2(value2) {
    var Ctor = value2 && value2.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto5;
    return value2 === proto;
  }
  var objectProto5, isPrototype_default;
  var init_isPrototype2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js"() {
      "use strict";
      objectProto5 = Object.prototype;
      __name(isPrototype2, "isPrototype");
      isPrototype_default = isPrototype2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js
  function baseTimes(n2, iteratee) {
    var index = -1, result = Array(n2);
    while (++index < n2) {
      result[index] = iteratee(index);
    }
    return result;
  }
  var baseTimes_default;
  var init_baseTimes = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js"() {
      "use strict";
      __name(baseTimes, "baseTimes");
      baseTimes_default = baseTimes;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js
  function baseIsArguments(value2) {
    return isObjectLike_default(value2) && baseGetTag_default(value2) == argsTag;
  }
  var argsTag, baseIsArguments_default;
  var init_baseIsArguments = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js"() {
      "use strict";
      init_baseGetTag();
      init_isObjectLike2();
      argsTag = "[object Arguments]";
      __name(baseIsArguments, "baseIsArguments");
      baseIsArguments_default = baseIsArguments;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js
  var objectProto6, hasOwnProperty4, propertyIsEnumerable, isArguments2, isArguments_default;
  var init_isArguments2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js"() {
      "use strict";
      init_baseIsArguments();
      init_isObjectLike2();
      objectProto6 = Object.prototype;
      hasOwnProperty4 = objectProto6.hasOwnProperty;
      propertyIsEnumerable = objectProto6.propertyIsEnumerable;
      isArguments2 = baseIsArguments_default(/* @__PURE__ */ (function() {
        return arguments;
      })()) ? baseIsArguments_default : function(value2) {
        return isObjectLike_default(value2) && hasOwnProperty4.call(value2, "callee") && !propertyIsEnumerable.call(value2, "callee");
      };
      isArguments_default = isArguments2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js
  function stubFalse() {
    return false;
  }
  var stubFalse_default;
  var init_stubFalse = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js"() {
      "use strict";
      __name(stubFalse, "stubFalse");
      stubFalse_default = stubFalse;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js
  var freeExports, freeModule, moduleExports, Buffer2, nativeIsBuffer, isBuffer, isBuffer_default;
  var init_isBuffer = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js"() {
      "use strict";
      init_root();
      init_stubFalse();
      freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
      moduleExports = freeModule && freeModule.exports === freeExports;
      Buffer2 = moduleExports ? root_default.Buffer : void 0;
      nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
      isBuffer = nativeIsBuffer || stubFalse_default;
      isBuffer_default = isBuffer;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js
  function baseIsTypedArray(value2) {
    return isObjectLike_default(value2) && isLength_default(value2.length) && !!typedArrayTags[baseGetTag_default(value2)];
  }
  var argsTag2, arrayTag2, boolTag, dateTag2, errorTag, funcTag2, mapTag2, numberTag2, objectTag2, regexpTag2, setTag2, stringTag2, weakMapTag, arrayBufferTag2, dataViewTag2, float32Tag, float64Tag, int8Tag, int16Tag, int32Tag, uint8Tag, uint8ClampedTag, uint16Tag, uint32Tag, typedArrayTags, baseIsTypedArray_default;
  var init_baseIsTypedArray = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js"() {
      "use strict";
      init_baseGetTag();
      init_isLength2();
      init_isObjectLike2();
      argsTag2 = "[object Arguments]";
      arrayTag2 = "[object Array]";
      boolTag = "[object Boolean]";
      dateTag2 = "[object Date]";
      errorTag = "[object Error]";
      funcTag2 = "[object Function]";
      mapTag2 = "[object Map]";
      numberTag2 = "[object Number]";
      objectTag2 = "[object Object]";
      regexpTag2 = "[object RegExp]";
      setTag2 = "[object Set]";
      stringTag2 = "[object String]";
      weakMapTag = "[object WeakMap]";
      arrayBufferTag2 = "[object ArrayBuffer]";
      dataViewTag2 = "[object DataView]";
      float32Tag = "[object Float32Array]";
      float64Tag = "[object Float64Array]";
      int8Tag = "[object Int8Array]";
      int16Tag = "[object Int16Array]";
      int32Tag = "[object Int32Array]";
      uint8Tag = "[object Uint8Array]";
      uint8ClampedTag = "[object Uint8ClampedArray]";
      uint16Tag = "[object Uint16Array]";
      uint32Tag = "[object Uint32Array]";
      typedArrayTags = {};
      typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
      typedArrayTags[argsTag2] = typedArrayTags[arrayTag2] = typedArrayTags[arrayBufferTag2] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag2] = typedArrayTags[dateTag2] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag2] = typedArrayTags[numberTag2] = typedArrayTags[objectTag2] = typedArrayTags[regexpTag2] = typedArrayTags[setTag2] = typedArrayTags[stringTag2] = typedArrayTags[weakMapTag] = false;
      __name(baseIsTypedArray, "baseIsTypedArray");
      baseIsTypedArray_default = baseIsTypedArray;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js
  function baseUnary(func) {
    return function(value2) {
      return func(value2);
    };
  }
  var baseUnary_default;
  var init_baseUnary = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js"() {
      "use strict";
      __name(baseUnary, "baseUnary");
      baseUnary_default = baseUnary;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js
  var freeExports2, freeModule2, moduleExports2, freeProcess, nodeUtil, nodeUtil_default;
  var init_nodeUtil = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js"() {
      "use strict";
      init_freeGlobal();
      freeExports2 = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule2 = freeExports2 && typeof module == "object" && module && !module.nodeType && module;
      moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;
      freeProcess = moduleExports2 && freeGlobal_default.process;
      nodeUtil = (function() {
        try {
          var types = freeModule2 && freeModule2.require && freeModule2.require("util").types;
          if (types) {
            return types;
          }
          return freeProcess && freeProcess.binding && freeProcess.binding("util");
        } catch (e3) {
        }
      })();
      nodeUtil_default = nodeUtil;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js
  var nodeIsTypedArray, isTypedArray3, isTypedArray_default;
  var init_isTypedArray3 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js"() {
      "use strict";
      init_baseIsTypedArray();
      init_baseUnary();
      init_nodeUtil();
      nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray;
      isTypedArray3 = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default;
      isTypedArray_default = isTypedArray3;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js
  function arrayLikeKeys(value2, inherited) {
    var isArr = isArray_default(value2), isArg = !isArr && isArguments_default(value2), isBuff = !isArr && !isArg && isBuffer_default(value2), isType2 = !isArr && !isArg && !isBuff && isTypedArray_default(value2), skipIndexes = isArr || isArg || isBuff || isType2, result = skipIndexes ? baseTimes_default(value2.length, String) : [], length2 = result.length;
    for (var key in value2) {
      if ((inherited || hasOwnProperty5.call(value2, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
      (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
      isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
      isType2 && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
      isIndex_default(key, length2)))) {
        result.push(key);
      }
    }
    return result;
  }
  var objectProto7, hasOwnProperty5, arrayLikeKeys_default;
  var init_arrayLikeKeys = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js"() {
      "use strict";
      init_baseTimes();
      init_isArguments2();
      init_isArray2();
      init_isBuffer();
      init_isIndex();
      init_isTypedArray3();
      objectProto7 = Object.prototype;
      hasOwnProperty5 = objectProto7.hasOwnProperty;
      __name(arrayLikeKeys, "arrayLikeKeys");
      arrayLikeKeys_default = arrayLikeKeys;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js
  function overArg(func, transform8) {
    return function(arg) {
      return func(transform8(arg));
    };
  }
  var overArg_default;
  var init_overArg = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js"() {
      "use strict";
      __name(overArg, "overArg");
      overArg_default = overArg;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js
  var nativeKeys, nativeKeys_default;
  var init_nativeKeys = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js"() {
      "use strict";
      init_overArg();
      nativeKeys = overArg_default(Object.keys, Object);
      nativeKeys_default = nativeKeys;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js
  function baseKeys(object3) {
    if (!isPrototype_default(object3)) {
      return nativeKeys_default(object3);
    }
    var result = [];
    for (var key in Object(object3)) {
      if (hasOwnProperty6.call(object3, key) && key != "constructor") {
        result.push(key);
      }
    }
    return result;
  }
  var objectProto8, hasOwnProperty6, baseKeys_default;
  var init_baseKeys = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js"() {
      "use strict";
      init_isPrototype2();
      init_nativeKeys();
      objectProto8 = Object.prototype;
      hasOwnProperty6 = objectProto8.hasOwnProperty;
      __name(baseKeys, "baseKeys");
      baseKeys_default = baseKeys;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keys.js
  function keys(object3) {
    return isArrayLike_default(object3) ? arrayLikeKeys_default(object3) : baseKeys_default(object3);
  }
  var keys_default;
  var init_keys = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keys.js"() {
      "use strict";
      init_arrayLikeKeys();
      init_baseKeys();
      init_isArrayLike2();
      __name(keys, "keys");
      keys_default = keys;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js
  function nativeKeysIn(object3) {
    var result = [];
    if (object3 != null) {
      for (var key in Object(object3)) {
        result.push(key);
      }
    }
    return result;
  }
  var nativeKeysIn_default;
  var init_nativeKeysIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js"() {
      "use strict";
      __name(nativeKeysIn, "nativeKeysIn");
      nativeKeysIn_default = nativeKeysIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js
  function baseKeysIn(object3) {
    if (!isObject_default(object3)) {
      return nativeKeysIn_default(object3);
    }
    var isProto = isPrototype_default(object3), result = [];
    for (var key in object3) {
      if (!(key == "constructor" && (isProto || !hasOwnProperty7.call(object3, key)))) {
        result.push(key);
      }
    }
    return result;
  }
  var objectProto9, hasOwnProperty7, baseKeysIn_default;
  var init_baseKeysIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js"() {
      "use strict";
      init_isObject();
      init_isPrototype2();
      init_nativeKeysIn();
      objectProto9 = Object.prototype;
      hasOwnProperty7 = objectProto9.hasOwnProperty;
      __name(baseKeysIn, "baseKeysIn");
      baseKeysIn_default = baseKeysIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js
  function keysIn(object3) {
    return isArrayLike_default(object3) ? arrayLikeKeys_default(object3, true) : baseKeysIn_default(object3);
  }
  var keysIn_default;
  var init_keysIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js"() {
      "use strict";
      init_arrayLikeKeys();
      init_baseKeysIn();
      init_isArrayLike2();
      __name(keysIn, "keysIn");
      keysIn_default = keysIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js
  function isKey(value2, object3) {
    if (isArray_default(value2)) {
      return false;
    }
    var type3 = typeof value2;
    if (type3 == "number" || type3 == "symbol" || type3 == "boolean" || value2 == null || isSymbol_default(value2)) {
      return true;
    }
    return reIsPlainProp.test(value2) || !reIsDeepProp.test(value2) || object3 != null && value2 in Object(object3);
  }
  var reIsDeepProp, reIsPlainProp, isKey_default;
  var init_isKey = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js"() {
      "use strict";
      init_isArray2();
      init_isSymbol();
      reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
      reIsPlainProp = /^\w*$/;
      __name(isKey, "isKey");
      isKey_default = isKey;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js
  var nativeCreate, nativeCreate_default;
  var init_nativeCreate = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js"() {
      "use strict";
      init_getNative();
      nativeCreate = getNative_default(Object, "create");
      nativeCreate_default = nativeCreate;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js
  function hashClear() {
    this.__data__ = nativeCreate_default ? nativeCreate_default(null) : {};
    this.size = 0;
  }
  var hashClear_default;
  var init_hashClear = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js"() {
      "use strict";
      init_nativeCreate();
      __name(hashClear, "hashClear");
      hashClear_default = hashClear;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js
  function hashDelete(key) {
    var result = this.has(key) && delete this.__data__[key];
    this.size -= result ? 1 : 0;
    return result;
  }
  var hashDelete_default;
  var init_hashDelete = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js"() {
      "use strict";
      __name(hashDelete, "hashDelete");
      hashDelete_default = hashDelete;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js
  function hashGet(key) {
    var data6 = this.__data__;
    if (nativeCreate_default) {
      var result = data6[key];
      return result === HASH_UNDEFINED ? void 0 : result;
    }
    return hasOwnProperty8.call(data6, key) ? data6[key] : void 0;
  }
  var HASH_UNDEFINED, objectProto10, hasOwnProperty8, hashGet_default;
  var init_hashGet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js"() {
      "use strict";
      init_nativeCreate();
      HASH_UNDEFINED = "__lodash_hash_undefined__";
      objectProto10 = Object.prototype;
      hasOwnProperty8 = objectProto10.hasOwnProperty;
      __name(hashGet, "hashGet");
      hashGet_default = hashGet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js
  function hashHas(key) {
    var data6 = this.__data__;
    return nativeCreate_default ? data6[key] !== void 0 : hasOwnProperty9.call(data6, key);
  }
  var objectProto11, hasOwnProperty9, hashHas_default;
  var init_hashHas = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js"() {
      "use strict";
      init_nativeCreate();
      objectProto11 = Object.prototype;
      hasOwnProperty9 = objectProto11.hasOwnProperty;
      __name(hashHas, "hashHas");
      hashHas_default = hashHas;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js
  function hashSet(key, value2) {
    var data6 = this.__data__;
    this.size += this.has(key) ? 0 : 1;
    data6[key] = nativeCreate_default && value2 === void 0 ? HASH_UNDEFINED2 : value2;
    return this;
  }
  var HASH_UNDEFINED2, hashSet_default;
  var init_hashSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js"() {
      "use strict";
      init_nativeCreate();
      HASH_UNDEFINED2 = "__lodash_hash_undefined__";
      __name(hashSet, "hashSet");
      hashSet_default = hashSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js
  function Hash(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  var Hash_default;
  var init_Hash = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js"() {
      "use strict";
      init_hashClear();
      init_hashDelete();
      init_hashGet();
      init_hashHas();
      init_hashSet();
      __name(Hash, "Hash");
      Hash.prototype.clear = hashClear_default;
      Hash.prototype["delete"] = hashDelete_default;
      Hash.prototype.get = hashGet_default;
      Hash.prototype.has = hashHas_default;
      Hash.prototype.set = hashSet_default;
      Hash_default = Hash;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js
  function listCacheClear() {
    this.__data__ = [];
    this.size = 0;
  }
  var listCacheClear_default;
  var init_listCacheClear = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js"() {
      "use strict";
      __name(listCacheClear, "listCacheClear");
      listCacheClear_default = listCacheClear;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js
  function assocIndexOf(array4, key) {
    var length2 = array4.length;
    while (length2--) {
      if (eq_default(array4[length2][0], key)) {
        return length2;
      }
    }
    return -1;
  }
  var assocIndexOf_default;
  var init_assocIndexOf = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js"() {
      "use strict";
      init_eq();
      __name(assocIndexOf, "assocIndexOf");
      assocIndexOf_default = assocIndexOf;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js
  function listCacheDelete(key) {
    var data6 = this.__data__, index = assocIndexOf_default(data6, key);
    if (index < 0) {
      return false;
    }
    var lastIndex = data6.length - 1;
    if (index == lastIndex) {
      data6.pop();
    } else {
      splice.call(data6, index, 1);
    }
    --this.size;
    return true;
  }
  var arrayProto, splice, listCacheDelete_default;
  var init_listCacheDelete = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js"() {
      "use strict";
      init_assocIndexOf();
      arrayProto = Array.prototype;
      splice = arrayProto.splice;
      __name(listCacheDelete, "listCacheDelete");
      listCacheDelete_default = listCacheDelete;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js
  function listCacheGet(key) {
    var data6 = this.__data__, index = assocIndexOf_default(data6, key);
    return index < 0 ? void 0 : data6[index][1];
  }
  var listCacheGet_default;
  var init_listCacheGet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js"() {
      "use strict";
      init_assocIndexOf();
      __name(listCacheGet, "listCacheGet");
      listCacheGet_default = listCacheGet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js
  function listCacheHas(key) {
    return assocIndexOf_default(this.__data__, key) > -1;
  }
  var listCacheHas_default;
  var init_listCacheHas = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js"() {
      "use strict";
      init_assocIndexOf();
      __name(listCacheHas, "listCacheHas");
      listCacheHas_default = listCacheHas;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js
  function listCacheSet(key, value2) {
    var data6 = this.__data__, index = assocIndexOf_default(data6, key);
    if (index < 0) {
      ++this.size;
      data6.push([key, value2]);
    } else {
      data6[index][1] = value2;
    }
    return this;
  }
  var listCacheSet_default;
  var init_listCacheSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js"() {
      "use strict";
      init_assocIndexOf();
      __name(listCacheSet, "listCacheSet");
      listCacheSet_default = listCacheSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js
  function ListCache(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  var ListCache_default;
  var init_ListCache = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js"() {
      "use strict";
      init_listCacheClear();
      init_listCacheDelete();
      init_listCacheGet();
      init_listCacheHas();
      init_listCacheSet();
      __name(ListCache, "ListCache");
      ListCache.prototype.clear = listCacheClear_default;
      ListCache.prototype["delete"] = listCacheDelete_default;
      ListCache.prototype.get = listCacheGet_default;
      ListCache.prototype.has = listCacheHas_default;
      ListCache.prototype.set = listCacheSet_default;
      ListCache_default = ListCache;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Map.js
  var Map2, Map_default;
  var init_Map = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Map.js"() {
      "use strict";
      init_getNative();
      init_root();
      Map2 = getNative_default(root_default, "Map");
      Map_default = Map2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js
  function mapCacheClear() {
    this.size = 0;
    this.__data__ = {
      "hash": new Hash_default(),
      "map": new (Map_default || ListCache_default)(),
      "string": new Hash_default()
    };
  }
  var mapCacheClear_default;
  var init_mapCacheClear = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js"() {
      "use strict";
      init_Hash();
      init_ListCache();
      init_Map();
      __name(mapCacheClear, "mapCacheClear");
      mapCacheClear_default = mapCacheClear;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js
  function isKeyable(value2) {
    var type3 = typeof value2;
    return type3 == "string" || type3 == "number" || type3 == "symbol" || type3 == "boolean" ? value2 !== "__proto__" : value2 === null;
  }
  var isKeyable_default;
  var init_isKeyable = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js"() {
      "use strict";
      __name(isKeyable, "isKeyable");
      isKeyable_default = isKeyable;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js
  function getMapData(map6, key) {
    var data6 = map6.__data__;
    return isKeyable_default(key) ? data6[typeof key == "string" ? "string" : "hash"] : data6.map;
  }
  var getMapData_default;
  var init_getMapData = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js"() {
      "use strict";
      init_isKeyable();
      __name(getMapData, "getMapData");
      getMapData_default = getMapData;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js
  function mapCacheDelete(key) {
    var result = getMapData_default(this, key)["delete"](key);
    this.size -= result ? 1 : 0;
    return result;
  }
  var mapCacheDelete_default;
  var init_mapCacheDelete = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js"() {
      "use strict";
      init_getMapData();
      __name(mapCacheDelete, "mapCacheDelete");
      mapCacheDelete_default = mapCacheDelete;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js
  function mapCacheGet(key) {
    return getMapData_default(this, key).get(key);
  }
  var mapCacheGet_default;
  var init_mapCacheGet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js"() {
      "use strict";
      init_getMapData();
      __name(mapCacheGet, "mapCacheGet");
      mapCacheGet_default = mapCacheGet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js
  function mapCacheHas(key) {
    return getMapData_default(this, key).has(key);
  }
  var mapCacheHas_default;
  var init_mapCacheHas = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js"() {
      "use strict";
      init_getMapData();
      __name(mapCacheHas, "mapCacheHas");
      mapCacheHas_default = mapCacheHas;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js
  function mapCacheSet(key, value2) {
    var data6 = getMapData_default(this, key), size4 = data6.size;
    data6.set(key, value2);
    this.size += data6.size == size4 ? 0 : 1;
    return this;
  }
  var mapCacheSet_default;
  var init_mapCacheSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js"() {
      "use strict";
      init_getMapData();
      __name(mapCacheSet, "mapCacheSet");
      mapCacheSet_default = mapCacheSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js
  function MapCache(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  var MapCache_default;
  var init_MapCache = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js"() {
      "use strict";
      init_mapCacheClear();
      init_mapCacheDelete();
      init_mapCacheGet();
      init_mapCacheHas();
      init_mapCacheSet();
      __name(MapCache, "MapCache");
      MapCache.prototype.clear = mapCacheClear_default;
      MapCache.prototype["delete"] = mapCacheDelete_default;
      MapCache.prototype.get = mapCacheGet_default;
      MapCache.prototype.has = mapCacheHas_default;
      MapCache.prototype.set = mapCacheSet_default;
      MapCache_default = MapCache;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.js
  function memoize2(func, resolver3) {
    if (typeof func != "function" || resolver3 != null && typeof resolver3 != "function") {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    var memoized = /* @__PURE__ */ __name(function() {
      var args = arguments, key = resolver3 ? resolver3.apply(this, args) : args[0], cache3 = memoized.cache;
      if (cache3.has(key)) {
        return cache3.get(key);
      }
      var result = func.apply(this, args);
      memoized.cache = cache3.set(key, result) || cache3;
      return result;
    }, "memoized");
    memoized.cache = new (memoize2.Cache || MapCache_default)();
    return memoized;
  }
  var FUNC_ERROR_TEXT, memoize_default;
  var init_memoize2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.js"() {
      "use strict";
      init_MapCache();
      FUNC_ERROR_TEXT = "Expected a function";
      __name(memoize2, "memoize");
      memoize2.Cache = MapCache_default;
      memoize_default = memoize2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js
  function memoizeCapped(func) {
    var result = memoize_default(func, function(key) {
      if (cache3.size === MAX_MEMOIZE_SIZE) {
        cache3.clear();
      }
      return key;
    });
    var cache3 = result.cache;
    return result;
  }
  var MAX_MEMOIZE_SIZE, memoizeCapped_default;
  var init_memoizeCapped = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js"() {
      "use strict";
      init_memoize2();
      MAX_MEMOIZE_SIZE = 500;
      __name(memoizeCapped, "memoizeCapped");
      memoizeCapped_default = memoizeCapped;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js
  var rePropName, reEscapeChar, stringToPath, stringToPath_default;
  var init_stringToPath = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js"() {
      "use strict";
      init_memoizeCapped();
      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
      reEscapeChar = /\\(\\)?/g;
      stringToPath = memoizeCapped_default(function(string3) {
        var result = [];
        if (string3.charCodeAt(0) === 46) {
          result.push("");
        }
        string3.replace(rePropName, function(match3, number7, quote, subString) {
          result.push(quote ? subString.replace(reEscapeChar, "$1") : number7 || match3);
        });
        return result;
      });
      stringToPath_default = stringToPath;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.js
  function toString2(value2) {
    return value2 == null ? "" : baseToString_default(value2);
  }
  var toString_default;
  var init_toString = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.js"() {
      "use strict";
      init_baseToString();
      __name(toString2, "toString");
      toString_default = toString2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js
  function castPath(value2, object3) {
    if (isArray_default(value2)) {
      return value2;
    }
    return isKey_default(value2, object3) ? [value2] : stringToPath_default(toString_default(value2));
  }
  var castPath_default;
  var init_castPath = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js"() {
      "use strict";
      init_isArray2();
      init_isKey();
      init_stringToPath();
      init_toString();
      __name(castPath, "castPath");
      castPath_default = castPath;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js
  function toKey(value2) {
    if (typeof value2 == "string" || isSymbol_default(value2)) {
      return value2;
    }
    var result = value2 + "";
    return result == "0" && 1 / value2 == -INFINITY3 ? "-0" : result;
  }
  var INFINITY3, toKey_default;
  var init_toKey = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js"() {
      "use strict";
      init_isSymbol();
      INFINITY3 = 1 / 0;
      __name(toKey, "toKey");
      toKey_default = toKey;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js
  function baseGet(object3, path4) {
    path4 = castPath_default(path4, object3);
    var index = 0, length2 = path4.length;
    while (object3 != null && index < length2) {
      object3 = object3[toKey_default(path4[index++])];
    }
    return index && index == length2 ? object3 : void 0;
  }
  var baseGet_default;
  var init_baseGet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js"() {
      "use strict";
      init_castPath();
      init_toKey();
      __name(baseGet, "baseGet");
      baseGet_default = baseGet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/get.js
  function get3(object3, path4, defaultValue) {
    var result = object3 == null ? void 0 : baseGet_default(object3, path4);
    return result === void 0 ? defaultValue : result;
  }
  var get_default;
  var init_get = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/get.js"() {
      "use strict";
      init_baseGet();
      __name(get3, "get");
      get_default = get3;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js
  function arrayPush2(array4, values3) {
    var index = -1, length2 = values3.length, offset = array4.length;
    while (++index < length2) {
      array4[offset + index] = values3[index];
    }
    return array4;
  }
  var arrayPush_default;
  var init_arrayPush = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js"() {
      "use strict";
      __name(arrayPush2, "arrayPush");
      arrayPush_default = arrayPush2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.js
  function isFlattenable(value2) {
    return isArray_default(value2) || isArguments_default(value2) || !!(spreadableSymbol && value2 && value2[spreadableSymbol]);
  }
  var spreadableSymbol, isFlattenable_default;
  var init_isFlattenable = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.js"() {
      "use strict";
      init_Symbol();
      init_isArguments2();
      init_isArray2();
      spreadableSymbol = Symbol_default ? Symbol_default.isConcatSpreadable : void 0;
      __name(isFlattenable, "isFlattenable");
      isFlattenable_default = isFlattenable;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.js
  function baseFlatten(array4, depth, predicate, isStrict, result) {
    var index = -1, length2 = array4.length;
    predicate || (predicate = isFlattenable_default);
    result || (result = []);
    while (++index < length2) {
      var value2 = array4[index];
      if (depth > 0 && predicate(value2)) {
        if (depth > 1) {
          baseFlatten(value2, depth - 1, predicate, isStrict, result);
        } else {
          arrayPush_default(result, value2);
        }
      } else if (!isStrict) {
        result[result.length] = value2;
      }
    }
    return result;
  }
  var baseFlatten_default;
  var init_baseFlatten = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.js"() {
      "use strict";
      init_arrayPush();
      init_isFlattenable();
      __name(baseFlatten, "baseFlatten");
      baseFlatten_default = baseFlatten;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.js
  function flatten(array4) {
    var length2 = array4 == null ? 0 : array4.length;
    return length2 ? baseFlatten_default(array4, 1) : [];
  }
  var flatten_default;
  var init_flatten = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.js"() {
      "use strict";
      init_baseFlatten();
      __name(flatten, "flatten");
      flatten_default = flatten;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.js
  function flatRest(func) {
    return setToString_default(overRest_default(func, void 0, flatten_default), func + "");
  }
  var flatRest_default;
  var init_flatRest = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.js"() {
      "use strict";
      init_flatten();
      init_overRest();
      init_setToString();
      __name(flatRest, "flatRest");
      flatRest_default = flatRest;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js
  var getPrototype, getPrototype_default;
  var init_getPrototype = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js"() {
      "use strict";
      init_overArg();
      getPrototype = overArg_default(Object.getPrototypeOf, Object);
      getPrototype_default = getPrototype;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js
  function isPlainObject2(value2) {
    if (!isObjectLike_default(value2) || baseGetTag_default(value2) != objectTag3) {
      return false;
    }
    var proto = getPrototype_default(value2);
    if (proto === null) {
      return true;
    }
    var Ctor = hasOwnProperty10.call(proto, "constructor") && proto.constructor;
    return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString3.call(Ctor) == objectCtorString;
  }
  var objectTag3, funcProto3, objectProto12, funcToString3, hasOwnProperty10, objectCtorString, isPlainObject_default;
  var init_isPlainObject2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js"() {
      "use strict";
      init_baseGetTag();
      init_getPrototype();
      init_isObjectLike2();
      objectTag3 = "[object Object]";
      funcProto3 = Function.prototype;
      objectProto12 = Object.prototype;
      funcToString3 = funcProto3.toString;
      hasOwnProperty10 = objectProto12.hasOwnProperty;
      objectCtorString = funcToString3.call(Object);
      __name(isPlainObject2, "isPlainObject");
      isPlainObject_default = isPlainObject2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hasUnicode.js
  function hasUnicode(string3) {
    return reHasUnicode.test(string3);
  }
  var rsAstralRange, rsComboMarksRange, reComboHalfMarksRange, rsComboSymbolsRange, rsComboRange, rsVarRange, rsZWJ, reHasUnicode, hasUnicode_default;
  var init_hasUnicode = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hasUnicode.js"() {
      "use strict";
      rsAstralRange = "\\ud800-\\udfff";
      rsComboMarksRange = "\\u0300-\\u036f";
      reComboHalfMarksRange = "\\ufe20-\\ufe2f";
      rsComboSymbolsRange = "\\u20d0-\\u20ff";
      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;
      rsVarRange = "\\ufe0e\\ufe0f";
      rsZWJ = "\\u200d";
      reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
      __name(hasUnicode, "hasUnicode");
      hasUnicode_default = hasUnicode;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayReduce.js
  function arrayReduce(array4, iteratee, accumulator, initAccum) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    if (initAccum && length2) {
      accumulator = array4[++index];
    }
    while (++index < length2) {
      accumulator = iteratee(accumulator, array4[index], index, array4);
    }
    return accumulator;
  }
  var arrayReduce_default;
  var init_arrayReduce = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayReduce.js"() {
      "use strict";
      __name(arrayReduce, "arrayReduce");
      arrayReduce_default = arrayReduce;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js
  function stackClear() {
    this.__data__ = new ListCache_default();
    this.size = 0;
  }
  var stackClear_default;
  var init_stackClear = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js"() {
      "use strict";
      init_ListCache();
      __name(stackClear, "stackClear");
      stackClear_default = stackClear;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js
  function stackDelete(key) {
    var data6 = this.__data__, result = data6["delete"](key);
    this.size = data6.size;
    return result;
  }
  var stackDelete_default;
  var init_stackDelete = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js"() {
      "use strict";
      __name(stackDelete, "stackDelete");
      stackDelete_default = stackDelete;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js
  function stackGet(key) {
    return this.__data__.get(key);
  }
  var stackGet_default;
  var init_stackGet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js"() {
      "use strict";
      __name(stackGet, "stackGet");
      stackGet_default = stackGet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js
  function stackHas(key) {
    return this.__data__.has(key);
  }
  var stackHas_default;
  var init_stackHas = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js"() {
      "use strict";
      __name(stackHas, "stackHas");
      stackHas_default = stackHas;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js
  function stackSet(key, value2) {
    var data6 = this.__data__;
    if (data6 instanceof ListCache_default) {
      var pairs2 = data6.__data__;
      if (!Map_default || pairs2.length < LARGE_ARRAY_SIZE - 1) {
        pairs2.push([key, value2]);
        this.size = ++data6.size;
        return this;
      }
      data6 = this.__data__ = new MapCache_default(pairs2);
    }
    data6.set(key, value2);
    this.size = data6.size;
    return this;
  }
  var LARGE_ARRAY_SIZE, stackSet_default;
  var init_stackSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js"() {
      "use strict";
      init_ListCache();
      init_Map();
      init_MapCache();
      LARGE_ARRAY_SIZE = 200;
      __name(stackSet, "stackSet");
      stackSet_default = stackSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js
  function Stack(entries2) {
    var data6 = this.__data__ = new ListCache_default(entries2);
    this.size = data6.size;
  }
  var Stack_default;
  var init_Stack = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js"() {
      "use strict";
      init_ListCache();
      init_stackClear();
      init_stackDelete();
      init_stackGet();
      init_stackHas();
      init_stackSet();
      __name(Stack, "Stack");
      Stack.prototype.clear = stackClear_default;
      Stack.prototype["delete"] = stackDelete_default;
      Stack.prototype.get = stackGet_default;
      Stack.prototype.has = stackHas_default;
      Stack.prototype.set = stackSet_default;
      Stack_default = Stack;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js
  function baseAssign(object3, source) {
    return object3 && copyObject_default(source, keys_default(source), object3);
  }
  var baseAssign_default;
  var init_baseAssign = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js"() {
      "use strict";
      init_copyObject();
      init_keys();
      __name(baseAssign, "baseAssign");
      baseAssign_default = baseAssign;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js
  function baseAssignIn(object3, source) {
    return object3 && copyObject_default(source, keysIn_default(source), object3);
  }
  var baseAssignIn_default;
  var init_baseAssignIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js"() {
      "use strict";
      init_copyObject();
      init_keysIn();
      __name(baseAssignIn, "baseAssignIn");
      baseAssignIn_default = baseAssignIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js
  function cloneBuffer(buffer, isDeep) {
    if (isDeep) {
      return buffer.slice();
    }
    var length2 = buffer.length, result = allocUnsafe ? allocUnsafe(length2) : new buffer.constructor(length2);
    buffer.copy(result);
    return result;
  }
  var freeExports3, freeModule3, moduleExports3, Buffer3, allocUnsafe, cloneBuffer_default;
  var init_cloneBuffer = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js"() {
      "use strict";
      init_root();
      freeExports3 = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule3 = freeExports3 && typeof module == "object" && module && !module.nodeType && module;
      moduleExports3 = freeModule3 && freeModule3.exports === freeExports3;
      Buffer3 = moduleExports3 ? root_default.Buffer : void 0;
      allocUnsafe = Buffer3 ? Buffer3.allocUnsafe : void 0;
      __name(cloneBuffer, "cloneBuffer");
      cloneBuffer_default = cloneBuffer;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js
  function arrayFilter(array4, predicate) {
    var index = -1, length2 = array4 == null ? 0 : array4.length, resIndex = 0, result = [];
    while (++index < length2) {
      var value2 = array4[index];
      if (predicate(value2, index, array4)) {
        result[resIndex++] = value2;
      }
    }
    return result;
  }
  var arrayFilter_default;
  var init_arrayFilter = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js"() {
      "use strict";
      __name(arrayFilter, "arrayFilter");
      arrayFilter_default = arrayFilter;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js
  function stubArray() {
    return [];
  }
  var stubArray_default;
  var init_stubArray = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js"() {
      "use strict";
      __name(stubArray, "stubArray");
      stubArray_default = stubArray;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js
  var objectProto13, propertyIsEnumerable2, nativeGetSymbols, getSymbols2, getSymbols_default;
  var init_getSymbols2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js"() {
      "use strict";
      init_arrayFilter();
      init_stubArray();
      objectProto13 = Object.prototype;
      propertyIsEnumerable2 = objectProto13.propertyIsEnumerable;
      nativeGetSymbols = Object.getOwnPropertySymbols;
      getSymbols2 = !nativeGetSymbols ? stubArray_default : function(object3) {
        if (object3 == null) {
          return [];
        }
        object3 = Object(object3);
        return arrayFilter_default(nativeGetSymbols(object3), function(symbol) {
          return propertyIsEnumerable2.call(object3, symbol);
        });
      };
      getSymbols_default = getSymbols2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js
  function copySymbols(source, object3) {
    return copyObject_default(source, getSymbols_default(source), object3);
  }
  var copySymbols_default;
  var init_copySymbols = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js"() {
      "use strict";
      init_copyObject();
      init_getSymbols2();
      __name(copySymbols, "copySymbols");
      copySymbols_default = copySymbols;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js
  var nativeGetSymbols2, getSymbolsIn, getSymbolsIn_default;
  var init_getSymbolsIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js"() {
      "use strict";
      init_arrayPush();
      init_getPrototype();
      init_getSymbols2();
      init_stubArray();
      nativeGetSymbols2 = Object.getOwnPropertySymbols;
      getSymbolsIn = !nativeGetSymbols2 ? stubArray_default : function(object3) {
        var result = [];
        while (object3) {
          arrayPush_default(result, getSymbols_default(object3));
          object3 = getPrototype_default(object3);
        }
        return result;
      };
      getSymbolsIn_default = getSymbolsIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js
  function copySymbolsIn(source, object3) {
    return copyObject_default(source, getSymbolsIn_default(source), object3);
  }
  var copySymbolsIn_default;
  var init_copySymbolsIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js"() {
      "use strict";
      init_copyObject();
      init_getSymbolsIn();
      __name(copySymbolsIn, "copySymbolsIn");
      copySymbolsIn_default = copySymbolsIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js
  function baseGetAllKeys(object3, keysFunc, symbolsFunc) {
    var result = keysFunc(object3);
    return isArray_default(object3) ? result : arrayPush_default(result, symbolsFunc(object3));
  }
  var baseGetAllKeys_default;
  var init_baseGetAllKeys = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js"() {
      "use strict";
      init_arrayPush();
      init_isArray2();
      __name(baseGetAllKeys, "baseGetAllKeys");
      baseGetAllKeys_default = baseGetAllKeys;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js
  function getAllKeys(object3) {
    return baseGetAllKeys_default(object3, keys_default, getSymbols_default);
  }
  var getAllKeys_default;
  var init_getAllKeys = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js"() {
      "use strict";
      init_baseGetAllKeys();
      init_getSymbols2();
      init_keys();
      __name(getAllKeys, "getAllKeys");
      getAllKeys_default = getAllKeys;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js
  function getAllKeysIn(object3) {
    return baseGetAllKeys_default(object3, keysIn_default, getSymbolsIn_default);
  }
  var getAllKeysIn_default;
  var init_getAllKeysIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js"() {
      "use strict";
      init_baseGetAllKeys();
      init_getSymbolsIn();
      init_keysIn();
      __name(getAllKeysIn, "getAllKeysIn");
      getAllKeysIn_default = getAllKeysIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js
  var DataView2, DataView_default;
  var init_DataView = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js"() {
      "use strict";
      init_getNative();
      init_root();
      DataView2 = getNative_default(root_default, "DataView");
      DataView_default = DataView2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js
  var Promise2, Promise_default;
  var init_Promise = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js"() {
      "use strict";
      init_getNative();
      init_root();
      Promise2 = getNative_default(root_default, "Promise");
      Promise_default = Promise2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Set.js
  var Set2, Set_default;
  var init_Set = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Set.js"() {
      "use strict";
      init_getNative();
      init_root();
      Set2 = getNative_default(root_default, "Set");
      Set_default = Set2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js
  var mapTag3, objectTag4, promiseTag, setTag3, weakMapTag2, dataViewTag3, dataViewCtorString, mapCtorString, promiseCtorString, setCtorString, weakMapCtorString, getTag2, getTag_default;
  var init_getTag2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js"() {
      "use strict";
      init_DataView();
      init_Map();
      init_Promise();
      init_Set();
      init_WeakMap();
      init_baseGetTag();
      init_toSource();
      mapTag3 = "[object Map]";
      objectTag4 = "[object Object]";
      promiseTag = "[object Promise]";
      setTag3 = "[object Set]";
      weakMapTag2 = "[object WeakMap]";
      dataViewTag3 = "[object DataView]";
      dataViewCtorString = toSource_default(DataView_default);
      mapCtorString = toSource_default(Map_default);
      promiseCtorString = toSource_default(Promise_default);
      setCtorString = toSource_default(Set_default);
      weakMapCtorString = toSource_default(WeakMap_default);
      getTag2 = baseGetTag_default;
      if (DataView_default && getTag2(new DataView_default(new ArrayBuffer(1))) != dataViewTag3 || Map_default && getTag2(new Map_default()) != mapTag3 || Promise_default && getTag2(Promise_default.resolve()) != promiseTag || Set_default && getTag2(new Set_default()) != setTag3 || WeakMap_default && getTag2(new WeakMap_default()) != weakMapTag2) {
        getTag2 = /* @__PURE__ */ __name(function(value2) {
          var result = baseGetTag_default(value2), Ctor = result == objectTag4 ? value2.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : "";
          if (ctorString) {
            switch (ctorString) {
              case dataViewCtorString:
                return dataViewTag3;
              case mapCtorString:
                return mapTag3;
              case promiseCtorString:
                return promiseTag;
              case setCtorString:
                return setTag3;
              case weakMapCtorString:
                return weakMapTag2;
            }
          }
          return result;
        }, "getTag");
      }
      getTag_default = getTag2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js
  function initCloneArray(array4) {
    var length2 = array4.length, result = new array4.constructor(length2);
    if (length2 && typeof array4[0] == "string" && hasOwnProperty11.call(array4, "index")) {
      result.index = array4.index;
      result.input = array4.input;
    }
    return result;
  }
  var objectProto14, hasOwnProperty11, initCloneArray_default;
  var init_initCloneArray = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js"() {
      "use strict";
      objectProto14 = Object.prototype;
      hasOwnProperty11 = objectProto14.hasOwnProperty;
      __name(initCloneArray, "initCloneArray");
      initCloneArray_default = initCloneArray;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js
  var Uint8Array2, Uint8Array_default;
  var init_Uint8Array = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js"() {
      "use strict";
      init_root();
      Uint8Array2 = root_default.Uint8Array;
      Uint8Array_default = Uint8Array2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js
  function cloneArrayBuffer(arrayBuffer) {
    var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
    new Uint8Array_default(result).set(new Uint8Array_default(arrayBuffer));
    return result;
  }
  var cloneArrayBuffer_default;
  var init_cloneArrayBuffer = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js"() {
      "use strict";
      init_Uint8Array();
      __name(cloneArrayBuffer, "cloneArrayBuffer");
      cloneArrayBuffer_default = cloneArrayBuffer;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js
  function cloneDataView(dataView, isDeep) {
    var buffer = isDeep ? cloneArrayBuffer_default(dataView.buffer) : dataView.buffer;
    return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
  }
  var cloneDataView_default;
  var init_cloneDataView = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js"() {
      "use strict";
      init_cloneArrayBuffer();
      __name(cloneDataView, "cloneDataView");
      cloneDataView_default = cloneDataView;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js
  function cloneRegExp(regexp) {
    var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
    result.lastIndex = regexp.lastIndex;
    return result;
  }
  var reFlags, cloneRegExp_default;
  var init_cloneRegExp = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js"() {
      "use strict";
      reFlags = /\w*$/;
      __name(cloneRegExp, "cloneRegExp");
      cloneRegExp_default = cloneRegExp;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js
  function cloneSymbol(symbol) {
    return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
  }
  var symbolProto2, symbolValueOf, cloneSymbol_default;
  var init_cloneSymbol = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js"() {
      "use strict";
      init_Symbol();
      symbolProto2 = Symbol_default ? Symbol_default.prototype : void 0;
      symbolValueOf = symbolProto2 ? symbolProto2.valueOf : void 0;
      __name(cloneSymbol, "cloneSymbol");
      cloneSymbol_default = cloneSymbol;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js
  function cloneTypedArray(typedArray, isDeep) {
    var buffer = isDeep ? cloneArrayBuffer_default(typedArray.buffer) : typedArray.buffer;
    return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
  }
  var cloneTypedArray_default;
  var init_cloneTypedArray = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js"() {
      "use strict";
      init_cloneArrayBuffer();
      __name(cloneTypedArray, "cloneTypedArray");
      cloneTypedArray_default = cloneTypedArray;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js
  function initCloneByTag(object3, tag, isDeep) {
    var Ctor = object3.constructor;
    switch (tag) {
      case arrayBufferTag3:
        return cloneArrayBuffer_default(object3);
      case boolTag2:
      case dateTag3:
        return new Ctor(+object3);
      case dataViewTag4:
        return cloneDataView_default(object3, isDeep);
      case float32Tag2:
      case float64Tag2:
      case int8Tag2:
      case int16Tag2:
      case int32Tag2:
      case uint8Tag2:
      case uint8ClampedTag2:
      case uint16Tag2:
      case uint32Tag2:
        return cloneTypedArray_default(object3, isDeep);
      case mapTag4:
        return new Ctor();
      case numberTag3:
      case stringTag3:
        return new Ctor(object3);
      case regexpTag3:
        return cloneRegExp_default(object3);
      case setTag4:
        return new Ctor();
      case symbolTag3:
        return cloneSymbol_default(object3);
    }
  }
  var boolTag2, dateTag3, mapTag4, numberTag3, regexpTag3, setTag4, stringTag3, symbolTag3, arrayBufferTag3, dataViewTag4, float32Tag2, float64Tag2, int8Tag2, int16Tag2, int32Tag2, uint8Tag2, uint8ClampedTag2, uint16Tag2, uint32Tag2, initCloneByTag_default;
  var init_initCloneByTag = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js"() {
      "use strict";
      init_cloneArrayBuffer();
      init_cloneDataView();
      init_cloneRegExp();
      init_cloneSymbol();
      init_cloneTypedArray();
      boolTag2 = "[object Boolean]";
      dateTag3 = "[object Date]";
      mapTag4 = "[object Map]";
      numberTag3 = "[object Number]";
      regexpTag3 = "[object RegExp]";
      setTag4 = "[object Set]";
      stringTag3 = "[object String]";
      symbolTag3 = "[object Symbol]";
      arrayBufferTag3 = "[object ArrayBuffer]";
      dataViewTag4 = "[object DataView]";
      float32Tag2 = "[object Float32Array]";
      float64Tag2 = "[object Float64Array]";
      int8Tag2 = "[object Int8Array]";
      int16Tag2 = "[object Int16Array]";
      int32Tag2 = "[object Int32Array]";
      uint8Tag2 = "[object Uint8Array]";
      uint8ClampedTag2 = "[object Uint8ClampedArray]";
      uint16Tag2 = "[object Uint16Array]";
      uint32Tag2 = "[object Uint32Array]";
      __name(initCloneByTag, "initCloneByTag");
      initCloneByTag_default = initCloneByTag;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js
  function initCloneObject(object3) {
    return typeof object3.constructor == "function" && !isPrototype_default(object3) ? baseCreate_default(getPrototype_default(object3)) : {};
  }
  var initCloneObject_default;
  var init_initCloneObject = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js"() {
      "use strict";
      init_baseCreate();
      init_getPrototype();
      init_isPrototype2();
      __name(initCloneObject, "initCloneObject");
      initCloneObject_default = initCloneObject;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js
  function baseIsMap(value2) {
    return isObjectLike_default(value2) && getTag_default(value2) == mapTag5;
  }
  var mapTag5, baseIsMap_default;
  var init_baseIsMap = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js"() {
      "use strict";
      init_getTag2();
      init_isObjectLike2();
      mapTag5 = "[object Map]";
      __name(baseIsMap, "baseIsMap");
      baseIsMap_default = baseIsMap;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isMap.js
  var nodeIsMap, isMap, isMap_default;
  var init_isMap = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isMap.js"() {
      "use strict";
      init_baseIsMap();
      init_baseUnary();
      init_nodeUtil();
      nodeIsMap = nodeUtil_default && nodeUtil_default.isMap;
      isMap = nodeIsMap ? baseUnary_default(nodeIsMap) : baseIsMap_default;
      isMap_default = isMap;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js
  function baseIsSet(value2) {
    return isObjectLike_default(value2) && getTag_default(value2) == setTag5;
  }
  var setTag5, baseIsSet_default;
  var init_baseIsSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js"() {
      "use strict";
      init_getTag2();
      init_isObjectLike2();
      setTag5 = "[object Set]";
      __name(baseIsSet, "baseIsSet");
      baseIsSet_default = baseIsSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSet.js
  var nodeIsSet, isSet, isSet_default;
  var init_isSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSet.js"() {
      "use strict";
      init_baseIsSet();
      init_baseUnary();
      init_nodeUtil();
      nodeIsSet = nodeUtil_default && nodeUtil_default.isSet;
      isSet = nodeIsSet ? baseUnary_default(nodeIsSet) : baseIsSet_default;
      isSet_default = isSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js
  function baseClone(value2, bitmask, customizer, key, object3, stack) {
    var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;
    if (customizer) {
      result = object3 ? customizer(value2, key, object3, stack) : customizer(value2);
    }
    if (result !== void 0) {
      return result;
    }
    if (!isObject_default(value2)) {
      return value2;
    }
    var isArr = isArray_default(value2);
    if (isArr) {
      result = initCloneArray_default(value2);
      if (!isDeep) {
        return copyArray_default(value2, result);
      }
    } else {
      var tag = getTag_default(value2), isFunc = tag == funcTag3 || tag == genTag2;
      if (isBuffer_default(value2)) {
        return cloneBuffer_default(value2, isDeep);
      }
      if (tag == objectTag5 || tag == argsTag3 || isFunc && !object3) {
        result = isFlat || isFunc ? {} : initCloneObject_default(value2);
        if (!isDeep) {
          return isFlat ? copySymbolsIn_default(value2, baseAssignIn_default(result, value2)) : copySymbols_default(value2, baseAssign_default(result, value2));
        }
      } else {
        if (!cloneableTags[tag]) {
          return object3 ? value2 : {};
        }
        result = initCloneByTag_default(value2, tag, isDeep);
      }
    }
    stack || (stack = new Stack_default());
    var stacked = stack.get(value2);
    if (stacked) {
      return stacked;
    }
    stack.set(value2, result);
    if (isSet_default(value2)) {
      value2.forEach(function(subValue) {
        result.add(baseClone(subValue, bitmask, customizer, subValue, value2, stack));
      });
    } else if (isMap_default(value2)) {
      value2.forEach(function(subValue, key2) {
        result.set(key2, baseClone(subValue, bitmask, customizer, key2, value2, stack));
      });
    }
    var keysFunc = isFull ? isFlat ? getAllKeysIn_default : getAllKeys_default : isFlat ? keysIn_default : keys_default;
    var props = isArr ? void 0 : keysFunc(value2);
    arrayEach_default(props || value2, function(subValue, key2) {
      if (props) {
        key2 = subValue;
        subValue = value2[key2];
      }
      assignValue_default(result, key2, baseClone(subValue, bitmask, customizer, key2, value2, stack));
    });
    return result;
  }
  var CLONE_DEEP_FLAG, CLONE_FLAT_FLAG, CLONE_SYMBOLS_FLAG, argsTag3, arrayTag3, boolTag3, dateTag4, errorTag2, funcTag3, genTag2, mapTag6, numberTag4, objectTag5, regexpTag4, setTag6, stringTag4, symbolTag4, weakMapTag3, arrayBufferTag4, dataViewTag5, float32Tag3, float64Tag3, int8Tag3, int16Tag3, int32Tag3, uint8Tag3, uint8ClampedTag3, uint16Tag3, uint32Tag3, cloneableTags, baseClone_default;
  var init_baseClone = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js"() {
      "use strict";
      init_Stack();
      init_arrayEach();
      init_assignValue();
      init_baseAssign();
      init_baseAssignIn();
      init_cloneBuffer();
      init_copyArray();
      init_copySymbols();
      init_copySymbolsIn();
      init_getAllKeys();
      init_getAllKeysIn();
      init_getTag2();
      init_initCloneArray();
      init_initCloneByTag();
      init_initCloneObject();
      init_isArray2();
      init_isBuffer();
      init_isMap();
      init_isObject();
      init_isSet();
      init_keys();
      init_keysIn();
      CLONE_DEEP_FLAG = 1;
      CLONE_FLAT_FLAG = 2;
      CLONE_SYMBOLS_FLAG = 4;
      argsTag3 = "[object Arguments]";
      arrayTag3 = "[object Array]";
      boolTag3 = "[object Boolean]";
      dateTag4 = "[object Date]";
      errorTag2 = "[object Error]";
      funcTag3 = "[object Function]";
      genTag2 = "[object GeneratorFunction]";
      mapTag6 = "[object Map]";
      numberTag4 = "[object Number]";
      objectTag5 = "[object Object]";
      regexpTag4 = "[object RegExp]";
      setTag6 = "[object Set]";
      stringTag4 = "[object String]";
      symbolTag4 = "[object Symbol]";
      weakMapTag3 = "[object WeakMap]";
      arrayBufferTag4 = "[object ArrayBuffer]";
      dataViewTag5 = "[object DataView]";
      float32Tag3 = "[object Float32Array]";
      float64Tag3 = "[object Float64Array]";
      int8Tag3 = "[object Int8Array]";
      int16Tag3 = "[object Int16Array]";
      int32Tag3 = "[object Int32Array]";
      uint8Tag3 = "[object Uint8Array]";
      uint8ClampedTag3 = "[object Uint8ClampedArray]";
      uint16Tag3 = "[object Uint16Array]";
      uint32Tag3 = "[object Uint32Array]";
      cloneableTags = {};
      cloneableTags[argsTag3] = cloneableTags[arrayTag3] = cloneableTags[arrayBufferTag4] = cloneableTags[dataViewTag5] = cloneableTags[boolTag3] = cloneableTags[dateTag4] = cloneableTags[float32Tag3] = cloneableTags[float64Tag3] = cloneableTags[int8Tag3] = cloneableTags[int16Tag3] = cloneableTags[int32Tag3] = cloneableTags[mapTag6] = cloneableTags[numberTag4] = cloneableTags[objectTag5] = cloneableTags[regexpTag4] = cloneableTags[setTag6] = cloneableTags[stringTag4] = cloneableTags[symbolTag4] = cloneableTags[uint8Tag3] = cloneableTags[uint8ClampedTag3] = cloneableTags[uint16Tag3] = cloneableTags[uint32Tag3] = true;
      cloneableTags[errorTag2] = cloneableTags[funcTag3] = cloneableTags[weakMapTag3] = false;
      __name(baseClone, "baseClone");
      baseClone_default = baseClone;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/clone.js
  function clone4(value2) {
    return baseClone_default(value2, CLONE_SYMBOLS_FLAG2);
  }
  var CLONE_SYMBOLS_FLAG2, clone_default2;
  var init_clone4 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/clone.js"() {
      "use strict";
      init_baseClone();
      CLONE_SYMBOLS_FLAG2 = 4;
      __name(clone4, "clone");
      clone_default2 = clone4;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/cloneDeep.js
  function cloneDeep2(value2) {
    return baseClone_default(value2, CLONE_DEEP_FLAG2 | CLONE_SYMBOLS_FLAG3);
  }
  var CLONE_DEEP_FLAG2, CLONE_SYMBOLS_FLAG3, cloneDeep_default;
  var init_cloneDeep2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/cloneDeep.js"() {
      "use strict";
      init_baseClone();
      CLONE_DEEP_FLAG2 = 1;
      CLONE_SYMBOLS_FLAG3 = 4;
      __name(cloneDeep2, "cloneDeep");
      cloneDeep_default = cloneDeep2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js
  function setCacheAdd(value2) {
    this.__data__.set(value2, HASH_UNDEFINED3);
    return this;
  }
  var HASH_UNDEFINED3, setCacheAdd_default;
  var init_setCacheAdd = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js"() {
      "use strict";
      HASH_UNDEFINED3 = "__lodash_hash_undefined__";
      __name(setCacheAdd, "setCacheAdd");
      setCacheAdd_default = setCacheAdd;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js
  function setCacheHas(value2) {
    return this.__data__.has(value2);
  }
  var setCacheHas_default;
  var init_setCacheHas = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js"() {
      "use strict";
      __name(setCacheHas, "setCacheHas");
      setCacheHas_default = setCacheHas;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js
  function SetCache(values3) {
    var index = -1, length2 = values3 == null ? 0 : values3.length;
    this.__data__ = new MapCache_default();
    while (++index < length2) {
      this.add(values3[index]);
    }
  }
  var SetCache_default;
  var init_SetCache = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js"() {
      "use strict";
      init_MapCache();
      init_setCacheAdd();
      init_setCacheHas();
      __name(SetCache, "SetCache");
      SetCache.prototype.add = SetCache.prototype.push = setCacheAdd_default;
      SetCache.prototype.has = setCacheHas_default;
      SetCache_default = SetCache;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js
  function arraySome(array4, predicate) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (predicate(array4[index], index, array4)) {
        return true;
      }
    }
    return false;
  }
  var arraySome_default;
  var init_arraySome = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js"() {
      "use strict";
      __name(arraySome, "arraySome");
      arraySome_default = arraySome;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js
  function cacheHas(cache3, key) {
    return cache3.has(key);
  }
  var cacheHas_default;
  var init_cacheHas = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js"() {
      "use strict";
      __name(cacheHas, "cacheHas");
      cacheHas_default = cacheHas;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js
  function equalArrays(array4, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array4.length, othLength = other.length;
    if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
      return false;
    }
    var arrStacked = stack.get(array4);
    var othStacked = stack.get(other);
    if (arrStacked && othStacked) {
      return arrStacked == other && othStacked == array4;
    }
    var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache_default() : void 0;
    stack.set(array4, other);
    stack.set(other, array4);
    while (++index < arrLength) {
      var arrValue = array4[index], othValue = other[index];
      if (customizer) {
        var compared = isPartial ? customizer(othValue, arrValue, index, other, array4, stack) : customizer(arrValue, othValue, index, array4, other, stack);
      }
      if (compared !== void 0) {
        if (compared) {
          continue;
        }
        result = false;
        break;
      }
      if (seen) {
        if (!arraySome_default(other, function(othValue2, othIndex) {
          if (!cacheHas_default(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
            return seen.push(othIndex);
          }
        })) {
          result = false;
          break;
        }
      } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
        result = false;
        break;
      }
    }
    stack["delete"](array4);
    stack["delete"](other);
    return result;
  }
  var COMPARE_PARTIAL_FLAG, COMPARE_UNORDERED_FLAG, equalArrays_default;
  var init_equalArrays = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js"() {
      "use strict";
      init_SetCache();
      init_arraySome();
      init_cacheHas();
      COMPARE_PARTIAL_FLAG = 1;
      COMPARE_UNORDERED_FLAG = 2;
      __name(equalArrays, "equalArrays");
      equalArrays_default = equalArrays;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js
  function mapToArray(map6) {
    var index = -1, result = Array(map6.size);
    map6.forEach(function(value2, key) {
      result[++index] = [key, value2];
    });
    return result;
  }
  var mapToArray_default;
  var init_mapToArray = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js"() {
      "use strict";
      __name(mapToArray, "mapToArray");
      mapToArray_default = mapToArray;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js
  function setToArray(set5) {
    var index = -1, result = Array(set5.size);
    set5.forEach(function(value2) {
      result[++index] = value2;
    });
    return result;
  }
  var setToArray_default;
  var init_setToArray = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js"() {
      "use strict";
      __name(setToArray, "setToArray");
      setToArray_default = setToArray;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js
  function equalByTag(object3, other, tag, bitmask, customizer, equalFunc, stack) {
    switch (tag) {
      case dataViewTag6:
        if (object3.byteLength != other.byteLength || object3.byteOffset != other.byteOffset) {
          return false;
        }
        object3 = object3.buffer;
        other = other.buffer;
      case arrayBufferTag5:
        if (object3.byteLength != other.byteLength || !equalFunc(new Uint8Array_default(object3), new Uint8Array_default(other))) {
          return false;
        }
        return true;
      case boolTag4:
      case dateTag5:
      case numberTag5:
        return eq_default(+object3, +other);
      case errorTag3:
        return object3.name == other.name && object3.message == other.message;
      case regexpTag5:
      case stringTag5:
        return object3 == other + "";
      case mapTag7:
        var convert = mapToArray_default;
      case setTag7:
        var isPartial = bitmask & COMPARE_PARTIAL_FLAG2;
        convert || (convert = setToArray_default);
        if (object3.size != other.size && !isPartial) {
          return false;
        }
        var stacked = stack.get(object3);
        if (stacked) {
          return stacked == other;
        }
        bitmask |= COMPARE_UNORDERED_FLAG2;
        stack.set(object3, other);
        var result = equalArrays_default(convert(object3), convert(other), bitmask, customizer, equalFunc, stack);
        stack["delete"](object3);
        return result;
      case symbolTag5:
        if (symbolValueOf2) {
          return symbolValueOf2.call(object3) == symbolValueOf2.call(other);
        }
    }
    return false;
  }
  var COMPARE_PARTIAL_FLAG2, COMPARE_UNORDERED_FLAG2, boolTag4, dateTag5, errorTag3, mapTag7, numberTag5, regexpTag5, setTag7, stringTag5, symbolTag5, arrayBufferTag5, dataViewTag6, symbolProto3, symbolValueOf2, equalByTag_default;
  var init_equalByTag = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js"() {
      "use strict";
      init_Symbol();
      init_Uint8Array();
      init_eq();
      init_equalArrays();
      init_mapToArray();
      init_setToArray();
      COMPARE_PARTIAL_FLAG2 = 1;
      COMPARE_UNORDERED_FLAG2 = 2;
      boolTag4 = "[object Boolean]";
      dateTag5 = "[object Date]";
      errorTag3 = "[object Error]";
      mapTag7 = "[object Map]";
      numberTag5 = "[object Number]";
      regexpTag5 = "[object RegExp]";
      setTag7 = "[object Set]";
      stringTag5 = "[object String]";
      symbolTag5 = "[object Symbol]";
      arrayBufferTag5 = "[object ArrayBuffer]";
      dataViewTag6 = "[object DataView]";
      symbolProto3 = Symbol_default ? Symbol_default.prototype : void 0;
      symbolValueOf2 = symbolProto3 ? symbolProto3.valueOf : void 0;
      __name(equalByTag, "equalByTag");
      equalByTag_default = equalByTag;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js
  function equalObjects(object3, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG3, objProps = getAllKeys_default(object3), objLength = objProps.length, othProps = getAllKeys_default(other), othLength = othProps.length;
    if (objLength != othLength && !isPartial) {
      return false;
    }
    var index = objLength;
    while (index--) {
      var key = objProps[index];
      if (!(isPartial ? key in other : hasOwnProperty12.call(other, key))) {
        return false;
      }
    }
    var objStacked = stack.get(object3);
    var othStacked = stack.get(other);
    if (objStacked && othStacked) {
      return objStacked == other && othStacked == object3;
    }
    var result = true;
    stack.set(object3, other);
    stack.set(other, object3);
    var skipCtor = isPartial;
    while (++index < objLength) {
      key = objProps[index];
      var objValue = object3[key], othValue = other[key];
      if (customizer) {
        var compared = isPartial ? customizer(othValue, objValue, key, other, object3, stack) : customizer(objValue, othValue, key, object3, other, stack);
      }
      if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
        result = false;
        break;
      }
      skipCtor || (skipCtor = key == "constructor");
    }
    if (result && !skipCtor) {
      var objCtor = object3.constructor, othCtor = other.constructor;
      if (objCtor != othCtor && ("constructor" in object3 && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
        result = false;
      }
    }
    stack["delete"](object3);
    stack["delete"](other);
    return result;
  }
  var COMPARE_PARTIAL_FLAG3, objectProto15, hasOwnProperty12, equalObjects_default;
  var init_equalObjects = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js"() {
      "use strict";
      init_getAllKeys();
      COMPARE_PARTIAL_FLAG3 = 1;
      objectProto15 = Object.prototype;
      hasOwnProperty12 = objectProto15.hasOwnProperty;
      __name(equalObjects, "equalObjects");
      equalObjects_default = equalObjects;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js
  function baseIsEqualDeep(object3, other, bitmask, customizer, equalFunc, stack) {
    var objIsArr = isArray_default(object3), othIsArr = isArray_default(other), objTag = objIsArr ? arrayTag4 : getTag_default(object3), othTag = othIsArr ? arrayTag4 : getTag_default(other);
    objTag = objTag == argsTag4 ? objectTag6 : objTag;
    othTag = othTag == argsTag4 ? objectTag6 : othTag;
    var objIsObj = objTag == objectTag6, othIsObj = othTag == objectTag6, isSameTag = objTag == othTag;
    if (isSameTag && isBuffer_default(object3)) {
      if (!isBuffer_default(other)) {
        return false;
      }
      objIsArr = true;
      objIsObj = false;
    }
    if (isSameTag && !objIsObj) {
      stack || (stack = new Stack_default());
      return objIsArr || isTypedArray_default(object3) ? equalArrays_default(object3, other, bitmask, customizer, equalFunc, stack) : equalByTag_default(object3, other, objTag, bitmask, customizer, equalFunc, stack);
    }
    if (!(bitmask & COMPARE_PARTIAL_FLAG4)) {
      var objIsWrapped = objIsObj && hasOwnProperty13.call(object3, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty13.call(other, "__wrapped__");
      if (objIsWrapped || othIsWrapped) {
        var objUnwrapped = objIsWrapped ? object3.value() : object3, othUnwrapped = othIsWrapped ? other.value() : other;
        stack || (stack = new Stack_default());
        return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
      }
    }
    if (!isSameTag) {
      return false;
    }
    stack || (stack = new Stack_default());
    return equalObjects_default(object3, other, bitmask, customizer, equalFunc, stack);
  }
  var COMPARE_PARTIAL_FLAG4, argsTag4, arrayTag4, objectTag6, objectProto16, hasOwnProperty13, baseIsEqualDeep_default;
  var init_baseIsEqualDeep = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js"() {
      "use strict";
      init_Stack();
      init_equalArrays();
      init_equalByTag();
      init_equalObjects();
      init_getTag2();
      init_isArray2();
      init_isBuffer();
      init_isTypedArray3();
      COMPARE_PARTIAL_FLAG4 = 1;
      argsTag4 = "[object Arguments]";
      arrayTag4 = "[object Array]";
      objectTag6 = "[object Object]";
      objectProto16 = Object.prototype;
      hasOwnProperty13 = objectProto16.hasOwnProperty;
      __name(baseIsEqualDeep, "baseIsEqualDeep");
      baseIsEqualDeep_default = baseIsEqualDeep;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js
  function baseIsEqual(value2, other, bitmask, customizer, stack) {
    if (value2 === other) {
      return true;
    }
    if (value2 == null || other == null || !isObjectLike_default(value2) && !isObjectLike_default(other)) {
      return value2 !== value2 && other !== other;
    }
    return baseIsEqualDeep_default(value2, other, bitmask, customizer, baseIsEqual, stack);
  }
  var baseIsEqual_default;
  var init_baseIsEqual = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js"() {
      "use strict";
      init_baseIsEqualDeep();
      init_isObjectLike2();
      __name(baseIsEqual, "baseIsEqual");
      baseIsEqual_default = baseIsEqual;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMatch.js
  function baseIsMatch(object3, source, matchData, customizer) {
    var index = matchData.length, length2 = index, noCustomizer = !customizer;
    if (object3 == null) {
      return !length2;
    }
    object3 = Object(object3);
    while (index--) {
      var data6 = matchData[index];
      if (noCustomizer && data6[2] ? data6[1] !== object3[data6[0]] : !(data6[0] in object3)) {
        return false;
      }
    }
    while (++index < length2) {
      data6 = matchData[index];
      var key = data6[0], objValue = object3[key], srcValue = data6[1];
      if (noCustomizer && data6[2]) {
        if (objValue === void 0 && !(key in object3)) {
          return false;
        }
      } else {
        var stack = new Stack_default();
        if (customizer) {
          var result = customizer(objValue, srcValue, key, object3, source, stack);
        }
        if (!(result === void 0 ? baseIsEqual_default(srcValue, objValue, COMPARE_PARTIAL_FLAG5 | COMPARE_UNORDERED_FLAG3, customizer, stack) : result)) {
          return false;
        }
      }
    }
    return true;
  }
  var COMPARE_PARTIAL_FLAG5, COMPARE_UNORDERED_FLAG3, baseIsMatch_default;
  var init_baseIsMatch = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMatch.js"() {
      "use strict";
      init_Stack();
      init_baseIsEqual();
      COMPARE_PARTIAL_FLAG5 = 1;
      COMPARE_UNORDERED_FLAG3 = 2;
      __name(baseIsMatch, "baseIsMatch");
      baseIsMatch_default = baseIsMatch;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isStrictComparable.js
  function isStrictComparable(value2) {
    return value2 === value2 && !isObject_default(value2);
  }
  var isStrictComparable_default;
  var init_isStrictComparable = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isStrictComparable.js"() {
      "use strict";
      init_isObject();
      __name(isStrictComparable, "isStrictComparable");
      isStrictComparable_default = isStrictComparable;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMatchData.js
  function getMatchData(object3) {
    var result = keys_default(object3), length2 = result.length;
    while (length2--) {
      var key = result[length2], value2 = object3[key];
      result[length2] = [key, value2, isStrictComparable_default(value2)];
    }
    return result;
  }
  var getMatchData_default;
  var init_getMatchData = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMatchData.js"() {
      "use strict";
      init_isStrictComparable();
      init_keys();
      __name(getMatchData, "getMatchData");
      getMatchData_default = getMatchData;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_matchesStrictComparable.js
  function matchesStrictComparable(key, srcValue) {
    return function(object3) {
      if (object3 == null) {
        return false;
      }
      return object3[key] === srcValue && (srcValue !== void 0 || key in Object(object3));
    };
  }
  var matchesStrictComparable_default;
  var init_matchesStrictComparable = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_matchesStrictComparable.js"() {
      "use strict";
      __name(matchesStrictComparable, "matchesStrictComparable");
      matchesStrictComparable_default = matchesStrictComparable;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatches.js
  function baseMatches(source) {
    var matchData = getMatchData_default(source);
    if (matchData.length == 1 && matchData[0][2]) {
      return matchesStrictComparable_default(matchData[0][0], matchData[0][1]);
    }
    return function(object3) {
      return object3 === source || baseIsMatch_default(object3, source, matchData);
    };
  }
  var baseMatches_default;
  var init_baseMatches = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatches.js"() {
      "use strict";
      init_baseIsMatch();
      init_getMatchData();
      init_matchesStrictComparable();
      __name(baseMatches, "baseMatches");
      baseMatches_default = baseMatches;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js
  function baseHasIn(object3, key) {
    return object3 != null && key in Object(object3);
  }
  var baseHasIn_default;
  var init_baseHasIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js"() {
      "use strict";
      __name(baseHasIn, "baseHasIn");
      baseHasIn_default = baseHasIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js
  function hasPath(object3, path4, hasFunc) {
    path4 = castPath_default(path4, object3);
    var index = -1, length2 = path4.length, result = false;
    while (++index < length2) {
      var key = toKey_default(path4[index]);
      if (!(result = object3 != null && hasFunc(object3, key))) {
        break;
      }
      object3 = object3[key];
    }
    if (result || ++index != length2) {
      return result;
    }
    length2 = object3 == null ? 0 : object3.length;
    return !!length2 && isLength_default(length2) && isIndex_default(key, length2) && (isArray_default(object3) || isArguments_default(object3));
  }
  var hasPath_default;
  var init_hasPath = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js"() {
      "use strict";
      init_castPath();
      init_isArguments2();
      init_isArray2();
      init_isIndex();
      init_isLength2();
      init_toKey();
      __name(hasPath, "hasPath");
      hasPath_default = hasPath;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js
  function hasIn(object3, path4) {
    return object3 != null && hasPath_default(object3, path4, baseHasIn_default);
  }
  var hasIn_default;
  var init_hasIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js"() {
      "use strict";
      init_baseHasIn();
      init_hasPath();
      __name(hasIn, "hasIn");
      hasIn_default = hasIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatchesProperty.js
  function baseMatchesProperty(path4, srcValue) {
    if (isKey_default(path4) && isStrictComparable_default(srcValue)) {
      return matchesStrictComparable_default(toKey_default(path4), srcValue);
    }
    return function(object3) {
      var objValue = get_default(object3, path4);
      return objValue === void 0 && objValue === srcValue ? hasIn_default(object3, path4) : baseIsEqual_default(srcValue, objValue, COMPARE_PARTIAL_FLAG6 | COMPARE_UNORDERED_FLAG4);
    };
  }
  var COMPARE_PARTIAL_FLAG6, COMPARE_UNORDERED_FLAG4, baseMatchesProperty_default;
  var init_baseMatchesProperty = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatchesProperty.js"() {
      "use strict";
      init_baseIsEqual();
      init_get();
      init_hasIn();
      init_isKey();
      init_isStrictComparable();
      init_matchesStrictComparable();
      init_toKey();
      COMPARE_PARTIAL_FLAG6 = 1;
      COMPARE_UNORDERED_FLAG4 = 2;
      __name(baseMatchesProperty, "baseMatchesProperty");
      baseMatchesProperty_default = baseMatchesProperty;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseProperty.js
  function baseProperty(key) {
    return function(object3) {
      return object3 == null ? void 0 : object3[key];
    };
  }
  var baseProperty_default;
  var init_baseProperty = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseProperty.js"() {
      "use strict";
      __name(baseProperty, "baseProperty");
      baseProperty_default = baseProperty;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePropertyDeep.js
  function basePropertyDeep(path4) {
    return function(object3) {
      return baseGet_default(object3, path4);
    };
  }
  var basePropertyDeep_default;
  var init_basePropertyDeep = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePropertyDeep.js"() {
      "use strict";
      init_baseGet();
      __name(basePropertyDeep, "basePropertyDeep");
      basePropertyDeep_default = basePropertyDeep;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/property.js
  function property(path4) {
    return isKey_default(path4) ? baseProperty_default(toKey_default(path4)) : basePropertyDeep_default(path4);
  }
  var property_default2;
  var init_property2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/property.js"() {
      "use strict";
      init_baseProperty();
      init_basePropertyDeep();
      init_isKey();
      init_toKey();
      __name(property, "property");
      property_default2 = property;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIteratee.js
  function baseIteratee(value2) {
    if (typeof value2 == "function") {
      return value2;
    }
    if (value2 == null) {
      return identity_default4;
    }
    if (typeof value2 == "object") {
      return isArray_default(value2) ? baseMatchesProperty_default(value2[0], value2[1]) : baseMatches_default(value2);
    }
    return property_default2(value2);
  }
  var baseIteratee_default;
  var init_baseIteratee = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIteratee.js"() {
      "use strict";
      init_baseMatches();
      init_baseMatchesProperty();
      init_identity4();
      init_isArray2();
      init_property2();
      __name(baseIteratee, "baseIteratee");
      baseIteratee_default = baseIteratee;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js
  function createBaseFor(fromRight) {
    return function(object3, iteratee, keysFunc) {
      var index = -1, iterable = Object(object3), props = keysFunc(object3), length2 = props.length;
      while (length2--) {
        var key = props[fromRight ? length2 : ++index];
        if (iteratee(iterable[key], key, iterable) === false) {
          break;
        }
      }
      return object3;
    };
  }
  var createBaseFor_default;
  var init_createBaseFor = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js"() {
      "use strict";
      __name(createBaseFor, "createBaseFor");
      createBaseFor_default = createBaseFor;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js
  var baseFor, baseFor_default;
  var init_baseFor = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js"() {
      "use strict";
      init_createBaseFor();
      baseFor = createBaseFor_default();
      baseFor_default = baseFor;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseForOwn.js
  function baseForOwn(object3, iteratee) {
    return object3 && baseFor_default(object3, iteratee, keys_default);
  }
  var baseForOwn_default;
  var init_baseForOwn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseForOwn.js"() {
      "use strict";
      init_baseFor();
      init_keys();
      __name(baseForOwn, "baseForOwn");
      baseForOwn_default = baseForOwn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseEach.js
  function createBaseEach(eachFunc, fromRight) {
    return function(collection4, iteratee) {
      if (collection4 == null) {
        return collection4;
      }
      if (!isArrayLike_default(collection4)) {
        return eachFunc(collection4, iteratee);
      }
      var length2 = collection4.length, index = fromRight ? length2 : -1, iterable = Object(collection4);
      while (fromRight ? index-- : ++index < length2) {
        if (iteratee(iterable[index], index, iterable) === false) {
          break;
        }
      }
      return collection4;
    };
  }
  var createBaseEach_default;
  var init_createBaseEach = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseEach.js"() {
      "use strict";
      init_isArrayLike2();
      __name(createBaseEach, "createBaseEach");
      createBaseEach_default = createBaseEach;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseEach.js
  var baseEach, baseEach_default;
  var init_baseEach = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseEach.js"() {
      "use strict";
      init_baseForOwn();
      init_createBaseEach();
      baseEach = createBaseEach_default(baseForOwn_default);
      baseEach_default = baseEach;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/now.js
  var now2, now_default;
  var init_now = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/now.js"() {
      "use strict";
      init_root();
      now2 = /* @__PURE__ */ __name(function() {
        return root_default.Date.now();
      }, "now");
      now_default = now2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/defaults.js
  var objectProto17, hasOwnProperty14, defaults, defaults_default;
  var init_defaults3 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/defaults.js"() {
      "use strict";
      init_baseRest();
      init_eq();
      init_isIterateeCall();
      init_keysIn();
      objectProto17 = Object.prototype;
      hasOwnProperty14 = objectProto17.hasOwnProperty;
      defaults = baseRest_default(function(object3, sources) {
        object3 = Object(object3);
        var index = -1;
        var length2 = sources.length;
        var guard = length2 > 2 ? sources[2] : void 0;
        if (guard && isIterateeCall_default(sources[0], sources[1], guard)) {
          length2 = 1;
        }
        while (++index < length2) {
          var source = sources[index];
          var props = keysIn_default(source);
          var propsIndex = -1;
          var propsLength = props.length;
          while (++propsIndex < propsLength) {
            var key = props[propsIndex];
            var value2 = object3[key];
            if (value2 === void 0 || eq_default(value2, objectProto17[key]) && !hasOwnProperty14.call(object3, key)) {
              object3[key] = source[key];
            }
          }
        }
        return object3;
      });
      defaults_default = defaults;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignMergeValue.js
  function assignMergeValue(object3, key, value2) {
    if (value2 !== void 0 && !eq_default(object3[key], value2) || value2 === void 0 && !(key in object3)) {
      baseAssignValue_default(object3, key, value2);
    }
  }
  var assignMergeValue_default;
  var init_assignMergeValue = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignMergeValue.js"() {
      "use strict";
      init_baseAssignValue();
      init_eq();
      __name(assignMergeValue, "assignMergeValue");
      assignMergeValue_default = assignMergeValue;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLikeObject.js
  function isArrayLikeObject2(value2) {
    return isObjectLike_default(value2) && isArrayLike_default(value2);
  }
  var isArrayLikeObject_default;
  var init_isArrayLikeObject2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLikeObject.js"() {
      "use strict";
      init_isArrayLike2();
      init_isObjectLike2();
      __name(isArrayLikeObject2, "isArrayLikeObject");
      isArrayLikeObject_default = isArrayLikeObject2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_safeGet.js
  function safeGet(object3, key) {
    if (key === "constructor" && typeof object3[key] === "function") {
      return;
    }
    if (key == "__proto__") {
      return;
    }
    return object3[key];
  }
  var safeGet_default;
  var init_safeGet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_safeGet.js"() {
      "use strict";
      __name(safeGet, "safeGet");
      safeGet_default = safeGet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toPlainObject.js
  function toPlainObject(value2) {
    return copyObject_default(value2, keysIn_default(value2));
  }
  var toPlainObject_default;
  var init_toPlainObject = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toPlainObject.js"() {
      "use strict";
      init_copyObject();
      init_keysIn();
      __name(toPlainObject, "toPlainObject");
      toPlainObject_default = toPlainObject;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMergeDeep.js
  function baseMergeDeep(object3, source, key, srcIndex, mergeFunc, customizer, stack) {
    var objValue = safeGet_default(object3, key), srcValue = safeGet_default(source, key), stacked = stack.get(srcValue);
    if (stacked) {
      assignMergeValue_default(object3, key, stacked);
      return;
    }
    var newValue = customizer ? customizer(objValue, srcValue, key + "", object3, source, stack) : void 0;
    var isCommon = newValue === void 0;
    if (isCommon) {
      var isArr = isArray_default(srcValue), isBuff = !isArr && isBuffer_default(srcValue), isTyped = !isArr && !isBuff && isTypedArray_default(srcValue);
      newValue = srcValue;
      if (isArr || isBuff || isTyped) {
        if (isArray_default(objValue)) {
          newValue = objValue;
        } else if (isArrayLikeObject_default(objValue)) {
          newValue = copyArray_default(objValue);
        } else if (isBuff) {
          isCommon = false;
          newValue = cloneBuffer_default(srcValue, true);
        } else if (isTyped) {
          isCommon = false;
          newValue = cloneTypedArray_default(srcValue, true);
        } else {
          newValue = [];
        }
      } else if (isPlainObject_default(srcValue) || isArguments_default(srcValue)) {
        newValue = objValue;
        if (isArguments_default(objValue)) {
          newValue = toPlainObject_default(objValue);
        } else if (!isObject_default(objValue) || isFunction_default(objValue)) {
          newValue = initCloneObject_default(srcValue);
        }
      } else {
        isCommon = false;
      }
    }
    if (isCommon) {
      stack.set(srcValue, newValue);
      mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
      stack["delete"](srcValue);
    }
    assignMergeValue_default(object3, key, newValue);
  }
  var baseMergeDeep_default;
  var init_baseMergeDeep = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMergeDeep.js"() {
      "use strict";
      init_assignMergeValue();
      init_cloneBuffer();
      init_cloneTypedArray();
      init_copyArray();
      init_initCloneObject();
      init_isArguments2();
      init_isArray2();
      init_isArrayLikeObject2();
      init_isBuffer();
      init_isFunction();
      init_isObject();
      init_isPlainObject2();
      init_isTypedArray3();
      init_safeGet();
      init_toPlainObject();
      __name(baseMergeDeep, "baseMergeDeep");
      baseMergeDeep_default = baseMergeDeep;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMerge.js
  function baseMerge(object3, source, srcIndex, customizer, stack) {
    if (object3 === source) {
      return;
    }
    baseFor_default(source, function(srcValue, key) {
      stack || (stack = new Stack_default());
      if (isObject_default(srcValue)) {
        baseMergeDeep_default(object3, source, key, srcIndex, baseMerge, customizer, stack);
      } else {
        var newValue = customizer ? customizer(safeGet_default(object3, key), srcValue, key + "", object3, source, stack) : void 0;
        if (newValue === void 0) {
          newValue = srcValue;
        }
        assignMergeValue_default(object3, key, newValue);
      }
    }, keysIn_default);
  }
  var baseMerge_default;
  var init_baseMerge = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMerge.js"() {
      "use strict";
      init_Stack();
      init_assignMergeValue();
      init_baseFor();
      init_baseMergeDeep();
      init_isObject();
      init_keysIn();
      init_safeGet();
      __name(baseMerge, "baseMerge");
      baseMerge_default = baseMerge;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayIncludesWith.js
  function arrayIncludesWith(array4, value2, comparator) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (comparator(value2, array4[index])) {
        return true;
      }
    }
    return false;
  }
  var arrayIncludesWith_default;
  var init_arrayIncludesWith = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayIncludesWith.js"() {
      "use strict";
      __name(arrayIncludesWith, "arrayIncludesWith");
      arrayIncludesWith_default = arrayIncludesWith;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.js
  function last(array4) {
    var length2 = array4 == null ? 0 : array4.length;
    return length2 ? array4[length2 - 1] : void 0;
  }
  var last_default;
  var init_last = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.js"() {
      "use strict";
      __name(last, "last");
      last_default = last;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castFunction.js
  function castFunction(value2) {
    return typeof value2 == "function" ? value2 : identity_default4;
  }
  var castFunction_default;
  var init_castFunction = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castFunction.js"() {
      "use strict";
      init_identity4();
      __name(castFunction, "castFunction");
      castFunction_default = castFunction;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/forEach.js
  function forEach(collection4, iteratee) {
    var func = isArray_default(collection4) ? arrayEach_default : baseEach_default;
    return func(collection4, castFunction_default(iteratee));
  }
  var forEach_default;
  var init_forEach = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/forEach.js"() {
      "use strict";
      init_arrayEach();
      init_baseEach();
      init_castFunction();
      init_isArray2();
      __name(forEach, "forEach");
      forEach_default = forEach;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/each.js
  var init_each3 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/each.js"() {
      "use strict";
      init_forEach();
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFilter.js
  function baseFilter(collection4, predicate) {
    var result = [];
    baseEach_default(collection4, function(value2, index, collection5) {
      if (predicate(value2, index, collection5)) {
        result.push(value2);
      }
    });
    return result;
  }
  var baseFilter_default;
  var init_baseFilter = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFilter.js"() {
      "use strict";
      init_baseEach();
      __name(baseFilter, "baseFilter");
      baseFilter_default = baseFilter;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/filter.js
  function filter2(collection4, predicate) {
    var func = isArray_default(collection4) ? arrayFilter_default : baseFilter_default;
    return func(collection4, baseIteratee_default(predicate, 3));
  }
  var filter_default3;
  var init_filter3 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/filter.js"() {
      "use strict";
      init_arrayFilter();
      init_baseFilter();
      init_baseIteratee();
      init_isArray2();
      __name(filter2, "filter");
      filter_default3 = filter2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createFind.js
  function createFind(findIndexFunc) {
    return function(collection4, predicate, fromIndex) {
      var iterable = Object(collection4);
      if (!isArrayLike_default(collection4)) {
        var iteratee = baseIteratee_default(predicate, 3);
        collection4 = keys_default(collection4);
        predicate = /* @__PURE__ */ __name(function(key) {
          return iteratee(iterable[key], key, iterable);
        }, "predicate");
      }
      var index = findIndexFunc(collection4, predicate, fromIndex);
      return index > -1 ? iterable[iteratee ? collection4[index] : index] : void 0;
    };
  }
  var createFind_default;
  var init_createFind = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createFind.js"() {
      "use strict";
      init_baseIteratee();
      init_isArrayLike2();
      init_keys();
      __name(createFind, "createFind");
      createFind_default = createFind;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/findIndex.js
  function findIndex(array4, predicate, fromIndex) {
    var length2 = array4 == null ? 0 : array4.length;
    if (!length2) {
      return -1;
    }
    var index = fromIndex == null ? 0 : toInteger_default(fromIndex);
    if (index < 0) {
      index = nativeMax2(length2 + index, 0);
    }
    return baseFindIndex_default(array4, baseIteratee_default(predicate, 3), index);
  }
  var nativeMax2, findIndex_default;
  var init_findIndex = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/findIndex.js"() {
      "use strict";
      init_baseFindIndex();
      init_baseIteratee();
      init_toInteger();
      nativeMax2 = Math.max;
      __name(findIndex, "findIndex");
      findIndex_default = findIndex;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/find.js
  var find2, find_default2;
  var init_find2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/find.js"() {
      "use strict";
      init_createFind();
      init_findIndex();
      find2 = createFind_default(findIndex_default);
      find_default2 = find2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMap.js
  function baseMap(collection4, iteratee) {
    var index = -1, result = isArrayLike_default(collection4) ? Array(collection4.length) : [];
    baseEach_default(collection4, function(value2, key, collection5) {
      result[++index] = iteratee(value2, key, collection5);
    });
    return result;
  }
  var baseMap_default;
  var init_baseMap = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMap.js"() {
      "use strict";
      init_baseEach();
      init_isArrayLike2();
      __name(baseMap, "baseMap");
      baseMap_default = baseMap;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/map.js
  function map3(collection4, iteratee) {
    var func = isArray_default(collection4) ? arrayMap_default : baseMap_default;
    return func(collection4, baseIteratee_default(iteratee, 3));
  }
  var map_default;
  var init_map = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/map.js"() {
      "use strict";
      init_arrayMap();
      init_baseIteratee();
      init_baseMap();
      init_isArray2();
      __name(map3, "map");
      map_default = map3;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/forIn.js
  function forIn(object3, iteratee) {
    return object3 == null ? object3 : baseFor_default(object3, castFunction_default(iteratee), keysIn_default);
  }
  var forIn_default;
  var init_forIn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/forIn.js"() {
      "use strict";
      init_baseFor();
      init_castFunction();
      init_keysIn();
      __name(forIn, "forIn");
      forIn_default = forIn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/forOwn.js
  function forOwn(object3, iteratee) {
    return object3 && baseForOwn_default(object3, castFunction_default(iteratee));
  }
  var forOwn_default;
  var init_forOwn = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/forOwn.js"() {
      "use strict";
      init_baseForOwn();
      init_castFunction();
      __name(forOwn, "forOwn");
      forOwn_default = forOwn;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGt.js
  function baseGt(value2, other) {
    return value2 > other;
  }
  var baseGt_default;
  var init_baseGt = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGt.js"() {
      "use strict";
      __name(baseGt, "baseGt");
      baseGt_default = baseGt;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseHas.js
  function baseHas(object3, key) {
    return object3 != null && hasOwnProperty15.call(object3, key);
  }
  var objectProto18, hasOwnProperty15, baseHas_default;
  var init_baseHas = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseHas.js"() {
      "use strict";
      objectProto18 = Object.prototype;
      hasOwnProperty15 = objectProto18.hasOwnProperty;
      __name(baseHas, "baseHas");
      baseHas_default = baseHas;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/has.js
  function has(object3, path4) {
    return object3 != null && hasPath_default(object3, path4, baseHas_default);
  }
  var has_default;
  var init_has = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/has.js"() {
      "use strict";
      init_baseHas();
      init_hasPath();
      __name(has, "has");
      has_default = has;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isString.js
  function isString(value2) {
    return typeof value2 == "string" || !isArray_default(value2) && isObjectLike_default(value2) && baseGetTag_default(value2) == stringTag6;
  }
  var stringTag6, isString_default;
  var init_isString = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isString.js"() {
      "use strict";
      init_baseGetTag();
      init_isArray2();
      init_isObjectLike2();
      stringTag6 = "[object String]";
      __name(isString, "isString");
      isString_default = isString;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseValues.js
  function baseValues(object3, props) {
    return arrayMap_default(props, function(key) {
      return object3[key];
    });
  }
  var baseValues_default;
  var init_baseValues = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseValues.js"() {
      "use strict";
      init_arrayMap();
      __name(baseValues, "baseValues");
      baseValues_default = baseValues;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/values.js
  function values(object3) {
    return object3 == null ? [] : baseValues_default(object3, keys_default(object3));
  }
  var values_default;
  var init_values = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/values.js"() {
      "use strict";
      init_baseValues();
      init_keys();
      __name(values, "values");
      values_default = values;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js
  function isEmpty2(value2) {
    if (value2 == null) {
      return true;
    }
    if (isArrayLike_default(value2) && (isArray_default(value2) || typeof value2 == "string" || typeof value2.splice == "function" || isBuffer_default(value2) || isTypedArray_default(value2) || isArguments_default(value2))) {
      return !value2.length;
    }
    var tag = getTag_default(value2);
    if (tag == mapTag8 || tag == setTag8) {
      return !value2.size;
    }
    if (isPrototype_default(value2)) {
      return !baseKeys_default(value2).length;
    }
    for (var key in value2) {
      if (hasOwnProperty16.call(value2, key)) {
        return false;
      }
    }
    return true;
  }
  var mapTag8, setTag8, objectProto19, hasOwnProperty16, isEmpty_default;
  var init_isEmpty2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isEmpty.js"() {
      "use strict";
      init_baseKeys();
      init_getTag2();
      init_isArguments2();
      init_isArray2();
      init_isArrayLike2();
      init_isBuffer();
      init_isPrototype2();
      init_isTypedArray3();
      mapTag8 = "[object Map]";
      setTag8 = "[object Set]";
      objectProto19 = Object.prototype;
      hasOwnProperty16 = objectProto19.hasOwnProperty;
      __name(isEmpty2, "isEmpty");
      isEmpty_default = isEmpty2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.js
  function isUndefined(value2) {
    return value2 === void 0;
  }
  var isUndefined_default;
  var init_isUndefined = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.js"() {
      "use strict";
      __name(isUndefined, "isUndefined");
      isUndefined_default = isUndefined;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseLt.js
  function baseLt(value2, other) {
    return value2 < other;
  }
  var baseLt_default;
  var init_baseLt = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseLt.js"() {
      "use strict";
      __name(baseLt, "baseLt");
      baseLt_default = baseLt;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/mapValues.js
  function mapValues(object3, iteratee) {
    var result = {};
    iteratee = baseIteratee_default(iteratee, 3);
    baseForOwn_default(object3, function(value2, key, object4) {
      baseAssignValue_default(result, key, iteratee(value2, key, object4));
    });
    return result;
  }
  var mapValues_default;
  var init_mapValues = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/mapValues.js"() {
      "use strict";
      init_baseAssignValue();
      init_baseForOwn();
      init_baseIteratee();
      __name(mapValues, "mapValues");
      mapValues_default = mapValues;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseExtremum.js
  function baseExtremum(array4, iteratee, comparator) {
    var index = -1, length2 = array4.length;
    while (++index < length2) {
      var value2 = array4[index], current = iteratee(value2);
      if (current != null && (computed === void 0 ? current === current && !isSymbol_default(current) : comparator(current, computed))) {
        var computed = current, result = value2;
      }
    }
    return result;
  }
  var baseExtremum_default;
  var init_baseExtremum = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseExtremum.js"() {
      "use strict";
      init_isSymbol();
      __name(baseExtremum, "baseExtremum");
      baseExtremum_default = baseExtremum;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/max.js
  function max4(array4) {
    return array4 && array4.length ? baseExtremum_default(array4, identity_default4, baseGt_default) : void 0;
  }
  var max_default;
  var init_max2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/max.js"() {
      "use strict";
      init_baseExtremum();
      init_baseGt();
      init_identity4();
      __name(max4, "max");
      max_default = max4;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/merge.js
  var merge3, merge_default3;
  var init_merge5 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/merge.js"() {
      "use strict";
      init_baseMerge();
      init_createAssigner();
      merge3 = createAssigner_default(function(object3, source, srcIndex) {
        baseMerge_default(object3, source, srcIndex);
      });
      merge_default3 = merge3;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/min.js
  function min4(array4) {
    return array4 && array4.length ? baseExtremum_default(array4, identity_default4, baseLt_default) : void 0;
  }
  var min_default;
  var init_min2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/min.js"() {
      "use strict";
      init_baseExtremum();
      init_baseLt();
      init_identity4();
      __name(min4, "min");
      min_default = min4;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/minBy.js
  function minBy(array4, iteratee) {
    return array4 && array4.length ? baseExtremum_default(array4, baseIteratee_default(iteratee, 2), baseLt_default) : void 0;
  }
  var minBy_default;
  var init_minBy = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/minBy.js"() {
      "use strict";
      init_baseExtremum();
      init_baseIteratee();
      init_baseLt();
      __name(minBy, "minBy");
      minBy_default = minBy;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSet.js
  function baseSet(object3, path4, value2, customizer) {
    if (!isObject_default(object3)) {
      return object3;
    }
    path4 = castPath_default(path4, object3);
    var index = -1, length2 = path4.length, lastIndex = length2 - 1, nested = object3;
    while (nested != null && ++index < length2) {
      var key = toKey_default(path4[index]), newValue = value2;
      if (key === "__proto__" || key === "constructor" || key === "prototype") {
        return object3;
      }
      if (index != lastIndex) {
        var objValue = nested[key];
        newValue = customizer ? customizer(objValue, key, nested) : void 0;
        if (newValue === void 0) {
          newValue = isObject_default(objValue) ? objValue : isIndex_default(path4[index + 1]) ? [] : {};
        }
      }
      assignValue_default(nested, key, newValue);
      nested = nested[key];
    }
    return object3;
  }
  var baseSet_default;
  var init_baseSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSet.js"() {
      "use strict";
      init_assignValue();
      init_castPath();
      init_isIndex();
      init_isObject();
      init_toKey();
      __name(baseSet, "baseSet");
      baseSet_default = baseSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePickBy.js
  function basePickBy(object3, paths, predicate) {
    var index = -1, length2 = paths.length, result = {};
    while (++index < length2) {
      var path4 = paths[index], value2 = baseGet_default(object3, path4);
      if (predicate(value2, path4)) {
        baseSet_default(result, castPath_default(path4, object3), value2);
      }
    }
    return result;
  }
  var basePickBy_default;
  var init_basePickBy = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePickBy.js"() {
      "use strict";
      init_baseGet();
      init_baseSet();
      init_castPath();
      __name(basePickBy, "basePickBy");
      basePickBy_default = basePickBy;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSortBy.js
  function baseSortBy(array4, comparer) {
    var length2 = array4.length;
    array4.sort(comparer);
    while (length2--) {
      array4[length2] = array4[length2].value;
    }
    return array4;
  }
  var baseSortBy_default;
  var init_baseSortBy = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSortBy.js"() {
      "use strict";
      __name(baseSortBy, "baseSortBy");
      baseSortBy_default = baseSortBy;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_compareAscending.js
  function compareAscending(value2, other) {
    if (value2 !== other) {
      var valIsDefined = value2 !== void 0, valIsNull = value2 === null, valIsReflexive = value2 === value2, valIsSymbol = isSymbol_default(value2);
      var othIsDefined = other !== void 0, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol_default(other);
      if (!othIsNull && !othIsSymbol && !valIsSymbol && value2 > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
        return 1;
      }
      if (!valIsNull && !valIsSymbol && !othIsSymbol && value2 < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
        return -1;
      }
    }
    return 0;
  }
  var compareAscending_default;
  var init_compareAscending = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_compareAscending.js"() {
      "use strict";
      init_isSymbol();
      __name(compareAscending, "compareAscending");
      compareAscending_default = compareAscending;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_compareMultiple.js
  function compareMultiple(object3, other, orders) {
    var index = -1, objCriteria = object3.criteria, othCriteria = other.criteria, length2 = objCriteria.length, ordersLength = orders.length;
    while (++index < length2) {
      var result = compareAscending_default(objCriteria[index], othCriteria[index]);
      if (result) {
        if (index >= ordersLength) {
          return result;
        }
        var order2 = orders[index];
        return result * (order2 == "desc" ? -1 : 1);
      }
    }
    return object3.index - other.index;
  }
  var compareMultiple_default;
  var init_compareMultiple = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_compareMultiple.js"() {
      "use strict";
      init_compareAscending();
      __name(compareMultiple, "compareMultiple");
      compareMultiple_default = compareMultiple;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseOrderBy.js
  function baseOrderBy(collection4, iteratees, orders) {
    if (iteratees.length) {
      iteratees = arrayMap_default(iteratees, function(iteratee) {
        if (isArray_default(iteratee)) {
          return function(value2) {
            return baseGet_default(value2, iteratee.length === 1 ? iteratee[0] : iteratee);
          };
        }
        return iteratee;
      });
    } else {
      iteratees = [identity_default4];
    }
    var index = -1;
    iteratees = arrayMap_default(iteratees, baseUnary_default(baseIteratee_default));
    var result = baseMap_default(collection4, function(value2, key, collection5) {
      var criteria = arrayMap_default(iteratees, function(iteratee) {
        return iteratee(value2);
      });
      return { "criteria": criteria, "index": ++index, "value": value2 };
    });
    return baseSortBy_default(result, function(object3, other) {
      return compareMultiple_default(object3, other, orders);
    });
  }
  var baseOrderBy_default;
  var init_baseOrderBy = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseOrderBy.js"() {
      "use strict";
      init_arrayMap();
      init_baseGet();
      init_baseIteratee();
      init_baseMap();
      init_baseSortBy();
      init_baseUnary();
      init_compareMultiple();
      init_identity4();
      init_isArray2();
      __name(baseOrderBy, "baseOrderBy");
      baseOrderBy_default = baseOrderBy;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_asciiSize.js
  var asciiSize, asciiSize_default;
  var init_asciiSize = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_asciiSize.js"() {
      "use strict";
      init_baseProperty();
      asciiSize = baseProperty_default("length");
      asciiSize_default = asciiSize;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_unicodeSize.js
  function unicodeSize(string3) {
    var result = reUnicode.lastIndex = 0;
    while (reUnicode.test(string3)) {
      ++result;
    }
    return result;
  }
  var rsAstralRange2, rsComboMarksRange2, reComboHalfMarksRange2, rsComboSymbolsRange2, rsComboRange2, rsVarRange2, rsAstral, rsCombo, rsFitz, rsModifier, rsNonAstral, rsRegional, rsSurrPair, rsZWJ2, reOptMod, rsOptVar, rsOptJoin, rsSeq, rsSymbol, reUnicode, unicodeSize_default;
  var init_unicodeSize = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_unicodeSize.js"() {
      "use strict";
      rsAstralRange2 = "\\ud800-\\udfff";
      rsComboMarksRange2 = "\\u0300-\\u036f";
      reComboHalfMarksRange2 = "\\ufe20-\\ufe2f";
      rsComboSymbolsRange2 = "\\u20d0-\\u20ff";
      rsComboRange2 = rsComboMarksRange2 + reComboHalfMarksRange2 + rsComboSymbolsRange2;
      rsVarRange2 = "\\ufe0e\\ufe0f";
      rsAstral = "[" + rsAstralRange2 + "]";
      rsCombo = "[" + rsComboRange2 + "]";
      rsFitz = "\\ud83c[\\udffb-\\udfff]";
      rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")";
      rsNonAstral = "[^" + rsAstralRange2 + "]";
      rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}";
      rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]";
      rsZWJ2 = "\\u200d";
      reOptMod = rsModifier + "?";
      rsOptVar = "[" + rsVarRange2 + "]?";
      rsOptJoin = "(?:" + rsZWJ2 + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*";
      rsSeq = rsOptVar + reOptMod + rsOptJoin;
      rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
      reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
      __name(unicodeSize, "unicodeSize");
      unicodeSize_default = unicodeSize;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringSize.js
  function stringSize(string3) {
    return hasUnicode_default(string3) ? unicodeSize_default(string3) : asciiSize_default(string3);
  }
  var stringSize_default;
  var init_stringSize = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringSize.js"() {
      "use strict";
      init_asciiSize();
      init_hasUnicode();
      init_unicodeSize();
      __name(stringSize, "stringSize");
      stringSize_default = stringSize;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePick.js
  function basePick(object3, paths) {
    return basePickBy_default(object3, paths, function(value2, path4) {
      return hasIn_default(object3, path4);
    });
  }
  var basePick_default;
  var init_basePick = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePick.js"() {
      "use strict";
      init_basePickBy();
      init_hasIn();
      __name(basePick, "basePick");
      basePick_default = basePick;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/pick.js
  var pick, pick_default;
  var init_pick = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/pick.js"() {
      "use strict";
      init_basePick();
      init_flatRest();
      pick = flatRest_default(function(object3, paths) {
        return object3 == null ? {} : basePick_default(object3, paths);
      });
      pick_default = pick;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRange.js
  function baseRange(start3, end2, step3, fromRight) {
    var index = -1, length2 = nativeMax3(nativeCeil((end2 - start3) / (step3 || 1)), 0), result = Array(length2);
    while (length2--) {
      result[fromRight ? length2 : ++index] = start3;
      start3 += step3;
    }
    return result;
  }
  var nativeCeil, nativeMax3, baseRange_default;
  var init_baseRange = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRange.js"() {
      "use strict";
      nativeCeil = Math.ceil;
      nativeMax3 = Math.max;
      __name(baseRange, "baseRange");
      baseRange_default = baseRange;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createRange.js
  function createRange(fromRight) {
    return function(start3, end2, step3) {
      if (step3 && typeof step3 != "number" && isIterateeCall_default(start3, end2, step3)) {
        end2 = step3 = void 0;
      }
      start3 = toFinite_default(start3);
      if (end2 === void 0) {
        end2 = start3;
        start3 = 0;
      } else {
        end2 = toFinite_default(end2);
      }
      step3 = step3 === void 0 ? start3 < end2 ? 1 : -1 : toFinite_default(step3);
      return baseRange_default(start3, end2, step3, fromRight);
    };
  }
  var createRange_default;
  var init_createRange = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createRange.js"() {
      "use strict";
      init_baseRange();
      init_isIterateeCall();
      init_toFinite();
      __name(createRange, "createRange");
      createRange_default = createRange;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/range.js
  var range2, range_default;
  var init_range2 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/range.js"() {
      "use strict";
      init_createRange();
      range2 = createRange_default();
      range_default = range2;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseReduce.js
  function baseReduce(collection4, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection4, function(value2, index, collection5) {
      accumulator = initAccum ? (initAccum = false, value2) : iteratee(accumulator, value2, index, collection5);
    });
    return accumulator;
  }
  var baseReduce_default;
  var init_baseReduce = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseReduce.js"() {
      "use strict";
      __name(baseReduce, "baseReduce");
      baseReduce_default = baseReduce;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/reduce.js
  function reduce(collection4, iteratee, accumulator) {
    var func = isArray_default(collection4) ? arrayReduce_default : baseReduce_default, initAccum = arguments.length < 3;
    return func(collection4, baseIteratee_default(iteratee, 4), accumulator, initAccum, baseEach_default);
  }
  var reduce_default;
  var init_reduce = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/reduce.js"() {
      "use strict";
      init_arrayReduce();
      init_baseEach();
      init_baseIteratee();
      init_baseReduce();
      init_isArray2();
      __name(reduce, "reduce");
      reduce_default = reduce;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/size.js
  function size(collection4) {
    if (collection4 == null) {
      return 0;
    }
    if (isArrayLike_default(collection4)) {
      return isString_default(collection4) ? stringSize_default(collection4) : collection4.length;
    }
    var tag = getTag_default(collection4);
    if (tag == mapTag9 || tag == setTag9) {
      return collection4.size;
    }
    return baseKeys_default(collection4).length;
  }
  var mapTag9, setTag9, size_default2;
  var init_size3 = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/size.js"() {
      "use strict";
      init_baseKeys();
      init_getTag2();
      init_isArrayLike2();
      init_isString();
      init_stringSize();
      mapTag9 = "[object Map]";
      setTag9 = "[object Set]";
      __name(size, "size");
      size_default2 = size;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/sortBy.js
  var sortBy, sortBy_default;
  var init_sortBy = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/sortBy.js"() {
      "use strict";
      init_baseFlatten();
      init_baseOrderBy();
      init_baseRest();
      init_isIterateeCall();
      sortBy = baseRest_default(function(collection4, iteratees) {
        if (collection4 == null) {
          return [];
        }
        var length2 = iteratees.length;
        if (length2 > 1 && isIterateeCall_default(collection4, iteratees[0], iteratees[1])) {
          iteratees = [];
        } else if (length2 > 2 && isIterateeCall_default(iteratees[0], iteratees[1], iteratees[2])) {
          iteratees = [iteratees[0]];
        }
        return baseOrderBy_default(collection4, baseFlatten_default(iteratees, 1), []);
      });
      sortBy_default = sortBy;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createSet.js
  var INFINITY4, createSet, createSet_default;
  var init_createSet = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createSet.js"() {
      "use strict";
      init_Set();
      init_noop3();
      init_setToArray();
      INFINITY4 = 1 / 0;
      createSet = !(Set_default && 1 / setToArray_default(new Set_default([, -0]))[1] == INFINITY4) ? noop_default2 : function(values3) {
        return new Set_default(values3);
      };
      createSet_default = createSet;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUniq.js
  function baseUniq(array4, iteratee, comparator) {
    var index = -1, includes3 = arrayIncludes_default, length2 = array4.length, isCommon = true, result = [], seen = result;
    if (comparator) {
      isCommon = false;
      includes3 = arrayIncludesWith_default;
    } else if (length2 >= LARGE_ARRAY_SIZE2) {
      var set5 = iteratee ? null : createSet_default(array4);
      if (set5) {
        return setToArray_default(set5);
      }
      isCommon = false;
      includes3 = cacheHas_default;
      seen = new SetCache_default();
    } else {
      seen = iteratee ? [] : result;
    }
    outer:
      while (++index < length2) {
        var value2 = array4[index], computed = iteratee ? iteratee(value2) : value2;
        value2 = comparator || value2 !== 0 ? value2 : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value2);
        } else if (!includes3(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value2);
        }
      }
    return result;
  }
  var LARGE_ARRAY_SIZE2, baseUniq_default;
  var init_baseUniq = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUniq.js"() {
      "use strict";
      init_SetCache();
      init_arrayIncludes();
      init_arrayIncludesWith();
      init_cacheHas();
      init_createSet();
      init_setToArray();
      LARGE_ARRAY_SIZE2 = 200;
      __name(baseUniq, "baseUniq");
      baseUniq_default = baseUniq;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/union.js
  var union, union_default;
  var init_union = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/union.js"() {
      "use strict";
      init_baseFlatten();
      init_baseRest();
      init_baseUniq();
      init_isArrayLikeObject2();
      union = baseRest_default(function(arrays) {
        return baseUniq_default(baseFlatten_default(arrays, 1, isArrayLikeObject_default, true));
      });
      union_default = union;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/uniqueId.js
  function uniqueId(prefix) {
    var id41 = ++idCounter;
    return toString_default(prefix) + id41;
  }
  var idCounter, uniqueId_default;
  var init_uniqueId = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/uniqueId.js"() {
      "use strict";
      init_toString();
      idCounter = 0;
      __name(uniqueId, "uniqueId");
      uniqueId_default = uniqueId;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseZipObject.js
  function baseZipObject(props, values3, assignFunc) {
    var index = -1, length2 = props.length, valsLength = values3.length, result = {};
    while (++index < length2) {
      var value2 = index < valsLength ? values3[index] : void 0;
      assignFunc(result, props[index], value2);
    }
    return result;
  }
  var baseZipObject_default;
  var init_baseZipObject = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseZipObject.js"() {
      "use strict";
      __name(baseZipObject, "baseZipObject");
      baseZipObject_default = baseZipObject;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/zipObject.js
  function zipObject(props, values3) {
    return baseZipObject_default(props || [], values3 || [], assignValue_default);
  }
  var zipObject_default;
  var init_zipObject = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/zipObject.js"() {
      "use strict";
      init_assignValue();
      init_baseZipObject();
      __name(zipObject, "zipObject");
      zipObject_default = zipObject;
    }
  });

  // ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/lodash.js
  var init_lodash = __esm({
    "../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/lodash.js"() {
      "use strict";
      init_clone4();
      init_cloneDeep2();
      init_constant8();
      init_defaults3();
      init_each3();
      init_filter3();
      init_find2();
      init_flatten();
      init_forEach();
      init_forIn();
      init_forOwn();
      init_has();
      init_isArray2();
      init_isEmpty2();
      init_isFunction();
      init_isUndefined();
      init_keys();
      init_last();
      init_map();
      init_mapValues();
      init_max2();
      init_merge5();
      init_min2();
      init_minBy();
      init_now();
      init_pick();
      init_range2();
      init_reduce();
      init_size3();
      init_sortBy();
      init_union();
      init_uniqueId();
      init_values();
      init_zipObject();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/graph.js
  function incrementOrInitEntry(map6, k2) {
    if (map6[k2]) {
      map6[k2]++;
    } else {
      map6[k2] = 1;
    }
  }
  function decrementOrRemoveEntry(map6, k2) {
    if (!--map6[k2]) {
      delete map6[k2];
    }
  }
  function edgeArgsToId(isDirected, v_, w_, name) {
    var v3 = "" + v_;
    var w4 = "" + w_;
    if (!isDirected && v3 > w4) {
      var tmp = v3;
      v3 = w4;
      w4 = tmp;
    }
    return v3 + EDGE_KEY_DELIM + w4 + EDGE_KEY_DELIM + (isUndefined_default(name) ? DEFAULT_EDGE_NAME : name);
  }
  function edgeArgsToObj(isDirected, v_, w_, name) {
    var v3 = "" + v_;
    var w4 = "" + w_;
    if (!isDirected && v3 > w4) {
      var tmp = v3;
      v3 = w4;
      w4 = tmp;
    }
    var edgeObj = { v: v3, w: w4 };
    if (name) {
      edgeObj.name = name;
    }
    return edgeObj;
  }
  function edgeObjToId(isDirected, edgeObj) {
    return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);
  }
  var DEFAULT_EDGE_NAME, GRAPH_NODE, EDGE_KEY_DELIM, Graph;
  var init_graph = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/graph.js"() {
      "use strict";
      init_lodash();
      DEFAULT_EDGE_NAME = "\0";
      GRAPH_NODE = "\0";
      EDGE_KEY_DELIM = "";
      Graph = class {
        static {
          __name(this, "Graph");
        }
        /**
         * @param {GraphOptions} [opts] - Graph options.
         */
        constructor(opts = {}) {
          this._isDirected = Object.prototype.hasOwnProperty.call(opts, "directed") ? opts.directed : true;
          this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, "multigraph") ? opts.multigraph : false;
          this._isCompound = Object.prototype.hasOwnProperty.call(opts, "compound") ? opts.compound : false;
          this._label = void 0;
          this._defaultNodeLabelFn = constant_default7(void 0);
          this._defaultEdgeLabelFn = constant_default7(void 0);
          this._nodes = {};
          if (this._isCompound) {
            this._parent = {};
            this._children = {};
            this._children[GRAPH_NODE] = {};
          }
          this._in = {};
          this._preds = {};
          this._out = {};
          this._sucs = {};
          this._edgeObjs = {};
          this._edgeLabels = {};
        }
        /* === Graph functions ========= */
        /**
         *
         * @returns {boolean} `true` if the graph is [directed](https://en.wikipedia.org/wiki/Directed_graph).
         * A directed graph treats the order of nodes in an edge as significant whereas an
         * [undirected](https://en.wikipedia.org/wiki/Graph_(mathematics)#Undirected_graph)
         * graph does not.
         * This example demonstrates the difference:
         *
         * @example
         *
         * ```js
         * var directed = new Graph({ directed: true });
         * directed.setEdge("a", "b", "my-label");
         * directed.edge("a", "b"); // returns "my-label"
         * directed.edge("b", "a"); // returns undefined
         *
         * var undirected = new Graph({ directed: false });
         * undirected.setEdge("a", "b", "my-label");
         * undirected.edge("a", "b"); // returns "my-label"
         * undirected.edge("b", "a"); // returns "my-label"
         * ```
         */
        isDirected() {
          return this._isDirected;
        }
        /**
         * @returns {boolean} `true` if the graph is a multigraph.
         */
        isMultigraph() {
          return this._isMultigraph;
        }
        /**
         * @returns {boolean} `true` if the graph is compound.
         */
        isCompound() {
          return this._isCompound;
        }
        /**
         * Sets the label for the graph to `label`.
         *
         * @param {GraphLabel} label - Label for the graph.
         * @returns {this}
         */
        setGraph(label) {
          this._label = label;
          return this;
        }
        /**
         * @returns {GraphLabel | undefined} the currently assigned label for the graph.
         * If no label has been assigned, returns `undefined`.
         *
         * @example
         *
         * ```js
         * var g = new Graph();
         * g.graph(); // returns undefined
         * g.setGraph("graph-label");
         *  g.graph(); // returns "graph-label"
         * ```
         */
        graph() {
          return this._label;
        }
        /* === Node functions ========== */
        /**
         * Sets a new default value that is assigned to nodes that are created without
         * a label.
         *
         * @param {typeof this._defaultNodeLabelFn | NodeLabel} newDefault - If a function,
         * it is called with the id of the node being created.
         * Otherwise, it is assigned as the label directly.
         * @returns {this}
         */
        setDefaultNodeLabel(newDefault) {
          if (!isFunction_default(newDefault)) {
            newDefault = constant_default7(newDefault);
          }
          this._defaultNodeLabelFn = newDefault;
          return this;
        }
        /**
         * @returns {number} the number of nodes in the graph.
         */
        nodeCount() {
          return this._nodeCount;
        }
        /**
         * @returns {NodeID[]} the ids of the nodes in the graph.
         *
         * @remarks
         * Use {@link node()} to get the label for each node.
         * Takes `O(|V|)` time.
         */
        nodes() {
          return keys_default(this._nodes);
        }
        /**
         * @returns {NodeID[]} those nodes in the graph that have no in-edges.
         * @remarks Takes `O(|V|)` time.
         */
        sources() {
          var self2 = this;
          return filter_default3(this.nodes(), function(v3) {
            return isEmpty_default(self2._in[v3]);
          });
        }
        /**
         * @returns {NodeID[]} those nodes in the graph that have no out-edges.
         * @remarks Takes `O(|V|)` time.
         */
        sinks() {
          var self2 = this;
          return filter_default3(this.nodes(), function(v3) {
            return isEmpty_default(self2._out[v3]);
          });
        }
        /**
         * Invokes setNode method for each node in `vs` list.
         *
         * @param {Collection<NodeID | number>} vs - List of node IDs to create/set.
         * @param {NodeLabel} [value] - If set, update all nodes with this value.
         * @returns {this}
         * @remarks Complexity: O(|names|).
         */
        setNodes(vs, value2) {
          var args = arguments;
          var self2 = this;
          forEach_default(vs, function(v3) {
            if (args.length > 1) {
              self2.setNode(v3, value2);
            } else {
              self2.setNode(v3);
            }
          });
          return this;
        }
        /**
         * Creates or updates the value for the node `v` in the graph.
         *
         * @param {NodeID | number} v - ID of the node to create/set.
         * @param {NodeLabel} [value] - If supplied, it is set as the value for the node.
         * If not supplied and the node was created by this call then
         * {@link setDefaultNodeLabel} will be used to set the node's value.
         * @returns {this} the graph, allowing this to be chained with other functions.
         * @remarks Takes `O(1)` time.
         */
        setNode(v3, value2) {
          if (Object.prototype.hasOwnProperty.call(this._nodes, v3)) {
            if (arguments.length > 1) {
              this._nodes[v3] = value2;
            }
            return this;
          }
          this._nodes[v3] = arguments.length > 1 ? value2 : this._defaultNodeLabelFn(v3);
          if (this._isCompound) {
            this._parent[v3] = GRAPH_NODE;
            this._children[v3] = {};
            this._children[GRAPH_NODE][v3] = true;
          }
          this._in[v3] = {};
          this._preds[v3] = {};
          this._out[v3] = {};
          this._sucs[v3] = {};
          ++this._nodeCount;
          return this;
        }
        /**
         * Gets the label of node with specified name.
         *
         * @param {NodeID | number} v - Node ID.
         * @returns {NodeLabel | undefined} the label assigned to the node with the id `v`
         * if it is in the graph.
         * Otherwise returns `undefined`.
         * @remarks Takes `O(1)` time.
         */
        node(v3) {
          return this._nodes[v3];
        }
        /**
         * Detects whether graph has a node with specified name or not.
         *
         * @param {NodeID | number} v - Node ID.
         * @returns {boolean} Returns `true` the graph has a node with the id.
         * @remarks Takes `O(1)` time.
         */
        hasNode(v3) {
          return Object.prototype.hasOwnProperty.call(this._nodes, v3);
        }
        /**
         * Remove the node with the id `v` in the graph or do nothing if the node is
         * not in the graph.
         *
         * If the node was removed this function also removes any incident edges.
         *
         * @param {NodeID | number} v - Node ID to remove.
         * @returns {this} the graph, allowing this to be chained with other functions.
         * @remarks Takes `O(|E|)` time.
         */
        removeNode(v3) {
          if (Object.prototype.hasOwnProperty.call(this._nodes, v3)) {
            var removeEdge = /* @__PURE__ */ __name((e3) => this.removeEdge(this._edgeObjs[e3]), "removeEdge");
            delete this._nodes[v3];
            if (this._isCompound) {
              this._removeFromParentsChildList(v3);
              delete this._parent[v3];
              forEach_default(this.children(v3), (child) => {
                this.setParent(child);
              });
              delete this._children[v3];
            }
            forEach_default(keys_default(this._in[v3]), removeEdge);
            delete this._in[v3];
            delete this._preds[v3];
            forEach_default(keys_default(this._out[v3]), removeEdge);
            delete this._out[v3];
            delete this._sucs[v3];
            --this._nodeCount;
          }
          return this;
        }
        /**
         * Sets the parent for `v` to `parent` if it is defined or removes the parent
         * for `v` if `parent` is undefined.
         *
         * @param {NodeID | number} v - Node ID to set the parent for.
         * @param {NodeID | number} [parent] - Parent node ID. If not defined, removes the parent.
         * @returns {this} the graph, allowing this to be chained with other functions.
         * @throws if the graph is not compound.
         * @throws if setting the parent would create a cycle.
         * @remarks Takes `O(1)` time.
         */
        setParent(v3, parent4) {
          if (!this._isCompound) {
            throw new Error("Cannot set parent in a non-compound graph");
          }
          if (isUndefined_default(parent4)) {
            parent4 = GRAPH_NODE;
          } else {
            parent4 += "";
            for (var ancestor = parent4; !isUndefined_default(ancestor); ancestor = this.parent(ancestor)) {
              if (ancestor === v3) {
                throw new Error("Setting " + parent4 + " as parent of " + v3 + " would create a cycle");
              }
            }
            this.setNode(parent4);
          }
          this.setNode(v3);
          this._removeFromParentsChildList(v3);
          this._parent[v3] = parent4;
          this._children[parent4][v3] = true;
          return this;
        }
        /**
         * @private
         * @param {NodeID | number} v - Node ID.
         */
        _removeFromParentsChildList(v3) {
          delete this._children[this._parent[v3]][v3];
        }
        /**
         * Get parent node for node `v`.
         *
         * @param {NodeID | number} v - Node ID.
         * @returns {NodeID | undefined} the node that is a parent of node `v`
         * or `undefined` if node `v` does not have a parent or is not a member of
         * the graph.
         * Always returns `undefined` for graphs that are not compound.
         * @remarks Takes `O(1)` time.
         */
        parent(v3) {
          if (this._isCompound) {
            var parent4 = this._parent[v3];
            if (parent4 !== GRAPH_NODE) {
              return parent4;
            }
          }
        }
        /**
         * Gets list of direct children of node v.
         *
         * @param {NodeID | number} [v] - Node ID. If not specified, gets nodes
         * with no parent (top-level nodes).
         * @returns {NodeID[] | undefined} all nodes that are children of node `v` or
         * `undefined` if node `v` is not in the graph.
         * Always returns `[]` for graphs that are not compound.
         * @remarks Takes `O(|V|)` time.
         */
        children(v3) {
          if (isUndefined_default(v3)) {
            v3 = GRAPH_NODE;
          }
          if (this._isCompound) {
            var children2 = this._children[v3];
            if (children2) {
              return keys_default(children2);
            }
          } else if (v3 === GRAPH_NODE) {
            return this.nodes();
          } else if (this.hasNode(v3)) {
            return [];
          }
        }
        /**
         * @param {NodeID | number} v - Node ID.
         * @returns {NodeID[] | undefined} all nodes that are predecessors of the
         * specified node or `undefined` if node `v` is not in the graph.
         * @remarks
         * Behavior is undefined for undirected graphs - use {@link neighbors} instead.
         * Takes `O(|V|)` time.
         */
        predecessors(v3) {
          var predsV = this._preds[v3];
          if (predsV) {
            return keys_default(predsV);
          }
        }
        /**
         * @param {NodeID | number} v - Node ID.
         * @returns {NodeID[] | undefined} all nodes that are successors of the
         * specified node or `undefined` if node `v` is not in the graph.
         * @remarks
         * Behavior is undefined for undirected graphs - use {@link neighbors} instead.
         * Takes `O(|V|)` time.
         */
        successors(v3) {
          var sucsV = this._sucs[v3];
          if (sucsV) {
            return keys_default(sucsV);
          }
        }
        /**
         * @param {NodeID | number} v - Node ID.
         * @returns {NodeID[] | undefined} all nodes that are predecessors or
         * successors of the specified node
         * or `undefined` if node `v` is not in the graph.
         * @remarks Takes `O(|V|)` time.
         */
        neighbors(v3) {
          var preds = this.predecessors(v3);
          if (preds) {
            return union_default(preds, this.successors(v3));
          }
        }
        /**
         * @param {NodeID | number} v - Node ID.
         * @returns {boolean} True if the node is a leaf (has no successors), false otherwise.
         */
        isLeaf(v3) {
          var neighbors;
          if (this.isDirected()) {
            neighbors = this.successors(v3);
          } else {
            neighbors = this.neighbors(v3);
          }
          return neighbors.length === 0;
        }
        /**
           * Creates new graph with nodes filtered via `filter`.
           * Edges incident to rejected node
           * are also removed.
           * 
           * In case of compound graph, if parent is rejected by `filter`,
           * than all its children are rejected too.
        
           * @param {(v: NodeID) => boolean} filter - Function that returns `true` for nodes to keep.
           * @returns {Graph<GraphLabel, NodeLabel, EdgeLabel>} A new graph containing only the nodes for which `filter` returns `true`.
           * @remarks Average-case complexity: O(|E|+|V|).
           */
        filterNodes(filter8) {
          var copy5 = new this.constructor({
            directed: this._isDirected,
            multigraph: this._isMultigraph,
            compound: this._isCompound
          });
          copy5.setGraph(this.graph());
          var self2 = this;
          forEach_default(this._nodes, function(value2, v3) {
            if (filter8(v3)) {
              copy5.setNode(v3, value2);
            }
          });
          forEach_default(this._edgeObjs, function(e3) {
            if (copy5.hasNode(e3.v) && copy5.hasNode(e3.w)) {
              copy5.setEdge(e3, self2.edge(e3));
            }
          });
          var parents3 = {};
          function findParent(v3) {
            var parent4 = self2.parent(v3);
            if (parent4 === void 0 || copy5.hasNode(parent4)) {
              parents3[v3] = parent4;
              return parent4;
            } else if (parent4 in parents3) {
              return parents3[parent4];
            } else {
              return findParent(parent4);
            }
          }
          __name(findParent, "findParent");
          if (this._isCompound) {
            forEach_default(copy5.nodes(), function(v3) {
              copy5.setParent(v3, findParent(v3));
            });
          }
          return copy5;
        }
        /* === Edge functions ========== */
        /**
         * Sets a new default value that is assigned to edges that are created without
         * a label.
         *
         * @param {typeof this._defaultEdgeLabelFn | EdgeLabel} newDefault - If a function,
         * it is called with the parameters `(v, w, name)`.
         * Otherwise, it is assigned as the label directly.
         * @returns {this}
         */
        setDefaultEdgeLabel(newDefault) {
          if (!isFunction_default(newDefault)) {
            newDefault = constant_default7(newDefault);
          }
          this._defaultEdgeLabelFn = newDefault;
          return this;
        }
        /**
         * @returns {number} the number of edges in the graph.
         * @remarks Complexity: O(1).
         */
        edgeCount() {
          return this._edgeCount;
        }
        /**
         * Gets edges of the graph.
         *
         * @returns {EdgeObj[]} the {@link EdgeObj} for each edge in the graph.
         *
         * @remarks
         * In case of compound graph subgraphs are not considered.
         * Use {@link edge()} to get the label for each edge.
         * Takes `O(|E|)` time.
         */
        edges() {
          return values_default(this._edgeObjs);
        }
        /**
         * Establish an edges path over the nodes in nodes list.
         *
         * If some edge is already exists, it will update its label, otherwise it will
         * create an edge between pair of nodes with label provided or default label
         * if no label provided.
         *
         * @param {Collection<NodeID>} vs - List of node IDs to create edges between.
         * @param {EdgeLabel} [value] - If set, update all edges with this value.
         * @returns {this}
         * @remarks Complexity: O(|nodes|).
         */
        setPath(vs, value2) {
          var self2 = this;
          var args = arguments;
          reduce_default(vs, function(v3, w4) {
            if (args.length > 1) {
              self2.setEdge(v3, w4, value2);
            } else {
              self2.setEdge(v3, w4);
            }
            return w4;
          });
          return this;
        }
        /**
         * Creates or updates the label for the edge (`v`, `w`) with the optionally
         * supplied `name`.
         *
         * @overload
         * @param {EdgeObj} arg0 - Edge object.
         * @param {EdgeLabel} [value] - If supplied, it is set as the label for the edge.
         * If not supplied and the edge was created by this call then
         * {@link setDefaultEdgeLabel} will be used to assign the edge's label.
         * @returns {this} the graph, allowing this to be chained with other functions.
         * @remarks Takes `O(1)` time.
         */
        /**
         * Creates or updates the label for the edge (`v`, `w`) with the optionally
         * supplied `name`.
         *
         * @overload
         * @param {NodeID | number} v - Source node ID. Number values will be coerced to strings.
         * @param {NodeID | number} w - Target node ID. Number values will be coerced to strings.
         * @param {EdgeLabel} [value] - If supplied, it is set as the label for the edge.
         * If not supplied and the edge was created by this call then
         * {@link setDefaultEdgeLabel} will be used to assign the edge's label.
         * @param {string | number} [name] - Edge name. Only useful with multigraphs.
         * @returns {this} the graph, allowing this to be chained with other functions.
         * @remarks Takes `O(1)` time.
         */
        setEdge() {
          var v3, w4, name, value2;
          var valueSpecified = false;
          var arg0 = arguments[0];
          if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) {
            v3 = arg0.v;
            w4 = arg0.w;
            name = arg0.name;
            if (arguments.length === 2) {
              value2 = arguments[1];
              valueSpecified = true;
            }
          } else {
            v3 = arg0;
            w4 = arguments[1];
            name = arguments[3];
            if (arguments.length > 2) {
              value2 = arguments[2];
              valueSpecified = true;
            }
          }
          v3 = "" + v3;
          w4 = "" + w4;
          if (!isUndefined_default(name)) {
            name = "" + name;
          }
          var e3 = edgeArgsToId(this._isDirected, v3, w4, name);
          if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e3)) {
            if (valueSpecified) {
              this._edgeLabels[e3] = value2;
            }
            return this;
          }
          if (!isUndefined_default(name) && !this._isMultigraph) {
            throw new Error("Cannot set a named edge when isMultigraph = false");
          }
          this.setNode(v3);
          this.setNode(w4);
          this._edgeLabels[e3] = valueSpecified ? value2 : this._defaultEdgeLabelFn(v3, w4, name);
          var edgeObj = edgeArgsToObj(this._isDirected, v3, w4, name);
          v3 = edgeObj.v;
          w4 = edgeObj.w;
          Object.freeze(edgeObj);
          this._edgeObjs[e3] = edgeObj;
          incrementOrInitEntry(this._preds[w4], v3);
          incrementOrInitEntry(this._sucs[v3], w4);
          this._in[w4][e3] = edgeObj;
          this._out[v3][e3] = edgeObj;
          this._edgeCount++;
          return this;
        }
        /**
         * Gets the label for the specified edge.
         *
         * @overload
         * @param {EdgeObj} v - Edge object.
         * @returns {EdgeLabel | undefined} the label for the edge (`v`, `w`) if the
         * graph has an edge between `v` and `w` with the optional `name`.
         * Returned `undefined` if there is no such edge in the graph.
         * @remarks
         * `v` and `w` can be interchanged for undirected graphs.
         * Takes `O(1)` time.
         */
        /**
         * Gets the label for the specified edge.
         *
         * @overload
         * @param {NodeID | number} v - Source node ID.
         * @param {NodeID | number} w - Target node ID.
         * @param {string | number} [name] - Edge name. Only useful with multigraphs.
         * @returns {EdgeLabel | undefined} the label for the edge (`v`, `w`) if the
         * graph has an edge between `v` and `w` with the optional `name`.
         * Returned `undefined` if there is no such edge in the graph.
         * @remarks
         * `v` and `w` can be interchanged for undirected graphs.
         * Takes `O(1)` time.
         */
        edge(v3, w4, name) {
          var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name);
          return this._edgeLabels[e3];
        }
        /**
         * Detects whether the graph contains specified edge or not.
         *
         * @overload
         * @param {EdgeObj} v - Edge object.
         * @returns {boolean} `true` if the graph has an edge between `v` and `w`
         * with the optional `name`.
         * @remarks
         * `v` and `w` can be interchanged for undirected graphs.
         * No subgraphs are considered.
         * Takes `O(1)` time.
         */
        /**
         * Detects whether the graph contains specified edge or not.
         *
         * @overload
         * @param {NodeID | number} v - Source node ID.
         * @param {NodeID | number} w - Target node ID.
         * @param {string | number} [name] - Edge name. Only useful with multigraphs.
         * @returns {boolean} `true` if the graph has an edge between `v` and `w`
         * with the optional `name`.
         * @remarks
         * `v` and `w` can be interchanged for undirected graphs.
         * No subgraphs are considered.
         * Takes `O(1)` time.
         */
        hasEdge(v3, w4, name) {
          var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name);
          return Object.prototype.hasOwnProperty.call(this._edgeLabels, e3);
        }
        /**
         * Removes the edge (`v`, `w`) if the graph has an edge between `v` and `w`
         * with the optional `name`. If not this function does nothing.
         *
         * @overload
         * @param {EdgeObj} v - Edge object.
         * @returns {this}
         * @remarks
         * `v` and `w` can be interchanged for undirected graphs.
         * No subgraphs are considered.
         * Takes `O(1)` time.
         */
        /**
         * Removes the edge (`v`, `w`) if the graph has an edge between `v` and `w`
         * with the optional `name`. If not this function does nothing.
         *
         * @overload
         * @param {NodeID | number} v - Source node ID.
         * @param {NodeID | number} w - Target node ID.
         * @param {string | number} [name] - Edge name. Only useful with multigraphs.
         * @returns {this}
         * @remarks
         * `v` and `w` can be interchanged for undirected graphs.
         * Takes `O(1)` time.
         */
        removeEdge(v3, w4, name) {
          var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name);
          var edge = this._edgeObjs[e3];
          if (edge) {
            v3 = edge.v;
            w4 = edge.w;
            delete this._edgeLabels[e3];
            delete this._edgeObjs[e3];
            decrementOrRemoveEntry(this._preds[w4], v3);
            decrementOrRemoveEntry(this._sucs[v3], w4);
            delete this._in[w4][e3];
            delete this._out[v3][e3];
            this._edgeCount--;
          }
          return this;
        }
        /**
         * @param {NodeID | number} v - Target node ID.
         * @param {NodeID | number} [u] - Optionally filters edges down to just those
         * coming from node `u`.
         * @returns {EdgeObj[] | undefined} all edges that point to the node `v`.
         * Returns `undefined` if node `v` is not in the graph.
         * @remarks
         * Behavior is undefined for undirected graphs - use {@link nodeEdges} instead.
         * Takes `O(|E|)` time.
         */
        inEdges(v3, u2) {
          var inV = this._in[v3];
          if (inV) {
            var edges3 = values_default(inV);
            if (!u2) {
              return edges3;
            }
            return filter_default3(edges3, function(edge) {
              return edge.v === u2;
            });
          }
        }
        /**
         * @param {NodeID | number} v - Target node ID.
         * @param {NodeID | number} [w] - Optionally filters edges down to just those
         * that point to `w`.
         * @returns {EdgeObj[] | undefined} all edges that point to the node `v`.
         * Returns `undefined` if node `v` is not in the graph.
         * @remarks
         * Behavior is undefined for undirected graphs - use {@link nodeEdges} instead.
         * Takes `O(|E|)` time.
         */
        outEdges(v3, w4) {
          var outV = this._out[v3];
          if (outV) {
            var edges3 = values_default(outV);
            if (!w4) {
              return edges3;
            }
            return filter_default3(edges3, function(edge) {
              return edge.w === w4;
            });
          }
        }
        /**
         * @param {NodeID | number} v - Target Node ID.
         * @param {NodeID | number} [w] - If set, filters those edges down to just
         * those between nodes `v` and `w` regardless of direction
         * @returns {EdgeObj[] | undefined} all edges to or from node `v` regardless
         * of direction. Returns `undefined` if node `v` is not in the graph.
         * @remarks Takes `O(|E|)` time.
         */
        nodeEdges(v3, w4) {
          var inEdges = this.inEdges(v3, w4);
          if (inEdges) {
            return inEdges.concat(this.outEdges(v3, w4));
          }
        }
      };
      Graph.prototype._nodeCount = 0;
      Graph.prototype._edgeCount = 0;
      __name(incrementOrInitEntry, "incrementOrInitEntry");
      __name(decrementOrRemoveEntry, "decrementOrRemoveEntry");
      __name(edgeArgsToId, "edgeArgsToId");
      __name(edgeArgsToObj, "edgeArgsToObj");
      __name(edgeObjToId, "edgeObjToId");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/index.js
  var init_graphlib = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/index.js"() {
      "use strict";
      init_graph();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/data/list.js
  function unlink(entry) {
    entry._prev._next = entry._next;
    entry._next._prev = entry._prev;
    delete entry._next;
    delete entry._prev;
  }
  function filterOutLinks(k2, v3) {
    if (k2 !== "_next" && k2 !== "_prev") {
      return v3;
    }
  }
  var List;
  var init_list = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/data/list.js"() {
      "use strict";
      List = class {
        static {
          __name(this, "List");
        }
        constructor() {
          var sentinel = {};
          sentinel._next = sentinel._prev = sentinel;
          this._sentinel = sentinel;
        }
        dequeue() {
          var sentinel = this._sentinel;
          var entry = sentinel._prev;
          if (entry !== sentinel) {
            unlink(entry);
            return entry;
          }
        }
        enqueue(entry) {
          var sentinel = this._sentinel;
          if (entry._prev && entry._next) {
            unlink(entry);
          }
          entry._next = sentinel._next;
          sentinel._next._prev = entry;
          sentinel._next = entry;
          entry._prev = sentinel;
        }
        toString() {
          var strs = [];
          var sentinel = this._sentinel;
          var curr = sentinel._prev;
          while (curr !== sentinel) {
            strs.push(JSON.stringify(curr, filterOutLinks));
            curr = curr._prev;
          }
          return "[" + strs.join(", ") + "]";
        }
      };
      __name(unlink, "unlink");
      __name(filterOutLinks, "filterOutLinks");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/greedy-fas.js
  function greedyFAS(g2, weightFn) {
    if (g2.nodeCount() <= 1) {
      return [];
    }
    var state4 = buildState(g2, weightFn || DEFAULT_WEIGHT_FN);
    var results = doGreedyFAS(state4.graph, state4.buckets, state4.zeroIdx);
    return flatten_default(
      map_default(results, function(e3) {
        return g2.outEdges(e3.v, e3.w);
      })
    );
  }
  function doGreedyFAS(g2, buckets, zeroIdx) {
    var results = [];
    var sources = buckets[buckets.length - 1];
    var sinks = buckets[0];
    var entry;
    while (g2.nodeCount()) {
      while (entry = sinks.dequeue()) {
        removeNode(g2, buckets, zeroIdx, entry);
      }
      while (entry = sources.dequeue()) {
        removeNode(g2, buckets, zeroIdx, entry);
      }
      if (g2.nodeCount()) {
        for (var i2 = buckets.length - 2; i2 > 0; --i2) {
          entry = buckets[i2].dequeue();
          if (entry) {
            results = results.concat(removeNode(g2, buckets, zeroIdx, entry, true));
            break;
          }
        }
      }
    }
    return results;
  }
  function removeNode(g2, buckets, zeroIdx, entry, collectPredecessors) {
    var results = collectPredecessors ? [] : void 0;
    forEach_default(g2.inEdges(entry.v), function(edge) {
      var weight8 = g2.edge(edge);
      var uEntry = g2.node(edge.v);
      if (collectPredecessors) {
        results.push({ v: edge.v, w: edge.w });
      }
      uEntry.out -= weight8;
      assignBucket(buckets, zeroIdx, uEntry);
    });
    forEach_default(g2.outEdges(entry.v), function(edge) {
      var weight8 = g2.edge(edge);
      var w4 = edge.w;
      var wEntry = g2.node(w4);
      wEntry["in"] -= weight8;
      assignBucket(buckets, zeroIdx, wEntry);
    });
    g2.removeNode(entry.v);
    return results;
  }
  function buildState(g2, weightFn) {
    var fasGraph = new Graph();
    var maxIn = 0;
    var maxOut = 0;
    forEach_default(g2.nodes(), function(v3) {
      fasGraph.setNode(v3, { v: v3, in: 0, out: 0 });
    });
    forEach_default(g2.edges(), function(e3) {
      var prevWeight = fasGraph.edge(e3.v, e3.w) || 0;
      var weight8 = weightFn(e3);
      var edgeWeight = prevWeight + weight8;
      fasGraph.setEdge(e3.v, e3.w, edgeWeight);
      maxOut = Math.max(maxOut, fasGraph.node(e3.v).out += weight8);
      maxIn = Math.max(maxIn, fasGraph.node(e3.w)["in"] += weight8);
    });
    var buckets = range_default(maxOut + maxIn + 3).map(function() {
      return new List();
    });
    var zeroIdx = maxIn + 1;
    forEach_default(fasGraph.nodes(), function(v3) {
      assignBucket(buckets, zeroIdx, fasGraph.node(v3));
    });
    return { graph: fasGraph, buckets, zeroIdx };
  }
  function assignBucket(buckets, zeroIdx, entry) {
    if (!entry.out) {
      buckets[0].enqueue(entry);
    } else if (!entry["in"]) {
      buckets[buckets.length - 1].enqueue(entry);
    } else {
      buckets[entry.out - entry["in"] + zeroIdx].enqueue(entry);
    }
  }
  var DEFAULT_WEIGHT_FN;
  var init_greedy_fas = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/greedy-fas.js"() {
      "use strict";
      init_lodash();
      init_graphlib();
      init_list();
      DEFAULT_WEIGHT_FN = constant_default7(1);
      __name(greedyFAS, "greedyFAS");
      __name(doGreedyFAS, "doGreedyFAS");
      __name(removeNode, "removeNode");
      __name(buildState, "buildState");
      __name(assignBucket, "assignBucket");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/acyclic.js
  function run(g2) {
    var fas = g2.graph().acyclicer === "greedy" ? greedyFAS(g2, weightFn(g2)) : dfsFAS(g2);
    forEach_default(fas, function(e3) {
      var label = g2.edge(e3);
      g2.removeEdge(e3);
      label.forwardName = e3.name;
      label.reversed = true;
      g2.setEdge(e3.w, e3.v, label, uniqueId_default("rev"));
    });
    function weightFn(g3) {
      return function(e3) {
        return g3.edge(e3).weight;
      };
    }
    __name(weightFn, "weightFn");
  }
  function dfsFAS(g2) {
    var fas = [];
    var stack = {};
    var visited = {};
    function dfs3(v3) {
      if (Object.prototype.hasOwnProperty.call(visited, v3)) {
        return;
      }
      visited[v3] = true;
      stack[v3] = true;
      forEach_default(g2.outEdges(v3), function(e3) {
        if (Object.prototype.hasOwnProperty.call(stack, e3.w)) {
          fas.push(e3);
        } else {
          dfs3(e3.w);
        }
      });
      delete stack[v3];
    }
    __name(dfs3, "dfs");
    forEach_default(g2.nodes(), dfs3);
    return fas;
  }
  function undo(g2) {
    forEach_default(g2.edges(), function(e3) {
      var label = g2.edge(e3);
      if (label.reversed) {
        g2.removeEdge(e3);
        var forwardName = label.forwardName;
        delete label.reversed;
        delete label.forwardName;
        g2.setEdge(e3.w, e3.v, label, forwardName);
      }
    });
  }
  var init_acyclic = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/acyclic.js"() {
      "use strict";
      init_lodash();
      init_greedy_fas();
      __name(run, "run");
      __name(dfsFAS, "dfsFAS");
      __name(undo, "undo");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/util.js
  function addDummyNode(g2, type3, attrs, name) {
    var v3;
    do {
      v3 = uniqueId_default(name);
    } while (g2.hasNode(v3));
    attrs.dummy = type3;
    g2.setNode(v3, attrs);
    return v3;
  }
  function simplify(g2) {
    var simplified = new Graph().setGraph(g2.graph());
    forEach_default(g2.nodes(), function(v3) {
      simplified.setNode(v3, g2.node(v3));
    });
    forEach_default(g2.edges(), function(e3) {
      var simpleLabel = simplified.edge(e3.v, e3.w) || { weight: 0, minlen: 1 };
      var label = g2.edge(e3);
      simplified.setEdge(e3.v, e3.w, {
        weight: simpleLabel.weight + label.weight,
        minlen: Math.max(simpleLabel.minlen, label.minlen)
      });
    });
    return simplified;
  }
  function asNonCompoundGraph(g2) {
    var simplified = new Graph({ multigraph: g2.isMultigraph() }).setGraph(g2.graph());
    forEach_default(g2.nodes(), function(v3) {
      if (!g2.children(v3).length) {
        simplified.setNode(v3, g2.node(v3));
      }
    });
    forEach_default(g2.edges(), function(e3) {
      simplified.setEdge(e3, g2.edge(e3));
    });
    return simplified;
  }
  function intersectRect2(rect3, point8) {
    var x5 = rect3.x;
    var y6 = rect3.y;
    var dx = point8.x - x5;
    var dy = point8.y - y6;
    var w4 = rect3.width / 2;
    var h3 = rect3.height / 2;
    if (!dx && !dy) {
      throw new Error("Not possible to find intersection inside of the rectangle");
    }
    var sx, sy;
    if (Math.abs(dy) * w4 > Math.abs(dx) * h3) {
      if (dy < 0) {
        h3 = -h3;
      }
      sx = h3 * dx / dy;
      sy = h3;
    } else {
      if (dx < 0) {
        w4 = -w4;
      }
      sx = w4;
      sy = w4 * dy / dx;
    }
    return { x: x5 + sx, y: y6 + sy };
  }
  function buildLayerMatrix(g2) {
    var layering = map_default(range_default(maxRank(g2) + 1), function() {
      return [];
    });
    forEach_default(g2.nodes(), function(v3) {
      var node2 = g2.node(v3);
      var rank2 = node2.rank;
      if (!isUndefined_default(rank2)) {
        layering[rank2][node2.order] = v3;
      }
    });
    return layering;
  }
  function normalizeRanks(g2) {
    var min10 = min_default(
      map_default(g2.nodes(), function(v3) {
        return g2.node(v3).rank;
      })
    );
    forEach_default(g2.nodes(), function(v3) {
      var node2 = g2.node(v3);
      if (has_default(node2, "rank")) {
        node2.rank -= min10;
      }
    });
  }
  function removeEmptyRanks(g2) {
    var offset = min_default(
      map_default(g2.nodes(), function(v3) {
        return g2.node(v3).rank;
      })
    );
    var layers = [];
    forEach_default(g2.nodes(), function(v3) {
      var rank2 = g2.node(v3).rank - offset;
      if (!layers[rank2]) {
        layers[rank2] = [];
      }
      layers[rank2].push(v3);
    });
    var delta = 0;
    var nodeRankFactor = g2.graph().nodeRankFactor;
    forEach_default(layers, function(vs, i2) {
      if (isUndefined_default(vs) && i2 % nodeRankFactor !== 0) {
        --delta;
      } else if (delta) {
        forEach_default(vs, function(v3) {
          g2.node(v3).rank += delta;
        });
      }
    });
  }
  function addBorderNode(g2, prefix, rank2, order2) {
    var node2 = {
      width: 0,
      height: 0
    };
    if (arguments.length >= 4) {
      node2.rank = rank2;
      node2.order = order2;
    }
    return addDummyNode(g2, "border", node2, prefix);
  }
  function maxRank(g2) {
    return max_default(
      map_default(g2.nodes(), function(v3) {
        var rank2 = g2.node(v3).rank;
        if (!isUndefined_default(rank2)) {
          return rank2;
        }
      })
    );
  }
  function partition(collection4, fn3) {
    var result = { lhs: [], rhs: [] };
    forEach_default(collection4, function(value2) {
      if (fn3(value2)) {
        result.lhs.push(value2);
      } else {
        result.rhs.push(value2);
      }
    });
    return result;
  }
  function time2(name, fn3) {
    var start3 = now_default();
    try {
      return fn3();
    } finally {
      console.log(name + " time: " + (now_default() - start3) + "ms");
    }
  }
  function notime(name, fn3) {
    return fn3();
  }
  var init_util2 = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/util.js"() {
      "use strict";
      init_lodash();
      init_graphlib();
      __name(addDummyNode, "addDummyNode");
      __name(simplify, "simplify");
      __name(asNonCompoundGraph, "asNonCompoundGraph");
      __name(intersectRect2, "intersectRect");
      __name(buildLayerMatrix, "buildLayerMatrix");
      __name(normalizeRanks, "normalizeRanks");
      __name(removeEmptyRanks, "removeEmptyRanks");
      __name(addBorderNode, "addBorderNode");
      __name(maxRank, "maxRank");
      __name(partition, "partition");
      __name(time2, "time");
      __name(notime, "notime");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/add-border-segments.js
  function addBorderSegments(g2) {
    function dfs3(v3) {
      var children2 = g2.children(v3);
      var node2 = g2.node(v3);
      if (children2.length) {
        forEach_default(children2, dfs3);
      }
      if (Object.prototype.hasOwnProperty.call(node2, "minRank")) {
        node2.borderLeft = [];
        node2.borderRight = [];
        for (var rank2 = node2.minRank, maxRank2 = node2.maxRank + 1; rank2 < maxRank2; ++rank2) {
          addBorderNode2(g2, "borderLeft", "_bl", v3, node2, rank2);
          addBorderNode2(g2, "borderRight", "_br", v3, node2, rank2);
        }
      }
    }
    __name(dfs3, "dfs");
    forEach_default(g2.children(), dfs3);
  }
  function addBorderNode2(g2, prop, prefix, sg, sgNode, rank2) {
    var label = { width: 0, height: 0, rank: rank2, borderType: prop };
    var prev2 = sgNode[prop][rank2 - 1];
    var curr = addDummyNode(g2, "border", label, prefix);
    sgNode[prop][rank2] = curr;
    g2.setParent(curr, sg);
    if (prev2) {
      g2.setEdge(prev2, curr, { weight: 1 });
    }
  }
  var init_add_border_segments = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/add-border-segments.js"() {
      "use strict";
      init_lodash();
      init_util2();
      __name(addBorderSegments, "addBorderSegments");
      __name(addBorderNode2, "addBorderNode");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/coordinate-system.js
  function adjust2(g2) {
    var rankDir = g2.graph().rankdir.toLowerCase();
    if (rankDir === "lr" || rankDir === "rl") {
      swapWidthHeight(g2);
    }
  }
  function undo2(g2) {
    var rankDir = g2.graph().rankdir.toLowerCase();
    if (rankDir === "bt" || rankDir === "rl") {
      reverseY(g2);
    }
    if (rankDir === "lr" || rankDir === "rl") {
      swapXY(g2);
      swapWidthHeight(g2);
    }
  }
  function swapWidthHeight(g2) {
    forEach_default(g2.nodes(), function(v3) {
      swapWidthHeightOne(g2.node(v3));
    });
    forEach_default(g2.edges(), function(e3) {
      swapWidthHeightOne(g2.edge(e3));
    });
  }
  function swapWidthHeightOne(attrs) {
    var w4 = attrs.width;
    attrs.width = attrs.height;
    attrs.height = w4;
  }
  function reverseY(g2) {
    forEach_default(g2.nodes(), function(v3) {
      reverseYOne(g2.node(v3));
    });
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      forEach_default(edge.points, reverseYOne);
      if (Object.prototype.hasOwnProperty.call(edge, "y")) {
        reverseYOne(edge);
      }
    });
  }
  function reverseYOne(attrs) {
    attrs.y = -attrs.y;
  }
  function swapXY(g2) {
    forEach_default(g2.nodes(), function(v3) {
      swapXYOne(g2.node(v3));
    });
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      forEach_default(edge.points, swapXYOne);
      if (Object.prototype.hasOwnProperty.call(edge, "x")) {
        swapXYOne(edge);
      }
    });
  }
  function swapXYOne(attrs) {
    var x5 = attrs.x;
    attrs.x = attrs.y;
    attrs.y = x5;
  }
  var init_coordinate_system = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/coordinate-system.js"() {
      "use strict";
      init_lodash();
      __name(adjust2, "adjust");
      __name(undo2, "undo");
      __name(swapWidthHeight, "swapWidthHeight");
      __name(swapWidthHeightOne, "swapWidthHeightOne");
      __name(reverseY, "reverseY");
      __name(reverseYOne, "reverseYOne");
      __name(swapXY, "swapXY");
      __name(swapXYOne, "swapXYOne");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/normalize.js
  function run2(g2) {
    g2.graph().dummyChains = [];
    forEach_default(g2.edges(), function(edge) {
      normalizeEdge(g2, edge);
    });
  }
  function normalizeEdge(g2, e3) {
    var v3 = e3.v;
    var vRank = g2.node(v3).rank;
    var w4 = e3.w;
    var wRank = g2.node(w4).rank;
    var name = e3.name;
    var edgeLabel = g2.edge(e3);
    var labelRank = edgeLabel.labelRank;
    if (wRank === vRank + 1) return;
    g2.removeEdge(e3);
    var attrs = void 0;
    var dummy, i2;
    for (i2 = 0, ++vRank; vRank < wRank; ++i2, ++vRank) {
      edgeLabel.points = [];
      attrs = {
        width: 0,
        height: 0,
        edgeLabel,
        edgeObj: e3,
        rank: vRank
      };
      dummy = addDummyNode(g2, "edge", attrs, "_d");
      if (vRank === labelRank) {
        attrs.width = edgeLabel.width;
        attrs.height = edgeLabel.height;
        attrs.dummy = "edge-label";
        attrs.labelpos = edgeLabel.labelpos;
      }
      g2.setEdge(v3, dummy, { weight: edgeLabel.weight }, name);
      if (i2 === 0) {
        g2.graph().dummyChains.push(dummy);
      }
      v3 = dummy;
    }
    g2.setEdge(v3, w4, { weight: edgeLabel.weight }, name);
  }
  function undo3(g2) {
    forEach_default(g2.graph().dummyChains, function(v3) {
      var node2 = g2.node(v3);
      var origLabel = node2.edgeLabel;
      var w4;
      g2.setEdge(node2.edgeObj, origLabel);
      while (node2.dummy) {
        w4 = g2.successors(v3)[0];
        g2.removeNode(v3);
        origLabel.points.push({ x: node2.x, y: node2.y });
        if (node2.dummy === "edge-label") {
          origLabel.x = node2.x;
          origLabel.y = node2.y;
          origLabel.width = node2.width;
          origLabel.height = node2.height;
        }
        v3 = w4;
        node2 = g2.node(v3);
      }
    });
  }
  var init_normalize = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/normalize.js"() {
      "use strict";
      init_lodash();
      init_util2();
      __name(run2, "run");
      __name(normalizeEdge, "normalizeEdge");
      __name(undo3, "undo");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/util.js
  function longestPath(g2) {
    var visited = {};
    function dfs3(v3) {
      var label = g2.node(v3);
      if (Object.prototype.hasOwnProperty.call(visited, v3)) {
        return label.rank;
      }
      visited[v3] = true;
      var rank2 = min_default(
        map_default(g2.outEdges(v3), function(e3) {
          return dfs3(e3.w) - g2.edge(e3).minlen;
        })
      );
      if (rank2 === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3
      rank2 === void 0 || // return value of _.map([]) for Lodash 4
      rank2 === null) {
        rank2 = 0;
      }
      return label.rank = rank2;
    }
    __name(dfs3, "dfs");
    forEach_default(g2.sources(), dfs3);
  }
  function slack(g2, e3) {
    return g2.node(e3.w).rank - g2.node(e3.v).rank - g2.edge(e3).minlen;
  }
  var init_util3 = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/util.js"() {
      "use strict";
      init_lodash();
      __name(longestPath, "longestPath");
      __name(slack, "slack");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js
  function feasibleTree(g2) {
    var t4 = new Graph({ directed: false });
    var start3 = g2.nodes()[0];
    var size4 = g2.nodeCount();
    t4.setNode(start3, {});
    var edge, delta;
    while (tightTree(t4, g2) < size4) {
      edge = findMinSlackEdge(t4, g2);
      delta = t4.hasNode(edge.v) ? slack(g2, edge) : -slack(g2, edge);
      shiftRanks(t4, g2, delta);
    }
    return t4;
  }
  function tightTree(t4, g2) {
    function dfs3(v3) {
      forEach_default(g2.nodeEdges(v3), function(e3) {
        var edgeV = e3.v, w4 = v3 === edgeV ? e3.w : edgeV;
        if (!t4.hasNode(w4) && !slack(g2, e3)) {
          t4.setNode(w4, {});
          t4.setEdge(v3, w4, {});
          dfs3(w4);
        }
      });
    }
    __name(dfs3, "dfs");
    forEach_default(t4.nodes(), dfs3);
    return t4.nodeCount();
  }
  function findMinSlackEdge(t4, g2) {
    return minBy_default(g2.edges(), function(e3) {
      if (t4.hasNode(e3.v) !== t4.hasNode(e3.w)) {
        return slack(g2, e3);
      }
    });
  }
  function shiftRanks(t4, g2, delta) {
    forEach_default(t4.nodes(), function(v3) {
      g2.node(v3).rank += delta;
    });
  }
  var init_feasible_tree = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js"() {
      "use strict";
      init_lodash();
      init_graphlib();
      init_util3();
      __name(feasibleTree, "feasibleTree");
      __name(tightTree, "tightTree");
      __name(findMinSlackEdge, "findMinSlackEdge");
      __name(shiftRanks, "shiftRanks");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/components.js
  var init_components = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/components.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js
  var init_priority_queue = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js
  var DEFAULT_WEIGHT_FUNC;
  var init_dijkstra = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js"() {
      "use strict";
      init_lodash();
      init_priority_queue();
      DEFAULT_WEIGHT_FUNC = constant_default7(1);
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js
  var init_dijkstra_all = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js"() {
      "use strict";
      init_dijkstra();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js
  var init_tarjan = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js"() {
      "use strict";
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js
  var init_find_cycles = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js"() {
      "use strict";
      init_tarjan();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js
  var DEFAULT_WEIGHT_FUNC2;
  var init_floyd_warshall = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js"() {
      "use strict";
      init_lodash();
      DEFAULT_WEIGHT_FUNC2 = constant_default7(1);
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/topsort.js
  function topsort(g2) {
    var visited = {};
    var stack = {};
    var results = [];
    function visit(node2) {
      if (Object.prototype.hasOwnProperty.call(stack, node2)) {
        throw new CycleException();
      }
      if (!Object.prototype.hasOwnProperty.call(visited, node2)) {
        stack[node2] = true;
        visited[node2] = true;
        forEach_default(g2.predecessors(node2), visit);
        delete stack[node2];
        results.push(node2);
      }
    }
    __name(visit, "visit");
    forEach_default(g2.sinks(), visit);
    if (size_default2(visited) !== g2.nodeCount()) {
      throw new CycleException();
    }
    return results;
  }
  function CycleException() {
  }
  var init_topsort = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/topsort.js"() {
      "use strict";
      init_lodash();
      topsort.CycleException = CycleException;
      __name(topsort, "topsort");
      __name(CycleException, "CycleException");
      CycleException.prototype = new Error();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js
  var init_is_acyclic = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js"() {
      "use strict";
      init_topsort();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js
  function dfs(g2, vs, order2) {
    if (!isArray_default(vs)) {
      vs = [vs];
    }
    var navigation = (g2.isDirected() ? g2.successors : g2.neighbors).bind(g2);
    var acc = [];
    var visited = {};
    forEach_default(vs, function(v3) {
      if (!g2.hasNode(v3)) {
        throw new Error("Graph does not have node: " + v3);
      }
      doDfs(g2, v3, order2 === "post", visited, navigation, acc);
    });
    return acc;
  }
  function doDfs(g2, v3, postorder3, visited, navigation, acc) {
    if (!Object.prototype.hasOwnProperty.call(visited, v3)) {
      visited[v3] = true;
      if (!postorder3) {
        acc.push(v3);
      }
      forEach_default(navigation(v3), function(w4) {
        doDfs(g2, w4, postorder3, visited, navigation, acc);
      });
      if (postorder3) {
        acc.push(v3);
      }
    }
  }
  var init_dfs = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js"() {
      "use strict";
      init_lodash();
      __name(dfs, "dfs");
      __name(doDfs, "doDfs");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js
  function postorder(g2, vs) {
    return dfs(g2, vs, "post");
  }
  var init_postorder = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js"() {
      "use strict";
      init_dfs();
      __name(postorder, "postorder");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js
  function preorder(g2, vs) {
    return dfs(g2, vs, "pre");
  }
  var init_preorder = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js"() {
      "use strict";
      init_dfs();
      __name(preorder, "preorder");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/prim.js
  var init_prim = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/prim.js"() {
      "use strict";
      init_priority_queue();
      init_graph();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/index.js
  var init_alg = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/alg/index.js"() {
      "use strict";
      init_components();
      init_dijkstra();
      init_dijkstra_all();
      init_find_cycles();
      init_floyd_warshall();
      init_is_acyclic();
      init_postorder();
      init_preorder();
      init_prim();
      init_tarjan();
      init_topsort();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js
  function networkSimplex(g2) {
    g2 = simplify(g2);
    longestPath(g2);
    var t4 = feasibleTree(g2);
    initLowLimValues(t4);
    initCutValues(t4, g2);
    var e3, f2;
    while (e3 = leaveEdge(t4)) {
      f2 = enterEdge(t4, g2, e3);
      exchangeEdges(t4, g2, e3, f2);
    }
  }
  function initCutValues(t4, g2) {
    var vs = postorder(t4, t4.nodes());
    vs = vs.slice(0, vs.length - 1);
    forEach_default(vs, function(v3) {
      assignCutValue(t4, g2, v3);
    });
  }
  function assignCutValue(t4, g2, child) {
    var childLab = t4.node(child);
    var parent4 = childLab.parent;
    t4.edge(child, parent4).cutvalue = calcCutValue(t4, g2, child);
  }
  function calcCutValue(t4, g2, child) {
    var childLab = t4.node(child);
    var parent4 = childLab.parent;
    var childIsTail = true;
    var graphEdge = g2.edge(child, parent4);
    var cutValue = 0;
    if (!graphEdge) {
      childIsTail = false;
      graphEdge = g2.edge(parent4, child);
    }
    cutValue = graphEdge.weight;
    forEach_default(g2.nodeEdges(child), function(e3) {
      var isOutEdge = e3.v === child, other = isOutEdge ? e3.w : e3.v;
      if (other !== parent4) {
        var pointsToHead = isOutEdge === childIsTail, otherWeight = g2.edge(e3).weight;
        cutValue += pointsToHead ? otherWeight : -otherWeight;
        if (isTreeEdge(t4, child, other)) {
          var otherCutValue = t4.edge(child, other).cutvalue;
          cutValue += pointsToHead ? -otherCutValue : otherCutValue;
        }
      }
    });
    return cutValue;
  }
  function initLowLimValues(tree, root4) {
    if (arguments.length < 2) {
      root4 = tree.nodes()[0];
    }
    dfsAssignLowLim(tree, {}, 1, root4);
  }
  function dfsAssignLowLim(tree, visited, nextLim, v3, parent4) {
    var low = nextLim;
    var label = tree.node(v3);
    visited[v3] = true;
    forEach_default(tree.neighbors(v3), function(w4) {
      if (!Object.prototype.hasOwnProperty.call(visited, w4)) {
        nextLim = dfsAssignLowLim(tree, visited, nextLim, w4, v3);
      }
    });
    label.low = low;
    label.lim = nextLim++;
    if (parent4) {
      label.parent = parent4;
    } else {
      delete label.parent;
    }
    return nextLim;
  }
  function leaveEdge(tree) {
    return find_default2(tree.edges(), function(e3) {
      return tree.edge(e3).cutvalue < 0;
    });
  }
  function enterEdge(t4, g2, edge) {
    var v3 = edge.v;
    var w4 = edge.w;
    if (!g2.hasEdge(v3, w4)) {
      v3 = edge.w;
      w4 = edge.v;
    }
    var vLabel = t4.node(v3);
    var wLabel = t4.node(w4);
    var tailLabel = vLabel;
    var flip = false;
    if (vLabel.lim > wLabel.lim) {
      tailLabel = wLabel;
      flip = true;
    }
    var candidates = filter_default3(g2.edges(), function(edge2) {
      return flip === isDescendant(t4, t4.node(edge2.v), tailLabel) && flip !== isDescendant(t4, t4.node(edge2.w), tailLabel);
    });
    return minBy_default(candidates, function(edge2) {
      return slack(g2, edge2);
    });
  }
  function exchangeEdges(t4, g2, e3, f2) {
    var v3 = e3.v;
    var w4 = e3.w;
    t4.removeEdge(v3, w4);
    t4.setEdge(f2.v, f2.w, {});
    initLowLimValues(t4);
    initCutValues(t4, g2);
    updateRanks(t4, g2);
  }
  function updateRanks(t4, g2) {
    var root4 = find_default2(t4.nodes(), function(v3) {
      return !g2.node(v3).parent;
    });
    var vs = preorder(t4, root4);
    vs = vs.slice(1);
    forEach_default(vs, function(v3) {
      var parent4 = t4.node(v3).parent, edge = g2.edge(v3, parent4), flipped = false;
      if (!edge) {
        edge = g2.edge(parent4, v3);
        flipped = true;
      }
      g2.node(v3).rank = g2.node(parent4).rank + (flipped ? edge.minlen : -edge.minlen);
    });
  }
  function isTreeEdge(tree, u2, v3) {
    return tree.hasEdge(u2, v3);
  }
  function isDescendant(tree, vLabel, rootLabel) {
    return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;
  }
  var init_network_simplex = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js"() {
      "use strict";
      init_lodash();
      init_alg();
      init_util2();
      init_feasible_tree();
      init_util3();
      networkSimplex.initLowLimValues = initLowLimValues;
      networkSimplex.initCutValues = initCutValues;
      networkSimplex.calcCutValue = calcCutValue;
      networkSimplex.leaveEdge = leaveEdge;
      networkSimplex.enterEdge = enterEdge;
      networkSimplex.exchangeEdges = exchangeEdges;
      __name(networkSimplex, "networkSimplex");
      __name(initCutValues, "initCutValues");
      __name(assignCutValue, "assignCutValue");
      __name(calcCutValue, "calcCutValue");
      __name(initLowLimValues, "initLowLimValues");
      __name(dfsAssignLowLim, "dfsAssignLowLim");
      __name(leaveEdge, "leaveEdge");
      __name(enterEdge, "enterEdge");
      __name(exchangeEdges, "exchangeEdges");
      __name(updateRanks, "updateRanks");
      __name(isTreeEdge, "isTreeEdge");
      __name(isDescendant, "isDescendant");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/index.js
  function rank(g2) {
    switch (g2.graph().ranker) {
      case "network-simplex":
        networkSimplexRanker(g2);
        break;
      case "tight-tree":
        tightTreeRanker(g2);
        break;
      case "longest-path":
        longestPathRanker(g2);
        break;
      default:
        networkSimplexRanker(g2);
    }
  }
  function tightTreeRanker(g2) {
    longestPath(g2);
    feasibleTree(g2);
  }
  function networkSimplexRanker(g2) {
    networkSimplex(g2);
  }
  var longestPathRanker;
  var init_rank = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/rank/index.js"() {
      "use strict";
      init_feasible_tree();
      init_network_simplex();
      init_util3();
      __name(rank, "rank");
      longestPathRanker = longestPath;
      __name(tightTreeRanker, "tightTreeRanker");
      __name(networkSimplexRanker, "networkSimplexRanker");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/nesting-graph.js
  function run3(g2) {
    var root4 = addDummyNode(g2, "root", {}, "_root");
    var depths = treeDepths(g2);
    var height2 = max_default(values_default(depths)) - 1;
    var nodeSep = 2 * height2 + 1;
    g2.graph().nestingRoot = root4;
    forEach_default(g2.edges(), function(e3) {
      g2.edge(e3).minlen *= nodeSep;
    });
    var weight8 = sumWeights(g2) + 1;
    forEach_default(g2.children(), function(child) {
      dfs2(g2, root4, nodeSep, weight8, height2, depths, child);
    });
    g2.graph().nodeRankFactor = nodeSep;
  }
  function dfs2(g2, root4, nodeSep, weight8, height2, depths, v3) {
    var children2 = g2.children(v3);
    if (!children2.length) {
      if (v3 !== root4) {
        g2.setEdge(root4, v3, { weight: 0, minlen: nodeSep });
      }
      return;
    }
    var top2 = addBorderNode(g2, "_bt");
    var bottom2 = addBorderNode(g2, "_bb");
    var label = g2.node(v3);
    g2.setParent(top2, v3);
    label.borderTop = top2;
    g2.setParent(bottom2, v3);
    label.borderBottom = bottom2;
    forEach_default(children2, function(child) {
      dfs2(g2, root4, nodeSep, weight8, height2, depths, child);
      var childNode = g2.node(child);
      var childTop = childNode.borderTop ? childNode.borderTop : child;
      var childBottom = childNode.borderBottom ? childNode.borderBottom : child;
      var thisWeight = childNode.borderTop ? weight8 : 2 * weight8;
      var minlen = childTop !== childBottom ? 1 : height2 - depths[v3] + 1;
      g2.setEdge(top2, childTop, {
        weight: thisWeight,
        minlen,
        nestingEdge: true
      });
      g2.setEdge(childBottom, bottom2, {
        weight: thisWeight,
        minlen,
        nestingEdge: true
      });
    });
    if (!g2.parent(v3)) {
      g2.setEdge(root4, top2, { weight: 0, minlen: height2 + depths[v3] });
    }
  }
  function treeDepths(g2) {
    var depths = {};
    function dfs3(v3, depth) {
      var children2 = g2.children(v3);
      if (children2 && children2.length) {
        forEach_default(children2, function(child) {
          dfs3(child, depth + 1);
        });
      }
      depths[v3] = depth;
    }
    __name(dfs3, "dfs");
    forEach_default(g2.children(), function(v3) {
      dfs3(v3, 1);
    });
    return depths;
  }
  function sumWeights(g2) {
    return reduce_default(
      g2.edges(),
      function(acc, e3) {
        return acc + g2.edge(e3).weight;
      },
      0
    );
  }
  function cleanup(g2) {
    var graphLabel = g2.graph();
    g2.removeNode(graphLabel.nestingRoot);
    delete graphLabel.nestingRoot;
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      if (edge.nestingEdge) {
        g2.removeEdge(e3);
      }
    });
  }
  var init_nesting_graph = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/nesting-graph.js"() {
      "use strict";
      init_lodash();
      init_util2();
      __name(run3, "run");
      __name(dfs2, "dfs");
      __name(treeDepths, "treeDepths");
      __name(sumWeights, "sumWeights");
      __name(cleanup, "cleanup");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js
  function addSubgraphConstraints(g2, cg, vs) {
    var prev2 = {}, rootPrev;
    forEach_default(vs, function(v3) {
      var child = g2.parent(v3), parent4, prevChild;
      while (child) {
        parent4 = g2.parent(child);
        if (parent4) {
          prevChild = prev2[parent4];
          prev2[parent4] = child;
        } else {
          prevChild = rootPrev;
          rootPrev = child;
        }
        if (prevChild && prevChild !== child) {
          cg.setEdge(prevChild, child);
          return;
        }
        child = parent4;
      }
    });
  }
  var init_add_subgraph_constraints = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js"() {
      "use strict";
      init_lodash();
      __name(addSubgraphConstraints, "addSubgraphConstraints");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js
  function buildLayerGraph(g2, rank2, relationship) {
    var root4 = createRootNode(g2), result = new Graph({ compound: true }).setGraph({ root: root4 }).setDefaultNodeLabel(function(v3) {
      return g2.node(v3);
    });
    forEach_default(g2.nodes(), function(v3) {
      var node2 = g2.node(v3), parent4 = g2.parent(v3);
      if (node2.rank === rank2 || node2.minRank <= rank2 && rank2 <= node2.maxRank) {
        result.setNode(v3);
        result.setParent(v3, parent4 || root4);
        forEach_default(g2[relationship](v3), function(e3) {
          var u2 = e3.v === v3 ? e3.w : e3.v, edge = result.edge(u2, v3), weight8 = !isUndefined_default(edge) ? edge.weight : 0;
          result.setEdge(u2, v3, { weight: g2.edge(e3).weight + weight8 });
        });
        if (Object.prototype.hasOwnProperty.call(node2, "minRank")) {
          result.setNode(v3, {
            borderLeft: node2.borderLeft[rank2],
            borderRight: node2.borderRight[rank2]
          });
        }
      }
    });
    return result;
  }
  function createRootNode(g2) {
    var v3;
    while (g2.hasNode(v3 = uniqueId_default("_root"))) ;
    return v3;
  }
  var init_build_layer_graph = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js"() {
      "use strict";
      init_lodash();
      init_graphlib();
      __name(buildLayerGraph, "buildLayerGraph");
      __name(createRootNode, "createRootNode");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/cross-count.js
  function crossCount(g2, layering) {
    var cc2 = 0;
    for (var i2 = 1; i2 < layering.length; ++i2) {
      cc2 += twoLayerCrossCount(g2, layering[i2 - 1], layering[i2]);
    }
    return cc2;
  }
  function twoLayerCrossCount(g2, northLayer, southLayer) {
    var southPos = zipObject_default(
      southLayer,
      map_default(southLayer, function(v3, i2) {
        return i2;
      })
    );
    var southEntries = flatten_default(
      map_default(northLayer, function(v3) {
        return sortBy_default(
          map_default(g2.outEdges(v3), function(e3) {
            return { pos: southPos[e3.w], weight: g2.edge(e3).weight };
          }),
          "pos"
        );
      })
    );
    var firstIndex = 1;
    while (firstIndex < southLayer.length) firstIndex <<= 1;
    var treeSize = 2 * firstIndex - 1;
    firstIndex -= 1;
    var tree = map_default(new Array(treeSize), function() {
      return 0;
    });
    var cc2 = 0;
    forEach_default(
      // @ts-expect-error
      southEntries.forEach(function(entry) {
        var index = entry.pos + firstIndex;
        tree[index] += entry.weight;
        var weightSum = 0;
        while (index > 0) {
          if (index % 2) {
            weightSum += tree[index + 1];
          }
          index = index - 1 >> 1;
          tree[index] += entry.weight;
        }
        cc2 += entry.weight * weightSum;
      })
    );
    return cc2;
  }
  var init_cross_count = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/cross-count.js"() {
      "use strict";
      init_lodash();
      __name(crossCount, "crossCount");
      __name(twoLayerCrossCount, "twoLayerCrossCount");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/init-order.js
  function initOrder(g2) {
    var visited = {};
    var simpleNodes = filter_default3(g2.nodes(), function(v3) {
      return !g2.children(v3).length;
    });
    var maxRank2 = max_default(
      map_default(simpleNodes, function(v3) {
        return g2.node(v3).rank;
      })
    );
    var layers = map_default(range_default(maxRank2 + 1), function() {
      return [];
    });
    function dfs3(v3) {
      if (has_default(visited, v3)) return;
      visited[v3] = true;
      var node2 = g2.node(v3);
      layers[node2.rank].push(v3);
      forEach_default(g2.successors(v3), dfs3);
    }
    __name(dfs3, "dfs");
    var orderedVs = sortBy_default(simpleNodes, function(v3) {
      return g2.node(v3).rank;
    });
    forEach_default(orderedVs, dfs3);
    return layers;
  }
  var init_init_order = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/init-order.js"() {
      "use strict";
      init_lodash();
      __name(initOrder, "initOrder");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/barycenter.js
  function barycenter(g2, movable) {
    return map_default(movable, function(v3) {
      var inV = g2.inEdges(v3);
      if (!inV.length) {
        return { v: v3 };
      } else {
        var result = reduce_default(
          inV,
          function(acc, e3) {
            var edge = g2.edge(e3), nodeU = g2.node(e3.v);
            return {
              sum: acc.sum + edge.weight * nodeU.order,
              weight: acc.weight + edge.weight
            };
          },
          { sum: 0, weight: 0 }
        );
        return {
          v: v3,
          barycenter: result.sum / result.weight,
          weight: result.weight
        };
      }
    });
  }
  var init_barycenter = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/barycenter.js"() {
      "use strict";
      init_lodash();
      __name(barycenter, "barycenter");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js
  function resolveConflicts(entries2, cg) {
    var mappedEntries = {};
    forEach_default(entries2, function(entry, i2) {
      var tmp = mappedEntries[entry.v] = {
        indegree: 0,
        in: [],
        out: [],
        vs: [entry.v],
        i: i2
      };
      if (!isUndefined_default(entry.barycenter)) {
        tmp.barycenter = entry.barycenter;
        tmp.weight = entry.weight;
      }
    });
    forEach_default(cg.edges(), function(e3) {
      var entryV = mappedEntries[e3.v];
      var entryW = mappedEntries[e3.w];
      if (!isUndefined_default(entryV) && !isUndefined_default(entryW)) {
        entryW.indegree++;
        entryV.out.push(mappedEntries[e3.w]);
      }
    });
    var sourceSet = filter_default3(mappedEntries, function(entry) {
      return !entry.indegree;
    });
    return doResolveConflicts(sourceSet);
  }
  function doResolveConflicts(sourceSet) {
    var entries2 = [];
    function handleIn(vEntry) {
      return function(uEntry) {
        if (uEntry.merged) {
          return;
        }
        if (isUndefined_default(uEntry.barycenter) || isUndefined_default(vEntry.barycenter) || uEntry.barycenter >= vEntry.barycenter) {
          mergeEntries(vEntry, uEntry);
        }
      };
    }
    __name(handleIn, "handleIn");
    function handleOut(vEntry) {
      return function(wEntry) {
        wEntry["in"].push(vEntry);
        if (--wEntry.indegree === 0) {
          sourceSet.push(wEntry);
        }
      };
    }
    __name(handleOut, "handleOut");
    while (sourceSet.length) {
      var entry = sourceSet.pop();
      entries2.push(entry);
      forEach_default(entry["in"].reverse(), handleIn(entry));
      forEach_default(entry.out, handleOut(entry));
    }
    return map_default(
      filter_default3(entries2, function(entry2) {
        return !entry2.merged;
      }),
      function(entry2) {
        return pick_default(entry2, ["vs", "i", "barycenter", "weight"]);
      }
    );
  }
  function mergeEntries(target, source) {
    var sum2 = 0;
    var weight8 = 0;
    if (target.weight) {
      sum2 += target.barycenter * target.weight;
      weight8 += target.weight;
    }
    if (source.weight) {
      sum2 += source.barycenter * source.weight;
      weight8 += source.weight;
    }
    target.vs = source.vs.concat(target.vs);
    target.barycenter = sum2 / weight8;
    target.weight = weight8;
    target.i = Math.min(source.i, target.i);
    source.merged = true;
  }
  var init_resolve_conflicts = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js"() {
      "use strict";
      init_lodash();
      __name(resolveConflicts, "resolveConflicts");
      __name(doResolveConflicts, "doResolveConflicts");
      __name(mergeEntries, "mergeEntries");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/sort.js
  function sort(entries2, biasRight) {
    var parts = partition(entries2, function(entry) {
      return Object.prototype.hasOwnProperty.call(entry, "barycenter");
    });
    var sortable = parts.lhs, unsortable = sortBy_default(parts.rhs, function(entry) {
      return -entry.i;
    }), vs = [], sum2 = 0, weight8 = 0, vsIndex = 0;
    sortable.sort(compareWithBias(!!biasRight));
    vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
    forEach_default(sortable, function(entry) {
      vsIndex += entry.vs.length;
      vs.push(entry.vs);
      sum2 += entry.barycenter * entry.weight;
      weight8 += entry.weight;
      vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
    });
    var result = { vs: flatten_default(vs) };
    if (weight8) {
      result.barycenter = sum2 / weight8;
      result.weight = weight8;
    }
    return result;
  }
  function consumeUnsortable(vs, unsortable, index) {
    var last4;
    while (unsortable.length && (last4 = last_default(unsortable)).i <= index) {
      unsortable.pop();
      vs.push(last4.vs);
      index++;
    }
    return index;
  }
  function compareWithBias(bias) {
    return function(entryV, entryW) {
      if (entryV.barycenter < entryW.barycenter) {
        return -1;
      } else if (entryV.barycenter > entryW.barycenter) {
        return 1;
      }
      return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;
    };
  }
  var init_sort3 = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/sort.js"() {
      "use strict";
      init_lodash();
      init_util2();
      __name(sort, "sort");
      __name(consumeUnsortable, "consumeUnsortable");
      __name(compareWithBias, "compareWithBias");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js
  function sortSubgraph(g2, v3, cg, biasRight) {
    var movable = g2.children(v3);
    var node2 = g2.node(v3);
    var bl = node2 ? node2.borderLeft : void 0;
    var br = node2 ? node2.borderRight : void 0;
    var subgraphs = {};
    if (bl) {
      movable = filter_default3(movable, function(w4) {
        return w4 !== bl && w4 !== br;
      });
    }
    var barycenters = barycenter(g2, movable);
    forEach_default(barycenters, function(entry) {
      if (g2.children(entry.v).length) {
        var subgraphResult = sortSubgraph(g2, entry.v, cg, biasRight);
        subgraphs[entry.v] = subgraphResult;
        if (Object.prototype.hasOwnProperty.call(subgraphResult, "barycenter")) {
          mergeBarycenters(entry, subgraphResult);
        }
      }
    });
    var entries2 = resolveConflicts(barycenters, cg);
    expandSubgraphs(entries2, subgraphs);
    var result = sort(entries2, biasRight);
    if (bl) {
      result.vs = flatten_default([bl, result.vs, br]);
      if (g2.predecessors(bl).length) {
        var blPred = g2.node(g2.predecessors(bl)[0]), brPred = g2.node(g2.predecessors(br)[0]);
        if (!Object.prototype.hasOwnProperty.call(result, "barycenter")) {
          result.barycenter = 0;
          result.weight = 0;
        }
        result.barycenter = (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);
        result.weight += 2;
      }
    }
    return result;
  }
  function expandSubgraphs(entries2, subgraphs) {
    forEach_default(entries2, function(entry) {
      entry.vs = flatten_default(
        entry.vs.map(function(v3) {
          if (subgraphs[v3]) {
            return subgraphs[v3].vs;
          }
          return v3;
        })
      );
    });
  }
  function mergeBarycenters(target, other) {
    if (!isUndefined_default(target.barycenter)) {
      target.barycenter = (target.barycenter * target.weight + other.barycenter * other.weight) / (target.weight + other.weight);
      target.weight += other.weight;
    } else {
      target.barycenter = other.barycenter;
      target.weight = other.weight;
    }
  }
  var init_sort_subgraph = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js"() {
      "use strict";
      init_lodash();
      init_barycenter();
      init_resolve_conflicts();
      init_sort3();
      __name(sortSubgraph, "sortSubgraph");
      __name(expandSubgraphs, "expandSubgraphs");
      __name(mergeBarycenters, "mergeBarycenters");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/index.js
  function order(g2) {
    var maxRank2 = maxRank(g2), downLayerGraphs = buildLayerGraphs(g2, range_default(1, maxRank2 + 1), "inEdges"), upLayerGraphs = buildLayerGraphs(g2, range_default(maxRank2 - 1, -1, -1), "outEdges");
    var layering = initOrder(g2);
    assignOrder(g2, layering);
    var bestCC = Number.POSITIVE_INFINITY, best;
    for (var i2 = 0, lastBest = 0; lastBest < 4; ++i2, ++lastBest) {
      sweepLayerGraphs(i2 % 2 ? downLayerGraphs : upLayerGraphs, i2 % 4 >= 2);
      layering = buildLayerMatrix(g2);
      var cc2 = crossCount(g2, layering);
      if (cc2 < bestCC) {
        lastBest = 0;
        best = cloneDeep_default(layering);
        bestCC = cc2;
      }
    }
    assignOrder(g2, best);
  }
  function buildLayerGraphs(g2, ranks, relationship) {
    return map_default(ranks, function(rank2) {
      return buildLayerGraph(g2, rank2, relationship);
    });
  }
  function sweepLayerGraphs(layerGraphs, biasRight) {
    var cg = new Graph();
    forEach_default(layerGraphs, function(lg) {
      var root4 = lg.graph().root;
      var sorted = sortSubgraph(lg, root4, cg, biasRight);
      forEach_default(sorted.vs, function(v3, i2) {
        lg.node(v3).order = i2;
      });
      addSubgraphConstraints(lg, cg, sorted.vs);
    });
  }
  function assignOrder(g2, layering) {
    forEach_default(layering, function(layer) {
      forEach_default(layer, function(v3, i2) {
        g2.node(v3).order = i2;
      });
    });
  }
  var init_order2 = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/order/index.js"() {
      "use strict";
      init_lodash();
      init_graphlib();
      init_util2();
      init_add_subgraph_constraints();
      init_build_layer_graph();
      init_cross_count();
      init_init_order();
      init_sort_subgraph();
      __name(order, "order");
      __name(buildLayerGraphs, "buildLayerGraphs");
      __name(sweepLayerGraphs, "sweepLayerGraphs");
      __name(assignOrder, "assignOrder");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js
  function parentDummyChains(g2) {
    var postorderNums = postorder2(g2);
    forEach_default(g2.graph().dummyChains, function(v3) {
      var node2 = g2.node(v3);
      var edgeObj = node2.edgeObj;
      var pathData = findPath(g2, postorderNums, edgeObj.v, edgeObj.w);
      var path4 = pathData.path;
      var lca = pathData.lca;
      var pathIdx = 0;
      var pathV = path4[pathIdx];
      var ascending5 = true;
      while (v3 !== edgeObj.w) {
        node2 = g2.node(v3);
        if (ascending5) {
          while ((pathV = path4[pathIdx]) !== lca && g2.node(pathV).maxRank < node2.rank) {
            pathIdx++;
          }
          if (pathV === lca) {
            ascending5 = false;
          }
        }
        if (!ascending5) {
          while (pathIdx < path4.length - 1 && g2.node(pathV = path4[pathIdx + 1]).minRank <= node2.rank) {
            pathIdx++;
          }
          pathV = path4[pathIdx];
        }
        g2.setParent(v3, pathV);
        v3 = g2.successors(v3)[0];
      }
    });
  }
  function findPath(g2, postorderNums, v3, w4) {
    var vPath = [];
    var wPath = [];
    var low = Math.min(postorderNums[v3].low, postorderNums[w4].low);
    var lim = Math.max(postorderNums[v3].lim, postorderNums[w4].lim);
    var parent4;
    var lca;
    parent4 = v3;
    do {
      parent4 = g2.parent(parent4);
      vPath.push(parent4);
    } while (parent4 && (postorderNums[parent4].low > low || lim > postorderNums[parent4].lim));
    lca = parent4;
    parent4 = w4;
    while ((parent4 = g2.parent(parent4)) !== lca) {
      wPath.push(parent4);
    }
    return { path: vPath.concat(wPath.reverse()), lca };
  }
  function postorder2(g2) {
    var result = {};
    var lim = 0;
    function dfs3(v3) {
      var low = lim;
      forEach_default(g2.children(v3), dfs3);
      result[v3] = { low, lim: lim++ };
    }
    __name(dfs3, "dfs");
    forEach_default(g2.children(), dfs3);
    return result;
  }
  var init_parent_dummy_chains = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js"() {
      "use strict";
      init_lodash();
      __name(parentDummyChains, "parentDummyChains");
      __name(findPath, "findPath");
      __name(postorder2, "postorder");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/position/bk.js
  function findType1Conflicts(g2, layering) {
    var conflicts = {};
    function visitLayer(prevLayer, layer) {
      var k0 = 0, scanPos = 0, prevLayerLength = prevLayer.length, lastNode = last_default(layer);
      forEach_default(layer, function(v3, i2) {
        var w4 = findOtherInnerSegmentNode(g2, v3), k1 = w4 ? g2.node(w4).order : prevLayerLength;
        if (w4 || v3 === lastNode) {
          forEach_default(layer.slice(scanPos, i2 + 1), function(scanNode) {
            forEach_default(g2.predecessors(scanNode), function(u2) {
              var uLabel = g2.node(u2), uPos = uLabel.order;
              if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g2.node(scanNode).dummy)) {
                addConflict(conflicts, u2, scanNode);
              }
            });
          });
          scanPos = i2 + 1;
          k0 = k1;
        }
      });
      return layer;
    }
    __name(visitLayer, "visitLayer");
    reduce_default(layering, visitLayer);
    return conflicts;
  }
  function findType2Conflicts(g2, layering) {
    var conflicts = {};
    function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {
      var v3;
      forEach_default(range_default(southPos, southEnd), function(i2) {
        v3 = south[i2];
        if (g2.node(v3).dummy) {
          forEach_default(g2.predecessors(v3), function(u2) {
            var uNode = g2.node(u2);
            if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {
              addConflict(conflicts, u2, v3);
            }
          });
        }
      });
    }
    __name(scan, "scan");
    function visitLayer(north, south) {
      var prevNorthPos = -1, nextNorthPos, southPos = 0;
      forEach_default(south, function(v3, southLookahead) {
        if (g2.node(v3).dummy === "border") {
          var predecessors = g2.predecessors(v3);
          if (predecessors.length) {
            nextNorthPos = g2.node(predecessors[0]).order;
            scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);
            southPos = southLookahead;
            prevNorthPos = nextNorthPos;
          }
        }
        scan(south, southPos, south.length, nextNorthPos, north.length);
      });
      return south;
    }
    __name(visitLayer, "visitLayer");
    reduce_default(layering, visitLayer);
    return conflicts;
  }
  function findOtherInnerSegmentNode(g2, v3) {
    if (g2.node(v3).dummy) {
      return find_default2(g2.predecessors(v3), function(u2) {
        return g2.node(u2).dummy;
      });
    }
  }
  function addConflict(conflicts, v3, w4) {
    if (v3 > w4) {
      var tmp = v3;
      v3 = w4;
      w4 = tmp;
    }
    if (!Object.prototype.hasOwnProperty.call(conflicts, v3)) {
      Object.defineProperty(conflicts, v3, {
        enumerable: true,
        configurable: true,
        value: {},
        writable: true
      });
    }
    var conflictsV = conflicts[v3];
    Object.defineProperty(conflictsV, w4, {
      enumerable: true,
      configurable: true,
      value: true,
      writable: true
    });
  }
  function hasConflict(conflicts, v3, w4) {
    if (v3 > w4) {
      var tmp = v3;
      v3 = w4;
      w4 = tmp;
    }
    return !!conflicts[v3] && Object.prototype.hasOwnProperty.call(conflicts[v3], w4);
  }
  function verticalAlignment(g2, layering, conflicts, neighborFn) {
    var root4 = {}, align = {}, pos = {};
    forEach_default(layering, function(layer) {
      forEach_default(layer, function(v3, order2) {
        root4[v3] = v3;
        align[v3] = v3;
        pos[v3] = order2;
      });
    });
    forEach_default(layering, function(layer) {
      var prevIdx = -1;
      forEach_default(layer, function(v3) {
        var ws = neighborFn(v3);
        if (ws.length) {
          ws = sortBy_default(ws, function(w5) {
            return pos[w5];
          });
          var mp = (ws.length - 1) / 2;
          for (var i2 = Math.floor(mp), il = Math.ceil(mp); i2 <= il; ++i2) {
            var w4 = ws[i2];
            if (align[v3] === v3 && prevIdx < pos[w4] && !hasConflict(conflicts, v3, w4)) {
              align[w4] = v3;
              align[v3] = root4[v3] = root4[w4];
              prevIdx = pos[w4];
            }
          }
        }
      });
    });
    return { root: root4, align };
  }
  function horizontalCompaction(g2, layering, root4, align, reverseSep) {
    var xs = {}, blockG = buildBlockGraph(g2, layering, root4, reverseSep), borderType = reverseSep ? "borderLeft" : "borderRight";
    function iterate(setXsFunc, nextNodesFunc) {
      var stack = blockG.nodes();
      var elem = stack.pop();
      var visited = {};
      while (elem) {
        if (visited[elem]) {
          setXsFunc(elem);
        } else {
          visited[elem] = true;
          stack.push(elem);
          stack = stack.concat(nextNodesFunc(elem));
        }
        elem = stack.pop();
      }
    }
    __name(iterate, "iterate");
    function pass1(elem) {
      xs[elem] = blockG.inEdges(elem).reduce(function(acc, e3) {
        return Math.max(acc, xs[e3.v] + blockG.edge(e3));
      }, 0);
    }
    __name(pass1, "pass1");
    function pass2(elem) {
      var min10 = blockG.outEdges(elem).reduce(function(acc, e3) {
        return Math.min(acc, xs[e3.w] - blockG.edge(e3));
      }, Number.POSITIVE_INFINITY);
      var node2 = g2.node(elem);
      if (min10 !== Number.POSITIVE_INFINITY && node2.borderType !== borderType) {
        xs[elem] = Math.max(xs[elem], min10);
      }
    }
    __name(pass2, "pass2");
    iterate(pass1, blockG.predecessors.bind(blockG));
    iterate(pass2, blockG.successors.bind(blockG));
    forEach_default(align, function(v3) {
      xs[v3] = xs[root4[v3]];
    });
    return xs;
  }
  function buildBlockGraph(g2, layering, root4, reverseSep) {
    var blockGraph = new Graph(), graphLabel = g2.graph(), sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
    forEach_default(layering, function(layer) {
      var u2;
      forEach_default(layer, function(v3) {
        var vRoot = root4[v3];
        blockGraph.setNode(vRoot);
        if (u2) {
          var uRoot = root4[u2], prevMax = blockGraph.edge(uRoot, vRoot);
          blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g2, v3, u2), prevMax || 0));
        }
        u2 = v3;
      });
    });
    return blockGraph;
  }
  function findSmallestWidthAlignment(g2, xss) {
    return minBy_default(values_default(xss), function(xs) {
      var max10 = Number.NEGATIVE_INFINITY;
      var min10 = Number.POSITIVE_INFINITY;
      forIn_default(xs, function(x5, v3) {
        var halfWidth = width(g2, v3) / 2;
        max10 = Math.max(x5 + halfWidth, max10);
        min10 = Math.min(x5 - halfWidth, min10);
      });
      return max10 - min10;
    });
  }
  function alignCoordinates(xss, alignTo) {
    var alignToVals = values_default(alignTo), alignToMin = min_default(alignToVals), alignToMax = max_default(alignToVals);
    forEach_default(["u", "d"], function(vert) {
      forEach_default(["l", "r"], function(horiz) {
        var alignment = vert + horiz, xs = xss[alignment], delta;
        if (xs === alignTo) return;
        var xsVals = values_default(xs);
        delta = horiz === "l" ? alignToMin - min_default(xsVals) : alignToMax - max_default(xsVals);
        if (delta) {
          xss[alignment] = mapValues_default(xs, function(x5) {
            return x5 + delta;
          });
        }
      });
    });
  }
  function balance(xss, align) {
    return mapValues_default(xss.ul, function(ignore, v3) {
      if (align) {
        return xss[align.toLowerCase()][v3];
      } else {
        var xs = sortBy_default(map_default(xss, v3));
        return (xs[1] + xs[2]) / 2;
      }
    });
  }
  function positionX(g2) {
    var layering = buildLayerMatrix(g2);
    var conflicts = merge_default3(findType1Conflicts(g2, layering), findType2Conflicts(g2, layering));
    var xss = {};
    var adjustedLayering;
    forEach_default(["u", "d"], function(vert) {
      adjustedLayering = vert === "u" ? layering : values_default(layering).reverse();
      forEach_default(["l", "r"], function(horiz) {
        if (horiz === "r") {
          adjustedLayering = map_default(adjustedLayering, function(inner2) {
            return values_default(inner2).reverse();
          });
        }
        var neighborFn = (vert === "u" ? g2.predecessors : g2.successors).bind(g2);
        var align = verticalAlignment(g2, adjustedLayering, conflicts, neighborFn);
        var xs = horizontalCompaction(g2, adjustedLayering, align.root, align.align, horiz === "r");
        if (horiz === "r") {
          xs = mapValues_default(xs, function(x5) {
            return -x5;
          });
        }
        xss[vert + horiz] = xs;
      });
    });
    var smallestWidth = findSmallestWidthAlignment(g2, xss);
    alignCoordinates(xss, smallestWidth);
    return balance(xss, g2.graph().align);
  }
  function sep(nodeSep, edgeSep, reverseSep) {
    return function(g2, v3, w4) {
      var vLabel = g2.node(v3);
      var wLabel = g2.node(w4);
      var sum2 = 0;
      var delta;
      sum2 += vLabel.width / 2;
      if (Object.prototype.hasOwnProperty.call(vLabel, "labelpos")) {
        switch (vLabel.labelpos.toLowerCase()) {
          case "l":
            delta = -vLabel.width / 2;
            break;
          case "r":
            delta = vLabel.width / 2;
            break;
        }
      }
      if (delta) {
        sum2 += reverseSep ? delta : -delta;
      }
      delta = 0;
      sum2 += (vLabel.dummy ? edgeSep : nodeSep) / 2;
      sum2 += (wLabel.dummy ? edgeSep : nodeSep) / 2;
      sum2 += wLabel.width / 2;
      if (Object.prototype.hasOwnProperty.call(wLabel, "labelpos")) {
        switch (wLabel.labelpos.toLowerCase()) {
          case "l":
            delta = wLabel.width / 2;
            break;
          case "r":
            delta = -wLabel.width / 2;
            break;
        }
      }
      if (delta) {
        sum2 += reverseSep ? delta : -delta;
      }
      delta = 0;
      return sum2;
    };
  }
  function width(g2, v3) {
    return g2.node(v3).width;
  }
  var init_bk = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/position/bk.js"() {
      "use strict";
      init_lodash();
      init_graphlib();
      init_util2();
      __name(findType1Conflicts, "findType1Conflicts");
      __name(findType2Conflicts, "findType2Conflicts");
      __name(findOtherInnerSegmentNode, "findOtherInnerSegmentNode");
      __name(addConflict, "addConflict");
      __name(hasConflict, "hasConflict");
      __name(verticalAlignment, "verticalAlignment");
      __name(horizontalCompaction, "horizontalCompaction");
      __name(buildBlockGraph, "buildBlockGraph");
      __name(findSmallestWidthAlignment, "findSmallestWidthAlignment");
      __name(alignCoordinates, "alignCoordinates");
      __name(balance, "balance");
      __name(positionX, "positionX");
      __name(sep, "sep");
      __name(width, "width");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/position/index.js
  function position(g2) {
    g2 = asNonCompoundGraph(g2);
    positionY(g2);
    forOwn_default(positionX(g2), function(x5, v3) {
      g2.node(v3).x = x5;
    });
  }
  function positionY(g2) {
    var layering = buildLayerMatrix(g2);
    var rankSep = g2.graph().ranksep;
    var prevY = 0;
    forEach_default(layering, function(layer) {
      var maxHeight = max_default(
        map_default(layer, function(v3) {
          return g2.node(v3).height;
        })
      );
      forEach_default(layer, function(v3) {
        g2.node(v3).y = prevY + maxHeight / 2;
      });
      prevY += maxHeight + rankSep;
    });
  }
  var init_position = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/position/index.js"() {
      "use strict";
      init_lodash();
      init_util2();
      init_bk();
      __name(position, "position");
      __name(positionY, "positionY");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/layout.js
  function layout(g2, opts) {
    var time4 = opts && opts.debugTiming ? time2 : notime;
    time4("layout", () => {
      var layoutGraph = time4("  buildLayoutGraph", () => buildLayoutGraph(g2));
      time4("  runLayout", () => runLayout(layoutGraph, time4));
      time4("  updateInputGraph", () => updateInputGraph(g2, layoutGraph));
    });
  }
  function runLayout(g2, time4) {
    time4("    makeSpaceForEdgeLabels", () => makeSpaceForEdgeLabels(g2));
    time4("    removeSelfEdges", () => removeSelfEdges(g2));
    time4("    acyclic", () => run(g2));
    time4("    nestingGraph.run", () => run3(g2));
    time4("    rank", () => rank(asNonCompoundGraph(g2)));
    time4("    injectEdgeLabelProxies", () => injectEdgeLabelProxies(g2));
    time4("    removeEmptyRanks", () => removeEmptyRanks(g2));
    time4("    nestingGraph.cleanup", () => cleanup(g2));
    time4("    normalizeRanks", () => normalizeRanks(g2));
    time4("    assignRankMinMax", () => assignRankMinMax(g2));
    time4("    removeEdgeLabelProxies", () => removeEdgeLabelProxies(g2));
    time4("    normalize.run", () => run2(g2));
    time4("    parentDummyChains", () => parentDummyChains(g2));
    time4("    addBorderSegments", () => addBorderSegments(g2));
    time4("    order", () => order(g2));
    time4("    insertSelfEdges", () => insertSelfEdges(g2));
    time4("    adjustCoordinateSystem", () => adjust2(g2));
    time4("    position", () => position(g2));
    time4("    positionSelfEdges", () => positionSelfEdges(g2));
    time4("    removeBorderNodes", () => removeBorderNodes(g2));
    time4("    normalize.undo", () => undo3(g2));
    time4("    fixupEdgeLabelCoords", () => fixupEdgeLabelCoords(g2));
    time4("    undoCoordinateSystem", () => undo2(g2));
    time4("    translateGraph", () => translateGraph(g2));
    time4("    assignNodeIntersects", () => assignNodeIntersects(g2));
    time4("    reversePoints", () => reversePointsForReversedEdges(g2));
    time4("    acyclic.undo", () => undo(g2));
  }
  function updateInputGraph(inputGraph, layoutGraph) {
    forEach_default(inputGraph.nodes(), function(v3) {
      var inputLabel = inputGraph.node(v3);
      var layoutLabel = layoutGraph.node(v3);
      if (inputLabel) {
        inputLabel.x = layoutLabel.x;
        inputLabel.y = layoutLabel.y;
        if (layoutGraph.children(v3).length) {
          inputLabel.width = layoutLabel.width;
          inputLabel.height = layoutLabel.height;
        }
      }
    });
    forEach_default(inputGraph.edges(), function(e3) {
      var inputLabel = inputGraph.edge(e3);
      var layoutLabel = layoutGraph.edge(e3);
      inputLabel.points = layoutLabel.points;
      if (Object.prototype.hasOwnProperty.call(layoutLabel, "x")) {
        inputLabel.x = layoutLabel.x;
        inputLabel.y = layoutLabel.y;
      }
    });
    inputGraph.graph().width = layoutGraph.graph().width;
    inputGraph.graph().height = layoutGraph.graph().height;
  }
  function buildLayoutGraph(inputGraph) {
    var g2 = new Graph({ multigraph: true, compound: true });
    var graph = canonicalize(inputGraph.graph());
    g2.setGraph(
      merge_default3({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick_default(graph, graphAttrs))
    );
    forEach_default(inputGraph.nodes(), function(v3) {
      var node2 = canonicalize(inputGraph.node(v3));
      g2.setNode(v3, defaults_default(selectNumberAttrs(node2, nodeNumAttrs), nodeDefaults));
      g2.setParent(v3, inputGraph.parent(v3));
    });
    forEach_default(inputGraph.edges(), function(e3) {
      var edge = canonicalize(inputGraph.edge(e3));
      g2.setEdge(
        e3,
        merge_default3({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick_default(edge, edgeAttrs))
      );
    });
    return g2;
  }
  function makeSpaceForEdgeLabels(g2) {
    var graph = g2.graph();
    graph.ranksep /= 2;
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      edge.minlen *= 2;
      if (edge.labelpos.toLowerCase() !== "c") {
        if (graph.rankdir === "TB" || graph.rankdir === "BT") {
          edge.width += edge.labeloffset;
        } else {
          edge.height += edge.labeloffset;
        }
      }
    });
  }
  function injectEdgeLabelProxies(g2) {
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      if (edge.width && edge.height) {
        var v3 = g2.node(e3.v);
        var w4 = g2.node(e3.w);
        var label = { rank: (w4.rank - v3.rank) / 2 + v3.rank, e: e3 };
        addDummyNode(g2, "edge-proxy", label, "_ep");
      }
    });
  }
  function assignRankMinMax(g2) {
    var maxRank2 = 0;
    forEach_default(g2.nodes(), function(v3) {
      var node2 = g2.node(v3);
      if (node2.borderTop) {
        node2.minRank = g2.node(node2.borderTop).rank;
        node2.maxRank = g2.node(node2.borderBottom).rank;
        maxRank2 = max_default(maxRank2, node2.maxRank);
      }
    });
    g2.graph().maxRank = maxRank2;
  }
  function removeEdgeLabelProxies(g2) {
    forEach_default(g2.nodes(), function(v3) {
      var node2 = g2.node(v3);
      if (node2.dummy === "edge-proxy") {
        g2.edge(node2.e).labelRank = node2.rank;
        g2.removeNode(v3);
      }
    });
  }
  function translateGraph(g2) {
    var minX = Number.POSITIVE_INFINITY;
    var maxX = 0;
    var minY = Number.POSITIVE_INFINITY;
    var maxY = 0;
    var graphLabel = g2.graph();
    var marginX = graphLabel.marginx || 0;
    var marginY = graphLabel.marginy || 0;
    function getExtremes(attrs) {
      var x5 = attrs.x;
      var y6 = attrs.y;
      var w4 = attrs.width;
      var h3 = attrs.height;
      minX = Math.min(minX, x5 - w4 / 2);
      maxX = Math.max(maxX, x5 + w4 / 2);
      minY = Math.min(minY, y6 - h3 / 2);
      maxY = Math.max(maxY, y6 + h3 / 2);
    }
    __name(getExtremes, "getExtremes");
    forEach_default(g2.nodes(), function(v3) {
      getExtremes(g2.node(v3));
    });
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      if (Object.prototype.hasOwnProperty.call(edge, "x")) {
        getExtremes(edge);
      }
    });
    minX -= marginX;
    minY -= marginY;
    forEach_default(g2.nodes(), function(v3) {
      var node2 = g2.node(v3);
      node2.x -= minX;
      node2.y -= minY;
    });
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      forEach_default(edge.points, function(p3) {
        p3.x -= minX;
        p3.y -= minY;
      });
      if (Object.prototype.hasOwnProperty.call(edge, "x")) {
        edge.x -= minX;
      }
      if (Object.prototype.hasOwnProperty.call(edge, "y")) {
        edge.y -= minY;
      }
    });
    graphLabel.width = maxX - minX + marginX;
    graphLabel.height = maxY - minY + marginY;
  }
  function assignNodeIntersects(g2) {
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      var nodeV = g2.node(e3.v);
      var nodeW = g2.node(e3.w);
      var p1, p22;
      if (!edge.points) {
        edge.points = [];
        p1 = nodeW;
        p22 = nodeV;
      } else {
        p1 = edge.points[0];
        p22 = edge.points[edge.points.length - 1];
      }
      edge.points.unshift(intersectRect2(nodeV, p1));
      edge.points.push(intersectRect2(nodeW, p22));
    });
  }
  function fixupEdgeLabelCoords(g2) {
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      if (Object.prototype.hasOwnProperty.call(edge, "x")) {
        if (edge.labelpos === "l" || edge.labelpos === "r") {
          edge.width -= edge.labeloffset;
        }
        switch (edge.labelpos) {
          case "l":
            edge.x -= edge.width / 2 + edge.labeloffset;
            break;
          case "r":
            edge.x += edge.width / 2 + edge.labeloffset;
            break;
        }
      }
    });
  }
  function reversePointsForReversedEdges(g2) {
    forEach_default(g2.edges(), function(e3) {
      var edge = g2.edge(e3);
      if (edge.reversed) {
        edge.points.reverse();
      }
    });
  }
  function removeBorderNodes(g2) {
    forEach_default(g2.nodes(), function(v3) {
      if (g2.children(v3).length) {
        var node2 = g2.node(v3);
        var t4 = g2.node(node2.borderTop);
        var b3 = g2.node(node2.borderBottom);
        var l4 = g2.node(last_default(node2.borderLeft));
        var r2 = g2.node(last_default(node2.borderRight));
        node2.width = Math.abs(r2.x - l4.x);
        node2.height = Math.abs(b3.y - t4.y);
        node2.x = l4.x + node2.width / 2;
        node2.y = t4.y + node2.height / 2;
      }
    });
    forEach_default(g2.nodes(), function(v3) {
      if (g2.node(v3).dummy === "border") {
        g2.removeNode(v3);
      }
    });
  }
  function removeSelfEdges(g2) {
    forEach_default(g2.edges(), function(e3) {
      if (e3.v === e3.w) {
        var node2 = g2.node(e3.v);
        if (!node2.selfEdges) {
          node2.selfEdges = [];
        }
        node2.selfEdges.push({ e: e3, label: g2.edge(e3) });
        g2.removeEdge(e3);
      }
    });
  }
  function insertSelfEdges(g2) {
    var layers = buildLayerMatrix(g2);
    forEach_default(layers, function(layer) {
      var orderShift = 0;
      forEach_default(layer, function(v3, i2) {
        var node2 = g2.node(v3);
        node2.order = i2 + orderShift;
        forEach_default(node2.selfEdges, function(selfEdge) {
          addDummyNode(
            g2,
            "selfedge",
            {
              width: selfEdge.label.width,
              height: selfEdge.label.height,
              rank: node2.rank,
              order: i2 + ++orderShift,
              e: selfEdge.e,
              label: selfEdge.label
            },
            "_se"
          );
        });
        delete node2.selfEdges;
      });
    });
  }
  function positionSelfEdges(g2) {
    forEach_default(g2.nodes(), function(v3) {
      var node2 = g2.node(v3);
      if (node2.dummy === "selfedge") {
        var selfNode = g2.node(node2.e.v);
        var x5 = selfNode.x + selfNode.width / 2;
        var y6 = selfNode.y;
        var dx = node2.x - x5;
        var dy = selfNode.height / 2;
        g2.setEdge(node2.e, node2.label);
        g2.removeNode(v3);
        node2.label.points = [
          { x: x5 + 2 * dx / 3, y: y6 - dy },
          { x: x5 + 5 * dx / 6, y: y6 - dy },
          { x: x5 + dx, y: y6 },
          { x: x5 + 5 * dx / 6, y: y6 + dy },
          { x: x5 + 2 * dx / 3, y: y6 + dy }
        ];
        node2.label.x = node2.x;
        node2.label.y = node2.y;
      }
    });
  }
  function selectNumberAttrs(obj, attrs) {
    return mapValues_default(pick_default(obj, attrs), Number);
  }
  function canonicalize(attrs) {
    var newAttrs = {};
    forEach_default(attrs, function(v3, k2) {
      newAttrs[k2.toLowerCase()] = v3;
    });
    return newAttrs;
  }
  var graphNumAttrs, graphDefaults, graphAttrs, nodeNumAttrs, nodeDefaults, edgeNumAttrs, edgeDefaults, edgeAttrs;
  var init_layout = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/layout.js"() {
      "use strict";
      init_lodash();
      init_graphlib();
      init_add_border_segments();
      init_coordinate_system();
      init_acyclic();
      init_normalize();
      init_rank();
      init_nesting_graph();
      init_order2();
      init_parent_dummy_chains();
      init_position();
      init_util2();
      __name(layout, "layout");
      __name(runLayout, "runLayout");
      __name(updateInputGraph, "updateInputGraph");
      graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"];
      graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" };
      graphAttrs = ["acyclicer", "ranker", "rankdir", "align"];
      nodeNumAttrs = ["width", "height"];
      nodeDefaults = { width: 0, height: 0 };
      edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"];
      edgeDefaults = {
        minlen: 1,
        weight: 1,
        width: 0,
        height: 0,
        labeloffset: 10,
        labelpos: "r"
      };
      edgeAttrs = ["labelpos"];
      __name(buildLayoutGraph, "buildLayoutGraph");
      __name(makeSpaceForEdgeLabels, "makeSpaceForEdgeLabels");
      __name(injectEdgeLabelProxies, "injectEdgeLabelProxies");
      __name(assignRankMinMax, "assignRankMinMax");
      __name(removeEdgeLabelProxies, "removeEdgeLabelProxies");
      __name(translateGraph, "translateGraph");
      __name(assignNodeIntersects, "assignNodeIntersects");
      __name(fixupEdgeLabelCoords, "fixupEdgeLabelCoords");
      __name(reversePointsForReversedEdges, "reversePointsForReversedEdges");
      __name(removeBorderNodes, "removeBorderNodes");
      __name(removeSelfEdges, "removeSelfEdges");
      __name(insertSelfEdges, "insertSelfEdges");
      __name(positionSelfEdges, "positionSelfEdges");
      __name(selectNumberAttrs, "selectNumberAttrs");
      __name(canonicalize, "canonicalize");
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/index.js
  var init_dagre = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/dagre/index.js"() {
      "use strict";
      init_acyclic();
      init_layout();
      init_normalize();
      init_rank();
    }
  });

  // ../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/json.js
  function write(g2) {
    var json3 = {
      options: {
        directed: g2.isDirected(),
        multigraph: g2.isMultigraph(),
        compound: g2.isCompound()
      },
      nodes: writeNodes(g2),
      edges: writeEdges(g2)
    };
    if (!isUndefined_default(g2.graph())) {
      json3.value = clone_default2(g2.graph());
    }
    return json3;
  }
  function writeNodes(g2) {
    return map_default(g2.nodes(), function(v3) {
      var nodeValue = g2.node(v3);
      var parent4 = g2.parent(v3);
      var node2 = { v: v3 };
      if (!isUndefined_default(nodeValue)) {
        node2.value = nodeValue;
      }
      if (!isUndefined_default(parent4)) {
        node2.parent = parent4;
      }
      return node2;
    });
  }
  function writeEdges(g2) {
    return map_default(g2.edges(), function(e3) {
      var edgeValue = g2.edge(e3);
      var edge = { v: e3.v, w: e3.w };
      if (!isUndefined_default(e3.name)) {
        edge.name = e3.name;
      }
      if (!isUndefined_default(edgeValue)) {
        edge.value = edgeValue;
      }
      return edge;
    });
  }
  var init_json = __esm({
    "../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/json.js"() {
      "use strict";
      init_lodash();
      init_graph();
      __name(write, "write");
      __name(writeNodes, "writeNodes");
      __name(writeEdges, "writeEdges");
    }
  });

  // src/rendering-util/layout-algorithms/dagre/mermaid-graphlib.js
  var clusterDb, descendants, parents, clear6, isDescendant2, edgeInCluster, copy2, extractDescendants, findCommonEdges, findNonClusterChild, getAnchorId, adjustClustersAndEdges, extractor, sorter, sortNodesByHierarchy, isNodeInExtractableCluster, findSafeAnchorNode;
  var init_mermaid_graphlib = __esm({
    "src/rendering-util/layout-algorithms/dagre/mermaid-graphlib.js"() {
      "use strict";
      init_logger();
      init_graphlib();
      init_json();
      clusterDb = /* @__PURE__ */ new Map();
      descendants = /* @__PURE__ */ new Map();
      parents = /* @__PURE__ */ new Map();
      clear6 = /* @__PURE__ */ __name(() => {
        descendants.clear();
        parents.clear();
        clusterDb.clear();
      }, "clear");
      isDescendant2 = /* @__PURE__ */ __name((id41, ancestorId) => {
        const ancestorDescendants = descendants.get(ancestorId) || [];
        log.trace("In isDescendant", ancestorId, " ", id41, " = ", ancestorDescendants.includes(id41));
        return ancestorDescendants.includes(id41);
      }, "isDescendant");
      edgeInCluster = /* @__PURE__ */ __name((edge, clusterId) => {
        const clusterDescendants = descendants.get(clusterId) || [];
        log.info("Descendants of ", clusterId, " is ", clusterDescendants);
        log.info("Edge is ", edge);
        if (edge.v === clusterId || edge.w === clusterId) {
          return false;
        }
        if (!clusterDescendants) {
          log.debug("Tilt, ", clusterId, ",not in descendants");
          return false;
        }
        return clusterDescendants.includes(edge.v) || isDescendant2(edge.v, clusterId) || isDescendant2(edge.w, clusterId) || clusterDescendants.includes(edge.w);
      }, "edgeInCluster");
      copy2 = /* @__PURE__ */ __name((clusterId, graph, newGraph, rootId) => {
        log.warn(
          "Copying children of ",
          clusterId,
          "root",
          rootId,
          "data",
          graph.node(clusterId),
          rootId
        );
        const nodes5 = graph.children(clusterId) || [];
        if (clusterId !== rootId) {
          nodes5.push(clusterId);
        }
        log.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes5);
        nodes5.forEach((node2) => {
          if (graph.children(node2).length > 0) {
            copy2(node2, graph, newGraph, rootId);
          } else {
            const data6 = graph.node(node2);
            log.info("cp ", node2, " to ", rootId, " with parent ", clusterId);
            newGraph.setNode(node2, data6);
            if (rootId !== graph.parent(node2)) {
              log.warn("Setting parent", node2, graph.parent(node2));
              newGraph.setParent(node2, graph.parent(node2));
            }
            if (clusterId !== rootId && node2 !== clusterId) {
              log.debug("Setting parent", node2, clusterId);
              newGraph.setParent(node2, clusterId);
            } else {
              log.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId);
              log.debug(
                "Not Setting parent for node=",
                node2,
                "cluster!==rootId",
                clusterId !== rootId,
                "node!==clusterId",
                node2 !== clusterId
              );
            }
            const edges3 = graph.edges(node2);
            log.debug("Copying Edges", edges3);
            edges3.forEach((edge) => {
              log.info("Edge", edge);
              const data7 = graph.edge(edge.v, edge.w, edge.name);
              log.info("Edge data", data7, rootId);
              try {
                if (edgeInCluster(edge, rootId)) {
                  const rootDescendants = descendants.get(rootId) || [];
                  const vIn = rootDescendants.includes(edge.v) || isDescendant2(edge.v, rootId) || edge.v === rootId;
                  const wIn = rootDescendants.includes(edge.w) || isDescendant2(edge.w, rootId) || edge.w === rootId;
                  if (vIn && wIn) {
                    log.info("Copying as ", edge.v, edge.w, data7, edge.name);
                    newGraph.setEdge(edge.v, edge.w, data7, edge.name);
                    log.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));
                  } else {
                    const newV = vIn ? rootId : edge.v;
                    const newW = wIn ? rootId : edge.w;
                    log.info("Rebinding cross-boundary edge as ", newV, newW, data7, edge.name);
                    graph.setEdge(newV, newW, data7, edge.name);
                  }
                } else {
                  log.info(
                    "Skipping copy of edge ",
                    edge.v,
                    "-->",
                    edge.w,
                    " rootId: ",
                    rootId,
                    " clusterId:",
                    clusterId
                  );
                }
              } catch (e3) {
                log.error(e3);
              }
            });
          }
          log.debug("Removing node", node2);
          graph.removeNode(node2);
        });
      }, "copy");
      extractDescendants = /* @__PURE__ */ __name((id41, graph) => {
        const children2 = graph.children(id41);
        let res = [...children2];
        for (const child of children2) {
          parents.set(child, id41);
          res = [...res, ...extractDescendants(child, graph)];
        }
        return res;
      }, "extractDescendants");
      findCommonEdges = /* @__PURE__ */ __name((graph, id1, id210) => {
        const edges1 = graph.edges().filter((edge) => edge.v === id1 || edge.w === id1);
        const edges22 = graph.edges().filter((edge) => edge.v === id210 || edge.w === id210);
        const edges1Prim = edges1.map((edge) => {
          return { v: edge.v === id1 ? id210 : edge.v, w: edge.w === id1 ? id1 : edge.w };
        });
        const edges2Prim = edges22.map((edge) => {
          return { v: edge.v, w: edge.w };
        });
        const result = edges1Prim.filter((edgeIn1) => {
          return edges2Prim.some((edge) => edgeIn1.v === edge.v && edgeIn1.w === edge.w);
        });
        return result;
      }, "findCommonEdges");
      findNonClusterChild = /* @__PURE__ */ __name((id41, graph, clusterId) => {
        const children2 = graph.children(id41);
        log.trace("Searching children of id ", id41, children2);
        if (children2.length < 1) {
          return id41;
        }
        let reserve;
        for (const child of children2) {
          const _id = findNonClusterChild(child, graph, clusterId);
          const commonEdges = findCommonEdges(graph, clusterId, _id);
          if (_id) {
            if (commonEdges.length > 0) {
              reserve = _id;
            } else {
              return _id;
            }
          }
        }
        return reserve;
      }, "findNonClusterChild");
      getAnchorId = /* @__PURE__ */ __name((id41) => {
        if (!clusterDb.has(id41)) {
          return id41;
        }
        if (!clusterDb.get(id41).externalConnections) {
          return id41;
        }
        if (clusterDb.has(id41)) {
          return clusterDb.get(id41).id;
        }
        return id41;
      }, "getAnchorId");
      adjustClustersAndEdges = /* @__PURE__ */ __name((graph, depth) => {
        if (!graph || depth > 10) {
          log.debug("Opting out, no graph ");
          return;
        } else {
          log.debug("Opting in, graph ");
        }
        graph.nodes().forEach(function(id41) {
          const children2 = graph.children(id41);
          if (children2.length > 0) {
            log.warn(
              "Cluster identified",
              id41,
              " Replacement id in edges: ",
              findNonClusterChild(id41, graph, id41)
            );
            descendants.set(id41, extractDescendants(id41, graph));
            clusterDb.set(id41, { id: findNonClusterChild(id41, graph, id41), clusterData: graph.node(id41) });
          }
        });
        graph.nodes().forEach(function(id41) {
          const children2 = graph.children(id41);
          const edges3 = graph.edges();
          if (children2.length > 0) {
            log.debug("Cluster identified", id41, descendants);
            edges3.forEach((edge) => {
              const d1 = isDescendant2(edge.v, id41);
              const d22 = isDescendant2(edge.w, id41);
              if (d1 ^ d22) {
                log.warn("Edge: ", edge, " leaves cluster ", id41);
                log.warn("Descendants of XXX ", id41, ": ", descendants.get(id41));
                clusterDb.get(id41).externalConnections = true;
              }
            });
          } else {
            log.debug("Not a cluster ", id41, descendants);
          }
        });
        for (let id41 of clusterDb.keys()) {
          const nonClusterChild = clusterDb.get(id41).id;
          const parent4 = graph.parent(nonClusterChild);
          if (parent4 !== id41 && clusterDb.has(parent4) && !clusterDb.get(parent4).externalConnections) {
            clusterDb.get(id41).id = parent4;
          }
          const hasDirectOutgoingEdge = graph.edges().some((edge) => edge.v === id41);
          if (nonClusterChild && clusterDb.get(id41)?.externalConnections && hasDirectOutgoingEdge && isNodeInExtractableCluster(graph, nonClusterChild, id41)) {
            const safeAnchor = findSafeAnchorNode(graph, id41, graph.parent(nonClusterChild));
            if (safeAnchor) {
              clusterDb.get(id41).id = safeAnchor;
            }
          }
        }
        graph.edges().forEach(function(e3) {
          const edge = graph.edge(e3);
          log.warn("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(e3));
          log.warn("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(graph.edge(e3)));
          let v3 = e3.v;
          let w4 = e3.w;
          log.warn(
            "Fix XXX",
            clusterDb,
            "ids:",
            e3.v,
            e3.w,
            "Translating: ",
            clusterDb.get(e3.v),
            " --- ",
            clusterDb.get(e3.w)
          );
          if (clusterDb.get(e3.v) || clusterDb.get(e3.w)) {
            log.warn("Fixing and trying - removing XXX", e3.v, e3.w, e3.name);
            v3 = getAnchorId(e3.v);
            w4 = getAnchorId(e3.w);
            graph.removeEdge(e3.v, e3.w, e3.name);
            if (v3 !== e3.v) {
              const parent4 = graph.parent(v3);
              clusterDb.get(parent4).externalConnections = true;
              edge.fromCluster = e3.v;
            }
            if (w4 !== e3.w) {
              const parent4 = graph.parent(w4);
              clusterDb.get(parent4).externalConnections = true;
              edge.toCluster = e3.w;
            }
            log.warn("Fix Replacing with XXX", v3, w4, e3.name);
            graph.setEdge(v3, w4, edge, e3.name);
          }
        });
        log.warn("Adjusted Graph", write(graph));
        extractor(graph, 0);
        log.trace(clusterDb);
      }, "adjustClustersAndEdges");
      extractor = /* @__PURE__ */ __name((graph, depth) => {
        log.warn("extractor - ", depth, write(graph), graph.children("D"));
        if (depth > 10) {
          log.error("Bailing out");
          return;
        }
        let nodes5 = graph.nodes();
        let hasChildren = false;
        for (const node2 of nodes5) {
          const children2 = graph.children(node2);
          hasChildren = hasChildren || children2.length > 0;
        }
        if (!hasChildren) {
          log.debug("Done, no node has children", graph.nodes());
          return;
        }
        log.debug("Nodes = ", nodes5, depth);
        for (const node2 of nodes5) {
          log.debug(
            "Extracting node",
            node2,
            clusterDb,
            clusterDb.has(node2) && !clusterDb.get(node2).externalConnections,
            !graph.parent(node2),
            graph.node(node2),
            graph.children("D"),
            " Depth ",
            depth
          );
          if (!clusterDb.has(node2)) {
            log.debug("Not a cluster", node2, depth);
          } else if (clusterDb.get(node2)?.clusterData?.explicitDir && graph.children(node2) && graph.children(node2).length > 0) {
            log.warn("Cluster with explicit dir, creating subgraph for children", node2, depth);
            const dir2 = clusterDb.get(node2).clusterData.dir;
            const clusterGraph = new Graph({
              multigraph: true,
              compound: true
            }).setGraph({
              rankdir: dir2,
              nodesep: 50,
              ranksep: 50,
              marginx: 8,
              marginy: 8
            }).setDefaultEdgeLabel(function() {
              return {};
            });
            copy2(node2, graph, clusterGraph, node2);
            const clusterNodeData = graph.node(node2) || {};
            graph.setNode(node2, {
              ...clusterNodeData,
              clusterNode: true,
              id: node2,
              clusterData: clusterDb.get(node2).clusterData,
              label: clusterDb.get(node2).label,
              graph: clusterGraph
            });
            log.warn(
              "Subgraph for cluster with explicit dir created:",
              node2,
              write(clusterGraph)
            );
          } else if (!clusterDb.get(node2).externalConnections && graph.children(node2) && graph.children(node2).length > 0) {
            log.warn(
              "Cluster without external connections, without a parent and with children",
              node2,
              depth
            );
            const graphSettings = graph.graph();
            let dir2 = graphSettings.rankdir === "TB" ? "LR" : "TB";
            if (clusterDb.get(node2)?.clusterData?.dir) {
              dir2 = clusterDb.get(node2).clusterData.dir;
              log.warn("Fixing dir", clusterDb.get(node2).clusterData.dir, dir2);
            }
            const clusterGraph = new Graph({
              multigraph: true,
              compound: true
            }).setGraph({
              rankdir: dir2,
              nodesep: 50,
              ranksep: 50,
              marginx: 8,
              marginy: 8
            }).setDefaultEdgeLabel(function() {
              return {};
            });
            copy2(node2, graph, clusterGraph, node2);
            const clusterNodeData = graph.node(node2) || {};
            graph.setNode(node2, {
              ...clusterNodeData,
              clusterNode: true,
              id: node2,
              clusterData: clusterDb.get(node2).clusterData,
              label: clusterDb.get(node2).label,
              graph: clusterGraph
            });
            log.debug("Old graph after copy", write(graph));
          } else {
            log.warn(
              "Cluster ** ",
              node2,
              " **not meeting the criteria !externalConnections:",
              !clusterDb.get(node2).externalConnections,
              " no parent: ",
              !graph.parent(node2),
              " children ",
              graph.children(node2) && graph.children(node2).length > 0,
              graph.children("D"),
              depth
            );
            log.debug(clusterDb);
          }
        }
        nodes5 = graph.nodes();
        log.warn("New list of nodes", nodes5);
        for (const node2 of nodes5) {
          const data6 = graph.node(node2);
          log.warn(" Now next level", node2, data6);
          if (data6?.clusterNode) {
            extractor(data6.graph, depth + 1);
          }
        }
      }, "extractor");
      sorter = /* @__PURE__ */ __name((graph, nodes5) => {
        if (nodes5.length === 0) {
          return [];
        }
        let result = Object.assign([], nodes5);
        nodes5.forEach((node2) => {
          const children2 = graph.children(node2);
          const sorted = sorter(graph, children2);
          result = [...result, ...sorted];
        });
        return result;
      }, "sorter");
      sortNodesByHierarchy = /* @__PURE__ */ __name((graph) => sorter(graph, graph.children()), "sortNodesByHierarchy");
      isNodeInExtractableCluster = /* @__PURE__ */ __name((graph, node2, rootId) => {
        let parent4 = graph.parent(node2);
        while (parent4 && parent4 !== rootId) {
          const cluster = clusterDb.get(parent4);
          if (cluster && !cluster.externalConnections) {
            return true;
          }
          parent4 = graph.parent(parent4);
        }
        return false;
      }, "isNodeInExtractableCluster");
      findSafeAnchorNode = /* @__PURE__ */ __name((graph, clusterId, excludedCluster) => {
        const children2 = graph.children(clusterId) ?? [];
        for (const child of children2) {
          if (child === excludedCluster || isDescendant2(child, excludedCluster)) {
            continue;
          }
          const candidate = findNonClusterChild(child, graph, clusterId);
          if (!candidate) {
            continue;
          }
          if (!isNodeInExtractableCluster(graph, candidate, clusterId)) {
            return candidate;
          }
        }
        return null;
      }, "findSafeAnchorNode");
    }
  });

  // src/rendering-util/layout-algorithms/dagre/index.js
  var dagre_exports = {};
  __export(dagre_exports, {
    getEdgesToRender: () => getEdgesToRender,
    render: () => render3
  });
  var clamp, getDefaultSelfLoopSide, shouldMergeSelfLoopSegments, getSelfLoopSide, getSelfLoopPoints, getSelfLoopLabelPosition, getEdgesToRender, recursiveRender, render3;
  var init_dagre2 = __esm({
    "src/rendering-util/layout-algorithms/dagre/index.js"() {
      "use strict";
      init_dagre();
      init_json();
      init_graphlib();
      init_markers();
      init_util();
      init_mermaid_graphlib();
      init_nodes2();
      init_clusters();
      init_edges();
      init_logger();
      init_subGraphTitleMargins();
      init_diagramAPI();
      clamp = /* @__PURE__ */ __name((value2, min10, max10) => Math.max(min10, Math.min(max10, value2)), "clamp");
      getDefaultSelfLoopSide = /* @__PURE__ */ __name((rankdir = "TB") => {
        switch (rankdir) {
          case "BT":
            return "bottom";
          case "LR":
            return "right";
          case "RL":
            return "left";
          case "TB":
          default:
            return "top";
        }
      }, "getDefaultSelfLoopSide");
      shouldMergeSelfLoopSegments = /* @__PURE__ */ __name((diagramType) => diagramType === "flowchart" || diagramType === "flowchart-v2" || diagramType === "stateDiagram", "shouldMergeSelfLoopSegments");
      getSelfLoopSide = /* @__PURE__ */ __name((graph, node2, segments, originalNodeId, rankdir) => {
        const layoutHints = [];
        const dummyNodeIds = /* @__PURE__ */ new Set();
        segments.forEach(({ start: start3, end: end2 }) => {
          if (start3 !== originalNodeId) {
            dummyNodeIds.add(start3);
          }
          if (end2 !== originalNodeId) {
            dummyNodeIds.add(end2);
          }
        });
        dummyNodeIds.forEach((id41) => {
          const dummyNode = graph.node(id41);
          if (typeof dummyNode?.x === "number" && typeof dummyNode?.y === "number") {
            layoutHints.push(dummyNode);
          }
        });
        if (layoutHints.length === 0) {
          segments.forEach(({ edge }) => {
            (edge.points ?? []).forEach((point8) => {
              if (typeof point8?.x === "number" && typeof point8?.y === "number") {
                layoutHints.push(point8);
              }
            });
          });
        }
        if (layoutHints.length === 0) {
          return getDefaultSelfLoopSide(rankdir);
        }
        const center4 = layoutHints.reduce(
          (acc, point8) => ({
            x: acc.x + point8.x / layoutHints.length,
            y: acc.y + point8.y / layoutHints.length
          }),
          { x: 0, y: 0 }
        );
        const dx = center4.x - node2.x;
        const dy = center4.y - node2.y;
        if (Math.abs(dx) > Math.abs(dy)) {
          return dx > 0 ? "right" : "left";
        }
        if (Math.abs(dy) > 0) {
          return dy > 0 ? "bottom" : "top";
        }
        return getDefaultSelfLoopSide(rankdir);
      }, "getSelfLoopSide");
      getSelfLoopPoints = /* @__PURE__ */ __name((node2, side = "top", yOffset = 0, labelWidth = 0) => {
        const x5 = node2.x;
        const y6 = node2.y - yOffset;
        const halfWidth = node2.width / 2;
        const halfHeight = node2.height / 2;
        const maxSpan = Math.max(36, Math.min(100, node2.width * 0.8));
        const span = clamp(Math.max(labelWidth, node2.width * 0.35), 36, maxSpan);
        const depth = clamp(Math.min(node2.width, node2.height) * 0.45, 24, 48);
        switch (side) {
          case "bottom": {
            const bottom2 = y6 + halfHeight;
            return [
              { x: x5 - span / 2, y: bottom2 },
              { x: x5 - span / 2, y: bottom2 + depth },
              { x: x5 + span / 2, y: bottom2 + depth },
              { x: x5 + span / 2, y: bottom2 }
            ];
          }
          case "right": {
            const right3 = x5 + halfWidth;
            return [
              { x: right3, y: y6 - span / 2 },
              { x: right3 + depth, y: y6 - span / 2 },
              { x: right3 + depth, y: y6 + span / 2 },
              { x: right3, y: y6 + span / 2 }
            ];
          }
          case "left": {
            const left3 = x5 - halfWidth;
            return [
              { x: left3, y: y6 - span / 2 },
              { x: left3 - depth, y: y6 - span / 2 },
              { x: left3 - depth, y: y6 + span / 2 },
              { x: left3, y: y6 + span / 2 }
            ];
          }
          case "top":
          default: {
            const top2 = y6 - halfHeight;
            return [
              { x: x5 - span / 2, y: top2 },
              { x: x5 - span / 2, y: top2 - depth },
              { x: x5 + span / 2, y: top2 - depth },
              { x: x5 + span / 2, y: top2 }
            ];
          }
        }
      }, "getSelfLoopPoints");
      getSelfLoopLabelPosition = /* @__PURE__ */ __name((node2, points, side = "top", yOffset = 0, label = {}) => {
        const gap = 4;
        const x5 = node2.x;
        const y6 = node2.y - yOffset;
        const labelWidth = label.width ?? 0;
        const labelHeight = label.height ?? 0;
        switch (side) {
          case "bottom":
            return { x: x5, y: Math.max(...points.map((point8) => point8.y)) + labelHeight / 2 + gap };
          case "right":
            return { x: Math.max(...points.map((point8) => point8.x)) + labelWidth / 2 + gap, y: y6 };
          case "left":
            return { x: Math.min(...points.map((point8) => point8.x)) - labelWidth / 2 - gap, y: y6 };
          case "top":
          default:
            return { x: x5, y: Math.min(...points.map((point8) => point8.y)) - labelHeight / 2 - gap };
        }
      }, "getSelfLoopLabelPosition");
      getEdgesToRender = /* @__PURE__ */ __name((graph, yOffset = 0, { mergeSelfLoops = true } = {}) => {
        const selfLoopEdgeGroups = /* @__PURE__ */ new Map();
        const edgesToRender = [];
        const rankdir = graph.graph()?.rankdir;
        graph.edges().forEach((e3) => {
          const edge = graph.edge(e3);
          if (mergeSelfLoops && edge.selfLoop) {
            const key = edge.selfLoop.id;
            if (!selfLoopEdgeGroups.has(key)) {
              selfLoopEdgeGroups.set(key, []);
            }
            selfLoopEdgeGroups.get(key).push({ edge, start: e3.v, end: e3.w });
          } else {
            edgesToRender.push({ edge, start: e3.v, end: e3.w });
          }
        });
        selfLoopEdgeGroups.forEach((segments) => {
          if (segments.length !== 3) {
            segments.forEach((segment) => edgesToRender.push(segment));
            return;
          }
          segments.sort((a2, b3) => a2.edge.selfLoop.order - b3.edge.selfLoop.order);
          const [firstSegment, middleSegment, lastSegment] = segments;
          const originalEdge = firstSegment.edge.originalEdge ?? middleSegment.edge.originalEdge ?? lastSegment.edge.originalEdge ?? middleSegment.edge;
          const node2 = graph.node(originalEdge.start);
          if (!node2) {
            segments.forEach((segment) => edgesToRender.push(segment));
            return;
          }
          const label = {
            width: middleSegment.edge.width,
            height: middleSegment.edge.height
          };
          const side = getSelfLoopSide(graph, node2, segments, originalEdge.start, rankdir);
          const points = getSelfLoopPoints(node2, side, yOffset, label.width ?? 0);
          const labelPosition = getSelfLoopLabelPosition(node2, points, side, yOffset, label);
          const mergedEdge = {
            ...middleSegment.edge,
            ...originalEdge,
            id: originalEdge.id,
            points,
            start: originalEdge.start,
            end: originalEdge.end,
            x: labelPosition.x,
            y: labelPosition.y,
            width: label.width,
            height: label.height,
            labelStyle: middleSegment.edge.labelStyle,
            fromCluster: firstSegment.edge.fromCluster ?? middleSegment.edge.fromCluster ?? lastSegment.edge.fromCluster,
            toCluster: firstSegment.edge.toCluster ?? middleSegment.edge.toCluster ?? lastSegment.edge.toCluster
          };
          delete mergedEdge.selfLoop;
          delete mergedEdge.originalEdge;
          edgesToRender.push({ edge: mergedEdge, start: mergedEdge.start, end: mergedEdge.end });
        });
        return edgesToRender;
      }, "getEdgesToRender");
      recursiveRender = /* @__PURE__ */ __name(async (_elem, graph, diagramType, id41, parentCluster, siteConfig2) => {
        log.warn("Graph in recursive render:XAX", write(graph), parentCluster);
        const dir2 = graph.graph().rankdir;
        log.trace("Dir in recursive render - dir:", dir2);
        const elem = _elem.insert("g").attr("class", "root");
        if (!graph.nodes()) {
          log.info("No nodes found for", graph);
        } else {
          log.info("Recursive render XXX", graph.nodes());
        }
        if (graph.edges().length > 0) {
          log.info("Recursive edges", graph.edge(graph.edges()[0]));
        }
        const clusters = elem.insert("g").attr("class", "clusters");
        const edgePaths = elem.insert("g").attr("class", "edgePaths");
        const edgeLabels3 = elem.insert("g").attr("class", "edgeLabels");
        const nodes5 = elem.insert("g").attr("class", "nodes");
        const mergeSelfLoops = shouldMergeSelfLoopSegments(diagramType);
        await Promise.all(
          graph.nodes().map(async function(v3) {
            const node2 = graph.node(v3);
            if (parentCluster !== void 0) {
              const data6 = JSON.parse(JSON.stringify(parentCluster.clusterData));
              log.trace(
                "Setting data for parent cluster XXX\n Node.id = ",
                v3,
                "\n data=",
                data6.height,
                "\nParent cluster",
                parentCluster.height
              );
              graph.setNode(parentCluster.id, data6);
              if (!graph.parent(v3)) {
                log.trace("Setting parent", v3, parentCluster.id);
                graph.setParent(v3, parentCluster.id, data6);
              }
            }
            log.info("(Insert) Node XXX" + v3 + ": " + JSON.stringify(graph.node(v3)));
            if (node2?.clusterNode) {
              log.info("Cluster identified XBX", v3, node2.width, graph.node(v3));
              const { ranksep, nodesep } = graph.graph();
              node2.graph.setGraph({
                ...node2.graph.graph(),
                ranksep: ranksep + 25,
                nodesep
              });
              const o2 = await recursiveRender(
                nodes5,
                node2.graph,
                diagramType,
                id41,
                graph.node(v3),
                siteConfig2
              );
              const newEl = o2.elem;
              updateNodeBounds(node2, newEl);
              node2.diff = o2.diff || 0;
              log.info(
                "New compound node after recursive render XAX",
                v3,
                "width",
                // node,
                node2.width,
                "height",
                node2.height
                // node.x,
                // node.y
              );
              setNodeElem(newEl, node2);
            } else {
              if (graph.children(v3).length > 0) {
                log.trace(
                  "Cluster - the non recursive path XBX",
                  v3,
                  node2.id,
                  node2,
                  node2.width,
                  "Graph:",
                  graph
                );
                log.trace(findNonClusterChild(node2.id, graph));
                clusterDb.set(node2.id, { id: findNonClusterChild(node2.id, graph), node: node2 });
              } else {
                log.trace("Node - the non recursive path XAX", v3, nodes5, graph.node(v3), dir2);
                await insertNode(nodes5, graph.node(v3), { config: siteConfig2, dir: dir2 });
              }
            }
          })
        );
        const processEdges = /* @__PURE__ */ __name(async () => {
          const edgePromises = graph.edges().map(async function(e3) {
            const edge = graph.edge(e3.v, e3.w, e3.name);
            log.info("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(e3));
            log.info("Edge " + e3.v + " -> " + e3.w + ": ", e3, " ", JSON.stringify(graph.edge(e3)));
            log.info(
              "Fix",
              clusterDb,
              "ids:",
              e3.v,
              e3.w,
              "Translating: ",
              clusterDb.get(e3.v),
              clusterDb.get(e3.w)
            );
            if (mergeSelfLoops && edge.selfLoop) {
              if (edge.selfLoop.order !== 1) {
                return;
              }
              const segmentId = edge.id;
              edge.id = edge.selfLoop.id;
              await insertEdgeLabel(edgeLabels3, edge);
              edge.id = segmentId;
              return;
            }
            await insertEdgeLabel(edgeLabels3, edge);
          });
          await Promise.all(edgePromises);
        }, "processEdges");
        await processEdges();
        log.info("Graph before layout:", JSON.stringify(write(graph)));
        log.info("############################################# XXX");
        log.info("###                Layout                 ### XXX");
        log.info("############################################# XXX");
        layout(graph);
        log.info("Graph after layout:", JSON.stringify(write(graph)));
        let diff2 = 0;
        let { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig2);
        await Promise.all(
          sortNodesByHierarchy(graph).map(async function(v3) {
            const node2 = graph.node(v3);
            log.info(
              "Position XBX => " + v3 + ": (" + node2.x,
              "," + node2.y,
              ") width: ",
              node2.width,
              " height: ",
              node2.height
            );
            if (node2?.clusterNode) {
              node2.y += subGraphTitleTotalMargin;
              log.info(
                "A tainted cluster node XBX1",
                v3,
                node2.id,
                node2.width,
                node2.height,
                node2.x,
                node2.y,
                graph.parent(v3)
              );
              clusterDb.get(node2.id).node = node2;
              positionNode(node2);
            } else {
              if (graph.children(v3).length > 0) {
                log.info(
                  "A pure cluster node XBX1",
                  v3,
                  node2.id,
                  node2.x,
                  node2.y,
                  node2.width,
                  node2.height,
                  graph.parent(v3)
                );
                node2.height += subGraphTitleTotalMargin;
                graph.node(node2.parentId);
                const halfPadding = node2?.padding / 2 || 0;
                const labelHeight = node2?.labelBBox?.height || 0;
                const offsetY = labelHeight - halfPadding || 0;
                log.debug("OffsetY", offsetY, "labelHeight", labelHeight, "halfPadding", halfPadding);
                await insertCluster(clusters, node2);
                clusterDb.get(node2.id).node = node2;
              } else {
                const parent4 = graph.node(node2.parentId);
                node2.y += subGraphTitleTotalMargin / 2;
                log.info(
                  "A regular node XBX1 - using the padding",
                  node2.id,
                  "parent",
                  node2.parentId,
                  node2.width,
                  node2.height,
                  node2.x,
                  node2.y,
                  "offsetY",
                  node2.offsetY,
                  "parent",
                  parent4,
                  parent4?.offsetY,
                  node2
                );
                positionNode(node2);
              }
            }
          })
        );
        const edgeOffsetY = subGraphTitleTotalMargin / 2;
        const edgesToRender = getEdgesToRender(graph, edgeOffsetY, { mergeSelfLoops });
        edgesToRender.forEach(function({ edge, start: start3, end: end2 }) {
          log.info("Edge " + start3 + " -> " + end2 + ": " + JSON.stringify(edge), edge);
          edge.points.forEach((point8) => point8.y += edgeOffsetY);
          const startNode = graph.node(start3);
          const endNode = graph.node(end2);
          const paths = insertEdge(edgePaths, edge, clusterDb, diagramType, startNode, endNode, id41);
          positionEdgeLabel(edge, paths);
        });
        graph.nodes().forEach(function(v3) {
          const n2 = graph.node(v3);
          log.info(v3, n2.type, n2.diff);
          if (n2.isGroup) {
            diff2 = n2.diff;
          }
        });
        log.warn("Returning from recursive render XAX", elem, diff2);
        return { elem, diff: diff2 };
      }, "recursiveRender");
      render3 = /* @__PURE__ */ __name(async (data4Layout, svg2) => {
        const graph = new Graph({
          multigraph: true,
          compound: true
        }).setGraph({
          rankdir: data4Layout.direction,
          nodesep: data4Layout.config?.nodeSpacing || data4Layout.config?.flowchart?.nodeSpacing || data4Layout.nodeSpacing,
          ranksep: data4Layout.config?.rankSpacing || data4Layout.config?.flowchart?.rankSpacing || data4Layout.rankSpacing,
          marginx: 8,
          marginy: 8
        }).setDefaultEdgeLabel(function() {
          return {};
        });
        const element3 = svg2.select("g");
        markers_default(element3, data4Layout.markers, data4Layout.type, data4Layout.diagramId);
        clear5();
        clear4();
        clear3();
        clear6();
        data4Layout.nodes.forEach((node2) => {
          graph.setNode(node2.id, { ...node2 });
          if (node2.parentId) {
            graph.setParent(node2.id, node2.parentId);
          }
        });
        log.debug("Edges:", data4Layout.edges);
        data4Layout.edges.forEach((edge) => {
          if (edge.start === edge.end) {
            const nodeId = edge.start;
            const specialId1 = nodeId + "---" + nodeId + "---1";
            const specialId2 = nodeId + "---" + nodeId + "---2";
            const node2 = graph.node(nodeId);
            graph.setNode(specialId1, {
              domId: specialId1,
              id: specialId1,
              parentId: node2.parentId,
              labelStyle: "",
              label: "",
              padding: 0,
              shape: "labelRect",
              // shape: 'rect',
              style: "",
              width: 10,
              height: 10
            });
            graph.setParent(specialId1, node2.parentId);
            graph.setNode(specialId2, {
              domId: specialId2,
              id: specialId2,
              parentId: node2.parentId,
              labelStyle: "",
              padding: 0,
              // shape: 'rect',
              shape: "labelRect",
              label: "",
              style: "",
              width: 10,
              height: 10
            });
            graph.setParent(specialId2, node2.parentId);
            const originalEdge = structuredClone(edge);
            const edge1 = structuredClone(edge);
            const edgeMid = structuredClone(edge);
            const edge2 = structuredClone(edge);
            edge1.originalEdge = originalEdge;
            edge1.selfLoop = { id: originalEdge.id, order: 0 };
            edgeMid.originalEdge = originalEdge;
            edgeMid.selfLoop = { id: originalEdge.id, order: 1 };
            edge2.originalEdge = originalEdge;
            edge2.selfLoop = { id: originalEdge.id, order: 2 };
            edge1.label = "";
            edge1.arrowTypeEnd = "none";
            edge1.endLabelLeft = "";
            edge1.endLabelRight = "";
            edge1.startLabelLeft = "";
            edge1.id = nodeId + "-cyclic-special-1";
            edgeMid.startLabelRight = "";
            edgeMid.startLabelLeft = "";
            edgeMid.endLabelLeft = "";
            edgeMid.endLabelRight = "";
            edgeMid.arrowTypeStart = "none";
            edgeMid.arrowTypeEnd = "none";
            edgeMid.id = nodeId + "-cyclic-special-mid";
            edge2.label = "";
            edge2.startLabelRight = "";
            edge2.startLabelLeft = "";
            edge2.arrowTypeStart = "none";
            if (node2.isGroup) {
              edge1.fromCluster = nodeId;
              edge2.toCluster = nodeId;
            }
            edge2.id = nodeId + "-cyclic-special-2";
            edge2.arrowTypeStart = "none";
            graph.setEdge(nodeId, specialId1, edge1, nodeId + "-cyclic-special-0");
            graph.setEdge(specialId1, specialId2, edgeMid, nodeId + "-cyclic-special-1");
            graph.setEdge(specialId2, nodeId, edge2, nodeId + "-cyclic-special-2");
          } else {
            graph.setEdge(edge.start, edge.end, { ...edge }, edge.id);
          }
        });
        log.warn("Graph at first:", JSON.stringify(write(graph)));
        adjustClustersAndEdges(graph);
        log.warn("Graph after XAX:", JSON.stringify(write(graph)));
        const siteConfig2 = getConfig2();
        await recursiveRender(
          element3,
          graph,
          data4Layout.type,
          data4Layout.diagramId,
          void 0,
          siteConfig2
        );
      }, "render");
    }
  });

  // src/rendering-util/layout-algorithms/ddlt/captureContract.ts
  var DDLT_SIZE_CAPTURE_VERSION;
  var init_captureContract = __esm({
    "src/rendering-util/layout-algorithms/ddlt/captureContract.ts"() {
      "use strict";
      DDLT_SIZE_CAPTURE_VERSION = 1;
    }
  });

  // src/rendering-util/layout-algorithms/ddlt/sizeCapture.ts
  var sizeCapture_exports = {};
  __export(sizeCapture_exports, {
    captureNodeSizes: () => captureNodeSizes,
    shouldCaptureSizes: () => shouldCaptureSizes
  });
  function getCaptureGlobal() {
    if (typeof globalThis === "undefined") {
      return void 0;
    }
    return globalThis;
  }
  function shouldCaptureSizes() {
    return Boolean(getCaptureGlobal()?.mermaidCaptureSizes);
  }
  function capturedFromLocation() {
    if (typeof location === "undefined") {
      return "browser-dev";
    }
    return `${location.pathname}${location.search}`;
  }
  function emitCapturedSizes(captured, element3) {
    const g2 = getCaptureGlobal();
    if (!g2) {
      return;
    }
    const domNode = element3.node();
    const ownerSvg = (domNode && "ownerSVGElement" in domNode ? domNode.ownerSVGElement : null) ?? domNode;
    const svgId = ownerSvg?.id ?? "(unknown)";
    g2.mermaidCapturedSizes ??= [];
    const entry = { svgId, sizes: captured };
    g2.mermaidCapturedSizes.push(entry);
    g2.mermaidLastCapturedSizes = entry;
  }
  function captureNodeSizes(element3, data4Layout) {
    const nodes5 = [];
    for (const node2 of data4Layout.nodes) {
      if (node2.isGroup) {
        continue;
      }
      nodes5.push({ id: node2.id, width: node2.width ?? 0, height: node2.height ?? 0 });
    }
    if (nodes5.length === 0) {
      return;
    }
    emitCapturedSizes(
      {
        metadata: {
          captureVersion: DDLT_SIZE_CAPTURE_VERSION,
          capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
          capturedFrom: capturedFromLocation()
        },
        nodes: nodes5
      },
      element3
    );
  }
  var init_sizeCapture = __esm({
    "src/rendering-util/layout-algorithms/ddlt/sizeCapture.ts"() {
      "use strict";
      init_captureContract();
      __name(getCaptureGlobal, "getCaptureGlobal");
      __name(shouldCaptureSizes, "shouldCaptureSizes");
      __name(capturedFromLocation, "capturedFromLocation");
      __name(emitCapturedSizes, "emitCapturedSizes");
      __name(captureNodeSizes, "captureNodeSizes");
    }
  });

  // src/rendering-util/createGraph.ts
  async function createGraphWithElements(element3, data4Layout) {
    const graph = new Graph({
      multigraph: true,
      compound: true
    });
    const edgesToProcess = [...data4Layout.edges];
    const config3 = getConfig2();
    const rootGroups = element3.insert("g").attr("class", "root");
    const clusters = rootGroups.insert("g").attr("class", "clusters");
    const edgePaths = rootGroups.insert("g").attr("class", "edges edgePath");
    const edgeLabels3 = rootGroups.insert("g").attr("class", "edgeLabels");
    const nodesGroup = rootGroups.insert("g").attr("class", "nodes");
    const nodeElements = /* @__PURE__ */ new Map();
    const hasDom = element3.node() != null;
    await Promise.all(
      data4Layout.nodes.map(async (node2) => {
        if (node2.isGroup) {
          graph.setNode(node2.id, { ...node2 });
        } else {
          if (hasDom) {
            const childNodeEl = await insertNode(nodesGroup, node2, { config: config3, dir: node2.dir });
            const boundingBox3 = childNodeEl.node()?.getBBox() ?? { width: 0, height: 0 };
            nodeElements.set(node2.id, childNodeEl);
            node2.width = boundingBox3.width;
            node2.height = boundingBox3.height;
          }
          graph.setNode(node2.id, { ...node2 });
        }
      })
    );
    for (const edge of edgesToProcess) {
      graph.setEdge(edge.start, edge.end, { ...edge }, edge.id);
      const edgeExists = data4Layout.edges.some((existingEdge) => existingEdge.id === edge.id);
      if (!edgeExists) {
        data4Layout.edges.push(edge);
      }
    }
    if (globalThis.mermaidCaptureSizes) {
      const { captureNodeSizes: captureNodeSizes2 } = await Promise.resolve().then(() => (init_sizeCapture(), sizeCapture_exports));
      captureNodeSizes2(element3, data4Layout);
    }
    return {
      graph,
      groups: { clusters, edgePaths, edgeLabels: edgeLabels3, nodes: nodesGroup, rootGroups },
      nodeElements
    };
  }
  var init_createGraph = __esm({
    "src/rendering-util/createGraph.ts"() {
      "use strict";
      init_graphlib();
      init_diagramAPI();
      init_nodes2();
      __name(createGraphWithElements, "createGraphWithElements");
    }
  });

  // src/rendering-util/rendering-elements/lineJump.ts
  function buildSegmentList(points) {
    const segments = [];
    for (let i2 = 0; i2 < points.length - 1; i2++) {
      segments.push({ a: points[i2], b: points[i2 + 1] });
    }
    return segments;
  }
  function segmentIntersection(a1, a2, b1, b22) {
    const dxA = a2.x - a1.x;
    const dyA = a2.y - a1.y;
    const dxB = b22.x - b1.x;
    const dyB = b22.y - b1.y;
    const denom = dxA * dyB - dyA * dxB;
    if (denom === 0) {
      return null;
    }
    const dx = b1.x - a1.x;
    const dy = b1.y - a1.y;
    const tA = (dx * dyB - dy * dxB) / denom;
    const tB = (dx * dyA - dy * dxA) / denom;
    if (tA <= ENDPOINT_EPSILON || tA >= 1 - ENDPOINT_EPSILON || tB <= ENDPOINT_EPSILON || tB >= 1 - ENDPOINT_EPSILON) {
      return null;
    }
    return {
      point: { x: a1.x + tA * dxA, y: a1.y + tA * dyA },
      tA,
      tB
    };
  }
  function isHorizontalSeg(seg) {
    return Math.abs(seg.b.x - seg.a.x) >= Math.abs(seg.b.y - seg.a.y);
  }
  function findEdgeIntersections(edges3) {
    const crossings = [];
    for (let i2 = 0; i2 < edges3.length; i2++) {
      const edgeA = edges3[i2];
      const segmentsA = buildSegmentList(edgeA.points);
      for (let j3 = i2 + 1; j3 < edges3.length; j3++) {
        const edgeB = edges3[j3];
        const segmentsB = buildSegmentList(edgeB.points);
        for (const [si, segA] of segmentsA.entries()) {
          for (const [sj, segB] of segmentsB.entries()) {
            const hit = segmentIntersection(segA.a, segA.b, segB.a, segB.b);
            if (!hit) {
              continue;
            }
            const aHoriz = isHorizontalSeg(segA);
            const bHoriz = isHorizontalSeg(segB);
            const orthogonalPair = aHoriz !== bHoriz;
            const jumpOnA = orthogonalPair ? aHoriz : false;
            if (jumpOnA) {
              crossings.push({
                jumpEdgeId: edgeA.id,
                otherEdgeId: edgeB.id,
                segIndex: si,
                t: hit.tA,
                point: hit.point
              });
            } else {
              crossings.push({
                jumpEdgeId: edgeB.id,
                otherEdgeId: edgeA.id,
                segIndex: sj,
                t: hit.tB,
                point: hit.point
              });
            }
          }
        }
      }
    }
    return crossings;
  }
  function fmt(n2) {
    const rounded = Math.round(n2 * 1e3) / 1e3;
    return Number.isInteger(rounded) ? `${rounded}` : `${rounded}`;
  }
  function pointToString(p3) {
    return `${fmt(p3.x)},${fmt(p3.y)}`;
  }
  function getArcSweepFlag(seg) {
    const dx = seg.b.x - seg.a.x;
    const dy = seg.b.y - seg.a.y;
    if (Math.abs(dx) >= Math.abs(dy)) {
      return dx >= 0 ? 1 : 0;
    }
    return dy >= 0 ? 1 : 0;
  }
  function applyMarkerOffsets(points, edge) {
    if (points.length < 2) {
      return points.map((p3) => ({ ...p3 }));
    }
    const out = points.map((p3) => ({ ...p3 }));
    const startOff = edge.arrowTypeStart && markerOffsets[edge.arrowTypeStart];
    if (startOff) {
      const a2 = points[0];
      const b3 = points[1];
      const ang = Math.atan2(b3.y - a2.y, b3.x - a2.x);
      out[0].x = a2.x + startOff * Math.cos(ang);
      out[0].y = a2.y + startOff * Math.sin(ang);
    }
    const endOff = edge.arrowTypeEnd && markerOffsets[edge.arrowTypeEnd];
    if (endOff) {
      const n2 = points.length;
      const a2 = points[n2 - 2];
      const b3 = points[n2 - 1];
      const ang = Math.atan2(b3.y - a2.y, b3.x - a2.x);
      out[n2 - 1].x = b3.x - endOff * Math.cos(ang);
      out[n2 - 1].y = b3.y - endOff * Math.sin(ang);
    }
    return out;
  }
  function emitJump(jump, ux, uy, sweep, style3) {
    const cx = jump.point.x;
    const cy = jump.point.y;
    const pre = { x: cx - ux * jump.r, y: cy - uy * jump.r };
    const post = { x: cx + ux * jump.r, y: cy + uy * jump.r };
    const out = [`L${pointToString(pre)}`];
    if (style3 === "arc") {
      out.push(`A${fmt(jump.r)},${fmt(jump.r)} 0 0 ${sweep} ${pointToString(post)}`);
    } else {
      out.push(`M${pointToString(post)}`);
    }
    return out;
  }
  function computeRoundedCorner(prev2, curr, next3, radius2) {
    const dx1 = curr.x - prev2.x;
    const dy1 = curr.y - prev2.y;
    const dx2 = next3.x - curr.x;
    const dy2 = next3.y - curr.y;
    const len1 = Math.hypot(dx1, dy1);
    const len2 = Math.hypot(dx2, dy2);
    if (len1 < CORNER_EPSILON || len2 < CORNER_EPSILON) {
      return null;
    }
    const nx1 = dx1 / len1;
    const ny1 = dy1 / len1;
    const nx2 = dx2 / len2;
    const ny2 = dy2 / len2;
    const dot2 = nx1 * nx2 + ny1 * ny2;
    const clamped = Math.max(-1, Math.min(1, dot2));
    const angle2 = Math.acos(clamped);
    if (angle2 < CORNER_EPSILON || Math.abs(Math.PI - angle2) < CORNER_EPSILON) {
      return null;
    }
    const cutLen = Math.min(radius2 / Math.sin(angle2 / 2), len1 / 2, len2 / 2);
    return {
      startX: curr.x - nx1 * cutLen,
      startY: curr.y - ny1 * cutLen,
      endX: curr.x + nx2 * cutLen,
      endY: curr.y + ny2 * cutLen,
      ctrlX: curr.x,
      ctrlY: curr.y,
      cutLen
    };
  }
  function rewriteEdgePath(edge, jumps, config3) {
    const rawPoints = edge.points;
    if (rawPoints.length < 2) {
      return "";
    }
    const points = applyMarkerOffsets(rawPoints, edge);
    const rounded = edge.curve === "rounded";
    const segments = buildSegmentList(points);
    const bySeg = /* @__PURE__ */ new Map();
    for (const j3 of jumps) {
      const seg = segments[j3.segIndex];
      if (!seg) {
        continue;
      }
      const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);
      const list = bySeg.get(j3.segIndex) ?? [];
      list.push({
        t: j3.t,
        point: j3.point,
        d: j3.t * segLen,
        r: config3.jumpRadius
      });
      bySeg.set(j3.segIndex, list);
    }
    const parts = [`M${pointToString(points[0])}`];
    for (let i2 = 0; i2 < segments.length; i2++) {
      const seg = segments[i2];
      const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);
      const ux = segLen === 0 ? 0 : (seg.b.x - seg.a.x) / segLen;
      const uy = segLen === 0 ? 0 : (seg.b.y - seg.a.y) / segLen;
      const sweep = getArcSweepFlag(seg);
      let segStartConsumed = 0;
      if (rounded && i2 > 0) {
        const corner = computeRoundedCorner(
          points[i2 - 1],
          points[i2],
          points[i2 + 1] ?? points[i2],
          ROUNDED_CORNER_RADIUS
        );
        if (corner) {
          segStartConsumed = corner.cutLen;
        }
      }
      let segEndStop = segLen;
      let upcomingCorner = null;
      if (rounded && i2 < segments.length - 1) {
        upcomingCorner = computeRoundedCorner(
          points[i2],
          points[i2 + 1],
          points[i2 + 2] ?? points[i2 + 1],
          ROUNDED_CORNER_RADIUS
        );
        if (upcomingCorner) {
          segEndStop = segLen - upcomingCorner.cutLen;
        }
      }
      const segJumps = [...bySeg.get(i2) ?? []].sort((a2, b3) => a2.t - b3.t);
      for (const j3 of segJumps) {
        j3.r = Math.min(j3.r, j3.d - segStartConsumed, segEndStop - j3.d);
      }
      for (let k2 = 0; k2 < segJumps.length - 1; k2++) {
        const gap = segJumps[k2 + 1].d - segJumps[k2].d;
        if (segJumps[k2].r + segJumps[k2 + 1].r > gap) {
          const half = gap / 2;
          segJumps[k2].r = Math.min(segJumps[k2].r, half);
          segJumps[k2 + 1].r = Math.min(segJumps[k2 + 1].r, half);
        }
      }
      for (const j3 of segJumps) {
        if (j3.r < MIN_JUMP_RADIUS) {
          continue;
        }
        parts.push(...emitJump(j3, ux, uy, sweep, config3.jumpStyle));
      }
      if (rounded && upcomingCorner) {
        parts.push(`L${fmt(upcomingCorner.startX)},${fmt(upcomingCorner.startY)}`);
        parts.push(
          `Q${fmt(upcomingCorner.ctrlX)},${fmt(upcomingCorner.ctrlY)} ${fmt(upcomingCorner.endX)},${fmt(upcomingCorner.endY)}`
        );
      } else {
        parts.push(`L${pointToString(seg.b)}`);
      }
    }
    return parts.join(" ");
  }
  function isStraightPath(d3) {
    return /^[\d\s+,.LMelm-]*$/.test(d3);
  }
  function curveSupportsLineHops(curve) {
    if (!curve) {
      return true;
    }
    return curve === "linear" || curve === "rounded" || curve === "step" || curve === "stepBefore" || curve === "stepAfter";
  }
  function decodeDataPoints(raw) {
    if (!raw) {
      return null;
    }
    try {
      const json3 = typeof atob === "function" ? atob(raw) : Buffer.from(raw, "base64").toString();
      const parsed = JSON.parse(json3);
      if (!Array.isArray(parsed)) {
        return null;
      }
      const pts2 = [];
      for (const p3 of parsed) {
        if (p3 && typeof p3.x === "number" && typeof p3.y === "number") {
          pts2.push({ x: p3.x, y: p3.y });
        }
      }
      return pts2.length >= 2 ? pts2 : null;
    } catch {
      return null;
    }
  }
  function applyLineJumpsToSvg(edgePathsGroup, edges3, config3) {
    if (!config3.enabled) {
      return;
    }
    const groupNode = edgePathsGroup.node();
    if (!groupNode) {
      return;
    }
    const edgeMeta = /* @__PURE__ */ new Map();
    for (const e3 of edges3) {
      edgeMeta.set(e3.id, e3);
    }
    const renderedEdges = [];
    const pathById = /* @__PURE__ */ new Map();
    for (const e3 of edges3) {
      const escapedId = typeof CSS !== "undefined" && CSS.escape ? CSS.escape(e3.id) : e3.id;
      const pathEl = groupNode.querySelector(`path[data-id="${escapedId}"]`);
      if (!pathEl) {
        continue;
      }
      pathById.set(e3.id, pathEl);
      const decoded = decodeDataPoints(pathEl.getAttribute("data-points"));
      const points = decoded ?? e3.points;
      renderedEdges.push({ ...e3, points });
    }
    const crossings = findEdgeIntersections(renderedEdges);
    if (crossings.length === 0) {
      return;
    }
    const jumpsByEdge = /* @__PURE__ */ new Map();
    for (const c3 of crossings) {
      const list = jumpsByEdge.get(c3.jumpEdgeId) ?? [];
      list.push(c3);
      jumpsByEdge.set(c3.jumpEdgeId, list);
    }
    for (const renderedEdge of renderedEdges) {
      const jumps = jumpsByEdge.get(renderedEdge.id);
      if (!jumps || jumps.length === 0) {
        continue;
      }
      const meta3 = edgeMeta.get(renderedEdge.id);
      const curveHint = meta3?.curve;
      if (curveHint !== void 0 && !curveSupportsLineHops(curveHint)) {
        continue;
      }
      const pathEl = pathById.get(renderedEdge.id);
      if (!pathEl) {
        continue;
      }
      if (curveHint === void 0) {
        const currentD = pathEl.getAttribute("d") ?? "";
        if (!isStraightPath(currentD)) {
          continue;
        }
      }
      const originalStyle = pathEl.getAttribute("style") ?? "";
      const dasharrayMatch = /stroke-dasharray\s*:\s*0\s+([\d.]+)\s+[\d.]+\s+([\d.]+)/.exec(
        originalStyle
      );
      const preservedOValueS = dasharrayMatch ? Number.parseFloat(dasharrayMatch[1]) : null;
      const preservedOValueE = dasharrayMatch ? Number.parseFloat(dasharrayMatch[2]) : null;
      const newD = rewriteEdgePath(renderedEdge, jumps, config3);
      pathEl.setAttribute("d", newD);
      if (preservedOValueS !== null && preservedOValueE !== null && typeof pathEl.getTotalLength === "function") {
        const newLen = pathEl.getTotalLength();
        const onLen = Math.max(0, newLen - preservedOValueS - preservedOValueE);
        const newDasharray = `0 ${preservedOValueS} ${onLen} ${preservedOValueE}`;
        const cleaned = originalStyle.replace(/stroke-dasharray\s*:[^;]*;?/g, `stroke-dasharray: ${newDasharray};`).replace(/;\s*;+/g, ";");
        pathEl.setAttribute("style", cleaned);
      }
    }
  }
  var ROUNDED_CORNER_RADIUS, CORNER_EPSILON, ENDPOINT_EPSILON, MIN_JUMP_RADIUS;
  var init_lineJump = __esm({
    "src/rendering-util/rendering-elements/lineJump.ts"() {
      "use strict";
      init_lineWithOffset();
      ROUNDED_CORNER_RADIUS = 5;
      CORNER_EPSILON = 1e-5;
      ENDPOINT_EPSILON = 1e-6;
      __name(buildSegmentList, "buildSegmentList");
      __name(segmentIntersection, "segmentIntersection");
      __name(isHorizontalSeg, "isHorizontalSeg");
      __name(findEdgeIntersections, "findEdgeIntersections");
      __name(fmt, "fmt");
      __name(pointToString, "pointToString");
      __name(getArcSweepFlag, "getArcSweepFlag");
      MIN_JUMP_RADIUS = 1e-3;
      __name(applyMarkerOffsets, "applyMarkerOffsets");
      __name(emitJump, "emitJump");
      __name(computeRoundedCorner, "computeRoundedCorner");
      __name(rewriteEdgePath, "rewriteEdgePath");
      __name(isStraightPath, "isStraightPath");
      __name(curveSupportsLineHops, "curveSupportsLineHops");
      __name(decodeDataPoints, "decodeDataPoints");
      __name(applyLineJumpsToSvg, "applyLineJumpsToSvg");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/adjustLayout.ts
  async function adjustLayout(data4Layout, groups) {
    for (const node2 of data4Layout.nodes) {
      if (node2.isGroup) {
        await insertCluster(groups.clusters, node2);
      } else {
        positionNode(node2);
      }
    }
    const nodeById = /* @__PURE__ */ new Map();
    for (const node2 of data4Layout.nodes) {
      if (node2?.id) {
        nodeById.set(node2.id, node2);
      }
    }
    for (const edge of data4Layout.edges) {
      const startNode = edge.start ? nodeById.get(edge.start) ?? {} : {};
      const endNode = edge.end ? nodeById.get(edge.end) ?? {} : {};
      const paths = insertEdge(
        groups.edgePaths,
        { ...edge },
        {},
        data4Layout.type,
        startNode,
        endNode,
        data4Layout.diagramId
      );
      if (edge.label) {
        await insertEdgeLabel(groups.rootGroups, edge);
      }
      if (edge.label) {
        positionEdgeLabel2(edge, paths);
      }
    }
    const lineHopsConfig = data4Layout.config?.swimlane?.lineHops;
    if (lineHopsConfig !== false) {
      const jumpStyle = lineHopsConfig === "gap" ? "gap" : "arc";
      const edgeGeometries = data4Layout.edges.filter((e3) => Array.isArray(e3.points) && e3.points.length >= 2).map((e3) => ({
        id: e3.id,
        points: e3.points,
        curve: e3.curve,
        arrowTypeStart: e3.arrowTypeStart,
        arrowTypeEnd: e3.arrowTypeEnd
      }));
      applyLineJumpsToSvg(groups.edgePaths, edgeGeometries, {
        enabled: true,
        jumpRadius: 6,
        jumpStyle
      });
    }
  }
  function positionEdgeLabel2(edge, paths) {
    const path4 = paths?.updatedPath ?? paths?.originalPath;
    const siteConfig2 = getConfig();
    const { subGraphTitleTotalMargin } = getSubGraphTitleMargins({
      flowchart: siteConfig2.flowchart ?? {}
    });
    if (edge.label) {
      const el = edgeLabels.get(edge.id);
      let x5 = edge.x;
      let y6 = edge.y;
      if (path4) {
        const pos = utils_default2.calcLabelPosition(path4);
        log.debug(
          "Moving label " + edge.label + " from (",
          x5,
          ",",
          y6,
          ") to (",
          pos.x,
          ",",
          pos.y,
          ") abc88"
        );
        if (paths) {
          x5 = pos.x;
          y6 = pos.y;
        }
      }
      el.attr("transform", `translate(${x5}, ${y6 + subGraphTitleTotalMargin / 2})`);
    }
    if (edge?.startLabelLeft) {
      const el = terminalLabels.get(edge.id).startLeft;
      let x5 = edge?.x;
      let y6 = edge?.y;
      if (path4) {
        const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path4);
        x5 = pos.x;
        y6 = pos.y;
      }
      el.attr("transform", `translate(${x5}, ${y6})`);
    }
    if (edge.startLabelRight) {
      const el = terminalLabels.get(edge.id).startRight;
      let x5 = edge.x;
      let y6 = edge.y;
      if (path4) {
        const pos = utils_default2.calcTerminalLabelPosition(
          edge.arrowTypeStart ? 10 : 0,
          "start_right",
          path4
        );
        x5 = pos.x;
        y6 = pos.y;
      }
      el.attr("transform", `translate(${x5}, ${y6})`);
    }
    if (edge.endLabelLeft) {
      const el = terminalLabels.get(edge.id).endLeft;
      let x5 = edge.x;
      let y6 = edge.y;
      if (path4) {
        const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path4);
        x5 = pos.x;
        y6 = pos.y;
      }
      el.attr("transform", `translate(${x5}, ${y6})`);
    }
    if (edge.endLabelRight) {
      const el = terminalLabels.get(edge.id).endRight;
      let x5 = edge.x;
      let y6 = edge.y;
      if (path4) {
        const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path4);
        x5 = pos.x;
        y6 = pos.y;
      }
      el.attr("transform", `translate(${x5}, ${y6})`);
    }
  }
  var init_adjustLayout = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/adjustLayout.ts"() {
      "use strict";
      init_nodes2();
      init_clusters();
      init_edges();
      init_lineJump();
      init_logger();
      init_subGraphTitleMargins();
      init_config();
      init_utils2();
      __name(adjustLayout, "adjustLayout");
      __name(positionEdgeLabel2, "positionEdgeLabel");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/helpers.ts
  function topLaneHorizontalPadding(lane) {
    return Math.max(lane.padding ?? MIN_TOP_LANE_HORIZONTAL_PADDING, MIN_TOP_LANE_HORIZONTAL_PADDING);
  }
  function assignTopLaneTitleRect(lane) {
    const { x: x5, y: y6, width: width3, height: height2 } = lane;
    const contentTop = lane.swimlaneContentTop;
    if (typeof x5 !== "number" || typeof y6 !== "number" || typeof width3 !== "number" || typeof height2 !== "number" || typeof contentTop !== "number" || !Number.isFinite(x5) || !Number.isFinite(y6) || !Number.isFinite(width3) || !Number.isFinite(height2) || !Number.isFinite(contentTop) || width3 <= 0 || height2 <= 0) {
      delete lane.groupTitleRect;
      return;
    }
    const top2 = y6 - height2 / 2;
    const headerBottom = Math.min(contentTop, y6 + height2 / 2);
    const titleHeight = Math.min(TOP_LANE_TITLE_BAND_HEIGHT, Math.max(0, headerBottom - top2));
    const bottom2 = top2 + titleHeight;
    if (bottom2 <= top2) {
      delete lane.groupTitleRect;
      return;
    }
    lane.groupTitleRect = {
      left: x5 - width3 / 2,
      right: x5 + width3 / 2,
      top: top2,
      bottom: bottom2
    };
  }
  function prepareLayoutForSwimlanes(layout7) {
    const direction2 = layout7.direction;
    const nodes5 = layout7.nodes ??= [];
    for (const node2 of layout7.nodes ?? []) {
      if (node2.isGroup && !node2.parentId) {
        node2.shape = "swimlane";
        if (direction2) {
          node2.direction = direction2;
        }
      }
    }
    const looseNodes = nodes5.filter((node2) => !node2.isGroup && !node2.parentId);
    if (looseNodes.length === 0) {
      return;
    }
    let defaultLane = nodes5.find((node2) => node2.id === DEFAULT_SWIMLANE_ID);
    if (!defaultLane) {
      defaultLane = {
        id: DEFAULT_SWIMLANE_ID,
        label: "",
        isGroup: true,
        shape: "swimlane",
        padding: 20,
        ...direction2 ? { direction: direction2 } : {}
      };
      nodes5.push(defaultLane);
    } else if (defaultLane.isGroup) {
      defaultLane.shape = "swimlane";
      if (direction2) {
        defaultLane.direction = direction2;
      }
    }
    for (const node2 of looseNodes) {
      node2.parentId = DEFAULT_SWIMLANE_ID;
    }
  }
  function toGraphView(layout7) {
    const nodeById = /* @__PURE__ */ new Map();
    for (const n2 of layout7.nodes ?? []) {
      nodeById.set(n2.id, n2);
    }
    const edges3 = [];
    for (const e3 of layout7.edges ?? []) {
      const src = typeof e3.start === "string" ? e3.start : void 0;
      const dst = typeof e3.end === "string" ? e3.end : void 0;
      if (!src || !dst) {
        continue;
      }
      if (e3.labelNodeId) {
        continue;
      }
      edges3.push({ id: e3.id, src, dst, ref: e3 });
    }
    const allNodes = layout7.nodes ?? [];
    const groupNodes = allNodes.filter((n2) => n2.isGroup);
    const nonGroupNodes = allNodes.filter((n2) => !n2.isGroup);
    const nodesInGroupOrder = [...groupNodes].reverse();
    const nodes5 = [...nodesInGroupOrder, ...nonGroupNodes].map((n2) => n2.id);
    return { nodes: nodes5, edges: edges3, layout: layout7, nodeById };
  }
  function writeBackToLayoutData(g2, ordered, coords, opts) {
    const { layout: layout7 } = g2;
    const nodeMap = g2.nodeById;
    const layerGap = opts?.layerGap ?? 100;
    const nodeGap = opts?.nodeGap ?? 40;
    let layerIndex = 0;
    for (const layer of ordered.layers) {
      let orderIndex = 0;
      for (const id41 of layer) {
        const node2 = nodeMap.get(id41);
        if (!node2) {
          orderIndex++;
          continue;
        }
        node2.layer = layerIndex;
        node2.order = orderIndex;
        const x5 = coords.x[id41] ?? orderIndex * nodeGap;
        const y6 = coords.y[id41] ?? layerIndex * layerGap;
        node2.x = x5;
        node2.y = y6;
        orderIndex++;
      }
      layerIndex++;
    }
    const allNodes = layout7.nodes ?? [];
    const groupBounds = /* @__PURE__ */ new Map();
    const topLevelGroups = [];
    for (const group2 of allNodes) {
      if (!group2?.isGroup) {
        continue;
      }
      if (!group2.parentId) {
        topLevelGroups.push(group2);
      }
      const children2 = allNodes.filter((n2) => n2.parentId === group2.id);
      let minX = Infinity;
      let maxX = -Infinity;
      let minY = Infinity;
      let maxY = -Infinity;
      for (const child of children2) {
        const cx = child.x ?? coords.x[child.id];
        const cy = child.y ?? coords.y[child.id];
        const cw = child.width ?? 0;
        const ch = child.height ?? 0;
        if (cx != null && cy != null) {
          minX = Math.min(minX, cx - cw / 2);
          maxX = Math.max(maxX, cx + cw / 2);
          minY = Math.min(minY, cy - ch / 2);
          maxY = Math.max(maxY, cy + ch / 2);
        }
      }
      if (minX === Infinity || minY === Infinity) {
        group2.x = group2.x ?? 0;
        group2.y = group2.y ?? 0;
        group2.width = group2.width ?? 0;
        group2.height = group2.height ?? 0;
      } else {
        const pad3 = group2.padding ?? 20;
        const horizontalPad = group2.parentId ? pad3 : 2 * topLaneHorizontalPadding(group2);
        const verticalPad = pad3;
        const w4 = Math.max(0, maxX - minX) + horizontalPad;
        const h3 = Math.max(0, maxY - minY) + verticalPad;
        const cx = (minX + maxX) / 2;
        const cy = (minY + maxY) / 2;
        group2.x = cx;
        group2.y = cy;
        group2.width = w4;
        group2.height = h3;
        groupBounds.set(group2.id, { minX, maxX, minY, maxY });
      }
    }
    if (topLevelGroups.length > 0 && groupBounds.size > 0) {
      let globalMinY = Infinity;
      let globalMaxY = -Infinity;
      let maxPad = 0;
      for (const lane of topLevelGroups) {
        const pad3 = lane.padding ?? 20;
        if (pad3 > maxPad) {
          maxPad = pad3;
        }
        const b3 = groupBounds.get(lane.id);
        if (!b3) {
          continue;
        }
        globalMinY = Math.min(globalMinY, b3.minY);
        globalMaxY = Math.max(globalMaxY, b3.maxY);
      }
      if (globalMinY !== Infinity && globalMaxY !== -Infinity) {
        const contentHeight = Math.max(0, globalMaxY - globalMinY);
        const minHeaderMargin = 36;
        const verticalMargin = Math.max(maxPad, minHeaderMargin);
        const laneHeight = contentHeight + 2 * verticalMargin;
        const centerY = (globalMinY + globalMaxY) / 2;
        for (const lane of topLevelGroups) {
          lane.y = centerY;
          lane.height = laneHeight;
          lane.swimlaneContentTop = globalMinY;
        }
        const sortedLanes = [...topLevelGroups].sort((a2, b3) => {
          const ax = a2.x ?? 0;
          const bx = b3.x ?? 0;
          return ax - bx;
        });
        const laneIds = [];
        const centers = [];
        const baseWidths = [];
        for (const lane of sortedLanes) {
          const b3 = groupBounds.get(lane.id);
          if (!b3) {
            continue;
          }
          const contentWidth = Math.max(0, b3.maxX - b3.minX) + 2 * topLaneHorizontalPadding(lane);
          const cx = (b3.minX + b3.maxX) / 2;
          laneIds.push(lane.id);
          centers.push(cx);
          baseWidths.push(contentWidth);
        }
        const count2 = laneIds.length;
        if (count2 > 0) {
          const laneWidths = /* @__PURE__ */ new Map();
          if (count2 === 1) {
            laneWidths.set(laneIds[0], baseWidths[0]);
          } else {
            const d3 = [];
            for (let i2 = 0; i2 < count2 - 1; i2++) {
              d3.push(centers[i2 + 1] - centers[i2]);
            }
            const u2 = new Array(count2);
            u2[0] = 0;
            for (let i2 = 0; i2 < count2 - 1; i2++) {
              u2[i2 + 1] = 2 * d3[i2] - u2[i2];
            }
            let lowerBound = 0;
            let upperBound = Number.POSITIVE_INFINITY;
            for (let i2 = 0; i2 < count2; i2++) {
              const baseW = baseWidths[i2];
              if (i2 % 2 === 0) {
                lowerBound = Math.max(lowerBound, baseW - u2[i2]);
              } else {
                upperBound = Math.min(upperBound, u2[i2] - baseW);
              }
            }
            let x5 = lowerBound;
            if (lowerBound <= upperBound) {
              x5 = (lowerBound + upperBound) / 2;
            } else {
              x5 = lowerBound;
            }
            for (let i2 = 0; i2 < count2; i2++) {
              const w4 = u2[i2] + (i2 % 2 === 0 ? x5 : -x5);
              const finalWidth = Math.max(baseWidths[i2], w4);
              laneWidths.set(laneIds[i2], finalWidth);
            }
          }
          for (const lane of topLevelGroups) {
            const w4 = laneWidths.get(lane.id);
            if (w4 != null) {
              lane.width = w4;
            }
            assignTopLaneTitleRect(lane);
          }
        }
      }
    }
  }
  var DEFAULT_SWIMLANE_ID, TOP_LANE_TITLE_BAND_HEIGHT, MIN_TOP_LANE_HORIZONTAL_PADDING;
  var init_helpers = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/helpers.ts"() {
      "use strict";
      DEFAULT_SWIMLANE_ID = "__swimlane_default__";
      TOP_LANE_TITLE_BAND_HEIGHT = 21;
      MIN_TOP_LANE_HORIZONTAL_PADDING = 20;
      __name(topLaneHorizontalPadding, "topLaneHorizontalPadding");
      __name(assignTopLaneTitleRect, "assignTopLaneTitleRect");
      __name(prepareLayoutForSwimlanes, "prepareLayoutForSwimlanes");
      __name(toGraphView, "toGraphView");
      __name(writeBackToLayoutData, "writeBackToLayoutData");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/edgeLabelNodes.ts
  function createEdgeLabelNodes(data6) {
    const nodesToAdd = [];
    const layoutOnlyEdges = [];
    const nodeById = /* @__PURE__ */ new Map();
    for (const node2 of data6.nodes) {
      nodeById.set(node2.id, node2);
    }
    for (const edge of data6.edges) {
      if (!edge.label || edge.label.length === 0) {
        continue;
      }
      if (edge.isLayoutOnly) {
        continue;
      }
      if (edge.labelNodeId) {
        continue;
      }
      const sourceNode = edge.start ? nodeById.get(edge.start) : void 0;
      const targetNode = edge.end ? nodeById.get(edge.end) : void 0;
      if (!sourceNode || !targetNode) {
        log.warn(EDGE_LABEL_LOG_PREFIX, `Edge ${edge.id} has missing source or target node`);
        continue;
      }
      const labelNodeId = `edge-label-${edge.start}-${edge.end}-${edge.id}`;
      const isCrossLane = sourceNode.parentId !== targetNode.parentId;
      const labelLane = isCrossLane ? targetNode.parentId : sourceNode.parentId;
      const labelNode = {
        id: labelNodeId,
        label: edge.label,
        edgeStart: edge.start ?? "",
        edgeEnd: edge.end ?? "",
        shape: "labelRect",
        width: 0,
        // populated when rendered / applied from fixture
        height: 0,
        isEdgeLabel: true,
        isDummy: true,
        parentId: labelLane,
        isGroup: false,
        labelStyle: Array.isArray(edge.labelStyle) ? edge.labelStyle[0] : edge.labelStyle ?? "",
        ...sourceNode.dir ? { dir: sourceNode.dir } : {}
      };
      nodesToAdd.push(labelNode);
      edge.labelNodeId = labelNodeId;
      edge.label = void 0;
      edge.text = void 0;
      const toLabelVirtual = {
        id: `${edge.id}-to-label`,
        start: edge.start,
        end: labelNodeId,
        type: "normal",
        isLayoutOnly: true
      };
      const fromLabelVirtual = {
        id: `${edge.id}-from-label`,
        start: labelNodeId,
        end: edge.end,
        type: "normal",
        isLayoutOnly: true
      };
      layoutOnlyEdges.push(toLabelVirtual, fromLabelVirtual);
    }
    const newNodes = [...data6.nodes, ...nodesToAdd];
    const newEdges = [...data6.edges, ...layoutOnlyEdges];
    return {
      ...data6,
      nodes: newNodes,
      edges: newEdges
    };
  }
  var EDGE_LABEL_LOG_PREFIX;
  var init_edgeLabelNodes = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/edgeLabelNodes.ts"() {
      "use strict";
      init_logger();
      EDGE_LABEL_LOG_PREFIX = "[EdgeLabelNodes]";
      __name(createEdgeLabelNodes, "createEdgeLabelNodes");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/geometry.ts
  function measuredNodeRect(node2) {
    const cx = node2.x ?? 0;
    const cy = node2.y ?? 0;
    const width3 = node2.width ?? 0;
    const height2 = node2.height ?? 0;
    return width3 > 0 && height2 > 0 ? { cx, cy, rect: rectFromCenterSize(cx, cy, width3, height2) } : void 0;
  }
  function nodeBoundsInfoFor(node2) {
    if (node2.isGroup) {
      return void 0;
    }
    const measured = measuredNodeRect(node2);
    if (!measured) {
      return void 0;
    }
    const id41 = String(node2.id ?? "");
    return {
      id: id41,
      cx: measured.cx,
      cy: measured.cy,
      rect: measured.rect
    };
  }
  function samePoint(a2, b3, epsilon6 = EPS) {
    return Math.abs(a2.x - b3.x) < epsilon6 && Math.abs(a2.y - b3.y) < epsilon6;
  }
  function sameX(a2, b3, epsilon6 = EPS) {
    return Math.abs(a2.x - b3.x) < epsilon6;
  }
  function sameY(a2, b3, epsilon6 = EPS) {
    return Math.abs(a2.y - b3.y) < epsilon6;
  }
  function isHorizontalSegment(a2, b3, epsilon6 = EPS) {
    return sameY(a2, b3, epsilon6) && Math.abs(a2.x - b3.x) > epsilon6;
  }
  function isVerticalSegment(a2, b3, epsilon6 = EPS) {
    return sameX(a2, b3, epsilon6) && Math.abs(a2.y - b3.y) > epsilon6;
  }
  function overlapLength(a1, a2, b1, b22) {
    return Math.max(
      0,
      Math.min(Math.max(a1, a2), Math.max(b1, b22)) - Math.max(Math.min(a1, a2), Math.min(b1, b22))
    );
  }
  function sameAxisSegmentOverlapLength(a2, b3, epsilon6 = EPS) {
    if (a2.horizontal && b3.horizontal && sameY(a2.a, b3.a, epsilon6)) {
      return overlapLength(a2.a.x, a2.b.x, b3.a.x, b3.b.x);
    }
    if (a2.vertical && b3.vertical && sameX(a2.a, b3.a, epsilon6)) {
      return overlapLength(a2.a.y, a2.b.y, b3.a.y, b3.b.y);
    }
    return 0;
  }
  function orthogonalSegmentsForPoints(points, epsilon6 = EPS) {
    const result = [];
    for (let i2 = 0; i2 < points.length - 1; i2++) {
      const a2 = points[i2];
      const b3 = points[i2 + 1];
      const horizontal = isHorizontalSegment(a2, b3, epsilon6);
      const vertical = isVerticalSegment(a2, b3, epsilon6);
      if (horizontal || vertical) {
        result.push({ index: i2, a: a2, b: b3, horizontal, vertical });
      }
    }
    return result;
  }
  function countOrthogonalBends(points, epsilon6 = EPS) {
    const segments = orthogonalSegmentsForPoints(points, epsilon6);
    let bends = 0;
    for (let i2 = 1; i2 < segments.length; i2++) {
      if (segments[i2 - 1].horizontal !== segments[i2].horizontal) {
        bends++;
      }
    }
    return bends;
  }
  function dedupeConsecutivePoints(points, epsilon6 = EPS) {
    const result = [];
    for (const point8 of points) {
      const last4 = result.length > 0 ? result[result.length - 1] : void 0;
      if (!last4 || !samePoint(last4, point8, epsilon6)) {
        result.push({ x: point8.x, y: point8.y });
      }
    }
    return result;
  }
  function classifyThreeSegmentRoute(points, epsilon6 = EPS) {
    if (!points || points.length !== 4) {
      return void 0;
    }
    const [p0, p1, p22, p3] = points;
    const isHVH = isHorizontalSegment(p0, p1, epsilon6) && isVerticalSegment(p1, p22, epsilon6) && isHorizontalSegment(p22, p3, epsilon6);
    if (isHVH) {
      return { kind: "HVH", p0, p1, p2: p22, p3 };
    }
    const isVHV = isVerticalSegment(p0, p1, epsilon6) && isHorizontalSegment(p1, p22, epsilon6) && isVerticalSegment(p22, p3, epsilon6);
    return isVHV ? { kind: "VHV", p0, p1, p2: p22, p3 } : void 0;
  }
  function segmentBoundsOverlapRect(a2, b3, rect3, buffer = 0) {
    const segMinX = Math.min(a2.x, b3.x);
    const segMaxX = Math.max(a2.x, b3.x);
    const segMinY = Math.min(a2.y, b3.y);
    const segMaxY = Math.max(a2.y, b3.y);
    return segMaxX > rect3.left - buffer && segMinX < rect3.right + buffer && segMaxY > rect3.top - buffer && segMinY < rect3.bottom + buffer;
  }
  function pointInsideRect(point8, rect3, buffer = 0) {
    return point8.x > rect3.left + buffer && point8.x < rect3.right - buffer && point8.y > rect3.top + buffer && point8.y < rect3.bottom - buffer;
  }
  function rectContainsRect(outer, inner2) {
    return outer.left <= inner2.left && outer.right >= inner2.right && outer.top <= inner2.top && outer.bottom >= inner2.bottom;
  }
  function rectsOverlap(a2, b3) {
    return a2.left < b3.right && a2.right > b3.left && a2.top < b3.bottom && a2.bottom > b3.top;
  }
  function inflateRect(rect3, margin) {
    return {
      left: rect3.left - margin,
      right: rect3.right + margin,
      top: rect3.top - margin,
      bottom: rect3.bottom + margin
    };
  }
  function rectFromCenterSize(cx, cy, width3, height2) {
    return {
      left: cx - width3 / 2,
      right: cx + width3 / 2,
      top: cy - height2 / 2,
      bottom: cy + height2 / 2
    };
  }
  function rectOfNodeBounds(node2) {
    return measuredNodeRect(node2)?.rect;
  }
  function portForRectSide(node2, side) {
    switch (side) {
      case "top":
        return { x: node2.cx, y: node2.rect.top };
      case "bottom":
        return { x: node2.cx, y: node2.rect.bottom };
      case "left":
        return { x: node2.rect.left, y: node2.cy };
      case "right":
        return { x: node2.rect.right, y: node2.cy };
    }
  }
  function buildOrthogonalPortPath(src, srcSide, dst, dstSide, anchor2, epsilon6 = EPS) {
    const srcH = srcSide === "left" || srcSide === "right";
    const dstH = dstSide === "left" || dstSide === "right";
    if (srcH && dstH) {
      const opposingDir = srcSide === "right" && dstSide === "left" && src.x < dst.x || srcSide === "left" && dstSide === "right" && src.x > dst.x;
      if (opposingDir) {
        if (sameY(src, dst, epsilon6)) {
          return [src, dst];
        }
        const midX = (src.x + dst.x) / 2;
        return [src, { x: midX, y: src.y }, { x: midX, y: dst.y }, dst];
      }
      if (srcSide === dstSide) {
        if (sameY(src, dst, epsilon6)) {
          return void 0;
        }
        const intX = srcSide === "left" ? Math.min(src.x, dst.x) - anchor2 : Math.max(src.x, dst.x) + anchor2;
        return [src, { x: intX, y: src.y }, { x: intX, y: dst.y }, dst];
      }
      return void 0;
    }
    if (!srcH && !dstH) {
      if (srcSide === dstSide) {
        if (sameX(src, dst, epsilon6)) {
          return void 0;
        }
        const intY = srcSide === "top" ? Math.min(src.y, dst.y) - anchor2 : Math.max(src.y, dst.y) + anchor2;
        return [src, { x: src.x, y: intY }, { x: dst.x, y: intY }, dst];
      }
      const sameDir = srcSide === "bottom" && dstSide === "top" && src.y < dst.y || srcSide === "top" && dstSide === "bottom" && src.y > dst.y;
      if (!sameDir) {
        return void 0;
      }
      if (sameX(src, dst, epsilon6)) {
        return [src, dst];
      }
      const midY = (src.y + dst.y) / 2;
      return [src, { x: src.x, y: midY }, { x: dst.x, y: midY }, dst];
    }
    if (srcH && !dstH) {
      const sameDirSrc2 = srcSide === "right" && dst.x > src.x || srcSide === "left" && dst.x < src.x;
      const sameDirDst2 = dstSide === "top" && src.y < dst.y || dstSide === "bottom" && src.y > dst.y;
      return sameDirSrc2 && sameDirDst2 ? [src, { x: dst.x, y: src.y }, dst] : void 0;
    }
    const sameDirSrc = srcSide === "bottom" && dst.y > src.y || srcSide === "top" && dst.y < src.y;
    const sameDirDst = dstSide === "left" && src.x < dst.x || dstSide === "right" && src.x > dst.x;
    return sameDirSrc && sameDirDst ? [src, { x: src.x, y: dst.y }, dst] : void 0;
  }
  function buildSameSideTrackPath(src, side, dst, track) {
    return side === "left" || side === "right" ? [src, { x: track, y: src.y }, { x: track, y: dst.y }, dst] : [src, { x: src.x, y: track }, { x: dst.x, y: track }, dst];
  }
  function collectRealNodeBounds(nodes5) {
    const nodeInfoById = /* @__PURE__ */ new Map();
    const realNodeRects = [];
    for (const node2 of nodes5) {
      if (node2.isEdgeLabel) {
        continue;
      }
      const info2 = nodeBoundsInfoFor(node2);
      if (!info2) {
        continue;
      }
      nodeInfoById.set(info2.id, info2);
      realNodeRects.push({ id: info2.id, rect: info2.rect });
    }
    return { nodeInfoById, realNodeRects };
  }
  function collectNodeRectEntries(nodes5) {
    const realNodeRects = [];
    const labelNodeRects = [];
    for (const node2 of nodes5) {
      const info2 = nodeBoundsInfoFor(node2);
      if (!info2) {
        continue;
      }
      const entry = { id: info2.id, rect: info2.rect };
      if (node2.isEdgeLabel) {
        labelNodeRects.push(entry);
      } else {
        realNodeRects.push(entry);
      }
    }
    return { realNodeRects, labelNodeRects };
  }
  function collectLayoutNodeRects(nodes5, { includeEdgeLabels = true } = {}) {
    const result = [];
    for (const node2 of nodes5) {
      if (node2.isGroup || !includeEdgeLabels && node2.isEdgeLabel) {
        continue;
      }
      const cx = node2.x ?? 0;
      const cy = node2.y ?? 0;
      const width3 = node2.width ?? 0;
      const height2 = node2.height ?? 0;
      result.push({
        nodeId: node2.id,
        ...rectFromCenterSize(cx, cy, width3, height2)
      });
    }
    return result;
  }
  function getNodePairGeometry(edge, nodeInfoById, epsilon6 = EPS) {
    const srcId = edge.start;
    const dstId = edge.end;
    if (!srcId || !dstId) {
      return void 0;
    }
    const srcInfo = nodeInfoById.get(srcId);
    const dstInfo = nodeInfoById.get(dstId);
    if (!srcInfo || !dstInfo) {
      return void 0;
    }
    return {
      srcId,
      dstId,
      srcInfo,
      dstInfo,
      collinearX: Math.abs(srcInfo.cx - dstInfo.cx) < epsilon6,
      collinearY: Math.abs(srcInfo.cy - dstInfo.cy) < epsilon6
    };
  }
  function segmentHitsAnyRect(a2, b3, rects, excludeIds = [], shrink = 0) {
    for (const entry of rects) {
      if (excludeIds.includes(entry.id)) {
        continue;
      }
      if (segmentBoundsOverlapRect(a2, b3, entry.rect, -shrink)) {
        return true;
      }
    }
    return false;
  }
  function orthogonalSegmentsCross(a1, b1, a2, b22, epsilon6 = EPS, endpointTolerance = 1e-6) {
    const s1H = sameY(a1, b1, epsilon6);
    const s1V = sameX(a1, b1, epsilon6);
    const s2H = sameY(a2, b22, epsilon6);
    const s2V = sameX(a2, b22, epsilon6);
    if (s1H && s2H || s1V && s2V) {
      return false;
    }
    if (!(s1H || s1V) || !(s2H || s2V)) {
      return false;
    }
    const horiz = s1H ? { a: a1, b: b1 } : { a: a2, b: b22 };
    const vert = s1V ? { a: a1, b: b1 } : { a: a2, b: b22 };
    const hY = horiz.a.y;
    const hX1 = Math.min(horiz.a.x, horiz.b.x);
    const hX2 = Math.max(horiz.a.x, horiz.b.x);
    const vX = vert.a.x;
    const vY1 = Math.min(vert.a.y, vert.b.y);
    const vY2 = Math.max(vert.a.y, vert.b.y);
    if (vX < hX1 || vX > hX2 || hY < vY1 || hY > vY2) {
      return false;
    }
    const matchesHorizEndpoint = Math.abs(vX - horiz.a.x) < endpointTolerance && Math.abs(hY - horiz.a.y) < endpointTolerance || Math.abs(vX - horiz.b.x) < endpointTolerance && Math.abs(hY - horiz.b.y) < endpointTolerance;
    const matchesVertEndpoint = Math.abs(vX - vert.a.x) < endpointTolerance && Math.abs(hY - vert.a.y) < endpointTolerance || Math.abs(vX - vert.b.x) < endpointTolerance && Math.abs(hY - vert.b.y) < endpointTolerance;
    return !(matchesHorizEndpoint && matchesVertEndpoint);
  }
  function sameAxisSegmentsOverlap(a1, b1, a2, b22, epsilon6 = EPS) {
    const s1H = sameY(a1, b1, epsilon6);
    const s1V = sameX(a1, b1, epsilon6);
    const s2H = sameY(a2, b22, epsilon6);
    const s2V = sameX(a2, b22, epsilon6);
    if (s1V && s2V && sameX(a1, a2, epsilon6)) {
      return overlapLength(a1.y, b1.y, a2.y, b22.y) > epsilon6;
    }
    if (s1H && s2H && sameY(a1, a2, epsilon6)) {
      return overlapLength(a1.x, b1.x, a2.x, b22.x) > epsilon6;
    }
    return false;
  }
  function segmentConflictsWithAnyEdge(a2, b3, edges3, excludeEdge, {
    epsilon: epsilon6 = EPS,
    skipDegenerateOther = false
  } = {}) {
    for (const other of edges3) {
      if (other === excludeEdge || other.isLayoutOnly) {
        continue;
      }
      const points = other.points;
      if (!points || points.length < 2) {
        continue;
      }
      for (let i2 = 0; i2 < points.length - 1; i2++) {
        const oa = points[i2];
        const ob = points[i2 + 1];
        if (skipDegenerateOther && samePoint(oa, ob, epsilon6)) {
          continue;
        }
        if (orthogonalSegmentsCross(a2, b3, oa, ob, epsilon6) || sameAxisSegmentsOverlap(a2, b3, oa, ob, epsilon6)) {
          return true;
        }
      }
    }
    return false;
  }
  function orthogonalSegmentsStrictlyCross(a1, b1, a2, b22, epsilon6 = EPS) {
    const aHoriz = sameY(a1, b1, epsilon6);
    const aVert = sameX(a1, b1, epsilon6);
    const bHoriz = sameY(a2, b22, epsilon6);
    const bVert = sameX(a2, b22, epsilon6);
    if (!(aHoriz && bVert || aVert && bHoriz)) {
      return false;
    }
    const horiz = aHoriz ? { a: a1, b: b1 } : { a: a2, b: b22 };
    const vert = aHoriz ? { a: a2, b: b22 } : { a: a1, b: b1 };
    const hY = horiz.a.y;
    const hXmin = Math.min(horiz.a.x, horiz.b.x);
    const hXmax = Math.max(horiz.a.x, horiz.b.x);
    const vX = vert.a.x;
    const vYmin = Math.min(vert.a.y, vert.b.y);
    const vYmax = Math.max(vert.a.y, vert.b.y);
    return vX > hXmin + epsilon6 && vX < hXmax - epsilon6 && hY > vYmin + epsilon6 && hY < vYmax - epsilon6;
  }
  function strictlyBetween(value2, a2, b3) {
    const lo = Math.min(a2, b3);
    const hi = Math.max(a2, b3);
    return value2 > lo + EPS && value2 < hi - EPS;
  }
  function isCollinearIntermediate(prev2, cur, next3) {
    if (sameX(prev2, cur) && sameX(cur, next3)) {
      return strictlyBetween(cur.y, prev2.y, next3.y);
    }
    if (sameY(prev2, cur) && sameY(cur, next3)) {
      return strictlyBetween(cur.x, prev2.x, next3.x);
    }
    return false;
  }
  function simplifyPolylineOnce(points) {
    let changed = false;
    const out = [];
    for (let i2 = 0; i2 < points.length; i2++) {
      const prev2 = out[out.length - 1];
      const cur = points[i2];
      const next3 = i2 + 1 < points.length ? points[i2 + 1] : void 0;
      if (prev2 && next3) {
        if (samePoint(prev2, next3)) {
          i2++;
          changed = true;
          continue;
        }
        if (isCollinearIntermediate(prev2, cur, next3)) {
          changed = true;
          continue;
        }
      }
      out.push(cur);
    }
    return { points: out, changed };
  }
  function orthogonalizePolyline(pts2) {
    const cleaned = [pts2[0]];
    for (let i2 = 1; i2 < pts2.length; i2++) {
      const prev2 = cleaned[cleaned.length - 1];
      const curr = pts2[i2];
      if (!sameX(prev2, curr) && !sameY(prev2, curr)) {
        const prevPrev = cleaned.length >= 2 ? cleaned[cleaned.length - 2] : void 0;
        const incomingVertical = prevPrev ? sameX(prevPrev, prev2) : false;
        const corner = incomingVertical ? { x: prev2.x, y: curr.y } : { x: curr.x, y: prev2.y };
        cleaned.push(corner);
      }
      cleaned.push(curr);
    }
    const deduped = [];
    for (const p3 of cleaned) {
      const last4 = deduped[deduped.length - 1];
      if (!last4 || !samePoint(last4, p3)) {
        deduped.push(p3);
      }
    }
    return deduped;
  }
  function simplifyPolyline(pts2) {
    if (pts2.length < 3) {
      return pts2;
    }
    let work = [...pts2];
    for (let guard = 0; guard < 32; guard++) {
      const result = simplifyPolylineOnce(work);
      work = result.points;
      if (!result.changed) {
        break;
      }
    }
    return work;
  }
  var EPS;
  var init_geometry = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/geometry.ts"() {
      "use strict";
      EPS = 1e-3;
      __name(measuredNodeRect, "measuredNodeRect");
      __name(nodeBoundsInfoFor, "nodeBoundsInfoFor");
      __name(samePoint, "samePoint");
      __name(sameX, "sameX");
      __name(sameY, "sameY");
      __name(isHorizontalSegment, "isHorizontalSegment");
      __name(isVerticalSegment, "isVerticalSegment");
      __name(overlapLength, "overlapLength");
      __name(sameAxisSegmentOverlapLength, "sameAxisSegmentOverlapLength");
      __name(orthogonalSegmentsForPoints, "orthogonalSegmentsForPoints");
      __name(countOrthogonalBends, "countOrthogonalBends");
      __name(dedupeConsecutivePoints, "dedupeConsecutivePoints");
      __name(classifyThreeSegmentRoute, "classifyThreeSegmentRoute");
      __name(segmentBoundsOverlapRect, "segmentBoundsOverlapRect");
      __name(pointInsideRect, "pointInsideRect");
      __name(rectContainsRect, "rectContainsRect");
      __name(rectsOverlap, "rectsOverlap");
      __name(inflateRect, "inflateRect");
      __name(rectFromCenterSize, "rectFromCenterSize");
      __name(rectOfNodeBounds, "rectOfNodeBounds");
      __name(portForRectSide, "portForRectSide");
      __name(buildOrthogonalPortPath, "buildOrthogonalPortPath");
      __name(buildSameSideTrackPath, "buildSameSideTrackPath");
      __name(collectRealNodeBounds, "collectRealNodeBounds");
      __name(collectNodeRectEntries, "collectNodeRectEntries");
      __name(collectLayoutNodeRects, "collectLayoutNodeRects");
      __name(getNodePairGeometry, "getNodePairGeometry");
      __name(segmentHitsAnyRect, "segmentHitsAnyRect");
      __name(orthogonalSegmentsCross, "orthogonalSegmentsCross");
      __name(sameAxisSegmentsOverlap, "sameAxisSegmentsOverlap");
      __name(segmentConflictsWithAnyEdge, "segmentConflictsWithAnyEdge");
      __name(orthogonalSegmentsStrictlyCross, "orthogonalSegmentsStrictlyCross");
      __name(strictlyBetween, "strictlyBetween");
      __name(isCollinearIntermediate, "isCollinearIntermediate");
      __name(simplifyPolylineOnce, "simplifyPolylineOnce");
      __name(orthogonalizePolyline, "orthogonalizePolyline");
      __name(simplifyPolyline, "simplifyPolyline");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/endpointClip.ts
  function endpointContextFor(edge, nodeByIdMap, minPoints) {
    const candidate = edge;
    if (candidate.isLayoutOnly || !candidate.points || candidate.points.length < minPoints) {
      return void 0;
    }
    const src = candidate.start ? nodeByIdMap.get(candidate.start) : void 0;
    const dst = candidate.end ? nodeByIdMap.get(candidate.end) : void 0;
    return {
      edge: candidate,
      points: candidate.points,
      srcRect: src ? rectOfNodeBounds(src) : void 0,
      dstRect: dst ? rectOfNodeBounds(dst) : void 0
    };
  }
  function segmentEnterPoint(outside, inside, r2) {
    if (sameY(outside, inside, EPS2)) {
      const x5 = outside.x < r2.left ? r2.left : r2.right;
      return { x: x5, y: outside.y };
    }
    if (sameX(outside, inside, EPS2)) {
      const y6 = outside.y < r2.top ? r2.top : r2.bottom;
      return { x: outside.x, y: y6 };
    }
    return {
      x: Math.min(r2.right, Math.max(r2.left, outside.x)),
      y: Math.min(r2.bottom, Math.max(r2.top, outside.y))
    };
  }
  function clipEndpoint(points, rect3, atStart) {
    const step3 = atStart ? 1 : -1;
    let outsideIndex = atStart ? 0 : points.length - 1;
    while (outsideIndex >= 0 && outsideIndex < points.length && pointInsideRect(points[outsideIndex], rect3, INSIDE_EPS)) {
      outsideIndex += step3;
    }
    if (outsideIndex < 0 || outsideIndex >= points.length) {
      return points;
    }
    const insideIndex = outsideIndex - step3;
    if (insideIndex < 0 || insideIndex >= points.length) {
      return points;
    }
    const entry = segmentEnterPoint(points[outsideIndex], points[insideIndex], rect3);
    return atStart ? [entry, ...points.slice(outsideIndex)] : [...points.slice(0, outsideIndex + 1), entry];
  }
  function clipEdgeEndpointsToNodeBoundaries(edges3, nodeByIdMap) {
    for (const edge of edges3) {
      const context = endpointContextFor(edge, nodeByIdMap, 2);
      if (!context) {
        continue;
      }
      let next3 = [...context.points];
      if (context.srcRect) {
        next3 = clipEndpoint(next3, context.srcRect, true);
      }
      if (context.dstRect) {
        next3 = clipEndpoint(next3, context.dstRect, false);
      }
      next3 = simplifyPolyline(orthogonalizePolyline(next3));
      next3 = clearStraightEndpointCornerConnections(next3, context.srcRect, context.dstRect);
      context.edge.points = simplifyPolyline(orthogonalizePolyline(next3));
    }
  }
  function snapEndpointToBoundary(inner2, endpoint, r2, useApproachSide = false) {
    if (sameY(inner2, endpoint, EPS2)) {
      if (endpoint.y < r2.top - EPS2 || endpoint.y > r2.bottom + EPS2) {
        return endpoint;
      }
      if (useApproachSide) {
        if (inner2.x < r2.left - EPS2) {
          return { x: r2.left, y: inner2.y };
        }
        if (inner2.x > r2.right + EPS2) {
          return { x: r2.right, y: inner2.y };
        }
      }
      const toLeft = Math.abs(endpoint.x - r2.left) <= Math.abs(endpoint.x - r2.right);
      return { x: toLeft ? r2.left : r2.right, y: inner2.y };
    }
    if (sameX(inner2, endpoint, EPS2)) {
      if (endpoint.x < r2.left - EPS2 || endpoint.x > r2.right + EPS2) {
        return endpoint;
      }
      if (useApproachSide) {
        if (inner2.y < r2.top - EPS2) {
          return { x: inner2.x, y: r2.top };
        }
        if (inner2.y > r2.bottom + EPS2) {
          return { x: inner2.x, y: r2.bottom };
        }
      }
      const toTop = Math.abs(endpoint.y - r2.top) <= Math.abs(endpoint.y - r2.bottom);
      return { x: inner2.x, y: toTop ? r2.top : r2.bottom };
    }
    return endpoint;
  }
  function firstDistinctAdjacent(points, endpointIndex, step3) {
    const endpoint = points[endpointIndex];
    for (let index = endpointIndex + step3; index >= 0 && index < points.length; index += step3) {
      const candidate = points[index];
      if (!samePoint(candidate, endpoint, EPS2)) {
        return candidate;
      }
    }
    return points[endpointIndex + step3];
  }
  function cornerClearanceRange(min10, max10) {
    const lo = min10 + CORNER_CLEARANCE;
    const hi = max10 - CORNER_CLEARANCE;
    return lo <= hi ? { lo, hi } : { lo: (min10 + max10) / 2, hi: (min10 + max10) / 2 };
  }
  function clampToCornerClearance(value2, min10, max10) {
    const { lo, hi } = cornerClearanceRange(min10, max10);
    return Math.min(hi, Math.max(lo, value2));
  }
  function intersectRanges(ranges) {
    const lo = Math.max(...ranges.map((range3) => range3.lo));
    const hi = Math.min(...ranges.map((range3) => range3.hi));
    if (lo > hi) {
      return void 0;
    }
    return { lo, hi };
  }
  function clearanceRangeForSide(r2, side) {
    return side === "left" || side === "right" ? cornerClearanceRange(r2.top, r2.bottom) : cornerClearanceRange(r2.left, r2.right);
  }
  function terminalSideForSegment(endpoint, adjacent, r2) {
    const yWithin = endpoint.y >= r2.top - EPS2 && endpoint.y <= r2.bottom + EPS2;
    const xWithin = endpoint.x >= r2.left - EPS2 && endpoint.x <= r2.right + EPS2;
    if (sameY(endpoint, adjacent, EPS2) && yWithin) {
      if (Math.abs(endpoint.x - r2.left) < EPS2) {
        return "left";
      }
      if (Math.abs(endpoint.x - r2.right) < EPS2) {
        return "right";
      }
    }
    if (sameX(endpoint, adjacent, EPS2) && xWithin) {
      if (Math.abs(endpoint.y - r2.top) < EPS2) {
        return "top";
      }
      if (Math.abs(endpoint.y - r2.bottom) < EPS2) {
        return "bottom";
      }
    }
    return void 0;
  }
  function isHorizontalSide(side) {
    return side === "left" || side === "right";
  }
  function straightClearanceRange(start3, end2, srcRect, dstRect, horizontal) {
    const ranges = [];
    const srcSide = srcRect ? terminalSideForSegment(start3, end2, srcRect) : void 0;
    const dstSide = dstRect ? terminalSideForSegment(end2, start3, dstRect) : void 0;
    if (srcRect && srcSide && isHorizontalSide(srcSide) === horizontal) {
      ranges.push(clearanceRangeForSide(srcRect, srcSide));
    }
    if (dstRect && dstSide && isHorizontalSide(dstSide) === horizontal) {
      ranges.push(clearanceRangeForSide(dstRect, dstSide));
    }
    return ranges.length > 0 ? intersectRanges(ranges) : void 0;
  }
  function clearStraightEndpointCornerAxis(start3, end2, srcRect, dstRect, horizontal) {
    const range3 = straightClearanceRange(start3, end2, srcRect, dstRect, horizontal);
    if (!range3) {
      return void 0;
    }
    const current = horizontal ? start3.y : start3.x;
    const next3 = Math.min(range3.hi, Math.max(range3.lo, current));
    if (Math.abs(next3 - current) < EPS2) {
      return void 0;
    }
    return horizontal ? [
      { x: start3.x, y: next3 },
      { x: end2.x, y: next3 }
    ] : [
      { x: next3, y: start3.y },
      { x: next3, y: end2.y }
    ];
  }
  function clearStraightEndpointCornerConnections(points, srcRect, dstRect) {
    if (points.length !== 2) {
      return points;
    }
    const [start3, end2] = points;
    if (sameY(start3, end2, EPS2)) {
      return clearStraightEndpointCornerAxis(start3, end2, srcRect, dstRect, true) ?? points;
    }
    if (sameX(start3, end2, EPS2)) {
      return clearStraightEndpointCornerAxis(start3, end2, srcRect, dstRect, false) ?? points;
    }
    return points;
  }
  function cornerClearedEndpoint(endpoint, r2, side) {
    return isHorizontalSide(side) ? { x: endpoint.x, y: clampToCornerClearance(endpoint.y, r2.top, r2.bottom) } : { x: clampToCornerClearance(endpoint.x, r2.left, r2.right), y: endpoint.y };
  }
  function moveCollinearEndpointRun(points, endpointIndex, step3, endpoint, adjusted, horizontalTerminal) {
    const next3 = points.map((point8) => ({ ...point8 }));
    for (let index = endpointIndex; index >= 0 && index < points.length; index += step3) {
      const point8 = points[index];
      if (horizontalTerminal && !sameY(point8, endpoint, EPS2)) {
        break;
      }
      if (!horizontalTerminal && !sameX(point8, endpoint, EPS2)) {
        break;
      }
      if (horizontalTerminal) {
        next3[index].y = adjusted.y;
      } else {
        next3[index].x = adjusted.x;
      }
    }
    return next3;
  }
  function clearEndpointCornerConnection(points, r2, atStart) {
    if (points.length < 2) {
      return points;
    }
    const endpointIndex = atStart ? 0 : points.length - 1;
    const step3 = atStart ? 1 : -1;
    const endpoint = points[endpointIndex];
    const adjacent = firstDistinctAdjacent(points, endpointIndex, step3);
    if (!adjacent) {
      return points;
    }
    const side = terminalSideForSegment(endpoint, adjacent, r2);
    if (!side) {
      return points;
    }
    const horizontalTerminal = isHorizontalSide(side);
    const adjusted = cornerClearedEndpoint(endpoint, r2, side);
    if (samePoint(endpoint, adjusted, EPS2)) {
      return points;
    }
    return moveCollinearEndpointRun(
      points,
      endpointIndex,
      step3,
      endpoint,
      adjusted,
      horizontalTerminal
    );
  }
  function borderSideForSegment(a2, b3, r2) {
    const xWithin = Math.min(a2.x, b3.x) >= r2.left - EPS2 && Math.max(a2.x, b3.x) <= r2.right + EPS2;
    const yWithin = Math.min(a2.y, b3.y) >= r2.top - EPS2 && Math.max(a2.y, b3.y) <= r2.bottom + EPS2;
    if (Math.abs(a2.y - r2.top) < EPS2 && Math.abs(b3.y - r2.top) < EPS2 && xWithin) {
      return "top";
    }
    if (Math.abs(a2.y - r2.bottom) < EPS2 && Math.abs(b3.y - r2.bottom) < EPS2 && xWithin) {
      return "bottom";
    }
    if (Math.abs(a2.x - r2.left) < EPS2 && Math.abs(b3.x - r2.left) < EPS2 && yWithin) {
      return "left";
    }
    if (Math.abs(a2.x - r2.right) < EPS2 && Math.abs(b3.x - r2.right) < EPS2 && yWithin) {
      return "right";
    }
    return void 0;
  }
  function leavesOutward(side, from2, to, r2) {
    switch (side) {
      case "top":
        return sameX(from2, to, EPS2) && to.y < r2.top - EPS2;
      case "bottom":
        return sameX(from2, to, EPS2) && to.y > r2.bottom + EPS2;
      case "left":
        return sameY(from2, to, EPS2) && to.x < r2.left - EPS2;
      case "right":
        return sameY(from2, to, EPS2) && to.x > r2.right + EPS2;
    }
  }
  function collapseOwnBorderStub(points, r2, atStart) {
    if (points.length < 3) {
      return points;
    }
    if (atStart) {
      const side2 = borderSideForSegment(points[0], points[1], r2);
      if (side2 && leavesOutward(side2, points[1], points[2], r2)) {
        return points.slice(1);
      }
      return points;
    }
    const last4 = points.length - 1;
    const side = borderSideForSegment(points[last4 - 1], points[last4], r2);
    if (side && leavesOutward(side, points[last4 - 1], points[last4 - 2], r2)) {
      return points.slice(0, last4);
    }
    return points;
  }
  function snapAndCollapseEndpoints(points, srcRect, dstRect) {
    let next3 = points;
    if (srcRect) {
      const adjacent = firstDistinctAdjacent(next3, 0, 1);
      if (adjacent) {
        const snapped = snapEndpointToBoundary(adjacent, next3[0], srcRect);
        if (snapped !== next3[0]) {
          next3 = [snapped, ...next3.slice(1)];
        }
      }
      next3 = collapseOwnBorderStub(next3, srcRect, true);
    }
    if (dstRect) {
      const last4 = next3.length - 1;
      const adjacent = firstDistinctAdjacent(next3, last4, -1);
      if (adjacent) {
        const snapped = snapEndpointToBoundary(adjacent, next3[last4], dstRect, true);
        if (snapped !== next3[last4]) {
          next3 = [...next3.slice(0, last4), snapped];
        }
      }
      next3 = collapseOwnBorderStub(next3, dstRect, false);
    }
    const straightCleared = clearStraightEndpointCornerConnections(next3, srcRect, dstRect);
    if (straightCleared !== next3 || next3.length === 2) {
      return straightCleared;
    }
    if (srcRect) {
      next3 = clearEndpointCornerConnection(next3, srcRect, true);
    }
    if (dstRect) {
      next3 = clearEndpointCornerConnection(next3, dstRect, false);
    }
    return next3;
  }
  function prepareEdgeEndpointsForRenderer(edges3, nodeByIdMap) {
    for (const edge of edges3) {
      const context = endpointContextFor(edge, nodeByIdMap, 2);
      if (!context) {
        continue;
      }
      const input = dedupeConsecutivePoints(context.points, EPS2);
      const newPts = snapAndCollapseEndpoints(input, context.srcRect, context.dstRect);
      if (newPts.length < 3) {
        context.edge.points = newPts;
        continue;
      }
      const duplicated = [
        newPts[0],
        { ...newPts[0] },
        ...newPts.slice(1, -1),
        newPts[newPts.length - 1],
        { ...newPts[newPts.length - 1] }
      ];
      context.edge.points = duplicated;
    }
  }
  var EPS2, INSIDE_EPS, CORNER_CLEARANCE;
  var init_endpointClip = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/endpointClip.ts"() {
      "use strict";
      init_geometry();
      EPS2 = 1e-3;
      INSIDE_EPS = 0.5;
      CORNER_CLEARANCE = 4;
      __name(endpointContextFor, "endpointContextFor");
      __name(segmentEnterPoint, "segmentEnterPoint");
      __name(clipEndpoint, "clipEndpoint");
      __name(clipEdgeEndpointsToNodeBoundaries, "clipEdgeEndpointsToNodeBoundaries");
      __name(snapEndpointToBoundary, "snapEndpointToBoundary");
      __name(firstDistinctAdjacent, "firstDistinctAdjacent");
      __name(cornerClearanceRange, "cornerClearanceRange");
      __name(clampToCornerClearance, "clampToCornerClearance");
      __name(intersectRanges, "intersectRanges");
      __name(clearanceRangeForSide, "clearanceRangeForSide");
      __name(terminalSideForSegment, "terminalSideForSegment");
      __name(isHorizontalSide, "isHorizontalSide");
      __name(straightClearanceRange, "straightClearanceRange");
      __name(clearStraightEndpointCornerAxis, "clearStraightEndpointCornerAxis");
      __name(clearStraightEndpointCornerConnections, "clearStraightEndpointCornerConnections");
      __name(cornerClearedEndpoint, "cornerClearedEndpoint");
      __name(moveCollinearEndpointRun, "moveCollinearEndpointRun");
      __name(clearEndpointCornerConnection, "clearEndpointCornerConnection");
      __name(borderSideForSegment, "borderSideForSegment");
      __name(leavesOutward, "leavesOutward");
      __name(collapseOwnBorderStub, "collapseOwnBorderStub");
      __name(snapAndCollapseEndpoints, "snapAndCollapseEndpoints");
      __name(prepareEdgeEndpointsForRenderer, "prepareEdgeEndpointsForRenderer");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/lrTransform.ts
  function buildNodeMap(nodes5) {
    return new Map(nodes5.map((node2) => [node2.id, node2]));
  }
  function resolveTopLevelGroupId(node2, nodeById) {
    let parentId = node2.parentId;
    let topLevelGroupId = null;
    while (parentId) {
      const parent4 = nodeById.get(parentId);
      if (!parent4?.isGroup) {
        break;
      }
      topLevelGroupId = parent4.id;
      parentId = parent4.parentId;
    }
    return topLevelGroupId;
  }
  function groupDepth(group2, nodeById) {
    let depth = 0;
    let parentId = group2.parentId;
    while (parentId) {
      const parent4 = nodeById.get(parentId);
      if (!parent4?.isGroup) {
        break;
      }
      depth++;
      parentId = parent4.parentId;
    }
    return depth;
  }
  function boundsForChildren(children2) {
    let minX = Infinity;
    let maxX = -Infinity;
    let minY = Infinity;
    let maxY = -Infinity;
    for (const child of children2) {
      const cx = child.x;
      const cy = child.y;
      if (typeof cx !== "number" || typeof cy !== "number") {
        continue;
      }
      const w4 = child.width ?? 0;
      const h3 = child.height ?? 0;
      minX = Math.min(minX, cx - w4 / 2);
      maxX = Math.max(maxX, cx + w4 / 2);
      minY = Math.min(minY, cy - h3 / 2);
      maxY = Math.max(maxY, cy + h3 / 2);
    }
    if (minX === Infinity || minY === Infinity) {
      return null;
    }
    return { minX, maxX, minY, maxY };
  }
  function applyGroupBounds(group2, bounds4) {
    const pad3 = group2.padding ?? 20;
    group2.x = (bounds4.minX + bounds4.maxX) / 2;
    group2.y = (bounds4.minY + bounds4.maxY) / 2;
    group2.width = Math.max(0, bounds4.maxX - bounds4.minX) + pad3;
    group2.height = Math.max(0, bounds4.maxY - bounds4.minY) + pad3;
  }
  function recomputeNestedGroupBounds(nodes5) {
    const nodeById = buildNodeMap(nodes5);
    const groupsByDepth = nodes5.filter((node2) => node2.isGroup && node2.parentId).sort((a2, b3) => groupDepth(b3, nodeById) - groupDepth(a2, nodeById));
    for (const group2 of groupsByDepth) {
      const children2 = nodes5.filter((node2) => node2.parentId === group2.id);
      const bounds4 = boundsForChildren(children2);
      if (bounds4) {
        applyGroupBounds(group2, bounds4);
      }
    }
  }
  function mirrorAxis(layout7, axis2) {
    const nodes5 = layout7.nodes ?? [];
    const edges3 = layout7.edges ?? [];
    const contentNodes = nodes5.filter((node2) => !node2.isGroup);
    let min10 = Infinity;
    let max10 = -Infinity;
    for (const node2 of contentNodes) {
      const value2 = node2[axis2];
      if (typeof value2 !== "number") {
        continue;
      }
      min10 = Math.min(min10, value2);
      max10 = Math.max(max10, value2);
    }
    if (!Number.isFinite(min10) || !Number.isFinite(max10)) {
      return false;
    }
    const mirror = /* @__PURE__ */ __name((value2) => min10 + max10 - value2, "mirror");
    for (const node2 of nodes5) {
      const value2 = node2[axis2];
      if (typeof value2 === "number") {
        node2[axis2] = mirror(value2);
      }
      const titleRect = node2.groupTitleRect;
      if (titleRect) {
        node2.groupTitleRect = axis2 === "x" ? {
          ...titleRect,
          left: mirror(titleRect.right),
          right: mirror(titleRect.left)
        } : {
          ...titleRect,
          top: mirror(titleRect.bottom),
          bottom: mirror(titleRect.top)
        };
      }
    }
    for (const edge of edges3) {
      for (const point8 of edge.points ?? []) {
        point8[axis2] = mirror(point8[axis2]);
      }
    }
    return true;
  }
  function applyBtDirectionTransform(layout7) {
    const nodes5 = layout7.nodes ?? [];
    if (!nodes5.some((node2) => !node2.isGroup)) {
      return true;
    }
    return mirrorAxis(layout7, "y");
  }
  function applyLrDirectionTransform(layout7, direction2 = "LR") {
    const nodes5 = layout7.nodes ?? [];
    const edges3 = layout7.edges ?? [];
    const contentNodes = nodes5.filter((n2) => !n2.isGroup);
    let minX = Infinity;
    let minY = Infinity;
    for (const n2 of contentNodes) {
      const x0 = n2.x ?? 0;
      const y0 = n2.y ?? 0;
      if (x0 < minX) {
        minX = x0;
      }
      if (y0 < minY) {
        minY = y0;
      }
    }
    if (!Number.isFinite(minX) || !Number.isFinite(minY)) {
      return false;
    }
    const titleBandSize = 36;
    let totalWidth = 0;
    let totalHeight = 0;
    for (const n2 of contentNodes) {
      totalWidth += n2.width ?? 0;
      totalHeight += n2.height ?? 0;
    }
    const avgWidth = totalWidth / contentNodes.length;
    const avgHeight = totalHeight / contentNodes.length;
    const horizontalScaleFactor = avgHeight > 0 ? Math.max(1, avgWidth / avgHeight) : 1;
    for (const n2 of contentNodes) {
      const x0 = n2.x ?? 0;
      const y0 = n2.y ?? 0;
      const newX = (y0 - minY) * horizontalScaleFactor + titleBandSize;
      const newY = x0 - minX;
      n2.x = newX;
      n2.y = newY;
    }
    for (const e3 of edges3) {
      if (!e3.points) {
        continue;
      }
      for (const p3 of e3.points) {
        const x0 = p3.x;
        const y0 = p3.y;
        const newX = (y0 - minY) * horizontalScaleFactor + titleBandSize;
        const newY = x0 - minX;
        p3.x = newX;
        p3.y = newY;
      }
    }
    recomputeNestedGroupBounds(nodes5);
    const laneNodes = nodes5.filter((n2) => n2.isGroup && !n2.parentId);
    if (laneNodes.length === 0) {
      if (direction2 === "RL") {
        mirrorAxis(layout7, "x");
      }
      return true;
    }
    const nodeById = buildNodeMap(nodes5);
    const childrenByLane = /* @__PURE__ */ new Map();
    for (const n2 of nodes5) {
      if (n2.isGroup) {
        continue;
      }
      const laneId = resolveTopLevelGroupId(n2, nodeById);
      if (!laneId) {
        continue;
      }
      const bucket = childrenByLane.get(laneId) ?? [];
      bucket.push(n2);
      childrenByLane.set(laneId, bucket);
    }
    let maxPad = 0;
    for (const lane of laneNodes) {
      const pad3 = lane.padding ?? 0;
      if (pad3 > maxPad) {
        maxPad = pad3;
      }
    }
    const laneBounds = [];
    let globalMinXChild = Infinity;
    let globalMaxXChild = -Infinity;
    for (const lane of laneNodes) {
      const children2 = childrenByLane.get(lane.id) ?? [];
      const bounds4 = boundsForChildren(children2);
      if (!bounds4) {
        continue;
      }
      globalMinXChild = Math.min(globalMinXChild, bounds4.minX);
      globalMaxXChild = Math.max(globalMaxXChild, bounds4.maxX);
      laneBounds.push({
        lane,
        contentTop: bounds4.minY,
        contentBottom: bounds4.maxY,
        centerY: (bounds4.minY + bounds4.maxY) / 2
      });
    }
    if (globalMinXChild === Infinity || globalMaxXChild === -Infinity) {
      return true;
    }
    const fullContentWidth = Math.max(0, globalMaxXChild - globalMinXChild);
    const horizontalMargin = Math.max(maxPad, 10);
    const bodyWidth = fullContentWidth + 2 * horizontalMargin;
    const laneWidth = titleBandSize + bodyWidth;
    const bodyCenter = (globalMinXChild + globalMaxXChild) / 2;
    const bodyLeft = bodyCenter - bodyWidth / 2;
    const laneLeft = bodyLeft - titleBandSize;
    const centerX = laneLeft + laneWidth / 2;
    const verticalMargin = Math.max(maxPad, titleBandSize);
    laneBounds.sort((a2, b3) => a2.centerY - b3.centerY);
    for (let i2 = 0; i2 < laneBounds.length; i2++) {
      const curr = laneBounds[i2];
      let laneTop;
      let laneBottom;
      if (i2 === 0) {
        laneTop = curr.contentTop - verticalMargin;
      } else {
        const prev2 = laneBounds[i2 - 1];
        laneTop = (prev2.contentBottom + curr.contentTop) / 2;
      }
      if (i2 === laneBounds.length - 1) {
        laneBottom = curr.contentBottom + verticalMargin;
      } else {
        const next3 = laneBounds[i2 + 1];
        laneBottom = (curr.contentBottom + next3.contentTop) / 2;
      }
      const laneHeight = Math.max(0, laneBottom - laneTop);
      const centerY = (laneTop + laneBottom) / 2;
      curr.lane.x = centerX;
      curr.lane.y = centerY;
      curr.lane.width = laneWidth;
      curr.lane.height = laneHeight;
      curr.lane.swimlaneContentTop = curr.contentTop;
      curr.lane.groupTitleRect = {
        left: laneLeft,
        right: laneLeft + titleBandSize,
        top: laneTop,
        bottom: laneBottom
      };
    }
    if (direction2 === "RL") {
      mirrorAxis(layout7, "x");
    }
    return true;
  }
  var init_lrTransform = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/lrTransform.ts"() {
      "use strict";
      __name(buildNodeMap, "buildNodeMap");
      __name(resolveTopLevelGroupId, "resolveTopLevelGroupId");
      __name(groupDepth, "groupDepth");
      __name(boundsForChildren, "boundsForChildren");
      __name(applyGroupBounds, "applyGroupBounds");
      __name(recomputeNestedGroupBounds, "recomputeNestedGroupBounds");
      __name(mirrorAxis, "mirrorAxis");
      __name(applyBtDirectionTransform, "applyBtDirectionTransform");
      __name(applyLrDirectionTransform, "applyLrDirectionTransform");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/portSwap.ts
  function portSwapToLShape(edges3, nodes5) {
    const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes5);
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const pts2 = edge.points;
      if (!pts2 || pts2.length < 4) {
        continue;
      }
      const route = classifyThreeSegmentRoute(dedupeConsecutivePoints(pts2, EPS3), EPS3);
      if (!route) {
        continue;
      }
      const { p3 } = route;
      const isHVH = route.kind === "HVH";
      const nodePair = getNodePairGeometry(edge, nodeInfoById, EPS3);
      if (!nodePair) {
        continue;
      }
      const { srcId, dstId, srcInfo, dstInfo, collinearX, collinearY } = nodePair;
      if (collinearX || collinearY) {
        continue;
      }
      let newPts;
      const srcRect = srcInfo.rect;
      for (const delta of TRY_DELTAS) {
        let np0;
        let np1;
        let np2;
        if (isHVH) {
          const dstBelow = dstInfo.cy > srcInfo.cy;
          const newSrcY = dstBelow ? srcRect.bottom : srcRect.top;
          const newSrcX = srcInfo.cx + delta;
          if (newSrcX <= srcRect.left + EPS3 || newSrcX >= srcRect.right - EPS3) {
            continue;
          }
          np0 = { x: newSrcX, y: newSrcY };
          np1 = { x: newSrcX, y: p3.y };
          np2 = { x: p3.x, y: p3.y };
        } else {
          const dstEast = dstInfo.cx > srcInfo.cx;
          const newSrcX = dstEast ? srcRect.right : srcRect.left;
          const newSrcY = srcInfo.cy + delta;
          if (newSrcY <= srcRect.top + EPS3 || newSrcY >= srcRect.bottom - EPS3) {
            continue;
          }
          np0 = { x: newSrcX, y: newSrcY };
          np1 = { x: p3.x, y: newSrcY };
          np2 = { x: p3.x, y: p3.y };
        }
        const firstSegDegenerate = samePoint(np0, np1, EPS3);
        const secondSegDegenerate = samePoint(np1, np2, EPS3);
        if (firstSegDegenerate && secondSegDegenerate) {
          continue;
        }
        if (!firstSegDegenerate && segmentHitsAnyRect(np0, np1, realNodeRects, [srcId], 1)) {
          continue;
        }
        if (!secondSegDegenerate && segmentHitsAnyRect(np1, np2, realNodeRects, [dstId], 1)) {
          continue;
        }
        const firstSegConflicts = !firstSegDegenerate && segmentConflictsWithAnyEdge(np0, np1, edges3, edge, {
          epsilon: EPS3,
          skipDegenerateOther: true
        });
        const secondSegConflicts = !secondSegDegenerate && segmentConflictsWithAnyEdge(np1, np2, edges3, edge, {
          epsilon: EPS3,
          skipDegenerateOther: true
        });
        if (firstSegConflicts || secondSegConflicts) {
          continue;
        }
        if (firstSegDegenerate) {
          newPts = [np1, np2];
        } else if (secondSegDegenerate) {
          newPts = [np0, np1];
        } else {
          newPts = [np0, np1, np2];
        }
        break;
      }
      if (newPts) {
        edge.points = newPts;
      }
    }
  }
  var EPS3, MIN_PORT_SPACING, PORT_SHIFT, TRY_DELTAS;
  var init_portSwap = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/portSwap.ts"() {
      "use strict";
      init_geometry();
      EPS3 = 1e-6;
      MIN_PORT_SPACING = 8;
      PORT_SHIFT = MIN_PORT_SPACING;
      TRY_DELTAS = [0, PORT_SHIFT, -PORT_SHIFT, 2 * PORT_SHIFT, -2 * PORT_SHIFT];
      __name(portSwapToLShape, "portSwapToLShape");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/terminalStub.ts
  function collapseShortTerminalStub(edges3, nodeByIdMap) {
    const MIN_STUB = 10;
    const EPS_LOCAL2 = 1e-3;
    const BUFFER = 2;
    const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(
      nodeByIdMap.values()
    );
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const rawPts = edge.points;
      if (!rawPts || rawPts.length < 4) {
        continue;
      }
      const pts2 = dedupeConsecutivePoints(rawPts, EPS_LOCAL2);
      if (pts2.length < 4) {
        continue;
      }
      const nLast = pts2.length - 1;
      const endPt = pts2[nLast];
      const penultPt = pts2[nLast - 1];
      const prevPt = pts2[nLast - 2];
      const lastDx = endPt.x - penultPt.x;
      const lastDy = endPt.y - penultPt.y;
      const lastLen = Math.hypot(lastDx, lastDy);
      if (lastLen >= MIN_STUB || lastLen < EPS_LOCAL2) {
        continue;
      }
      const penultDx = penultPt.x - prevPt.x;
      const penultDy = penultPt.y - prevPt.y;
      const penultLen = Math.hypot(penultDx, penultDy);
      if (penultLen < EPS_LOCAL2) {
        continue;
      }
      const lastIsHoriz = isHorizontalSegment(penultPt, endPt, EPS_LOCAL2);
      const lastIsVert = isVerticalSegment(penultPt, endPt, EPS_LOCAL2);
      const penultIsHoriz = isHorizontalSegment(prevPt, penultPt, EPS_LOCAL2);
      const penultIsVert = isVerticalSegment(prevPt, penultPt, EPS_LOCAL2);
      if (!(lastIsHoriz && penultIsVert || lastIsVert && penultIsHoriz)) {
        continue;
      }
      const dstId = edge.end;
      const srcId = edge.start;
      const dst = dstId ? nodeByIdMap.get(dstId) : void 0;
      if (!dst) {
        continue;
      }
      const dstCx = dst.x ?? 0;
      const dstCy = dst.y ?? 0;
      const dstRect = rectOfNodeBounds(dst);
      if (!dstRect) {
        continue;
      }
      let newPrev;
      let newEnd;
      if (penultIsVert) {
        const approachFromBelow = penultDy < 0;
        newPrev = { x: dstCx, y: prevPt.y };
        newEnd = { x: dstCx, y: approachFromBelow ? dstRect.bottom : dstRect.top };
      } else {
        const approachFromLeft = penultDx > 0;
        newPrev = { x: prevPt.x, y: dstCy };
        newEnd = { x: approachFromLeft ? dstRect.right : dstRect.left, y: dstCy };
      }
      if (segmentHitsAnyRect(newPrev, newEnd, realNodeRects, dstId ? [dstId] : [], -BUFFER)) {
        continue;
      }
      if (segmentHitsAnyRect(newPrev, newEnd, labelRects, [], -BUFFER)) {
        continue;
      }
      if (srcId) {
        const src = nodeByIdMap.get(srcId);
        const srcRect = src ? rectOfNodeBounds(src) : void 0;
        if (srcRect && pointInsideRect(newPrev, srcRect, BUFFER)) {
          continue;
        }
      }
      const ownSegmentKey = /* @__PURE__ */ __name((a2, b3) => `${a2.x.toFixed(3)},${a2.y.toFixed(3)}|${b3.x.toFixed(3)},${b3.y.toFixed(3)}`, "ownSegmentKey");
      const selfSegments = /* @__PURE__ */ new Set();
      for (let i2 = 0; i2 < pts2.length - 1; i2++) {
        selfSegments.add(ownSegmentKey(pts2[i2], pts2[i2 + 1]));
      }
      const segmentCrossesOtherEdge = /* @__PURE__ */ __name((from2, to) => {
        for (const other of edges3) {
          if (other === edge) {
            continue;
          }
          if (other.isLayoutOnly) {
            continue;
          }
          const oPts = other.points;
          if (!oPts || oPts.length < 2) {
            continue;
          }
          for (let i2 = 0; i2 < oPts.length - 1; i2++) {
            const a2 = oPts[i2];
            const b3 = oPts[i2 + 1];
            if (selfSegments.has(ownSegmentKey(a2, b3))) {
              continue;
            }
            if (orthogonalSegmentsStrictlyCross(from2, to, a2, b3, EPS_LOCAL2)) {
              return true;
            }
          }
        }
        return false;
      }, "segmentCrossesOtherEdge");
      if (segmentCrossesOtherEdge(newPrev, newEnd)) {
        continue;
      }
      if (nLast - 3 >= 0) {
        const beforePrev = pts2[nLast - 3];
        const endpointIds = [srcId, dstId].filter((id41) => Boolean(id41));
        if (segmentHitsAnyRect(beforePrev, newPrev, realNodeRects, endpointIds, -BUFFER)) {
          continue;
        }
        if (segmentCrossesOtherEdge(beforePrev, newPrev)) {
          continue;
        }
      }
      const head2 = pts2.slice(0, nLast - 2);
      const newPts = [...head2, newPrev, newEnd];
      edge.points = newPts;
      const labelId = edge.labelNodeId;
      if (labelId) {
        const labelNode = nodeByIdMap.get(labelId);
        if (labelNode) {
          const lw = labelNode.width ?? 0;
          const lh = labelNode.height ?? 0;
          if (lw > 0 && lh > 0) {
            let bestMidX;
            let bestMidY;
            let bestLen = -1;
            for (let i2 = 0; i2 < newPts.length - 1; i2++) {
              const a2 = newPts[i2];
              const b3 = newPts[i2 + 1];
              const segLen = Math.hypot(b3.x - a2.x, b3.y - a2.y);
              const isHoriz = sameY(a2, b3, EPS_LOCAL2);
              const isVert = sameX(a2, b3, EPS_LOCAL2);
              const fits = isHoriz && segLen >= lw + 2 || isVert && segLen >= lh + 2;
              if (!fits) {
                continue;
              }
              if (segLen > bestLen) {
                bestLen = segLen;
                bestMidX = (a2.x + b3.x) / 2;
                bestMidY = (a2.y + b3.y) / 2;
              }
            }
            if (bestMidX !== void 0 && bestMidY !== void 0) {
              labelNode.x = bestMidX;
              labelNode.y = bestMidY;
            }
          }
        }
      }
    }
  }
  var init_terminalStub = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/terminalStub.ts"() {
      "use strict";
      init_geometry();
      __name(collapseShortTerminalStub, "collapseShortTerminalStub");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/materializedGeometry.ts
  function separateSharedRenderedTerminalLanes(edges3, nodeByIdMap) {
    const MIN_FACE_CLEARANCE = 16;
    const TRACK_SHIFT = 7;
    const rectIntersect = /* @__PURE__ */ __name((node2, point8) => {
      const x5 = node2.x ?? 0;
      const y6 = node2.y ?? 0;
      const dx = point8.x - x5;
      const dy = point8.y - y6;
      let w4 = (node2.width ?? 0) / 2;
      let h3 = (node2.height ?? 0) / 2;
      if (Math.abs(dy) * w4 > Math.abs(dx) * h3) {
        if (dy < 0) {
          h3 = -h3;
        }
        return { x: x5 + (dy === 0 ? 0 : h3 * dx / dy), y: y6 + h3 };
      }
      if (dx < 0) {
        w4 = -w4;
      }
      return { x: x5 + w4, y: y6 + (dx === 0 ? 0 : w4 * dy / dx) };
    }, "rectIntersect");
    const terminalLaneFor = /* @__PURE__ */ __name((edge, atStart) => {
      const points = dedupeConsecutivePoints(edge.points ?? []);
      if (points.length < 2) {
        return void 0;
      }
      const nodeId = atStart ? edge.start : edge.end;
      const node2 = nodeId ? nodeByIdMap.get(nodeId) : void 0;
      const rect3 = node2 ? rectOfNodeBounds(node2) : void 0;
      if (!node2 || !nodeId || !rect3) {
        return void 0;
      }
      const endpoint = atStart ? points[0] : points[points.length - 1];
      const adjacent = atStart ? points[1] : points[points.length - 2];
      const boundary = rectIntersect(node2, endpoint);
      let railEnd = endpoint;
      if (orthogonallyAligned(adjacent, boundary)) {
        railEnd = adjacent;
      }
      if (sameX(boundary, railEnd, EPS_LOCAL)) {
        return {
          edge,
          edgeId: String(edge.id ?? ""),
          nodeId,
          atStart,
          orientation: "V",
          coord: boundary.x,
          min: Math.min(boundary.y, railEnd.y),
          max: Math.max(boundary.y, railEnd.y),
          boundary,
          railEnd,
          rect: rect3
        };
      }
      if (sameY(boundary, railEnd, EPS_LOCAL)) {
        return {
          edge,
          edgeId: String(edge.id ?? ""),
          nodeId,
          atStart,
          orientation: "H",
          coord: boundary.y,
          min: Math.min(boundary.x, railEnd.x),
          max: Math.max(boundary.x, railEnd.x),
          boundary,
          railEnd,
          rect: rect3
        };
      }
      return void 0;
    }, "terminalLaneFor");
    const projectedOverlapLength = /* @__PURE__ */ __name((a2, b3) => Math.max(0, Math.min(a2.max, b3.max) - Math.max(a2.min, b3.min)), "projectedOverlapLength");
    const sameTerminalFace = /* @__PURE__ */ __name((a2, b3) => {
      if (a2.nodeId !== b3.nodeId || a2.orientation !== b3.orientation) {
        return false;
      }
      if (a2.orientation === "H") {
        const aOnHorizontalFace = Math.abs(a2.boundary.x - a2.rect.left) < 1 || Math.abs(a2.boundary.x - a2.rect.right) < 1;
        return aOnHorizontalFace && sameX(a2.boundary, b3.boundary, 1);
      }
      const aOnVerticalFace = Math.abs(a2.boundary.y - a2.rect.top) < 1 || Math.abs(a2.boundary.y - a2.rect.bottom) < 1;
      return aOnVerticalFace && sameY(a2.boundary, b3.boundary, 1);
    }, "sameTerminalFace");
    const exactTerminalLaneConflict = /* @__PURE__ */ __name((a2, b3) => {
      if (a2.nodeId !== b3.nodeId || a2.orientation !== b3.orientation) {
        return false;
      }
      const shared = projectedOverlapLength(a2, b3);
      return shared >= MIN_SHARED && Math.abs(a2.coord - b3.coord) < 0.5;
    }, "exactTerminalLaneConflict");
    const nearTerminalLaneConflict = /* @__PURE__ */ __name((a2, b3) => {
      if (a2.nodeId !== b3.nodeId || a2.orientation !== b3.orientation || a2.orientation !== "H" || a2.atStart === b3.atStart) {
        return false;
      }
      const shared = projectedOverlapLength(a2, b3);
      if (shared < MIN_SHARED) {
        return false;
      }
      const faceSpan = a2.rect.bottom - a2.rect.top;
      if (shared < faceSpan || shared > 2 * faceSpan) {
        return false;
      }
      return sameTerminalFace(a2, b3) && Math.abs(a2.coord - b3.coord) < MIN_FACE_CLEARANCE;
    }, "nearTerminalLaneConflict");
    const shiftedCandidate = /* @__PURE__ */ __name((lane, shift2) => {
      const points = dedupeConsecutivePoints(lane.edge.points ?? []);
      if (points.length < 2) {
        return void 0;
      }
      const shiftedBoundary = lane.orientation === "V" ? { x: lane.boundary.x + shift2, y: lane.boundary.y } : { x: lane.boundary.x, y: lane.boundary.y + shift2 };
      const shiftedRailEnd = lane.orientation === "V" ? { x: lane.railEnd.x + shift2, y: lane.railEnd.y } : { x: lane.railEnd.x, y: lane.railEnd.y + shift2 };
      const boundaryStaysOnSameFace = /* @__PURE__ */ __name(() => {
        if (Math.abs(lane.boundary.y - lane.rect.top) < 1 || Math.abs(lane.boundary.y - lane.rect.bottom) < 1) {
          return sameY(shiftedBoundary, lane.boundary, EPS_LOCAL) && shiftedBoundary.x >= lane.rect.left + 1 && shiftedBoundary.x <= lane.rect.right - 1;
        }
        if (Math.abs(lane.boundary.x - lane.rect.left) < 1 || Math.abs(lane.boundary.x - lane.rect.right) < 1) {
          return sameX(shiftedBoundary, lane.boundary, EPS_LOCAL) && shiftedBoundary.y >= lane.rect.top + 1 && shiftedBoundary.y <= lane.rect.bottom - 1;
        }
        return false;
      }, "boundaryStaysOnSameFace");
      if (!boundaryStaysOnSameFace()) {
        return void 0;
      }
      if (lane.atStart) {
        const railEndIsAdjacent2 = points.length > 1 && samePoint(points[1], lane.railEnd, EPS_LOCAL);
        const rest = points.slice(railEndIsAdjacent2 ? 2 : 1);
        const next3 = rest[0];
        if (next3 && !orthogonallyAligned(next3, shiftedRailEnd)) {
          return void 0;
        }
        return [shiftedBoundary, shiftedRailEnd, ...rest];
      }
      const railEndIsAdjacent = points.length > 1 && samePoint(points[points.length - 2], lane.railEnd, EPS_LOCAL);
      const before = points.slice(0, railEndIsAdjacent ? -2 : -1);
      const previous = before[before.length - 1];
      if (previous && !orthogonallyAligned(previous, shiftedRailEnd)) {
        return void 0;
      }
      return [...before, shiftedRailEnd, shiftedBoundary];
    }, "shiftedCandidate");
    const laneIsStraightCollinearConnector = /* @__PURE__ */ __name((lane) => {
      const edge = lane.edge;
      const points = dedupeConsecutivePoints(edge.points ?? []);
      if (points.length !== 2) {
        return false;
      }
      const startId = edge.start;
      const endId = edge.end;
      const start3 = startId ? nodeByIdMap.get(startId) : void 0;
      const end2 = endId ? nodeByIdMap.get(endId) : void 0;
      if (!start3 || !end2) {
        return false;
      }
      const startX2 = start3.x ?? 0;
      const startY2 = start3.y ?? 0;
      const endX = end2.x ?? 0;
      const endY = end2.y ?? 0;
      const [a2, b3] = points;
      return sameY(a2, b3, EPS_LOCAL) && Math.abs(startY2 - endY) < 1 && Math.abs(startX2 - endX) > 1 || sameX(a2, b3, EPS_LOCAL) && Math.abs(startX2 - endX) < 1 && Math.abs(startY2 - endY) > 1;
    }, "laneIsStraightCollinearConnector");
    const shifts = [
      -TRACK_SHIFT,
      TRACK_SHIFT,
      -2 * TRACK_SHIFT,
      2 * TRACK_SHIFT,
      -3 * TRACK_SHIFT,
      3 * TRACK_SHIFT
    ];
    for (let iteration = 0; iteration < 8; iteration++) {
      const lanes2 = edges3.filter((edge) => !edge.isLayoutOnly).flatMap((edge) => [terminalLaneFor(edge, true), terminalLaneFor(edge, false)]).filter((lane) => Boolean(lane));
      let fixed = false;
      for (let i2 = 0; i2 < lanes2.length && !fixed; i2++) {
        for (let j3 = i2 + 1; j3 < lanes2.length && !fixed; j3++) {
          const first3 = lanes2[i2];
          const second2 = lanes2[j3];
          if (first3.edge === second2.edge || !(exactTerminalLaneConflict(first3, second2) || nearTerminalLaneConflict(first3, second2))) {
            continue;
          }
          const fixingNearConflict = !exactTerminalLaneConflict(first3, second2);
          const candidates = [first3, second2].sort((a2, b3) => {
            const aPreservesStraight = laneIsStraightCollinearConnector(a2);
            const bPreservesStraight = laneIsStraightCollinearConnector(b3);
            if (aPreservesStraight !== bPreservesStraight) {
              return Number(aPreservesStraight) - Number(bPreservesStraight);
            }
            return Number(!b3.atStart) - Number(!a2.atStart);
          });
          for (const lane of candidates) {
            for (const shift2 of shifts) {
              const candidate = shiftedCandidate(lane, shift2);
              if (!candidate) {
                continue;
              }
              const nextLane = terminalLaneFor({ ...lane.edge, points: candidate }, lane.atStart);
              if (!nextLane || lanes2.some(
                (other) => other.edge !== lane.edge && (exactTerminalLaneConflict(nextLane, other) || fixingNearConflict && nearTerminalLaneConflict(nextLane, other))
              )) {
                continue;
              }
              lane.edge.points = candidate;
              fixed = true;
              break;
            }
            if (fixed) {
              break;
            }
          }
        }
      }
      if (!fixed) {
        return;
      }
    }
  }
  function collapseRedundantRectangularDoglegs(edges3, nodeByIdMap) {
    const BUFFER = 2;
    const MAX_ITERATIONS = 8;
    const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(
      nodeByIdMap.values()
    );
    const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate) => {
      const sourceId = edge.start;
      const targetId = edge.end;
      const candidateSegments = segmentsFor(candidate);
      if (candidateSegments.length !== candidate.length - 1) {
        return false;
      }
      const endpointIds = [sourceId, targetId].filter((id41) => Boolean(id41));
      for (const segment of candidateSegments) {
        if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {
          return false;
        }
        if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {
          return false;
        }
      }
      for (const other of edges3) {
        if (other === edge || other.isLayoutOnly) {
          continue;
        }
        const otherPoints = other.points;
        if (!otherPoints || otherPoints.length < 2) {
          continue;
        }
        for (const candidateSegment of candidateSegments) {
          for (const otherSegment of segmentsFor(dedupeConsecutivePoints(otherPoints))) {
            if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {
              return false;
            }
            if (orthogonalSegmentsStrictlyCross(
              candidateSegment.a,
              candidateSegment.b,
              otherSegment.a,
              otherSegment.b,
              EPS_LOCAL
            )) {
              return false;
            }
          }
        }
      }
      return true;
    }, "candidateIsSafe");
    const withoutDogleg = /* @__PURE__ */ __name((points, i2) => {
      if (i2 + 4 >= points.length) {
        return void 0;
      }
      const p0 = points[i2];
      const p1 = points[i2 + 1];
      const p22 = points[i2 + 2];
      const p3 = points[i2 + 3];
      const p4 = points[i2 + 4];
      const terminalVerticalDogleg = isHorizontalSegment(p0, p1) && isVerticalSegment(p1, p22) && isHorizontalSegment(p22, p3) && isVerticalSegment(p3, p4) && sameX(p0, p3, EPS_LOCAL) && sameX(p0, p4, EPS_LOCAL) && sameX(p1, p22, EPS_LOCAL) && (p1.x - p0.x) * (p3.x - p22.x) < 0;
      const terminalHorizontalDogleg = isVerticalSegment(p0, p1) && isHorizontalSegment(p1, p22) && isVerticalSegment(p22, p3) && isHorizontalSegment(p3, p4) && sameY(p0, p3, EPS_LOCAL) && sameY(p0, p4, EPS_LOCAL) && sameY(p1, p22, EPS_LOCAL) && (p1.y - p0.y) * (p3.y - p22.y) < 0;
      if (terminalVerticalDogleg || terminalHorizontalDogleg) {
        return dedupeConsecutivePoints([...points.slice(0, i2 + 1), p4, ...points.slice(i2 + 5)]);
      }
      if (i2 + 5 >= points.length) {
        return void 0;
      }
      const p5 = points[i2 + 5];
      const verticalDogleg = isVerticalSegment(p0, p1) && isHorizontalSegment(p1, p22) && isVerticalSegment(p22, p3) && isHorizontalSegment(p3, p4) && isVerticalSegment(p4, p5) && sameX(p0, p4, EPS_LOCAL) && sameX(p0, p5, EPS_LOCAL) && sameX(p22, p3, EPS_LOCAL) && (p22.x - p1.x) * (p4.x - p3.x) < 0;
      const horizontalDogleg = isHorizontalSegment(p0, p1) && isVerticalSegment(p1, p22) && isHorizontalSegment(p22, p3) && isVerticalSegment(p3, p4) && isHorizontalSegment(p4, p5) && sameY(p0, p4, EPS_LOCAL) && sameY(p0, p5, EPS_LOCAL) && sameY(p22, p3, EPS_LOCAL) && (p22.y - p1.y) * (p4.y - p3.y) < 0;
      if (!verticalDogleg && !horizontalDogleg) {
        return void 0;
      }
      return dedupeConsecutivePoints([...points.slice(0, i2 + 1), p5, ...points.slice(i2 + 6)]);
    }, "withoutDogleg");
    for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
      let fixed = false;
      for (const edge of edges3) {
        if (edge.isLayoutOnly) {
          continue;
        }
        const points = dedupeConsecutivePoints(edge.points ?? []);
        for (let i2 = 0; i2 <= points.length - 5; i2++) {
          const candidate = withoutDogleg(points, i2);
          if (!candidate || !candidateIsSafe(edge, candidate)) {
            continue;
          }
          edge.points = candidate;
          fixed = true;
          break;
        }
        if (fixed) {
          break;
        }
      }
      if (!fixed) {
        return;
      }
    }
  }
  function liftObstacleHuggingSameSideRails(edges3, nodeByIdMap) {
    const BUFFER = 2;
    const CLEARANCE = 20;
    const MAX_ITERATIONS = 8;
    const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(
      nodeByIdMap.values()
    );
    const visibleEdges = edges3.filter((edge) => !edge.isLayoutOnly);
    const pointsFor = /* @__PURE__ */ __name((edge, replacementEdge, replacement) => dedupeConsecutivePoints(
      edge === replacementEdge ? replacement ?? [] : edge.points ?? []
    ), "pointsFor");
    const strictCrossingCount = /* @__PURE__ */ __name((replacementEdge, replacement) => {
      let count2 = 0;
      for (let i2 = 0; i2 < visibleEdges.length; i2++) {
        const firstSegments = segmentsFor(pointsFor(visibleEdges[i2], replacementEdge, replacement));
        for (let j3 = i2 + 1; j3 < visibleEdges.length; j3++) {
          const secondSegments = segmentsFor(
            pointsFor(visibleEdges[j3], replacementEdge, replacement)
          );
          for (const firstSegment of firstSegments) {
            for (const secondSegment of secondSegments) {
              if (orthogonalSegmentsStrictlyCross(
                firstSegment.a,
                firstSegment.b,
                secondSegment.a,
                secondSegment.b,
                EPS_LOCAL
              )) {
                count2++;
              }
            }
          }
        }
      }
      return count2;
    }, "strictCrossingCount");
    const middleRail = /* @__PURE__ */ __name((points) => {
      const segments = segmentsFor(points);
      if (segments.length !== 3) {
        return void 0;
      }
      const middle = segments[1];
      if (segments[0].horizontal === middle.horizontal || segments[2].horizontal === middle.horizontal) {
        return void 0;
      }
      return {
        index: middle.index,
        horizontal: middle.horizontal,
        vertical: middle.vertical,
        segment: middle
      };
    }, "middleRail");
    const blockingRectsFor = /* @__PURE__ */ __name((edge, rail) => {
      const endpointIds = [edge.start, edge.end].filter(
        (id41) => Boolean(id41)
      );
      return realNodeRects.filter((entry) => {
        if (endpointIds.includes(entry.id)) {
          return false;
        }
        const rect3 = entry.rect;
        if (rail.horizontal) {
          const xOverlap = overlapLength(rail.a.x, rail.b.x, rect3.left, rect3.right);
          return xOverlap >= MIN_SHARED && rail.a.y >= rect3.top - BUFFER && rail.a.y <= rect3.bottom + BUFFER;
        }
        const yOverlap = overlapLength(rail.a.y, rail.b.y, rect3.top, rect3.bottom);
        return yOverlap >= MIN_SHARED && rail.a.x >= rect3.left - BUFFER && rail.a.x <= rect3.right + BUFFER;
      });
    }, "blockingRectsFor");
    const candidateByMovingRail = /* @__PURE__ */ __name((points, rail, coord) => {
      const candidate = points.map((point8) => ({ ...point8 }));
      if (rail.horizontal) {
        candidate[rail.index].y = coord;
        candidate[rail.index + 1].y = coord;
      } else if (rail.vertical) {
        candidate[rail.index].x = coord;
        candidate[rail.index + 1].x = coord;
      } else {
        return void 0;
      }
      const simplified = simplifyPolyline(dedupeConsecutivePoints(candidate));
      return segmentsFor(simplified).length === simplified.length - 1 ? simplified : void 0;
    }, "candidateByMovingRail");
    const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate, currentCrossings) => {
      const endpointIds = [edge.start, edge.end].filter(
        (id41) => Boolean(id41)
      );
      const candidateSegments = segmentsFor(candidate);
      if (candidateSegments.length !== candidate.length - 1) {
        return false;
      }
      for (const segment of candidateSegments) {
        if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {
          return false;
        }
        if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {
          return false;
        }
      }
      for (const other of visibleEdges) {
        if (other === edge) {
          continue;
        }
        for (const candidateSegment of candidateSegments) {
          for (const otherSegment of segmentsFor(pointsFor(other))) {
            if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {
              return false;
            }
          }
        }
      }
      return strictCrossingCount(edge, candidate) <= currentCrossings;
    }, "candidateIsSafe");
    for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
      const currentCrossings = strictCrossingCount();
      let fixed = false;
      for (const edge of visibleEdges) {
        const points = pointsFor(edge);
        const rail = middleRail(points);
        if (!rail) {
          continue;
        }
        const blockers = blockingRectsFor(edge, rail.segment);
        if (blockers.length === 0) {
          continue;
        }
        const coords = rail.horizontal ? [
          Math.min(...blockers.map((entry) => entry.rect.top)) - CLEARANCE,
          Math.max(...blockers.map((entry) => entry.rect.bottom)) + CLEARANCE
        ] : [
          Math.min(...blockers.map((entry) => entry.rect.left)) - CLEARANCE,
          Math.max(...blockers.map((entry) => entry.rect.right)) + CLEARANCE
        ];
        for (const coord of coords) {
          const candidate = candidateByMovingRail(points, rail.segment, coord);
          if (!candidate || !candidateIsSafe(edge, candidate, currentCrossings)) {
            continue;
          }
          edge.points = candidate;
          fixed = true;
          break;
        }
        if (fixed) {
          break;
        }
      }
      if (!fixed) {
        return;
      }
    }
  }
  function liftTopLaneTitleBandsAboveRails(edges3, nodeByIdMap) {
    const CLEARANCE = 4;
    const validTitleRect = /* @__PURE__ */ __name((node2) => {
      const rect3 = node2.groupTitleRect;
      if (!rect3 || typeof rect3.left !== "number" || typeof rect3.right !== "number" || typeof rect3.top !== "number" || typeof rect3.bottom !== "number" || !Number.isFinite(rect3.left) || !Number.isFinite(rect3.right) || !Number.isFinite(rect3.top) || !Number.isFinite(rect3.bottom) || rect3.right <= rect3.left || rect3.bottom <= rect3.top) {
        return void 0;
      }
      return { left: rect3.left, right: rect3.right, top: rect3.top, bottom: rect3.bottom };
    }, "validTitleRect");
    const topLaneTitleFor = /* @__PURE__ */ __name((node2) => {
      if (!node2.isGroup || node2.parentId) {
        return void 0;
      }
      const rawDirection = node2.direction;
      const direction2 = typeof rawDirection === "string" ? rawDirection.toUpperCase() : "";
      if (direction2 === "LR" || direction2 === "RL" || direction2 === "BT") {
        return void 0;
      }
      const rect3 = validTitleRect(node2);
      const y6 = node2.y;
      const height2 = node2.height;
      if (!rect3 || typeof y6 !== "number" || typeof height2 !== "number" || !Number.isFinite(y6) || !Number.isFinite(height2) || height2 <= 0) {
        return void 0;
      }
      const titleWidth = rect3.right - rect3.left;
      const titleHeight = rect3.bottom - rect3.top;
      if (titleHeight <= 0 || titleWidth < titleHeight) {
        return void 0;
      }
      return { node: node2, rect: rect3 };
    }, "topLaneTitleFor");
    const horizontalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect3) => {
      if (!segment.horizontal) {
        return false;
      }
      const y6 = segment.a.y;
      if (y6 <= rect3.top + EPS_LOCAL || y6 >= rect3.bottom - EPS_LOCAL) {
        return false;
      }
      return overlapLength(segment.a.x, segment.b.x, rect3.left, rect3.right) >= MIN_SHARED;
    }, "horizontalSegmentIntersectsTitle");
    const lanes2 = [...nodeByIdMap.values()].map(topLaneTitleFor).filter((lane) => Boolean(lane));
    if (lanes2.length === 0) {
      return;
    }
    let topDelta = 0;
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const points = dedupeConsecutivePoints(edge.points ?? []);
      for (const segment of segmentsFor(points)) {
        for (const lane of lanes2) {
          if (!horizontalSegmentIntersectsTitle(segment, lane.rect)) {
            continue;
          }
          topDelta = Math.max(topDelta, lane.rect.bottom - segment.a.y + CLEARANCE);
        }
      }
    }
    if (topDelta <= EPS_LOCAL) {
      return;
    }
    for (const lane of lanes2) {
      const y6 = lane.node.y;
      const height2 = lane.node.height;
      if (typeof y6 !== "number" || typeof height2 !== "number" || !Number.isFinite(y6) || !Number.isFinite(height2) || height2 <= 0) {
        continue;
      }
      lane.node.y = y6 - topDelta / 2;
      lane.node.height = height2 + topDelta;
      lane.node.groupTitleRect = {
        ...lane.rect,
        top: lane.rect.top - topDelta,
        bottom: lane.rect.bottom - topDelta
      };
    }
  }
  function shiftLeftLaneTitleBandsLeftOfRails(edges3, nodeByIdMap) {
    const CLEARANCE = 4;
    const validTitleRect = /* @__PURE__ */ __name((node2) => {
      const rect3 = node2.groupTitleRect;
      if (!rect3 || typeof rect3.left !== "number" || typeof rect3.right !== "number" || typeof rect3.top !== "number" || typeof rect3.bottom !== "number" || !Number.isFinite(rect3.left) || !Number.isFinite(rect3.right) || !Number.isFinite(rect3.top) || !Number.isFinite(rect3.bottom) || rect3.right <= rect3.left || rect3.bottom <= rect3.top) {
        return void 0;
      }
      return { left: rect3.left, right: rect3.right, top: rect3.top, bottom: rect3.bottom };
    }, "validTitleRect");
    const leftLaneTitleFor = /* @__PURE__ */ __name((node2) => {
      if (!node2.isGroup || node2.parentId) {
        return void 0;
      }
      const rawDirection = node2.direction;
      if (rawDirection !== "LR") {
        return void 0;
      }
      const rect3 = validTitleRect(node2);
      const x5 = node2.x;
      const width3 = node2.width;
      if (!rect3 || typeof x5 !== "number" || typeof width3 !== "number" || !Number.isFinite(x5) || !Number.isFinite(width3) || width3 <= 0) {
        return void 0;
      }
      const titleWidth = rect3.right - rect3.left;
      const titleHeight = rect3.bottom - rect3.top;
      if (titleWidth <= 0 || titleHeight < titleWidth) {
        return void 0;
      }
      return { node: node2, rect: rect3 };
    }, "leftLaneTitleFor");
    const verticalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect3) => {
      if (!segment.vertical) {
        return false;
      }
      const x5 = segment.a.x;
      if (x5 <= rect3.left + EPS_LOCAL || x5 >= rect3.right - EPS_LOCAL) {
        return false;
      }
      return overlapLength(segment.a.y, segment.b.y, rect3.top, rect3.bottom) >= MIN_SHARED;
    }, "verticalSegmentIntersectsTitle");
    const horizontalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect3) => {
      if (!segment.horizontal) {
        return false;
      }
      const y6 = segment.a.y;
      if (y6 <= rect3.top + EPS_LOCAL || y6 >= rect3.bottom - EPS_LOCAL) {
        return false;
      }
      return overlapLength(segment.a.x, segment.b.x, rect3.left, rect3.right) >= MIN_SHARED;
    }, "horizontalSegmentIntersectsTitle");
    const lanes2 = [...nodeByIdMap.values()].map(leftLaneTitleFor).filter((lane) => Boolean(lane));
    if (lanes2.length === 0) {
      return;
    }
    let leftDelta = 0;
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const points = dedupeConsecutivePoints(edge.points ?? []);
      for (const segment of segmentsFor(points)) {
        for (const lane of lanes2) {
          if (verticalSegmentIntersectsTitle(segment, lane.rect)) {
            leftDelta = Math.max(leftDelta, lane.rect.right - segment.a.x + CLEARANCE);
          } else if (horizontalSegmentIntersectsTitle(segment, lane.rect)) {
            const segmentLeft = Math.min(segment.a.x, segment.b.x);
            leftDelta = Math.max(leftDelta, lane.rect.right - segmentLeft + CLEARANCE);
          }
        }
      }
    }
    if (leftDelta <= EPS_LOCAL) {
      return;
    }
    for (const lane of lanes2) {
      const x5 = lane.node.x;
      const width3 = lane.node.width;
      if (typeof x5 !== "number" || typeof width3 !== "number" || !Number.isFinite(x5) || !Number.isFinite(width3) || width3 <= 0) {
        continue;
      }
      lane.node.x = x5 - leftDelta / 2;
      lane.node.width = width3 + leftDelta;
      lane.node.groupTitleRect = {
        ...lane.rect,
        left: lane.rect.left - leftDelta,
        right: lane.rect.right - leftDelta
      };
    }
  }
  function swapDestinationTerminalTailsToReduceCrossings(edges3, nodeByIdMap) {
    const BUFFER = 2;
    const MAX_ITERATIONS = 4;
    const { realNodeRects } = collectNodeRectEntries(nodeByIdMap.values());
    const visibleEdges = edges3.filter((edge) => !edge.isLayoutOnly);
    const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(
      replacements.get(edge) ?? edge.points ?? []
    ), "replacementPointsFor");
    const crossingCount = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {
      let count2 = 0;
      for (let i2 = 0; i2 < visibleEdges.length; i2++) {
        const firstSegments = segmentsFor(replacementPointsFor(visibleEdges[i2], replacements));
        for (let j3 = i2 + 1; j3 < visibleEdges.length; j3++) {
          const secondSegments = segmentsFor(replacementPointsFor(visibleEdges[j3], replacements));
          for (const firstSegment of firstSegments) {
            for (const secondSegment of secondSegments) {
              if (orthogonalSegmentsStrictlyCross(
                firstSegment.a,
                firstSegment.b,
                secondSegment.a,
                secondSegment.b,
                EPS_LOCAL
              )) {
                count2++;
              }
            }
          }
        }
      }
      return count2;
    }, "crossingCount");
    const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(
      (sum2, edge) => sum2 + countOrthogonalBends(replacementPointsFor(edge, replacements)),
      0
    ), "totalBends");
    const terminalTailFor = /* @__PURE__ */ __name((edge) => {
      const points = replacementPointsFor(edge);
      if (points.length < 4) {
        return void 0;
      }
      const tailStart = points[points.length - 2];
      const terminal = points[points.length - 1];
      if (!isHorizontalSegment(tailStart, terminal, EPS_LOCAL) && !isVerticalSegment(tailStart, terminal, EPS_LOCAL)) {
        return void 0;
      }
      return { tailStart, terminal };
    }, "terminalTailFor");
    const candidateWithDestinationTail = /* @__PURE__ */ __name((edge, tail) => {
      const points = replacementPointsFor(edge);
      if (points.length < 3) {
        return void 0;
      }
      const start3 = points[0];
      const firstTurn = points[1];
      let connector;
      if (isHorizontalSegment(start3, firstTurn, EPS_LOCAL)) {
        connector = { x: firstTurn.x, y: tail.tailStart.y };
      } else if (isVerticalSegment(start3, firstTurn, EPS_LOCAL)) {
        connector = { x: tail.tailStart.x, y: firstTurn.y };
      } else {
        return void 0;
      }
      const candidate = simplifyPolyline(
        dedupeConsecutivePoints([start3, firstTurn, connector, tail.tailStart, tail.terminal])
      );
      return segmentsFor(candidate).length === candidate.length - 1 ? candidate : void 0;
    }, "candidateWithDestinationTail");
    const pathHasNodeHit = /* @__PURE__ */ __name((edge, path4) => {
      const endpointIds = [edge.start, edge.end].filter(
        (id41) => Boolean(id41)
      );
      for (const segment of segmentsFor(path4)) {
        if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {
          return true;
        }
      }
      return false;
    }, "pathHasNodeHit");
    const pathHasSharedTrack = /* @__PURE__ */ __name((edge, path4, replacements) => {
      for (const other of visibleEdges) {
        if (other === edge) {
          continue;
        }
        for (const candidateSegment of segmentsFor(path4)) {
          for (const otherSegment of segmentsFor(replacementPointsFor(other, replacements))) {
            if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {
              return true;
            }
          }
        }
      }
      return false;
    }, "pathHasSharedTrack");
    const candidateIsSafe = /* @__PURE__ */ __name((edge, path4, replacements) => !pathHasNodeHit(edge, path4) && !pathHasSharedTrack(edge, path4, replacements), "candidateIsSafe");
    const edgesByDestination = /* @__PURE__ */ __name(() => {
      const result = /* @__PURE__ */ new Map();
      for (const edge of visibleEdges) {
        const dstId = edge.end;
        if (!dstId || !nodeByIdMap.has(dstId)) {
          continue;
        }
        const points = replacementPointsFor(edge);
        if (points.length < 4) {
          continue;
        }
        const bucket = result.get(dstId) ?? [];
        bucket.push(edge);
        result.set(dstId, bucket);
      }
      return result;
    }, "edgesByDestination");
    for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
      const currentCrossings = crossingCount();
      if (currentCrossings === 0) {
        return;
      }
      const currentBends = totalBends();
      let bestReplacements;
      let bestCrossings = currentCrossings;
      let bestBends = currentBends;
      for (const destinationEdges of edgesByDestination().values()) {
        for (let i2 = 0; i2 < destinationEdges.length; i2++) {
          for (let j3 = i2 + 1; j3 < destinationEdges.length; j3++) {
            const first3 = destinationEdges[i2];
            const second2 = destinationEdges[j3];
            const firstTail = terminalTailFor(first3);
            const secondTail = terminalTailFor(second2);
            if (!firstTail || !secondTail) {
              continue;
            }
            const firstCandidate = candidateWithDestinationTail(first3, secondTail);
            const secondCandidate = candidateWithDestinationTail(second2, firstTail);
            if (!firstCandidate || !secondCandidate) {
              continue;
            }
            const replacements = /* @__PURE__ */ new Map([
              [first3, firstCandidate],
              [second2, secondCandidate]
            ]);
            if (!candidateIsSafe(first3, firstCandidate, replacements) || !candidateIsSafe(second2, secondCandidate, replacements)) {
              continue;
            }
            const candidateCrossings = crossingCount(replacements);
            const candidateBends = totalBends(replacements);
            if (candidateCrossings >= currentCrossings) {
              continue;
            }
            if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && candidateBends >= bestBends) {
              continue;
            }
            bestReplacements = replacements;
            bestCrossings = candidateCrossings;
            bestBends = candidateBends;
          }
        }
      }
      if (!bestReplacements) {
        return;
      }
      for (const [edge, points] of bestReplacements) {
        edge.points = points;
      }
    }
  }
  function reassignCrossingExternalRailChannels(edges3, nodeByIdMap) {
    const BUFFER = 2;
    const RAIL_CHANNEL_GAP = 12;
    const MAX_ITERATIONS = 4;
    const MAX_EXHAUSTIVE_COMPONENT = 6;
    const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(
      nodeByIdMap.values()
    );
    const visibleEdges = edges3.filter((edge) => !edge.isLayoutOnly);
    const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(
      replacements.get(edge) ?? edge.points ?? []
    ), "replacementPointsFor");
    const strictCrossingCount = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {
      let count2 = 0;
      for (let i2 = 0; i2 < visibleEdges.length; i2++) {
        const firstSegments = segmentsFor(replacementPointsFor(visibleEdges[i2], replacements));
        for (let j3 = i2 + 1; j3 < visibleEdges.length; j3++) {
          const secondSegments = segmentsFor(replacementPointsFor(visibleEdges[j3], replacements));
          for (const firstSegment of firstSegments) {
            for (const secondSegment of secondSegments) {
              if (orthogonalSegmentsStrictlyCross(
                firstSegment.a,
                firstSegment.b,
                secondSegment.a,
                secondSegment.b,
                EPS_LOCAL
              )) {
                count2++;
              }
            }
          }
        }
      }
      return count2;
    }, "strictCrossingCount");
    const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(
      (sum2, edge) => sum2 + countOrthogonalBends(replacementPointsFor(edge, replacements)),
      0
    ), "totalBends");
    const endpointRectsFor = /* @__PURE__ */ __name((edge) => {
      const srcId = edge.start;
      const dstId = edge.end;
      const srcNode = srcId ? nodeByIdMap.get(srcId) : void 0;
      const dstNode = dstId ? nodeByIdMap.get(dstId) : void 0;
      const src = srcNode ? rectOfNodeBounds(srcNode) : void 0;
      const dst = dstNode ? rectOfNodeBounds(dstNode) : void 0;
      return src && dst ? { src, dst } : void 0;
    }, "endpointRectsFor");
    const externalRailForSegment = /* @__PURE__ */ __name((edge, points, segment) => {
      if (segment.index <= 0 || segment.index + 1 >= points.length - 1) {
        return void 0;
      }
      const endpointRects = endpointRectsFor(edge);
      if (!endpointRects) {
        return void 0;
      }
      if (segment.vertical) {
        const coord = segment.a.x;
        const leftBound = Math.min(endpointRects.src.left, endpointRects.dst.left);
        const rightBound = Math.max(endpointRects.src.right, endpointRects.dst.right);
        const side = coord < leftBound - EPS_LOCAL ? "left" : coord > rightBound + EPS_LOCAL ? "right" : void 0;
        if (!side) {
          return void 0;
        }
        return {
          edge,
          points,
          segmentIndex: segment.index,
          axis: "vertical",
          side,
          coord,
          min: Math.min(segment.a.y, segment.b.y),
          max: Math.max(segment.a.y, segment.b.y)
        };
      }
      if (segment.horizontal) {
        const coord = segment.a.y;
        const topBound = Math.min(endpointRects.src.top, endpointRects.dst.top);
        const bottomBound = Math.max(endpointRects.src.bottom, endpointRects.dst.bottom);
        const side = coord < topBound - EPS_LOCAL ? "top" : coord > bottomBound + EPS_LOCAL ? "bottom" : void 0;
        if (!side) {
          return void 0;
        }
        return {
          edge,
          points,
          segmentIndex: segment.index,
          axis: "horizontal",
          side,
          coord,
          min: Math.min(segment.a.x, segment.b.x),
          max: Math.max(segment.a.x, segment.b.x)
        };
      }
      return void 0;
    }, "externalRailForSegment");
    const collectExternalRails = /* @__PURE__ */ __name(() => {
      const rails = [];
      for (const edge of visibleEdges) {
        const points = replacementPointsFor(edge);
        for (const segment of segmentsFor(points)) {
          const rail = externalRailForSegment(edge, points, segment);
          if (rail) {
            rails.push(rail);
          }
        }
      }
      return rails;
    }, "collectExternalRails");
    const railsInteract = /* @__PURE__ */ __name((a2, b3) => a2.edge !== b3.edge && a2.axis === b3.axis && a2.side === b3.side && overlapLength(a2.min, a2.max, b3.min, b3.max) >= MIN_SHARED, "railsInteract");
    const connectedComponents = /* @__PURE__ */ __name((rails) => {
      const result = [];
      const seen = /* @__PURE__ */ new Set();
      for (const rail of rails) {
        if (seen.has(rail)) {
          continue;
        }
        const queue = [rail];
        const component2 = [];
        seen.add(rail);
        while (queue.length > 0) {
          const current = queue.pop();
          component2.push(current);
          for (const next3 of rails) {
            if (!seen.has(next3) && railsInteract(current, next3)) {
              seen.add(next3);
              queue.push(next3);
            }
          }
        }
        if (component2.length > 1) {
          result.push(component2);
        }
      }
      return result;
    }, "connectedComponents");
    const uniqueCoordsFor = /* @__PURE__ */ __name((component2) => {
      const coords = [];
      for (const rail of component2) {
        if (!coords.some((coord) => Math.abs(coord - rail.coord) < EPS_LOCAL)) {
          coords.push(rail.coord);
        }
      }
      while (coords.length < component2.length) {
        const min10 = Math.min(...coords);
        const max10 = Math.max(...coords);
        const side = component2[0].side;
        coords.push(
          side === "left" || side === "top" ? min10 - RAIL_CHANNEL_GAP * (component2.length - coords.length) : max10 + RAIL_CHANNEL_GAP * (component2.length - coords.length)
        );
      }
      return coords;
    }, "uniqueCoordsFor");
    const coordinateAssignmentsFor = /* @__PURE__ */ __name((component2) => {
      const current = component2.map((rail) => rail.coord);
      const coords = uniqueCoordsFor(component2);
      const assignments = [];
      if (component2.length <= MAX_EXHAUSTIVE_COMPONENT) {
        const used = new Array(coords.length).fill(false);
        const next3 = [];
        const visit = /* @__PURE__ */ __name(() => {
          if (next3.length === component2.length) {
            if (next3.some((coord, index) => Math.abs(coord - current[index]) >= EPS_LOCAL)) {
              assignments.push([...next3]);
            }
            return;
          }
          for (const [i2, coord] of coords.entries()) {
            if (used[i2]) {
              continue;
            }
            used[i2] = true;
            next3.push(coord);
            visit();
            next3.pop();
            used[i2] = false;
          }
        }, "visit");
        visit();
        return assignments;
      }
      for (let i2 = 0; i2 < current.length; i2++) {
        for (let j3 = i2 + 1; j3 < current.length; j3++) {
          const assignment = [...current];
          [assignment[i2], assignment[j3]] = [assignment[j3], assignment[i2]];
          assignments.push(assignment);
        }
      }
      return assignments;
    }, "coordinateAssignmentsFor");
    const replacementsForAssignment = /* @__PURE__ */ __name((component2, assignment) => {
      const draftByEdge = /* @__PURE__ */ new Map();
      for (const [i2, rail] of component2.entries()) {
        const coord = assignment[i2];
        const points = draftByEdge.get(rail.edge) ?? rail.points.map((point8) => ({ x: point8.x, y: point8.y }));
        if (rail.axis === "vertical") {
          points[rail.segmentIndex].x = coord;
          points[rail.segmentIndex + 1].x = coord;
        } else {
          points[rail.segmentIndex].y = coord;
          points[rail.segmentIndex + 1].y = coord;
        }
        draftByEdge.set(rail.edge, points);
      }
      const replacements = /* @__PURE__ */ new Map();
      for (const [edge, points] of draftByEdge) {
        const simplified = simplifyPolyline(dedupeConsecutivePoints(points));
        if (segmentsFor(simplified).length !== simplified.length - 1) {
          return void 0;
        }
        replacements.set(edge, simplified);
      }
      return replacements;
    }, "replacementsForAssignment");
    const candidateIsSafe = /* @__PURE__ */ __name((replacements) => {
      for (const [edge, points] of replacements) {
        const endpointIds = [
          edge.start,
          edge.end
        ].filter((id41) => Boolean(id41));
        for (const segment of segmentsFor(points)) {
          if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {
            return false;
          }
          if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {
            return false;
          }
        }
      }
      for (let i2 = 0; i2 < visibleEdges.length; i2++) {
        const first3 = visibleEdges[i2];
        const firstChanged = replacements.has(first3);
        const firstSegments = segmentsFor(replacementPointsFor(first3, replacements));
        for (let j3 = i2 + 1; j3 < visibleEdges.length; j3++) {
          const second2 = visibleEdges[j3];
          if (!firstChanged && !replacements.has(second2)) {
            continue;
          }
          const secondSegments = segmentsFor(replacementPointsFor(second2, replacements));
          for (const firstSegment of firstSegments) {
            for (const secondSegment of secondSegments) {
              if (sameAxisSegmentOverlapLength(firstSegment, secondSegment, 0.5) >= MIN_SHARED) {
                return false;
              }
            }
          }
        }
      }
      return true;
    }, "candidateIsSafe");
    for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
      const currentCrossings = strictCrossingCount();
      if (currentCrossings === 0) {
        return;
      }
      let bestReplacements;
      let bestCrossings = currentCrossings;
      let bestBends = totalBends();
      let bestDisplacement = Number.POSITIVE_INFINITY;
      for (const component2 of connectedComponents(collectExternalRails())) {
        for (const assignment of coordinateAssignmentsFor(component2)) {
          const replacements = replacementsForAssignment(component2, assignment);
          if (!replacements || !candidateIsSafe(replacements)) {
            continue;
          }
          const candidateCrossings = strictCrossingCount(replacements);
          if (candidateCrossings >= currentCrossings) {
            continue;
          }
          const candidateBends = totalBends(replacements);
          const candidateDisplacement = component2.reduce(
            (sum2, rail, index) => sum2 + Math.abs(assignment[index] - rail.coord),
            0
          );
          if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && (candidateBends > bestBends || candidateBends === bestBends && candidateDisplacement >= bestDisplacement)) {
            continue;
          }
          bestReplacements = replacements;
          bestCrossings = candidateCrossings;
          bestBends = candidateBends;
          bestDisplacement = candidateDisplacement;
        }
      }
      if (!bestReplacements) {
        return;
      }
      for (const [edge, points] of bestReplacements) {
        edge.points = points;
      }
    }
  }
  function shortcutRedundantOrthogonalJogs(edges3, nodeByIdMap) {
    const BUFFER = 2;
    const MAX_ITERATIONS = 8;
    const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(
      nodeByIdMap.values()
    );
    const visibleEdges = edges3.filter((edge) => !edge.isLayoutOnly);
    const pointsFor = /* @__PURE__ */ __name((edge, replacementEdge, replacement) => dedupeConsecutivePoints(
      edge === replacementEdge ? replacement ?? [] : edge.points ?? []
    ), "pointsFor");
    const pathLength = /* @__PURE__ */ __name((points) => segmentsFor(points).reduce((sum2, segment) => {
      const dx = segment.a.x - segment.b.x;
      const dy = segment.a.y - segment.b.y;
      return sum2 + Math.hypot(dx, dy);
    }, 0), "pathLength");
    const strictCrossingCount = /* @__PURE__ */ __name((replacementEdge, replacement) => {
      let count2 = 0;
      for (let i2 = 0; i2 < visibleEdges.length; i2++) {
        const firstSegments = segmentsFor(pointsFor(visibleEdges[i2], replacementEdge, replacement));
        for (let j3 = i2 + 1; j3 < visibleEdges.length; j3++) {
          const secondSegments = segmentsFor(
            pointsFor(visibleEdges[j3], replacementEdge, replacement)
          );
          for (const firstSegment of firstSegments) {
            for (const secondSegment of secondSegments) {
              if (orthogonalSegmentsStrictlyCross(
                firstSegment.a,
                firstSegment.b,
                secondSegment.a,
                secondSegment.b,
                EPS_LOCAL
              )) {
                count2++;
              }
            }
          }
        }
      }
      return count2;
    }, "strictCrossingCount");
    const segmentRunsAlongRectBorder = /* @__PURE__ */ __name((segment, rect3) => {
      if (segment.horizontal) {
        const y6 = segment.a.y;
        const onBorder = Math.abs(y6 - rect3.top) < 1 || Math.abs(y6 - rect3.bottom) < 1;
        return onBorder && overlapLength(segment.a.x, segment.b.x, rect3.left, rect3.right) >= MIN_SHARED;
      }
      if (segment.vertical) {
        const x5 = segment.a.x;
        const onBorder = Math.abs(x5 - rect3.left) < 1 || Math.abs(x5 - rect3.right) < 1;
        return onBorder && overlapLength(segment.a.y, segment.b.y, rect3.top, rect3.bottom) >= MIN_SHARED;
      }
      return false;
    }, "segmentRunsAlongRectBorder");
    const endpointRectsFor = /* @__PURE__ */ __name((edge) => {
      const endpointIds = [edge.start, edge.end].filter(
        (id41) => Boolean(id41)
      );
      const rects = [];
      for (const id41 of endpointIds) {
        const node2 = nodeByIdMap.get(id41);
        const rect3 = node2 ? rectOfNodeBounds(node2) : void 0;
        if (rect3) {
          rects.push(rect3);
        }
      }
      return rects;
    }, "endpointRectsFor");
    const shortcutCandidatesAt = /* @__PURE__ */ __name((points, index) => {
      if (index + 3 >= points.length) {
        return [];
      }
      const p0 = points[index];
      const p1 = points[index + 1];
      const p22 = points[index + 2];
      const p3 = points[index + 3];
      const isHVH = isHorizontalSegment(p0, p1, EPS_LOCAL) && isVerticalSegment(p1, p22, EPS_LOCAL) && isHorizontalSegment(p22, p3, EPS_LOCAL);
      const isVHV = isVerticalSegment(p0, p1, EPS_LOCAL) && isHorizontalSegment(p1, p22, EPS_LOCAL) && isVerticalSegment(p22, p3, EPS_LOCAL);
      if (!isHVH && !isVHV) {
        return [];
      }
      const outerSegmentsOppose = isHVH ? Math.sign(p1.x - p0.x) !== Math.sign(p3.x - p22.x) : Math.sign(p1.y - p0.y) !== Math.sign(p3.y - p22.y);
      if (!outerSegmentsOppose) {
        return [];
      }
      const corners = sameX(p0, p3, EPS_LOCAL) || sameY(p0, p3, EPS_LOCAL) ? [] : [
        { x: p0.x, y: p3.y },
        { x: p3.x, y: p0.y }
      ];
      const rawCandidates = corners.length === 0 ? [[...points.slice(0, index + 1), ...points.slice(index + 3)]] : corners.map((corner) => [
        ...points.slice(0, index + 1),
        corner,
        ...points.slice(index + 3)
      ]);
      const seen = /* @__PURE__ */ new Set();
      return rawCandidates.map((candidate) => simplifyPolyline(dedupeConsecutivePoints(candidate))).filter((candidate) => {
        if (segmentsFor(candidate).length !== candidate.length - 1) {
          return false;
        }
        if (!candidate.some((point8) => samePoint(point8, p3, EPS_LOCAL))) {
          return false;
        }
        const key = candidate.map((point8) => `${point8.x.toFixed(3)},${point8.y.toFixed(3)}`).join("|");
        if (seen.has(key)) {
          return false;
        }
        seen.add(key);
        return true;
      });
    }, "shortcutCandidatesAt");
    const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate, currentCrossings) => {
      const endpointIds = [edge.start, edge.end].filter(
        (id41) => Boolean(id41)
      );
      const endpointRects = endpointRectsFor(edge);
      for (const segment of segmentsFor(candidate)) {
        if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {
          return false;
        }
        if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {
          return false;
        }
        if (endpointRects.some((rect3) => segmentRunsAlongRectBorder(segment, rect3))) {
          return false;
        }
      }
      for (const other of visibleEdges) {
        if (other === edge) {
          continue;
        }
        for (const candidateSegment of segmentsFor(candidate)) {
          for (const otherSegment of segmentsFor(pointsFor(other))) {
            if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {
              return false;
            }
          }
        }
      }
      return strictCrossingCount(edge, candidate) <= currentCrossings;
    }, "candidateIsSafe");
    for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
      const currentCrossings = strictCrossingCount();
      let bestEdge;
      let bestPath;
      let bestCrossings = currentCrossings;
      let bestBends = Number.POSITIVE_INFINITY;
      let bestLength = Number.POSITIVE_INFINITY;
      for (const edge of visibleEdges) {
        const currentPoints = pointsFor(edge);
        const currentBends = countOrthogonalBends(currentPoints, EPS_LOCAL);
        const currentLength = pathLength(currentPoints);
        for (let index = 0; index <= currentPoints.length - 4; index++) {
          for (const candidate of shortcutCandidatesAt(currentPoints, index)) {
            const candidateBends = countOrthogonalBends(candidate, EPS_LOCAL);
            const candidateLength = pathLength(candidate);
            const improvesShape = candidateBends < currentBends || candidateBends === currentBends && candidateLength < currentLength - EPS_LOCAL;
            if (!improvesShape || !candidateIsSafe(edge, candidate, currentCrossings)) {
              continue;
            }
            const candidateCrossings = strictCrossingCount(edge, candidate);
            if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && (candidateBends > bestBends || candidateBends === bestBends && candidateLength >= bestLength)) {
              continue;
            }
            bestEdge = edge;
            bestPath = candidate;
            bestCrossings = candidateCrossings;
            bestBends = candidateBends;
            bestLength = candidateLength;
          }
        }
      }
      if (!bestEdge || !bestPath) {
        return;
      }
      bestEdge.points = bestPath;
    }
  }
  function resolveRenderedOrthogonalCrossings(edges3, nodeByIdMap) {
    const ANCHOR = 20;
    const EXTRA_CHANNEL_COUNT = 2;
    const MAX_ITERATIONS = 4;
    const MAX_PAIR_CANDIDATES_PER_EDGE = 48;
    const realNodes = [];
    for (const node2 of nodeByIdMap.values()) {
      if (node2.isGroup || node2.isEdgeLabel) {
        continue;
      }
      const cx = node2.x ?? 0;
      const cy = node2.y ?? 0;
      const rect3 = rectOfNodeBounds(node2);
      if (!rect3) {
        continue;
      }
      realNodes.push({
        id: String(node2.id ?? ""),
        cx,
        cy,
        rect: rect3
      });
    }
    if (realNodes.length === 0) {
      return;
    }
    const nodeInfoById = new Map(realNodes.map((node2) => [node2.id, node2]));
    const realNodeRects = realNodes.map((node2) => ({ id: node2.id, rect: node2.rect }));
    const sides = ["top", "bottom", "left", "right"];
    const outsideTracks = {
      top: Math.min(...realNodes.map((node2) => node2.rect.top)) - ANCHOR,
      bottom: Math.max(...realNodes.map((node2) => node2.rect.bottom)) + ANCHOR,
      left: Math.min(...realNodes.map((node2) => node2.rect.left)) - ANCHOR,
      right: Math.max(...realNodes.map((node2) => node2.rect.right)) + ANCHOR
    };
    const visibleEdges = edges3.filter((edge) => !edge.isLayoutOnly);
    const edgeIndex = new Map(visibleEdges.map((edge, index) => [edge, index]));
    const outwardTracksForSide = /* @__PURE__ */ __name((side) => {
      const outward = side === "left" || side === "top" ? -1 : 1;
      const tracks = [];
      for (let channel2 = 0; channel2 <= EXTRA_CHANNEL_COUNT; channel2++) {
        tracks.push(outsideTracks[side] + outward * ANCHOR * channel2);
      }
      return tracks;
    }, "outwardTracksForSide");
    const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(
      replacements.get(edge) ?? edge.points ?? []
    ), "replacementPointsFor");
    const crossingCountBetweenSegments = /* @__PURE__ */ __name((firstSegments, secondSegments) => {
      let count2 = 0;
      for (const firstSegment of firstSegments) {
        for (const secondSegment of secondSegments) {
          if (orthogonalSegmentsStrictlyCross(
            firstSegment.a,
            firstSegment.b,
            secondSegment.a,
            secondSegment.b,
            EPS_LOCAL
          )) {
            count2++;
          }
        }
      }
      return count2;
    }, "crossingCountBetweenSegments");
    const crossingCountBetweenPaths = /* @__PURE__ */ __name((first3, second2) => crossingCountBetweenSegments(segmentsFor(first3), segmentsFor(second2)), "crossingCountBetweenPaths");
    const crossingSnapshot = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {
      let count2 = 0;
      const pairs2 = [];
      const edgeSet = /* @__PURE__ */ new Set();
      const edgeOrder = [];
      const addEdge = /* @__PURE__ */ __name((edge) => {
        if (!edgeSet.has(edge)) {
          edgeSet.add(edge);
          edgeOrder.push(edge);
        }
      }, "addEdge");
      for (let i2 = 0; i2 < visibleEdges.length; i2++) {
        const first3 = visibleEdges[i2];
        const firstPoints = replacementPointsFor(first3, replacements);
        for (let j3 = i2 + 1; j3 < visibleEdges.length; j3++) {
          const second2 = visibleEdges[j3];
          const pairCount = crossingCountBetweenPaths(
            firstPoints,
            replacementPointsFor(second2, replacements)
          );
          if (pairCount > 0) {
            count2 += pairCount;
            pairs2.push({ first: first3, second: second2, count: pairCount });
            addEdge(first3);
            addEdge(second2);
          }
        }
      }
      edgeOrder.sort((a2, b3) => (edgeIndex.get(a2) ?? 0) - (edgeIndex.get(b3) ?? 0));
      return {
        count: count2,
        pairs: pairs2,
        edgeSet,
        edges: edgeOrder
      };
    }, "crossingSnapshot");
    const crossingCountWithReplacements = /* @__PURE__ */ __name((current, replacements) => {
      const changed = new Set(replacements.keys());
      if (changed.size === 0) {
        return current.count;
      }
      let currentAffected = 0;
      for (const pair of current.pairs) {
        if (changed.has(pair.first) || changed.has(pair.second)) {
          currentAffected += pair.count;
        }
      }
      let replacementAffected = 0;
      for (let i2 = 0; i2 < visibleEdges.length; i2++) {
        const first3 = visibleEdges[i2];
        const firstChanged = changed.has(first3);
        const firstPoints = replacementPointsFor(first3, replacements);
        for (let j3 = i2 + 1; j3 < visibleEdges.length; j3++) {
          const second2 = visibleEdges[j3];
          if (!firstChanged && !changed.has(second2)) {
            continue;
          }
          replacementAffected += crossingCountBetweenPaths(
            firstPoints,
            replacementPointsFor(second2, replacements)
          );
        }
      }
      return current.count - currentAffected + replacementAffected;
    }, "crossingCountWithReplacements");
    const crossingComponents = /* @__PURE__ */ __name((snapshot) => {
      const neighbors = /* @__PURE__ */ new Map();
      for (const pair of snapshot.pairs) {
        const firstNeighbors = neighbors.get(pair.first) ?? /* @__PURE__ */ new Set();
        firstNeighbors.add(pair.second);
        neighbors.set(pair.first, firstNeighbors);
        const secondNeighbors = neighbors.get(pair.second) ?? /* @__PURE__ */ new Set();
        secondNeighbors.add(pair.first);
        neighbors.set(pair.second, secondNeighbors);
      }
      const components3 = [];
      const seen = /* @__PURE__ */ new Set();
      for (const edge of snapshot.edges) {
        if (seen.has(edge)) {
          continue;
        }
        const queue = [edge];
        const component2 = [];
        seen.add(edge);
        while (queue.length > 0) {
          const current = queue.pop();
          component2.push(current);
          for (const next3 of neighbors.get(current) ?? []) {
            if (!seen.has(next3)) {
              seen.add(next3);
              queue.push(next3);
            }
          }
        }
        component2.sort((a2, b3) => (edgeIndex.get(a2) ?? 0) - (edgeIndex.get(b3) ?? 0));
        if (component2.length > 1) {
          components3.push(component2);
        }
      }
      return components3;
    }, "crossingComponents");
    const endpointIdsFor = /* @__PURE__ */ __name((edge) => [edge.start, edge.end].filter(
      (id41) => Boolean(id41)
    ), "endpointIdsFor");
    const pairSearchGroups = /* @__PURE__ */ __name((snapshot) => {
      const groups = [];
      for (const component2 of crossingComponents(snapshot)) {
        const componentSet = new Set(component2);
        const componentEndpointIds = new Set(component2.flatMap((edge) => endpointIdsFor(edge)));
        const group2 = [...component2];
        for (const edge of visibleEdges) {
          if (componentSet.has(edge)) {
            continue;
          }
          if (endpointIdsFor(edge).some((id41) => componentEndpointIds.has(id41))) {
            group2.push(edge);
          }
        }
        group2.sort((a2, b3) => (edgeIndex.get(a2) ?? 0) - (edgeIndex.get(b3) ?? 0));
        groups.push(group2);
      }
      return groups;
    }, "pairSearchGroups");
    const crossingCountWithSingleReplacement = /* @__PURE__ */ __name((current, edge, replacement) => crossingCountWithReplacements(
      current,
      /* @__PURE__ */ new Map([[edge, replacement]])
    ), "crossingCountWithSingleReplacement");
    const currentCrossingsByEdge = /* @__PURE__ */ __name((current) => {
      const result = /* @__PURE__ */ new Map();
      for (const pair of current.pairs) {
        result.set(pair.first, (result.get(pair.first) ?? 0) + pair.count);
        result.set(pair.second, (result.get(pair.second) ?? 0) + pair.count);
      }
      return result;
    }, "currentCrossingsByEdge");
    const pathLength = /* @__PURE__ */ __name((points) => points.slice(1).reduce((sum2, point8, index) => {
      const previous = points[index];
      return sum2 + Math.abs(point8.x - previous.x) + Math.abs(point8.y - previous.y);
    }, 0), "pathLength");
    const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(
      (sum2, edge) => sum2 + countOrthogonalBends(replacementPointsFor(edge, replacements)),
      0
    ), "totalBends");
    const totalLength = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(
      (sum2, edge) => sum2 + pathLength(replacementPointsFor(edge, replacements)),
      0
    ), "totalLength");
    const pathHasSegmentConflict = /* @__PURE__ */ __name((edge, path4, replacements = /* @__PURE__ */ new Map()) => {
      const pathSegments = segmentsFor(path4);
      for (const other of visibleEdges) {
        if (other === edge) {
          continue;
        }
        for (const candidateSegment of pathSegments) {
          for (const otherSegment of segmentsFor(replacementPointsFor(other, replacements))) {
            if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {
              return true;
            }
          }
        }
      }
      return false;
    }, "pathHasSegmentConflict");
    const pathHitsNode = /* @__PURE__ */ __name((edge, path4) => {
      const endpointIds = [edge.start, edge.end].filter(
        (id41) => Boolean(id41)
      );
      for (const segment of segmentsFor(path4)) {
        if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -2)) {
          return true;
        }
      }
      return false;
    }, "pathHitsNode");
    const pushOrthogonalCandidate = /* @__PURE__ */ __name((candidates, points) => {
      const candidate = simplifyPolyline(dedupeConsecutivePoints(points));
      if (segmentsFor(candidate).length === candidate.length - 1) {
        candidates.push(candidate);
      }
    }, "pushOrthogonalCandidate");
    const sideIsHorizontal = /* @__PURE__ */ __name((side) => side === "left" || side === "right", "sideIsHorizontal");
    const localTrackForSameSide = /* @__PURE__ */ __name((src, side, dst) => {
      switch (side) {
        case "left":
          return Math.min(src.x, dst.x) - ANCHOR;
        case "right":
          return Math.max(src.x, dst.x) + ANCHOR;
        case "top":
          return Math.min(src.y, dst.y) - ANCHOR;
        case "bottom":
          return Math.max(src.y, dst.y) + ANCHOR;
      }
    }, "localTrackForSameSide");
    const addSameSideCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst) => {
      const outward = srcSide === "left" || srcSide === "top" ? -1 : 1;
      const trackSeeds = [localTrackForSameSide(src, srcSide, dst), outsideTracks[srcSide]];
      for (const seed of trackSeeds) {
        for (let channel2 = 0; channel2 <= EXTRA_CHANNEL_COUNT; channel2++) {
          pushOrthogonalCandidate(
            candidates,
            buildSameSideTrackPath(src, srcSide, dst, seed + outward * ANCHOR * channel2)
          );
        }
      }
    }, "addSameSideCandidates");
    const addHorizontalToVerticalCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {
      for (const xTrack of outwardTracksForSide(srcSide)) {
        for (const yTrack of outwardTracksForSide(dstSide)) {
          pushOrthogonalCandidate(candidates, [
            src,
            { x: xTrack, y: src.y },
            { x: xTrack, y: yTrack },
            { x: dst.x, y: yTrack },
            dst
          ]);
        }
      }
    }, "addHorizontalToVerticalCandidates");
    const addVerticalToHorizontalCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {
      for (const yTrack of outwardTracksForSide(srcSide)) {
        for (const xTrack of outwardTracksForSide(dstSide)) {
          pushOrthogonalCandidate(candidates, [
            src,
            { x: src.x, y: yTrack },
            { x: xTrack, y: yTrack },
            { x: xTrack, y: dst.y },
            dst
          ]);
        }
      }
    }, "addVerticalToHorizontalCandidates");
    const addHorizontalPairCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {
      const yTracks = [...outwardTracksForSide("top"), ...outwardTracksForSide("bottom")];
      for (const srcTrack of outwardTracksForSide(srcSide)) {
        for (const dstTrack of outwardTracksForSide(dstSide)) {
          for (const yTrack of yTracks) {
            pushOrthogonalCandidate(candidates, [
              src,
              { x: srcTrack, y: src.y },
              { x: srcTrack, y: yTrack },
              { x: dstTrack, y: yTrack },
              { x: dstTrack, y: dst.y },
              dst
            ]);
          }
        }
      }
    }, "addHorizontalPairCandidates");
    const addVerticalPairCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {
      const xTracks = [...outwardTracksForSide("left"), ...outwardTracksForSide("right")];
      for (const srcTrack of outwardTracksForSide(srcSide)) {
        for (const dstTrack of outwardTracksForSide(dstSide)) {
          for (const xTrack of xTracks) {
            pushOrthogonalCandidate(candidates, [
              src,
              { x: src.x, y: srcTrack },
              { x: xTrack, y: srcTrack },
              { x: xTrack, y: dstTrack },
              { x: dst.x, y: dstTrack },
              dst
            ]);
          }
        }
      }
    }, "addVerticalPairCandidates");
    const dedupeCandidatePaths = /* @__PURE__ */ __name((candidates) => {
      const seen = /* @__PURE__ */ new Set();
      return candidates.map((candidate) => dedupeConsecutivePoints(candidate)).filter((candidate) => {
        const key = candidate.map((point8) => `${point8.x.toFixed(3)},${point8.y.toFixed(3)}`).join("|");
        if (seen.has(key) || candidate.length < 2) {
          return false;
        }
        seen.add(key);
        return true;
      });
    }, "dedupeCandidatePaths");
    const buildCandidatesForSides = /* @__PURE__ */ __name((src, srcSide, dst, dstSide) => {
      const candidates = [];
      const base = buildOrthogonalPortPath(src, srcSide, dst, dstSide, ANCHOR, EPS_LOCAL);
      if (base) {
        pushOrthogonalCandidate(candidates, base);
      }
      if (srcSide === dstSide) {
        addSameSideCandidates(candidates, src, srcSide, dst);
      }
      const srcHorizontal = sideIsHorizontal(srcSide);
      const dstHorizontal = sideIsHorizontal(dstSide);
      if (srcHorizontal && !dstHorizontal) {
        addHorizontalToVerticalCandidates(candidates, src, srcSide, dst, dstSide);
      } else if (!srcHorizontal && dstHorizontal) {
        addVerticalToHorizontalCandidates(candidates, src, srcSide, dst, dstSide);
      } else if (srcHorizontal) {
        addHorizontalPairCandidates(candidates, src, srcSide, dst, dstSide);
      } else {
        addVerticalPairCandidates(candidates, src, srcSide, dst, dstSide);
      }
      return dedupeCandidatePaths(candidates);
    }, "buildCandidatesForSides");
    const addVerticalDepartureOuterTrackCandidates = /* @__PURE__ */ __name((candidates, first3, departure, dstNode) => {
      const externalXTracks = [...outwardTracksForSide("left"), ...outwardTracksForSide("right")];
      const externalYTracks = [...outwardTracksForSide("top"), ...outwardTracksForSide("bottom")];
      for (const side of sides) {
        const dst = portForRectSide(dstNode, side);
        const targetYTracks = side === "top" || side === "bottom" ? outwardTracksForSide(side) : externalYTracks;
        for (const track of externalXTracks) {
          pushOrthogonalCandidate(candidates, [
            first3,
            departure,
            { x: track, y: departure.y },
            { x: track, y: dst.y },
            dst
          ]);
          for (const targetTrack of targetYTracks) {
            pushOrthogonalCandidate(candidates, [
              first3,
              departure,
              { x: track, y: departure.y },
              { x: track, y: targetTrack },
              { x: dst.x, y: targetTrack },
              dst
            ]);
          }
        }
      }
    }, "addVerticalDepartureOuterTrackCandidates");
    const addHorizontalDepartureOuterTrackCandidates = /* @__PURE__ */ __name((candidates, first3, departure, dstNode) => {
      const externalXTracks = [...outwardTracksForSide("left"), ...outwardTracksForSide("right")];
      const externalYTracks = [...outwardTracksForSide("top"), ...outwardTracksForSide("bottom")];
      for (const side of sides) {
        const dst = portForRectSide(dstNode, side);
        const targetXTracks = side === "left" || side === "right" ? outwardTracksForSide(side) : externalXTracks;
        for (const track of externalYTracks) {
          pushOrthogonalCandidate(candidates, [
            first3,
            departure,
            { x: departure.x, y: track },
            { x: dst.x, y: track },
            dst
          ]);
          for (const targetTrack of targetXTracks) {
            pushOrthogonalCandidate(candidates, [
              first3,
              departure,
              { x: departure.x, y: track },
              { x: targetTrack, y: track },
              { x: targetTrack, y: dst.y },
              dst
            ]);
          }
        }
      }
    }, "addHorizontalDepartureOuterTrackCandidates");
    const terminalPreservingOuterTrackCandidates = /* @__PURE__ */ __name((edge) => {
      const srcId = edge.start;
      const dstId = edge.end;
      const dstNode = dstId ? nodeInfoById.get(dstId) : void 0;
      if (!srcId || !dstNode) {
        return [];
      }
      const points = dedupeConsecutivePoints(edge.points ?? []);
      if (points.length < 4) {
        return [];
      }
      const first3 = points[0];
      const departure = points[1];
      const candidates = [];
      if (isVerticalSegment(first3, departure, EPS_LOCAL)) {
        addVerticalDepartureOuterTrackCandidates(candidates, first3, departure, dstNode);
      } else if (isHorizontalSegment(first3, departure, EPS_LOCAL)) {
        addHorizontalDepartureOuterTrackCandidates(candidates, first3, departure, dstNode);
      }
      return candidates;
    }, "terminalPreservingOuterTrackCandidates");
    const candidatePathsFor = /* @__PURE__ */ __name((edge) => {
      const srcId = edge.start;
      const dstId = edge.end;
      const srcNode = srcId ? nodeInfoById.get(srcId) : void 0;
      const dstNode = dstId ? nodeInfoById.get(dstId) : void 0;
      if (!srcNode || !dstNode) {
        return [];
      }
      const candidates = [];
      for (const srcSide of sides) {
        const srcPort = portForRectSide(srcNode, srcSide);
        for (const dstSide of sides) {
          candidates.push(
            ...buildCandidatesForSides(srcPort, srcSide, portForRectSide(dstNode, dstSide), dstSide)
          );
        }
      }
      candidates.push(...terminalPreservingOuterTrackCandidates(edge));
      return candidates;
    }, "candidatePathsFor");
    const currentSegmentsByEdge = /* @__PURE__ */ __name(() => new Map(visibleEdges.map((edge) => [edge, segmentsFor(replacementPointsFor(edge))])), "currentSegmentsByEdge");
    const sharedTrackConflictsFor = /* @__PURE__ */ __name((edge, candidateSegments, baseSegments) => {
      const conflicts = /* @__PURE__ */ new Set();
      for (const other of visibleEdges) {
        if (other === edge) {
          continue;
        }
        const otherSegments = baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other));
        if (candidateSegments.some(
          (candidateSegment) => otherSegments.some(
            (otherSegment) => sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED
          )
        )) {
          conflicts.add(other);
        }
      }
      return conflicts;
    }, "sharedTrackConflictsFor");
    const pairCandidatesFor = /* @__PURE__ */ __name((edge, current, baseSegments, crossingCountByEdge) => {
      const seen = /* @__PURE__ */ new Set();
      const candidates = candidatePathsFor(edge).map((candidate) => simplifyPolyline(dedupeConsecutivePoints(candidate))).filter((candidate) => {
        if (pathHitsNode(edge, candidate)) {
          return false;
        }
        const key = candidate.map((point8) => `${point8.x.toFixed(3)},${point8.y.toFixed(3)}`).join("|");
        if (seen.has(key) || candidate.length < 2) {
          return false;
        }
        seen.add(key);
        return true;
      }).map((candidate) => {
        const candidateSegments = segmentsFor(candidate);
        let replacementAffected = 0;
        for (const other of visibleEdges) {
          if (other === edge) {
            continue;
          }
          replacementAffected += crossingCountBetweenSegments(
            candidateSegments,
            baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other))
          );
        }
        return {
          candidate,
          candidateSegments,
          crossings: current.count - (crossingCountByEdge.get(edge) ?? 0) + replacementAffected,
          bends: countOrthogonalBends(candidate, EPS_LOCAL),
          totalBends: countOrthogonalBends(candidate),
          length: pathLength(candidate)
        };
      }).filter(({ crossings }) => crossings <= current.count).sort((a2, b3) => a2.crossings - b3.crossings || a2.bends - b3.bends || a2.length - b3.length);
      return candidates.slice(0, MAX_PAIR_CANDIDATES_PER_EDGE).map((candidate) => {
        return {
          path: candidate.candidate,
          segments: candidate.candidateSegments,
          sharedTrackConflicts: sharedTrackConflictsFor(
            edge,
            candidate.candidateSegments,
            baseSegments
          ),
          totalBends: candidate.totalBends,
          length: candidate.length
        };
      });
    }, "pairCandidatesFor");
    const pairCrossingCount = /* @__PURE__ */ __name((current, firstEdge, firstCandidate, secondEdge, secondCandidate, baseSegments) => {
      let currentAffected = 0;
      for (const pair of current.pairs) {
        if (pair.first === firstEdge || pair.second === firstEdge || pair.first === secondEdge || pair.second === secondEdge) {
          currentAffected += pair.count;
        }
      }
      let replacementAffected = crossingCountBetweenSegments(
        firstCandidate.segments,
        secondCandidate.segments
      );
      for (const other of visibleEdges) {
        if (other === firstEdge || other === secondEdge) {
          continue;
        }
        const otherSegments = baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other));
        replacementAffected += crossingCountBetweenSegments(firstCandidate.segments, otherSegments) + crossingCountBetweenSegments(secondCandidate.segments, otherSegments);
      }
      return current.count - currentAffected + replacementAffected;
    }, "pairCrossingCount");
    const conflictsOnlyWith = /* @__PURE__ */ __name((candidate, edge) => {
      for (const conflict of candidate.sharedTrackConflicts) {
        if (conflict !== edge) {
          return false;
        }
      }
      return true;
    }, "conflictsOnlyWith");
    const candidatesShareTrack = /* @__PURE__ */ __name((firstCandidate, secondCandidate) => firstCandidate.segments.some(
      (firstSegment) => secondCandidate.segments.some(
        (secondSegment) => sameAxisSegmentOverlapLength(firstSegment, secondSegment, 0.5) >= MIN_SHARED
      )
    ), "candidatesShareTrack");
    const pairCandidatesAreCompatible = /* @__PURE__ */ __name((first3, firstCandidate, second2, secondCandidate) => conflictsOnlyWith(firstCandidate, second2.edge) && conflictsOnlyWith(secondCandidate, first3.edge) && !candidatesShareTrack(firstCandidate, secondCandidate), "pairCandidatesAreCompatible");
    const scorePairReplacement = /* @__PURE__ */ __name((context, first3, firstCandidate, second2, secondCandidate) => {
      const crossings = pairCrossingCount(
        context.current,
        first3.edge,
        firstCandidate,
        second2.edge,
        secondCandidate,
        context.baseSegments
      );
      if (crossings >= context.current.count) {
        return void 0;
      }
      return {
        replacements: /* @__PURE__ */ new Map([
          [first3.edge, firstCandidate.path],
          [second2.edge, secondCandidate.path]
        ]),
        crossings,
        bends: context.currentBends - (context.baseBendsByEdge.get(first3.edge) ?? 0) - (context.baseBendsByEdge.get(second2.edge) ?? 0) + firstCandidate.totalBends + secondCandidate.totalBends,
        length: context.currentLength - (context.baseLengthByEdge.get(first3.edge) ?? 0) - (context.baseLengthByEdge.get(second2.edge) ?? 0) + firstCandidate.length + secondCandidate.length
      };
    }, "scorePairReplacement");
    const pairScoreIsBetter = /* @__PURE__ */ __name((candidate, best) => candidate.crossings < best.crossings || candidate.crossings === best.crossings && (candidate.bends < best.bends || candidate.bends === best.bends && candidate.length < best.length), "pairScoreIsBetter");
    const bestScoreForOptionPair = /* @__PURE__ */ __name((context, first3, second2, best) => {
      let pairBest = best;
      for (const firstCandidate of first3.candidates) {
        for (const secondCandidate of second2.candidates) {
          if (!pairCandidatesAreCompatible(first3, firstCandidate, second2, secondCandidate)) {
            continue;
          }
          const score = scorePairReplacement(context, first3, firstCandidate, second2, secondCandidate);
          if (score && pairScoreIsBetter(score, pairBest)) {
            pairBest = score;
          }
        }
      }
      return pairBest;
    }, "bestScoreForOptionPair");
    const bestPairedReplacement = /* @__PURE__ */ __name((current) => {
      const currentBends = totalBends();
      const currentLength = totalLength();
      const baseSegments = currentSegmentsByEdge();
      const crossingCountByEdge = currentCrossingsByEdge(current);
      const baseBendsByEdge = new Map(
        visibleEdges.map((edge) => [edge, countOrthogonalBends(replacementPointsFor(edge))])
      );
      const baseLengthByEdge = new Map(
        visibleEdges.map((edge) => [edge, pathLength(replacementPointsFor(edge))])
      );
      const optionsByEdge = /* @__PURE__ */ new Map();
      const groups = pairSearchGroups(current);
      for (const group2 of groups) {
        for (const edge of group2) {
          if (optionsByEdge.has(edge)) {
            continue;
          }
          const candidates = pairCandidatesFor(edge, current, baseSegments, crossingCountByEdge);
          if (candidates.length > 0) {
            optionsByEdge.set(edge, { edge, candidates });
          }
        }
      }
      let best = {
        replacements: /* @__PURE__ */ new Map(),
        crossings: current.count,
        bends: currentBends,
        length: currentLength
      };
      const scoringContext = {
        current,
        currentBends,
        currentLength,
        baseBendsByEdge,
        baseLengthByEdge,
        baseSegments
      };
      for (const group2 of groups) {
        const crossingEdgeSet = new Set(group2.filter((edge) => current.edgeSet.has(edge)));
        const options2 = group2.map((edge) => optionsByEdge.get(edge)).filter((option2) => Boolean(option2));
        for (let i2 = 0; i2 < options2.length; i2++) {
          const first3 = options2[i2];
          for (let j3 = i2 + 1; j3 < options2.length; j3++) {
            const second2 = options2[j3];
            if (!crossingEdgeSet.has(first3.edge) && !crossingEdgeSet.has(second2.edge)) {
              continue;
            }
            best = bestScoreForOptionPair(scoringContext, first3, second2, best);
          }
        }
      }
      return best.replacements.size > 0 ? best.replacements : void 0;
    }, "bestPairedReplacement");
    for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
      const current = crossingSnapshot();
      const currentCrossings = current.count;
      if (currentCrossings === 0) {
        return;
      }
      let bestEdge;
      let bestPath;
      let bestCrossings = currentCrossings;
      let bestBends = Number.POSITIVE_INFINITY;
      for (const edge of current.edges) {
        const currentEdgeBends = countOrthogonalBends(replacementPointsFor(edge), EPS_LOCAL);
        for (const candidate of candidatePathsFor(edge)) {
          const candidateHitsNode = pathHitsNode(edge, candidate);
          const candidateHasSegmentConflict = !candidateHitsNode && pathHasSegmentConflict(edge, candidate);
          const candidateCrossings = crossingCountWithSingleReplacement(current, edge, candidate);
          const candidateBends = countOrthogonalBends(candidate, EPS_LOCAL);
          if (candidateHitsNode || candidateHasSegmentConflict) {
            continue;
          }
          const improvesCurrentEdge = candidateCrossings < currentCrossings || candidateCrossings === currentCrossings && candidateBends < currentEdgeBends;
          if (!improvesCurrentEdge) {
            continue;
          }
          if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && candidateBends >= bestBends) {
            continue;
          }
          bestEdge = edge;
          bestPath = candidate;
          bestCrossings = candidateCrossings;
          bestBends = candidateBends;
        }
      }
      if (bestEdge && bestPath) {
        bestEdge.points = bestPath;
        continue;
      }
      const pairedReplacement = bestPairedReplacement(current);
      if (!pairedReplacement) {
        return;
      }
      for (const [edge, points] of pairedReplacement) {
        edge.points = points;
      }
    }
  }
  var EPS_LOCAL, MIN_SHARED, segmentsFor, orthogonallyAligned;
  var init_materializedGeometry = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/materializedGeometry.ts"() {
      "use strict";
      init_geometry();
      EPS_LOCAL = 1e-3;
      MIN_SHARED = 8;
      segmentsFor = orthogonalSegmentsForPoints;
      orthogonallyAligned = /* @__PURE__ */ __name((a2, b3) => sameX(a2, b3, EPS_LOCAL) || sameY(a2, b3, EPS_LOCAL), "orthogonallyAligned");
      __name(separateSharedRenderedTerminalLanes, "separateSharedRenderedTerminalLanes");
      __name(collapseRedundantRectangularDoglegs, "collapseRedundantRectangularDoglegs");
      __name(liftObstacleHuggingSameSideRails, "liftObstacleHuggingSameSideRails");
      __name(liftTopLaneTitleBandsAboveRails, "liftTopLaneTitleBandsAboveRails");
      __name(shiftLeftLaneTitleBandsLeftOfRails, "shiftLeftLaneTitleBandsLeftOfRails");
      __name(swapDestinationTerminalTailsToReduceCrossings, "swapDestinationTerminalTailsToReduceCrossings");
      __name(reassignCrossingExternalRailChannels, "reassignCrossingExternalRailChannels");
      __name(shortcutRedundantOrthogonalJogs, "shortcutRedundantOrthogonalJogs");
      __name(resolveRenderedOrthogonalCrossings, "resolveRenderedOrthogonalCrossings");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/detourSimplification.ts
  function simplifyDetouredEdges(edges3, nodes5) {
    const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes5);
    const sides = ["top", "bottom", "left", "right"];
    const ANCHOR = 20;
    const outsideTracks = {
      top: Math.min(...realNodeRects.map((node2) => node2.rect.top)) - ANCHOR,
      bottom: Math.max(...realNodeRects.map((node2) => node2.rect.bottom)) + ANCHOR,
      left: Math.min(...realNodeRects.map((node2) => node2.rect.left)) - ANCHOR,
      right: Math.max(...realNodeRects.map((node2) => node2.rect.right)) + ANCHOR
    };
    const buildOrthogonalPathCandidates = /* @__PURE__ */ __name((src, srcSide, dst, dstSide) => {
      const paths = [];
      const base = buildOrthogonalPortPath(src, srcSide, dst, dstSide, ANCHOR, EPS4);
      if (base) {
        paths.push(base);
      }
      if (srcSide === dstSide) {
        paths.push(buildSameSideTrackPath(src, srcSide, dst, outsideTracks[srcSide]));
      }
      return paths;
    }, "buildOrthogonalPathCandidates");
    const pathHitsNode = /* @__PURE__ */ __name((pts2, excludeIds) => {
      for (let i2 = 0; i2 < pts2.length - 1; i2++) {
        const a2 = pts2[i2];
        const b3 = pts2[i2 + 1];
        if (segmentHitsAnyRect(a2, b3, realNodeRects, excludeIds, 1)) {
          return true;
        }
      }
      return false;
    }, "pathHitsNode");
    const pathConflictCount = /* @__PURE__ */ __name((path4, currentEdge, includeIncidentEdges = false) => {
      let conflicts = 0;
      const pathSegments = orthogonalSegmentsForPoints(path4, EPS4);
      const currentStart = currentEdge.start;
      const currentEnd = currentEdge.end;
      for (const other of edges3) {
        if (other === currentEdge || other.isLayoutOnly) {
          continue;
        }
        const otherStart = other.start;
        const otherEnd = other.end;
        if (!includeIncidentEdges && currentStart && currentEnd && (otherStart === currentStart || otherStart === currentEnd || otherEnd === currentStart || otherEnd === currentEnd)) {
          continue;
        }
        const otherPts = other.points;
        if (!otherPts || otherPts.length < 2) {
          continue;
        }
        for (const pathSegment of pathSegments) {
          for (const otherSegment of orthogonalSegmentsForPoints(otherPts, EPS4)) {
            if (orthogonalSegmentsCross(
              pathSegment.a,
              pathSegment.b,
              otherSegment.a,
              otherSegment.b,
              EPS4,
              EPS4
            )) {
              conflicts++;
              continue;
            }
            if (sameAxisSegmentOverlapLength(pathSegment, otherSegment, EPS4) >= MIN_SHARED2) {
              conflicts++;
            }
          }
        }
      }
      return conflicts;
    }, "pathConflictCount");
    const BEND_THRESHOLD = 4;
    const nearestSideOfRect = /* @__PURE__ */ __name((pt, info2) => {
      const dTop = Math.abs(pt.y - info2.rect.top);
      const dBottom = Math.abs(pt.y - info2.rect.bottom);
      const dLeft = Math.abs(pt.x - info2.rect.left);
      const dRight = Math.abs(pt.x - info2.rect.right);
      let best = "top";
      let bestDist = dTop;
      if (dBottom < bestDist) {
        best = "bottom";
        bestDist = dBottom;
      }
      if (dLeft < bestDist) {
        best = "left";
        bestDist = dLeft;
      }
      if (dRight < bestDist) {
        best = "right";
        bestDist = dRight;
      }
      return best;
    }, "nearestSideOfRect");
    const faceClaims = /* @__PURE__ */ new Map();
    const addFaceClaim = /* @__PURE__ */ __name((nodeId, side, edgeId) => {
      const claims = faceClaims.get(nodeId) ?? [];
      claims.push({ side, edgeId });
      faceClaims.set(nodeId, claims);
    }, "addFaceClaim");
    for (const e3 of edges3) {
      if (e3.isLayoutOnly) {
        continue;
      }
      const pts2 = e3.points ?? [];
      if (pts2.length < 1) {
        continue;
      }
      const eId = e3.id ?? "";
      const startId = e3.start;
      const endId = e3.end;
      if (startId) {
        const info2 = nodeInfoById.get(startId);
        if (info2) {
          addFaceClaim(startId, nearestSideOfRect(pts2[0], info2), eId);
        }
      }
      if (endId) {
        const info2 = nodeInfoById.get(endId);
        if (info2) {
          addFaceClaim(endId, nearestSideOfRect(pts2[pts2.length - 1], info2), eId);
        }
      }
    }
    const faceIsClaimed = /* @__PURE__ */ __name((nodeId, side, ignoreEdgeId) => {
      return faceClaims.get(nodeId)?.some((c3) => c3.edgeId !== ignoreEdgeId && c3.side === side) ?? false;
    }, "faceIsClaimed");
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const pts2 = edge.points;
      if (!pts2 || pts2.length < 2) {
        continue;
      }
      const currentBends = countOrthogonalBends(pts2, EPS4);
      if (currentBends < BEND_THRESHOLD) {
        continue;
      }
      const srcId = edge.start;
      const dstId = edge.end;
      if (!srcId || !dstId) {
        continue;
      }
      const srcInfo = nodeInfoById.get(srcId);
      const dstInfo = nodeInfoById.get(dstId);
      if (!srcInfo || !dstInfo) {
        continue;
      }
      const edgeId = edge.id ?? "";
      const currentCrossingConflicts = pathConflictCount(pts2, edge, true);
      const currentNonIncidentConflicts = pathConflictCount(pts2, edge);
      let bestPath;
      let bestCrossingConflicts = currentCrossingConflicts;
      let bestBends = currentBends;
      for (const srcSide of sides) {
        if (faceIsClaimed(srcId, srcSide, edgeId)) {
          continue;
        }
        const srcPort = portForRectSide(srcInfo, srcSide);
        for (const dstSide of sides) {
          if (faceIsClaimed(dstId, dstSide, edgeId)) {
            continue;
          }
          const dstPort = portForRectSide(dstInfo, dstSide);
          for (const path4 of buildOrthogonalPathCandidates(srcPort, srcSide, dstPort, dstSide)) {
            if (pathHitsNode(path4, [srcId, dstId])) {
              continue;
            }
            const pathBends = countOrthogonalBends(path4, EPS4);
            if (currentCrossingConflicts > 0) {
              const pathCrossingConflicts = pathConflictCount(path4, edge, true);
              if (pathCrossingConflicts > bestCrossingConflicts || pathCrossingConflicts === bestCrossingConflicts && pathBends >= bestBends) {
                continue;
              }
              bestCrossingConflicts = pathCrossingConflicts;
              bestBends = pathBends;
              bestPath = path4;
              continue;
            }
            if (pathConflictCount(path4, edge) > currentNonIncidentConflicts) {
              continue;
            }
            if (pathBends < bestBends) {
              bestBends = pathBends;
              bestPath = path4;
            }
          }
        }
      }
      if (bestPath) {
        edge.points = bestPath;
        const refreshSrc = faceClaims.get(srcId);
        if (refreshSrc) {
          faceClaims.set(
            srcId,
            refreshSrc.filter((c3) => c3.edgeId !== edgeId)
          );
        }
        const refreshDst = faceClaims.get(dstId);
        if (refreshDst) {
          faceClaims.set(
            dstId,
            refreshDst.filter((c3) => c3.edgeId !== edgeId)
          );
        }
        addFaceClaim(srcId, nearestSideOfRect(bestPath[0], srcInfo), edgeId);
        addFaceClaim(dstId, nearestSideOfRect(bestPath[bestPath.length - 1], dstInfo), edgeId);
      }
    }
  }
  var EPS4, MIN_SHARED2;
  var init_detourSimplification = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/detourSimplification.ts"() {
      "use strict";
      init_geometry();
      EPS4 = 1e-3;
      MIN_SHARED2 = 8;
      __name(simplifyDetouredEdges, "simplifyDetouredEdges");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/labelAnchoring.ts
  function markerClearanceRectFor(pts2, atStart) {
    const terminalIndex = atStart ? 0 : pts2.length - 1;
    const step3 = atStart ? 1 : -1;
    const tip = pts2[terminalIndex];
    const inner2 = pts2[terminalIndex + step3];
    if (!tip || !inner2) {
      return void 0;
    }
    const dx = inner2.x - tip.x;
    const dy = inner2.y - tip.y;
    const len = Math.abs(dx) + Math.abs(dy);
    if (len < EPS5) {
      return void 0;
    }
    if (Math.abs(dy) <= EPS5) {
      const x22 = tip.x + Math.sign(dx) * MARKER_CLEARANCE_LENGTH;
      return {
        left: Math.min(tip.x, x22),
        right: Math.max(tip.x, x22),
        top: tip.y - MARKER_CLEARANCE_HALF_WIDTH,
        bottom: tip.y + MARKER_CLEARANCE_HALF_WIDTH
      };
    }
    if (Math.abs(dx) <= EPS5) {
      const y22 = tip.y + Math.sign(dy) * MARKER_CLEARANCE_LENGTH;
      return {
        left: tip.x - MARKER_CLEARANCE_HALF_WIDTH,
        right: tip.x + MARKER_CLEARANCE_HALF_WIDTH,
        top: Math.min(tip.y, y22),
        bottom: Math.max(tip.y, y22)
      };
    }
    return {
      left: Math.min(tip.x, inner2.x),
      right: Math.max(tip.x, inner2.x),
      top: Math.min(tip.y, inner2.y),
      bottom: Math.max(tip.y, inner2.y)
    };
  }
  function normalizeRect(rect3) {
    return {
      left: Math.min(rect3.left, rect3.right),
      right: Math.max(rect3.left, rect3.right),
      top: Math.min(rect3.top, rect3.bottom),
      bottom: Math.max(rect3.top, rect3.bottom)
    };
  }
  function labelOverlapsOwnMarker(rect3, pts2) {
    const visiblePts = dedupeConsecutivePoints(pts2);
    const startMarker = markerClearanceRectFor(visiblePts, true);
    const endMarker = markerClearanceRectFor(visiblePts, false);
    return [startMarker, endMarker].some(
      (marker) => marker && rectsOverlap(rect3, normalizeRect(marker))
    );
  }
  function anchorLabelsToPolyline(edges3, nodeByIdMap) {
    const allEdgeSegments = [];
    for (const other of edges3) {
      if (other.isLayoutOnly) {
        continue;
      }
      const pts2 = other.points;
      if (!pts2 || pts2.length < 2) {
        continue;
      }
      for (let i2 = 0; i2 < pts2.length - 1; i2++) {
        allEdgeSegments.push({ edgeId: other.id, p1: pts2[i2], p2: pts2[i2 + 1] });
      }
    }
    const foreignNodeRects = [];
    const laneGroups = [];
    for (const n2 of nodeByIdMap.values()) {
      const isGroup2 = n2.isGroup;
      const parentId = n2.parentId;
      if (isGroup2 && !parentId) {
        const rect4 = rectOfNodeBounds(n2);
        if (rect4) {
          laneGroups.push({
            id: n2.id,
            rect: rect4
          });
        }
        continue;
      }
      if (isGroup2) {
        continue;
      }
      if (n2.isEdgeLabel) {
        continue;
      }
      const rect3 = rectOfNodeBounds(n2);
      if (!rect3) {
        continue;
      }
      foreignNodeRects.push({
        nodeId: n2.id,
        rect: rect3
      });
    }
    const LABEL_PLACEMENT_BUFFER = 3;
    const LABEL_LANE_MARGIN = 1;
    const LABEL_ENDPOINT_CLEARANCE = 12;
    const labelOverlapsForeignNode = /* @__PURE__ */ __name((labelId, rect3) => {
      const buffered = inflateRect(rect3, LABEL_PLACEMENT_BUFFER);
      for (const { nodeId, rect: nr } of foreignNodeRects) {
        if (nodeId === labelId) {
          continue;
        }
        if (rectsOverlap(buffered, nr)) {
          return true;
        }
      }
      return false;
    }, "labelOverlapsForeignNode");
    const labelOverlapsForeignEdge = /* @__PURE__ */ __name((edgeId, rect3) => {
      const buffered = inflateRect(rect3, LABEL_PLACEMENT_BUFFER);
      for (const s2 of allEdgeSegments) {
        if (s2.edgeId === edgeId) {
          continue;
        }
        if (segmentBoundsOverlapRect(s2.p1, s2.p2, buffered)) {
          return true;
        }
      }
      return false;
    }, "labelOverlapsForeignEdge");
    const labelOverlapsAnything = /* @__PURE__ */ __name((labelId, edgeId, rect3) => labelOverlapsForeignNode(labelId, rect3) || labelOverlapsForeignEdge(edgeId, rect3), "labelOverlapsAnything");
    const placedLabelRects = [];
    const findContainingLane = /* @__PURE__ */ __name((rect3) => {
      for (const { id: id41, rect: laneRect } of laneGroups) {
        if (rectContainsRect(laneRect, rect3)) {
          return id41;
        }
      }
      return void 0;
    }, "findContainingLane");
    const overlapsPlacedLabel = /* @__PURE__ */ __name((labelId, rect3) => placedLabelRects.some(
      (placed) => placed.labelId !== labelId && rectsOverlap(rect3, placed.rect)
    ), "overlapsPlacedLabel");
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const labelId = edge.labelNodeId;
      if (!labelId) {
        continue;
      }
      const labelNode = nodeByIdMap.get(labelId);
      if (!labelNode) {
        continue;
      }
      const pts2 = edge.points;
      if (!pts2 || pts2.length < 2) {
        continue;
      }
      const lw = labelNode.width ?? 0;
      const lh = labelNode.height ?? 0;
      if (lw <= 0 || lh <= 0) {
        continue;
      }
      const segments = [];
      for (let i2 = 0; i2 < pts2.length - 1; i2++) {
        const a2 = pts2[i2];
        const b3 = pts2[i2 + 1];
        const dx = Math.abs(a2.x - b3.x);
        const dy = Math.abs(a2.y - b3.y);
        if (dx < EPS5 && dy < EPS5) {
          continue;
        }
        if (dx >= EPS5 && dy >= EPS5) {
          continue;
        }
        segments.push({
          idx: i2,
          length: dx + dy,
          orientation: dx >= EPS5 ? "horizontal" : "vertical",
          midX: (a2.x + b3.x) / 2,
          midY: (a2.y + b3.y) / 2
        });
      }
      if (segments.length === 0) {
        continue;
      }
      const middleSegments = segments.length >= 3 ? segments.filter((s2) => s2.idx > 0 && s2.idx < segments.length - 1) : segments;
      const poolBase = middleSegments.length > 0 ? middleSegments : segments;
      const labelLongAxis = lw >= lh ? "horizontal" : "vertical";
      const rankSegments = /* @__PURE__ */ __name((pool) => {
        return [...pool].sort((a2, b3) => {
          const aLongAxis = a2.orientation === labelLongAxis;
          const bLongAxis = b3.orientation === labelLongAxis;
          if (aLongAxis !== bLongAxis) {
            return aLongAxis ? -1 : 1;
          }
          const aFits = a2.length >= (a2.orientation === "horizontal" ? lw : lh) + 2;
          const bFits = b3.length >= (b3.orientation === "horizontal" ? lw : lh) + 2;
          if (aFits !== bFits) {
            return aFits ? -1 : 1;
          }
          return b3.length - a2.length;
        });
      }, "rankSegments");
      const firstVisibleSegment = segments[0];
      const lastVisibleSegment = segments[segments.length - 1];
      const ALONG_SEGMENT_TS = [0.5, 0.25, 0.75, 0.05, 0.95, 0.15, 0.85, 0.1, 0.9];
      const anchorAtT = /* @__PURE__ */ __name((seg, t4) => {
        const a2 = pts2[seg.idx];
        const b3 = pts2[seg.idx + 1];
        return {
          midX: a2.x + (b3.x - a2.x) * t4,
          midY: a2.y + (b3.y - a2.y) * t4
        };
      }, "anchorAtT");
      const clamp2 = /* @__PURE__ */ __name((value2, min10, max10) => Math.min(max10, Math.max(min10, value2)), "clamp");
      const pointInsideRectInclusive = /* @__PURE__ */ __name((point8, rect3) => point8.midX >= rect3.left - EPS5 && point8.midX <= rect3.right + EPS5 && point8.midY >= rect3.top - EPS5 && point8.midY <= rect3.bottom + EPS5, "pointInsideRectInclusive");
      const placementForAnchor = /* @__PURE__ */ __name((anchor2) => {
        const centeredRect = rectFromCenterSize(anchor2.midX, anchor2.midY, lw, lh);
        const centeredLane = findContainingLane(centeredRect);
        if (centeredLane) {
          return { laneId: centeredLane, anchor: anchor2, rect: centeredRect };
        }
        const containingLane = laneGroups.find(({ rect: rect3 }) => pointInsideRectInclusive(anchor2, rect3));
        if (!containingLane) {
          return void 0;
        }
        const minX = containingLane.rect.left + lw / 2 + LABEL_LANE_MARGIN;
        const maxX = containingLane.rect.right - lw / 2 - LABEL_LANE_MARGIN;
        const minY = containingLane.rect.top + lh / 2 + LABEL_LANE_MARGIN;
        const maxY = containingLane.rect.bottom - lh / 2 - LABEL_LANE_MARGIN;
        if (minX > maxX || minY > maxY) {
          return void 0;
        }
        const clampedAnchor = {
          midX: clamp2(anchor2.midX, minX, maxX),
          midY: clamp2(anchor2.midY, minY, maxY)
        };
        const clampedRect = rectFromCenterSize(clampedAnchor.midX, clampedAnchor.midY, lw, lh);
        return pointInsideRectInclusive(anchor2, clampedRect) ? { laneId: containingLane.id, anchor: clampedAnchor, rect: clampedRect } : void 0;
      }, "placementForAnchor");
      const distanceAlongSegment = /* @__PURE__ */ __name((seg, anchor2, endpoint) => seg.orientation === "horizontal" ? Math.abs(anchor2.midX - endpoint.x) : Math.abs(anchor2.midY - endpoint.y), "distanceAlongSegment");
      const labelClearsTerminalEndpoints = /* @__PURE__ */ __name((seg, anchor2) => {
        const labelHalfExtent = seg.orientation === "horizontal" ? lw / 2 : lh / 2;
        const requiredDistance = labelHalfExtent + LABEL_ENDPOINT_CLEARANCE;
        if (seg === firstVisibleSegment) {
          const start3 = pts2[seg.idx];
          if (distanceAlongSegment(seg, anchor2, start3) + EPS5 < requiredDistance) {
            return false;
          }
        }
        if (seg === lastVisibleSegment) {
          const end2 = pts2[seg.idx + 1];
          if (distanceAlongSegment(seg, anchor2, end2) + EPS5 < requiredDistance) {
            return false;
          }
        }
        return true;
      }, "labelClearsTerminalEndpoints");
      const tryPool = /* @__PURE__ */ __name((pool) => {
        const rankedPool = rankSegments(pool);
        for (const seg of rankedPool) {
          for (const t4 of ALONG_SEGMENT_TS) {
            const anchor2 = anchorAtT(seg, t4);
            if (!labelClearsTerminalEndpoints(seg, anchor2)) {
              continue;
            }
            const placement = placementForAnchor(anchor2);
            if (!placement) {
              continue;
            }
            if (labelOverlapsOwnMarker(placement.rect, pts2)) {
              continue;
            }
            if (overlapsPlacedLabel(labelId, placement.rect)) {
              continue;
            }
            if (!labelOverlapsAnything(labelId, edge.id, placement.rect)) {
              return { laneId: placement.laneId, anchor: placement.anchor };
            }
          }
        }
        return void 0;
      }, "tryPool");
      const findLaneContainingFallback = /* @__PURE__ */ __name((pool, requireEndpointClearance, allowForeignEdgeOverlap = false) => {
        const rankedPool = rankSegments(pool);
        for (const seg of rankedPool) {
          const anchor2 = { midX: seg.midX, midY: seg.midY };
          if (requireEndpointClearance && !labelClearsTerminalEndpoints(seg, anchor2)) {
            continue;
          }
          const placement = placementForAnchor(anchor2);
          if (placement && !labelOverlapsOwnMarker(placement.rect, pts2) && !overlapsPlacedLabel(labelId, placement.rect) && !labelOverlapsForeignNode(labelId, placement.rect) && (allowForeignEdgeOverlap || !labelOverlapsForeignEdge(edge.id, placement.rect))) {
            return { laneId: placement.laneId, anchor: placement.anchor };
          }
        }
        return void 0;
      }, "findLaneContainingFallback");
      const chosen = tryPool(poolBase) ?? (poolBase.length < segments.length ? tryPool(segments) : void 0) ?? findLaneContainingFallback(segments, true) ?? findLaneContainingFallback(segments, false) ?? findLaneContainingFallback(segments, false, true);
      if (chosen) {
        labelNode.x = chosen.anchor.midX;
        labelNode.y = chosen.anchor.midY;
        labelNode.parentId = chosen.laneId;
        const chosenRect = rectFromCenterSize(chosen.anchor.midX, chosen.anchor.midY, lw, lh);
        const priorIdx = placedLabelRects.findIndex((placed) => placed.labelId === labelId);
        if (priorIdx >= 0) {
          placedLabelRects[priorIdx] = { labelId, rect: chosenRect };
        } else {
          placedLabelRects.push({ labelId, rect: chosenRect });
        }
      }
    }
  }
  var EPS5, MARKER_CLEARANCE_LENGTH, MARKER_CLEARANCE_HALF_WIDTH;
  var init_labelAnchoring = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/labelAnchoring.ts"() {
      "use strict";
      init_geometry();
      EPS5 = 1e-3;
      MARKER_CLEARANCE_LENGTH = 10;
      MARKER_CLEARANCE_HALF_WIDTH = 7;
      __name(markerClearanceRectFor, "markerClearanceRectFor");
      __name(normalizeRect, "normalizeRect");
      __name(labelOverlapsOwnMarker, "labelOverlapsOwnMarker");
      __name(anchorLabelsToPolyline, "anchorLabelsToPolyline");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/siblingSharedFaceRouting.ts
  function pairKey(a2, b3) {
    return a2 < b3 ? `${a2}::${b3}` : `${b3}::${a2}`;
  }
  function straightenCollinearSiblingDetours(edges3, nodes5) {
    const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes5);
    const labelDimById = /* @__PURE__ */ new Map();
    for (const n2 of nodes5) {
      const id41 = n2.id;
      if (n2.isGroup) {
        continue;
      }
      if (n2.isEdgeLabel) {
        labelDimById.set(id41, {
          w: n2.width ?? 0,
          h: n2.height ?? 0
        });
        continue;
      }
    }
    const labelClearanceFor = /* @__PURE__ */ __name((thisEdge, thisSrcId, thisDstId, axis2) => {
      const targetPair = pairKey(thisSrcId, thisDstId);
      let maxHalf = 0;
      const consider = /* @__PURE__ */ __name((labelId) => {
        if (!labelId) {
          return;
        }
        const dim = labelDimById.get(labelId);
        if (!dim) {
          return;
        }
        const half = axis2 === "x" ? dim.w / 2 : dim.h / 2;
        if (half > maxHalf) {
          maxHalf = half;
        }
      }, "consider");
      consider(thisEdge.labelNodeId);
      for (const other of edges3) {
        if (other === thisEdge) {
          continue;
        }
        if (other.isLayoutOnly) {
          continue;
        }
        const oSrc = other.start;
        const oDst = other.end;
        if (!oSrc || !oDst) {
          continue;
        }
        if (pairKey(oSrc, oDst) !== targetPair) {
          continue;
        }
        consider(other.labelNodeId);
      }
      return maxHalf > 0 ? maxHalf + LABEL_CLEARANCE_BUFFER : 0;
    }, "labelClearanceFor");
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const pts2 = edge.points;
      if (!classifyThreeSegmentRoute(pts2, EPS6)) {
        continue;
      }
      const nodePair = getNodePairGeometry(edge, nodeInfoById, EPS6);
      if (!nodePair) {
        continue;
      }
      const { srcId, dstId, srcInfo, dstInfo, collinearX, collinearY } = nodePair;
      if (collinearX === collinearY) {
        continue;
      }
      let targetSrc;
      let targetDst;
      if (collinearX) {
        const dstBelow = dstInfo.cy > srcInfo.cy;
        targetSrc = { x: srcInfo.cx, y: dstBelow ? srcInfo.rect.bottom : srcInfo.rect.top };
        targetDst = { x: dstInfo.cx, y: dstBelow ? dstInfo.rect.top : dstInfo.rect.bottom };
      } else {
        const dstEast = dstInfo.cx > srcInfo.cx;
        targetSrc = { x: dstEast ? srcInfo.rect.right : srcInfo.rect.left, y: srcInfo.cy };
        targetDst = { x: dstEast ? dstInfo.rect.left : dstInfo.rect.right, y: dstInfo.cy };
      }
      if (segmentHitsAnyRect(targetSrc, targetDst, realNodeRects, [srcId, dstId], 1)) {
        continue;
      }
      const shiftAxis = collinearX ? "x" : "y";
      const labelShift = labelClearanceFor(edge, srcId, dstId, shiftAxis);
      const effectiveShift = labelShift > PORT_SHIFT2 ? labelShift : PORT_SHIFT2;
      const deltas = [0, effectiveShift, -effectiveShift];
      for (const delta of deltas) {
        const shiftedSrc = { ...targetSrc };
        const shiftedDst = { ...targetDst };
        if (collinearX) {
          shiftedSrc.x += delta;
          shiftedDst.x += delta;
          if (shiftedSrc.x <= srcInfo.rect.left || shiftedSrc.x >= srcInfo.rect.right) {
            continue;
          }
          if (shiftedDst.x <= dstInfo.rect.left || shiftedDst.x >= dstInfo.rect.right) {
            continue;
          }
        } else {
          shiftedSrc.y += delta;
          shiftedDst.y += delta;
          if (shiftedSrc.y <= srcInfo.rect.top || shiftedSrc.y >= srcInfo.rect.bottom) {
            continue;
          }
          if (shiftedDst.y <= dstInfo.rect.top || shiftedDst.y >= dstInfo.rect.bottom) {
            continue;
          }
        }
        if (segmentHitsAnyRect(shiftedSrc, shiftedDst, realNodeRects, [srcId, dstId], 1)) {
          continue;
        }
        if (segmentConflictsWithAnyEdge(shiftedSrc, shiftedDst, edges3, edge, { epsilon: EPS6 })) {
          continue;
        }
        edge.points = [shiftedSrc, shiftedDst];
        break;
      }
    }
  }
  var EPS6, MIN_PORT_SPACING2, PORT_SHIFT2, LABEL_CLEARANCE_BUFFER;
  var init_siblingSharedFaceRouting = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/siblingSharedFaceRouting.ts"() {
      "use strict";
      init_geometry();
      EPS6 = 1e-6;
      MIN_PORT_SPACING2 = 8;
      PORT_SHIFT2 = MIN_PORT_SPACING2 / 2;
      LABEL_CLEARANCE_BUFFER = 3;
      __name(pairKey, "pairKey");
      __name(straightenCollinearSiblingDetours, "straightenCollinearSiblingDetours");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/sharedTrackNudging.ts
  function nudgeSharedInteriorSubpaths(edges3, nodeByIdMap) {
    const EPS_LOCAL2 = 1e-3;
    const MIN_SHARED3 = 8;
    const TRACK_SHIFT = 7;
    const MIN_TRACK_GAP = TRACK_SHIFT;
    const SOURCE_DETOUR_STUB = 20;
    const BUFFER = 2;
    const MAX_ITERATIONS = 12;
    const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(
      nodeByIdMap.values()
    );
    const segmentsFor2 = /* @__PURE__ */ __name((edge, points) => {
      return orthogonalSegmentsForPoints(points, EPS_LOCAL2).map((segment) => ({
        ...segment,
        edge,
        interior: segment.index >= 1 && segment.index <= points.length - 3
      }));
    }, "segmentsFor");
    const allSegments = /* @__PURE__ */ __name(() => {
      const result = [];
      for (const edge of edges3) {
        if (edge.isLayoutOnly) {
          continue;
        }
        const points = edge.points;
        if (!points || points.length < 2) {
          continue;
        }
        result.push(...segmentsFor2(edge, dedupeConsecutivePoints(points)));
      }
      return result;
    }, "allSegments");
    const hasCrowdedParallelTrack = /* @__PURE__ */ __name((a2, b3) => {
      if (a2.horizontal && b3.horizontal) {
        return overlapLength(a2.a.x, a2.b.x, b3.a.x, b3.b.x) >= MIN_SHARED3 && Math.abs(a2.a.y - b3.a.y) < MIN_TRACK_GAP;
      }
      if (a2.vertical && b3.vertical) {
        return overlapLength(a2.a.y, a2.b.y, b3.a.y, b3.b.y) >= MIN_SHARED3 && Math.abs(a2.a.x - b3.a.x) < MIN_TRACK_GAP;
      }
      return false;
    }, "hasCrowdedParallelTrack");
    const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate) => {
      const sourceId = edge.start;
      const targetId = edge.end;
      const candidateSegments = segmentsFor2(edge, candidate);
      if (candidateSegments.length !== candidate.length - 1) {
        return false;
      }
      const endpointIds = [sourceId, targetId].filter((id41) => Boolean(id41));
      const ownLabelIds = edge.labelNodeId ? [edge.labelNodeId] : [];
      for (const segment of candidateSegments) {
        if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {
          return false;
        }
        if (segmentHitsAnyRect(segment.a, segment.b, labelRects, ownLabelIds, -BUFFER)) {
          return false;
        }
      }
      for (const other of edges3) {
        if (other === edge || other.isLayoutOnly) {
          continue;
        }
        const otherPoints = other.points;
        if (!otherPoints || otherPoints.length < 2) {
          continue;
        }
        for (const candidateSegment of candidateSegments) {
          for (const otherSegment of segmentsFor2(other, dedupeConsecutivePoints(otherPoints))) {
            if (hasCrowdedParallelTrack(candidateSegment, otherSegment)) {
              return false;
            }
            if (orthogonalSegmentsStrictlyCross(
              candidateSegment.a,
              candidateSegment.b,
              otherSegment.a,
              otherSegment.b,
              EPS_LOCAL2
            )) {
              return false;
            }
          }
        }
      }
      return true;
    }, "candidateIsSafe");
    const shiftedCandidate = /* @__PURE__ */ __name((segment, shift2) => {
      const points = dedupeConsecutivePoints(segment.edge.points ?? []);
      if (points.length < 4 || segment.index >= points.length - 1) {
        return void 0;
      }
      const candidate = points.map((p3) => ({ ...p3 }));
      if (segment.horizontal) {
        candidate[segment.index].y += shift2;
        candidate[segment.index + 1].y += shift2;
      } else if (segment.vertical) {
        candidate[segment.index].x += shift2;
        candidate[segment.index + 1].x += shift2;
      } else {
        return void 0;
      }
      return segmentsFor2(segment.edge, candidate).length === candidate.length - 1 ? candidate : void 0;
    }, "shiftedCandidate");
    const nodeCenter = /* @__PURE__ */ __name((node2, rect3) => ({
      x: node2.x ?? (rect3.left + rect3.right) / 2,
      y: node2.y ?? (rect3.top + rect3.bottom) / 2
    }), "nodeCenter");
    const sourceDetourContextFor = /* @__PURE__ */ __name((segment) => {
      const edge = segment.edge;
      const points = dedupeConsecutivePoints(edge.points ?? []);
      if (points.length !== 4 || segment.index !== 1) {
        return void 0;
      }
      const sourceNode = edge.start ? nodeByIdMap.get(edge.start) : void 0;
      const targetNode = edge.end ? nodeByIdMap.get(edge.end) : void 0;
      const sourceRect = sourceNode ? rectOfNodeBounds(sourceNode) : void 0;
      const targetRect = targetNode ? rectOfNodeBounds(targetNode) : void 0;
      const tail = points.slice(segment.index + 2);
      if (!sourceNode || !targetNode || !sourceRect || !targetRect || tail.length === 0) {
        return void 0;
      }
      return {
        sourceCenter: nodeCenter(sourceNode, sourceRect),
        targetCenter: nodeCenter(targetNode, targetRect),
        sourceRect,
        tail
      };
    }, "sourceDetourContextFor");
    const verticalSourceDetour = /* @__PURE__ */ __name((segment, shift2, sourceCenter, targetCenter, sourceRect, tail) => {
      const targetBelow = targetCenter.y >= sourceCenter.y;
      const sourcePortY = targetBelow ? sourceRect.bottom : sourceRect.top;
      const stubY = sourcePortY + (targetBelow ? SOURCE_DETOUR_STUB : -SOURCE_DETOUR_STUB);
      if (targetBelow && segment.b.y <= stubY + EPS_LOCAL2 || !targetBelow && segment.b.y >= stubY - EPS_LOCAL2) {
        return void 0;
      }
      const railX = segment.a.x + shift2;
      return dedupeConsecutivePoints(
        [
          { x: sourceCenter.x, y: sourcePortY },
          { x: sourceCenter.x, y: stubY },
          { x: railX, y: stubY },
          { x: railX, y: segment.b.y },
          ...tail
        ],
        EPS_LOCAL2
      );
    }, "verticalSourceDetour");
    const horizontalSourceDetour = /* @__PURE__ */ __name((segment, shift2, sourceCenter, targetCenter, sourceRect, tail) => {
      const targetRight = targetCenter.x >= sourceCenter.x;
      const sourcePortX = targetRight ? sourceRect.right : sourceRect.left;
      const stubX = sourcePortX + (targetRight ? SOURCE_DETOUR_STUB : -SOURCE_DETOUR_STUB);
      if (targetRight && segment.b.x <= stubX + EPS_LOCAL2 || !targetRight && segment.b.x >= stubX - EPS_LOCAL2) {
        return void 0;
      }
      const railY = segment.a.y + shift2;
      return dedupeConsecutivePoints(
        [
          { x: sourcePortX, y: sourceCenter.y },
          { x: stubX, y: sourceCenter.y },
          { x: stubX, y: railY },
          { x: segment.b.x, y: railY },
          ...tail
        ],
        EPS_LOCAL2
      );
    }, "horizontalSourceDetour");
    const sourceDetourCandidate = /* @__PURE__ */ __name((segment, shift2) => {
      const context = sourceDetourContextFor(segment);
      if (!context) {
        return void 0;
      }
      if (segment.vertical) {
        return verticalSourceDetour(
          segment,
          shift2,
          context.sourceCenter,
          context.targetCenter,
          context.sourceRect,
          context.tail
        );
      }
      if (segment.horizontal) {
        return horizontalSourceDetour(
          segment,
          shift2,
          context.sourceCenter,
          context.targetCenter,
          context.sourceRect,
          context.tail
        );
      }
      return void 0;
    }, "sourceDetourCandidate");
    const shifts = [
      -TRACK_SHIFT,
      TRACK_SHIFT,
      -2 * TRACK_SHIFT,
      2 * TRACK_SHIFT,
      -3 * TRACK_SHIFT,
      3 * TRACK_SHIFT
    ];
    for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
      const segments = allSegments();
      let fixed = false;
      for (let i2 = 0; i2 < segments.length && !fixed; i2++) {
        for (let j3 = i2 + 1; j3 < segments.length && !fixed; j3++) {
          const first3 = segments[i2];
          const second2 = segments[j3];
          if (first3.edge === second2.edge || !hasCrowdedParallelTrack(first3, second2)) {
            continue;
          }
          const candidates = [first3, second2].filter((segment) => segment.interior);
          for (const segment of candidates) {
            for (const shift2 of shifts) {
              const direct = shiftedCandidate(segment, shift2);
              if (direct && candidateIsSafe(segment.edge, direct)) {
                segment.edge.points = direct;
                fixed = true;
                break;
              }
              const detoured = sourceDetourCandidate(segment, shift2);
              if (detoured && candidateIsSafe(segment.edge, detoured)) {
                segment.edge.points = detoured;
                fixed = true;
                break;
              }
            }
            if (fixed) {
              break;
            }
          }
        }
      }
      if (!fixed) {
        return;
      }
    }
  }
  var init_sharedTrackNudging = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/sharedTrackNudging.ts"() {
      "use strict";
      init_geometry();
      __name(nudgeSharedInteriorSubpaths, "nudgeSharedInteriorSubpaths");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/direction/validation.ts
  function segmentsIntersect(p1, p22, p3, p4) {
    const d1x = p22.x - p1.x;
    const d1y = p22.y - p1.y;
    const d2x = p4.x - p3.x;
    const d2y = p4.y - p3.y;
    const cross3 = d1x * d2y - d1y * d2x;
    if (Math.abs(cross3) < 1e-10) {
      return false;
    }
    const dx = p3.x - p1.x;
    const dy = p3.y - p1.y;
    const t4 = (dx * d2y - dy * d2x) / cross3;
    const u2 = (dx * d1y - dy * d1x) / cross3;
    const eps = 0.01;
    return t4 > eps && t4 < 1 - eps && u2 > eps && u2 < 1 - eps;
  }
  function validateSwimlanesLayout(layout7) {
    const nodes5 = layout7.nodes ?? [];
    const edges3 = layout7.edges ?? [];
    const issues = [];
    if (!edges3.length || !nodes5.length) {
      return issues;
    }
    const nodeRects = collectLayoutNodeRects(nodes5);
    const epsilon6 = 1;
    const edgeSegments = [];
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const points = edge.points;
      if (!points || points.length < 2) {
        continue;
      }
      const edgeStart = edge.start;
      const edgeEnd = edge.end;
      const ownLabelId = edge.labelNodeId;
      const edgeId = edge.id ?? `${edgeStart}->${edgeEnd}`;
      for (const rect3 of nodeRects) {
        if (rect3.nodeId === edgeStart || rect3.nodeId === edgeEnd) {
          continue;
        }
        if (ownLabelId && rect3.nodeId === ownLabelId) {
          continue;
        }
        for (let i2 = 0; i2 < points.length - 1; i2++) {
          if (segmentBoundsOverlapRect(points[i2], points[i2 + 1], rect3, -epsilon6)) {
            issues.push({
              type: "edge-node-overlap",
              edgeId,
              targetId: rect3.nodeId,
              detail: `segment ${i2} passes through node "${rect3.nodeId}"`
            });
            break;
          }
        }
      }
      for (let i2 = 0; i2 < points.length - 1; i2++) {
        edgeSegments.push({
          edgeId,
          start: edgeStart,
          end: edgeEnd,
          p1: points[i2],
          p2: points[i2 + 1]
        });
      }
    }
    const crossingPairs = /* @__PURE__ */ new Set();
    for (let i2 = 0; i2 < edgeSegments.length; i2++) {
      for (let j3 = i2 + 1; j3 < edgeSegments.length; j3++) {
        const a2 = edgeSegments[i2];
        const b3 = edgeSegments[j3];
        if (a2.edgeId === b3.edgeId) {
          continue;
        }
        if (a2.start === b3.start || a2.start === b3.end || a2.end === b3.start || a2.end === b3.end) {
          continue;
        }
        if (segmentsIntersect(a2.p1, a2.p2, b3.p1, b3.p2)) {
          const pairKey2 = a2.edgeId < b3.edgeId ? `${a2.edgeId}|${b3.edgeId}` : `${b3.edgeId}|${a2.edgeId}`;
          if (!crossingPairs.has(pairKey2)) {
            crossingPairs.add(pairKey2);
            issues.push({
              type: "edge-edge-crossing",
              edgeId: a2.edgeId,
              targetId: b3.edgeId,
              detail: `edges "${a2.edgeId}" and "${b3.edgeId}" cross`
            });
          }
        }
      }
    }
    if (issues.length > 0) {
      const overlaps = issues.filter((i2) => i2.type === "edge-node-overlap").length;
      const crossings = issues.filter((i2) => i2.type === "edge-edge-crossing").length;
      log.warn(
        `[SWIMLANE_VALIDATE] ${issues.length} issue(s) detected: ${overlaps} edge-node overlap(s), ${crossings} edge crossing(s)`
      );
      for (const issue of issues) {
        log.warn(`[SWIMLANE_VALIDATE]   ${issue.type}: ${issue.detail}`);
      }
    }
    return issues;
  }
  var init_validation = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/direction/validation.ts"() {
      "use strict";
      init_logger();
      init_geometry();
      __name(segmentsIntersect, "segmentsIntersect");
      __name(validateSwimlanesLayout, "validateSwimlanesLayout");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/postProcessing.ts
  function postProcessSwimlaneLayout(layout7, direction2) {
    const nodes5 = layout7.nodes ?? [];
    const edges3 = layout7.edges ?? [];
    const contentNodes = nodes5.filter((n2) => !n2.isGroup);
    if ((direction2 === "LR" || direction2 === "RL") && contentNodes.length > 0 && !applyLrDirectionTransform(layout7, direction2)) {
      return;
    }
    if (direction2 === "BT" && contentNodes.length > 0 && !applyBtDirectionTransform(layout7)) {
      return;
    }
    for (const edge of edges3) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const pts2 = edge.points;
      if (!pts2 || pts2.length < 2) {
        continue;
      }
      edge.points = simplifyPolyline(
        orthogonalizePolyline(pts2)
      );
    }
    simplifyDetouredEdges(edges3, nodes5);
    straightenCollinearSiblingDetours(edges3, nodes5);
    portSwapToLShape(edges3, nodes5);
    const nodeByIdMap = /* @__PURE__ */ new Map();
    for (const n2 of nodes5) {
      nodeByIdMap.set(String(n2.id), n2);
    }
    anchorLabelsToPolyline(edges3, nodeByIdMap);
    clipEdgeEndpointsToNodeBoundaries(edges3, nodeByIdMap);
    collapseShortTerminalStub(edges3, nodeByIdMap);
    nudgeSharedInteriorSubpaths(edges3, nodeByIdMap);
    separateSharedRenderedTerminalLanes(edges3, nodeByIdMap);
    collapseRedundantRectangularDoglegs(edges3, nodeByIdMap);
    liftObstacleHuggingSameSideRails(edges3, nodeByIdMap);
    swapDestinationTerminalTailsToReduceCrossings(edges3, nodeByIdMap);
    const finalizeRenderedEdges = /* @__PURE__ */ __name(() => {
      resolveRenderedOrthogonalCrossings(edges3, nodeByIdMap);
      reassignCrossingExternalRailChannels(edges3, nodeByIdMap);
      shortcutRedundantOrthogonalJogs(edges3, nodeByIdMap);
      anchorLabelsToPolyline(edges3, nodeByIdMap);
      prepareEdgeEndpointsForRenderer(edges3, nodeByIdMap);
      liftObstacleHuggingSameSideRails(edges3, nodeByIdMap);
      anchorLabelsToPolyline(edges3, nodeByIdMap);
      prepareEdgeEndpointsForRenderer(edges3, nodeByIdMap);
    }, "finalizeRenderedEdges");
    finalizeRenderedEdges();
    nudgeSharedInteriorSubpaths(edges3, nodeByIdMap);
    finalizeRenderedEdges();
    liftTopLaneTitleBandsAboveRails(edges3, nodeByIdMap);
    shiftLeftLaneTitleBandsLeftOfRails(edges3, nodeByIdMap);
    liftTopLaneTitleBandsAboveRails(edges3, nodeByIdMap);
    shiftLeftLaneTitleBandsLeftOfRails(edges3, nodeByIdMap);
  }
  var init_postProcessing = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/postProcessing.ts"() {
      "use strict";
      init_endpointClip();
      init_geometry();
      init_lrTransform();
      init_portSwap();
      init_terminalStub();
      init_materializedGeometry();
      init_detourSimplification();
      init_labelAnchoring();
      init_siblingSharedFaceRouting();
      init_sharedTrackNudging();
      init_validation();
      __name(postProcessSwimlaneLayout, "postProcessSwimlaneLayout");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase0.helpers.ts
  function normalizeGraph(g2) {
    const nodeById = new Map(g2.nodeById);
    const seen = /* @__PURE__ */ new Set();
    const edges3 = [];
    for (const e3 of g2.edges) {
      if (!nodeById.has(e3.src) || !nodeById.has(e3.dst)) {
        continue;
      }
      const key = `${e3.id}:${e3.src}->${e3.dst}`;
      if (seen.has(key)) {
        continue;
      }
      seen.add(key);
      edges3.push(e3);
    }
    const nodes5 = [...nodeById.keys()];
    return { nodes: nodes5, edges: edges3, layout: g2.layout, nodeById };
  }
  function incoming(g2, v3) {
    return g2.edges.filter((e3) => e3.dst === v3);
  }
  function buildSuccessorMap(g2) {
    const succs = /* @__PURE__ */ new Map();
    for (const v3 of g2.nodes) {
      succs.set(v3, []);
    }
    for (const e3 of g2.edges) {
      succs.get(e3.src).push(e3.dst);
    }
    return succs;
  }
  function buildSortedSuccessorMap(g2) {
    const succs = buildSuccessorMap(g2);
    for (const successors of succs.values()) {
      successors.sort((a2, b3) => a2.localeCompare(b3));
    }
    return succs;
  }
  function buildInDegreeMap(g2) {
    const indeg = /* @__PURE__ */ new Map();
    for (const v3 of g2.nodes) {
      indeg.set(v3, 0);
    }
    for (const e3 of g2.edges) {
      indeg.set(e3.dst, (indeg.get(e3.dst) ?? 0) + 1);
    }
    return indeg;
  }
  function sortedZeroInDegreeNodes(indeg) {
    return [...indeg.entries()].filter(([, degree]) => degree === 0).map(([id41]) => id41).sort((a2, b3) => a2.localeCompare(b3));
  }
  function buildPredecessorSuccessorMaps(g2, includeEdge = () => true) {
    const preds = /* @__PURE__ */ new Map();
    const succs = /* @__PURE__ */ new Map();
    for (const v3 of g2.nodes) {
      preds.set(v3, []);
      succs.set(v3, []);
    }
    for (const e3 of g2.edges) {
      if (!includeEdge(e3)) {
        continue;
      }
      succs.get(e3.src).push(e3.dst);
      preds.get(e3.dst).push(e3.src);
    }
    return { preds, succs };
  }
  function buildLayersFromRanks(g2, order2, rankOf, opts) {
    let maxRank2 = 0;
    for (const v3 of g2.nodes) {
      if (opts?.skipGroups && g2.nodeById.get(v3)?.isGroup) {
        continue;
      }
      maxRank2 = Math.max(maxRank2, rankOf[v3] ?? 0);
    }
    const layers = Array.from({ length: maxRank2 + 1 }, () => []);
    for (const v3 of order2) {
      if (opts?.skipGroups && g2.nodeById.get(v3)?.isGroup) {
        continue;
      }
      layers[Math.max(0, rankOf[v3] ?? 0)].push(v3);
    }
    return layers;
  }
  function topoSortIfAcyclic(g2) {
    const indeg = buildInDegreeMap(g2);
    const queue = sortedZeroInDegreeNodes(indeg);
    const order2 = [];
    const adj = buildSortedSuccessorMap(g2);
    while (queue.length) {
      const u2 = queue.shift();
      order2.push(u2);
      for (const v3 of adj.get(u2) ?? []) {
        indeg.set(v3, (indeg.get(v3) ?? 0) - 1);
        if ((indeg.get(v3) ?? 0) === 0) {
          let i2 = 0;
          while (i2 < queue.length && queue[i2] < v3) {
            i2++;
          }
          queue.splice(i2, 0, v3);
        }
      }
    }
    return order2.length === g2.nodes.length ? order2 : null;
  }
  function buildLayerIndex(layer) {
    const m3 = /* @__PURE__ */ new Map();
    let index = 0;
    for (const id41 of layer) {
      m3.set(id41, index);
      index++;
    }
    return m3;
  }
  function countInversions(values3) {
    const tmp = new Array(values3.length);
    const count2 = /* @__PURE__ */ __name((left3, right3) => {
      if (right3 - left3 <= 1) {
        return 0;
      }
      const mid = left3 + right3 >> 1;
      let inversions = count2(left3, mid) + count2(mid, right3);
      let i2 = left3;
      let j3 = mid;
      let k2 = left3;
      while (i2 < mid || j3 < right3) {
        if (j3 >= right3 || i2 < mid && values3[i2] <= values3[j3]) {
          tmp[k2++] = values3[i2++];
        } else {
          tmp[k2++] = values3[j3++];
          inversions += mid - i2;
        }
      }
      for (let t4 = left3; t4 < right3; t4++) {
        values3[t4] = tmp[t4];
      }
      return inversions;
    }, "count");
    return count2(0, values3.length);
  }
  var init_phase0_helpers = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase0.helpers.ts"() {
      "use strict";
      __name(normalizeGraph, "normalizeGraph");
      __name(incoming, "incoming");
      __name(buildSuccessorMap, "buildSuccessorMap");
      __name(buildSortedSuccessorMap, "buildSortedSuccessorMap");
      __name(buildInDegreeMap, "buildInDegreeMap");
      __name(sortedZeroInDegreeNodes, "sortedZeroInDegreeNodes");
      __name(buildPredecessorSuccessorMaps, "buildPredecessorSuccessorMaps");
      __name(buildLayersFromRanks, "buildLayersFromRanks");
      __name(topoSortIfAcyclic, "topoSortIfAcyclic");
      __name(buildLayerIndex, "buildLayerIndex");
      __name(countInversions, "countInversions");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase1.cycles.ts
  function removeCycles_DFS(g2) {
    const gn = normalizeGraph(g2);
    const adj = /* @__PURE__ */ new Map();
    for (const v3 of gn.nodes) {
      adj.set(v3, []);
    }
    for (const e3 of gn.edges) {
      adj.get(e3.src).push(e3);
    }
    for (const arr of adj.values()) {
      arr.sort((a2, b3) => a2.dst === b3.dst ? a2.id.localeCompare(b3.id) : a2.dst.localeCompare(b3.dst));
    }
    const color2 = /* @__PURE__ */ Object.create(null);
    for (const v3 of gn.nodes) {
      color2[v3] = 0;
    }
    const reversed = [];
    const dfs3 = /* @__PURE__ */ __name((u2) => {
      color2[u2] = 1;
      for (const e3 of adj.get(u2) ?? []) {
        const v3 = e3.dst;
        if (color2[v3] === 0) {
          dfs3(v3);
        } else if (color2[v3] === 1) {
          reversed.push(e3);
        }
      }
      color2[u2] = 2;
    }, "dfs");
    const nodesSorted = [...gn.nodes].sort((a2, b3) => a2.localeCompare(b3));
    for (const v3 of nodesSorted) {
      if (color2[v3] === 0) {
        dfs3(v3);
      }
    }
    const toReverse = new Set(reversed.map((e3) => `${e3.id}:${e3.src}->${e3.dst}`));
    const acycEdges = gn.edges.map(
      (e3) => toReverse.has(`${e3.id}:${e3.src}->${e3.dst}`) ? { id: e3.id, src: e3.dst, dst: e3.src, weight: e3.weight, ref: e3.ref } : e3
    );
    const acyclic = {
      nodes: [...gn.nodes],
      edges: acycEdges,
      layout: gn.layout,
      nodeById: new Map(gn.nodeById)
    };
    return { acyclic, reversed };
  }
  var init_phase1_cycles = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase1.cycles.ts"() {
      "use strict";
      init_phase0_helpers();
      __name(removeCycles_DFS, "removeCycles_DFS");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.options.ts
  function buildTopLaneMap(g2) {
    const cache3 = /* @__PURE__ */ new Map();
    const resolve2 = /* @__PURE__ */ __name((id41) => {
      if (cache3.has(id41)) {
        return cache3.get(id41);
      }
      const node2 = g2.nodeById.get(id41);
      if (!node2) {
        cache3.set(id41, null);
        return null;
      }
      const parentId = node2.parentId;
      if (!parentId) {
        cache3.set(id41, null);
        return null;
      }
      const parentLane = resolve2(parentId);
      const lane = parentLane ?? parentId;
      cache3.set(id41, lane);
      return lane;
    }, "resolve");
    for (const id41 of g2.nodes) {
      resolve2(id41);
    }
    return cache3;
  }
  function createTopLaneResolver(g2) {
    const topLaneMap = buildTopLaneMap(g2);
    return (id41) => topLaneMap.get(id41) ?? null;
  }
  function buildTopLaneOrder(g2) {
    const lanes2 = [];
    for (const node2 of g2.layout.nodes ?? []) {
      if (node2.isGroup && !node2.parentId) {
        lanes2.push(node2.id);
      }
    }
    return [...new Set(lanes2)].reverse();
  }
  function resolveTopLaneOrder(g2, preferredOrder) {
    const sourceOrder = buildTopLaneOrder(g2);
    if (!preferredOrder || preferredOrder.length === 0) {
      return sourceOrder;
    }
    const sourceLaneIds = new Set(sourceOrder);
    const seen = /* @__PURE__ */ new Set();
    const resolved = [];
    for (const laneId of preferredOrder) {
      if (!sourceLaneIds.has(laneId) || seen.has(laneId)) {
        continue;
      }
      seen.add(laneId);
      resolved.push(laneId);
    }
    for (const laneId of sourceOrder) {
      if (seen.has(laneId)) {
        continue;
      }
      resolved.push(laneId);
    }
    return resolved;
  }
  var init_phase2_options = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.options.ts"() {
      "use strict";
      __name(buildTopLaneMap, "buildTopLaneMap");
      __name(createTopLaneResolver, "createTopLaneResolver");
      __name(buildTopLaneOrder, "buildTopLaneOrder");
      __name(resolveTopLaneOrder, "resolveTopLaneOrder");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/config.ts
  var PRECISION, LAYERING, COORDINATES;
  var init_config2 = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/config.ts"() {
      "use strict";
      PRECISION = {
        /** Epsilon for floating-point comparisons */
        EPSILON: 1e-6
      };
      LAYERING = {
        /** Default number of iterations for gravity-based layering */
        GRAVITY_ITERATIONS: 8,
        /** Maximum number of passes for crossing-based rank optimization */
        MAX_CROSSING_OPTIMIZATION_PASSES: 4,
        /** Whether to compact single-input nodes by default */
        DEFAULT_COMPACT_SINGLE_INPUT: true
      };
      COORDINATES = {
        /** Default vertical gap between layers (px) */
        DEFAULT_LAYER_GAP: 100,
        /** Default horizontal gap between nodes (px) */
        DEFAULT_NODE_GAP: 40
      };
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/driving-tree.ts
  function buildDrivingTree(graph, opts) {
    const g2 = normalizeGraph(graph);
    const laneOf = opts?.laneOf ?? (() => null);
    const rankHint = opts?.rankHint;
    const { preds } = buildPredecessorSuccessorMaps(g2);
    for (const arr of preds.values()) {
      arr.sort((a2, b3) => a2.localeCompare(b3));
    }
    const topoOrder = topoSortIfAcyclic(g2) ?? [...g2.nodes].sort((a2, b3) => a2.localeCompare(b3));
    const topoIndex = /* @__PURE__ */ new Map();
    for (const [idx, id41] of topoOrder.entries()) {
      topoIndex.set(id41, idx);
    }
    const parent4 = /* @__PURE__ */ new Map();
    const children2 = /* @__PURE__ */ new Map();
    for (const node2 of g2.nodes) {
      children2.set(node2, []);
    }
    for (const node2 of topoOrder) {
      const candidates = (preds.get(node2) ?? []).filter((p3) => parent4.has(p3));
      if (candidates.length > 0) {
        const chosen = chooseParent(node2, candidates, {
          laneOf,
          rankHint,
          topoIndex
        });
        parent4.set(node2, chosen);
        children2.get(chosen).push(node2);
      } else if (!parent4.has(node2)) {
        parent4.set(node2, null);
      }
    }
    for (const node2 of g2.nodes) {
      if (!parent4.has(node2)) {
        parent4.set(node2, null);
      }
    }
    const rootSet = /* @__PURE__ */ new Set();
    for (const node2 of g2.nodes) {
      if ((parent4.get(node2) ?? null) === null) {
        rootSet.add(node2);
      }
    }
    const roots = [...rootSet].sort((a2, b3) => {
      const ta = topoIndex.get(a2) ?? 0;
      const tb = topoIndex.get(b3) ?? 0;
      if (ta === tb) {
        return a2.localeCompare(b3);
      }
      return ta - tb;
    });
    const adjacency = buildAdjacency(g2);
    const adjacencyList = /* @__PURE__ */ new Map();
    for (const [node2, set5] of adjacency.entries()) {
      adjacencyList.set(
        node2,
        [...set5].sort((a2, b3) => a2.localeCompare(b3))
      );
    }
    const componentOf = assignComponents(adjacencyList);
    const blocks2 = computeBlocks(adjacencyList);
    const nodeBlocks = /* @__PURE__ */ new Map();
    for (const node2 of g2.nodes) {
      nodeBlocks.set(node2, []);
    }
    for (const block2 of blocks2) {
      for (const node2 of block2.nodes) {
        const list = nodeBlocks.get(node2);
        if (list) {
          list.push(block2.id);
        } else {
          nodeBlocks.set(node2, [block2.id]);
        }
      }
    }
    const preorder2 = [];
    const postorder3 = [];
    const seen = /* @__PURE__ */ new Set();
    const walk = /* @__PURE__ */ __name((node2) => {
      if (seen.has(node2)) {
        return;
      }
      seen.add(node2);
      preorder2.push(node2);
      for (const child of children2.get(node2) ?? []) {
        walk(child);
      }
      postorder3.push(node2);
    }, "walk");
    for (const root4 of roots) {
      walk(root4);
    }
    for (const node2 of topoOrder) {
      walk(node2);
    }
    return {
      parent: parent4,
      children: children2,
      roots,
      componentOf,
      blocks: blocks2,
      nodeBlocks,
      adjacency: adjacencyList,
      preorder: preorder2,
      postorder: postorder3,
      topologicalOrder: topoOrder
    };
  }
  function chooseParent(node2, candidates, ctx) {
    const laneNode = ctx.laneOf(node2);
    const sorted = [...candidates].sort((a2, b3) => {
      const laneA = ctx.laneOf(a2);
      const laneB = ctx.laneOf(b3);
      const sameLaneA = laneA != null && laneA === laneNode;
      const sameLaneB = laneB != null && laneB === laneNode;
      if (sameLaneA !== sameLaneB) {
        return sameLaneA ? -1 : 1;
      }
      const rankA = ctx.rankHint?.[a2];
      const rankB = ctx.rankHint?.[b3];
      if (rankA != null && rankB != null && rankA !== rankB) {
        return rankB - rankA;
      }
      const idxA = ctx.topoIndex.get(a2) ?? 0;
      const idxB = ctx.topoIndex.get(b3) ?? 0;
      if (idxA !== idxB) {
        return idxA - idxB;
      }
      return a2.localeCompare(b3);
    });
    return sorted[0];
  }
  function buildAdjacency(g2) {
    const adjacency = /* @__PURE__ */ new Map();
    for (const node2 of g2.nodes) {
      adjacency.set(node2, /* @__PURE__ */ new Set());
    }
    for (const e3 of g2.edges) {
      adjacency.get(e3.src).add(e3.dst);
      adjacency.get(e3.dst).add(e3.src);
    }
    return adjacency;
  }
  function assignComponents(adjacency) {
    const componentOf = /* @__PURE__ */ new Map();
    let componentId = 0;
    for (const node2 of adjacency.keys()) {
      if (componentOf.has(node2)) {
        continue;
      }
      const stack = [node2];
      while (stack.length > 0) {
        const cur = stack.pop();
        if (componentOf.has(cur)) {
          continue;
        }
        componentOf.set(cur, componentId);
        for (const next3 of adjacency.get(cur) ?? []) {
          if (!componentOf.has(next3)) {
            stack.push(next3);
          }
        }
      }
      componentId++;
    }
    return componentOf;
  }
  function computeBlocks(adjacency) {
    const discovery = /* @__PURE__ */ new Map();
    const low = /* @__PURE__ */ new Map();
    const edgeStack = [];
    const blocks2 = [];
    let time4 = 0;
    const visit = /* @__PURE__ */ __name((node2, parent4) => {
      discovery.set(node2, ++time4);
      low.set(node2, time4);
      for (const next3 of adjacency.get(node2) ?? []) {
        if (next3 === parent4) {
          continue;
        }
        if (!discovery.has(next3)) {
          edgeStack.push([node2, next3]);
          visit(next3, node2);
          low.set(node2, Math.min(low.get(node2) ?? time4, low.get(next3) ?? time4));
          if ((low.get(next3) ?? 0) >= (discovery.get(node2) ?? 0)) {
            blocks2.push(popBlock(node2, next3, edgeStack, blocks2.length));
          }
        } else if ((discovery.get(next3) ?? 0) < (discovery.get(node2) ?? 0)) {
          edgeStack.push([node2, next3]);
          low.set(node2, Math.min(low.get(node2) ?? time4, discovery.get(next3) ?? time4));
        }
      }
    }, "visit");
    for (const node2 of adjacency.keys()) {
      if (!discovery.has(node2)) {
        visit(node2, null);
      }
    }
    return blocks2;
  }
  function popBlock(u2, v3, stack, id41) {
    const edges3 = [];
    const nodes5 = /* @__PURE__ */ new Set();
    while (stack.length > 0) {
      const edge = stack.pop();
      edges3.push(edge);
      nodes5.add(edge[0]);
      nodes5.add(edge[1]);
      if (edge[0] === u2 && edge[1] === v3 || edge[0] === v3 && edge[1] === u2) {
        break;
      }
    }
    return { id: id41, edges: edges3, nodes: [...nodes5] };
  }
  var init_driving_tree = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/driving-tree.ts"() {
      "use strict";
      init_phase0_helpers();
      __name(buildDrivingTree, "buildDrivingTree");
      __name(chooseParent, "chooseParent");
      __name(buildAdjacency, "buildAdjacency");
      __name(assignComponents, "assignComponents");
      __name(computeBlocks, "computeBlocks");
      __name(popBlock, "popBlock");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.crossCounts.ts
  function computeSubtreeCrossCounts(g2, rankOf, tree) {
    const nodes5 = [...g2.nodes];
    const indexOf2 = /* @__PURE__ */ new Map();
    for (const [i2, node2] of nodes5.entries()) {
      indexOf2.set(node2, i2);
    }
    const n2 = nodes5.length;
    const parentIdx = new Array(n2).fill(-1);
    const depth = new Array(n2).fill(0);
    const queue = [];
    const seen = /* @__PURE__ */ new Set();
    for (const node2 of nodes5) {
      const parentId = tree.parent.get(node2) ?? null;
      const idx = indexOf2.get(node2);
      if (idx == null) {
        continue;
      }
      if (parentId == null) {
        parentIdx[idx] = -1;
        depth[idx] = 0;
        if (!seen.has(node2)) {
          seen.add(node2);
          queue.push(node2);
        }
      }
    }
    while (queue.length > 0) {
      const current = queue.shift();
      const currentIdx = indexOf2.get(current);
      if (currentIdx == null) {
        continue;
      }
      const childList = tree.children.get(current) ?? [];
      for (const child of childList) {
        if (seen.has(child)) {
          continue;
        }
        const childIdx = indexOf2.get(child);
        if (childIdx == null) {
          continue;
        }
        parentIdx[childIdx] = currentIdx;
        depth[childIdx] = depth[currentIdx] + 1;
        seen.add(child);
        queue.push(child);
      }
    }
    for (const node2 of nodes5) {
      if (seen.has(node2)) {
        continue;
      }
      const idx = indexOf2.get(node2);
      if (idx == null) {
        continue;
      }
      parentIdx[idx] = -1;
      depth[idx] = 0;
      seen.add(node2);
    }
    const maxLog = Math.max(1, Math.ceil(Math.log2(Math.max(1, n2))) + 1);
    const up = Array.from({ length: maxLog }, () => new Array(n2).fill(-1));
    for (let i2 = 0; i2 < n2; i2++) {
      up[0][i2] = parentIdx[i2];
    }
    for (let k2 = 1; k2 < maxLog; k2++) {
      for (let i2 = 0; i2 < n2; i2++) {
        const prev2 = up[k2 - 1][i2];
        up[k2][i2] = prev2 === -1 ? -1 : up[k2 - 1][prev2];
      }
    }
    const lcaIndex = /* @__PURE__ */ __name((aIdx, bIdx) => {
      if (aIdx === -1 || bIdx === -1) {
        return -1;
      }
      if (depth[aIdx] < depth[bIdx]) {
        [aIdx, bIdx] = [bIdx, aIdx];
      }
      const diff2 = depth[aIdx] - depth[bIdx];
      for (let k2 = 0; k2 < maxLog; k2++) {
        if (diff2 >> k2 & 1) {
          aIdx = up[k2][aIdx];
          if (aIdx === -1) {
            return -1;
          }
        }
      }
      if (aIdx === bIdx) {
        return aIdx;
      }
      for (let k2 = maxLog - 1; k2 >= 0; k2--) {
        const upA = up[k2][aIdx];
        const upB = up[k2][bIdx];
        if (upA === -1 || upB === -1) {
          continue;
        }
        if (upA !== upB) {
          aIdx = upA;
          bIdx = upB;
        }
      }
      return up[0][aIdx];
    }, "lcaIndex");
    const ownCounts = Array.from({ length: n2 }, () => /* @__PURE__ */ new Map());
    for (const edge of g2.edges) {
      let src = edge.src;
      let dst = edge.dst;
      let ru = rankOf[src];
      let rv = rankOf[dst];
      if (ru == null || rv == null) {
        continue;
      }
      if (ru > rv) {
        [src, dst] = [dst, src];
        [ru, rv] = [rv, ru];
      }
      if (ru == null || rv == null || ru === rv) {
        continue;
      }
      const upperIdx = indexOf2.get(src);
      const lowerIdx = indexOf2.get(dst);
      if (upperIdx == null || lowerIdx == null) {
        continue;
      }
      const lca = lcaIndex(upperIdx, lowerIdx);
      if (lca === -1) {
        continue;
      }
      const bucket = ownCounts[lca];
      for (let layer = ru; layer < rv; layer++) {
        bucket.set(layer, (bucket.get(layer) ?? 0) + 1);
      }
    }
    const crossCounts = /* @__PURE__ */ new Map();
    const mergeInto = /* @__PURE__ */ __name((target, source) => {
      if (source.size === 0) {
        return;
      }
      for (const [layer, value2] of source) {
        target.set(layer, (target.get(layer) ?? 0) + value2);
      }
    }, "mergeInto");
    const visited = /* @__PURE__ */ new Set();
    const dfs3 = /* @__PURE__ */ __name((node2) => {
      const idx = indexOf2.get(node2);
      visited.add(node2);
      const base = idx == null ? void 0 : ownCounts[idx];
      const accumulator = base ? new Map(base) : /* @__PURE__ */ new Map();
      const childList = tree.children.get(node2) ?? [];
      for (const child of childList) {
        const childMap = dfs3(child);
        const parentLayer = rankOf[node2];
        if (parentLayer != null) {
          let map6 = crossCounts.get(node2);
          if (!map6) {
            map6 = /* @__PURE__ */ new Map();
            crossCounts.set(node2, map6);
          }
          let value2 = childMap.get(parentLayer) ?? 0;
          const childLayer = rankOf[child];
          if (childLayer != null && childLayer > parentLayer) {
            value2 += 1;
          }
          map6.set(child, value2);
        }
        mergeInto(accumulator, childMap);
      }
      return accumulator;
    }, "dfs");
    for (const root4 of tree.roots) {
      if (!visited.has(root4)) {
        dfs3(root4);
      }
    }
    for (const node2 of nodes5) {
      if (!visited.has(node2)) {
        dfs3(node2);
      }
    }
    return crossCounts;
  }
  var init_phase2_crossCounts = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.crossCounts.ts"() {
      "use strict";
      __name(computeSubtreeCrossCounts, "computeSubtreeCrossCounts");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.core.ts
  function annotateMinimumLayers(nodes5, children2, rankOf) {
    const minLayer = /* @__PURE__ */ new Map();
    const annotate = /* @__PURE__ */ __name((node2) => {
      let minL = rankOf[node2] ?? 0;
      const childList = [...children2.get(node2) ?? []];
      childList.sort(compareByRankThenId(rankOf));
      for (const child of childList) {
        annotate(child);
        const childMin = minLayer.get(child);
        if (childMin != null) {
          minL = Math.min(minL, childMin);
        }
      }
      minLayer.set(node2, minL);
    }, "annotate");
    for (const node2 of nodes5) {
      annotate(node2);
    }
    return minLayer;
  }
  function compareByRankThenId(rankOf) {
    return (a2, b3) => {
      const ra = rankOf[a2] ?? 0;
      const rb = rankOf[b3] ?? 0;
      return ra === rb ? a2.localeCompare(b3) : ra - rb;
    };
  }
  function emitNodesInTreeOrder(roots, allNodes, rankOf, orderChildren) {
    let maxRank2 = 0;
    for (const node2 of allNodes) {
      const r2 = rankOf[node2] ?? 0;
      if (r2 > maxRank2) {
        maxRank2 = r2;
      }
    }
    const layers = Array.from({ length: maxRank2 + 1 }, () => []);
    const emitted = /* @__PURE__ */ new Set();
    const emit3 = /* @__PURE__ */ __name((node2) => {
      if (emitted.has(node2)) {
        return;
      }
      emitted.add(node2);
      const layer = rankOf[node2] ?? 0;
      if (!layers[layer]) {
        layers[layer] = [];
      }
      layers[layer].push(node2);
      for (const child of orderChildren(node2)) {
        emit3(child);
      }
    }, "emit");
    for (const root4 of roots) {
      emit3(root4);
    }
    for (const node2 of allNodes) {
      if (!emitted.has(node2)) {
        const layer = rankOf[node2] ?? 0;
        if (!layers[layer]) {
          layers[layer] = [];
        }
        layers[layer].push(node2);
        emitted.add(node2);
      }
    }
    return layers;
  }
  function deduplicateLayers(layers) {
    const result = [];
    for (const layer of layers) {
      const seen = /* @__PURE__ */ new Set();
      const deduped = [];
      for (const id41 of layer) {
        if (seen.has(id41)) {
          continue;
        }
        seen.add(id41);
        deduped.push(id41);
      }
      result.push(deduped);
    }
    return result;
  }
  var init_phase2_multitree_core = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.core.ts"() {
      "use strict";
      __name(annotateMinimumLayers, "annotateMinimumLayers");
      __name(compareByRankThenId, "compareByRankThenId");
      __name(emitNodesInTreeOrder, "emitNodesInTreeOrder");
      __name(deduplicateLayers, "deduplicateLayers");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.order.ts
  function createChildOrderer(children2, rankOf, crossCounts, minLayer) {
    return (node2) => {
      const raw = children2.get(node2) ?? [];
      if (raw.length === 0) {
        return [];
      }
      const layer = rankOf[node2] ?? 0;
      const future = [];
      const present = [];
      const crossMap = crossCounts.get(node2);
      for (const child of raw) {
        const minL = minLayer.get(child) ?? layer;
        if (minL > layer) {
          future.push({ child, min: minL });
        } else {
          present.push(child);
        }
      }
      future.sort((a2, b3) => {
        if (a2.min === b3.min) {
          return a2.child.localeCompare(b3.child);
        }
        return a2.min - b3.min;
      });
      present.sort((a2, b3) => {
        const ca = crossMap?.get(a2) ?? 0;
        const cb = crossMap?.get(b3) ?? 0;
        if (ca !== cb) {
          return ca - cb;
        }
        const ma = minLayer.get(a2) ?? layer;
        const mb = minLayer.get(b3) ?? layer;
        if (ma !== mb) {
          return ma - mb;
        }
        return a2.localeCompare(b3);
      });
      return [...future.map((item) => item.child), ...present];
    };
  }
  function buildMultitreeLayerOrder(g2, rankOf, laneOf) {
    const tree = buildDrivingTree(g2, {
      rankHint: rankOf,
      laneOf
    });
    const { children: children2, roots } = tree;
    for (const node2 of g2.nodes) {
      if (!children2.has(node2)) {
        children2.set(node2, []);
      }
    }
    const crossCounts = computeSubtreeCrossCounts(g2, rankOf, tree);
    const rootsSorted = [...roots].sort(compareByRankThenId(rankOf));
    const minLayer = annotateMinimumLayers(rootsSorted, children2, rankOf);
    const orderChildren = createChildOrderer(children2, rankOf, crossCounts, minLayer);
    let layers = emitNodesInTreeOrder(rootsSorted, g2.nodes, rankOf, orderChildren);
    layers = deduplicateLayers(layers);
    return layers;
  }
  var init_phase2_multitree_order = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.order.ts"() {
      "use strict";
      init_driving_tree();
      init_phase2_crossCounts();
      init_phase2_multitree_core();
      __name(createChildOrderer, "createChildOrderer");
      __name(buildMultitreeLayerOrder, "buildMultitreeLayerOrder");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.crossOptimization.ts
  function countCrossingsBetweenAdjacent(upper, lower2, edges3) {
    const upperSet = new Set(upper);
    const lowerSet = new Set(lower2);
    const li = buildLayerIndex(lower2);
    const vs = [];
    for (const e3 of edges3) {
      if (upperSet.has(e3.src) && lowerSet.has(e3.dst)) {
        vs.push(li.get(e3.dst));
      }
    }
    return countInversions(vs);
  }
  function totalCrossings(layers, edges3, rankOf) {
    const expanded = [];
    for (const e3 of edges3) {
      const ru = rankOf[e3.src];
      const rv = rankOf[e3.dst];
      if (ru == null || rv == null || ru === rv) {
        continue;
      }
      let upper = e3.src;
      let lower2 = e3.dst;
      let rUpper = ru;
      let rLower = rv;
      if (ru > rv) {
        upper = e3.dst;
        lower2 = e3.src;
        rUpper = rv;
        rLower = ru;
      }
      for (let L3 = rUpper; L3 < rLower; L3++) {
        expanded.push({ id: `${e3.id}@${L3}`, src: upper, dst: lower2, ref: e3.ref });
      }
    }
    let sum2 = 0;
    for (let i2 = 0; i2 + 1 < layers.length; i2++) {
      sum2 += countCrossingsBetweenAdjacent(layers[i2], layers[i2 + 1], expanded);
    }
    return sum2;
  }
  function optimizeRanksByCrossings(g2, initialRank) {
    const rankOf = { ...initialRank };
    const { preds } = buildPredecessorSuccessorMaps(g2);
    const laneOf = createTopLaneResolver(g2);
    const layers = buildMultitreeLayerOrder(g2, rankOf, laneOf);
    let best = totalCrossings(layers, g2.edges, rankOf);
    const maxPasses = LAYERING.MAX_CROSSING_OPTIMIZATION_PASSES;
    for (let pass = 0; pass < maxPasses; pass++) {
      let changed = false;
      const nodesByRank = [...g2.nodes].sort((a2, b3) => (rankOf[b3] ?? 0) - (rankOf[a2] ?? 0));
      for (const v3 of nodesByRank) {
        const r2 = rankOf[v3] ?? 0;
        if (r2 === 0) {
          continue;
        }
        let lb = 0;
        for (const u2 of preds.get(v3) ?? []) {
          lb = Math.max(lb, (rankOf[u2] ?? 0) + 1);
        }
        if (lb >= r2) {
          continue;
        }
        const old = r2;
        rankOf[v3] = lb;
        const trialLayers = buildMultitreeLayerOrder(g2, rankOf, laneOf);
        const score = totalCrossings(trialLayers, g2.edges, rankOf);
        if (score < best) {
          best = score;
          changed = true;
        } else {
          rankOf[v3] = old;
        }
      }
      if (!changed) {
        break;
      }
    }
    return rankOf;
  }
  var init_phase2_crossOptimization = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.crossOptimization.ts"() {
      "use strict";
      init_phase0_helpers();
      init_config2();
      init_phase2_options();
      init_phase2_multitree_order();
      __name(countCrossingsBetweenAdjacent, "countCrossingsBetweenAdjacent");
      __name(totalCrossings, "totalCrossings");
      __name(optimizeRanksByCrossings, "optimizeRanksByCrossings");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.crossLaneAdjust.ts
  function adjustCrossLaneSources(g2, rankOf) {
    const topLaneOf = createTopLaneResolver(g2);
    const nodesByRank = [...g2.nodes].sort(
      (a2, b3) => (rankOf[a2] ?? 0) - (rankOf[b3] ?? 0) || a2.localeCompare(b3)
    );
    for (const v3 of nodesByRank) {
      const laneV = topLaneOf(v3);
      if (!laneV) {
        continue;
      }
      const outEdges = g2.edges.filter((e3) => e3.src === v3);
      if (outEdges.length === 0) {
        continue;
      }
      let hasSameLaneSucc = false;
      let crossLaneCount = 0;
      for (const e3 of outEdges) {
        const laneDst = topLaneOf(e3.dst);
        if (laneDst == null || laneDst === laneV) {
          hasSameLaneSucc = true;
        } else {
          crossLaneCount++;
        }
      }
      if (crossLaneCount === 0 || hasSameLaneSucc) {
        continue;
      }
      let crossLaneIncoming = 0;
      let hasSameLanePred = false;
      for (const e3 of g2.edges) {
        if (e3.dst !== v3) {
          continue;
        }
        const laneSrc = topLaneOf(e3.src);
        if (!laneSrc) {
          continue;
        }
        if (laneSrc === laneV) {
          hasSameLanePred = true;
        } else {
          crossLaneIncoming++;
        }
      }
      if (crossLaneIncoming > 0 || !hasSameLanePred) {
        continue;
      }
      const current = rankOf[v3] ?? 0;
      const target = current + crossLaneCount;
      let lb = 0;
      for (const e3 of g2.edges) {
        if (e3.dst === v3) {
          lb = Math.max(lb, (rankOf[e3.src] ?? 0) + 1);
        }
      }
      const newRank = Math.max(current, lb, target);
      if (newRank !== current) {
        rankOf[v3] = newRank;
      }
    }
  }
  var init_phase2_crossLaneAdjust = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.crossLaneAdjust.ts"() {
      "use strict";
      init_phase2_options();
      __name(adjustCrossLaneSources, "adjustCrossLaneSources");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.longestPath.ts
  function assignLayers_LongestPath(gAcyclic, opts) {
    const g2 = normalizeGraph(gAcyclic);
    const order2 = topoSortIfAcyclic(g2) ?? [...g2.nodes].sort();
    const compact2 = opts?.compactSingleInput ?? false;
    const topLaneOf = createTopLaneResolver(g2);
    let rankOf = /* @__PURE__ */ Object.create(null);
    for (const v3 of order2) {
      const incAll = incoming(g2, v3);
      const inc = opts?.ignoreCrossLaneEdges ? incAll.filter((e3) => {
        const laneSrc = topLaneOf(e3.src);
        const laneDst = topLaneOf(v3);
        if (!laneSrc || !laneDst) {
          return true;
        }
        return laneSrc === laneDst;
      }) : incAll;
      if (inc.length === 0) {
        rankOf[v3] = 0;
      } else if (compact2 && inc.length === 1) {
        const u2 = inc[0].src;
        const laneU = topLaneOf(u2);
        const laneV = topLaneOf(v3);
        if (laneU !== laneV) {
          rankOf[v3] = rankOf[u2] ?? 0;
        } else {
          rankOf[v3] = (rankOf[u2] ?? 0) + 1;
        }
      } else {
        let mx = -Infinity;
        for (const e3 of inc) {
          mx = Math.max(mx, (rankOf[e3.src] ?? 0) + 1);
        }
        rankOf[v3] = mx === -Infinity ? 0 : mx;
      }
    }
    if (opts?.optimizeRanksByCrossings ?? false) {
      rankOf = optimizeRanksByCrossings(g2, rankOf);
    }
    if (opts?.ignoreCrossLaneEdges) {
      adjustCrossLaneSources(g2, rankOf);
    }
    const layers = buildMultitreeLayerOrder(g2, rankOf, topLaneOf);
    return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };
  }
  var init_phase2_longestPath = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.longestPath.ts"() {
      "use strict";
      init_phase0_helpers();
      init_phase2_options();
      init_phase2_crossOptimization();
      init_phase2_crossLaneAdjust();
      init_phase2_multitree_order();
      __name(assignLayers_LongestPath, "assignLayers_LongestPath");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.gravity.ts
  function assignLayers_Gravity(gAcyclic, opts) {
    const g2 = normalizeGraph(gAcyclic);
    const base = assignLayers_LongestPath(g2, {
      compactSingleInput: opts?.compactSingleInput,
      ignoreCrossLaneEdges: opts?.ignoreCrossLaneEdges,
      optimizeRanksByCrossings: opts?.optimizeRanksByCrossings
    });
    const rankOf = { ...base.rankOf };
    const topLaneOf = createTopLaneResolver(g2);
    const { preds, succs } = buildPredecessorSuccessorMaps(g2, (e3) => {
      if (opts?.ignoreCrossLaneEdges) {
        const laneSrc = topLaneOf(e3.src);
        const laneDst = topLaneOf(e3.dst);
        if (laneSrc && laneDst && laneSrc !== laneDst) {
          return false;
        }
      }
      return true;
    });
    const order2 = topoSortIfAcyclic(g2) ?? [...g2.nodes];
    const revOrder = [...order2].reverse();
    const clampFeasible = /* @__PURE__ */ __name((v3, desired) => {
      let lb = 0;
      for (const u2 of preds.get(v3) ?? []) {
        lb = Math.max(lb, (rankOf[u2] ?? 0) + 1);
      }
      let ub = Number.POSITIVE_INFINITY;
      const s2 = succs.get(v3) ?? [];
      if (s2.length > 0) {
        ub = Math.min(...s2.map((w4) => (rankOf[w4] ?? 0) - 1));
      }
      if (!Number.isFinite(ub)) {
        ub = Math.max(lb, desired);
      }
      return Math.min(Math.max(desired, lb), ub);
    }, "clampFeasible");
    const iters = LAYERING.GRAVITY_ITERATIONS;
    const relaxOrder = /* @__PURE__ */ __name((nodeOrder) => {
      let changed = false;
      for (const v3 of nodeOrder) {
        const ps = preds.get(v3) ?? [];
        const ss = succs.get(v3) ?? [];
        if (ps.length === 0 && ss.length === 0) {
          continue;
        }
        const predAvg = ps.length > 0 ? ps.reduce((a2, u2) => a2 + (rankOf[u2] ?? 0) + 1, 0) / ps.length : rankOf[v3] ?? 0;
        const succAvg = ss.length > 0 ? ss.reduce((a2, w4) => a2 + (rankOf[w4] ?? 0) - 1, 0) / ss.length : rankOf[v3] ?? 0;
        const desired = Math.round((predAvg + succAvg) / 2);
        const clamped = clampFeasible(v3, desired);
        if (clamped !== rankOf[v3]) {
          rankOf[v3] = clamped;
          changed = true;
        }
      }
      return changed;
    }, "relaxOrder");
    for (let it = 0; it < iters; it++) {
      const forwardChanged = relaxOrder(order2);
      const backwardChanged = relaxOrder(revOrder);
      if (!forwardChanged && !backwardChanged) {
        break;
      }
    }
    for (const v3 of order2) {
      let lb = 0;
      for (const u2 of preds.get(v3) ?? []) {
        lb = Math.max(lb, (rankOf[u2] ?? 0) + 1);
      }
      if ((rankOf[v3] ?? 0) < lb) {
        rankOf[v3] = lb;
      }
    }
    for (const v3 of revOrder) {
      const s2 = succs.get(v3) ?? [];
      if (s2.length > 0) {
        const ub = Math.min(...s2.map((w4) => (rankOf[w4] ?? 0) - 1));
        if ((rankOf[v3] ?? 0) > ub) {
          rankOf[v3] = ub;
        }
      }
    }
    const layers = buildLayersFromRanks(g2, order2, rankOf);
    return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };
  }
  var init_phase2_gravity = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.gravity.ts"() {
      "use strict";
      init_phase0_helpers();
      init_phase2_options();
      init_config2();
      init_phase2_longestPath();
      __name(assignLayers_Gravity, "assignLayers_Gravity");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.laneAwareCompact.ts
  function topoSortByGenerationIfAcyclic(g2) {
    const indeg = buildInDegreeMap(g2);
    const adj = buildSortedSuccessorMap(g2);
    let frontier = sortedZeroInDegreeNodes(indeg);
    const order2 = [];
    while (frontier.length > 0) {
      const nextFrontier = [];
      for (const u2 of frontier) {
        order2.push(u2);
        for (const v3 of adj.get(u2) ?? []) {
          indeg.set(v3, (indeg.get(v3) ?? 0) - 1);
          if ((indeg.get(v3) ?? 0) === 0) {
            nextFrontier.push(v3);
          }
        }
      }
      frontier = nextFrontier.sort((a2, b3) => a2.localeCompare(b3));
    }
    return order2.length === g2.nodes.length ? order2 : null;
  }
  function assignLayers_LaneAwareCompact(gAcyclic, opts) {
    const g2 = normalizeGraph(gAcyclic);
    const order2 = opts?.direction === "LR" ? topoSortByGenerationIfAcyclic(g2) ?? [...g2.nodes].sort() : topoSortIfAcyclic(g2) ?? [...g2.nodes].sort();
    const topLaneOf = createTopLaneResolver(g2);
    const laneOf = /* @__PURE__ */ __name((id41) => topLaneOf(id41) ?? id41, "laneOf");
    const rankOf = /* @__PURE__ */ Object.create(null);
    const nextFree = /* @__PURE__ */ new Map();
    const edgeWeight = /* @__PURE__ */ __name((u2, v3) => {
      const ignoreCrossLane = opts?.ignoreCrossLaneEdges ?? true;
      if (ignoreCrossLane) {
        return laneOf(u2) === laneOf(v3) ? 1 : 0;
      }
      return 1;
    }, "edgeWeight");
    for (const v3 of order2) {
      const node2 = g2.nodeById.get(v3);
      if (node2?.isGroup) {
        continue;
      }
      const preds = incoming(g2, v3);
      let base = 0;
      if (preds.length > 0) {
        for (const e3 of preds) {
          const u2 = e3.src;
          const ru = rankOf[u2] ?? 0;
          base = Math.max(base, ru + edgeWeight(u2, v3));
        }
      }
      const lane = laneOf(v3);
      const nf = nextFree.get(lane) ?? 0;
      const L3 = Math.max(base, nf);
      rankOf[v3] = L3;
      nextFree.set(lane, L3 + 1);
    }
    const layers = buildLayersFromRanks(g2, order2, rankOf, { skipGroups: true });
    return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };
  }
  var init_phase2_laneAwareCompact = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.laneAwareCompact.ts"() {
      "use strict";
      init_phase0_helpers();
      init_phase2_options();
      __name(topoSortByGenerationIfAcyclic, "topoSortByGenerationIfAcyclic");
      __name(assignLayers_LaneAwareCompact, "assignLayers_LaneAwareCompact");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase2.dummies.ts
  function makeProperLayering(layering, gAcyclic) {
    const g2 = normalizeGraph(gAcyclic);
    const { rankOf } = layering;
    const layers = layering.layers.map((l4) => [...l4]);
    const dummy = new Set(layering.dummy ? [...layering.dummy] : []);
    let dummySeq = 0;
    const nodeById = new Map(g2.nodeById);
    const addDummyAt = /* @__PURE__ */ __name((L3) => {
      const id41 = `placeholder-${dummySeq++}`;
      const dn = { id: id41, isGroup: false, isDummy: true, width: 0, height: 0 };
      nodeById.set(id41, dn);
      dummy.add(id41);
      while (layers.length <= L3) {
        layers.push([]);
      }
      layers[L3].push(id41);
      rankOf[id41] = L3;
      return id41;
    }, "addDummyAt");
    const edgesSorted = [...g2.edges].sort(
      (a2, b3) => a2.id === b3.id ? a2.src === b3.src ? a2.dst.localeCompare(b3.dst) : a2.src.localeCompare(b3.src) : a2.id.localeCompare(b3.id)
    );
    const newEdges = [];
    for (const e3 of edgesSorted) {
      const rU = rankOf[e3.src] ?? 0;
      const rV = rankOf[e3.dst] ?? 0;
      if (rV - rU <= 1) {
        newEdges.push(e3);
        continue;
      }
      let prev2 = e3.src;
      for (let L3 = rU + 1, k2 = 0; L3 < rV; L3++, k2++) {
        const d3 = addDummyAt(L3);
        newEdges.push({ id: `${e3.id}#${k2}`, src: prev2, dst: d3, weight: e3.weight, ref: e3.ref });
        prev2 = d3;
      }
      const lastIndex = rV - rU - 2;
      newEdges.push({
        id: `${e3.id}#${Math.max(lastIndex + 1, 0)}`,
        src: prev2,
        dst: e3.dst,
        weight: e3.weight,
        ref: e3.ref
      });
    }
    const nodes5 = [...g2.nodes, ...[...dummy].filter((id41) => !g2.nodes.includes(id41))];
    const graphWithDummies = { nodes: nodes5, edges: newEdges, layout: g2.layout, nodeById };
    return { layering: { layers, rankOf, dummy }, graphWithDummies };
  }
  var init_phase2_dummies = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase2.dummies.ts"() {
      "use strict";
      init_phase0_helpers();
      __name(makeProperLayering, "makeProperLayering");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase3.ordering.ts
  function median(values3) {
    const n2 = values3.length;
    if (n2 === 0) {
      return Number.POSITIVE_INFINITY;
    }
    const a2 = [...values3].sort((x5, y6) => x5 - y6);
    if (n2 % 2 === 1) {
      return a2[(n2 - 1) / 2];
    }
    return 0.5 * (a2[n2 / 2 - 1] + a2[n2 / 2]);
  }
  function barycenter2(values3) {
    if (values3.length === 0) {
      return Number.POSITIVE_INFINITY;
    }
    const s2 = values3.reduce((acc, v3) => acc + v3, 0);
    return s2 / values3.length;
  }
  function neighborPositionsFor(targetNodes, fixedIndex, edges3, direction2) {
    const neighborPositions = /* @__PURE__ */ new Map();
    for (const v3 of targetNodes) {
      neighborPositions.set(v3, []);
    }
    for (const e3 of edges3) {
      if (direction2 === "down") {
        if (fixedIndex.has(e3.src) && neighborPositions.has(e3.dst)) {
          neighborPositions.get(e3.dst).push(fixedIndex.get(e3.src));
        }
      } else if (fixedIndex.has(e3.dst) && neighborPositions.has(e3.src)) {
        neighborPositions.get(e3.src).push(fixedIndex.get(e3.dst));
      }
    }
    return neighborPositions;
  }
  function currentOrderTieBreak(a2, b3, currentLayerIndex) {
    const ia = currentLayerIndex.get(a2) ?? 0;
    const ib = currentLayerIndex.get(b3) ?? 0;
    return ia !== ib ? ia - ib : a2.localeCompare(b3);
  }
  function countCrossingsBetweenAdjacent2(upper, lower2, edges3) {
    const upperSet = new Set(upper);
    const lowerSet = new Set(lower2);
    const upperIndex = buildLayerIndex(upper);
    const lowerIndex = buildLayerIndex(lower2);
    const pairs2 = [];
    for (const e3 of edges3) {
      if (upperSet.has(e3.src) && lowerSet.has(e3.dst)) {
        pairs2.push({ u: upperIndex.get(e3.src), v: lowerIndex.get(e3.dst) });
      }
    }
    pairs2.sort((a2, b3) => a2.u === b3.u ? a2.v - b3.v : a2.u - b3.u);
    const vs = pairs2.map((p3) => p3.v);
    return countInversions(vs);
  }
  function sortByHeuristic(nodes5, neighborPositions, currentLayerIndex) {
    return [...nodes5].sort((a2, b3) => {
      const sa = median(neighborPositions.get(a2) ?? []);
      const sb = median(neighborPositions.get(b3) ?? []);
      if (sa === sb) {
        return currentOrderTieBreak(a2, b3, currentLayerIndex);
      }
      if (!isFinite(sa)) {
        return 1;
      }
      if (!isFinite(sb)) {
        return -1;
      }
      return sa - sb;
    });
  }
  function reorderLayer(fixedLayer, targetLayer, edges3, direction2, topLaneOf, laneOrder) {
    const fixedIndex = buildLayerIndex(fixedLayer);
    const currIndex = buildLayerIndex(targetLayer);
    const neighborPositions = neighborPositionsFor(targetLayer, fixedIndex, edges3, direction2);
    if (!topLaneOf || !laneOrder || laneOrder.length === 0) {
      return sortByHeuristic(targetLayer, neighborPositions, currIndex);
    }
    const byLane = /* @__PURE__ */ new Map();
    for (const id41 of targetLayer) {
      const lane = topLaneOf(id41);
      const arr = byLane.get(lane) ?? [];
      arr.push(id41);
      byLane.set(lane, arr);
    }
    const result = [];
    for (const lane of laneOrder) {
      const nodesInLane = byLane.get(lane);
      if (!nodesInLane || nodesInLane.length === 0) {
        continue;
      }
      const sorted = sortByHeuristic(nodesInLane, neighborPositions, currIndex);
      result.push(...sorted);
    }
    const nullNodes = byLane.get(null);
    if (nullNodes && nullNodes.length > 0) {
      const sorted = sortByHeuristic(nullNodes, neighborPositions, currIndex);
      for (const nid of sorted) {
        const bc = barycenter2(neighborPositions.get(nid) ?? []);
        let bestIdx = result.length;
        if (isFinite(bc)) {
          for (const [i2, rid] of result.entries()) {
            const rBc = barycenter2(neighborPositions.get(rid) ?? []);
            if (bc < rBc) {
              bestIdx = i2;
              break;
            }
          }
        }
        result.splice(bestIdx, 0, nid);
      }
    }
    return result;
  }
  function transposeImprove(upper, current, edges3, next3, topLaneOf) {
    const best = [...current];
    const upperSet = new Set(upper);
    const layerSet = new Set(current);
    const nextSet = next3 ? new Set(next3) : null;
    const edgesIn = edges3.filter((e3) => upperSet.has(e3.src) && layerSet.has(e3.dst));
    const edgesOut = nextSet ? edges3.filter((e3) => layerSet.has(e3.src) && nextSet.has(e3.dst)) : void 0;
    const crossingScore = /* @__PURE__ */ __name((order2) => {
      let score = countCrossingsBetweenAdjacent2(upper, order2, edgesIn);
      if (edgesOut && next3) {
        score += countCrossingsBetweenAdjacent2(order2, next3, edgesOut);
      }
      return score;
    }, "crossingScore");
    const laneOf = topLaneOf ? /* @__PURE__ */ new Map() : null;
    if (topLaneOf && laneOf) {
      for (const id41 of current) {
        laneOf.set(id41, topLaneOf(id41));
      }
    }
    let improved = true;
    let bestScore = crossingScore(best);
    while (improved) {
      improved = false;
      for (let i2 = 0; i2 + 1 < best.length; i2++) {
        if (laneOf) {
          const laneA = laneOf.get(best[i2]);
          const laneB = laneOf.get(best[i2 + 1]);
          if (laneA !== laneB) {
            continue;
          }
        }
        const prev2 = bestScore;
        [best[i2], best[i2 + 1]] = [best[i2 + 1], best[i2]];
        const nextScore = crossingScore(best);
        if (nextScore < prev2) {
          bestScore = nextScore;
          improved = true;
        } else {
          [best[i2], best[i2 + 1]] = [best[i2 + 1], best[i2]];
        }
      }
    }
    return best;
  }
  function orderLayers(layering, gWithDummies, opts) {
    const layers = layering.layers.map((l4) => [...l4]);
    const edges3 = gWithDummies.edges;
    const topLaneOf = createTopLaneResolver(gWithDummies);
    const laneOrder = resolveTopLaneOrder(gWithDummies, opts?.laneOrder);
    for (let s2 = 0; s2 < 3; s2++) {
      for (let i2 = 1; i2 < layers.length; i2++) {
        layers[i2] = reorderLayer(layers[i2 - 1], layers[i2], edges3, "down", topLaneOf, laneOrder);
        layers[i2] = transposeImprove(layers[i2 - 1], layers[i2], edges3, layers[i2 + 1], topLaneOf);
      }
      for (let i2 = layers.length - 2; i2 >= 0; i2--) {
        layers[i2] = reorderLayer(layers[i2 + 1], layers[i2], edges3, "up", topLaneOf, laneOrder);
        layers[i2] = transposeImprove(layers[i2 + 1], layers[i2], edges3, layers[i2 - 1], topLaneOf);
      }
    }
    return { layers };
  }
  var init_phase3_ordering = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase3.ordering.ts"() {
      "use strict";
      init_phase0_helpers();
      init_phase2_options();
      __name(median, "median");
      __name(barycenter2, "barycenter");
      __name(neighborPositionsFor, "neighborPositionsFor");
      __name(currentOrderTieBreak, "currentOrderTieBreak");
      __name(countCrossingsBetweenAdjacent2, "countCrossingsBetweenAdjacent");
      __name(sortByHeuristic, "sortByHeuristic");
      __name(reorderLayer, "reorderLayer");
      __name(transposeImprove, "transposeImprove");
      __name(orderLayers, "orderLayers");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/phase4.coordinates.ts
  function assignCoordinates(ordered, gWithDummies, opts) {
    const layerGap = opts?.layerGap ?? COORDINATES.DEFAULT_LAYER_GAP;
    const nodeGap = opts?.nodeGap ?? COORDINATES.DEFAULT_NODE_GAP;
    const laneGap = opts?.laneGap ?? nodeGap * 2;
    const direction2 = opts?.direction ?? "TB";
    const isHorizontal = direction2 === "LR" || direction2 === "RL";
    const layers = ordered.layers;
    const x5 = /* @__PURE__ */ Object.create(null);
    const y6 = /* @__PURE__ */ Object.create(null);
    const getNode2 = /* @__PURE__ */ __name((id41) => gWithDummies.nodeById.get(id41), "getNode");
    const getWidth = /* @__PURE__ */ __name((id41) => getNode2(id41)?.width ?? 0, "getWidth");
    const getHeight = /* @__PURE__ */ __name((id41) => getNode2(id41)?.height ?? 0, "getHeight");
    const topLaneOf = createTopLaneResolver(gWithDummies);
    const laneOrderGlobal = resolveTopLaneOrder(gWithDummies, opts?.laneOrder);
    const layerHeights = layers.map(
      (layer) => layer.reduce((m3, v3) => Math.max(m3, getHeight(v3)), 0)
    );
    const extraLayerGaps = [];
    if (isHorizontal) {
      for (let i2 = 0; i2 + 1 < layers.length; i2++) {
        const thisLayerMaxWidth = layers[i2].reduce((m3, v3) => Math.max(m3, getWidth(v3)), 0);
        const nextLayerMaxWidth = layers[i2 + 1].reduce((m3, v3) => Math.max(m3, getWidth(v3)), 0);
        const thisLayerMaxHeight = layerHeights[i2];
        const nextLayerMaxHeight = layerHeights[i2 + 1];
        const normalSpacing = thisLayerMaxHeight / 2 + nextLayerMaxHeight / 2;
        const requiredSpacing = (thisLayerMaxWidth + nextLayerMaxWidth) / 2;
        const extraNeeded = Math.max(0, requiredSpacing - normalSpacing - layerGap);
        extraLayerGaps.push(extraNeeded);
      }
    }
    const lanesUsedSet = /* @__PURE__ */ new Set();
    for (const layer of layers) {
      for (const id41 of layer) {
        lanesUsedSet.add(topLaneOf(id41));
      }
    }
    const hasNullLane = lanesUsedSet.has(null);
    const lanesUsed = laneOrderGlobal.filter((L3) => lanesUsedSet.has(L3));
    const laneOrderColumns = [...hasNullLane ? [null] : [], ...lanesUsed];
    const laneWidth = /* @__PURE__ */ Object.create(null);
    for (const L3 of lanesUsed) {
      laneWidth[L3] = 0;
    }
    if (hasNullLane) {
      laneWidth.null = 0;
    }
    for (const layer of layers) {
      const perLane = /* @__PURE__ */ Object.create(null);
      const nullIds = [];
      for (const id41 of layer) {
        const L3 = topLaneOf(id41);
        if (L3 === null) {
          nullIds.push(id41);
        } else {
          (perLane[L3] ||= []).push(id41);
        }
      }
      for (const [L3, ids] of Object.entries(perLane)) {
        const total = ids.reduce((s2, id41) => s2 + getWidth(id41), 0) + nodeGap * Math.max(0, ids.length - 1);
        laneWidth[L3] = Math.max(laneWidth[L3] ?? 0, total);
      }
      if (hasNullLane && nullIds.length) {
        const totalNull = nullIds.reduce((s2, id41) => s2 + getWidth(id41), 0) + nodeGap * Math.max(0, nullIds.length - 1);
        laneWidth.null = Math.max(laneWidth.null ?? 0, totalNull);
      }
    }
    const centerX = /* @__PURE__ */ new Map();
    {
      const widths = laneOrderColumns.map(
        (L3) => (L3 === null ? laneWidth.null : laneWidth[L3]) ?? 0
      );
      const totalW = widths.reduce((a2, b3) => a2 + b3, 0) + laneGap * Math.max(0, laneOrderColumns.length - 1);
      let cursor = -totalW / 2;
      for (let i2 = 0; i2 < laneOrderColumns.length; i2++) {
        const L3 = laneOrderColumns[i2];
        const w4 = widths[i2] ?? 0;
        const cx = cursor + w4 / 2;
        centerX.set(L3, cx);
        cursor += w4;
        if (i2 < laneOrderColumns.length - 1) {
          cursor += laneGap;
        }
      }
    }
    let yOffset = 0;
    for (const [li, layer] of layers.entries()) {
      const layerH = layerHeights[li] ?? 0;
      const byLane = /* @__PURE__ */ new Map();
      for (const id41 of layer) {
        const laneId = topLaneOf(id41);
        const arr = byLane.get(laneId) ?? [];
        arr.push(id41);
        byLane.set(laneId, arr);
      }
      for (const L3 of laneOrderColumns) {
        const nodesInLane = byLane.get(L3) ?? [];
        if (nodesInLane.length === 0) {
          continue;
        }
        const cx = centerX.get(L3);
        if (nodesInLane.length === 1) {
          const id41 = nodesInLane[0];
          x5[id41] = cx;
          y6[id41] = yOffset + layerH / 2;
        } else {
          const widths = nodesInLane.map((id41) => getWidth(id41));
          const total = widths.reduce((a2, b3) => a2 + b3, 0) + nodeGap * (nodesInLane.length - 1);
          let start3 = cx - total / 2;
          for (const [i2, id41] of nodesInLane.entries()) {
            const w4 = widths[i2];
            x5[id41] = start3 + w4 / 2;
            y6[id41] = yOffset + layerH / 2;
            start3 += w4 + nodeGap;
          }
        }
      }
      const extraGap = extraLayerGaps[li] ?? 0;
      yOffset += layerH + layerGap + extraGap;
    }
    const byRef = /* @__PURE__ */ new Map();
    for (const e3 of gWithDummies.edges) {
      const rid = e3.ref.id;
      if (!byRef.has(rid)) {
        byRef.set(rid, []);
      }
      byRef.get(rid).push(e3);
    }
    for (const [, chainEdges] of byRef) {
      if (chainEdges.length === 0) {
        continue;
      }
      const ref = chainEdges[0].ref;
      const src = ref.start;
      const dst = ref.end;
      if (src == null || dst == null) {
        continue;
      }
      const midX = Math.round(((x5[src] ?? 0) + (x5[dst] ?? 0)) / 2);
      const involved = /* @__PURE__ */ new Set();
      for (const e3 of chainEdges) {
        involved.add(e3.src);
        involved.add(e3.dst);
      }
      for (const vid of involved) {
        if (vid === src || vid === dst) {
          continue;
        }
        const node2 = gWithDummies.nodeById.get(vid);
        if (node2?.isDummy) {
          x5[vid] = midX;
        }
      }
    }
    return { x: x5, y: y6 };
  }
  var init_phase4_coordinates = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/phase4.coordinates.ts"() {
      "use strict";
      init_config2();
      init_phase2_options();
      __name(assignCoordinates, "assignCoordinates");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/laneOrdering.ts
  function hashString(input) {
    let hash = 2166136261;
    for (let i2 = 0; i2 < input.length; i2++) {
      hash ^= input.charCodeAt(i2);
      hash = Math.imul(hash, 16777619);
    }
    return hash >>> 0;
  }
  function mulberry32(seed) {
    let state4 = seed >>> 0;
    return () => {
      state4 += 1831565813;
      let t4 = state4;
      t4 = Math.imul(t4 ^ t4 >>> 15, t4 | 1);
      t4 ^= t4 + Math.imul(t4 ^ t4 >>> 7, t4 | 61);
      return ((t4 ^ t4 >>> 14) >>> 0) / 4294967296;
    };
  }
  function deterministicShuffle(order2, seed) {
    const shuffled = [...order2];
    const random2 = mulberry32(seed);
    for (let i2 = shuffled.length - 1; i2 > 0; i2--) {
      const j3 = Math.floor(random2() * (i2 + 1));
      [shuffled[i2], shuffled[j3]] = [shuffled[j3], shuffled[i2]];
    }
    return shuffled;
  }
  function sourceDistance(order2, sourceIndex) {
    let distance3 = 0;
    for (const [index, laneId] of order2.entries()) {
      distance3 += Math.abs(index - (sourceIndex.get(laneId) ?? index));
    }
    return distance3;
  }
  function laneArrangementCost(order2, weights) {
    const position5 = /* @__PURE__ */ new Map();
    for (const [index, laneId] of order2.entries()) {
      position5.set(laneId, index);
    }
    let cost = 0;
    for (const { a: a2, b: b3, weight: weight8 } of weights) {
      const ai = position5.get(a2);
      const bi = position5.get(b3);
      if (ai == null || bi == null) {
        continue;
      }
      cost += weight8 * Math.abs(ai - bi);
    }
    return cost;
  }
  function buildWeightedLaneEdges(g2) {
    const sourceOrder = buildTopLaneOrder(g2);
    if (sourceOrder.length < 2) {
      return [];
    }
    const sourceIndex = new Map(sourceOrder.map((laneId, index) => [laneId, index]));
    const topLaneOf = createTopLaneResolver(g2);
    const weights = /* @__PURE__ */ new Map();
    for (const edge of g2.layout.edges ?? []) {
      if (edge.isLayoutOnly) {
        continue;
      }
      const src = typeof edge.start === "string" ? edge.start : void 0;
      const dst = typeof edge.end === "string" ? edge.end : void 0;
      if (!src || !dst || !g2.nodeById.has(src) || !g2.nodeById.has(dst)) {
        continue;
      }
      const laneA = topLaneOf(src);
      const laneB = topLaneOf(dst);
      if (!laneA || !laneB || laneA === laneB) {
        continue;
      }
      const ia = sourceIndex.get(laneA);
      const ib = sourceIndex.get(laneB);
      if (ia == null || ib == null) {
        continue;
      }
      const [a2, b3] = ia <= ib ? [laneA, laneB] : [laneB, laneA];
      const key = `${a2}\0${b3}`;
      const existing = weights.get(key);
      if (existing) {
        existing.weight++;
      } else {
        weights.set(key, { a: a2, b: b3, weight: 1 });
      }
    }
    return [...weights.values()];
  }
  function greedySwitch(startOrder, weights, sourceIndex) {
    const order2 = [...startOrder];
    let cost = laneArrangementCost(order2, weights);
    let changed = true;
    let sweeps = 0;
    const maxSweeps = Math.max(1, order2.length);
    while (changed && sweeps < maxSweeps) {
      changed = false;
      sweeps++;
      for (let i2 = 0; i2 + 1 < order2.length; i2++) {
        [order2[i2], order2[i2 + 1]] = [order2[i2 + 1], order2[i2]];
        const nextCost = laneArrangementCost(order2, weights);
        if (nextCost < cost) {
          cost = nextCost;
          changed = true;
        } else {
          [order2[i2], order2[i2 + 1]] = [order2[i2 + 1], order2[i2]];
        }
      }
    }
    return {
      order: order2,
      cost,
      sourceDistance: sourceDistance(order2, sourceIndex)
    };
  }
  function isBetterCandidate(candidate, best) {
    if (candidate.cost !== best.cost) {
      return candidate.cost < best.cost;
    }
    return candidate.sourceDistance < best.sourceDistance;
  }
  function seedForRestart(sourceOrder, weights, restartIndex) {
    const weightSignature = [...weights].sort((a2, b3) => a2.a === b3.a ? a2.b.localeCompare(b3.b) : a2.a.localeCompare(b3.a)).map(({ a: a2, b: b3, weight: weight8 }) => `${a2}:${b3}:${weight8}`).join("|");
    return hashString(`${sourceOrder.join("|")}#${weightSignature}#${restartIndex}`);
  }
  function optimizeTopLaneOrder(g2, opts = {}) {
    const sourceOrder = buildTopLaneOrder(g2);
    if (sourceOrder.length < 2) {
      return sourceOrder;
    }
    const weights = buildWeightedLaneEdges(g2);
    if (weights.length === 0) {
      return sourceOrder;
    }
    const sourceIndex = new Map(sourceOrder.map((laneId, index) => [laneId, index]));
    let best = greedySwitch(sourceOrder, weights, sourceIndex);
    const restarts = Math.max(0, opts.restarts ?? AUTOMATIC_LANE_ORDERING_RESTARTS);
    for (let i2 = 0; i2 < restarts; i2++) {
      const seed = seedForRestart(sourceOrder, weights, i2);
      const start3 = deterministicShuffle(sourceOrder, seed);
      const candidate = greedySwitch(start3, weights, sourceIndex);
      if (isBetterCandidate(candidate, best)) {
        best = candidate;
      }
    }
    return best.order;
  }
  var AUTOMATIC_LANE_ORDERING_RESTARTS;
  var init_laneOrdering = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/laneOrdering.ts"() {
      "use strict";
      init_phase2_options();
      AUTOMATIC_LANE_ORDERING_RESTARTS = 8;
      __name(hashString, "hashString");
      __name(mulberry32, "mulberry32");
      __name(deterministicShuffle, "deterministicShuffle");
      __name(sourceDistance, "sourceDistance");
      __name(laneArrangementCost, "laneArrangementCost");
      __name(buildWeightedLaneEdges, "buildWeightedLaneEdges");
      __name(greedySwitch, "greedySwitch");
      __name(isBetterCandidate, "isBetterCandidate");
      __name(seedForRestart, "seedForRestart");
      __name(optimizeTopLaneOrder, "optimizeTopLaneOrder");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/pipeline.ts
  function sugiyamaLayout(g2, opts) {
    const ignoreCrossLaneEdges = opts?.ignoreCrossLaneEdges ?? true;
    const optimizeRanksByCrossings2 = opts?.optimizeRanksByCrossings ?? true;
    const g0 = normalizeGraph(g2);
    const laneOrder = opts?.automaticLaneOrdering ? optimizeTopLaneOrder(g0, { restarts: AUTOMATIC_LANE_ORDERING_RESTARTS }) : void 0;
    const cycleRes = removeCycles_DFS(g0);
    const gAcyclic = cycleRes.acyclic;
    const layering = ignoreCrossLaneEdges ? assignLayers_LaneAwareCompact(gAcyclic, {
      compactSingleInput: opts?.compactSingleInput ?? LAYERING.DEFAULT_COMPACT_SINGLE_INPUT,
      ignoreCrossLaneEdges: true,
      direction: opts?.direction
    }) : assignLayers_Gravity(gAcyclic, {
      compactSingleInput: opts?.compactSingleInput ?? LAYERING.DEFAULT_COMPACT_SINGLE_INPUT,
      ignoreCrossLaneEdges: false,
      optimizeRanksByCrossings: optimizeRanksByCrossings2
    });
    const { layering: properLayering, graphWithDummies } = makeProperLayering(layering, gAcyclic);
    const ordered = orderLayers(properLayering, graphWithDummies, { laneOrder });
    const coordinates = assignCoordinates(ordered, graphWithDummies, {
      layerGap: opts?.layerGap,
      nodeGap: opts?.nodeGap,
      direction: opts?.direction,
      laneOrder
    });
    return {
      acyclic: gAcyclic,
      reversed: cycleRes.reversed,
      layering: properLayering,
      ordered,
      coordinates
    };
  }
  var init_pipeline = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/pipeline.ts"() {
      "use strict";
      init_phase0_helpers();
      init_phase1_cycles();
      init_phase2_gravity();
      init_phase2_laneAwareCompact();
      init_phase2_dummies();
      init_phase3_ordering();
      init_phase4_coordinates();
      init_config2();
      init_laneOrdering();
      __name(sugiyamaLayout, "sugiyamaLayout");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/orthogonalRouter/router.ts
  function chooseOrthogonalSide(node2, target, fallback) {
    const cx = node2.x ?? 0;
    const cy = node2.y ?? 0;
    const dx = target.x - cx;
    const dy = target.y - cy;
    const absDx = Math.abs(dx);
    const absDy = Math.abs(dy);
    if (absDx < EPS7 && absDy < EPS7) {
      return fallback;
    }
    const verticalBias = 3;
    if (absDy > EPS7 && absDy * verticalBias >= absDx) {
      return dy > 0 ? "bottom" : "top";
    }
    if (absDx > EPS7) {
      return dx > 0 ? "right" : "left";
    }
    return fallback;
  }
  function sharedLineEndpointCoord(line2, nextLine) {
    return Math.abs(line2.to - nextLine.from) < EPS7 || Math.abs(line2.to - nextLine.to) < EPS7 ? line2.to : line2.from;
  }
  function pointOnLine(line2, along) {
    return line2.orient === "vertical" ? { x: line2.coord, y: along } : { x: along, y: line2.coord };
  }
  function routeEdgesOrthogonal(data6, direction2) {
    const nodes5 = data6.nodes ?? [];
    const originalEdges = data6.edges ?? [];
    const edges3 = [];
    for (const oe2 of originalEdges) {
      if (oe2.isLayoutOnly) {
        continue;
      }
      edges3.push({
        ...oe2,
        __originalEdge: oe2
      });
    }
    const nodeById = /* @__PURE__ */ new Map();
    const laneByNodeId = /* @__PURE__ */ new Map();
    const pipes = [];
    const isLR = direction2 === "LR";
    for (const n2 of nodes5) {
      nodeById.set(n2.id, n2);
    }
    const topLevelGroups = nodes5.filter((n2) => n2.isGroup && !n2.parentId);
    for (const group2 of topLevelGroups) {
      const lane = { id: group2.id };
      const assignLane = /* @__PURE__ */ __name((n2) => {
        laneByNodeId.set(n2.id, lane);
        nodes5.filter((child) => child.parentId === n2.id).forEach(assignLane);
      }, "assignLane");
      assignLane(group2);
    }
    const obstacles = nodes5.filter((n2) => !n2.isGroup && !n2.isEdgeLabel).map((n2) => {
      const w4 = n2.width ?? 10;
      const h3 = n2.height ?? 10;
      const x5 = n2.x ?? 0;
      const y6 = n2.y ?? 0;
      const padding = NODE_PADDING;
      return {
        nodeId: n2.id,
        minX: x5 - w4 / 2 - padding,
        maxX: x5 + w4 / 2 + padding,
        minY: y6 - h3 / 2 - padding,
        maxY: y6 + h3 / 2 + padding,
        // For LR: TB x becomes LR y, so visual Y extent should be based on height
        visualXHalfExtent: isLR ? h3 / 2 + padding : w4 / 2 + padding
      };
    });
    const getOrAddPipe = /* @__PURE__ */ __name((orientation, coord, spanMin, spanMax) => {
      let pipe = pipes.find((p3) => p3.orientation === orientation && Math.abs(p3.coord - coord) < 1);
      if (!pipe) {
        pipe = {
          id: `pipe-${orientation}-${coord.toFixed(0)}`,
          orientation,
          coord,
          spanMin,
          spanMax,
          tracks: []
        };
        pipes.push(pipe);
      }
      pipe.spanMin = Math.min(pipe.spanMin, spanMin);
      pipe.spanMax = Math.max(pipe.spanMax, spanMax);
      return pipe;
    }, "getOrAddPipe");
    const portForSide = /* @__PURE__ */ __name((node2, side) => {
      const w4 = node2.width ?? 10;
      const h3 = node2.height ?? 10;
      const cx = node2.x ?? 0;
      const cy = node2.y ?? 0;
      switch (side) {
        case "top":
          return { x: cx, y: cy - h3 / 2 };
        case "bottom":
          return { x: cx, y: cy + h3 / 2 };
        case "left":
          return { x: cx - w4 / 2, y: cy };
        case "right":
          return { x: cx + w4 / 2, y: cy };
      }
    }, "portForSide");
    const getOrthogonalPort = /* @__PURE__ */ __name((node2, target, isSource) => portForSide(node2, chooseOrthogonalSide(node2, target, isSource ? "bottom" : "top")), "getOrthogonalPort");
    const allRoutedSegments = [];
    const edgeSegmentIndices = [];
    const straightIntraLaneEdges = /* @__PURE__ */ new Set();
    const CROSSING_PENALTY = 1e3;
    const crossingPenalty = /* @__PURE__ */ __name((edgeIdx, from2, to) => {
      if (allRoutedSegments.length === 0) {
        return 0;
      }
      const isHorizontal = Math.abs(from2.y - to.y) < EPS7;
      const isVertical = Math.abs(from2.x - to.x) < EPS7;
      if (!isHorizontal && !isVertical) {
        return 0;
      }
      let penalties = 0;
      if (isHorizontal) {
        const y6 = from2.y;
        const minX = Math.min(from2.x, to.x) - EPS7;
        const maxX = Math.max(from2.x, to.x) + EPS7;
        if (maxX <= minX) {
          return 0;
        }
        for (const seg of allRoutedSegments) {
          if (seg.edgeIndex === edgeIdx || seg.orientation !== "vertical") {
            continue;
          }
          if (seg.pipe.coord < minX || seg.pipe.coord > maxX) {
            continue;
          }
          if (seg.from - EPS7 <= y6 && seg.to + EPS7 >= y6) {
            penalties += CROSSING_PENALTY;
          }
        }
      } else if (isVertical) {
        const x5 = from2.x;
        const minY = Math.min(from2.y, to.y) - EPS7;
        const maxY = Math.max(from2.y, to.y) + EPS7;
        if (maxY <= minY) {
          return 0;
        }
        for (const seg of allRoutedSegments) {
          if (seg.edgeIndex === edgeIdx || seg.orientation !== "horizontal") {
            continue;
          }
          if (seg.pipe.coord < minY || seg.pipe.coord > maxY) {
            continue;
          }
          if (seg.from - EPS7 <= x5 && seg.to + EPS7 >= x5) {
            penalties += CROSSING_PENALTY;
          }
        }
      }
      return penalties;
    }, "crossingPenalty");
    const routingOrder = edges3.map((edge, idx) => {
      if (!edge.start || !edge.end) {
        return { idx, crossLane: 0, dx: 0, dy: 0 };
      }
      const srcNode = nodeById.get(edge.start);
      const dstNode = nodeById.get(edge.end);
      const srcLane = laneByNodeId.get(edge.start);
      const dstLane = laneByNodeId.get(edge.end);
      const crossLane = srcLane && dstLane && srcLane.id !== dstLane.id ? 1 : 0;
      const dx = srcNode && dstNode ? Math.abs((dstNode.x ?? 0) - (srcNode.x ?? 0)) : 0;
      const dy = srcNode && dstNode ? Math.abs((dstNode.y ?? 0) - (srcNode.y ?? 0)) : 0;
      return { idx, crossLane, dx, dy };
    }).sort((a2, b3) => {
      if (a2.crossLane !== b3.crossLane) {
        return b3.crossLane - a2.crossLane;
      }
      const aDist = a2.dx + a2.dy;
      const bDist = b3.dx + b3.dy;
      if (Math.abs(aDist - bDist) > 1) {
        return aDist - bDist;
      }
      return a2.idx - b3.idx;
    }).map((entry) => entry.idx);
    const isSegmentBlocked = /* @__PURE__ */ __name((p1, p22, excludeStart, excludeEnd) => {
      const segMinX = Math.min(p1.x, p22.x);
      const segMaxX = Math.max(p1.x, p22.x);
      const segMinY = Math.min(p1.y, p22.y);
      const segMaxY = Math.max(p1.y, p22.y);
      const blockingObs = obstacles.find((obs) => {
        if (excludeStart && obs.nodeId === excludeStart) {
          return false;
        }
        if (excludeEnd && obs.nodeId === excludeEnd) {
          return false;
        }
        if (Math.abs(p1.x - p22.x) > EPS7) {
          return obs.minY < p1.y && obs.maxY > p1.y && obs.maxX > segMinX && obs.minX < segMaxX;
        } else {
          return obs.minX < p1.x && obs.maxX > p1.x && obs.maxY > segMinY && obs.minY < segMaxY;
        }
      });
      return !!blockingObs;
    }, "isSegmentBlocked");
    const portGroups = /* @__PURE__ */ new Map();
    const incidentEdgeTotals = /* @__PURE__ */ new Map();
    for (const edge of edges3) {
      if (!edge.start || !edge.end || edge.start === edge.end) {
        continue;
      }
      incidentEdgeTotals.set(edge.start, (incidentEdgeTotals.get(edge.start) ?? 0) + 1);
      incidentEdgeTotals.set(edge.end, (incidentEdgeTotals.get(edge.end) ?? 0) + 1);
    }
    const determineSide = /* @__PURE__ */ __name((node2, target) => chooseOrthogonalSide(node2, target, "bottom"), "determineSide");
    const sideInfoByIdx = /* @__PURE__ */ new Map();
    for (const [i2, e3] of edges3.entries()) {
      if (!e3.start || !e3.end || e3.start === e3.end) {
        continue;
      }
      if (e3.points && e3.points.length > 0) {
        continue;
      }
      const src = nodeById.get(e3.start);
      const dst = nodeById.get(e3.end);
      if (!src || !dst) {
        continue;
      }
      const dx = (dst.x ?? 0) - (src.x ?? 0);
      const dy = (dst.y ?? 0) - (src.y ?? 0);
      sideInfoByIdx.set(i2, {
        edgeIdx: i2,
        srcId: e3.start,
        dstId: e3.end,
        srcSide: determineSide(src, { x: dst.x ?? 0, y: dst.y ?? 0 }),
        dstSide: determineSide(dst, { x: src.x ?? 0, y: src.y ?? 0 }),
        absDx: Math.abs(dx),
        absDy: Math.abs(dy),
        dxSign: Math.sign(dx),
        dySign: Math.sign(dy)
      });
    }
    const preferenceStrength = /* @__PURE__ */ __name((info2) => {
      if (info2.srcSide === "top" || info2.srcSide === "bottom") {
        return info2.absDx === 0 ? Infinity : info2.absDy / info2.absDx;
      }
      return info2.absDy === 0 ? Infinity : info2.absDx / info2.absDy;
    }, "preferenceStrength");
    const secondarySide = /* @__PURE__ */ __name((info2) => {
      if (info2.srcSide === "top" || info2.srcSide === "bottom") {
        return info2.dxSign >= 0 ? "right" : "left";
      }
      return info2.dySign >= 0 ? "bottom" : "top";
    }, "secondarySide");
    const sourceSideGroups = /* @__PURE__ */ new Map();
    for (const info2 of sideInfoByIdx.values()) {
      const key = `${info2.srcId}:${info2.srcSide}`;
      if (!sourceSideGroups.has(key)) {
        sourceSideGroups.set(key, []);
      }
      sourceSideGroups.get(key).push(info2);
    }
    const sideLoad = /* @__PURE__ */ new Map();
    const loadKey = /* @__PURE__ */ __name((nodeId, side) => `${nodeId}:${side}`, "loadKey");
    for (const info2 of sideInfoByIdx.values()) {
      sideLoad.set(
        loadKey(info2.srcId, info2.srcSide),
        (sideLoad.get(loadKey(info2.srcId, info2.srcSide)) ?? 0) + 1
      );
      sideLoad.set(
        loadKey(info2.dstId, info2.dstSide),
        (sideLoad.get(loadKey(info2.dstId, info2.dstSide)) ?? 0) + 1
      );
    }
    for (const group2 of sourceSideGroups.values()) {
      if (group2.length < 2) {
        continue;
      }
      group2.sort((a2, b3) => {
        const sa = preferenceStrength(a2);
        const sb = preferenceStrength(b3);
        if (Math.abs(sa - sb) > 1e-9) {
          return sb - sa;
        }
        return a2.edgeIdx - b3.edgeIdx;
      });
      for (let g2 = 1; g2 < group2.length; g2++) {
        const info2 = group2[g2];
        const secondary = secondarySide(info2);
        const primaryLoad = sideLoad.get(loadKey(info2.srcId, info2.srcSide)) ?? 0;
        const secondaryLoad = sideLoad.get(loadKey(info2.srcId, secondary)) ?? 0;
        if (secondaryLoad >= primaryLoad) {
          continue;
        }
        sideLoad.set(loadKey(info2.srcId, info2.srcSide), primaryLoad - 1);
        sideLoad.set(loadKey(info2.srcId, secondary), secondaryLoad + 1);
        info2.srcSide = secondary;
      }
    }
    const isDiamondNode = /* @__PURE__ */ __name((node2) => {
      const shape = node2?.shape;
      return shape === "question" || shape === "diamond";
    }, "isDiamondNode");
    const inSidesByNode = /* @__PURE__ */ new Map();
    for (const info2 of sideInfoByIdx.values()) {
      if (!inSidesByNode.has(info2.dstId)) {
        inSidesByNode.set(info2.dstId, /* @__PURE__ */ new Set());
      }
      inSidesByNode.get(info2.dstId).add(info2.dstSide);
    }
    for (const info2 of sideInfoByIdx.values()) {
      if (!isDiamondNode(nodeById.get(info2.srcId))) {
        continue;
      }
      const inSides = inSidesByNode.get(info2.srcId);
      if (!inSides?.has(info2.srcSide)) {
        continue;
      }
      const secondary = secondarySide(info2);
      if (inSides.has(secondary) || (sideLoad.get(loadKey(info2.srcId, secondary)) ?? 0) > 0) {
        continue;
      }
      const primaryLoad = sideLoad.get(loadKey(info2.srcId, info2.srcSide)) ?? 0;
      sideLoad.set(loadKey(info2.srcId, info2.srcSide), Math.max(0, primaryLoad - 1));
      sideLoad.set(loadKey(info2.srcId, secondary), 1);
      info2.srcSide = secondary;
    }
    for (const info2 of sideInfoByIdx.values()) {
      const { edgeIdx: i2, srcId, dstId, srcSide, dstSide } = info2;
      const src = nodeById.get(srcId);
      const dst = nodeById.get(dstId);
      const srcKey = `${srcId}:${srcSide}:src`;
      const dstCoord = srcSide === "top" || srcSide === "bottom" ? dst.x ?? 0 : dst.y ?? 0;
      if (!portGroups.has(srcKey)) {
        portGroups.set(srcKey, []);
      }
      portGroups.get(srcKey).push({ edgeIdx: i2, oppositeCoord: dstCoord });
      const dstKey = `${dstId}:${dstSide}:dst`;
      const srcCoord = dstSide === "top" || dstSide === "bottom" ? src.x ?? 0 : src.y ?? 0;
      if (!portGroups.has(dstKey)) {
        portGroups.set(dstKey, []);
      }
      portGroups.get(dstKey).push({ edgeIdx: i2, oppositeCoord: srcCoord });
    }
    const portOffsets = /* @__PURE__ */ new Map();
    const MIN_PORT_SPACING3 = 8;
    for (const [key, group2] of portGroups) {
      if (group2.length < 2) {
        continue;
      }
      group2.sort((a2, b3) => a2.oppositeCoord - b3.oppositeCoord);
      const parts = key.split(":");
      const nodeId = parts.slice(0, -2).join(":");
      const side = parts[parts.length - 2];
      const role = parts[parts.length - 1];
      const node2 = nodeById.get(nodeId);
      if (!node2) {
        continue;
      }
      const isVerticalSide = side === "left" || side === "right";
      const sideLength = isVerticalSide ? node2.height ?? 10 : node2.width ?? 10;
      const shape = node2.shape;
      const isDiamond = shape === "question" || shape === "diamond";
      const effectiveLength = isDiamond ? sideLength * 0.3 : sideLength;
      const MAX_PORT_SPACING = 20;
      const spacing2 = Math.min(
        MAX_PORT_SPACING,
        Math.max(MIN_PORT_SPACING3, effectiveLength / (group2.length + 1))
      );
      const totalSpan = spacing2 * (group2.length - 1);
      const startOffset = -totalSpan / 2;
      for (const [j3, element3] of group2.entries()) {
        const offset = startOffset + j3 * spacing2;
        const offsetKey = `${element3.edgeIdx}:${role}`;
        portOffsets.set(offsetKey, offset);
      }
    }
    const edgeHasLabelNode = /* @__PURE__ */ __name((edgeIdx) => Boolean(edges3[edgeIdx]?.labelNodeId), "edgeHasLabelNode");
    const faceHasLabelNode = /* @__PURE__ */ __name((nodeId, side) => {
      if (!nodeId) {
        return false;
      }
      return (portGroups.get(`${nodeId}:${side}:src`) ?? []).some(
        ({ edgeIdx }) => edgeHasLabelNode(edgeIdx)
      ) || (portGroups.get(`${nodeId}:${side}:dst`) ?? []).some(
        ({ edgeIdx }) => edgeHasLabelNode(edgeIdx)
      );
    }, "faceHasLabelNode");
    const applyPortOffset = /* @__PURE__ */ __name((basePort, side, offset) => {
      if (side === "top" || side === "bottom") {
        return { x: basePort.x + offset, y: basePort.y };
      } else {
        return { x: basePort.x, y: basePort.y + offset };
      }
    }, "applyPortOffset");
    const portsForEdge = /* @__PURE__ */ __name((edgeIndex, src, dst) => {
      const sideInfo = sideInfoByIdx.get(edgeIndex);
      const srcTarget = { x: dst.x ?? 0, y: dst.y ?? 0 };
      const dstTarget = { x: src.x ?? 0, y: src.y ?? 0 };
      const srcSide = sideInfo?.srcSide ?? determineSide(src, srcTarget);
      const dstSide = sideInfo?.dstSide ?? determineSide(dst, dstTarget);
      let pSrcPort = sideInfo ? portForSide(src, sideInfo.srcSide) : getOrthogonalPort(src, srcTarget, true);
      let pDstPort = sideInfo ? portForSide(dst, sideInfo.dstSide) : getOrthogonalPort(dst, dstTarget, false);
      const srcOffset = portOffsets.get(`${edgeIndex}:src`);
      const dstOffset = portOffsets.get(`${edgeIndex}:dst`);
      if (srcOffset !== void 0) {
        pSrcPort = applyPortOffset(pSrcPort, srcSide, srcOffset);
      }
      if (dstOffset !== void 0) {
        pDstPort = applyPortOffset(pDstPort, dstSide, dstOffset);
      }
      return { pSrcPort, pDstPort, srcSide, dstSide };
    }, "portsForEdge");
    for (const i2 of routingOrder) {
      const e3 = edges3[i2];
      edgeSegmentIndices[i2] = [];
      if (!e3.start || !e3.end) {
        continue;
      }
      if (e3.points && e3.points.length > 0) {
        continue;
      }
      if (e3.start === e3.end) {
        continue;
      }
      const src = nodeById.get(e3.start);
      const dst = nodeById.get(e3.end);
      if (!src || !dst) {
        continue;
      }
      const {
        pSrcPort,
        pDstPort,
        srcSide: srcPortSide,
        dstSide: dstPortSide
      } = portsForEdge(i2, src, dst);
      const pSrcAnchor = { ...pSrcPort };
      const pDstAnchor = { ...pDstPort };
      const srcPortIsVertical = srcPortSide === "top" || srcPortSide === "bottom";
      const dstPortIsVertical = dstPortSide === "top" || dstPortSide === "bottom";
      if (srcPortIsVertical) {
        const isBottom = pSrcPort.y > (src.y ?? 0);
        pSrcAnchor.y = isBottom ? pSrcPort.y + ANCHOR_OFFSET : pSrcPort.y - ANCHOR_OFFSET;
      } else {
        const isRight = pSrcPort.x > (src.x ?? 0);
        pSrcAnchor.x = isRight ? pSrcPort.x + ANCHOR_OFFSET : pSrcPort.x - ANCHOR_OFFSET;
      }
      if (dstPortIsVertical) {
        const isBottom = pDstPort.y > (dst.y ?? 0);
        pDstAnchor.y = isBottom ? pDstPort.y + ANCHOR_OFFSET : pDstPort.y - ANCHOR_OFFSET;
      } else {
        const isRight = pDstPort.x > (dst.x ?? 0);
        pDstAnchor.x = isRight ? pDstPort.x + ANCHOR_OFFSET : pDstPort.x - ANCHOR_OFFSET;
      }
      const isPointInObstacle = /* @__PURE__ */ __name((pt, excludeNodeIds) => {
        for (const obs of obstacles) {
          if (excludeNodeIds.includes(obs.nodeId)) {
            continue;
          }
          if (pt.x > obs.minX && pt.x < obs.maxX && pt.y > obs.minY && pt.y < obs.maxY) {
            return { inside: true, obstacle: obs };
          }
        }
        return { inside: false };
      }, "isPointInObstacle");
      const obstacleDetour = /* @__PURE__ */ __name((port, node2, opposite, obs, portIsVertical) => {
        if (portIsVertical) {
          const leavesPositiveSide2 = port.y > (node2.y ?? 0);
          const goRight = (opposite.x ?? 0) >= port.x;
          return {
            x: goRight ? obs.maxX + HORIZONTAL_PIPE_MARGIN : obs.minX - HORIZONTAL_PIPE_MARGIN,
            y: leavesPositiveSide2 ? obs.maxY + VERTICAL_PIPE_MARGIN : obs.minY - VERTICAL_PIPE_MARGIN,
            leavesPositiveSide: leavesPositiveSide2
          };
        }
        const leavesPositiveSide = port.x > (node2.x ?? 0);
        const goDown = (opposite.y ?? 0) >= port.y;
        return {
          x: leavesPositiveSide ? obs.maxX + HORIZONTAL_PIPE_MARGIN : obs.minX - HORIZONTAL_PIPE_MARGIN,
          y: goDown ? obs.maxY + VERTICAL_PIPE_MARGIN : obs.minY - VERTICAL_PIPE_MARGIN,
          leavesPositiveSide
        };
      }, "obstacleDetour");
      let srcHandleWaypoints = [];
      const endpointIds = [e3.start, e3.end];
      const srcCheck = isPointInObstacle(pSrcAnchor, endpointIds);
      if (srcCheck.inside && srcCheck.obstacle) {
        const obs = srcCheck.obstacle;
        if (srcPortIsVertical) {
          const detour = obstacleDetour(pSrcPort, src, dst, obs, true);
          pSrcAnchor.x = detour.x;
          pSrcAnchor.y = detour.y;
          const gapY = detour.leavesPositiveSide ? Math.min(obs.minY - 2, pSrcPort.y + ANCHOR_OFFSET) : Math.max(obs.maxY + 2, pSrcPort.y - ANCHOR_OFFSET);
          srcHandleWaypoints = [
            { x: pSrcPort.x, y: gapY },
            // Orthogonal step in the gap
            { x: detour.x, y: gapY },
            // Horizontal detour
            { x: detour.x, y: detour.y }
            // Down past obstacle
          ];
        } else {
          const detour = obstacleDetour(pSrcPort, src, dst, obs, false);
          const gapX = detour.leavesPositiveSide ? Math.min(obs.minX - 2, pSrcPort.x + ANCHOR_OFFSET) : Math.max(obs.maxX + 2, pSrcPort.x - ANCHOR_OFFSET);
          pSrcAnchor.x = detour.x;
          pSrcAnchor.y = detour.y;
          srcHandleWaypoints = [
            { x: gapX, y: pSrcPort.y },
            // Orthogonal step in the gap
            { x: gapX, y: detour.y },
            // Vertical detour
            { x: detour.x, y: detour.y }
            // Horizontal past obstacle
          ];
        }
      }
      let dstHandleWaypoints = [];
      const dstCheck = isPointInObstacle(pDstAnchor, endpointIds);
      if (dstCheck.inside && dstCheck.obstacle) {
        const obs = dstCheck.obstacle;
        if (dstPortIsVertical) {
          const detour = obstacleDetour(pDstPort, dst, src, obs, true);
          pDstAnchor.x = detour.x;
          pDstAnchor.y = detour.y;
          dstHandleWaypoints = [
            { x: detour.x, y: detour.y },
            // From anchor position
            { x: pDstPort.x, y: detour.y }
            // Go sideways to port's X
            // Then orthogonally to port
          ];
        } else {
          const detour = obstacleDetour(pDstPort, dst, src, obs, false);
          pDstAnchor.x = detour.x;
          pDstAnchor.y = detour.y;
          dstHandleWaypoints = [
            { x: detour.x, y: detour.y },
            // From anchor position
            { x: detour.x, y: pDstPort.y }
            // Go vertically to port's Y
          ];
        }
      }
      if (srcHandleWaypoints.length === 0 && dstHandleWaypoints.length === 0) {
        const hpMargin = HORIZONTAL_PIPE_MARGIN;
        const anchorsSameX = Math.abs(pSrcAnchor.x - pDstAnchor.x) < hpMargin;
        const anchorsSameY = Math.abs(pSrcAnchor.y - pDstAnchor.y) < hpMargin;
        const hasPortOffset = portOffsets.get(`${i2}:src`) !== void 0 || portOffsets.get(`${i2}:dst`) !== void 0;
        const srcFaceTotal = (portGroups.get(`${e3.start ?? ""}:${srcPortSide}:src`)?.length ?? 0) + (portGroups.get(`${e3.start ?? ""}:${srcPortSide}:dst`)?.length ?? 0);
        const dstFaceTotal = (portGroups.get(`${e3.end ?? ""}:${dstPortSide}:src`)?.length ?? 0) + (portGroups.get(`${e3.end ?? ""}:${dstPortSide}:dst`)?.length ?? 0);
        const faceContested = srcFaceTotal > 1 || dstFaceTotal > 1;
        const srcIncidentTotal = incidentEdgeTotals.get(e3.start ?? "") ?? 0;
        const dstIncidentTotal = incidentEdgeTotals.get(e3.end ?? "") ?? 0;
        const contestedFaceHasLabel = srcFaceTotal > 1 && faceHasLabelNode(e3.start, srcPortSide) || dstFaceTotal > 1 && faceHasLabelNode(e3.end, dstPortSide);
        const srcContestAllowsCenteredStraight = srcFaceTotal <= 1 || srcIncidentTotal <= 2;
        const dstContestAllowsCenteredStraight = dstFaceTotal <= 1 || dstIncidentTotal <= 2;
        const canPreserveSimpleContestedStraight = faceContested && !contestedFaceHasLabel && srcContestAllowsCenteredStraight && dstContestAllowsCenteredStraight;
        if ((anchorsSameX || anchorsSameY) && !hasPortOffset && (!faceContested || canPreserveSimpleContestedStraight)) {
          const directBlocked = isSegmentBlocked(pSrcPort, pDstPort, e3.start, e3.end);
          if (!directBlocked) {
            e3.points = [{ ...pSrcPort }, { ...pSrcAnchor }, { ...pDstAnchor }, { ...pDstPort }];
            straightIntraLaneEdges.add(i2);
            const fastPathOrientation = anchorsSameY ? "horizontal" : "vertical";
            const fastPathCoord = anchorsSameY ? pSrcPort.y : pSrcPort.x;
            const fastPathFrom = anchorsSameY ? Math.min(pSrcPort.x, pDstPort.x) : Math.min(pSrcPort.y, pDstPort.y);
            const fastPathTo = anchorsSameY ? Math.max(pSrcPort.x, pDstPort.x) : Math.max(pSrcPort.y, pDstPort.y);
            const fastPathPipe = {
              id: `fast-path-${fastPathOrientation}-${fastPathCoord.toFixed(0)}-${i2}`,
              orientation: fastPathOrientation,
              coord: fastPathCoord,
              spanMin: fastPathFrom,
              spanMax: fastPathTo,
              tracks: []
            };
            allRoutedSegments.push({
              edgeIndex: i2,
              segmentIndex: 0,
              orientation: fastPathOrientation,
              pipe: fastPathPipe,
              trackIndex: 0,
              from: fastPathFrom,
              to: fastPathTo
            });
            continue;
          }
        }
      }
      const srcPipe = getOrAddPipe("vertical", pSrcAnchor.x, pSrcAnchor.y, pSrcAnchor.y);
      pSrcAnchor.x = srcPipe.coord;
      const dstPipe = getOrAddPipe("vertical", pDstAnchor.x, pDstAnchor.y, pDstAnchor.y);
      pDstAnchor.x = dstPipe.coord;
      let bbMinX = Math.min(pSrcAnchor.x, pDstAnchor.x) - 50;
      let bbMaxX = Math.max(pSrcAnchor.x, pDstAnchor.x) + 50;
      let bbMinY = Math.min(pSrcAnchor.y, pDstAnchor.y) - 50;
      let bbMaxY = Math.max(pSrcAnchor.y, pDstAnchor.y) + 50;
      for (const obs of obstacles) {
        const pathMinX = Math.min(pSrcAnchor.x, pDstAnchor.x);
        const pathMaxX = Math.max(pSrcAnchor.x, pDstAnchor.x);
        const pathMinY = Math.min(pSrcAnchor.y, pDstAnchor.y);
        const pathMaxY = Math.max(pSrcAnchor.y, pDstAnchor.y);
        const obsBlocksPath = obs.minX < pathMaxX && obs.maxX > pathMinX && obs.minY < pathMaxY && obs.maxY > pathMinY;
        if (obsBlocksPath) {
          bbMinX = Math.min(bbMinX, obs.minX - ROUTING_MARGIN);
          bbMaxX = Math.max(bbMaxX, obs.maxX + ROUTING_MARGIN);
          bbMinY = Math.min(bbMinY, obs.minY - ROUTING_MARGIN);
          bbMaxY = Math.max(bbMaxY, obs.maxY + ROUTING_MARGIN);
        }
      }
      for (const obs of obstacles) {
        if (obs.maxX < bbMinX || obs.minX > bbMaxX || obs.maxY < bbMinY || obs.minY > bbMaxY) {
          continue;
        }
        const hMargin = HORIZONTAL_PIPE_MARGIN;
        getOrAddPipe("horizontal", obs.minY - hMargin, bbMinX, bbMaxX);
        getOrAddPipe("horizontal", obs.maxY + hMargin, bbMinX, bbMaxX);
        const vMargin = VERTICAL_PIPE_MARGIN;
        getOrAddPipe("vertical", obs.minX - vMargin, bbMinY, bbMaxY);
        getOrAddPipe("vertical", obs.maxX + vMargin, bbMinY, bbMaxY);
      }
      getOrAddPipe("horizontal", pSrcAnchor.y, bbMinX, bbMaxX);
      getOrAddPipe("horizontal", pDstAnchor.y, bbMinX, bbMaxX);
      const hPipes = pipes.filter(
        (p3) => p3.orientation === "horizontal" && p3.coord >= bbMinY && p3.coord <= bbMaxY
      );
      const vPipes = pipes.filter(
        (p3) => p3.orientation === "vertical" && p3.coord >= bbMinX && p3.coord <= bbMaxX
      );
      const getKey3 = /* @__PURE__ */ __name((x5, y6) => `${x5.toFixed(1)},${y6.toFixed(1)}`, "getKey");
      const startKey = getKey3(pSrcAnchor.x, pSrcAnchor.y);
      const endKey = getKey3(pDstAnchor.x, pDstAnchor.y);
      const gScore = /* @__PURE__ */ new Map();
      const cameFrom = /* @__PURE__ */ new Map();
      const arrivalDir = /* @__PURE__ */ new Map();
      const openSet = /* @__PURE__ */ new Set();
      const openList = [];
      gScore.set(startKey, 0);
      arrivalDir.set(startKey, "n");
      openList.push({
        key: startKey,
        f: Math.hypot(pDstAnchor.x - pSrcAnchor.x, pDstAnchor.y - pSrcAnchor.y),
        pt: pSrcAnchor
      });
      openSet.add(startKey);
      let foundPath = [];
      const checkSegmentBlocked = /* @__PURE__ */ __name((p1, p22) => {
        return isSegmentBlocked(p1, p22, e3.start, e3.end);
      }, "checkSegmentBlocked");
      const cornerHV = { x: pDstAnchor.x, y: pSrcAnchor.y };
      const seg1HV_blocked = checkSegmentBlocked(pSrcAnchor, cornerHV);
      const seg2HV_blocked = checkSegmentBlocked(cornerHV, pDstAnchor);
      const pathHV_blocked = seg1HV_blocked || seg2HV_blocked;
      const cornerVH = { x: pSrcAnchor.x, y: pDstAnchor.y };
      const seg1VH_blocked = checkSegmentBlocked(pSrcAnchor, cornerVH);
      const seg2VH_blocked = checkSegmentBlocked(cornerVH, pDstAnchor);
      const pathVH_blocked = seg1VH_blocked || seg2VH_blocked;
      if (!pathHV_blocked) {
        if (Math.abs(pSrcAnchor.y - pDstAnchor.y) < EPS7 || Math.abs(pSrcAnchor.x - pDstAnchor.x) < EPS7) {
          foundPath = [pSrcAnchor, pDstAnchor];
        } else {
          foundPath = [pSrcAnchor, cornerHV, pDstAnchor];
        }
      } else if (!pathVH_blocked) {
        if (Math.abs(pSrcAnchor.x - pDstAnchor.x) < EPS7) {
          foundPath = [pSrcAnchor, pDstAnchor];
        } else {
          foundPath = [pSrcAnchor, cornerVH, pDstAnchor];
        }
      }
      if (foundPath.length === 0) {
        while (openList.length > 0) {
          openList.sort((a2, b3) => a2.f - b3.f);
          const current = openList.shift();
          openSet.delete(current.key);
          if (current.key === endKey) {
            let currKey = endKey;
            let currPt = pDstAnchor;
            foundPath = [currPt];
            while (cameFrom.has(currKey)) {
              const prev2 = cameFrom.get(currKey);
              foundPath.unshift(prev2);
              currPt = prev2;
              currKey = getKey3(prev2.x, prev2.y);
            }
            break;
          }
          const cx = current.pt.x;
          const cy = current.pt.y;
          const sortedVPipes = vPipes.sort((a2, b3) => a2.coord - b3.coord);
          const vIdx = sortedVPipes.findIndex((p3) => Math.abs(p3.coord - cx) < 1);
          const hPipesSorted = hPipes.sort((a2, b3) => a2.coord - b3.coord);
          const hIdx = hPipesSorted.findIndex((p3) => Math.abs(p3.coord - cy) < 1);
          const neighbors = [];
          if (vIdx > 0) {
            neighbors.push({ x: sortedVPipes[vIdx - 1].coord, y: cy });
          }
          if (vIdx >= 0 && vIdx < sortedVPipes.length - 1) {
            neighbors.push({ x: sortedVPipes[vIdx + 1].coord, y: cy });
          }
          if (hIdx > 0) {
            neighbors.push({ x: cx, y: hPipesSorted[hIdx - 1].coord });
          }
          if (hIdx >= 0 && hIdx < hPipesSorted.length - 1) {
            neighbors.push({ x: cx, y: hPipesSorted[hIdx + 1].coord });
          }
          for (const neighbor of neighbors) {
            const minX = Math.min(cx, neighbor.x);
            const maxX = Math.max(cx, neighbor.x);
            const minY = Math.min(cy, neighbor.y);
            const maxY = Math.max(cy, neighbor.y);
            const blocked = obstacles.some((obs) => {
              if (obs.nodeId === e3.start || obs.nodeId === e3.end) {
                return false;
              }
              if (minX !== maxX) {
                return obs.minY < cy && obs.maxY > cy && obs.maxX > minX && obs.minX < maxX;
              } else {
                return obs.minX < cx && obs.maxX > cx && obs.maxY > minY && obs.minY < maxY;
              }
            });
            if (blocked) {
              continue;
            }
            const nKey = getKey3(neighbor.x, neighbor.y);
            const dist3 = Math.abs(neighbor.x - cx) + Math.abs(neighbor.y - cy);
            const penalty = crossingPenalty(i2, current.pt, neighbor);
            let dirPenalty = 0;
            const destDx = pDstAnchor.x - pSrcAnchor.x;
            const destDy = pDstAnchor.y - pSrcAnchor.y;
            const moveDx = neighbor.x - cx;
            const moveDy = neighbor.y - cy;
            if (destDy > 10 && moveDy < -5 || destDy < -10 && moveDy > 5) {
              dirPenalty = Math.abs(moveDy) * 100;
            }
            if (destDx > 10 && moveDx < -5 || destDx < -10 && moveDx > 5) {
              dirPenalty += Math.abs(moveDx) * 50;
            }
            let bendPenalty = 0;
            const currentDir = arrivalDir.get(current.key) ?? "n";
            const moveDir = Math.abs(moveDx) > EPS7 ? "h" : "v";
            if (currentDir !== "n" && currentDir !== moveDir) {
              bendPenalty = 50;
            }
            const stepCost = dist3 + penalty + dirPenalty + bendPenalty;
            const tentativeG = (gScore.get(current.key) ?? Infinity) + stepCost;
            const h3 = Math.abs(pDstAnchor.x - neighbor.x) + Math.abs(pDstAnchor.y - neighbor.y);
            if (tentativeG < (gScore.get(nKey) ?? Infinity)) {
              cameFrom.set(nKey, current.pt);
              gScore.set(nKey, tentativeG);
              arrivalDir.set(nKey, moveDir);
              if (!openSet.has(nKey)) {
                openList.push({ key: nKey, f: tentativeG + h3, pt: neighbor });
                openSet.add(nKey);
              } else {
                const idx = openList.findIndex((x5) => x5.key === nKey);
                if (idx !== -1) {
                  openList[idx].f = tentativeG + h3;
                }
              }
            }
          }
        }
      }
      if (foundPath.length === 0) {
        foundPath = [pSrcAnchor, { x: pSrcAnchor.x, y: pDstAnchor.y }, pDstAnchor];
      }
      if (foundPath.length > 4) {
        const start3 = foundPath[0];
        const end2 = foundPath[foundPath.length - 1];
        let minX = Math.min(start3.x, end2.x);
        let maxX = Math.max(start3.x, end2.x);
        let minY = Math.min(start3.y, end2.y);
        let maxY = Math.max(start3.y, end2.y);
        for (const pt of foundPath) {
          minX = Math.min(minX, pt.x);
          maxX = Math.max(maxX, pt.x);
          minY = Math.min(minY, pt.y);
          maxY = Math.max(maxY, pt.y);
        }
        const wentRight = maxX > Math.max(start3.x, end2.x);
        const wentLeft = minX < Math.min(start3.x, end2.x);
        if (isLR) {
          const margin = VERTICAL_PIPE_MARGIN;
          if (wentRight) {
            const pathX = Math.max(start3.x, end2.x);
            const pathMinY = Math.min(start3.y, end2.y);
            const pathMaxY = Math.max(start3.y, end2.y);
            const detourObstacles = obstacles.filter(
              (obs) => obs.minX < pathX && obs.maxX > pathX && // obstacle's x-range contains the path x
              obs.minY < pathMaxY && obs.maxY > pathMinY
              // obstacle's y-range overlaps with path y-range
            );
            if (detourObstacles.length > 0) {
              let visualMaxX = Math.max(start3.x, end2.x);
              for (const obs of detourObstacles) {
                const obsCenterX = (obs.minX + obs.maxX) / 2;
                if (obs.visualXHalfExtent === void 0 || isNaN(obs.visualXHalfExtent)) {
                  continue;
                }
                const visualRight = obsCenterX + obs.visualXHalfExtent + margin;
                visualMaxX = Math.max(visualMaxX, visualRight);
              }
              if (!isNaN(visualMaxX)) {
                maxX = visualMaxX;
              }
            }
          }
          if (wentLeft) {
            const detourObstacles = obstacles.filter(
              (obs) => obs.minX < Math.min(start3.x, end2.x) + margin && // obstacle extends past the direct path
              obs.minY < Math.max(start3.y, end2.y) && obs.maxY > Math.min(start3.y, end2.y)
              // obstacle is in Y range
            );
            if (detourObstacles.length > 0) {
              let visualMinX = Math.min(start3.x, end2.x);
              for (const obs of detourObstacles) {
                const obsCenterX = (obs.minX + obs.maxX) / 2;
                const visualLeft = obsCenterX - obs.visualXHalfExtent - margin;
                visualMinX = Math.min(visualMinX, visualLeft);
              }
              minX = visualMinX;
            }
          }
        }
        const findBestReturnY = /* @__PURE__ */ __name((detourX) => {
          const goingDown = end2.y > start3.y;
          const relevantObs = obstacles.filter((obs) => {
            const obsInXRange = Math.min(start3.x, end2.x) < obs.maxX && Math.max(start3.x, end2.x) > obs.minX;
            const obsInYRange = Math.min(start3.y, end2.y) < obs.maxY && Math.max(start3.y, end2.y) > obs.minY;
            return obsInXRange && obsInYRange;
          });
          let filteredObs = relevantObs;
          if (isLR && relevantObs.length > 0) {
            const obsAtDetourX = relevantObs.filter(
              (obs) => obs.minX < detourX && obs.maxX > detourX
            );
            if (obsAtDetourX.length > 0) {
              filteredObs = obsAtDetourX;
            }
          }
          if (filteredObs.length === 0) {
            return end2.y;
          }
          const margin = HORIZONTAL_PIPE_MARGIN;
          if (goingDown) {
            const lowestObsBottom = Math.max(...filteredObs.map((obs) => obs.maxY));
            const bestY = lowestObsBottom + margin;
            if (bestY < end2.y - EPS7) {
              return bestY;
            }
          } else {
            const highestObsTop = Math.min(...filteredObs.map((obs) => obs.minY));
            const bestY = highestObsTop - margin;
            if (bestY > end2.y + EPS7) {
              return bestY;
            }
          }
          return end2.y;
        }, "findBestReturnY");
        const trySimplifyWithDetourX = /* @__PURE__ */ __name((detourX) => {
          const bestY = findBestReturnY(detourX);
          const corner1 = { x: detourX, y: start3.y };
          const corner2 = { x: detourX, y: bestY };
          const corner3 = { x: end2.x, y: bestY };
          const seg1Blocked = checkSegmentBlocked(start3, corner1);
          const seg2Blocked = checkSegmentBlocked(corner1, corner2);
          const seg3Blocked = checkSegmentBlocked(corner2, corner3);
          const seg4Blocked = bestY !== end2.y ? checkSegmentBlocked(corner3, end2) : false;
          if (!seg1Blocked && !seg2Blocked && !seg3Blocked && !seg4Blocked) {
            if (Math.abs(bestY - end2.y) < EPS7) {
              return [start3, corner1, corner2, end2];
            }
            return [start3, corner1, corner2, corner3, end2];
          }
          return null;
        }, "trySimplifyWithDetourX");
        const simplified2 = wentRight && !wentLeft ? trySimplifyWithDetourX(maxX) : wentLeft && !wentRight ? trySimplifyWithDetourX(minX) : null;
        if (simplified2) {
          foundPath = simplified2;
        }
      }
      const fullPoints = [
        pSrcPort,
        ...srcHandleWaypoints,
        ...foundPath,
        ...dstHandleWaypoints.reverse(),
        // Reverse because they're stored anchor->waypoint->port
        pDstPort
      ];
      if (fullPoints.length >= 3) {
        const C3 = fullPoints[fullPoints.length - 1];
        const B3 = fullPoints[fullPoints.length - 2];
        const A2 = fullPoints[fullPoints.length - 3];
        const isHoriz = Math.abs(A2.y - B3.y) < EPS7 && Math.abs(B3.y - C3.y) < EPS7;
        const isVert = Math.abs(A2.x - B3.x) < EPS7 && Math.abs(B3.x - C3.x) < EPS7;
        if (isHoriz) {
          const signAB = Math.sign(B3.x - A2.x);
          const signAC = Math.sign(C3.x - A2.x);
          if (signAB !== 0 && signAB === signAC && Math.abs(B3.x - A2.x) > Math.abs(C3.x - A2.x)) {
            fullPoints.splice(-2, 1);
          }
        } else if (isVert) {
          const signAB = Math.sign(B3.y - A2.y);
          const signAC = Math.sign(C3.y - A2.y);
          if (signAB !== 0 && signAB === signAC && Math.abs(B3.y - A2.y) > Math.abs(C3.y - A2.y)) {
            fullPoints.splice(-2, 1);
          }
        }
      }
      const simplified = [fullPoints[0]];
      for (let k2 = 1; k2 < fullPoints.length - 1; k2++) {
        if (k2 === 1) {
          simplified.push(fullPoints[k2]);
          continue;
        }
        const prev2 = simplified[simplified.length - 1];
        const curr = fullPoints[k2];
        const next3 = fullPoints[k2 + 1];
        if (Math.abs(prev2.y - curr.y) < EPS7 && Math.abs(curr.y - next3.y) < EPS7) {
          const dir1 = curr.x > prev2.x;
          const dir2 = next3.x > curr.x;
          if (dir1 !== dir2) {
            simplified.push(curr);
            continue;
          }
          continue;
        }
        if (Math.abs(prev2.x - curr.x) < EPS7 && Math.abs(curr.x - next3.x) < EPS7) {
          const dir1 = curr.y > prev2.y;
          const dir2 = next3.y > curr.y;
          if (dir1 !== dir2) {
            simplified.push(curr);
            continue;
          }
          continue;
        }
        simplified.push(curr);
      }
      simplified.push(fullPoints[fullPoints.length - 1]);
      for (let k2 = 0; k2 < simplified.length - 1; k2++) {
        const p1 = simplified[k2];
        const p22 = simplified[k2 + 1];
        const orientation = Math.abs(p1.x - p22.x) < EPS7 ? "vertical" : "horizontal";
        const coord = orientation === "vertical" ? p1.x : p1.y;
        const from2 = orientation === "vertical" ? Math.min(p1.y, p22.y) : Math.min(p1.x, p22.x);
        const to = orientation === "vertical" ? Math.max(p1.y, p22.y) : Math.max(p1.x, p22.x);
        const pipe = getOrAddPipe(orientation, coord, from2, to);
        const rSeg = {
          edgeIndex: i2,
          segmentIndex: k2,
          orientation,
          pipe,
          trackIndex: 0,
          // Initial track
          from: from2,
          to
        };
        allRoutedSegments.push(rSeg);
        edgeSegmentIndices[i2].push(allRoutedSegments.length - 1);
        if (!pipe.tracks[0]) {
          pipe.tracks[0] = { index: 0, coord: pipe.coord, segments: [] };
        }
        pipe.tracks[0].segments.push({
          edgeIndex: i2,
          segmentIndex: k2,
          from: from2,
          to
        });
      }
    }
    const segmentsOverlap = /* @__PURE__ */ __name((s1, s2) => {
      return s1.from < s2.to && s2.from < s1.to;
    }, "segmentsOverlap");
    const trySwapSegmentsAcrossTracks = /* @__PURE__ */ __name((s1, s2, t13, t22) => {
      const canS1GoT2 = !t22.segments.some(
        (r2) => (r2.edgeIndex !== s2.edgeIndex || r2.segmentIndex !== s2.segmentIndex) && segmentsOverlap(r2, s1)
      );
      const canS2GoT1 = !t13.segments.some(
        (r2) => (r2.edgeIndex !== s1.edgeIndex || r2.segmentIndex !== s1.segmentIndex) && segmentsOverlap(r2, s2)
      );
      if (canS1GoT2 && canS2GoT1) {
        s1.trackIndex = t22.index;
        s2.trackIndex = t13.index;
        t13.segments = [
          ...t13.segments.filter(
            (r2) => r2.edgeIndex !== s1.edgeIndex || r2.segmentIndex !== s1.segmentIndex
          ),
          {
            edgeIndex: s2.edgeIndex,
            segmentIndex: s2.segmentIndex,
            from: s2.from,
            to: s2.to
          }
        ];
        t22.segments = [
          ...t22.segments.filter(
            (r2) => r2.edgeIndex !== s2.edgeIndex || r2.segmentIndex !== s2.segmentIndex
          ),
          {
            edgeIndex: s1.edgeIndex,
            segmentIndex: s1.segmentIndex,
            from: s1.from,
            to: s1.to
          }
        ];
        return true;
      }
      return false;
    }, "trySwapSegmentsAcrossTracks");
    const createNewTrack = /* @__PURE__ */ __name((pipe) => {
      const idx = pipe.tracks.length;
      pipe.tracks[idx] = { index: idx, coord: pipe.coord, segments: [] };
      return idx;
    }, "createNewTrack");
    const moveSegmentToTrack = /* @__PURE__ */ __name((seg, trackIdx) => {
      const oldTrack = seg.pipe.tracks[seg.trackIndex];
      oldTrack.segments = oldTrack.segments.filter(
        (r2) => r2.edgeIndex !== seg.edgeIndex || r2.segmentIndex !== seg.segmentIndex
      );
      seg.trackIndex = trackIdx;
      const newTrack = seg.pipe.tracks[trackIdx];
      newTrack.segments.push({
        edgeIndex: seg.edgeIndex,
        segmentIndex: seg.segmentIndex,
        from: seg.from,
        to: seg.to
      });
    }, "moveSegmentToTrack");
    const moveSegmentChainToTrack = /* @__PURE__ */ __name((seg, trackIdx) => {
      const indices = edgeSegmentIndices[seg.edgeIndex];
      for (const idx of indices) {
        const s2 = allRoutedSegments[idx];
        if (s2.pipe === seg.pipe) {
          moveSegmentToTrack(s2, trackIdx);
        }
      }
    }, "moveSegmentChainToTrack");
    const getAdjacentSegmentsAlongEdge = /* @__PURE__ */ __name((seg) => {
      const indices = edgeSegmentIndices[seg.edgeIndex];
      const idxInList = indices.indexOf(allRoutedSegments.indexOf(seg));
      const adj = [];
      if (idxInList > 0) {
        adj.push(allRoutedSegments[indices[idxInList - 1]]);
      }
      if (idxInList < indices.length - 1) {
        adj.push(allRoutedSegments[indices[idxInList + 1]]);
      }
      return adj;
    }, "getAdjacentSegmentsAlongEdge");
    const haveAnyCrossing = /* @__PURE__ */ __name((segA, segB) => {
      if (segA.orientation === segB.orientation) {
        return false;
      }
      const h3 = segA.orientation === "horizontal" ? segA : segB;
      const v3 = segA.orientation === "horizontal" ? segB : segA;
      return v3.pipe.coord > h3.from && v3.pipe.coord < h3.to && h3.pipe.coord > v3.from && h3.pipe.coord < v3.to;
    }, "haveAnyCrossing");
    const findAvailableTrack = /* @__PURE__ */ __name((pipe, seg) => {
      for (const track of pipe.tracks) {
        const overlap = track.segments.some(
          (r2) => (r2.edgeIndex !== seg.edgeIndex || r2.segmentIndex !== seg.segmentIndex) && segmentsOverlap(r2, seg)
        );
        if (!overlap) {
          return track.index;
        }
      }
      return -1;
    }, "findAvailableTrack");
    const segmentsConflict = /* @__PURE__ */ __name((s1, s2) => {
      if (s1.trackIndex === s2.trackIndex) {
        return segmentsOverlap(s1, s2);
      }
      const adj1 = getAdjacentSegmentsAlongEdge(s1);
      const adj2 = getAdjacentSegmentsAlongEdge(s2);
      return adj1.some((a1) => adj2.some((a2) => haveAnyCrossing(a1, a2)));
    }, "segmentsConflict");
    const resolveTrackConflict = /* @__PURE__ */ __name((s1, s2, move) => {
      if (trySwapSegmentsAcrossTracks(
        s1,
        s2,
        s1.pipe.tracks[s1.trackIndex],
        s2.pipe.tracks[s2.trackIndex]
      )) {
        return;
      }
      const avail = findAvailableTrack(s1.pipe, s2);
      move(s2, avail !== -1 ? avail : createNewTrack(s1.pipe));
    }, "resolveTrackConflict");
    const resolveHandleConflicts = /* @__PURE__ */ __name((handles) => {
      let crossings = 0;
      for (let i2 = 0; i2 < handles.length; i2++) {
        for (let j3 = i2 + 1; j3 < handles.length; j3++) {
          const h1 = handles[i2];
          const h22 = handles[j3];
          if (h1.pipe !== h22.pipe) {
            continue;
          }
          if (segmentsConflict(h1, h22)) {
            crossings++;
            resolveTrackConflict(h1, h22, moveSegmentChainToTrack);
          }
        }
      }
      return crossings;
    }, "resolveHandleConflicts");
    const destInfoCache = /* @__PURE__ */ new Map();
    const getDestInfo = /* @__PURE__ */ __name((edgeIdx) => {
      if (destInfoCache.has(edgeIdx)) {
        return destInfoCache.get(edgeIdx);
      }
      const indices = edgeSegmentIndices[edgeIdx];
      if (indices.length === 0) {
        const info3 = { dest: 0, deviation: 0, base: 0, delta: 0 };
        destInfoCache.set(edgeIdx, info3);
        return info3;
      }
      const firstSeg = allRoutedSegments[indices[0]];
      const base = firstSeg.pipe.coord;
      let dest = base;
      for (let idx = 1; idx < indices.length; idx++) {
        const seg = allRoutedSegments[indices[idx]];
        if (seg.orientation === "horizontal") {
          const candidateA = seg.from;
          const candidateB = seg.to;
          dest = Math.abs(candidateA - base) > Math.abs(candidateB - base) ? candidateA : candidateB;
          break;
        }
      }
      const deviation = Math.abs(dest - base);
      const info2 = { dest, deviation, base, delta: dest - base };
      destInfoCache.set(edgeIdx, info2);
      return info2;
    }, "getDestInfo");
    const fixSourceHandleCrossings = /* @__PURE__ */ __name(() => {
      let crossings = 0;
      const edgesBySource = /* @__PURE__ */ new Map();
      for (const [i2, e3] of edges3.entries()) {
        if (edgeSegmentIndices[i2].length === 0) {
          continue;
        }
        if (!e3.start) {
          continue;
        }
        if (!edgesBySource.has(e3.start)) {
          edgesBySource.set(e3.start, []);
        }
        edgesBySource.get(e3.start).push(i2);
      }
      const getEdgeDistance = /* @__PURE__ */ __name((edgeIdx) => {
        const edge = edges3[edgeIdx];
        if (!edge.start || !edge.end) {
          return 0;
        }
        const srcNode = nodeById.get(edge.start);
        const dstNode = nodeById.get(edge.end);
        if (!srcNode || !dstNode) {
          return 0;
        }
        const dx = (dstNode.x ?? 0) - (srcNode.x ?? 0);
        const dy = (dstNode.y ?? 0) - (srcNode.y ?? 0);
        return Math.abs(dx) + Math.abs(dy);
      }, "getEdgeDistance");
      for (const grp of edgesBySource.values()) {
        grp.sort((a2, b3) => {
          const infoA = getDestInfo(a2);
          const infoB = getDestInfo(b3);
          if (Math.abs(infoA.deviation - infoB.deviation) > 1) {
            return infoA.deviation - infoB.deviation;
          }
          if (Math.abs(infoA.dest - infoB.dest) > 1) {
            return infoA.dest - infoB.dest;
          }
          const distA = getEdgeDistance(a2);
          const distB = getEdgeDistance(b3);
          if (Math.abs(distA - distB) > 1) {
            return distB - distA;
          }
          const lenA = edgeSegmentIndices[a2].length;
          const lenB = edgeSegmentIndices[b3].length;
          if (lenA !== lenB) {
            return lenA - lenB;
          }
          if (lenA === 1) {
            const idxA = edgeSegmentIndices[a2][0];
            const idxB = edgeSegmentIndices[b3][0];
            if (allRoutedSegments[idxA] && allRoutedSegments[idxB]) {
              const segA = allRoutedSegments[idxA];
              const segB = allRoutedSegments[idxB];
              const distA2 = Math.abs(segA.to - segA.from);
              const distB2 = Math.abs(segB.to - segB.from);
              if (Math.abs(distA2 - distB2) > 1) {
                return distA2 - distB2;
              }
            }
          }
          return 0;
        });
        const handles = grp.map((ei) => allRoutedSegments[edgeSegmentIndices[ei][0]]);
        crossings += resolveHandleConflicts(handles);
      }
      return crossings;
    }, "fixSourceHandleCrossings");
    const fixTargetHandleCrossings = /* @__PURE__ */ __name(() => {
      let crossings = 0;
      const edgesByTarget = /* @__PURE__ */ new Map();
      for (const [i2, e3] of edges3.entries()) {
        const indices = edgeSegmentIndices[i2];
        if (indices.length === 0) {
          continue;
        }
        if (!e3.end) {
          continue;
        }
        if (!edgesByTarget.has(e3.end)) {
          edgesByTarget.set(e3.end, []);
        }
        edgesByTarget.get(e3.end).push(i2);
      }
      for (const grp of edgesByTarget.values()) {
        grp.sort((a2, b3) => {
          const getDist3 = /* @__PURE__ */ __name((edgeIdx) => {
            const indices = edgeSegmentIndices[edgeIdx];
            if (indices.length < 2) {
              return 0;
            }
            const prev2 = allRoutedSegments[indices[indices.length - 2]];
            return Math.abs(prev2.to - prev2.from);
          }, "getDist");
          const scoreA = getDist3(a2);
          const scoreB = getDist3(b3);
          if (Math.abs(scoreA - scoreB) > 0.1) {
            return scoreA - scoreB;
          }
          return a2 - b3;
        });
        const handles = grp.map(
          (ei) => allRoutedSegments[edgeSegmentIndices[ei][edgeSegmentIndices[ei].length - 1]]
        );
        crossings += resolveHandleConflicts(handles);
      }
      return crossings;
    }, "fixTargetHandleCrossings");
    const fixPipeCrossings = /* @__PURE__ */ __name(() => {
      let crossings = 0;
      for (const pipe of pipes) {
        const pipeSegments = [];
        for (const t4 of pipe.tracks) {
          for (const ref of t4.segments) {
            const idx = edgeSegmentIndices[ref.edgeIndex].find(
              (ix) => allRoutedSegments[ix].segmentIndex === ref.segmentIndex
            );
            if (idx !== void 0) {
              pipeSegments.push(allRoutedSegments[idx]);
            }
          }
        }
        pipeSegments.sort((a2, b3) => a2.edgeIndex - b3.edgeIndex || a2.segmentIndex - b3.segmentIndex);
        for (let i2 = 0; i2 < pipeSegments.length; i2++) {
          for (let j3 = i2 + 1; j3 < pipeSegments.length; j3++) {
            const s1 = pipeSegments[i2];
            const s2 = pipeSegments[j3];
            if (segmentsConflict(s1, s2)) {
              crossings++;
              resolveTrackConflict(s1, s2, moveSegmentToTrack);
            }
          }
        }
      }
      return crossings;
    }, "fixPipeCrossings");
    let iterations = 0;
    const MAX_ITER = 10;
    while (iterations < MAX_ITER) {
      let changed = 0;
      changed += fixSourceHandleCrossings();
      changed += fixTargetHandleCrossings();
      changed += fixPipeCrossings();
      if (changed === 0) {
        break;
      }
      iterations++;
    }
    const segmentCoords = /* @__PURE__ */ new Map();
    for (const pipe of pipes) {
      const segments = [];
      pipe.tracks.forEach((t4) => {
        t4.segments.forEach((s2) => {
          segments.push({
            edgeIndex: s2.edgeIndex,
            segmentIndex: s2.segmentIndex,
            trackIndex: t4.index,
            from: s2.from,
            to: s2.to
          });
        });
      });
      segments.sort((a2, b3) => a2.from - b3.from);
      const clusters = [];
      if (segments.length > 0) {
        let currentCluster = [segments[0]];
        let clusterEnd = segments[0].to;
        for (let k2 = 1; k2 < segments.length; k2++) {
          const s2 = segments[k2];
          if (s2.from < clusterEnd) {
            currentCluster.push(s2);
            clusterEnd = Math.max(clusterEnd, s2.to);
          } else {
            clusters.push(currentCluster);
            currentCluster = [s2];
            clusterEnd = s2.to;
          }
        }
        clusters.push(currentCluster);
      }
      for (const cluster of clusters) {
        const usedTracks = /* @__PURE__ */ new Set();
        cluster.forEach((s2) => usedTracks.add(s2.trackIndex));
        const trackScores = /* @__PURE__ */ new Map();
        cluster.forEach((s2) => {
          const info2 = getDestInfo(s2.edgeIndex);
          trackScores.set(s2.trackIndex, (trackScores.get(s2.trackIndex) ?? 0) + info2.delta);
        });
        const leftTracks = [...usedTracks].filter((t4) => (trackScores.get(t4) ?? 0) < -1);
        const rightTracks = [...usedTracks].filter((t4) => (trackScores.get(t4) ?? 0) > 1);
        const neutralTracks = [...usedTracks].filter((t4) => Math.abs(trackScores.get(t4) ?? 0) <= 1);
        leftTracks.sort((a2, b3) => (trackScores.get(b3) ?? 0) - (trackScores.get(a2) ?? 0));
        rightTracks.sort((a2, b3) => (trackScores.get(a2) ?? 0) - (trackScores.get(b3) ?? 0));
        const assignCoord = /* @__PURE__ */ __name((trackIndex, coord) => {
          cluster.filter((s2) => s2.trackIndex === trackIndex).forEach((s2) => {
            const effectiveCoord = straightIntraLaneEdges.has(s2.edgeIndex) ? pipe.coord : coord;
            segmentCoords.set(`${s2.edgeIndex}-${s2.segmentIndex}`, effectiveCoord);
          });
        }, "assignCoord");
        let leftCount = 0;
        for (const trackIndex of leftTracks) {
          leftCount++;
          assignCoord(trackIndex, pipe.coord - leftCount * TRACK_SPACING);
        }
        if (neutralTracks.length === 0 && usedTracks.size > 0) {
          const bestTrack = [...usedTracks].sort(
            (a2, b3) => Math.abs(trackScores.get(a2) ?? 0) - Math.abs(trackScores.get(b3) ?? 0)
          )[0];
          const leftIdx = leftTracks.indexOf(bestTrack);
          if (leftIdx !== -1) {
            leftTracks.splice(leftIdx, 1);
          }
          const rightIdx = rightTracks.indexOf(bestTrack);
          if (rightIdx !== -1) {
            rightTracks.splice(rightIdx, 1);
          }
          neutralTracks.push(bestTrack);
        }
        let neutralAssigned = 0;
        for (const trackIndex of neutralTracks) {
          if (neutralAssigned === 0) {
            assignCoord(trackIndex, pipe.coord);
          } else {
            const dir2 = neutralAssigned % 2 === 1 ? 1 : -1;
            const magnitude = Math.ceil(neutralAssigned / 2);
            assignCoord(trackIndex, pipe.coord + dir2 * magnitude * TRACK_SPACING * 0.5);
          }
          neutralAssigned++;
        }
        let rightCount = 0;
        for (const trackIndex of rightTracks) {
          rightCount++;
          assignCoord(trackIndex, pipe.coord + rightCount * TRACK_SPACING);
        }
      }
    }
    for (const [i2, e3] of edges3.entries()) {
      const indices = edgeSegmentIndices[i2] ?? [];
      if (indices.length === 0) {
        continue;
      }
      const newPoints = [];
      const src = nodeById.get(e3.start);
      const dst = nodeById.get(e3.end);
      const { pSrcPort, pDstPort } = portsForEdge(i2, src, dst);
      const lines = indices.map((idx) => {
        const s2 = allRoutedSegments[idx];
        const coord = segmentCoords.get(`${s2.edgeIndex}-${s2.segmentIndex}`) ?? s2.pipe.coord;
        return {
          orient: s2.orientation,
          coord,
          from: s2.from,
          to: s2.to
        };
      });
      newPoints.push(pSrcPort);
      for (let k2 = 0; k2 < lines.length; k2++) {
        const line2 = lines[k2];
        const prevPt = newPoints[newPoints.length - 1];
        const prevAlong = line2.orient === "vertical" ? prevPt.y : prevPt.x;
        const prevTrackCoord = line2.orient === "vertical" ? prevPt.x : prevPt.y;
        const nextLine = lines[k2 + 1];
        const hasNextLine = k2 < lines.length - 1;
        if (Math.abs(prevTrackCoord - line2.coord) > EPS7) {
          newPoints.push(pointOnLine(line2, prevAlong));
        }
        if (hasNextLine && nextLine.orient === line2.orient) {
          if (Math.abs(line2.coord - nextLine.coord) > EPS7) {
            const junction = line2.orient === "vertical" ? (prevAlong + nextLine.from) / 2 : sharedLineEndpointCoord(line2, nextLine);
            newPoints.push(pointOnLine(line2, junction), pointOnLine(nextLine, junction));
          } else if (k2 === 0 || k2 === lines.length - 2) {
            newPoints.push(pointOnLine(line2, sharedLineEndpointCoord(line2, nextLine)));
          }
        } else if (hasNextLine) {
          newPoints.push(pointOnLine(line2, nextLine.coord));
        } else {
          const endAlong = Math.abs(line2.from - prevAlong) < Math.abs(line2.to - prevAlong) ? line2.to : line2.from;
          newPoints.push(pointOnLine(line2, endAlong));
        }
      }
      const last4 = newPoints[newPoints.length - 1];
      if (Math.abs(last4.x - pDstPort.x) > EPS7 || Math.abs(last4.y - pDstPort.y) > EPS7) {
        newPoints.push(pDstPort);
      }
      const filtered = [];
      if (newPoints.length > 0) {
        filtered.push(newPoints[0]);
      }
      for (let k2 = 1; k2 < newPoints.length; k2++) {
        const p3 = newPoints[k2];
        const prev2 = filtered[filtered.length - 1];
        if (Math.abs(p3.x - prev2.x) > EPS7 || Math.abs(p3.y - prev2.y) > EPS7) {
          filtered.push(p3);
        }
      }
      e3.points = filtered;
    }
    for (const re3 of edges3) {
      const orig = re3.__originalEdge;
      if (orig && re3.points) {
        orig.points = re3.points;
      }
    }
    data6.edges = (data6.edges ?? []).filter((e3) => !e3.isLayoutOnly);
    const nodeBoundaryClamp = /* @__PURE__ */ __name((p3, node2) => {
      const cx = node2.x ?? 0;
      const cy = node2.y ?? 0;
      const w4 = node2.width ?? 0;
      const h3 = node2.height ?? 0;
      if (w4 <= 0 || h3 <= 0) {
        return p3;
      }
      const left3 = cx - w4 / 2;
      const right3 = cx + w4 / 2;
      const top2 = cy - h3 / 2;
      const bottom2 = cy + h3 / 2;
      if (p3.x < left3 || p3.x > right3 || p3.y < top2 || p3.y > bottom2) {
        return p3;
      }
      const dLeft = p3.x - left3;
      const dRight = right3 - p3.x;
      const dTop = p3.y - top2;
      const dBottom = bottom2 - p3.y;
      const minD = Math.min(dLeft, dRight, dTop, dBottom);
      if (minD === dLeft) {
        return { x: left3, y: p3.y };
      }
      if (minD === dRight) {
        return { x: right3, y: p3.y };
      }
      if (minD === dTop) {
        return { x: p3.x, y: top2 };
      }
      return { x: p3.x, y: bottom2 };
    }, "nodeBoundaryClamp");
    for (const edge of data6.edges) {
      const pts2 = edge.points;
      if (!pts2 || pts2.length < 2) {
        continue;
      }
      const srcId = edge.start;
      const dstId = edge.end;
      const src = srcId ? nodeById.get(srcId) : void 0;
      const dst = dstId ? nodeById.get(dstId) : void 0;
      if (src) {
        pts2[0] = nodeBoundaryClamp(pts2[0], src);
      }
      if (dst) {
        pts2[pts2.length - 1] = nodeBoundaryClamp(pts2[pts2.length - 1], dst);
      }
    }
    return data6;
  }
  var EPS7, NODE_PADDING, HORIZONTAL_PIPE_MARGIN, VERTICAL_PIPE_MARGIN, ROUTING_MARGIN, ANCHOR_OFFSET, TRACK_SPACING;
  var init_router = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/orthogonalRouter/router.ts"() {
      "use strict";
      init_config2();
      EPS7 = PRECISION.EPSILON;
      NODE_PADDING = 8;
      HORIZONTAL_PIPE_MARGIN = 15;
      VERTICAL_PIPE_MARGIN = 15;
      ROUTING_MARGIN = 25;
      ANCHOR_OFFSET = 20;
      TRACK_SPACING = 10;
      __name(chooseOrthogonalSide, "chooseOrthogonalSide");
      __name(sharedLineEndpointCoord, "sharedLineEndpointCoord");
      __name(pointOnLine, "pointOnLine");
      __name(routeEdgesOrthogonal, "routeEdgesOrthogonal");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/layoutCore.ts
  function getSwimlaneDirection(data4Layout) {
    return data4Layout.direction ?? "TB";
  }
  function runSwimlaneLayoutCore(data4Layout) {
    const g2 = toGraphView(data4Layout);
    const nodeGap = data4Layout.config.flowchart?.nodeSpacing ?? 40;
    const layerGap = data4Layout.config.flowchart?.rankSpacing ?? 100;
    const ignoreCrossLaneEdges = data4Layout.config.swimlane?.ignoreCrossLaneEdges ?? true;
    const optimizeRanksByCrossings2 = data4Layout.config.swimlane?.optimizeRanksByCrossings ?? true;
    const automaticLaneOrdering = data4Layout.config.swimlane?.automaticLaneOrdering ?? false;
    const direction2 = getSwimlaneDirection(data4Layout);
    const { ordered, coordinates } = sugiyamaLayout(g2, {
      nodeGap,
      layerGap,
      ignoreCrossLaneEdges,
      optimizeRanksByCrossings: optimizeRanksByCrossings2,
      automaticLaneOrdering,
      direction: direction2
    });
    writeBackToLayoutData(g2, ordered, coordinates, { nodeGap, layerGap });
    for (const edge of data4Layout.edges ?? []) {
      delete edge.points;
    }
    routeEdgesOrthogonal(data4Layout, direction2);
    for (const edge of data4Layout.edges ?? []) {
      if (!edge.curve || edge.curve === "basis") {
        edge.curve = "rounded";
      }
    }
    postProcessSwimlaneLayout(data4Layout, direction2);
    validateSwimlanesLayout(data4Layout);
    return direction2;
  }
  var init_layoutCore = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/layoutCore.ts"() {
      "use strict";
      init_postProcessing();
      init_helpers();
      init_pipeline();
      init_router();
      __name(getSwimlaneDirection, "getSwimlaneDirection");
      __name(runSwimlaneLayoutCore, "runSwimlaneLayoutCore");
    }
  });

  // src/rendering-util/layout-algorithms/swimlanes/index.ts
  var swimlanes_exports = {};
  __export(swimlanes_exports, {
    render: () => render4
  });
  async function render4(data4Layout, svg2) {
    const element3 = svg2.select("g");
    markers_default(element3, data4Layout.markers, data4Layout.type, data4Layout.diagramId);
    clear5();
    clear4();
    clear3();
    clear6();
    prepareLayoutForSwimlanes(data4Layout);
    const transformedData = createEdgeLabelNodes(data4Layout);
    data4Layout.nodes = transformedData.nodes;
    data4Layout.edges = transformedData.edges;
    const { groups } = await createGraphWithElements(element3, data4Layout);
    runSwimlaneLayoutCore(data4Layout);
    await adjustLayout(data4Layout, groups);
  }
  var init_swimlanes = __esm({
    "src/rendering-util/layout-algorithms/swimlanes/index.ts"() {
      "use strict";
      init_createGraph();
      init_markers();
      init_mermaid_graphlib();
      init_nodes2();
      init_clusters();
      init_edges();
      init_adjustLayout();
      init_helpers();
      init_edgeLabelNodes();
      init_layoutCore();
      __name(render4, "render");
    }
  });

  // ../../node_modules/.pnpm/cytoscape@3.33.3/node_modules/cytoscape/dist/cytoscape.esm.mjs
  function _arrayLikeToArray(r2, a2) {
    (null == a2 || a2 > r2.length) && (a2 = r2.length);
    for (var e3 = 0, n2 = Array(a2); e3 < a2; e3++) n2[e3] = r2[e3];
    return n2;
  }
  function _arrayWithHoles(r2) {
    if (Array.isArray(r2)) return r2;
  }
  function _arrayWithoutHoles(r2) {
    if (Array.isArray(r2)) return _arrayLikeToArray(r2);
  }
  function _classCallCheck(a2, n2) {
    if (!(a2 instanceof n2)) throw new TypeError("Cannot call a class as a function");
  }
  function _defineProperties(e3, r2) {
    for (var t4 = 0; t4 < r2.length; t4++) {
      var o2 = r2[t4];
      o2.enumerable = o2.enumerable || false, o2.configurable = true, "value" in o2 && (o2.writable = true), Object.defineProperty(e3, _toPropertyKey(o2.key), o2);
    }
  }
  function _createClass(e3, r2, t4) {
    return r2 && _defineProperties(e3.prototype, r2), Object.defineProperty(e3, "prototype", {
      writable: false
    }), e3;
  }
  function _createForOfIteratorHelper(r2, e3) {
    var t4 = "undefined" != typeof Symbol && r2[Symbol.iterator] || r2["@@iterator"];
    if (!t4) {
      if (Array.isArray(r2) || (t4 = _unsupportedIterableToArray(r2)) || e3) {
        t4 && (r2 = t4);
        var n2 = 0, F3 = /* @__PURE__ */ __name(function() {
        }, "F");
        return {
          s: F3,
          n: /* @__PURE__ */ __name(function() {
            return n2 >= r2.length ? {
              done: true
            } : {
              done: false,
              value: r2[n2++]
            };
          }, "n"),
          e: /* @__PURE__ */ __name(function(r3) {
            throw r3;
          }, "e"),
          f: F3
        };
      }
      throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
    }
    var o2, a2 = true, u2 = false;
    return {
      s: /* @__PURE__ */ __name(function() {
        t4 = t4.call(r2);
      }, "s"),
      n: /* @__PURE__ */ __name(function() {
        var r3 = t4.next();
        return a2 = r3.done, r3;
      }, "n"),
      e: /* @__PURE__ */ __name(function(r3) {
        u2 = true, o2 = r3;
      }, "e"),
      f: /* @__PURE__ */ __name(function() {
        try {
          a2 || null == t4.return || t4.return();
        } finally {
          if (u2) throw o2;
        }
      }, "f")
    };
  }
  function _defineProperty$1(e3, r2, t4) {
    return (r2 = _toPropertyKey(r2)) in e3 ? Object.defineProperty(e3, r2, {
      value: t4,
      enumerable: true,
      configurable: true,
      writable: true
    }) : e3[r2] = t4, e3;
  }
  function _iterableToArray(r2) {
    if ("undefined" != typeof Symbol && null != r2[Symbol.iterator] || null != r2["@@iterator"]) return Array.from(r2);
  }
  function _iterableToArrayLimit(r2, l4) {
    var t4 = null == r2 ? null : "undefined" != typeof Symbol && r2[Symbol.iterator] || r2["@@iterator"];
    if (null != t4) {
      var e3, n2, i2, u2, a2 = [], f2 = true, o2 = false;
      try {
        if (i2 = (t4 = t4.call(r2)).next, 0 === l4) {
          if (Object(t4) !== t4) return;
          f2 = false;
        } else for (; !(f2 = (e3 = i2.call(t4)).done) && (a2.push(e3.value), a2.length !== l4); f2 = true) ;
      } catch (r3) {
        o2 = true, n2 = r3;
      } finally {
        try {
          if (!f2 && null != t4.return && (u2 = t4.return(), Object(u2) !== u2)) return;
        } finally {
          if (o2) throw n2;
        }
      }
      return a2;
    }
  }
  function _nonIterableRest() {
    throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }
  function _nonIterableSpread() {
    throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }
  function _slicedToArray(r2, e3) {
    return _arrayWithHoles(r2) || _iterableToArrayLimit(r2, e3) || _unsupportedIterableToArray(r2, e3) || _nonIterableRest();
  }
  function _toConsumableArray(r2) {
    return _arrayWithoutHoles(r2) || _iterableToArray(r2) || _unsupportedIterableToArray(r2) || _nonIterableSpread();
  }
  function _toPrimitive(t4, r2) {
    if ("object" != typeof t4 || !t4) return t4;
    var e3 = t4[Symbol.toPrimitive];
    if (void 0 !== e3) {
      var i2 = e3.call(t4, r2);
      if ("object" != typeof i2) return i2;
      throw new TypeError("@@toPrimitive must return a primitive value.");
    }
    return String(t4);
  }
  function _toPropertyKey(t4) {
    var i2 = _toPrimitive(t4, "string");
    return "symbol" == typeof i2 ? i2 : i2 + "";
  }
  function _typeof(o2) {
    "@babel/helpers - typeof";
    return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o3) {
      return typeof o3;
    } : function(o3) {
      return o3 && "function" == typeof Symbol && o3.constructor === Symbol && o3 !== Symbol.prototype ? "symbol" : typeof o3;
    }, _typeof(o2);
  }
  function _unsupportedIterableToArray(r2, a2) {
    if (r2) {
      if ("string" == typeof r2) return _arrayLikeToArray(r2, a2);
      var t4 = {}.toString.call(r2).slice(8, -1);
      return "Object" === t4 && r2.constructor && (t4 = r2.constructor.name), "Map" === t4 || "Set" === t4 ? Array.from(r2) : "Arguments" === t4 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t4) ? _arrayLikeToArray(r2, a2) : void 0;
    }
  }
  function getDefaultExportFromCjs(x5) {
    return x5 && x5.__esModule && Object.prototype.hasOwnProperty.call(x5, "default") ? x5["default"] : x5;
  }
  function requireIsObject() {
    if (hasRequiredIsObject) return isObject_12;
    hasRequiredIsObject = 1;
    function isObject4(value2) {
      var type3 = typeof value2;
      return value2 != null && (type3 == "object" || type3 == "function");
    }
    __name(isObject4, "isObject");
    isObject_12 = isObject4;
    return isObject_12;
  }
  function require_freeGlobal() {
    if (hasRequired_freeGlobal) return _freeGlobal;
    hasRequired_freeGlobal = 1;
    var freeGlobal3 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
    _freeGlobal = freeGlobal3;
    return _freeGlobal;
  }
  function require_root() {
    if (hasRequired_root) return _root;
    hasRequired_root = 1;
    var freeGlobal3 = require_freeGlobal();
    var freeSelf3 = typeof self == "object" && self && self.Object === Object && self;
    var root4 = freeGlobal3 || freeSelf3 || Function("return this")();
    _root = root4;
    return _root;
  }
  function requireNow() {
    if (hasRequiredNow) return now_1;
    hasRequiredNow = 1;
    var root4 = require_root();
    var now3 = /* @__PURE__ */ __name(function() {
      return root4.Date.now();
    }, "now");
    now_1 = now3;
    return now_1;
  }
  function require_trimmedEndIndex() {
    if (hasRequired_trimmedEndIndex) return _trimmedEndIndex;
    hasRequired_trimmedEndIndex = 1;
    var reWhitespace3 = /\s/;
    function trimmedEndIndex3(string3) {
      var index = string3.length;
      while (index-- && reWhitespace3.test(string3.charAt(index))) {
      }
      return index;
    }
    __name(trimmedEndIndex3, "trimmedEndIndex");
    _trimmedEndIndex = trimmedEndIndex3;
    return _trimmedEndIndex;
  }
  function require_baseTrim() {
    if (hasRequired_baseTrim) return _baseTrim;
    hasRequired_baseTrim = 1;
    var trimmedEndIndex3 = require_trimmedEndIndex();
    var reTrimStart3 = /^\s+/;
    function baseTrim3(string3) {
      return string3 ? string3.slice(0, trimmedEndIndex3(string3) + 1).replace(reTrimStart3, "") : string3;
    }
    __name(baseTrim3, "baseTrim");
    _baseTrim = baseTrim3;
    return _baseTrim;
  }
  function require_Symbol() {
    if (hasRequired_Symbol) return _Symbol;
    hasRequired_Symbol = 1;
    var root4 = require_root();
    var Symbol4 = root4.Symbol;
    _Symbol = Symbol4;
    return _Symbol;
  }
  function require_getRawTag() {
    if (hasRequired_getRawTag) return _getRawTag;
    hasRequired_getRawTag = 1;
    var Symbol4 = require_Symbol();
    var objectProto34 = Object.prototype;
    var hasOwnProperty28 = objectProto34.hasOwnProperty;
    var nativeObjectToString5 = objectProto34.toString;
    var symToStringTag5 = Symbol4 ? Symbol4.toStringTag : void 0;
    function getRawTag3(value2) {
      var isOwn = hasOwnProperty28.call(value2, symToStringTag5), tag = value2[symToStringTag5];
      try {
        value2[symToStringTag5] = void 0;
        var unmasked = true;
      } catch (e3) {
      }
      var result = nativeObjectToString5.call(value2);
      if (unmasked) {
        if (isOwn) {
          value2[symToStringTag5] = tag;
        } else {
          delete value2[symToStringTag5];
        }
      }
      return result;
    }
    __name(getRawTag3, "getRawTag");
    _getRawTag = getRawTag3;
    return _getRawTag;
  }
  function require_objectToString() {
    if (hasRequired_objectToString) return _objectToString;
    hasRequired_objectToString = 1;
    var objectProto34 = Object.prototype;
    var nativeObjectToString5 = objectProto34.toString;
    function objectToString3(value2) {
      return nativeObjectToString5.call(value2);
    }
    __name(objectToString3, "objectToString");
    _objectToString = objectToString3;
    return _objectToString;
  }
  function require_baseGetTag() {
    if (hasRequired_baseGetTag) return _baseGetTag;
    hasRequired_baseGetTag = 1;
    var Symbol4 = require_Symbol(), getRawTag3 = require_getRawTag(), objectToString3 = require_objectToString();
    var nullTag3 = "[object Null]", undefinedTag3 = "[object Undefined]";
    var symToStringTag5 = Symbol4 ? Symbol4.toStringTag : void 0;
    function baseGetTag3(value2) {
      if (value2 == null) {
        return value2 === void 0 ? undefinedTag3 : nullTag3;
      }
      return symToStringTag5 && symToStringTag5 in Object(value2) ? getRawTag3(value2) : objectToString3(value2);
    }
    __name(baseGetTag3, "baseGetTag");
    _baseGetTag = baseGetTag3;
    return _baseGetTag;
  }
  function requireIsObjectLike() {
    if (hasRequiredIsObjectLike) return isObjectLike_1;
    hasRequiredIsObjectLike = 1;
    function isObjectLike4(value2) {
      return value2 != null && typeof value2 == "object";
    }
    __name(isObjectLike4, "isObjectLike");
    isObjectLike_1 = isObjectLike4;
    return isObjectLike_1;
  }
  function requireIsSymbol() {
    if (hasRequiredIsSymbol) return isSymbol_1;
    hasRequiredIsSymbol = 1;
    var baseGetTag3 = require_baseGetTag(), isObjectLike4 = requireIsObjectLike();
    var symbolTag7 = "[object Symbol]";
    function isSymbol3(value2) {
      return typeof value2 == "symbol" || isObjectLike4(value2) && baseGetTag3(value2) == symbolTag7;
    }
    __name(isSymbol3, "isSymbol");
    isSymbol_1 = isSymbol3;
    return isSymbol_1;
  }
  function requireToNumber() {
    if (hasRequiredToNumber) return toNumber_1;
    hasRequiredToNumber = 1;
    var baseTrim3 = require_baseTrim(), isObject4 = requireIsObject(), isSymbol3 = requireIsSymbol();
    var NAN3 = 0 / 0;
    var reIsBadHex3 = /^[-+]0x[0-9a-f]+$/i;
    var reIsBinary3 = /^0b[01]+$/i;
    var reIsOctal3 = /^0o[0-7]+$/i;
    var freeParseInt3 = parseInt;
    function toNumber3(value2) {
      if (typeof value2 == "number") {
        return value2;
      }
      if (isSymbol3(value2)) {
        return NAN3;
      }
      if (isObject4(value2)) {
        var other = typeof value2.valueOf == "function" ? value2.valueOf() : value2;
        value2 = isObject4(other) ? other + "" : other;
      }
      if (typeof value2 != "string") {
        return value2 === 0 ? value2 : +value2;
      }
      value2 = baseTrim3(value2);
      var isBinary2 = reIsBinary3.test(value2);
      return isBinary2 || reIsOctal3.test(value2) ? freeParseInt3(value2.slice(2), isBinary2 ? 2 : 8) : reIsBadHex3.test(value2) ? NAN3 : +value2;
    }
    __name(toNumber3, "toNumber");
    toNumber_1 = toNumber3;
    return toNumber_1;
  }
  function requireDebounce() {
    if (hasRequiredDebounce) return debounce_1;
    hasRequiredDebounce = 1;
    var isObject4 = requireIsObject(), now3 = requireNow(), toNumber3 = requireToNumber();
    var FUNC_ERROR_TEXT4 = "Expected a function";
    var nativeMax5 = Math.max, nativeMin = Math.min;
    function debounce2(func, wait, options2) {
      var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
      if (typeof func != "function") {
        throw new TypeError(FUNC_ERROR_TEXT4);
      }
      wait = toNumber3(wait) || 0;
      if (isObject4(options2)) {
        leading = !!options2.leading;
        maxing = "maxWait" in options2;
        maxWait = maxing ? nativeMax5(toNumber3(options2.maxWait) || 0, wait) : maxWait;
        trailing = "trailing" in options2 ? !!options2.trailing : trailing;
      }
      function invokeFunc(time4) {
        var args = lastArgs, thisArg = lastThis;
        lastArgs = lastThis = void 0;
        lastInvokeTime = time4;
        result = func.apply(thisArg, args);
        return result;
      }
      __name(invokeFunc, "invokeFunc");
      function leadingEdge(time4) {
        lastInvokeTime = time4;
        timerId = setTimeout(timerExpired, wait);
        return leading ? invokeFunc(time4) : result;
      }
      __name(leadingEdge, "leadingEdge");
      function remainingWait(time4) {
        var timeSinceLastCall = time4 - lastCallTime, timeSinceLastInvoke = time4 - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
        return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
      }
      __name(remainingWait, "remainingWait");
      function shouldInvoke(time4) {
        var timeSinceLastCall = time4 - lastCallTime, timeSinceLastInvoke = time4 - lastInvokeTime;
        return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
      }
      __name(shouldInvoke, "shouldInvoke");
      function timerExpired() {
        var time4 = now3();
        if (shouldInvoke(time4)) {
          return trailingEdge(time4);
        }
        timerId = setTimeout(timerExpired, remainingWait(time4));
      }
      __name(timerExpired, "timerExpired");
      function trailingEdge(time4) {
        timerId = void 0;
        if (trailing && lastArgs) {
          return invokeFunc(time4);
        }
        lastArgs = lastThis = void 0;
        return result;
      }
      __name(trailingEdge, "trailingEdge");
      function cancel() {
        if (timerId !== void 0) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = void 0;
      }
      __name(cancel, "cancel");
      function flush() {
        return timerId === void 0 ? result : trailingEdge(now3());
      }
      __name(flush, "flush");
      function debounced() {
        var time4 = now3(), isInvoking = shouldInvoke(time4);
        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time4;
        if (isInvoking) {
          if (timerId === void 0) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            clearTimeout(timerId);
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === void 0) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      __name(debounced, "debounced");
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }
    __name(debounce2, "debounce");
    debounce_1 = debounce2;
    return debounce_1;
  }
  function rotatePoint(x5, y6, centerX, centerY, angleDegrees) {
    var angleRadians = angleDegrees * Math.PI / 180;
    var rotatedX = Math.cos(angleRadians) * (x5 - centerX) - Math.sin(angleRadians) * (y6 - centerY) + centerX;
    var rotatedY = Math.sin(angleRadians) * (x5 - centerX) + Math.cos(angleRadians) * (y6 - centerY) + centerY;
    return {
      x: rotatedX,
      y: rotatedY
    };
  }
  function rotatePosAndSkewByBox(pos, box, angleDegrees) {
    if (angleDegrees === 0) return pos;
    var centerX = (box.x1 + box.x2) / 2;
    var centerY = (box.y1 + box.y2) / 2;
    var skewX = box.w / box.h;
    var skewY = 1 / skewX;
    var rotated = rotatePoint(pos.x, pos.y, centerX, centerY, angleDegrees);
    var skewed = movePointByBoxAspect(rotated.x, rotated.y, centerX, centerY, skewX, skewY);
    return {
      x: skewed.x,
      y: skewed.y
    };
  }
  function requireHeap$1() {
    if (hasRequiredHeap$1) return heap$2.exports;
    hasRequiredHeap$1 = 1;
    (function(module2, exports2) {
      (function() {
        var Heap2, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min10, nlargest, nsmallest, updateItem, _siftdown, _siftup;
        floor = Math.floor, min10 = Math.min;
        defaultCmp = /* @__PURE__ */ __name(function(x5, y6) {
          if (x5 < y6) {
            return -1;
          }
          if (x5 > y6) {
            return 1;
          }
          return 0;
        }, "defaultCmp");
        insort = /* @__PURE__ */ __name(function(a2, x5, lo, hi, cmp) {
          var mid;
          if (lo == null) {
            lo = 0;
          }
          if (cmp == null) {
            cmp = defaultCmp;
          }
          if (lo < 0) {
            throw new Error("lo must be non-negative");
          }
          if (hi == null) {
            hi = a2.length;
          }
          while (lo < hi) {
            mid = floor((lo + hi) / 2);
            if (cmp(x5, a2[mid]) < 0) {
              hi = mid;
            } else {
              lo = mid + 1;
            }
          }
          return [].splice.apply(a2, [lo, lo - lo].concat(x5)), x5;
        }, "insort");
        heappush = /* @__PURE__ */ __name(function(array4, item, cmp) {
          if (cmp == null) {
            cmp = defaultCmp;
          }
          array4.push(item);
          return _siftdown(array4, 0, array4.length - 1, cmp);
        }, "heappush");
        heappop = /* @__PURE__ */ __name(function(array4, cmp) {
          var lastelt, returnitem;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          lastelt = array4.pop();
          if (array4.length) {
            returnitem = array4[0];
            array4[0] = lastelt;
            _siftup(array4, 0, cmp);
          } else {
            returnitem = lastelt;
          }
          return returnitem;
        }, "heappop");
        heapreplace = /* @__PURE__ */ __name(function(array4, item, cmp) {
          var returnitem;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          returnitem = array4[0];
          array4[0] = item;
          _siftup(array4, 0, cmp);
          return returnitem;
        }, "heapreplace");
        heappushpop = /* @__PURE__ */ __name(function(array4, item, cmp) {
          var _ref;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          if (array4.length && cmp(array4[0], item) < 0) {
            _ref = [array4[0], item], item = _ref[0], array4[0] = _ref[1];
            _siftup(array4, 0, cmp);
          }
          return item;
        }, "heappushpop");
        heapify = /* @__PURE__ */ __name(function(array4, cmp) {
          var i2, _i, _len, _ref1, _results, _results1;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          _ref1 = (function() {
            _results1 = [];
            for (var _j = 0, _ref = floor(array4.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--) {
              _results1.push(_j);
            }
            return _results1;
          }).apply(this).reverse();
          _results = [];
          for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
            i2 = _ref1[_i];
            _results.push(_siftup(array4, i2, cmp));
          }
          return _results;
        }, "heapify");
        updateItem = /* @__PURE__ */ __name(function(array4, item, cmp) {
          var pos;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          pos = array4.indexOf(item);
          if (pos === -1) {
            return;
          }
          _siftdown(array4, 0, pos, cmp);
          return _siftup(array4, pos, cmp);
        }, "updateItem");
        nlargest = /* @__PURE__ */ __name(function(array4, n2, cmp) {
          var elem, result, _i, _len, _ref;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          result = array4.slice(0, n2);
          if (!result.length) {
            return result;
          }
          heapify(result, cmp);
          _ref = array4.slice(n2);
          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
            elem = _ref[_i];
            heappushpop(result, elem, cmp);
          }
          return result.sort(cmp).reverse();
        }, "nlargest");
        nsmallest = /* @__PURE__ */ __name(function(array4, n2, cmp) {
          var elem, los, result, _i, _j, _len, _ref, _ref1, _results;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          if (n2 * 10 <= array4.length) {
            result = array4.slice(0, n2).sort(cmp);
            if (!result.length) {
              return result;
            }
            los = result[result.length - 1];
            _ref = array4.slice(n2);
            for (_i = 0, _len = _ref.length; _i < _len; _i++) {
              elem = _ref[_i];
              if (cmp(elem, los) < 0) {
                insort(result, elem, 0, null, cmp);
                result.pop();
                los = result[result.length - 1];
              }
            }
            return result;
          }
          heapify(array4, cmp);
          _results = [];
          for (_j = 0, _ref1 = min10(n2, array4.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) {
            _results.push(heappop(array4, cmp));
          }
          return _results;
        }, "nsmallest");
        _siftdown = /* @__PURE__ */ __name(function(array4, startpos, pos, cmp) {
          var newitem, parent4, parentpos;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          newitem = array4[pos];
          while (pos > startpos) {
            parentpos = pos - 1 >> 1;
            parent4 = array4[parentpos];
            if (cmp(newitem, parent4) < 0) {
              array4[pos] = parent4;
              pos = parentpos;
              continue;
            }
            break;
          }
          return array4[pos] = newitem;
        }, "_siftdown");
        _siftup = /* @__PURE__ */ __name(function(array4, pos, cmp) {
          var childpos, endpos, newitem, rightpos, startpos;
          if (cmp == null) {
            cmp = defaultCmp;
          }
          endpos = array4.length;
          startpos = pos;
          newitem = array4[pos];
          childpos = 2 * pos + 1;
          while (childpos < endpos) {
            rightpos = childpos + 1;
            if (rightpos < endpos && !(cmp(array4[childpos], array4[rightpos]) < 0)) {
              childpos = rightpos;
            }
            array4[pos] = array4[childpos];
            pos = childpos;
            childpos = 2 * pos + 1;
          }
          array4[pos] = newitem;
          return _siftdown(array4, startpos, pos, cmp);
        }, "_siftup");
        Heap2 = (function() {
          Heap3.push = heappush;
          Heap3.pop = heappop;
          Heap3.replace = heapreplace;
          Heap3.pushpop = heappushpop;
          Heap3.heapify = heapify;
          Heap3.updateItem = updateItem;
          Heap3.nlargest = nlargest;
          Heap3.nsmallest = nsmallest;
          function Heap3(cmp) {
            this.cmp = cmp != null ? cmp : defaultCmp;
            this.nodes = [];
          }
          __name(Heap3, "Heap");
          Heap3.prototype.push = function(x5) {
            return heappush(this.nodes, x5, this.cmp);
          };
          Heap3.prototype.pop = function() {
            return heappop(this.nodes, this.cmp);
          };
          Heap3.prototype.peek = function() {
            return this.nodes[0];
          };
          Heap3.prototype.contains = function(x5) {
            return this.nodes.indexOf(x5) !== -1;
          };
          Heap3.prototype.replace = function(x5) {
            return heapreplace(this.nodes, x5, this.cmp);
          };
          Heap3.prototype.pushpop = function(x5) {
            return heappushpop(this.nodes, x5, this.cmp);
          };
          Heap3.prototype.heapify = function() {
            return heapify(this.nodes, this.cmp);
          };
          Heap3.prototype.updateItem = function(x5) {
            return updateItem(this.nodes, x5, this.cmp);
          };
          Heap3.prototype.clear = function() {
            return this.nodes = [];
          };
          Heap3.prototype.empty = function() {
            return this.nodes.length === 0;
          };
          Heap3.prototype.size = function() {
            return this.nodes.length;
          };
          Heap3.prototype.clone = function() {
            var heap2;
            heap2 = new Heap3();
            heap2.nodes = this.nodes.slice(0);
            return heap2;
          };
          Heap3.prototype.toArray = function() {
            return this.nodes.slice(0);
          };
          Heap3.prototype.insert = Heap3.prototype.push;
          Heap3.prototype.top = Heap3.prototype.peek;
          Heap3.prototype.front = Heap3.prototype.peek;
          Heap3.prototype.has = Heap3.prototype.contains;
          Heap3.prototype.copy = Heap3.prototype.clone;
          return Heap3;
        })();
        (function(root4, factory) {
          {
            return module2.exports = factory();
          }
        })(this, function() {
          return Heap2;
        });
      }).call(heap$1);
    })(heap$2);
    return heap$2.exports;
  }
  function requireHeap() {
    if (hasRequiredHeap) return heap;
    hasRequiredHeap = 1;
    heap = requireHeap$1();
    return heap;
  }
  function inflatePolygon(polygon2, d3) {
    if (polygon2.length < 3) {
      throw new Error("Need at least 3 vertices");
    }
    var add3 = /* @__PURE__ */ __name(function add4(a2, b3) {
      return {
        x: a2.x + b3.x,
        y: a2.y + b3.y
      };
    }, "add");
    var sub2 = /* @__PURE__ */ __name(function sub3(a2, b3) {
      return {
        x: a2.x - b3.x,
        y: a2.y - b3.y
      };
    }, "sub");
    var scale3 = /* @__PURE__ */ __name(function scale4(v3, s2) {
      return {
        x: v3.x * s2,
        y: v3.y * s2
      };
    }, "scale");
    var cross3 = /* @__PURE__ */ __name(function cross4(u2, v3) {
      return u2.x * v3.y - u2.y * v3.x;
    }, "cross");
    var normalize4 = /* @__PURE__ */ __name(function normalize5(v3) {
      var len = hypot(v3.x, v3.y);
      return len === 0 ? {
        x: 0,
        y: 0
      } : {
        x: v3.x / len,
        y: v3.y / len
      };
    }, "normalize");
    var signedArea = /* @__PURE__ */ __name(function signedArea2(pts3) {
      var A2 = 0;
      for (var i3 = 0; i3 < pts3.length; i3++) {
        var p4 = pts3[i3], q4 = pts3[(i3 + 1) % pts3.length];
        A2 += p4.x * q4.y - q4.x * p4.y;
      }
      return A2 / 2;
    }, "signedArea");
    var intersectLines = /* @__PURE__ */ __name(function intersectLines2(p1, p22, p32, p4) {
      var r2 = sub2(p22, p1);
      var s2 = sub2(p4, p32);
      var denom = cross3(r2, s2);
      if (Math.abs(denom) < 1e-9) {
        return add3(p1, scale3(r2, 0.5));
      }
      var t4 = cross3(sub2(p32, p1), s2) / denom;
      return add3(p1, scale3(r2, t4));
    }, "intersectLines");
    var pts2 = polygon2.map(function(p4) {
      return {
        x: p4.x,
        y: p4.y
      };
    });
    if (signedArea(pts2) < 0) pts2.reverse();
    var n2 = pts2.length;
    var normals = [];
    for (var i2 = 0; i2 < n2; i2++) {
      var p3 = pts2[i2], q3 = pts2[(i2 + 1) % n2];
      var edge = sub2(q3, p3);
      var out = normalize4({
        x: edge.y,
        y: -edge.x
      });
      normals.push(out);
    }
    var offsetEdges = normals.map(function(nrm, i3) {
      var p1 = add3(pts2[i3], scale3(nrm, d3));
      var p22 = add3(pts2[(i3 + 1) % n2], scale3(nrm, d3));
      return {
        p1,
        p2: p22
      };
    });
    var inflated = [];
    for (var _i2 = 0; _i2 < n2; _i2++) {
      var prevEdge = offsetEdges[(_i2 - 1 + n2) % n2];
      var currEdge = offsetEdges[_i2];
      var ip = intersectLines(prevEdge.p1, prevEdge.p2, currEdge.p1, currEdge.p2);
      inflated.push(ip);
    }
    return inflated;
  }
  function miterBox(pts2, centerX, centerY, width3, height2, strokeWidth) {
    var tpts = transformPoints(pts2, centerX, centerY, width3, height2);
    var offsetPoints = inflatePolygon(tpts, strokeWidth);
    var bb = makeBoundingBox();
    offsetPoints.forEach(function(pt) {
      return expandBoundingBoxByPoint(bb, pt.x, pt.y);
    });
    return bb;
  }
  function satPolygonIntersection(poly1, poly2) {
    function getAxes2(polygon2) {
      var axes2 = [];
      for (var i2 = 0; i2 < polygon2.length; i2++) {
        var p1 = polygon2[i2];
        var p22 = polygon2[(i2 + 1) % polygon2.length];
        var edge = {
          x: p22.x - p1.x,
          y: p22.y - p1.y
        };
        var normal = {
          x: -edge.y,
          y: edge.x
        };
        var length2 = Math.sqrt(normal.x * normal.x + normal.y * normal.y);
        axes2.push({
          x: normal.x / length2,
          y: normal.y / length2
        });
      }
      return axes2;
    }
    __name(getAxes2, "getAxes");
    function project(polygon2, axis3) {
      var min10 = Infinity;
      var max10 = -Infinity;
      var _iterator = _createForOfIteratorHelper(polygon2), _step;
      try {
        for (_iterator.s(); !(_step = _iterator.n()).done; ) {
          var point8 = _step.value;
          var projection2 = point8.x * axis3.x + point8.y * axis3.y;
          min10 = Math.min(min10, projection2);
          max10 = Math.max(max10, projection2);
        }
      } catch (err) {
        _iterator.e(err);
      } finally {
        _iterator.f();
      }
      return {
        min: min10,
        max: max10
      };
    }
    __name(project, "project");
    function overlaps(proj12, proj22) {
      return !(proj12.max < proj22.min || proj22.max < proj12.min);
    }
    __name(overlaps, "overlaps");
    var axes = [].concat(_toConsumableArray(getAxes2(poly1)), _toConsumableArray(getAxes2(poly2)));
    var _iterator2 = _createForOfIteratorHelper(axes), _step2;
    try {
      for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
        var axis2 = _step2.value;
        var proj1 = project(poly1, axis2);
        var proj2 = project(poly2, axis2);
        if (!overlaps(proj1, proj2)) {
          return false;
        }
      }
    } catch (err) {
      _iterator2.e(err);
    } finally {
      _iterator2.f();
    }
    return true;
  }
  function clusteringDistance(method, length2, getP, getQ, nodeP, nodeQ) {
    var impl2;
    if (fn$6(method)) {
      impl2 = method;
    } else {
      impl2 = distances[method] || distances.euclidean;
    }
    if (length2 === 0 && fn$6(method)) {
      return impl2(nodeP, nodeQ);
    } else {
      return impl2(length2, getP, getQ, nodeP, nodeQ);
    }
  }
  function requireIsArray() {
    if (hasRequiredIsArray) return isArray_1;
    hasRequiredIsArray = 1;
    var isArray4 = Array.isArray;
    isArray_1 = isArray4;
    return isArray_1;
  }
  function require_isKey() {
    if (hasRequired_isKey) return _isKey;
    hasRequired_isKey = 1;
    var isArray4 = requireIsArray(), isSymbol3 = requireIsSymbol();
    var reIsDeepProp3 = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp3 = /^\w*$/;
    function isKey3(value2, object3) {
      if (isArray4(value2)) {
        return false;
      }
      var type3 = typeof value2;
      if (type3 == "number" || type3 == "symbol" || type3 == "boolean" || value2 == null || isSymbol3(value2)) {
        return true;
      }
      return reIsPlainProp3.test(value2) || !reIsDeepProp3.test(value2) || object3 != null && value2 in Object(object3);
    }
    __name(isKey3, "isKey");
    _isKey = isKey3;
    return _isKey;
  }
  function requireIsFunction() {
    if (hasRequiredIsFunction) return isFunction_1;
    hasRequiredIsFunction = 1;
    var baseGetTag3 = require_baseGetTag(), isObject4 = requireIsObject();
    var asyncTag3 = "[object AsyncFunction]", funcTag6 = "[object Function]", genTag4 = "[object GeneratorFunction]", proxyTag3 = "[object Proxy]";
    function isFunction3(value2) {
      if (!isObject4(value2)) {
        return false;
      }
      var tag = baseGetTag3(value2);
      return tag == funcTag6 || tag == genTag4 || tag == asyncTag3 || tag == proxyTag3;
    }
    __name(isFunction3, "isFunction");
    isFunction_1 = isFunction3;
    return isFunction_1;
  }
  function require_coreJsData() {
    if (hasRequired_coreJsData) return _coreJsData;
    hasRequired_coreJsData = 1;
    var root4 = require_root();
    var coreJsData3 = root4["__core-js_shared__"];
    _coreJsData = coreJsData3;
    return _coreJsData;
  }
  function require_isMasked() {
    if (hasRequired_isMasked) return _isMasked;
    hasRequired_isMasked = 1;
    var coreJsData3 = require_coreJsData();
    var maskSrcKey3 = (function() {
      var uid = /[^.]+$/.exec(coreJsData3 && coreJsData3.keys && coreJsData3.keys.IE_PROTO || "");
      return uid ? "Symbol(src)_1." + uid : "";
    })();
    function isMasked3(func) {
      return !!maskSrcKey3 && maskSrcKey3 in func;
    }
    __name(isMasked3, "isMasked");
    _isMasked = isMasked3;
    return _isMasked;
  }
  function require_toSource() {
    if (hasRequired_toSource) return _toSource;
    hasRequired_toSource = 1;
    var funcProto5 = Function.prototype;
    var funcToString5 = funcProto5.toString;
    function toSource3(func) {
      if (func != null) {
        try {
          return funcToString5.call(func);
        } catch (e3) {
        }
        try {
          return func + "";
        } catch (e3) {
        }
      }
      return "";
    }
    __name(toSource3, "toSource");
    _toSource = toSource3;
    return _toSource;
  }
  function require_baseIsNative() {
    if (hasRequired_baseIsNative) return _baseIsNative;
    hasRequired_baseIsNative = 1;
    var isFunction3 = requireIsFunction(), isMasked3 = require_isMasked(), isObject4 = requireIsObject(), toSource3 = require_toSource();
    var reRegExpChar3 = /[\\^$.*+?()[\]{}|]/g;
    var reIsHostCtor3 = /^\[object .+?Constructor\]$/;
    var funcProto5 = Function.prototype, objectProto34 = Object.prototype;
    var funcToString5 = funcProto5.toString;
    var hasOwnProperty28 = objectProto34.hasOwnProperty;
    var reIsNative3 = RegExp(
      "^" + funcToString5.call(hasOwnProperty28).replace(reRegExpChar3, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
    );
    function baseIsNative3(value2) {
      if (!isObject4(value2) || isMasked3(value2)) {
        return false;
      }
      var pattern = isFunction3(value2) ? reIsNative3 : reIsHostCtor3;
      return pattern.test(toSource3(value2));
    }
    __name(baseIsNative3, "baseIsNative");
    _baseIsNative = baseIsNative3;
    return _baseIsNative;
  }
  function require_getValue() {
    if (hasRequired_getValue) return _getValue;
    hasRequired_getValue = 1;
    function getValue4(object3, key) {
      return object3 == null ? void 0 : object3[key];
    }
    __name(getValue4, "getValue");
    _getValue = getValue4;
    return _getValue;
  }
  function require_getNative() {
    if (hasRequired_getNative) return _getNative;
    hasRequired_getNative = 1;
    var baseIsNative3 = require_baseIsNative(), getValue4 = require_getValue();
    function getNative3(object3, key) {
      var value2 = getValue4(object3, key);
      return baseIsNative3(value2) ? value2 : void 0;
    }
    __name(getNative3, "getNative");
    _getNative = getNative3;
    return _getNative;
  }
  function require_nativeCreate() {
    if (hasRequired_nativeCreate) return _nativeCreate;
    hasRequired_nativeCreate = 1;
    var getNative3 = require_getNative();
    var nativeCreate3 = getNative3(Object, "create");
    _nativeCreate = nativeCreate3;
    return _nativeCreate;
  }
  function require_hashClear() {
    if (hasRequired_hashClear) return _hashClear;
    hasRequired_hashClear = 1;
    var nativeCreate3 = require_nativeCreate();
    function hashClear3() {
      this.__data__ = nativeCreate3 ? nativeCreate3(null) : {};
      this.size = 0;
    }
    __name(hashClear3, "hashClear");
    _hashClear = hashClear3;
    return _hashClear;
  }
  function require_hashDelete() {
    if (hasRequired_hashDelete) return _hashDelete;
    hasRequired_hashDelete = 1;
    function hashDelete3(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }
    __name(hashDelete3, "hashDelete");
    _hashDelete = hashDelete3;
    return _hashDelete;
  }
  function require_hashGet() {
    if (hasRequired_hashGet) return _hashGet;
    hasRequired_hashGet = 1;
    var nativeCreate3 = require_nativeCreate();
    var HASH_UNDEFINED7 = "__lodash_hash_undefined__";
    var objectProto34 = Object.prototype;
    var hasOwnProperty28 = objectProto34.hasOwnProperty;
    function hashGet3(key) {
      var data6 = this.__data__;
      if (nativeCreate3) {
        var result = data6[key];
        return result === HASH_UNDEFINED7 ? void 0 : result;
      }
      return hasOwnProperty28.call(data6, key) ? data6[key] : void 0;
    }
    __name(hashGet3, "hashGet");
    _hashGet = hashGet3;
    return _hashGet;
  }
  function require_hashHas() {
    if (hasRequired_hashHas) return _hashHas;
    hasRequired_hashHas = 1;
    var nativeCreate3 = require_nativeCreate();
    var objectProto34 = Object.prototype;
    var hasOwnProperty28 = objectProto34.hasOwnProperty;
    function hashHas3(key) {
      var data6 = this.__data__;
      return nativeCreate3 ? data6[key] !== void 0 : hasOwnProperty28.call(data6, key);
    }
    __name(hashHas3, "hashHas");
    _hashHas = hashHas3;
    return _hashHas;
  }
  function require_hashSet() {
    if (hasRequired_hashSet) return _hashSet;
    hasRequired_hashSet = 1;
    var nativeCreate3 = require_nativeCreate();
    var HASH_UNDEFINED7 = "__lodash_hash_undefined__";
    function hashSet3(key, value2) {
      var data6 = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data6[key] = nativeCreate3 && value2 === void 0 ? HASH_UNDEFINED7 : value2;
      return this;
    }
    __name(hashSet3, "hashSet");
    _hashSet = hashSet3;
    return _hashSet;
  }
  function require_Hash() {
    if (hasRequired_Hash) return _Hash;
    hasRequired_Hash = 1;
    var hashClear3 = require_hashClear(), hashDelete3 = require_hashDelete(), hashGet3 = require_hashGet(), hashHas3 = require_hashHas(), hashSet3 = require_hashSet();
    function Hash3(entries2) {
      var index = -1, length2 = entries2 == null ? 0 : entries2.length;
      this.clear();
      while (++index < length2) {
        var entry = entries2[index];
        this.set(entry[0], entry[1]);
      }
    }
    __name(Hash3, "Hash");
    Hash3.prototype.clear = hashClear3;
    Hash3.prototype["delete"] = hashDelete3;
    Hash3.prototype.get = hashGet3;
    Hash3.prototype.has = hashHas3;
    Hash3.prototype.set = hashSet3;
    _Hash = Hash3;
    return _Hash;
  }
  function require_listCacheClear() {
    if (hasRequired_listCacheClear) return _listCacheClear;
    hasRequired_listCacheClear = 1;
    function listCacheClear3() {
      this.__data__ = [];
      this.size = 0;
    }
    __name(listCacheClear3, "listCacheClear");
    _listCacheClear = listCacheClear3;
    return _listCacheClear;
  }
  function requireEq() {
    if (hasRequiredEq) return eq_1;
    hasRequiredEq = 1;
    function eq4(value2, other) {
      return value2 === other || value2 !== value2 && other !== other;
    }
    __name(eq4, "eq");
    eq_1 = eq4;
    return eq_1;
  }
  function require_assocIndexOf() {
    if (hasRequired_assocIndexOf) return _assocIndexOf;
    hasRequired_assocIndexOf = 1;
    var eq4 = requireEq();
    function assocIndexOf3(array4, key) {
      var length2 = array4.length;
      while (length2--) {
        if (eq4(array4[length2][0], key)) {
          return length2;
        }
      }
      return -1;
    }
    __name(assocIndexOf3, "assocIndexOf");
    _assocIndexOf = assocIndexOf3;
    return _assocIndexOf;
  }
  function require_listCacheDelete() {
    if (hasRequired_listCacheDelete) return _listCacheDelete;
    hasRequired_listCacheDelete = 1;
    var assocIndexOf3 = require_assocIndexOf();
    var arrayProto3 = Array.prototype;
    var splice3 = arrayProto3.splice;
    function listCacheDelete3(key) {
      var data6 = this.__data__, index = assocIndexOf3(data6, key);
      if (index < 0) {
        return false;
      }
      var lastIndex = data6.length - 1;
      if (index == lastIndex) {
        data6.pop();
      } else {
        splice3.call(data6, index, 1);
      }
      --this.size;
      return true;
    }
    __name(listCacheDelete3, "listCacheDelete");
    _listCacheDelete = listCacheDelete3;
    return _listCacheDelete;
  }
  function require_listCacheGet() {
    if (hasRequired_listCacheGet) return _listCacheGet;
    hasRequired_listCacheGet = 1;
    var assocIndexOf3 = require_assocIndexOf();
    function listCacheGet3(key) {
      var data6 = this.__data__, index = assocIndexOf3(data6, key);
      return index < 0 ? void 0 : data6[index][1];
    }
    __name(listCacheGet3, "listCacheGet");
    _listCacheGet = listCacheGet3;
    return _listCacheGet;
  }
  function require_listCacheHas() {
    if (hasRequired_listCacheHas) return _listCacheHas;
    hasRequired_listCacheHas = 1;
    var assocIndexOf3 = require_assocIndexOf();
    function listCacheHas3(key) {
      return assocIndexOf3(this.__data__, key) > -1;
    }
    __name(listCacheHas3, "listCacheHas");
    _listCacheHas = listCacheHas3;
    return _listCacheHas;
  }
  function require_listCacheSet() {
    if (hasRequired_listCacheSet) return _listCacheSet;
    hasRequired_listCacheSet = 1;
    var assocIndexOf3 = require_assocIndexOf();
    function listCacheSet3(key, value2) {
      var data6 = this.__data__, index = assocIndexOf3(data6, key);
      if (index < 0) {
        ++this.size;
        data6.push([key, value2]);
      } else {
        data6[index][1] = value2;
      }
      return this;
    }
    __name(listCacheSet3, "listCacheSet");
    _listCacheSet = listCacheSet3;
    return _listCacheSet;
  }
  function require_ListCache() {
    if (hasRequired_ListCache) return _ListCache;
    hasRequired_ListCache = 1;
    var listCacheClear3 = require_listCacheClear(), listCacheDelete3 = require_listCacheDelete(), listCacheGet3 = require_listCacheGet(), listCacheHas3 = require_listCacheHas(), listCacheSet3 = require_listCacheSet();
    function ListCache3(entries2) {
      var index = -1, length2 = entries2 == null ? 0 : entries2.length;
      this.clear();
      while (++index < length2) {
        var entry = entries2[index];
        this.set(entry[0], entry[1]);
      }
    }
    __name(ListCache3, "ListCache");
    ListCache3.prototype.clear = listCacheClear3;
    ListCache3.prototype["delete"] = listCacheDelete3;
    ListCache3.prototype.get = listCacheGet3;
    ListCache3.prototype.has = listCacheHas3;
    ListCache3.prototype.set = listCacheSet3;
    _ListCache = ListCache3;
    return _ListCache;
  }
  function require_Map() {
    if (hasRequired_Map) return _Map;
    hasRequired_Map = 1;
    var getNative3 = require_getNative(), root4 = require_root();
    var Map4 = getNative3(root4, "Map");
    _Map = Map4;
    return _Map;
  }
  function require_mapCacheClear() {
    if (hasRequired_mapCacheClear) return _mapCacheClear;
    hasRequired_mapCacheClear = 1;
    var Hash3 = require_Hash(), ListCache3 = require_ListCache(), Map4 = require_Map();
    function mapCacheClear3() {
      this.size = 0;
      this.__data__ = {
        "hash": new Hash3(),
        "map": new (Map4 || ListCache3)(),
        "string": new Hash3()
      };
    }
    __name(mapCacheClear3, "mapCacheClear");
    _mapCacheClear = mapCacheClear3;
    return _mapCacheClear;
  }
  function require_isKeyable() {
    if (hasRequired_isKeyable) return _isKeyable;
    hasRequired_isKeyable = 1;
    function isKeyable3(value2) {
      var type3 = typeof value2;
      return type3 == "string" || type3 == "number" || type3 == "symbol" || type3 == "boolean" ? value2 !== "__proto__" : value2 === null;
    }
    __name(isKeyable3, "isKeyable");
    _isKeyable = isKeyable3;
    return _isKeyable;
  }
  function require_getMapData() {
    if (hasRequired_getMapData) return _getMapData;
    hasRequired_getMapData = 1;
    var isKeyable3 = require_isKeyable();
    function getMapData3(map6, key) {
      var data6 = map6.__data__;
      return isKeyable3(key) ? data6[typeof key == "string" ? "string" : "hash"] : data6.map;
    }
    __name(getMapData3, "getMapData");
    _getMapData = getMapData3;
    return _getMapData;
  }
  function require_mapCacheDelete() {
    if (hasRequired_mapCacheDelete) return _mapCacheDelete;
    hasRequired_mapCacheDelete = 1;
    var getMapData3 = require_getMapData();
    function mapCacheDelete3(key) {
      var result = getMapData3(this, key)["delete"](key);
      this.size -= result ? 1 : 0;
      return result;
    }
    __name(mapCacheDelete3, "mapCacheDelete");
    _mapCacheDelete = mapCacheDelete3;
    return _mapCacheDelete;
  }
  function require_mapCacheGet() {
    if (hasRequired_mapCacheGet) return _mapCacheGet;
    hasRequired_mapCacheGet = 1;
    var getMapData3 = require_getMapData();
    function mapCacheGet3(key) {
      return getMapData3(this, key).get(key);
    }
    __name(mapCacheGet3, "mapCacheGet");
    _mapCacheGet = mapCacheGet3;
    return _mapCacheGet;
  }
  function require_mapCacheHas() {
    if (hasRequired_mapCacheHas) return _mapCacheHas;
    hasRequired_mapCacheHas = 1;
    var getMapData3 = require_getMapData();
    function mapCacheHas3(key) {
      return getMapData3(this, key).has(key);
    }
    __name(mapCacheHas3, "mapCacheHas");
    _mapCacheHas = mapCacheHas3;
    return _mapCacheHas;
  }
  function require_mapCacheSet() {
    if (hasRequired_mapCacheSet) return _mapCacheSet;
    hasRequired_mapCacheSet = 1;
    var getMapData3 = require_getMapData();
    function mapCacheSet3(key, value2) {
      var data6 = getMapData3(this, key), size4 = data6.size;
      data6.set(key, value2);
      this.size += data6.size == size4 ? 0 : 1;
      return this;
    }
    __name(mapCacheSet3, "mapCacheSet");
    _mapCacheSet = mapCacheSet3;
    return _mapCacheSet;
  }
  function require_MapCache() {
    if (hasRequired_MapCache) return _MapCache;
    hasRequired_MapCache = 1;
    var mapCacheClear3 = require_mapCacheClear(), mapCacheDelete3 = require_mapCacheDelete(), mapCacheGet3 = require_mapCacheGet(), mapCacheHas3 = require_mapCacheHas(), mapCacheSet3 = require_mapCacheSet();
    function MapCache3(entries2) {
      var index = -1, length2 = entries2 == null ? 0 : entries2.length;
      this.clear();
      while (++index < length2) {
        var entry = entries2[index];
        this.set(entry[0], entry[1]);
      }
    }
    __name(MapCache3, "MapCache");
    MapCache3.prototype.clear = mapCacheClear3;
    MapCache3.prototype["delete"] = mapCacheDelete3;
    MapCache3.prototype.get = mapCacheGet3;
    MapCache3.prototype.has = mapCacheHas3;
    MapCache3.prototype.set = mapCacheSet3;
    _MapCache = MapCache3;
    return _MapCache;
  }
  function requireMemoize() {
    if (hasRequiredMemoize) return memoize_1;
    hasRequiredMemoize = 1;
    var MapCache3 = require_MapCache();
    var FUNC_ERROR_TEXT4 = "Expected a function";
    function memoize6(func, resolver3) {
      if (typeof func != "function" || resolver3 != null && typeof resolver3 != "function") {
        throw new TypeError(FUNC_ERROR_TEXT4);
      }
      var memoized = /* @__PURE__ */ __name(function() {
        var args = arguments, key = resolver3 ? resolver3.apply(this, args) : args[0], cache3 = memoized.cache;
        if (cache3.has(key)) {
          return cache3.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache3.set(key, result) || cache3;
        return result;
      }, "memoized");
      memoized.cache = new (memoize6.Cache || MapCache3)();
      return memoized;
    }
    __name(memoize6, "memoize");
    memoize6.Cache = MapCache3;
    memoize_1 = memoize6;
    return memoize_1;
  }
  function require_memoizeCapped() {
    if (hasRequired_memoizeCapped) return _memoizeCapped;
    hasRequired_memoizeCapped = 1;
    var memoize6 = requireMemoize();
    var MAX_MEMOIZE_SIZE3 = 500;
    function memoizeCapped3(func) {
      var result = memoize6(func, function(key) {
        if (cache3.size === MAX_MEMOIZE_SIZE3) {
          cache3.clear();
        }
        return key;
      });
      var cache3 = result.cache;
      return result;
    }
    __name(memoizeCapped3, "memoizeCapped");
    _memoizeCapped = memoizeCapped3;
    return _memoizeCapped;
  }
  function require_stringToPath() {
    if (hasRequired_stringToPath) return _stringToPath;
    hasRequired_stringToPath = 1;
    var memoizeCapped3 = require_memoizeCapped();
    var rePropName3 = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
    var reEscapeChar3 = /\\(\\)?/g;
    var stringToPath3 = memoizeCapped3(function(string3) {
      var result = [];
      if (string3.charCodeAt(0) === 46) {
        result.push("");
      }
      string3.replace(rePropName3, function(match3, number7, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar3, "$1") : number7 || match3);
      });
      return result;
    });
    _stringToPath = stringToPath3;
    return _stringToPath;
  }
  function require_arrayMap() {
    if (hasRequired_arrayMap) return _arrayMap;
    hasRequired_arrayMap = 1;
    function arrayMap3(array4, iteratee) {
      var index = -1, length2 = array4 == null ? 0 : array4.length, result = Array(length2);
      while (++index < length2) {
        result[index] = iteratee(array4[index], index, array4);
      }
      return result;
    }
    __name(arrayMap3, "arrayMap");
    _arrayMap = arrayMap3;
    return _arrayMap;
  }
  function require_baseToString() {
    if (hasRequired_baseToString) return _baseToString;
    hasRequired_baseToString = 1;
    var Symbol4 = require_Symbol(), arrayMap3 = require_arrayMap(), isArray4 = requireIsArray(), isSymbol3 = requireIsSymbol();
    var symbolProto6 = Symbol4 ? Symbol4.prototype : void 0, symbolToString3 = symbolProto6 ? symbolProto6.toString : void 0;
    function baseToString3(value2) {
      if (typeof value2 == "string") {
        return value2;
      }
      if (isArray4(value2)) {
        return arrayMap3(value2, baseToString3) + "";
      }
      if (isSymbol3(value2)) {
        return symbolToString3 ? symbolToString3.call(value2) : "";
      }
      var result = value2 + "";
      return result == "0" && 1 / value2 == -Infinity ? "-0" : result;
    }
    __name(baseToString3, "baseToString");
    _baseToString = baseToString3;
    return _baseToString;
  }
  function requireToString() {
    if (hasRequiredToString) return toString_1;
    hasRequiredToString = 1;
    var baseToString3 = require_baseToString();
    function toString6(value2) {
      return value2 == null ? "" : baseToString3(value2);
    }
    __name(toString6, "toString");
    toString_1 = toString6;
    return toString_1;
  }
  function require_castPath() {
    if (hasRequired_castPath) return _castPath;
    hasRequired_castPath = 1;
    var isArray4 = requireIsArray(), isKey3 = require_isKey(), stringToPath3 = require_stringToPath(), toString6 = requireToString();
    function castPath3(value2, object3) {
      if (isArray4(value2)) {
        return value2;
      }
      return isKey3(value2, object3) ? [value2] : stringToPath3(toString6(value2));
    }
    __name(castPath3, "castPath");
    _castPath = castPath3;
    return _castPath;
  }
  function require_toKey() {
    if (hasRequired_toKey) return _toKey;
    hasRequired_toKey = 1;
    var isSymbol3 = requireIsSymbol();
    function toKey3(value2) {
      if (typeof value2 == "string" || isSymbol3(value2)) {
        return value2;
      }
      var result = value2 + "";
      return result == "0" && 1 / value2 == -Infinity ? "-0" : result;
    }
    __name(toKey3, "toKey");
    _toKey = toKey3;
    return _toKey;
  }
  function require_baseGet() {
    if (hasRequired_baseGet) return _baseGet;
    hasRequired_baseGet = 1;
    var castPath3 = require_castPath(), toKey3 = require_toKey();
    function baseGet3(object3, path4) {
      path4 = castPath3(path4, object3);
      var index = 0, length2 = path4.length;
      while (object3 != null && index < length2) {
        object3 = object3[toKey3(path4[index++])];
      }
      return index && index == length2 ? object3 : void 0;
    }
    __name(baseGet3, "baseGet");
    _baseGet = baseGet3;
    return _baseGet;
  }
  function requireGet() {
    if (hasRequiredGet) return get_1;
    hasRequiredGet = 1;
    var baseGet3 = require_baseGet();
    function get6(object3, path4, defaultValue) {
      var result = object3 == null ? void 0 : baseGet3(object3, path4);
      return result === void 0 ? defaultValue : result;
    }
    __name(get6, "get");
    get_1 = get6;
    return get_1;
  }
  function require_defineProperty() {
    if (hasRequired_defineProperty) return _defineProperty;
    hasRequired_defineProperty = 1;
    var getNative3 = require_getNative();
    var defineProperty3 = (function() {
      try {
        var func = getNative3(Object, "defineProperty");
        func({}, "", {});
        return func;
      } catch (e3) {
      }
    })();
    _defineProperty = defineProperty3;
    return _defineProperty;
  }
  function require_baseAssignValue() {
    if (hasRequired_baseAssignValue) return _baseAssignValue;
    hasRequired_baseAssignValue = 1;
    var defineProperty3 = require_defineProperty();
    function baseAssignValue3(object3, key, value2) {
      if (key == "__proto__" && defineProperty3) {
        defineProperty3(object3, key, {
          "configurable": true,
          "enumerable": true,
          "value": value2,
          "writable": true
        });
      } else {
        object3[key] = value2;
      }
    }
    __name(baseAssignValue3, "baseAssignValue");
    _baseAssignValue = baseAssignValue3;
    return _baseAssignValue;
  }
  function require_assignValue() {
    if (hasRequired_assignValue) return _assignValue;
    hasRequired_assignValue = 1;
    var baseAssignValue3 = require_baseAssignValue(), eq4 = requireEq();
    var objectProto34 = Object.prototype;
    var hasOwnProperty28 = objectProto34.hasOwnProperty;
    function assignValue3(object3, key, value2) {
      var objValue = object3[key];
      if (!(hasOwnProperty28.call(object3, key) && eq4(objValue, value2)) || value2 === void 0 && !(key in object3)) {
        baseAssignValue3(object3, key, value2);
      }
    }
    __name(assignValue3, "assignValue");
    _assignValue = assignValue3;
    return _assignValue;
  }
  function require_isIndex() {
    if (hasRequired_isIndex) return _isIndex;
    hasRequired_isIndex = 1;
    var MAX_SAFE_INTEGER5 = 9007199254740991;
    var reIsUint3 = /^(?:0|[1-9]\d*)$/;
    function isIndex3(value2, length2) {
      var type3 = typeof value2;
      length2 = length2 == null ? MAX_SAFE_INTEGER5 : length2;
      return !!length2 && (type3 == "number" || type3 != "symbol" && reIsUint3.test(value2)) && (value2 > -1 && value2 % 1 == 0 && value2 < length2);
    }
    __name(isIndex3, "isIndex");
    _isIndex = isIndex3;
    return _isIndex;
  }
  function require_baseSet() {
    if (hasRequired_baseSet) return _baseSet;
    hasRequired_baseSet = 1;
    var assignValue3 = require_assignValue(), castPath3 = require_castPath(), isIndex3 = require_isIndex(), isObject4 = requireIsObject(), toKey3 = require_toKey();
    function baseSet3(object3, path4, value2, customizer) {
      if (!isObject4(object3)) {
        return object3;
      }
      path4 = castPath3(path4, object3);
      var index = -1, length2 = path4.length, lastIndex = length2 - 1, nested = object3;
      while (nested != null && ++index < length2) {
        var key = toKey3(path4[index]), newValue = value2;
        if (key === "__proto__" || key === "constructor" || key === "prototype") {
          return object3;
        }
        if (index != lastIndex) {
          var objValue = nested[key];
          newValue = customizer ? customizer(objValue, key, nested) : void 0;
          if (newValue === void 0) {
            newValue = isObject4(objValue) ? objValue : isIndex3(path4[index + 1]) ? [] : {};
          }
        }
        assignValue3(nested, key, newValue);
        nested = nested[key];
      }
      return object3;
    }
    __name(baseSet3, "baseSet");
    _baseSet = baseSet3;
    return _baseSet;
  }
  function requireSet() {
    if (hasRequiredSet) return set_1;
    hasRequiredSet = 1;
    var baseSet3 = require_baseSet();
    function set5(object3, path4, value2) {
      return object3 == null ? object3 : baseSet3(object3, path4, value2);
    }
    __name(set5, "set");
    set_1 = set5;
    return set_1;
  }
  function require_copyArray() {
    if (hasRequired_copyArray) return _copyArray;
    hasRequired_copyArray = 1;
    function copyArray5(source, array4) {
      var index = -1, length2 = source.length;
      array4 || (array4 = Array(length2));
      while (++index < length2) {
        array4[index] = source[index];
      }
      return array4;
    }
    __name(copyArray5, "copyArray");
    _copyArray = copyArray5;
    return _copyArray;
  }
  function requireToPath() {
    if (hasRequiredToPath) return toPath_1;
    hasRequiredToPath = 1;
    var arrayMap3 = require_arrayMap(), copyArray5 = require_copyArray(), isArray4 = requireIsArray(), isSymbol3 = requireIsSymbol(), stringToPath3 = require_stringToPath(), toKey3 = require_toKey(), toString6 = requireToString();
    function toPath2(value2) {
      if (isArray4(value2)) {
        return arrayMap3(value2, toKey3);
      }
      return isSymbol3(value2) ? [value2] : copyArray5(stringToPath3(toString6(value2)));
    }
    __name(toPath2, "toPath");
    toPath_1 = toPath2;
    return toPath_1;
  }
  function forEachCompound(eles, fn3, includeSelf, recursiveStep) {
    var q3 = [];
    var did = new Set$1();
    var cy = eles.cy();
    var hasCompounds = cy.hasCompoundNodes();
    for (var i2 = 0; i2 < eles.length; i2++) {
      var ele = eles[i2];
      if (includeSelf) {
        q3.push(ele);
      } else if (hasCompounds) {
        recursiveStep(q3, did, ele);
      }
    }
    while (q3.length > 0) {
      var _ele = q3.shift();
      fn3(_ele);
      did.add(_ele.id());
      if (hasCompounds) {
        recursiveStep(q3, did, _ele);
      }
    }
    return eles;
  }
  function addChildren(q3, did, ele) {
    if (ele.isParent()) {
      var children2 = ele._private.children;
      for (var i2 = 0; i2 < children2.length; i2++) {
        var child = children2[i2];
        if (!did.has(child.id())) {
          q3.push(child);
        }
      }
    }
  }
  function addParent(q3, did, ele) {
    if (ele.isChild()) {
      var parent4 = ele._private.parent;
      if (!did.has(parent4.id())) {
        q3.push(parent4);
      }
    }
  }
  function addParentAndChildren(q3, did, ele) {
    addParent(q3, did, ele);
    addChildren(q3, did, ele);
  }
  function defineDegreeFunction(callback) {
    return function(includeLoops) {
      var self2 = this;
      if (includeLoops === void 0) {
        includeLoops = true;
      }
      if (self2.length === 0) {
        return;
      }
      if (self2.isNode() && !self2.removed()) {
        var degree = 0;
        var node2 = self2[0];
        var connectedEdges = node2._private.edges;
        for (var i2 = 0; i2 < connectedEdges.length; i2++) {
          var edge = connectedEdges[i2];
          if (!includeLoops && edge.isLoop()) {
            continue;
          }
          degree += callback(node2, edge);
        }
        return degree;
      } else {
        return;
      }
    };
  }
  function defineDegreeBoundsFunction(degreeFn, callback) {
    return function(includeLoops) {
      var ret;
      var nodes5 = this.nodes();
      for (var i2 = 0; i2 < nodes5.length; i2++) {
        var ele = nodes5[i2];
        var degree = ele[degreeFn](includeLoops);
        if (degree !== void 0 && (ret === void 0 || callback(degree, ret))) {
          ret = degree;
        }
      }
      return ret;
    };
  }
  function returnFalse() {
    return false;
  }
  function returnTrue() {
    return true;
  }
  function Emitter() {
    var opts = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : emptyOpts;
    var context = arguments.length > 1 ? arguments[1] : void 0;
    for (var i2 = 0; i2 < defaultsKeys.length; i2++) {
      var key = defaultsKeys[i2];
      this[key] = opts[key] || defaults$8[key];
    }
    this.context = context || this.context;
    this.listeners = [];
    this.emitting = 0;
  }
  function styleCache(key, fn3, ele) {
    var _p = ele._private;
    var cache3 = _p.styleCache = _p.styleCache || [];
    var val;
    if ((val = cache3[key]) != null) {
      return val;
    } else {
      val = cache3[key] = fn3(ele);
      return val;
    }
  }
  function cacheStyleFunction(key, fn3) {
    key = hashString2(key);
    return /* @__PURE__ */ __name(function cachedStyleFunction(ele) {
      return styleCache(key, fn3, ele);
    }, "cachedStyleFunction");
  }
  function cachePrototypeStyleFunction(key, fn3) {
    key = hashString2(key);
    var selfFn = /* @__PURE__ */ __name(function selfFn2(ele) {
      return fn3.call(ele);
    }, "selfFn");
    return /* @__PURE__ */ __name(function cachedPrototypeStyleFunction() {
      var ele = this[0];
      if (ele) {
        return styleCache(key, selfFn, ele);
      }
    }, "cachedPrototypeStyleFunction");
  }
  function checkCompound(ele, parentOk) {
    var _p = ele._private;
    var parents3 = _p.data.parent ? ele.parents() : null;
    if (parents3) {
      for (var i2 = 0; i2 < parents3.length; i2++) {
        var parent4 = parents3[i2];
        if (!parentOk(parent4)) {
          return false;
        }
      }
    }
    return true;
  }
  function defineDerivedStateFunction(specs) {
    var ok = specs.ok;
    var edgeOkViaNode = specs.edgeOkViaNode || specs.ok;
    var parentOk = specs.parentOk || specs.ok;
    return function() {
      var cy = this.cy();
      if (!cy.styleEnabled()) {
        return true;
      }
      var ele = this[0];
      var hasCompoundNodes2 = cy.hasCompoundNodes();
      if (ele) {
        var _p = ele._private;
        if (!ok(ele)) {
          return false;
        }
        if (ele.isNode()) {
          return !hasCompoundNodes2 || checkCompound(ele, parentOk);
        } else {
          var src = _p.source;
          var tgt = _p.target;
          return edgeOkViaNode(src) && (!hasCompoundNodes2 || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes2 || checkCompound(tgt, edgeOkViaNode)));
        }
      }
    };
  }
  function defineSwitchFunction(params) {
    return function() {
      var args = arguments;
      var changedEles = [];
      if (args.length === 2) {
        var data6 = args[0];
        var handler = args[1];
        this.on(params.event, data6, handler);
      } else if (args.length === 1 && fn$6(args[0])) {
        var _handler = args[0];
        this.on(params.event, _handler);
      } else if (args.length === 0 || args.length === 1 && array2(args[0])) {
        var addlEvents = args.length === 1 ? args[0] : null;
        for (var i2 = 0; i2 < this.length; i2++) {
          var ele = this[i2];
          var able = !params.ableField || ele._private[params.ableField];
          var changed = ele._private[params.field] != params.value;
          if (params.overrideAble) {
            var overrideAble2 = params.overrideAble(ele);
            if (overrideAble2 !== void 0) {
              able = overrideAble2;
              if (!overrideAble2) {
                return this;
              }
            }
          }
          if (able) {
            ele._private[params.field] = params.value;
            if (changed) {
              changedEles.push(ele);
            }
          }
        }
        var changedColl = this.spawn(changedEles);
        changedColl.updateStyle();
        changedColl.emit(params.event);
        if (addlEvents) {
          changedColl.emit(addlEvents);
        }
      }
      return this;
    };
  }
  function defineSwitchSet(params) {
    elesfn$3[params.field] = function() {
      var ele = this[0];
      if (ele) {
        if (params.overrideField) {
          var val = params.overrideField(ele);
          if (val !== void 0) {
            return val;
          }
        }
        return ele._private[params.field];
      }
    };
    elesfn$3[params.on] = defineSwitchFunction({
      event: params.on,
      field: params.field,
      ableField: params.ableField,
      overrideAble: params.overrideAble,
      value: true
    });
    elesfn$3[params.off] = defineSwitchFunction({
      event: params.off,
      field: params.field,
      ableField: params.ableField,
      overrideAble: params.overrideAble,
      value: false
    });
  }
  function defineSourceFunction(params) {
    return /* @__PURE__ */ __name(function sourceImpl2(selector) {
      var sources = [];
      for (var i2 = 0; i2 < this.length; i2++) {
        var ele = this[i2];
        var src = ele._private[params.attr];
        if (src) {
          sources.push(src);
        }
      }
      return this.spawn(sources, true).filter(selector);
    }, "sourceImpl");
  }
  function defineEdgesWithFunction(params) {
    return /* @__PURE__ */ __name(function edgesWithImpl(otherNodes) {
      var elements2 = [];
      var cy = this._private.cy;
      var p3 = params || {};
      if (string(otherNodes)) {
        otherNodes = cy.$(otherNodes);
      }
      for (var h3 = 0; h3 < otherNodes.length; h3++) {
        var edges3 = otherNodes[h3]._private.edges;
        for (var i2 = 0; i2 < edges3.length; i2++) {
          var edge = edges3[i2];
          var edgeData2 = edge._private.data;
          var thisToOther = this.hasElementWithId(edgeData2.source) && otherNodes.hasElementWithId(edgeData2.target);
          var otherToThis = otherNodes.hasElementWithId(edgeData2.source) && this.hasElementWithId(edgeData2.target);
          var edgeConnectsThisAndOther = thisToOther || otherToThis;
          if (!edgeConnectsThisAndOther) {
            continue;
          }
          if (p3.thisIsSrc || p3.thisIsTgt) {
            if (p3.thisIsSrc && !thisToOther) {
              continue;
            }
            if (p3.thisIsTgt && !otherToThis) {
              continue;
            }
          }
          elements2.push(edge);
        }
      }
      return this.spawn(elements2, true);
    }, "edgesWithImpl");
  }
  function defineParallelEdgesFunction(params) {
    var defaults5 = {
      codirected: false
    };
    params = extend4({}, defaults5, params);
    return /* @__PURE__ */ __name(function parallelEdgesImpl(selector) {
      var elements2 = [];
      var edges3 = this.edges();
      var p3 = params;
      for (var i2 = 0; i2 < edges3.length; i2++) {
        var edge1 = edges3[i2];
        var edge1_p = edge1._private;
        var src1 = edge1_p.source;
        var srcid1 = src1._private.data.id;
        var tgtid1 = edge1_p.data.target;
        var srcEdges1 = src1._private.edges;
        for (var j3 = 0; j3 < srcEdges1.length; j3++) {
          var edge2 = srcEdges1[j3];
          var edge2data = edge2._private.data;
          var tgtid2 = edge2data.target;
          var srcid2 = edge2data.source;
          var codirected = tgtid2 === tgtid1 && srcid2 === srcid1;
          var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2;
          if (p3.codirected && codirected || !p3.codirected && (codirected || oppdirected)) {
            elements2.push(edge2);
          }
        }
      }
      return this.spawn(elements2, true).filter(selector);
    }, "parallelEdgesImpl");
  }
  function generateCubicBezier(mX1, mY1, mX2, mY2) {
    var NEWTON_ITERATIONS = 4, NEWTON_MIN_SLOPE = 1e-3, SUBDIVISION_PRECISION = 1e-7, SUBDIVISION_MAX_ITERATIONS = 10, kSplineTableSize = 11, kSampleStepSize = 1 / (kSplineTableSize - 1), float32ArraySupported = typeof Float32Array !== "undefined";
    if (arguments.length !== 4) {
      return false;
    }
    for (var i2 = 0; i2 < 4; ++i2) {
      if (typeof arguments[i2] !== "number" || isNaN(arguments[i2]) || !isFinite(arguments[i2])) {
        return false;
      }
    }
    mX1 = Math.min(mX1, 1);
    mX2 = Math.min(mX2, 1);
    mX1 = Math.max(mX1, 0);
    mX2 = Math.max(mX2, 0);
    var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
    function A2(aA1, aA2) {
      return 1 - 3 * aA2 + 3 * aA1;
    }
    __name(A2, "A");
    function B3(aA1, aA2) {
      return 3 * aA2 - 6 * aA1;
    }
    __name(B3, "B");
    function C3(aA1) {
      return 3 * aA1;
    }
    __name(C3, "C");
    function calcBezier(aT, aA1, aA2) {
      return ((A2(aA1, aA2) * aT + B3(aA1, aA2)) * aT + C3(aA1)) * aT;
    }
    __name(calcBezier, "calcBezier");
    function getSlope(aT, aA1, aA2) {
      return 3 * A2(aA1, aA2) * aT * aT + 2 * B3(aA1, aA2) * aT + C3(aA1);
    }
    __name(getSlope, "getSlope");
    function newtonRaphsonIterate(aX, aGuessT) {
      for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) {
        var currentSlope = getSlope(aGuessT, mX1, mX2);
        if (currentSlope === 0) {
          return aGuessT;
        }
        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
        aGuessT -= currentX / currentSlope;
      }
      return aGuessT;
    }
    __name(newtonRaphsonIterate, "newtonRaphsonIterate");
    function calcSampleValues() {
      for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) {
        mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2);
      }
    }
    __name(calcSampleValues, "calcSampleValues");
    function binarySubdivide(aX, aA, aB) {
      var currentX, currentT, i3 = 0;
      do {
        currentT = aA + (aB - aA) / 2;
        currentX = calcBezier(currentT, mX1, mX2) - aX;
        if (currentX > 0) {
          aB = currentT;
        } else {
          aA = currentT;
        }
      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i3 < SUBDIVISION_MAX_ITERATIONS);
      return currentT;
    }
    __name(binarySubdivide, "binarySubdivide");
    function getTForX(aX) {
      var intervalStart = 0, currentSample = 1, lastSample = kSplineTableSize - 1;
      for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {
        intervalStart += kSampleStepSize;
      }
      --currentSample;
      var dist3 = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), guessForT = intervalStart + dist3 * kSampleStepSize, initialSlope = getSlope(guessForT, mX1, mX2);
      if (initialSlope >= NEWTON_MIN_SLOPE) {
        return newtonRaphsonIterate(aX, guessForT);
      } else if (initialSlope === 0) {
        return guessForT;
      } else {
        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);
      }
    }
    __name(getTForX, "getTForX");
    var _precomputed = false;
    function precompute() {
      _precomputed = true;
      if (mX1 !== mY1 || mX2 !== mY2) {
        calcSampleValues();
      }
    }
    __name(precompute, "precompute");
    var f2 = /* @__PURE__ */ __name(function f3(aX) {
      if (!_precomputed) {
        precompute();
      }
      if (mX1 === mY1 && mX2 === mY2) {
        return aX;
      }
      if (aX === 0) {
        return 0;
      }
      if (aX === 1) {
        return 1;
      }
      return calcBezier(getTForX(aX), mY1, mY2);
    }, "f");
    f2.getControlPoints = function() {
      return [{
        x: mX1,
        y: mY1
      }, {
        x: mX2,
        y: mY2
      }];
    };
    var str2 = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")";
    f2.toString = function() {
      return str2;
    };
    return f2;
  }
  function getEasedValue(type3, start3, end2, percent, easingFn) {
    if (percent === 1) {
      return end2;
    }
    if (start3 === end2) {
      return end2;
    }
    var val = easingFn(start3, end2, percent);
    if (type3 == null) {
      return val;
    }
    if (type3.roundValue || type3.color) {
      val = Math.round(val);
    }
    if (type3.min !== void 0) {
      val = Math.max(val, type3.min);
    }
    if (type3.max !== void 0) {
      val = Math.min(val, type3.max);
    }
    return val;
  }
  function getValue2(prop, spec) {
    if (prop.pfValue != null || prop.value != null) {
      if (prop.pfValue != null && (spec == null || spec.type.units !== "%")) {
        return prop.pfValue;
      } else {
        return prop.value;
      }
    } else {
      return prop;
    }
  }
  function ease(startProp, endProp, percent, easingFn, propSpec) {
    var type3 = propSpec != null ? propSpec.type : null;
    if (percent < 0) {
      percent = 0;
    } else if (percent > 1) {
      percent = 1;
    }
    var start3 = getValue2(startProp, propSpec);
    var end2 = getValue2(endProp, propSpec);
    if (number$1(start3) && number$1(end2)) {
      return getEasedValue(type3, start3, end2, percent, easingFn);
    } else if (array2(start3) && array2(end2)) {
      var easedArr = [];
      for (var i2 = 0; i2 < end2.length; i2++) {
        var si = start3[i2];
        var ei = end2[i2];
        if (si != null && ei != null) {
          var val = getEasedValue(type3, si, ei, percent, easingFn);
          easedArr.push(val);
        } else {
          easedArr.push(ei);
        }
      }
      return easedArr;
    }
    return void 0;
  }
  function step$1(self2, ani, now3, isCore) {
    var isEles = !isCore;
    var _p = self2._private;
    var ani_p = ani._private;
    var pEasing = ani_p.easing;
    var startTime = ani_p.startTime;
    var cy = isCore ? self2 : self2.cy();
    var style3 = cy.style();
    if (!ani_p.easingImpl) {
      if (pEasing == null) {
        ani_p.easingImpl = easings["linear"];
      } else {
        var easingVals;
        if (string(pEasing)) {
          var easingProp = style3.parse("transition-timing-function", pEasing);
          easingVals = easingProp.value;
        } else {
          easingVals = pEasing;
        }
        var name, args;
        if (string(easingVals)) {
          name = easingVals;
          args = [];
        } else {
          name = easingVals[1];
          args = easingVals.slice(2).map(function(n2) {
            return +n2;
          });
        }
        if (args.length > 0) {
          if (name === "spring") {
            args.push(ani_p.duration);
          }
          ani_p.easingImpl = easings[name].apply(null, args);
        } else {
          ani_p.easingImpl = easings[name];
        }
      }
    }
    var easing = ani_p.easingImpl;
    var percent;
    if (ani_p.duration === 0) {
      percent = 1;
    } else {
      percent = (now3 - startTime) / ani_p.duration;
    }
    if (ani_p.applying) {
      percent = ani_p.progress;
    }
    if (percent < 0) {
      percent = 0;
    } else if (percent > 1) {
      percent = 1;
    }
    if (ani_p.delay == null) {
      var startPos = ani_p.startPosition;
      var endPos = ani_p.position;
      if (endPos && isEles && !self2.locked()) {
        var newPos = {};
        if (valid(startPos.x, endPos.x)) {
          newPos.x = ease(startPos.x, endPos.x, percent, easing);
        }
        if (valid(startPos.y, endPos.y)) {
          newPos.y = ease(startPos.y, endPos.y, percent, easing);
        }
        self2.position(newPos);
      }
      var startPan = ani_p.startPan;
      var endPan = ani_p.pan;
      var pan2 = _p.pan;
      var animatingPan = endPan != null && isCore;
      if (animatingPan) {
        if (valid(startPan.x, endPan.x)) {
          pan2.x = ease(startPan.x, endPan.x, percent, easing);
        }
        if (valid(startPan.y, endPan.y)) {
          pan2.y = ease(startPan.y, endPan.y, percent, easing);
        }
        self2.emit("pan");
      }
      var startZoom = ani_p.startZoom;
      var endZoom = ani_p.zoom;
      var animatingZoom = endZoom != null && isCore;
      if (animatingZoom) {
        if (valid(startZoom, endZoom)) {
          _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom);
        }
        self2.emit("zoom");
      }
      if (animatingPan || animatingZoom) {
        self2.emit("viewport");
      }
      var props = ani_p.style;
      if (props && props.length > 0 && isEles) {
        for (var i2 = 0; i2 < props.length; i2++) {
          var prop = props[i2];
          var _name = prop.name;
          var end2 = prop;
          var start3 = ani_p.startStyle[_name];
          var propSpec = style3.properties[start3.name];
          var easedVal = ease(start3, end2, percent, easing, propSpec);
          style3.overrideBypass(self2, _name, easedVal);
        }
        self2.emit("style");
      }
    }
    ani_p.progress = percent;
    return percent;
  }
  function valid(start3, end2) {
    if (start3 == null || end2 == null) {
      return false;
    }
    if (number$1(start3) && number$1(end2)) {
      return true;
    } else if (start3 && end2) {
      return true;
    }
    return false;
  }
  function startAnimation(self2, ani, now3, isCore) {
    var ani_p = ani._private;
    ani_p.started = true;
    ani_p.startTime = now3 - ani_p.progress * ani_p.duration;
  }
  function stepAll(now3, cy) {
    var eles = cy._private.aniEles;
    var doneEles = [];
    function stepOne(ele2, isCore) {
      var _p = ele2._private;
      var current = _p.animation.current;
      var queue = _p.animation.queue;
      var ranAnis = false;
      if (current.length === 0) {
        var next3 = queue.shift();
        if (next3) {
          current.push(next3);
        }
      }
      var callbacks = /* @__PURE__ */ __name(function callbacks2(_callbacks) {
        for (var j3 = _callbacks.length - 1; j3 >= 0; j3--) {
          var cb = _callbacks[j3];
          cb();
        }
        _callbacks.splice(0, _callbacks.length);
      }, "callbacks");
      for (var i2 = current.length - 1; i2 >= 0; i2--) {
        var ani = current[i2];
        var ani_p = ani._private;
        if (ani_p.stopped) {
          current.splice(i2, 1);
          ani_p.hooked = false;
          ani_p.playing = false;
          ani_p.started = false;
          callbacks(ani_p.frames);
          continue;
        }
        if (!ani_p.playing && !ani_p.applying) {
          continue;
        }
        if (ani_p.playing && ani_p.applying) {
          ani_p.applying = false;
        }
        if (!ani_p.started) {
          startAnimation(ele2, ani, now3);
        }
        step$1(ele2, ani, now3, isCore);
        if (ani_p.applying) {
          ani_p.applying = false;
        }
        callbacks(ani_p.frames);
        if (ani_p.step != null) {
          ani_p.step(now3);
        }
        if (ani.completed()) {
          current.splice(i2, 1);
          ani_p.hooked = false;
          ani_p.playing = false;
          ani_p.started = false;
          callbacks(ani_p.completes);
        }
        ranAnis = true;
      }
      if (!isCore && current.length === 0 && queue.length === 0) {
        doneEles.push(ele2);
      }
      return ranAnis;
    }
    __name(stepOne, "stepOne");
    var ranEleAni = false;
    for (var e3 = 0; e3 < eles.length; e3++) {
      var ele = eles[e3];
      var handledThisEle = stepOne(ele);
      ranEleAni = ranEleAni || handledThisEle;
    }
    var ranCoreAni = stepOne(cy, true);
    if (ranEleAni || ranCoreAni) {
      if (eles.length > 0) {
        cy.notify("draw", eles);
      } else {
        cy.notify("draw");
      }
    }
    eles.unmerge(doneEles);
    cy.emit("step");
  }
  function BreadthFirstLayout(options2) {
    this.options = extend4({}, defaults$7, deprecatedOptionDefaults, options2);
  }
  function CircleLayout(options2) {
    this.options = extend4({}, defaults$6, options2);
  }
  function ConcentricLayout(options2) {
    this.options = extend4({}, defaults$5, options2);
  }
  function CoseLayout(options2) {
    this.options = extend4({}, defaults$4, options2);
    this.options.layout = this;
    var nodes5 = this.options.eles.nodes();
    var edges3 = this.options.eles.edges();
    var notEdges = edges3.filter(function(e3) {
      var sourceId = e3.source().data("id");
      var targetId = e3.target().data("id");
      var hasSource = nodes5.some(function(n2) {
        return n2.data("id") === sourceId;
      });
      var hasTarget = nodes5.some(function(n2) {
        return n2.data("id") === targetId;
      });
      return !hasSource || !hasTarget;
    });
    this.options.eles = this.options.eles.not(notEdges);
  }
  function GridLayout(options2) {
    this.options = extend4({}, defaults$3, options2);
  }
  function NullLayout(options2) {
    this.options = extend4({}, defaults$2, options2);
  }
  function PresetLayout(options2) {
    this.options = extend4({}, defaults$1, options2);
  }
  function RandomLayout(options2) {
    this.options = extend4({}, defaults3, options2);
  }
  function NullRenderer(options2) {
    this.options = options2;
    this.notifications = 0;
  }
  function drawPreparedRoundCorner(ctx, roundCorner) {
    if (roundCorner.radius === 0) ctx.lineTo(roundCorner.cx, roundCorner.cy);
    else ctx.arc(roundCorner.cx, roundCorner.cy, roundCorner.radius, roundCorner.startAngle, roundCorner.endAngle, roundCorner.counterClockwise);
  }
  function getRoundCorner(previousPoint, currentPoint, nextPoint, radiusMax) {
    var isArcRadius = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true;
    if (radiusMax === 0 || currentPoint.radius === 0) return {
      cx: currentPoint.x,
      cy: currentPoint.y,
      radius: 0,
      startX: currentPoint.x,
      startY: currentPoint.y,
      stopX: currentPoint.x,
      stopY: currentPoint.y,
      startAngle: void 0,
      endAngle: void 0,
      counterClockwise: void 0
    };
    calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius);
    return {
      cx: x3,
      cy: y4,
      radius: cRadius,
      startX,
      startY,
      stopX,
      stopY,
      startAngle: v1.ang + Math.PI / 2 * radDirection,
      endAngle: v22.ang - Math.PI / 2 * radDirection,
      counterClockwise: drawDirection
    };
  }
  function getPts(pts2) {
    var retPts = [];
    if (pts2 == null) {
      return;
    }
    for (var i2 = 0; i2 < pts2.length; i2 += 2) {
      var x5 = pts2[i2];
      var y6 = pts2[i2 + 1];
      retPts.push({
        x: x5,
        y: y6
      });
    }
    return retPts;
  }
  function pushBezierPts(r2, edge, pts2) {
    var qbezierAt$1 = /* @__PURE__ */ __name(function qbezierAt$12(p1, p22, p32, t4) {
      return qbezierAt(p1, p22, p32, t4);
    }, "qbezierAt$1");
    var _p = edge._private;
    var bpts = _p.rstyle.bezierPts;
    for (var i2 = 0; i2 < r2.bezierProjPcts.length; i2++) {
      var p3 = r2.bezierProjPcts[i2];
      bpts.push({
        x: qbezierAt$1(pts2[0], pts2[2], pts2[4], p3),
        y: qbezierAt$1(pts2[1], pts2[3], pts2[5], p3)
      });
    }
  }
  function polygon(context, points) {
    for (var i2 = 0; i2 < points.length; i2++) {
      var pt = points[i2];
      context.lineTo(pt.x, pt.y);
    }
  }
  function triangleBackcurve(context, points, controlPoint) {
    var firstPt;
    for (var i2 = 0; i2 < points.length; i2++) {
      var pt = points[i2];
      if (i2 === 0) {
        firstPt = pt;
      }
      context.lineTo(pt.x, pt.y);
    }
    context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y);
  }
  function triangleTee(context, trianglePoints, teePoints) {
    if (context.beginPath) {
      context.beginPath();
    }
    var triPts = trianglePoints;
    for (var i2 = 0; i2 < triPts.length; i2++) {
      var pt = triPts[i2];
      context.lineTo(pt.x, pt.y);
    }
    var teePts = teePoints;
    var firstTeePt = teePoints[0];
    context.moveTo(firstTeePt.x, firstTeePt.y);
    for (var i2 = 1; i2 < teePts.length; i2++) {
      var pt = teePts[i2];
      context.lineTo(pt.x, pt.y);
    }
    if (context.closePath) {
      context.closePath();
    }
  }
  function circleTriangle(context, trianglePoints, rx, ry, r2) {
    if (context.beginPath) {
      context.beginPath();
    }
    context.arc(rx, ry, r2, 0, Math.PI * 2, false);
    var triPts = trianglePoints;
    var firstTrPt = triPts[0];
    context.moveTo(firstTrPt.x, firstTrPt.y);
    for (var i2 = 0; i2 < triPts.length; i2++) {
      var pt = triPts[i2];
      context.lineTo(pt.x, pt.y);
    }
    if (context.closePath) {
      context.closePath();
    }
  }
  function circle$1(context, rx, ry, r2) {
    context.arc(rx, ry, r2, 0, Math.PI * 2, false);
  }
  function circle3(ctx, x5, y6, width3, height2) {
    var diameter = Math.min(width3, height2);
    var radius2 = diameter / 2;
    var centerX = x5 + width3 / 2;
    var centerY = y6 + height2 / 2;
    ctx.beginPath();
    ctx.arc(centerX, centerY, radius2, 0, Math.PI * 2);
    ctx.closePath();
  }
  function roundRect(ctx, x5, y6, width3, height2) {
    var radius2 = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : 5;
    var r2 = Math.min(radius2, width3 / 2, height2 / 2);
    ctx.beginPath();
    ctx.moveTo(x5 + r2, y6);
    ctx.lineTo(x5 + width3 - r2, y6);
    ctx.quadraticCurveTo(x5 + width3, y6, x5 + width3, y6 + r2);
    ctx.lineTo(x5 + width3, y6 + height2 - r2);
    ctx.quadraticCurveTo(x5 + width3, y6 + height2, x5 + width3 - r2, y6 + height2);
    ctx.lineTo(x5 + r2, y6 + height2);
    ctx.quadraticCurveTo(x5, y6 + height2, x5, y6 + height2 - r2);
    ctx.lineTo(x5, y6 + r2);
    ctx.quadraticCurveTo(x5, y6, x5 + r2, y6);
    ctx.closePath();
  }
  function compileShader(gl, type3, source) {
    var shader = gl.createShader(type3);
    gl.shaderSource(shader, source);
    gl.compileShader(shader);
    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
      throw new Error(gl.getShaderInfoLog(shader));
    }
    return shader;
  }
  function createProgram(gl, vertexSource, fragementSource) {
    var vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
    var fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, fragementSource);
    var program = gl.createProgram();
    gl.attachShader(program, vertexShader);
    gl.attachShader(program, fragmentShader);
    gl.linkProgram(program);
    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
      throw new Error("Could not initialize shaders");
    }
    return program;
  }
  function createTextureCanvas(r2, width3, height2) {
    if (height2 === void 0) {
      height2 = width3;
    }
    var canvas = r2.makeOffscreenCanvas(width3, height2);
    var ctx = canvas.context = canvas.getContext("2d");
    canvas.clear = function() {
      return ctx.clearRect(0, 0, canvas.width, canvas.height);
    };
    canvas.clear();
    return canvas;
  }
  function getEffectivePanZoom(r2) {
    var pixelRatio = r2.pixelRatio;
    var zoom2 = r2.cy.zoom();
    var pan2 = r2.cy.pan();
    return {
      zoom: zoom2 * pixelRatio,
      pan: {
        x: pan2.x * pixelRatio,
        y: pan2.y * pixelRatio
      }
    };
  }
  function getEffectiveZoom(r2) {
    var pixelRatio = r2.pixelRatio;
    var zoom2 = r2.cy.zoom();
    return zoom2 * pixelRatio;
  }
  function modelToRenderedPosition2(r2, pan2, zoom2, x5, y6) {
    var rx = x5 * zoom2 + pan2.x;
    var ry = y6 * zoom2 + pan2.y;
    ry = Math.round(r2.canvasHeight - ry);
    return [rx, ry];
  }
  function isSimpleShape(node2, renderTarget) {
    if (renderTarget.picking) {
      return true;
    } else {
      if (node2.pstyle("background-fill").value !== "solid") return false;
      if (node2.pstyle("background-image").strValue !== "none") return false;
      if (node2.pstyle("border-width").value === 0) return true;
      if (node2.pstyle("border-opacity").value === 0) return true;
      if (node2.pstyle("border-style").value !== "solid") return false;
      return true;
    }
  }
  function arrayEqual(a1, a2) {
    if (a1.length !== a2.length) {
      return false;
    }
    for (var i2 = 0; i2 < a1.length; i2++) {
      if (a1[i2] !== a2[i2]) {
        return false;
      }
    }
    return true;
  }
  function toWebGLColor(color2, opacity, outArray) {
    var r2 = color2[0] / 255;
    var g2 = color2[1] / 255;
    var b3 = color2[2] / 255;
    var a2 = opacity;
    var arr = outArray || new Array(4);
    arr[0] = r2 * a2;
    arr[1] = g2 * a2;
    arr[2] = b3 * a2;
    arr[3] = a2;
    return arr;
  }
  function indexToVec4(index, outArray) {
    var arr = outArray || new Array(4);
    arr[0] = (index >> 0 & 255) / 255;
    arr[1] = (index >> 8 & 255) / 255;
    arr[2] = (index >> 16 & 255) / 255;
    arr[3] = (index >> 24 & 255) / 255;
    return arr;
  }
  function vec4ToIndex(vec4) {
    return vec4[0] + (vec4[1] << 8) + (vec4[2] << 16) + (vec4[3] << 24);
  }
  function createTexture(gl, debugID) {
    var texture = gl.createTexture();
    texture.buffer = function(offscreenCanvas) {
      gl.bindTexture(gl.TEXTURE_2D, texture);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
      gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
      gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, offscreenCanvas);
      gl.generateMipmap(gl.TEXTURE_2D);
      gl.bindTexture(gl.TEXTURE_2D, null);
    };
    texture.deleteTexture = function() {
      gl.deleteTexture(texture);
    };
    return texture;
  }
  function getTypeInfo(gl, glslType) {
    switch (glslType) {
      case "float":
        return [1, gl.FLOAT, 4];
      case "vec2":
        return [2, gl.FLOAT, 4];
      case "vec3":
        return [3, gl.FLOAT, 4];
      case "vec4":
        return [4, gl.FLOAT, 4];
      case "int":
        return [1, gl.INT, 4];
      case "ivec2":
        return [2, gl.INT, 4];
    }
  }
  function createTypedArray(gl, glType, dataOrSize) {
    switch (glType) {
      case gl.FLOAT:
        return new Float32Array(dataOrSize);
      case gl.INT:
        return new Int32Array(dataOrSize);
    }
  }
  function createTypedArrayView(gl, glType, array4, stride, size4, i2) {
    switch (glType) {
      case gl.FLOAT:
        return new Float32Array(array4.buffer, i2 * stride, size4);
      case gl.INT:
        return new Int32Array(array4.buffer, i2 * stride, size4);
    }
  }
  function createBufferStaticDraw(gl, type3, attributeLoc, dataArray) {
    var _getTypeInfo = getTypeInfo(gl, type3), _getTypeInfo2 = _slicedToArray(_getTypeInfo, 2), size4 = _getTypeInfo2[0], glType = _getTypeInfo2[1];
    var data6 = createTypedArray(gl, glType, dataArray);
    var buffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
    gl.bufferData(gl.ARRAY_BUFFER, data6, gl.STATIC_DRAW);
    if (glType === gl.FLOAT) {
      gl.vertexAttribPointer(attributeLoc, size4, glType, false, 0, 0);
    } else if (glType === gl.INT) {
      gl.vertexAttribIPointer(attributeLoc, size4, glType, 0, 0);
    }
    gl.enableVertexAttribArray(attributeLoc);
    gl.bindBuffer(gl.ARRAY_BUFFER, null);
    return buffer;
  }
  function createBufferDynamicDraw(gl, instances, type3, attributeLoc) {
    var _getTypeInfo3 = getTypeInfo(gl, type3), _getTypeInfo4 = _slicedToArray(_getTypeInfo3, 3), size4 = _getTypeInfo4[0], glType = _getTypeInfo4[1], bytes = _getTypeInfo4[2];
    var dataArray = createTypedArray(gl, glType, instances * size4);
    var stride = size4 * bytes;
    var buffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
    gl.bufferData(gl.ARRAY_BUFFER, instances * stride, gl.DYNAMIC_DRAW);
    gl.enableVertexAttribArray(attributeLoc);
    if (glType === gl.FLOAT) {
      gl.vertexAttribPointer(attributeLoc, size4, glType, false, stride, 0);
    } else if (glType === gl.INT) {
      gl.vertexAttribIPointer(attributeLoc, size4, glType, stride, 0);
    }
    gl.vertexAttribDivisor(attributeLoc, 1);
    gl.bindBuffer(gl.ARRAY_BUFFER, null);
    var views = new Array(instances);
    for (var i2 = 0; i2 < instances; i2++) {
      views[i2] = createTypedArrayView(gl, glType, dataArray, stride, size4, i2);
    }
    buffer.dataArray = dataArray;
    buffer.stride = stride;
    buffer.size = size4;
    buffer.getView = function(i3) {
      return views[i3];
    };
    buffer.setPoint = function(i3, x5, y6) {
      var view = views[i3];
      view[0] = x5;
      view[1] = y6;
    };
    buffer.bufferSubData = function(count2) {
      gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
      if (count2) {
        gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray, 0, count2 * size4);
      } else {
        gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray);
      }
    };
    return buffer;
  }
  function create3x3MatrixBufferDynamicDraw(gl, instances, attributeLoc) {
    var matrixSize = 9;
    var matrixData = new Float32Array(instances * matrixSize);
    var matrixViews = new Array(instances);
    for (var i2 = 0; i2 < instances; i2++) {
      var byteOffset = i2 * matrixSize * 4;
      matrixViews[i2] = new Float32Array(matrixData.buffer, byteOffset, matrixSize);
    }
    var buffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
    gl.bufferData(gl.ARRAY_BUFFER, matrixData.byteLength, gl.DYNAMIC_DRAW);
    for (var _i = 0; _i < 3; _i++) {
      var loc = attributeLoc + _i;
      gl.enableVertexAttribArray(loc);
      gl.vertexAttribPointer(loc, 3, gl.FLOAT, false, 3 * 12, _i * 12);
      gl.vertexAttribDivisor(loc, 1);
    }
    gl.bindBuffer(gl.ARRAY_BUFFER, null);
    buffer.getMatrixView = function(i3) {
      return matrixViews[i3];
    };
    buffer.setData = function(matrix, i3) {
      matrixViews[i3].set(matrix, 0);
    };
    buffer.bufferSubData = function() {
      gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
      gl.bufferSubData(gl.ARRAY_BUFFER, 0, matrixData);
    };
    return buffer;
  }
  function createPickingFrameBuffer(gl) {
    var fb = gl.createFramebuffer();
    gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
    var targetTexture = gl.createTexture();
    gl.bindTexture(gl.TEXTURE_2D, targetTexture);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, targetTexture, 0);
    gl.bindFramebuffer(gl.FRAMEBUFFER, null);
    fb.setFramebufferAttachmentSizes = function(width3, height2) {
      gl.bindTexture(gl.TEXTURE_2D, targetTexture);
      gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width3, height2, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
    };
    return fb;
  }
  function create3() {
    var out = new ARRAY_TYPE(9);
    if (ARRAY_TYPE != Float32Array) {
      out[1] = 0;
      out[2] = 0;
      out[3] = 0;
      out[5] = 0;
      out[6] = 0;
      out[7] = 0;
    }
    out[0] = 1;
    out[4] = 1;
    out[8] = 1;
    return out;
  }
  function identity6(out) {
    out[0] = 1;
    out[1] = 0;
    out[2] = 0;
    out[3] = 0;
    out[4] = 1;
    out[5] = 0;
    out[6] = 0;
    out[7] = 0;
    out[8] = 1;
    return out;
  }
  function multiply(out, a2, b3) {
    var a00 = a2[0], a01 = a2[1], a02 = a2[2];
    var a10 = a2[3], a11 = a2[4], a12 = a2[5];
    var a20 = a2[6], a21 = a2[7], a22 = a2[8];
    var b00 = b3[0], b01 = b3[1], b02 = b3[2];
    var b10 = b3[3], b11 = b3[4], b12 = b3[5];
    var b20 = b3[6], b21 = b3[7], b22 = b3[8];
    out[0] = b00 * a00 + b01 * a10 + b02 * a20;
    out[1] = b00 * a01 + b01 * a11 + b02 * a21;
    out[2] = b00 * a02 + b01 * a12 + b02 * a22;
    out[3] = b10 * a00 + b11 * a10 + b12 * a20;
    out[4] = b10 * a01 + b11 * a11 + b12 * a21;
    out[5] = b10 * a02 + b11 * a12 + b12 * a22;
    out[6] = b20 * a00 + b21 * a10 + b22 * a20;
    out[7] = b20 * a01 + b21 * a11 + b22 * a21;
    out[8] = b20 * a02 + b21 * a12 + b22 * a22;
    return out;
  }
  function translate(out, a2, v3) {
    var a00 = a2[0], a01 = a2[1], a02 = a2[2], a10 = a2[3], a11 = a2[4], a12 = a2[5], a20 = a2[6], a21 = a2[7], a22 = a2[8], x5 = v3[0], y6 = v3[1];
    out[0] = a00;
    out[1] = a01;
    out[2] = a02;
    out[3] = a10;
    out[4] = a11;
    out[5] = a12;
    out[6] = x5 * a00 + y6 * a10 + a20;
    out[7] = x5 * a01 + y6 * a11 + a21;
    out[8] = x5 * a02 + y6 * a12 + a22;
    return out;
  }
  function rotate(out, a2, rad) {
    var a00 = a2[0], a01 = a2[1], a02 = a2[2], a10 = a2[3], a11 = a2[4], a12 = a2[5], a20 = a2[6], a21 = a2[7], a22 = a2[8], s2 = Math.sin(rad), c3 = Math.cos(rad);
    out[0] = c3 * a00 + s2 * a10;
    out[1] = c3 * a01 + s2 * a11;
    out[2] = c3 * a02 + s2 * a12;
    out[3] = c3 * a10 - s2 * a00;
    out[4] = c3 * a11 - s2 * a01;
    out[5] = c3 * a12 - s2 * a02;
    out[6] = a20;
    out[7] = a21;
    out[8] = a22;
    return out;
  }
  function scale(out, a2, v3) {
    var x5 = v3[0], y6 = v3[1];
    out[0] = x5 * a2[0];
    out[1] = x5 * a2[1];
    out[2] = x5 * a2[2];
    out[3] = y6 * a2[3];
    out[4] = y6 * a2[4];
    out[5] = y6 * a2[5];
    out[6] = a2[6];
    out[7] = a2[7];
    out[8] = a2[8];
    return out;
  }
  function projection(out, width3, height2) {
    out[0] = 2 / width3;
    out[1] = 0;
    out[2] = 0;
    out[3] = 0;
    out[4] = -2 / height2;
    out[5] = 0;
    out[6] = -1;
    out[7] = 1;
    out[8] = 1;
    return out;
  }
  function intersection2(set1, set22) {
    if (set1.intersection) return set1.intersection(set22);
    else return new Set(_toConsumableArray(set1).filter(function(x5) {
      return set22.has(x5);
    }));
  }
  function getBGColor(r2) {
    var container2 = r2.cy.container();
    var cssColor = container2 && container2.style && container2.style.backgroundColor || "white";
    return color2tuple(cssColor);
  }
  function getLabelLines(ele, prefix) {
    var rs = ele._private.rscratch;
    return getPrefixedProperty(rs, "labelWrapCachedLines", prefix) || [];
  }
  function overrideCanvasRendererFunctions(r2) {
    {
      var renderCanvas = r2.render;
      r2.render = function(options2) {
        options2 = options2 || {};
        var cy = r2.cy;
        if (r2.webgl) {
          if (cy.zoom() > maxZoom$1) {
            clearWebgl(r2);
            renderCanvas.call(r2, options2);
          } else {
            clearCanvas(r2);
            renderWebgl(r2, options2, RENDER_TARGET.SCREEN);
          }
        }
      };
    }
    {
      var baseFunc = r2.matchCanvasSize;
      r2.matchCanvasSize = function(container2) {
        baseFunc.call(r2, container2);
        r2.pickingFrameBuffer.setFramebufferAttachmentSizes(r2.canvasWidth, r2.canvasHeight);
        r2.pickingFrameBuffer.needsDraw = true;
      };
    }
    {
      r2.findNearestElements = function(x5, y6, interactiveElementsOnly, isTouch) {
        return findNearestElementsWebgl(r2, x5, y6);
      };
    }
    {
      var _baseFunc = r2.invalidateCachedZSortedEles;
      r2.invalidateCachedZSortedEles = function() {
        _baseFunc.call(r2);
        r2.pickingFrameBuffer.needsDraw = true;
      };
    }
    {
      var _baseFunc2 = r2.notify;
      r2.notify = function(eventName, eles) {
        _baseFunc2.call(r2, eventName, eles);
        if (eventName === "viewport" || eventName === "bounds") {
          r2.pickingFrameBuffer.needsDraw = true;
        } else if (eventName === "background") {
          r2.drawing.invalidate(eles, {
            type: "node-body"
          });
        }
      };
    }
  }
  function clearWebgl(r2) {
    var gl = r2.data.contexts[r2.WEBGL];
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
  }
  function clearCanvas(r2) {
    var clear24 = /* @__PURE__ */ __name(function clear25(context) {
      context.save();
      context.setTransform(1, 0, 0, 1, 0, 0);
      context.clearRect(0, 0, r2.canvasWidth, r2.canvasHeight);
      context.restore();
    }, "clear");
    clear24(r2.data.contexts[r2.NODE]);
    clear24(r2.data.contexts[r2.DRAG]);
  }
  function createPanZoomMatrix(r2) {
    var width3 = r2.canvasWidth;
    var height2 = r2.canvasHeight;
    var _util$getEffectivePan = getEffectivePanZoom(r2), pan2 = _util$getEffectivePan.pan, zoom2 = _util$getEffectivePan.zoom;
    var transform8 = create3();
    translate(transform8, transform8, [pan2.x, pan2.y]);
    scale(transform8, transform8, [zoom2, zoom2]);
    var projection$1 = create3();
    projection(projection$1, width3, height2);
    var product = create3();
    multiply(product, projection$1, transform8);
    return product;
  }
  function setContextTransform(r2, context) {
    var width3 = r2.canvasWidth;
    var height2 = r2.canvasHeight;
    var _util$getEffectivePan2 = getEffectivePanZoom(r2), pan2 = _util$getEffectivePan2.pan, zoom2 = _util$getEffectivePan2.zoom;
    context.setTransform(1, 0, 0, 1, 0, 0);
    context.clearRect(0, 0, width3, height2);
    context.translate(pan2.x, pan2.y);
    context.scale(zoom2, zoom2);
  }
  function drawSelectionRectangle(r2, options2) {
    r2.drawSelectionRectangle(options2, function(context) {
      return setContextTransform(r2, context);
    });
  }
  function drawAxes(r2) {
    var context = r2.data.contexts[r2.NODE];
    context.save();
    setContextTransform(r2, context);
    context.strokeStyle = "rgba(0, 0, 0, 0.3)";
    context.beginPath();
    context.moveTo(-1e3, 0);
    context.lineTo(1e3, 0);
    context.stroke();
    context.beginPath();
    context.moveTo(0, -1e3);
    context.lineTo(0, 1e3);
    context.stroke();
    context.restore();
  }
  function drawAtlases(r2) {
    var draw34 = /* @__PURE__ */ __name(function draw35(drawing, name, row) {
      var collection4 = drawing.atlasManager.getAtlasCollection(name);
      var context = r2.data.contexts[r2.NODE];
      var atlases = collection4.atlases;
      for (var _i = 0; _i < atlases.length; _i++) {
        var atlas = atlases[_i];
        var canvas = atlas.canvas;
        if (canvas) {
          var w4 = canvas.width;
          var h3 = canvas.height;
          var x5 = w4 * _i;
          var y6 = canvas.height * row;
          var scale3 = 0.4;
          context.save();
          context.scale(scale3, scale3);
          context.drawImage(canvas, x5, y6);
          context.strokeStyle = "black";
          context.rect(x5, y6, w4, h3);
          context.stroke();
          context.restore();
        }
      }
    }, "draw");
    var i2 = 0;
    draw34(r2.drawing, "node", i2++);
    draw34(r2.drawing, "label", i2++);
  }
  function getPickingIndexes(r2, mX1, mY1, mX2, mY2) {
    var x5, y6, w4, h3;
    var _util$getEffectivePan3 = getEffectivePanZoom(r2), pan2 = _util$getEffectivePan3.pan, zoom2 = _util$getEffectivePan3.zoom;
    {
      var _util$modelToRendered = modelToRenderedPosition2(r2, pan2, zoom2, mX1, mY1), _util$modelToRendered2 = _slicedToArray(_util$modelToRendered, 2), cX1 = _util$modelToRendered2[0], cY1 = _util$modelToRendered2[1];
      var t4 = 6;
      x5 = cX1 - t4 / 2;
      y6 = cY1 - t4 / 2;
      w4 = t4;
      h3 = t4;
    }
    if (w4 === 0 || h3 === 0) {
      return [];
    }
    var gl = r2.data.contexts[r2.WEBGL];
    gl.bindFramebuffer(gl.FRAMEBUFFER, r2.pickingFrameBuffer);
    if (r2.pickingFrameBuffer.needsDraw) {
      gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
      renderWebgl(r2, null, RENDER_TARGET.PICKING);
      r2.pickingFrameBuffer.needsDraw = false;
    }
    var n2 = w4 * h3;
    var data6 = new Uint8Array(n2 * 4);
    gl.readPixels(x5, y6, w4, h3, gl.RGBA, gl.UNSIGNED_BYTE, data6);
    gl.bindFramebuffer(gl.FRAMEBUFFER, null);
    var indexes = /* @__PURE__ */ new Set();
    for (var i2 = 0; i2 < n2; i2++) {
      var pixel = data6.slice(i2 * 4, i2 * 4 + 4);
      var index = vec4ToIndex(pixel) - 1;
      if (index >= 0) {
        indexes.add(index);
      }
    }
    return indexes;
  }
  function findNearestElementsWebgl(r2, x5, y6) {
    var indexes = getPickingIndexes(r2, x5, y6);
    var eles = r2.getCachedZSortedEles();
    var node2, edge;
    var _iterator = _createForOfIteratorHelper(indexes), _step;
    try {
      for (_iterator.s(); !(_step = _iterator.n()).done; ) {
        var index = _step.value;
        var ele = eles[index];
        if (!node2 && ele.isNode()) {
          node2 = ele;
        }
        if (!edge && ele.isEdge()) {
          edge = ele;
        }
        if (node2 && edge) {
          break;
        }
      }
    } catch (err) {
      _iterator.e(err);
    } finally {
      _iterator.f();
    }
    return [node2, edge].filter(Boolean);
  }
  function drawEle(r2, index, ele) {
    var drawing = r2.drawing;
    index += 1;
    if (ele.isNode()) {
      drawing.drawNode(ele, index, "node-underlay");
      drawing.drawNode(ele, index, "node-body");
      drawing.drawTexture(ele, index, "label");
      drawing.drawNode(ele, index, "node-overlay");
    } else {
      drawing.drawEdgeLine(ele, index);
      drawing.drawEdgeArrow(ele, index, "source");
      drawing.drawEdgeArrow(ele, index, "target");
      drawing.drawTexture(ele, index, "label");
      drawing.drawTexture(ele, index, "edge-source-label");
      drawing.drawTexture(ele, index, "edge-target-label");
    }
  }
  function renderWebgl(r2, options2, renderTarget) {
    var start3;
    if (r2.webglDebug) {
      start3 = performance.now();
    }
    var drawing = r2.drawing;
    var eleCount = 0;
    if (renderTarget.screen) {
      if (r2.data.canvasNeedsRedraw[r2.SELECT_BOX]) {
        drawSelectionRectangle(r2, options2);
      }
    }
    if (r2.data.canvasNeedsRedraw[r2.NODE] || renderTarget.picking) {
      var gl = r2.data.contexts[r2.WEBGL];
      if (renderTarget.screen) {
        gl.clearColor(0, 0, 0, 0);
        gl.enable(gl.BLEND);
        gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
      } else {
        gl.disable(gl.BLEND);
      }
      gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
      gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
      var panZoomMatrix = createPanZoomMatrix(r2);
      var eles = r2.getCachedZSortedEles();
      eleCount = eles.length;
      drawing.startFrame(panZoomMatrix, renderTarget);
      if (renderTarget.screen) {
        for (var i2 = 0; i2 < eles.nondrag.length; i2++) {
          drawEle(r2, i2, eles.nondrag[i2]);
        }
        for (var _i2 = 0; _i2 < eles.drag.length; _i2++) {
          drawEle(r2, _i2, eles.drag[_i2]);
        }
      } else if (renderTarget.picking) {
        for (var _i3 = 0; _i3 < eles.length; _i3++) {
          drawEle(r2, _i3, eles[_i3]);
        }
      }
      drawing.endFrame();
      if (renderTarget.screen && r2.webglDebugShowAtlases) {
        drawAxes(r2);
        drawAtlases(r2);
      }
      r2.data.canvasNeedsRedraw[r2.NODE] = false;
      r2.data.canvasNeedsRedraw[r2.DRAG] = false;
    }
    if (r2.webglDebug) {
      var end2 = performance.now();
      var compact2 = false;
      var time4 = Math.ceil(end2 - start3);
      var debugInfo = drawing.getDebugInfo();
      var report = ["".concat(eleCount, " elements"), "".concat(debugInfo.totalInstances, " instances"), "".concat(debugInfo.batchCount, " batches"), "".concat(debugInfo.totalAtlases, " atlases"), "".concat(debugInfo.wrappedCount, " wrapped textures"), "".concat(debugInfo.simpleCount, " simple shapes")].join(", ");
      if (compact2) {
        console.log("WebGL (".concat(renderTarget.name, ") - time ").concat(time4, "ms, ").concat(report));
      } else {
        console.log("WebGL (".concat(renderTarget.name, ") - frame time ").concat(time4, "ms"));
        console.log("Totals:");
        console.log("  ".concat(report));
        console.log("Texture Atlases Used:");
        var atlasInfo = debugInfo.atlasInfo;
        var _iterator2 = _createForOfIteratorHelper(atlasInfo), _step2;
        try {
          for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
            var info2 = _step2.value;
            console.log("  ".concat(info2.type, ": ").concat(info2.keyCount, " keys, ").concat(info2.atlasCount, " atlases"));
          }
        } catch (err) {
          _iterator2.e(err);
        } finally {
          _iterator2.f();
        }
        console.log("");
      }
    }
    if (r2.data.gc) {
      console.log("Garbage Collect!");
      r2.data.gc = false;
      drawing.gc();
    }
  }
  function b64ToBlob(b64, mimeType) {
    var bytes = atob(b64);
    var buff = new ArrayBuffer(bytes.length);
    var buffUint8 = new Uint8Array(buff);
    for (var i2 = 0; i2 < bytes.length; i2++) {
      buffUint8[i2] = bytes.charCodeAt(i2);
    }
    return new Blob([buff], {
      type: mimeType
    });
  }
  function b64UriToB64(b64uri) {
    var i2 = b64uri.indexOf(",");
    return b64uri.substr(i2 + 1);
  }
  function output(options2, canvas, mimeType) {
    var getB64Uri = /* @__PURE__ */ __name(function getB64Uri2() {
      return canvas.toDataURL(mimeType, options2.quality);
    }, "getB64Uri");
    switch (options2.output) {
      case "blob-promise":
        return new Promise$1(function(resolve2, reject3) {
          try {
            canvas.toBlob(function(blob) {
              if (blob != null) {
                resolve2(blob);
              } else {
                reject3(new Error("`canvas.toBlob()` sent a null value in its callback"));
              }
            }, mimeType, options2.quality);
          } catch (err) {
            reject3(err);
          }
        });
      case "blob":
        return b64ToBlob(b64UriToB64(getB64Uri()), mimeType);
      case "base64":
        return b64UriToB64(getB64Uri());
      case "base64uri":
      default:
        return getB64Uri();
    }
  }
  function CanvasRenderer(options2) {
    var r2 = this;
    var containerWindow = r2.cy.window();
    var document2 = containerWindow.document;
    if (options2.webgl) {
      CRp.CANVAS_LAYERS = r2.CANVAS_LAYERS = 4;
      console.log("webgl rendering enabled");
    }
    r2.data = {
      canvases: new Array(CRp.CANVAS_LAYERS),
      contexts: new Array(CRp.CANVAS_LAYERS),
      canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS),
      bufferCanvases: new Array(CRp.BUFFER_COUNT),
      bufferContexts: new Array(CRp.CANVAS_LAYERS)
    };
    var tapHlOffAttr = "-webkit-tap-highlight-color";
    var tapHlOffStyle = "rgba(0,0,0,0)";
    r2.data.canvasContainer = document2.createElement("div");
    var containerStyle = r2.data.canvasContainer.style;
    r2.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle;
    containerStyle.position = "relative";
    containerStyle.zIndex = "0";
    containerStyle.overflow = "hidden";
    var container2 = options2.cy.container();
    container2.appendChild(r2.data.canvasContainer);
    container2.style[tapHlOffAttr] = tapHlOffStyle;
    var styleMap2 = {
      "-webkit-user-select": "none",
      "-moz-user-select": "-moz-none",
      "user-select": "none",
      "-webkit-tap-highlight-color": "rgba(0,0,0,0)",
      "outline-style": "none"
    };
    if (ms()) {
      styleMap2["-ms-touch-action"] = "none";
      styleMap2["touch-action"] = "none";
    }
    for (var i2 = 0; i2 < CRp.CANVAS_LAYERS; i2++) {
      var canvas = r2.data.canvases[i2] = document2.createElement("canvas");
      var type3 = CRp.CANVAS_TYPES[i2];
      r2.data.contexts[i2] = canvas.getContext(type3);
      if (!r2.data.contexts[i2]) {
        error("Could not create canvas of type " + type3);
      }
      Object.keys(styleMap2).forEach(function(k2) {
        canvas.style[k2] = styleMap2[k2];
      });
      canvas.style.position = "absolute";
      canvas.setAttribute("data-id", "layer" + i2);
      canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i2);
      r2.data.canvasContainer.appendChild(canvas);
      r2.data.canvasNeedsRedraw[i2] = false;
    }
    r2.data.topCanvas = r2.data.canvases[0];
    r2.data.canvases[CRp.NODE].setAttribute("data-id", "layer" + CRp.NODE + "-node");
    r2.data.canvases[CRp.SELECT_BOX].setAttribute("data-id", "layer" + CRp.SELECT_BOX + "-selectbox");
    r2.data.canvases[CRp.DRAG].setAttribute("data-id", "layer" + CRp.DRAG + "-drag");
    if (r2.data.canvases[CRp.WEBGL]) {
      r2.data.canvases[CRp.WEBGL].setAttribute("data-id", "layer" + CRp.WEBGL + "-webgl");
    }
    for (var i2 = 0; i2 < CRp.BUFFER_COUNT; i2++) {
      r2.data.bufferCanvases[i2] = document2.createElement("canvas");
      r2.data.bufferContexts[i2] = r2.data.bufferCanvases[i2].getContext("2d");
      r2.data.bufferCanvases[i2].style.position = "absolute";
      r2.data.bufferCanvases[i2].setAttribute("data-id", "buffer" + i2);
      r2.data.bufferCanvases[i2].style.zIndex = String(-i2 - 1);
      r2.data.bufferCanvases[i2].style.visibility = "hidden";
    }
    r2.pathsEnabled = true;
    var emptyBb = makeBoundingBox();
    var getBoxCenter = /* @__PURE__ */ __name(function getBoxCenter2(bb) {
      return {
        x: (bb.x1 + bb.x2) / 2,
        y: (bb.y1 + bb.y2) / 2
      };
    }, "getBoxCenter");
    var getCenterOffset = /* @__PURE__ */ __name(function getCenterOffset2(bb) {
      return {
        x: -bb.w / 2,
        y: -bb.h / 2
      };
    }, "getCenterOffset");
    var backgroundTimestampHasChanged = /* @__PURE__ */ __name(function backgroundTimestampHasChanged2(ele) {
      var _p = ele[0]._private;
      var same2 = _p.oldBackgroundTimestamp === _p.backgroundTimestamp;
      return !same2;
    }, "backgroundTimestampHasChanged");
    var getStyleKey = /* @__PURE__ */ __name(function getStyleKey2(ele) {
      return ele[0]._private.nodeKey;
    }, "getStyleKey");
    var getLabelKey = /* @__PURE__ */ __name(function getLabelKey2(ele) {
      return ele[0]._private.labelStyleKey;
    }, "getLabelKey");
    var getSourceLabelKey = /* @__PURE__ */ __name(function getSourceLabelKey2(ele) {
      return ele[0]._private.sourceLabelStyleKey;
    }, "getSourceLabelKey");
    var getTargetLabelKey = /* @__PURE__ */ __name(function getTargetLabelKey2(ele) {
      return ele[0]._private.targetLabelStyleKey;
    }, "getTargetLabelKey");
    var drawElement = /* @__PURE__ */ __name(function drawElement2(context, ele, bb, scaledLabelShown, useEleOpacity) {
      return r2.drawElement(context, ele, bb, false, false, useEleOpacity);
    }, "drawElement");
    var drawLabel4 = /* @__PURE__ */ __name(function drawLabel5(context, ele, bb, scaledLabelShown, useEleOpacity) {
      return r2.drawElementText(context, ele, bb, scaledLabelShown, "main", useEleOpacity);
    }, "drawLabel");
    var drawSourceLabel = /* @__PURE__ */ __name(function drawSourceLabel2(context, ele, bb, scaledLabelShown, useEleOpacity) {
      return r2.drawElementText(context, ele, bb, scaledLabelShown, "source", useEleOpacity);
    }, "drawSourceLabel");
    var drawTargetLabel = /* @__PURE__ */ __name(function drawTargetLabel2(context, ele, bb, scaledLabelShown, useEleOpacity) {
      return r2.drawElementText(context, ele, bb, scaledLabelShown, "target", useEleOpacity);
    }, "drawTargetLabel");
    var getElementBox = /* @__PURE__ */ __name(function getElementBox2(ele) {
      ele.boundingBox();
      return ele[0]._private.bodyBounds;
    }, "getElementBox");
    var getLabelBox = /* @__PURE__ */ __name(function getLabelBox2(ele) {
      ele.boundingBox();
      return ele[0]._private.labelBounds.main || emptyBb;
    }, "getLabelBox");
    var getSourceLabelBox = /* @__PURE__ */ __name(function getSourceLabelBox2(ele) {
      ele.boundingBox();
      return ele[0]._private.labelBounds.source || emptyBb;
    }, "getSourceLabelBox");
    var getTargetLabelBox = /* @__PURE__ */ __name(function getTargetLabelBox2(ele) {
      ele.boundingBox();
      return ele[0]._private.labelBounds.target || emptyBb;
    }, "getTargetLabelBox");
    var isLabelVisibleAtScale = /* @__PURE__ */ __name(function isLabelVisibleAtScale2(ele, scaledLabelShown) {
      return scaledLabelShown;
    }, "isLabelVisibleAtScale");
    var getElementRotationPoint = /* @__PURE__ */ __name(function getElementRotationPoint2(ele) {
      return getBoxCenter(getElementBox(ele));
    }, "getElementRotationPoint");
    var addTextMargin = /* @__PURE__ */ __name(function addTextMargin2(prefix, pt, ele) {
      var pre = prefix ? prefix + "-" : "";
      return {
        x: pt.x + ele.pstyle(pre + "text-margin-x").pfValue,
        y: pt.y + ele.pstyle(pre + "text-margin-y").pfValue
      };
    }, "addTextMargin");
    var getRsPt = /* @__PURE__ */ __name(function getRsPt2(ele, x5, y6) {
      var rs = ele[0]._private.rscratch;
      return {
        x: rs[x5],
        y: rs[y6]
      };
    }, "getRsPt");
    var getLabelRotationPoint = /* @__PURE__ */ __name(function getLabelRotationPoint2(ele) {
      return addTextMargin("", getRsPt(ele, "labelX", "labelY"), ele);
    }, "getLabelRotationPoint");
    var getSourceLabelRotationPoint = /* @__PURE__ */ __name(function getSourceLabelRotationPoint2(ele) {
      return addTextMargin("source", getRsPt(ele, "sourceLabelX", "sourceLabelY"), ele);
    }, "getSourceLabelRotationPoint");
    var getTargetLabelRotationPoint = /* @__PURE__ */ __name(function getTargetLabelRotationPoint2(ele) {
      return addTextMargin("target", getRsPt(ele, "targetLabelX", "targetLabelY"), ele);
    }, "getTargetLabelRotationPoint");
    var getElementRotationOffset = /* @__PURE__ */ __name(function getElementRotationOffset2(ele) {
      return getCenterOffset(getElementBox(ele));
    }, "getElementRotationOffset");
    var getSourceLabelRotationOffset = /* @__PURE__ */ __name(function getSourceLabelRotationOffset2(ele) {
      return getCenterOffset(getSourceLabelBox(ele));
    }, "getSourceLabelRotationOffset");
    var getTargetLabelRotationOffset = /* @__PURE__ */ __name(function getTargetLabelRotationOffset2(ele) {
      return getCenterOffset(getTargetLabelBox(ele));
    }, "getTargetLabelRotationOffset");
    var getLabelRotationOffset = /* @__PURE__ */ __name(function getLabelRotationOffset2(ele) {
      var bb = getLabelBox(ele);
      var p3 = getCenterOffset(getLabelBox(ele));
      if (ele.isNode()) {
        switch (ele.pstyle("text-halign").value) {
          case "left":
            p3.x = -bb.w - (bb.leftPad || 0);
            break;
          case "right":
            p3.x = -(bb.rightPad || 0);
            break;
        }
        switch (ele.pstyle("text-valign").value) {
          case "top":
            p3.y = -bb.h - (bb.topPad || 0);
            break;
          case "bottom":
            p3.y = -(bb.botPad || 0);
            break;
        }
      }
      return p3;
    }, "getLabelRotationOffset");
    var eleTxrCache = r2.data.eleTxrCache = new ElementTextureCache(r2, {
      getKey: getStyleKey,
      doesEleInvalidateKey: backgroundTimestampHasChanged,
      drawElement,
      getBoundingBox: getElementBox,
      getRotationPoint: getElementRotationPoint,
      getRotationOffset: getElementRotationOffset,
      allowEdgeTxrCaching: false,
      allowParentTxrCaching: false
    });
    var lblTxrCache = r2.data.lblTxrCache = new ElementTextureCache(r2, {
      getKey: getLabelKey,
      drawElement: drawLabel4,
      getBoundingBox: getLabelBox,
      getRotationPoint: getLabelRotationPoint,
      getRotationOffset: getLabelRotationOffset,
      isVisible: isLabelVisibleAtScale
    });
    var slbTxrCache = r2.data.slbTxrCache = new ElementTextureCache(r2, {
      getKey: getSourceLabelKey,
      drawElement: drawSourceLabel,
      getBoundingBox: getSourceLabelBox,
      getRotationPoint: getSourceLabelRotationPoint,
      getRotationOffset: getSourceLabelRotationOffset,
      isVisible: isLabelVisibleAtScale
    });
    var tlbTxrCache = r2.data.tlbTxrCache = new ElementTextureCache(r2, {
      getKey: getTargetLabelKey,
      drawElement: drawTargetLabel,
      getBoundingBox: getTargetLabelBox,
      getRotationPoint: getTargetLabelRotationPoint,
      getRotationOffset: getTargetLabelRotationOffset,
      isVisible: isLabelVisibleAtScale
    });
    var lyrTxrCache = r2.data.lyrTxrCache = new LayeredTextureCache(r2);
    r2.onUpdateEleCalcs(/* @__PURE__ */ __name(function invalidateTextureCaches(willDraw, eles) {
      eleTxrCache.invalidateElements(eles);
      lblTxrCache.invalidateElements(eles);
      slbTxrCache.invalidateElements(eles);
      tlbTxrCache.invalidateElements(eles);
      lyrTxrCache.invalidateElements(eles);
      for (var _i = 0; _i < eles.length; _i++) {
        var _p = eles[_i]._private;
        _p.oldBackgroundTimestamp = _p.backgroundTimestamp;
      }
    }, "invalidateTextureCaches"));
    var refineInLayers = /* @__PURE__ */ __name(function refineInLayers2(reqs) {
      for (var i3 = 0; i3 < reqs.length; i3++) {
        lyrTxrCache.enqueueElementRefinement(reqs[i3].ele);
      }
    }, "refineInLayers");
    eleTxrCache.onDequeue(refineInLayers);
    lblTxrCache.onDequeue(refineInLayers);
    slbTxrCache.onDequeue(refineInLayers);
    tlbTxrCache.onDequeue(refineInLayers);
    if (options2.webgl) {
      r2.initWebgl(options2, {
        getStyleKey,
        getLabelKey,
        getSourceLabelKey,
        getTargetLabelKey,
        drawElement,
        drawLabel: drawLabel4,
        drawSourceLabel,
        drawTargetLabel,
        getElementBox,
        getLabelBox,
        getSourceLabelBox,
        getTargetLabelBox,
        getElementRotationPoint,
        getElementRotationOffset,
        getLabelRotationPoint,
        getSourceLabelRotationPoint,
        getTargetLabelRotationPoint,
        getLabelRotationOffset,
        getSourceLabelRotationOffset,
        getTargetLabelRotationOffset
      });
    }
  }
  function setExtension(type3, name, registrant) {
    var ext = registrant;
    var overrideErr = /* @__PURE__ */ __name(function overrideErr2(field) {
      warn("Can not register `" + name + "` for `" + type3 + "` since `" + field + "` already exists in the prototype and can not be overridden");
    }, "overrideErr");
    if (type3 === "core") {
      if (Core.prototype[name]) {
        return overrideErr(name);
      } else {
        Core.prototype[name] = registrant;
      }
    } else if (type3 === "collection") {
      if (Collection.prototype[name]) {
        return overrideErr(name);
      } else {
        Collection.prototype[name] = registrant;
      }
    } else if (type3 === "layout") {
      var Layout2 = /* @__PURE__ */ __name(function Layout3(options2) {
        this.options = options2;
        registrant.call(this, options2);
        if (!plainObject(this._private)) {
          this._private = {};
        }
        this._private.cy = options2.cy;
        this._private.listeners = [];
        this.createEmitter();
      }, "Layout");
      var layoutProto = Layout2.prototype = Object.create(registrant.prototype);
      var optLayoutFns = [];
      for (var i2 = 0; i2 < optLayoutFns.length; i2++) {
        var fnName = optLayoutFns[i2];
        layoutProto[fnName] = layoutProto[fnName] || function() {
          return this;
        };
      }
      if (layoutProto.start && !layoutProto.run) {
        layoutProto.run = function() {
          this.start();
          return this;
        };
      } else if (!layoutProto.start && layoutProto.run) {
        layoutProto.start = function() {
          this.run();
          return this;
        };
      }
      var regStop = registrant.prototype.stop;
      layoutProto.stop = function() {
        var opts = this.options;
        if (opts && opts.animate) {
          var anis = this.animations;
          if (anis) {
            for (var _i = 0; _i < anis.length; _i++) {
              anis[_i].stop();
            }
          }
        }
        if (regStop) {
          regStop.call(this);
        } else {
          this.emit("layoutstop");
        }
        return this;
      };
      if (!layoutProto.destroy) {
        layoutProto.destroy = function() {
          return this;
        };
      }
      layoutProto.cy = function() {
        return this._private.cy;
      };
      var getCy = /* @__PURE__ */ __name(function getCy2(layout7) {
        return layout7._private.cy;
      }, "getCy");
      var emitterOpts = {
        addEventFields: /* @__PURE__ */ __name(function addEventFields4(layout7, evt) {
          evt.layout = layout7;
          evt.cy = getCy(layout7);
          evt.target = layout7;
        }, "addEventFields"),
        bubble: /* @__PURE__ */ __name(function bubble3() {
          return true;
        }, "bubble"),
        parent: /* @__PURE__ */ __name(function parent4(layout7) {
          return getCy(layout7);
        }, "parent")
      };
      extend4(layoutProto, {
        createEmitter: /* @__PURE__ */ __name(function createEmitter3() {
          this._private.emitter = new Emitter(emitterOpts, this);
          return this;
        }, "createEmitter"),
        emitter: /* @__PURE__ */ __name(function emitter3() {
          return this._private.emitter;
        }, "emitter"),
        on: /* @__PURE__ */ __name(function on3(evt, cb) {
          this.emitter().on(evt, cb);
          return this;
        }, "on"),
        one: /* @__PURE__ */ __name(function one4(evt, cb) {
          this.emitter().one(evt, cb);
          return this;
        }, "one"),
        once: /* @__PURE__ */ __name(function once3(evt, cb) {
          this.emitter().one(evt, cb);
          return this;
        }, "once"),
        removeListener: /* @__PURE__ */ __name(function removeListener3(evt, cb) {
          this.emitter().removeListener(evt, cb);
          return this;
        }, "removeListener"),
        removeAllListeners: /* @__PURE__ */ __name(function removeAllListeners3() {
          this.emitter().removeAllListeners();
          return this;
        }, "removeAllListeners"),
        emit: /* @__PURE__ */ __name(function emit3(evt, params) {
          this.emitter().emit(evt, params);
          return this;
        }, "emit")
      });
      define2.eventAliasesOn(layoutProto);
      ext = Layout2;
    } else if (type3 === "renderer" && name !== "null" && name !== "base") {
      var BaseRenderer3 = getExtension("renderer", "base");
      var bProto = BaseRenderer3.prototype;
      var RegistrantRenderer = registrant;
      var rProto = registrant.prototype;
      var Renderer = /* @__PURE__ */ __name(function Renderer2() {
        BaseRenderer3.apply(this, arguments);
        RegistrantRenderer.apply(this, arguments);
      }, "Renderer");
      var proto = Renderer.prototype;
      for (var pName in bProto) {
        var pVal = bProto[pName];
        var existsInR = rProto[pName] != null;
        if (existsInR) {
          return overrideErr(pName);
        }
        proto[pName] = pVal;
      }
      for (var _pName in rProto) {
        proto[_pName] = rProto[_pName];
      }
      bProto.clientFunctions.forEach(function(name2) {
        proto[name2] = proto[name2] || function() {
          error("Renderer does not implement `renderer." + name2 + "()` on its prototype");
        };
      });
      ext = Renderer;
    } else if (type3 === "__proto__" || type3 === "constructor" || type3 === "prototype") {
      return error(type3 + " is an illegal type to be registered, possibly lead to prototype pollutions");
    }
    return setMap({
      map: extensions,
      keys: [type3, name],
      value: ext
    });
  }
  function getExtension(type3, name) {
    return getMap({
      map: extensions,
      keys: [type3, name]
    });
  }
  function setModule(type3, name, moduleType, moduleName, registrant) {
    return setMap({
      map: modules,
      keys: [type3, name, moduleType, moduleName],
      value: registrant
    });
  }
  function getModule(type3, name, moduleType, moduleName) {
    return getMap({
      map: modules,
      keys: [type3, name, moduleType, moduleName]
    });
  }
  var _window, navigator2, typeofstr, typeofobj, typeoffn, typeofhtmlele, instanceStr, string, fn$6, array2, plainObject, object, number$1, integer, htmlElement, elementOrCollection, element, collection, core2, stylesheet, event, emptyString, domElement, boundingBox, promise, ms, memoize3, camel2dash, dash2camel, prependCamel, capitalize, endsWith, number6, rgba3, rgbaNoBackRefs, hsla2, hslaNoBackRefs, hex3, hex6, ascending3, descending2, extend4, hex2tuple, hsl2tuple, rgb2tuple, colorname2tuple, color2tuple, colors, setMap, getMap, commonjsGlobal, isObject_12, hasRequiredIsObject, _freeGlobal, hasRequired_freeGlobal, _root, hasRequired_root, now_1, hasRequiredNow, _trimmedEndIndex, hasRequired_trimmedEndIndex, _baseTrim, hasRequired_baseTrim, _Symbol, hasRequired_Symbol, _getRawTag, hasRequired_getRawTag, _objectToString, hasRequired_objectToString, _baseGetTag, hasRequired_baseGetTag, isObjectLike_1, hasRequiredIsObjectLike, isSymbol_1, hasRequiredIsSymbol, toNumber_1, hasRequiredToNumber, debounce_1, hasRequiredDebounce, debounceExports, debounce, performance$1, pnow, raf, requestAnimationFrame2, performanceNow, DEFAULT_HASH_SEED, K4, DEFAULT_HASH_SEED_ALT, hashIterableInts, hashInt, hashIntAlt, combineHashes, combineHashesArray, hashArrays, hashIntsArray, hashString2, hashStrings, hashStringsArray, movePointByBoxAspect, warningsEnabled, warnSupported, traceSupported, MAX_INT$1, trueify, falsify, zeroify, noop$1, error, warnings, warn, clone5, copy3, copyArray2, uuid, _staticEmptyObject, staticEmptyObject, defaults$g, removeFromArray, clearArray, push, getPrefixedProperty, setPrefixedProperty, ObjectMap, Map$1, undef, ObjectSet, Set$1, Element, defineSearch, elesfn$v, heap$2, heap$1, hasRequiredHeap$1, heap, hasRequiredHeap, heapExports, Heap, dijkstraDefaults, elesfn$u, elesfn$t, aStarDefaults, elesfn$s, floydWarshallDefaults, elesfn$r, bellmanFordDefaults, elesfn$q, sqrt2, collapse, contractUntil, elesfn$p, _Math$hypot, copyPosition, modelToRenderedPosition$1, renderedToModelPosition, array2point, min5, max5, mean, median2, deg2rad, getAngleFromDisp, log22, signum, dist, sqdist, inPlaceSumNormalize, qbezierAt, qbezierPtAt, lineAt, bound, makeBoundingBox, copyBoundingBox, clearBoundingBox, updateBoundingBox, expandBoundingBoxByPoint, expandBoundingBox, expandBoundingBoxSides, assignBoundingBox, boundingBoxesIntersect, inBoundingBox, pointInBoundingBox, boundingBoxInBoundingBox, hypot, roundRectangleIntersectLine, inLineVicinity, inBezierVicinity, solveQuadratic, solveCubic, sqdistToQuadraticBezier, sqdistToFiniteLine, pointInsidePolygonPoints, pointInsidePolygon, pointInsideRoundPolygon, joinLines, expandPolygon, intersectLineEllipse, checkInEllipse, intersectLineCircle, midOfThree, finiteLinesIntersect, transformPoints, polygonIntersectLine, roundPolygonIntersectLine, shortenIntersection, generateUnitNgonPointsFitToSquare, fitPolygonToSquare, generateUnitNgonPoints, getRoundRectangleRadius, getRoundPolygonRadius, getCutRectangleCornerLength, bezierPtsToQuadCoeff, getBarrelCurveConstants, pageRankDefaults, elesfn$o, defaults$f, elesfn$n, defaults$e, elesfn$m, defaults$d, elesfn$l, defaults$c, setOptions$3, getSimilarity$1, addLoops, normalize2, mmult, expand, inflate, hasConverged, assign$2, isDuplicate, removeDuplicates, markovClustering, markovClustering$1, identity$1, absDiff, addAbsDiff, addSquaredDiff, sqrt3, maxAbsDiff, getDistance, distances, defaults$b, setOptions$2, getDist, randomCentroids, classify, buildCluster, haveValuesConverged, haveMatricesConverged, seenBefore, randomMedoids, findCost, kMeans, kMedoids, updateCentroids, updateMembership, assign$1, fuzzyCMeans, kClustering, defaults$a, linkageAliases, setOptions$1, mergeClosest, _getAllChildren, _buildDendrogram, _buildClustersFromTree, hierarchicalClustering, hierarchicalClustering$1, defaults$9, setOptions4, getSimilarity2, getPreference, findExemplars, assignClusters, assign3, affinityPropagation, affinityPropagation$1, hierholzerDefaults, elesfn$k, hopcroftTarjanBiconnected, hopcroftTarjanBiconnected$1, tarjanStronglyConnected, tarjanStronglyConnected$1, elesfn$j, STATE_PENDING, STATE_FULFILLED, STATE_REJECTED, _api, deliver, execute, execute_handlers, resolver, _resolve, Promise$1, Animation, anifn, define$3, isArray_1, hasRequiredIsArray, _isKey, hasRequired_isKey, isFunction_1, hasRequiredIsFunction, _coreJsData, hasRequired_coreJsData, _isMasked, hasRequired_isMasked, _toSource, hasRequired_toSource, _baseIsNative, hasRequired_baseIsNative, _getValue, hasRequired_getValue, _getNative, hasRequired_getNative, _nativeCreate, hasRequired_nativeCreate, _hashClear, hasRequired_hashClear, _hashDelete, hasRequired_hashDelete, _hashGet, hasRequired_hashGet, _hashHas, hasRequired_hashHas, _hashSet, hasRequired_hashSet, _Hash, hasRequired_Hash, _listCacheClear, hasRequired_listCacheClear, eq_1, hasRequiredEq, _assocIndexOf, hasRequired_assocIndexOf, _listCacheDelete, hasRequired_listCacheDelete, _listCacheGet, hasRequired_listCacheGet, _listCacheHas, hasRequired_listCacheHas, _listCacheSet, hasRequired_listCacheSet, _ListCache, hasRequired_ListCache, _Map, hasRequired_Map, _mapCacheClear, hasRequired_mapCacheClear, _isKeyable, hasRequired_isKeyable, _getMapData, hasRequired_getMapData, _mapCacheDelete, hasRequired_mapCacheDelete, _mapCacheGet, hasRequired_mapCacheGet, _mapCacheHas, hasRequired_mapCacheHas, _mapCacheSet, hasRequired_mapCacheSet, _MapCache, hasRequired_MapCache, memoize_1, hasRequiredMemoize, _memoizeCapped, hasRequired_memoizeCapped, _stringToPath, hasRequired_stringToPath, _arrayMap, hasRequired_arrayMap, _baseToString, hasRequired_baseToString, toString_1, hasRequiredToString, _castPath, hasRequired_castPath, _toKey, hasRequired_toKey, _baseGet, hasRequired_baseGet, get_1, hasRequiredGet, getExports, get4, _defineProperty, hasRequired_defineProperty, _baseAssignValue, hasRequired_baseAssignValue, _assignValue, hasRequired_assignValue, _isIndex, hasRequired_isIndex, _baseSet, hasRequired_baseSet, set_1, hasRequiredSet, setExports, set4, _copyArray, hasRequired_copyArray, toPath_1, hasRequiredToPath, toPathExports, toPath, define$2, define$1, define2, elesfn$i, elesfn$h, tokens, newQuery, Type2, stateSelectors, lookup, stateSelectorMatches, stateSelectorRegex, cleanMetaChars, replaceLastQuery, exprs, consumeExpr, consumeWhitespace, parse, toString3, parse$1, valCmp, boolCmp, existCmp, data$1, meta, match, matches$1, filter3, matches31, matching, Selector, selfn, elesfn$g, cache, elesfn$f, fn$5, elesfn$e, data3, elesfn$d, fn$4, elesfn$c, beforePositionSet, positionDef, position2, fn$3, elesfn$b, noninf, updateBounds, updateBoundsFromBox, prefixedProperty, updateBoundsFromArrow, updateBoundsFromLabel, updateBoundsFromOutline, updateBoundsFromMiter, updateBoundsFromMiterBorder, boundingBoxImpl, getKey, getBoundingBoxPosKey, cachedBoundingBoxImpl, defBbOpts, defBbOptsKey, filledBbOpts, bounds, fn$2, elesfn$a, defineDimFns, widthHeight, ifEdge, ifEdgeRenderedPosition, ifEdgeRenderedPositions, controlPoints2, segmentPoints, sourceEndpoint, targetEndpoint, midpoint, pts, renderedName, edgePoints, dimensions, Event, eventRegex, universalNamespace, defaults$8, defaultsKeys, emptyOpts, p2, forEachEvent, makeEventObj, forEachEventObj, emitterOptions$1, argSelector$1, elesfn$9, elesfn$8, fn$1, elesfn$7, zIndexSort, elesfn$6, defineSymbolIterator, getLayoutDimensionOptions, elesfn$5, elesfn$4, eleTakesUpSpace, eleInteractive, parentInteractive, eleVisible, edgeVisibleViaNode, elesfn$3, elesfn$2, defineDagExtremity, defineDagOneHop, defineDagAllHops, Collection, elesfn$1, corefn$9, generateSpringRK4, cubicBezier, easings, corefn$8, emitterOptions, argSelector2, elesfn, corefn$7, corefn$6, corefn$5, rendererDefaults, corefn$4, corefn$3, styfn$8, TRUE, FALSE, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1, _Style, styfn, corefn$2, defaultSelectionType, corefn$1, fn2, Core, corefn, defaults$7, deprecatedOptionDefaults, getInfo, setInfo, defaults$6, defaults$5, DEBUG, defaults$4, createLayoutInfo, findLCA, _findLCA_aux, printLayoutInfo, randomizePositions, getScaleInBoundsFn, refreshPositions, step, calculateNodeForces, randomDistance, nodeRepulsion2, nodesOverlap, findClippingPoint, calculateEdgeForces, calculateGravityForces, propagateForces, updatePositions, limitForce, _updateAncestryBoundaries, separateComponents, defaults$3, defaults$2, defaults$1, defaults3, layout4, noop5, throwImgErr, BRp$f, BRp$e, BRp$d, x3, y4, v1, v22, sinA, sinA90, radDirection, drawDirection, angle, halfAngle, cRadius, lenOut, radius, limit, startX, startY, stopX, stopY, lastPoint, asVec, invertVec, calcCornerArc, AVOID_IMPOSSIBLE_BEZIER_CONSTANT, AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L, BRp$c, BRp$b, BRp$a, BRp$9, lineAngleFromDelta, lineAngle, bezierAngle, BRp$8, TOO_SMALL_CUT_RECT, warnedCutRect, BRp$7, BRp$6, BRp$5, BRp$4, setGrabState, setGrabbed, setFreed, BRp$3, BRp$2, BRp$1, beforeRenderCallbacks, BaseRenderer, BR, BRp, fullFpsTime, defs, ElementTextureCacheLookup, minTxrH, txrStepH, minLvl$1, maxLvl$1, maxZoom$1, eleTxrSpacing, defTxrWidth, maxTxrW, maxTxrH, minUtility, maxFullness, maxFullnessChecks, deqCost$1, deqAvgCost$1, deqNoDrawCost$1, deqFastCost$1, deqRedrawThreshold$1, maxDeqSize$1, getTxrReasons, initDefaults, ElementTextureCache, ETCp, defNumLayers, minLvl, maxLvl, maxZoom2, deqRedrawThreshold, refineEleDebounceTime, deqCost, deqAvgCost, deqNoDrawCost, deqFastCost, maxDeqSize, invalidThreshold, maxLayerArea, maxLayerDim, useHighQualityEleTxrReqs, LayeredTextureCache, LTCp, layerIdPool, MAX_INT, CRp$b, impl, CRp$a, getZeroRotation, getLabelRotation, getSourceLabelRotation, getTargetLabelRotation, getOpacity, getTextOpacity, CRp$9, drawEdgeOverlayUnderlay, CRp$8, CRp$7, CRp$6, drawNodeOverlayUnderlay, CRp$5, motionBlurDelay, fpsHeight, ARRAY_TYPE, Atlas, AtlasCollection, AtlasManager, AtlasBatchManager, circleSD, rectangleSD, roundRectangleSD, ellipseSD, RENDER_TARGET, TEX_PICKING_MODE, TEXTURE, EDGE_STRAIGHT, EDGE_CURVE_SEGMENT, EDGE_ARROW, RECTANGLE, ROUND_RECTANGLE, BOTTOM_ROUND_RECTANGLE, ELLIPSE, ElementDrawingWebGL, CRp$4, getStyleKeysForLabel, getBoundingBoxForLabel, CRp$3, sin0, cos0, sin2, cos2, ellipseStepSize, i2, CRp$2, CRp$1, CR, CRp, pathsImpld, renderer2, incExts, extensions, modules, extension2, _Stylesheet, sheetfn, version2, cytoscape2;
  var init_cytoscape_esm = __esm({
    "../../node_modules/.pnpm/cytoscape@3.33.3/node_modules/cytoscape/dist/cytoscape.esm.mjs"() {
      "use strict";
      __name(_arrayLikeToArray, "_arrayLikeToArray");
      __name(_arrayWithHoles, "_arrayWithHoles");
      __name(_arrayWithoutHoles, "_arrayWithoutHoles");
      __name(_classCallCheck, "_classCallCheck");
      __name(_defineProperties, "_defineProperties");
      __name(_createClass, "_createClass");
      __name(_createForOfIteratorHelper, "_createForOfIteratorHelper");
      __name(_defineProperty$1, "_defineProperty$1");
      __name(_iterableToArray, "_iterableToArray");
      __name(_iterableToArrayLimit, "_iterableToArrayLimit");
      __name(_nonIterableRest, "_nonIterableRest");
      __name(_nonIterableSpread, "_nonIterableSpread");
      __name(_slicedToArray, "_slicedToArray");
      __name(_toConsumableArray, "_toConsumableArray");
      __name(_toPrimitive, "_toPrimitive");
      __name(_toPropertyKey, "_toPropertyKey");
      __name(_typeof, "_typeof");
      __name(_unsupportedIterableToArray, "_unsupportedIterableToArray");
      _window = typeof window === "undefined" ? null : window;
      navigator2 = _window ? _window.navigator : null;
      _window ? _window.document : null;
      typeofstr = _typeof("");
      typeofobj = _typeof({});
      typeoffn = _typeof(function() {
      });
      typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement);
      instanceStr = /* @__PURE__ */ __name(function instanceStr2(obj) {
        return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null;
      }, "instanceStr");
      string = /* @__PURE__ */ __name(function string2(obj) {
        return obj != null && _typeof(obj) == typeofstr;
      }, "string");
      fn$6 = /* @__PURE__ */ __name(function fn(obj) {
        return obj != null && _typeof(obj) === typeoffn;
      }, "fn");
      array2 = /* @__PURE__ */ __name(function array3(obj) {
        return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array);
      }, "array");
      plainObject = /* @__PURE__ */ __name(function plainObject2(obj) {
        return obj != null && _typeof(obj) === typeofobj && !array2(obj) && obj.constructor === Object;
      }, "plainObject");
      object = /* @__PURE__ */ __name(function object2(obj) {
        return obj != null && _typeof(obj) === typeofobj;
      }, "object");
      number$1 = /* @__PURE__ */ __name(function number5(obj) {
        return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj);
      }, "number");
      integer = /* @__PURE__ */ __name(function integer2(obj) {
        return number$1(obj) && Math.floor(obj) === obj;
      }, "integer");
      htmlElement = /* @__PURE__ */ __name(function htmlElement2(obj) {
        if ("undefined" === typeofhtmlele) {
          return void 0;
        } else {
          return null != obj && obj instanceof HTMLElement;
        }
      }, "htmlElement");
      elementOrCollection = /* @__PURE__ */ __name(function elementOrCollection2(obj) {
        return element(obj) || collection(obj);
      }, "elementOrCollection");
      element = /* @__PURE__ */ __name(function element2(obj) {
        return instanceStr(obj) === "collection" && obj._private.single;
      }, "element");
      collection = /* @__PURE__ */ __name(function collection2(obj) {
        return instanceStr(obj) === "collection" && !obj._private.single;
      }, "collection");
      core2 = /* @__PURE__ */ __name(function core3(obj) {
        return instanceStr(obj) === "core";
      }, "core");
      stylesheet = /* @__PURE__ */ __name(function stylesheet2(obj) {
        return instanceStr(obj) === "stylesheet";
      }, "stylesheet");
      event = /* @__PURE__ */ __name(function event2(obj) {
        return instanceStr(obj) === "event";
      }, "event");
      emptyString = /* @__PURE__ */ __name(function emptyString2(obj) {
        if (obj === void 0 || obj === null) {
          return true;
        } else if (obj === "" || obj.match(/^\s+$/)) {
          return true;
        }
        return false;
      }, "emptyString");
      domElement = /* @__PURE__ */ __name(function domElement2(obj) {
        if (typeof HTMLElement === "undefined") {
          return false;
        } else {
          return obj instanceof HTMLElement;
        }
      }, "domElement");
      boundingBox = /* @__PURE__ */ __name(function boundingBox2(obj) {
        return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2);
      }, "boundingBox");
      promise = /* @__PURE__ */ __name(function promise2(obj) {
        return object(obj) && fn$6(obj.then);
      }, "promise");
      ms = /* @__PURE__ */ __name(function ms2() {
        return navigator2 && navigator2.userAgent.match(/msie|trident|edge/i);
      }, "ms");
      memoize3 = /* @__PURE__ */ __name(function memoize4(fn3, keyFn) {
        if (!keyFn) {
          keyFn = /* @__PURE__ */ __name(function keyFn2() {
            if (arguments.length === 1) {
              return arguments[0];
            } else if (arguments.length === 0) {
              return "undefined";
            }
            var args = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              args.push(arguments[i2]);
            }
            return args.join("$");
          }, "keyFn");
        }
        var _memoizedFn = /* @__PURE__ */ __name(function memoizedFn() {
          var self2 = this;
          var args = arguments;
          var ret;
          var k2 = keyFn.apply(self2, args);
          var cache3 = _memoizedFn.cache;
          if (!(ret = cache3[k2])) {
            ret = cache3[k2] = fn3.apply(self2, args);
          }
          return ret;
        }, "memoizedFn");
        _memoizedFn.cache = {};
        return _memoizedFn;
      }, "memoize");
      camel2dash = memoize3(function(str2) {
        return str2.replace(/([A-Z])/g, function(v3) {
          return "-" + v3.toLowerCase();
        });
      });
      dash2camel = memoize3(function(str2) {
        return str2.replace(/(-\w)/g, function(v3) {
          return v3[1].toUpperCase();
        });
      });
      prependCamel = memoize3(function(prefix, str2) {
        return prefix + str2[0].toUpperCase() + str2.substring(1);
      }, function(prefix, str2) {
        return prefix + "$" + str2;
      });
      capitalize = /* @__PURE__ */ __name(function capitalize2(str2) {
        if (emptyString(str2)) {
          return str2;
        }
        return str2.charAt(0).toUpperCase() + str2.substring(1);
      }, "capitalize");
      endsWith = /* @__PURE__ */ __name(function endsWith2(string3, suffix) {
        return string3.slice(-1 * suffix.length) === suffix;
      }, "endsWith");
      number6 = "(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))";
      rgba3 = "rgb[a]?\\((" + number6 + "[%]?)\\s*,\\s*(" + number6 + "[%]?)\\s*,\\s*(" + number6 + "[%]?)(?:\\s*,\\s*(" + number6 + "))?\\)";
      rgbaNoBackRefs = "rgb[a]?\\((?:" + number6 + "[%]?)\\s*,\\s*(?:" + number6 + "[%]?)\\s*,\\s*(?:" + number6 + "[%]?)(?:\\s*,\\s*(?:" + number6 + "))?\\)";
      hsla2 = "hsl[a]?\\((" + number6 + ")\\s*,\\s*(" + number6 + "[%])\\s*,\\s*(" + number6 + "[%])(?:\\s*,\\s*(" + number6 + "))?\\)";
      hslaNoBackRefs = "hsl[a]?\\((?:" + number6 + ")\\s*,\\s*(?:" + number6 + "[%])\\s*,\\s*(?:" + number6 + "[%])(?:\\s*,\\s*(?:" + number6 + "))?\\)";
      hex3 = "\\#[0-9a-fA-F]{3}";
      hex6 = "\\#[0-9a-fA-F]{6}";
      ascending3 = /* @__PURE__ */ __name(function ascending4(a2, b3) {
        if (a2 < b3) {
          return -1;
        } else if (a2 > b3) {
          return 1;
        } else {
          return 0;
        }
      }, "ascending");
      descending2 = /* @__PURE__ */ __name(function descending3(a2, b3) {
        return -1 * ascending3(a2, b3);
      }, "descending");
      extend4 = Object.assign != null ? Object.assign.bind(Object) : function(tgt) {
        var args = arguments;
        for (var i2 = 1; i2 < args.length; i2++) {
          var obj = args[i2];
          if (obj == null) {
            continue;
          }
          var keys3 = Object.keys(obj);
          for (var j3 = 0; j3 < keys3.length; j3++) {
            var k2 = keys3[j3];
            tgt[k2] = obj[k2];
          }
        }
        return tgt;
      };
      hex2tuple = /* @__PURE__ */ __name(function hex2tuple2(hex2) {
        if (!(hex2.length === 4 || hex2.length === 7) || hex2[0] !== "#") {
          return;
        }
        var shortHex = hex2.length === 4;
        var r2, g2, b3;
        var base = 16;
        if (shortHex) {
          r2 = parseInt(hex2[1] + hex2[1], base);
          g2 = parseInt(hex2[2] + hex2[2], base);
          b3 = parseInt(hex2[3] + hex2[3], base);
        } else {
          r2 = parseInt(hex2[1] + hex2[2], base);
          g2 = parseInt(hex2[3] + hex2[4], base);
          b3 = parseInt(hex2[5] + hex2[6], base);
        }
        return [r2, g2, b3];
      }, "hex2tuple");
      hsl2tuple = /* @__PURE__ */ __name(function hsl2tuple2(hsl2) {
        var ret;
        var h3, s2, l4, a2, r2, g2, b3;
        function hue2rgb(p4, q4, t4) {
          if (t4 < 0) t4 += 1;
          if (t4 > 1) t4 -= 1;
          if (t4 < 1 / 6) return p4 + (q4 - p4) * 6 * t4;
          if (t4 < 1 / 2) return q4;
          if (t4 < 2 / 3) return p4 + (q4 - p4) * (2 / 3 - t4) * 6;
          return p4;
        }
        __name(hue2rgb, "hue2rgb");
        var m3 = new RegExp("^" + hsla2 + "$").exec(hsl2);
        if (m3) {
          h3 = parseInt(m3[1]);
          if (h3 < 0) {
            h3 = (360 - -1 * h3 % 360) % 360;
          } else if (h3 > 360) {
            h3 = h3 % 360;
          }
          h3 /= 360;
          s2 = parseFloat(m3[2]);
          if (s2 < 0 || s2 > 100) {
            return;
          }
          s2 = s2 / 100;
          l4 = parseFloat(m3[3]);
          if (l4 < 0 || l4 > 100) {
            return;
          }
          l4 = l4 / 100;
          a2 = m3[4];
          if (a2 !== void 0) {
            a2 = parseFloat(a2);
            if (a2 < 0 || a2 > 1) {
              return;
            }
          }
          if (s2 === 0) {
            r2 = g2 = b3 = Math.round(l4 * 255);
          } else {
            var q3 = l4 < 0.5 ? l4 * (1 + s2) : l4 + s2 - l4 * s2;
            var p3 = 2 * l4 - q3;
            r2 = Math.round(255 * hue2rgb(p3, q3, h3 + 1 / 3));
            g2 = Math.round(255 * hue2rgb(p3, q3, h3));
            b3 = Math.round(255 * hue2rgb(p3, q3, h3 - 1 / 3));
          }
          ret = [r2, g2, b3, a2];
        }
        return ret;
      }, "hsl2tuple");
      rgb2tuple = /* @__PURE__ */ __name(function rgb2tuple2(rgb2) {
        var ret;
        var m3 = new RegExp("^" + rgba3 + "$").exec(rgb2);
        if (m3) {
          ret = [];
          var isPct = [];
          for (var i2 = 1; i2 <= 3; i2++) {
            var channel2 = m3[i2];
            if (channel2[channel2.length - 1] === "%") {
              isPct[i2] = true;
            }
            channel2 = parseFloat(channel2);
            if (isPct[i2]) {
              channel2 = channel2 / 100 * 255;
            }
            if (channel2 < 0 || channel2 > 255) {
              return;
            }
            ret.push(Math.floor(channel2));
          }
          var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3];
          var allArePct = isPct[1] && isPct[2] && isPct[3];
          if (atLeastOneIsPct && !allArePct) {
            return;
          }
          var alpha = m3[4];
          if (alpha !== void 0) {
            alpha = parseFloat(alpha);
            if (alpha < 0 || alpha > 1) {
              return;
            }
            ret.push(alpha);
          }
        }
        return ret;
      }, "rgb2tuple");
      colorname2tuple = /* @__PURE__ */ __name(function colorname2tuple2(color2) {
        return colors[color2.toLowerCase()];
      }, "colorname2tuple");
      color2tuple = /* @__PURE__ */ __name(function color2tuple2(color2) {
        return (array2(color2) ? color2 : null) || colorname2tuple(color2) || hex2tuple(color2) || rgb2tuple(color2) || hsl2tuple(color2);
      }, "color2tuple");
      colors = {
        // special colour names
        transparent: [0, 0, 0, 0],
        // NB alpha === 0
        // regular colours
        aliceblue: [240, 248, 255],
        antiquewhite: [250, 235, 215],
        aqua: [0, 255, 255],
        aquamarine: [127, 255, 212],
        azure: [240, 255, 255],
        beige: [245, 245, 220],
        bisque: [255, 228, 196],
        black: [0, 0, 0],
        blanchedalmond: [255, 235, 205],
        blue: [0, 0, 255],
        blueviolet: [138, 43, 226],
        brown: [165, 42, 42],
        burlywood: [222, 184, 135],
        cadetblue: [95, 158, 160],
        chartreuse: [127, 255, 0],
        chocolate: [210, 105, 30],
        coral: [255, 127, 80],
        cornflowerblue: [100, 149, 237],
        cornsilk: [255, 248, 220],
        crimson: [220, 20, 60],
        cyan: [0, 255, 255],
        darkblue: [0, 0, 139],
        darkcyan: [0, 139, 139],
        darkgoldenrod: [184, 134, 11],
        darkgray: [169, 169, 169],
        darkgreen: [0, 100, 0],
        darkgrey: [169, 169, 169],
        darkkhaki: [189, 183, 107],
        darkmagenta: [139, 0, 139],
        darkolivegreen: [85, 107, 47],
        darkorange: [255, 140, 0],
        darkorchid: [153, 50, 204],
        darkred: [139, 0, 0],
        darksalmon: [233, 150, 122],
        darkseagreen: [143, 188, 143],
        darkslateblue: [72, 61, 139],
        darkslategray: [47, 79, 79],
        darkslategrey: [47, 79, 79],
        darkturquoise: [0, 206, 209],
        darkviolet: [148, 0, 211],
        deeppink: [255, 20, 147],
        deepskyblue: [0, 191, 255],
        dimgray: [105, 105, 105],
        dimgrey: [105, 105, 105],
        dodgerblue: [30, 144, 255],
        firebrick: [178, 34, 34],
        floralwhite: [255, 250, 240],
        forestgreen: [34, 139, 34],
        fuchsia: [255, 0, 255],
        gainsboro: [220, 220, 220],
        ghostwhite: [248, 248, 255],
        gold: [255, 215, 0],
        goldenrod: [218, 165, 32],
        gray: [128, 128, 128],
        grey: [128, 128, 128],
        green: [0, 128, 0],
        greenyellow: [173, 255, 47],
        honeydew: [240, 255, 240],
        hotpink: [255, 105, 180],
        indianred: [205, 92, 92],
        indigo: [75, 0, 130],
        ivory: [255, 255, 240],
        khaki: [240, 230, 140],
        lavender: [230, 230, 250],
        lavenderblush: [255, 240, 245],
        lawngreen: [124, 252, 0],
        lemonchiffon: [255, 250, 205],
        lightblue: [173, 216, 230],
        lightcoral: [240, 128, 128],
        lightcyan: [224, 255, 255],
        lightgoldenrodyellow: [250, 250, 210],
        lightgray: [211, 211, 211],
        lightgreen: [144, 238, 144],
        lightgrey: [211, 211, 211],
        lightpink: [255, 182, 193],
        lightsalmon: [255, 160, 122],
        lightseagreen: [32, 178, 170],
        lightskyblue: [135, 206, 250],
        lightslategray: [119, 136, 153],
        lightslategrey: [119, 136, 153],
        lightsteelblue: [176, 196, 222],
        lightyellow: [255, 255, 224],
        lime: [0, 255, 0],
        limegreen: [50, 205, 50],
        linen: [250, 240, 230],
        magenta: [255, 0, 255],
        maroon: [128, 0, 0],
        mediumaquamarine: [102, 205, 170],
        mediumblue: [0, 0, 205],
        mediumorchid: [186, 85, 211],
        mediumpurple: [147, 112, 219],
        mediumseagreen: [60, 179, 113],
        mediumslateblue: [123, 104, 238],
        mediumspringgreen: [0, 250, 154],
        mediumturquoise: [72, 209, 204],
        mediumvioletred: [199, 21, 133],
        midnightblue: [25, 25, 112],
        mintcream: [245, 255, 250],
        mistyrose: [255, 228, 225],
        moccasin: [255, 228, 181],
        navajowhite: [255, 222, 173],
        navy: [0, 0, 128],
        oldlace: [253, 245, 230],
        olive: [128, 128, 0],
        olivedrab: [107, 142, 35],
        orange: [255, 165, 0],
        orangered: [255, 69, 0],
        orchid: [218, 112, 214],
        palegoldenrod: [238, 232, 170],
        palegreen: [152, 251, 152],
        paleturquoise: [175, 238, 238],
        palevioletred: [219, 112, 147],
        papayawhip: [255, 239, 213],
        peachpuff: [255, 218, 185],
        peru: [205, 133, 63],
        pink: [255, 192, 203],
        plum: [221, 160, 221],
        powderblue: [176, 224, 230],
        purple: [128, 0, 128],
        red: [255, 0, 0],
        rosybrown: [188, 143, 143],
        royalblue: [65, 105, 225],
        saddlebrown: [139, 69, 19],
        salmon: [250, 128, 114],
        sandybrown: [244, 164, 96],
        seagreen: [46, 139, 87],
        seashell: [255, 245, 238],
        sienna: [160, 82, 45],
        silver: [192, 192, 192],
        skyblue: [135, 206, 235],
        slateblue: [106, 90, 205],
        slategray: [112, 128, 144],
        slategrey: [112, 128, 144],
        snow: [255, 250, 250],
        springgreen: [0, 255, 127],
        steelblue: [70, 130, 180],
        tan: [210, 180, 140],
        teal: [0, 128, 128],
        thistle: [216, 191, 216],
        tomato: [255, 99, 71],
        turquoise: [64, 224, 208],
        violet: [238, 130, 238],
        wheat: [245, 222, 179],
        white: [255, 255, 255],
        whitesmoke: [245, 245, 245],
        yellow: [255, 255, 0],
        yellowgreen: [154, 205, 50]
      };
      setMap = /* @__PURE__ */ __name(function setMap2(options2) {
        var obj = options2.map;
        var keys3 = options2.keys;
        var l4 = keys3.length;
        for (var i2 = 0; i2 < l4; i2++) {
          var key = keys3[i2];
          if (plainObject(key)) {
            throw Error("Tried to set map with object key");
          }
          if (i2 < keys3.length - 1) {
            if (obj[key] == null) {
              obj[key] = {};
            }
            obj = obj[key];
          } else {
            obj[key] = options2.value;
          }
        }
      }, "setMap");
      getMap = /* @__PURE__ */ __name(function getMap2(options2) {
        var obj = options2.map;
        var keys3 = options2.keys;
        var l4 = keys3.length;
        for (var i2 = 0; i2 < l4; i2++) {
          var key = keys3[i2];
          if (plainObject(key)) {
            throw Error("Tried to get map with object key");
          }
          obj = obj[key];
          if (obj == null) {
            return obj;
          }
        }
        return obj;
      }, "getMap");
      commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
      __name(getDefaultExportFromCjs, "getDefaultExportFromCjs");
      __name(requireIsObject, "requireIsObject");
      __name(require_freeGlobal, "require_freeGlobal");
      __name(require_root, "require_root");
      __name(requireNow, "requireNow");
      __name(require_trimmedEndIndex, "require_trimmedEndIndex");
      __name(require_baseTrim, "require_baseTrim");
      __name(require_Symbol, "require_Symbol");
      __name(require_getRawTag, "require_getRawTag");
      __name(require_objectToString, "require_objectToString");
      __name(require_baseGetTag, "require_baseGetTag");
      __name(requireIsObjectLike, "requireIsObjectLike");
      __name(requireIsSymbol, "requireIsSymbol");
      __name(requireToNumber, "requireToNumber");
      __name(requireDebounce, "requireDebounce");
      debounceExports = requireDebounce();
      debounce = /* @__PURE__ */ getDefaultExportFromCjs(debounceExports);
      performance$1 = _window ? _window.performance : null;
      pnow = performance$1 && performance$1.now ? function() {
        return performance$1.now();
      } : function() {
        return Date.now();
      };
      raf = (function() {
        if (_window) {
          if (_window.requestAnimationFrame) {
            return function(fn3) {
              _window.requestAnimationFrame(fn3);
            };
          } else if (_window.mozRequestAnimationFrame) {
            return function(fn3) {
              _window.mozRequestAnimationFrame(fn3);
            };
          } else if (_window.webkitRequestAnimationFrame) {
            return function(fn3) {
              _window.webkitRequestAnimationFrame(fn3);
            };
          } else if (_window.msRequestAnimationFrame) {
            return function(fn3) {
              _window.msRequestAnimationFrame(fn3);
            };
          }
        }
        return function(fn3) {
          if (fn3) {
            setTimeout(function() {
              fn3(pnow());
            }, 1e3 / 60);
          }
        };
      })();
      requestAnimationFrame2 = /* @__PURE__ */ __name(function requestAnimationFrame3(fn3) {
        return raf(fn3);
      }, "requestAnimationFrame");
      performanceNow = pnow;
      DEFAULT_HASH_SEED = 9261;
      K4 = 65599;
      DEFAULT_HASH_SEED_ALT = 5381;
      hashIterableInts = /* @__PURE__ */ __name(function hashIterableInts2(iterator) {
        var seed = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : DEFAULT_HASH_SEED;
        var hash = seed;
        var entry;
        for (; ; ) {
          entry = iterator.next();
          if (entry.done) {
            break;
          }
          hash = hash * K4 + entry.value | 0;
        }
        return hash;
      }, "hashIterableInts");
      hashInt = /* @__PURE__ */ __name(function hashInt2(num) {
        var seed = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : DEFAULT_HASH_SEED;
        return seed * K4 + num | 0;
      }, "hashInt");
      hashIntAlt = /* @__PURE__ */ __name(function hashIntAlt2(num) {
        var seed = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : DEFAULT_HASH_SEED_ALT;
        return (seed << 5) + seed + num | 0;
      }, "hashIntAlt");
      combineHashes = /* @__PURE__ */ __name(function combineHashes2(hash1, hash2) {
        return hash1 * 2097152 + hash2;
      }, "combineHashes");
      combineHashesArray = /* @__PURE__ */ __name(function combineHashesArray2(hashes) {
        return hashes[0] * 2097152 + hashes[1];
      }, "combineHashesArray");
      hashArrays = /* @__PURE__ */ __name(function hashArrays2(hashes1, hashes2) {
        return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])];
      }, "hashArrays");
      hashIntsArray = /* @__PURE__ */ __name(function hashIntsArray2(ints, seed) {
        var entry = {
          value: 0,
          done: false
        };
        var i2 = 0;
        var length2 = ints.length;
        var iterator = {
          next: /* @__PURE__ */ __name(function next3() {
            if (i2 < length2) {
              entry.value = ints[i2++];
            } else {
              entry.done = true;
            }
            return entry;
          }, "next")
        };
        return hashIterableInts(iterator, seed);
      }, "hashIntsArray");
      hashString2 = /* @__PURE__ */ __name(function hashString3(str2, seed) {
        var entry = {
          value: 0,
          done: false
        };
        var i2 = 0;
        var length2 = str2.length;
        var iterator = {
          next: /* @__PURE__ */ __name(function next3() {
            if (i2 < length2) {
              entry.value = str2.charCodeAt(i2++);
            } else {
              entry.done = true;
            }
            return entry;
          }, "next")
        };
        return hashIterableInts(iterator, seed);
      }, "hashString");
      hashStrings = /* @__PURE__ */ __name(function hashStrings2() {
        return hashStringsArray(arguments);
      }, "hashStrings");
      hashStringsArray = /* @__PURE__ */ __name(function hashStringsArray2(strs) {
        var hash;
        for (var i2 = 0; i2 < strs.length; i2++) {
          var str2 = strs[i2];
          if (i2 === 0) {
            hash = hashString2(str2);
          } else {
            hash = hashString2(str2, hash);
          }
        }
        return hash;
      }, "hashStringsArray");
      __name(rotatePoint, "rotatePoint");
      movePointByBoxAspect = /* @__PURE__ */ __name(function movePointByBoxAspect2(x5, y6, boxX, boxY, skewX, skewY) {
        return {
          x: (x5 - boxX) * skewX + boxX,
          y: (y6 - boxY) * skewY + boxY
        };
      }, "movePointByBoxAspect");
      __name(rotatePosAndSkewByBox, "rotatePosAndSkewByBox");
      warningsEnabled = true;
      warnSupported = console.warn != null;
      traceSupported = console.trace != null;
      MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991;
      trueify = /* @__PURE__ */ __name(function trueify2() {
        return true;
      }, "trueify");
      falsify = /* @__PURE__ */ __name(function falsify2() {
        return false;
      }, "falsify");
      zeroify = /* @__PURE__ */ __name(function zeroify2() {
        return 0;
      }, "zeroify");
      noop$1 = /* @__PURE__ */ __name(function noop4() {
      }, "noop");
      error = /* @__PURE__ */ __name(function error2(msg) {
        throw new Error(msg);
      }, "error");
      warnings = /* @__PURE__ */ __name(function warnings2(enabled) {
        if (enabled !== void 0) {
          warningsEnabled = !!enabled;
        } else {
          return warningsEnabled;
        }
      }, "warnings");
      warn = /* @__PURE__ */ __name(function warn2(msg) {
        if (!warnings()) {
          return;
        }
        if (warnSupported) {
          console.warn(msg);
        } else {
          console.log(msg);
          if (traceSupported) {
            console.trace();
          }
        }
      }, "warn");
      clone5 = /* @__PURE__ */ __name(function clone6(obj) {
        return extend4({}, obj);
      }, "clone");
      copy3 = /* @__PURE__ */ __name(function copy4(obj) {
        if (obj == null) {
          return obj;
        }
        if (array2(obj)) {
          return obj.slice();
        } else if (plainObject(obj)) {
          return clone5(obj);
        } else {
          return obj;
        }
      }, "copy");
      copyArray2 = /* @__PURE__ */ __name(function copyArray3(arr) {
        return arr.slice();
      }, "copyArray");
      uuid = /* @__PURE__ */ __name(function uuid2(a2, b3) {
        for (
          // loop :)
          b3 = a2 = "";
          // b - result , a - numeric letiable
          a2++ < 36;
          //
          b3 += a2 * 51 & 52 ? (
            //  return a random number or 4
            (a2 ^ 15 ? (
              // generate a random number from 0 to 15
              8 ^ Math.random() * (a2 ^ 20 ? 16 : 4)
            ) : 4).toString(16)
          ) : "-"
        ) ;
        return b3;
      }, "uuid");
      _staticEmptyObject = {};
      staticEmptyObject = /* @__PURE__ */ __name(function staticEmptyObject2() {
        return _staticEmptyObject;
      }, "staticEmptyObject");
      defaults$g = /* @__PURE__ */ __name(function defaults2(_defaults) {
        var keys3 = Object.keys(_defaults);
        return function(opts) {
          var filledOpts = {};
          for (var i2 = 0; i2 < keys3.length; i2++) {
            var key = keys3[i2];
            var optVal = opts == null ? void 0 : opts[key];
            filledOpts[key] = optVal === void 0 ? _defaults[key] : optVal;
          }
          return filledOpts;
        };
      }, "defaults");
      removeFromArray = /* @__PURE__ */ __name(function removeFromArray2(arr, ele, oneCopy) {
        for (var i2 = arr.length - 1; i2 >= 0; i2--) {
          if (arr[i2] === ele) {
            arr.splice(i2, 1);
          }
        }
      }, "removeFromArray");
      clearArray = /* @__PURE__ */ __name(function clearArray2(arr) {
        arr.splice(0, arr.length);
      }, "clearArray");
      push = /* @__PURE__ */ __name(function push2(arr, otherArr) {
        for (var i2 = 0; i2 < otherArr.length; i2++) {
          var el = otherArr[i2];
          arr.push(el);
        }
      }, "push");
      getPrefixedProperty = /* @__PURE__ */ __name(function getPrefixedProperty2(obj, propName, prefix) {
        if (prefix) {
          propName = prependCamel(prefix, propName);
        }
        return obj[propName];
      }, "getPrefixedProperty");
      setPrefixedProperty = /* @__PURE__ */ __name(function setPrefixedProperty2(obj, propName, prefix, value2) {
        if (prefix) {
          propName = prependCamel(prefix, propName);
        }
        obj[propName] = value2;
      }, "setPrefixedProperty");
      ObjectMap = /* @__PURE__ */ (function() {
        function ObjectMap2() {
          _classCallCheck(this, ObjectMap2);
          this._obj = {};
        }
        __name(ObjectMap2, "ObjectMap");
        return _createClass(ObjectMap2, [{
          key: "set",
          value: /* @__PURE__ */ __name(function set5(key, val) {
            this._obj[key] = val;
            return this;
          }, "set")
        }, {
          key: "delete",
          value: /* @__PURE__ */ __name(function _delete(key) {
            this._obj[key] = void 0;
            return this;
          }, "_delete")
        }, {
          key: "clear",
          value: /* @__PURE__ */ __name(function clear24() {
            this._obj = {};
          }, "clear")
        }, {
          key: "has",
          value: /* @__PURE__ */ __name(function has3(key) {
            return this._obj[key] !== void 0;
          }, "has")
        }, {
          key: "get",
          value: /* @__PURE__ */ __name(function get6(key) {
            return this._obj[key];
          }, "get")
        }]);
      })();
      Map$1 = typeof Map !== "undefined" ? Map : ObjectMap;
      undef = "undefined";
      ObjectSet = /* @__PURE__ */ (function() {
        function ObjectSet2(arrayOrObjectSet) {
          _classCallCheck(this, ObjectSet2);
          this._obj = /* @__PURE__ */ Object.create(null);
          this.size = 0;
          if (arrayOrObjectSet != null) {
            var arr;
            if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) {
              arr = arrayOrObjectSet.toArray();
            } else {
              arr = arrayOrObjectSet;
            }
            for (var i2 = 0; i2 < arr.length; i2++) {
              this.add(arr[i2]);
            }
          }
        }
        __name(ObjectSet2, "ObjectSet");
        return _createClass(ObjectSet2, [{
          key: "instanceString",
          value: /* @__PURE__ */ __name(function instanceString4() {
            return "set";
          }, "instanceString")
        }, {
          key: "add",
          value: /* @__PURE__ */ __name(function add3(val) {
            var o2 = this._obj;
            if (o2[val] !== 1) {
              o2[val] = 1;
              this.size++;
            }
          }, "add")
        }, {
          key: "delete",
          value: /* @__PURE__ */ __name(function _delete(val) {
            var o2 = this._obj;
            if (o2[val] === 1) {
              o2[val] = 0;
              this.size--;
            }
          }, "_delete")
        }, {
          key: "clear",
          value: /* @__PURE__ */ __name(function clear24() {
            this._obj = /* @__PURE__ */ Object.create(null);
          }, "clear")
        }, {
          key: "has",
          value: /* @__PURE__ */ __name(function has3(val) {
            return this._obj[val] === 1;
          }, "has")
        }, {
          key: "toArray",
          value: /* @__PURE__ */ __name(function toArray3() {
            var _this = this;
            return Object.keys(this._obj).filter(function(key) {
              return _this.has(key);
            });
          }, "toArray")
        }, {
          key: "forEach",
          value: /* @__PURE__ */ __name(function forEach4(callback, thisArg) {
            return this.toArray().forEach(callback, thisArg);
          }, "forEach")
        }]);
      })();
      Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet;
      Element = /* @__PURE__ */ __name(function Element2(cy, params) {
        var restore = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;
        if (cy === void 0 || params === void 0 || !core2(cy)) {
          error("An element must have a core reference and parameters set");
          return;
        }
        var group2 = params.group;
        if (group2 == null) {
          if (params.data && params.data.source != null && params.data.target != null) {
            group2 = "edges";
          } else {
            group2 = "nodes";
          }
        }
        if (group2 !== "nodes" && group2 !== "edges") {
          error("An element must be of type `nodes` or `edges`; you specified `" + group2 + "`");
          return;
        }
        this.length = 1;
        this[0] = this;
        var _p = this._private = {
          cy,
          single: true,
          // indicates this is an element
          data: params.data || {},
          // data object
          position: params.position || {
            x: 0,
            y: 0
          },
          // (x, y) position pair
          autoWidth: void 0,
          // width and height of nodes calculated by the renderer when set to special 'auto' value
          autoHeight: void 0,
          autoPadding: void 0,
          compoundBoundsClean: false,
          // whether the compound dimensions need to be recalculated the next time dimensions are read
          listeners: [],
          // array of bound listeners
          group: group2,
          // string; 'nodes' or 'edges'
          style: {},
          // properties as set by the style
          rstyle: {},
          // properties for style sent from the renderer to the core
          styleCxts: [],
          // applied style contexts from the styler
          styleKeys: {},
          // per-group keys of style property values
          removed: true,
          // whether it's inside the vis; true if removed (set true here since we call restore)
          selected: params.selected ? true : false,
          // whether it's selected
          selectable: params.selectable === void 0 ? true : params.selectable ? true : false,
          // whether it's selectable
          locked: params.locked ? true : false,
          // whether the element is locked (cannot be moved)
          grabbed: false,
          // whether the element is grabbed by the mouse; renderer sets this privately
          grabbable: params.grabbable === void 0 ? true : params.grabbable ? true : false,
          // whether the element can be grabbed
          pannable: params.pannable === void 0 ? group2 === "edges" ? true : false : params.pannable ? true : false,
          // whether the element has passthrough panning enabled
          active: false,
          // whether the element is active from user interaction
          classes: new Set$1(),
          // map ( className => true )
          animation: {
            // object for currently-running animations
            current: [],
            queue: []
          },
          rscratch: {},
          // object in which the renderer can store information
          scratch: params.scratch || {},
          // scratch objects
          edges: [],
          // array of connected edges
          children: [],
          // array of children
          parent: params.parent && params.parent.isNode() ? params.parent : null,
          // parent ref
          traversalCache: {},
          // cache of output of traversal functions
          backgrounding: false,
          // whether background images are loading
          bbCache: null,
          // cache of the current bounding box
          bbCacheShift: {
            x: 0,
            y: 0
          },
          // shift applied to cached bb to be applied on next get
          bodyBounds: null,
          // bounds cache of element body, w/o overlay
          overlayBounds: null,
          // bounds cache of element body, including overlay
          labelBounds: {
            // bounds cache of labels
            all: null,
            source: null,
            target: null,
            main: null
          },
          arrowBounds: {
            // bounds cache of edge arrows
            source: null,
            target: null,
            "mid-source": null,
            "mid-target": null
          }
        };
        if (_p.position.x == null) {
          _p.position.x = 0;
        }
        if (_p.position.y == null) {
          _p.position.y = 0;
        }
        if (params.renderedPosition) {
          var rpos = params.renderedPosition;
          var pan2 = cy.pan();
          var zoom2 = cy.zoom();
          _p.position = {
            x: (rpos.x - pan2.x) / zoom2,
            y: (rpos.y - pan2.y) / zoom2
          };
        }
        var classes3 = [];
        if (array2(params.classes)) {
          classes3 = params.classes;
        } else if (string(params.classes)) {
          classes3 = params.classes.split(/\s+/);
        }
        for (var i2 = 0, l4 = classes3.length; i2 < l4; i2++) {
          var cls = classes3[i2];
          if (!cls || cls === "") {
            continue;
          }
          _p.classes.add(cls);
        }
        this.createEmitter();
        if (restore === void 0 || restore) {
          this.restore();
        }
        var bypass = params.style || params.css;
        if (bypass) {
          warn("Setting a `style` bypass at element creation should be done only when absolutely necessary.  Try to use the stylesheet instead.");
          this.style(bypass);
        }
      }, "Element");
      defineSearch = /* @__PURE__ */ __name(function defineSearch2(params) {
        params = {
          bfs: params.bfs || !params.dfs,
          dfs: params.dfs || !params.bfs
        };
        return /* @__PURE__ */ __name(function searchFn(roots, fn3, directed) {
          var options2;
          if (plainObject(roots) && !elementOrCollection(roots)) {
            options2 = roots;
            roots = options2.roots || options2.root;
            fn3 = options2.visit;
            directed = options2.directed;
          }
          directed = arguments.length === 2 && !fn$6(fn3) ? fn3 : directed;
          fn3 = fn$6(fn3) ? fn3 : function() {
          };
          var cy = this._private.cy;
          var v3 = roots = string(roots) ? this.filter(roots) : roots;
          var Q3 = [];
          var connectedNodes = [];
          var connectedBy = {};
          var id2depth = {};
          var V3 = {};
          var j3 = 0;
          var found;
          var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges;
          for (var i2 = 0; i2 < v3.length; i2++) {
            var vi2 = v3[i2];
            var viId = vi2.id();
            if (vi2.isNode()) {
              Q3.unshift(vi2);
              if (params.bfs) {
                V3[viId] = true;
                connectedNodes.push(vi2);
              }
              id2depth[viId] = 0;
            }
          }
          var _loop = /* @__PURE__ */ __name(function _loop2() {
            var v5 = params.bfs ? Q3.shift() : Q3.pop();
            var vId = v5.id();
            if (params.dfs) {
              if (V3[vId]) {
                return 0;
              }
              V3[vId] = true;
              connectedNodes.push(v5);
            }
            var depth = id2depth[vId];
            var prevEdge = connectedBy[vId];
            var src = prevEdge != null ? prevEdge.source() : null;
            var tgt = prevEdge != null ? prevEdge.target() : null;
            var prevNode = prevEdge == null ? void 0 : v5.same(src) ? tgt[0] : src[0];
            var ret;
            ret = fn3(v5, prevEdge, prevNode, j3++, depth);
            if (ret === true) {
              found = v5;
              return 1;
            }
            if (ret === false) {
              return 1;
            }
            var vwEdges = v5.connectedEdges().filter(function(e4) {
              return (!directed || e4.source().same(v5)) && edges3.has(e4);
            });
            for (var _i2 = 0; _i2 < vwEdges.length; _i2++) {
              var e3 = vwEdges[_i2];
              var w4 = e3.connectedNodes().filter(function(n2) {
                return !n2.same(v5) && nodes5.has(n2);
              });
              var wId = w4.id();
              if (w4.length !== 0 && !V3[wId]) {
                w4 = w4[0];
                Q3.push(w4);
                if (params.bfs) {
                  V3[wId] = true;
                  connectedNodes.push(w4);
                }
                connectedBy[wId] = e3;
                id2depth[wId] = id2depth[vId] + 1;
              }
            }
          }, "_loop"), _ret;
          while (Q3.length !== 0) {
            _ret = _loop();
            if (_ret === 0) continue;
            if (_ret === 1) break;
          }
          var connectedEles = cy.collection();
          for (var _i = 0; _i < connectedNodes.length; _i++) {
            var node2 = connectedNodes[_i];
            var edge = connectedBy[node2.id()];
            if (edge != null) {
              connectedEles.push(edge);
            }
            connectedEles.push(node2);
          }
          return {
            path: cy.collection(connectedEles),
            found: cy.collection(found)
          };
        }, "searchFn");
      }, "defineSearch");
      elesfn$v = {
        breadthFirstSearch: defineSearch({
          bfs: true
        }),
        depthFirstSearch: defineSearch({
          dfs: true
        })
      };
      elesfn$v.bfs = elesfn$v.breadthFirstSearch;
      elesfn$v.dfs = elesfn$v.depthFirstSearch;
      heap$2 = { exports: {} };
      heap$1 = heap$2.exports;
      __name(requireHeap$1, "requireHeap$1");
      __name(requireHeap, "requireHeap");
      heapExports = requireHeap();
      Heap = /* @__PURE__ */ getDefaultExportFromCjs(heapExports);
      dijkstraDefaults = defaults$g({
        root: null,
        weight: /* @__PURE__ */ __name(function weight(edge) {
          return 1;
        }, "weight"),
        directed: false
      });
      elesfn$u = {
        dijkstra: /* @__PURE__ */ __name(function dijkstra2(options2) {
          if (!plainObject(options2)) {
            var args = arguments;
            options2 = {
              root: args[0],
              weight: args[1],
              directed: args[2]
            };
          }
          var _dijkstraDefaults = dijkstraDefaults(options2), root4 = _dijkstraDefaults.root, weight8 = _dijkstraDefaults.weight, directed = _dijkstraDefaults.directed;
          var eles = this;
          var weightFn = weight8;
          var source = string(root4) ? this.filter(root4)[0] : root4[0];
          var dist3 = {};
          var prev2 = {};
          var knownDist = {};
          var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges;
          edges3.unmergeBy(function(ele) {
            return ele.isLoop();
          });
          var getDist3 = /* @__PURE__ */ __name(function getDist4(node3) {
            return dist3[node3.id()];
          }, "getDist");
          var setDist = /* @__PURE__ */ __name(function setDist2(node3, d3) {
            dist3[node3.id()] = d3;
            Q3.updateItem(node3);
          }, "setDist");
          var Q3 = new Heap(function(a2, b3) {
            return getDist3(a2) - getDist3(b3);
          });
          for (var i2 = 0; i2 < nodes5.length; i2++) {
            var node2 = nodes5[i2];
            dist3[node2.id()] = node2.same(source) ? 0 : Infinity;
            Q3.push(node2);
          }
          var distBetween = /* @__PURE__ */ __name(function distBetween2(u3, v5) {
            var uvs = (directed ? u3.edgesTo(v5) : u3.edgesWith(v5)).intersect(edges3);
            var smallestDistance = Infinity;
            var smallestEdge;
            for (var _i = 0; _i < uvs.length; _i++) {
              var edge = uvs[_i];
              var _weight = weightFn(edge);
              if (_weight < smallestDistance || !smallestEdge) {
                smallestDistance = _weight;
                smallestEdge = edge;
              }
            }
            return {
              edge: smallestEdge,
              dist: smallestDistance
            };
          }, "distBetween");
          while (Q3.size() > 0) {
            var u2 = Q3.pop();
            var smalletsDist = getDist3(u2);
            var uid = u2.id();
            knownDist[uid] = smalletsDist;
            if (smalletsDist === Infinity) {
              continue;
            }
            var neighbors = u2.neighborhood().intersect(nodes5);
            for (var _i2 = 0; _i2 < neighbors.length; _i2++) {
              var v3 = neighbors[_i2];
              var vid = v3.id();
              var vDist = distBetween(u2, v3);
              var alt = smalletsDist + vDist.dist;
              if (alt < getDist3(v3)) {
                setDist(v3, alt);
                prev2[vid] = {
                  node: u2,
                  edge: vDist.edge
                };
              }
            }
          }
          return {
            distanceTo: /* @__PURE__ */ __name(function distanceTo(node3) {
              var target = string(node3) ? nodes5.filter(node3)[0] : node3[0];
              return knownDist[target.id()];
            }, "distanceTo"),
            pathTo: /* @__PURE__ */ __name(function pathTo(node3) {
              var target = string(node3) ? nodes5.filter(node3)[0] : node3[0];
              var S4 = [];
              var u3 = target;
              var uid2 = u3.id();
              if (target.length > 0) {
                S4.unshift(target);
                while (prev2[uid2]) {
                  var p3 = prev2[uid2];
                  S4.unshift(p3.edge);
                  S4.unshift(p3.node);
                  u3 = p3.node;
                  uid2 = u3.id();
                }
              }
              return eles.spawn(S4);
            }, "pathTo")
          };
        }, "dijkstra")
      };
      elesfn$t = {
        // kruskal's algorithm (finds min spanning tree, assuming undirected graph)
        // implemented from pseudocode from wikipedia
        kruskal: /* @__PURE__ */ __name(function kruskal(weightFn) {
          weightFn = weightFn || function(edge2) {
            return 1;
          };
          var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges;
          var numNodes = nodes5.length;
          var forest = new Array(numNodes);
          var A2 = nodes5;
          var findSetIndex = /* @__PURE__ */ __name(function findSetIndex2(ele) {
            for (var i3 = 0; i3 < forest.length; i3++) {
              var eles = forest[i3];
              if (eles.has(ele)) {
                return i3;
              }
            }
          }, "findSetIndex");
          for (var i2 = 0; i2 < numNodes; i2++) {
            forest[i2] = this.spawn(nodes5[i2]);
          }
          var S4 = edges3.sort(function(a2, b3) {
            return weightFn(a2) - weightFn(b3);
          });
          for (var _i = 0; _i < S4.length; _i++) {
            var edge = S4[_i];
            var u2 = edge.source()[0];
            var v3 = edge.target()[0];
            var setUIndex = findSetIndex(u2);
            var setVIndex = findSetIndex(v3);
            var setU = forest[setUIndex];
            var setV = forest[setVIndex];
            if (setUIndex !== setVIndex) {
              A2.merge(edge);
              setU.merge(setV);
              forest.splice(setVIndex, 1);
            }
          }
          return A2;
        }, "kruskal")
      };
      aStarDefaults = defaults$g({
        root: null,
        goal: null,
        weight: /* @__PURE__ */ __name(function weight2(edge) {
          return 1;
        }, "weight"),
        heuristic: /* @__PURE__ */ __name(function heuristic(edge) {
          return 0;
        }, "heuristic"),
        directed: false
      });
      elesfn$s = {
        // Implemented from pseudocode from wikipedia
        aStar: /* @__PURE__ */ __name(function aStar(options2) {
          var cy = this.cy();
          var _aStarDefaults = aStarDefaults(options2), root4 = _aStarDefaults.root, goal = _aStarDefaults.goal, heuristic2 = _aStarDefaults.heuristic, directed = _aStarDefaults.directed, weight8 = _aStarDefaults.weight;
          root4 = cy.collection(root4)[0];
          goal = cy.collection(goal)[0];
          var sid = root4.id();
          var tid = goal.id();
          var gScore = {};
          var fScore = {};
          var closedSetIds = {};
          var openSet = new Heap(function(a2, b3) {
            return fScore[a2.id()] - fScore[b3.id()];
          });
          var openSetIds = new Set$1();
          var cameFrom = {};
          var cameFromEdge = {};
          var addToOpenSet = /* @__PURE__ */ __name(function addToOpenSet2(ele, id41) {
            openSet.push(ele);
            openSetIds.add(id41);
          }, "addToOpenSet");
          var cMin, cMinId;
          var popFromOpenSet = /* @__PURE__ */ __name(function popFromOpenSet2() {
            cMin = openSet.pop();
            cMinId = cMin.id();
            openSetIds["delete"](cMinId);
          }, "popFromOpenSet");
          var isInOpenSet = /* @__PURE__ */ __name(function isInOpenSet2(id41) {
            return openSetIds.has(id41);
          }, "isInOpenSet");
          addToOpenSet(root4, sid);
          gScore[sid] = 0;
          fScore[sid] = heuristic2(root4);
          var steps = 0;
          while (openSet.size() > 0) {
            popFromOpenSet();
            steps++;
            if (cMinId === tid) {
              var path4 = [];
              var pathNode = goal;
              var pathNodeId = tid;
              var pathEdge = cameFromEdge[pathNodeId];
              for (; ; ) {
                path4.unshift(pathNode);
                if (pathEdge != null) {
                  path4.unshift(pathEdge);
                }
                pathNode = cameFrom[pathNodeId];
                if (pathNode == null) {
                  break;
                }
                pathNodeId = pathNode.id();
                pathEdge = cameFromEdge[pathNodeId];
              }
              return {
                found: true,
                distance: gScore[cMinId],
                path: this.spawn(path4),
                steps
              };
            }
            closedSetIds[cMinId] = true;
            var vwEdges = cMin._private.edges;
            for (var i2 = 0; i2 < vwEdges.length; i2++) {
              var e3 = vwEdges[i2];
              if (!this.hasElementWithId(e3.id())) {
                continue;
              }
              if (directed && e3.data("source") !== cMinId) {
                continue;
              }
              var wSrc = e3.source();
              var wTgt = e3.target();
              var w4 = wSrc.id() !== cMinId ? wSrc : wTgt;
              var wid = w4.id();
              if (!this.hasElementWithId(wid)) {
                continue;
              }
              if (closedSetIds[wid]) {
                continue;
              }
              var tempScore = gScore[cMinId] + weight8(e3);
              if (!isInOpenSet(wid)) {
                gScore[wid] = tempScore;
                fScore[wid] = tempScore + heuristic2(w4);
                addToOpenSet(w4, wid);
                cameFrom[wid] = cMin;
                cameFromEdge[wid] = e3;
                continue;
              }
              if (tempScore < gScore[wid]) {
                gScore[wid] = tempScore;
                fScore[wid] = tempScore + heuristic2(w4);
                cameFrom[wid] = cMin;
                cameFromEdge[wid] = e3;
              }
            }
          }
          return {
            found: false,
            distance: void 0,
            path: void 0,
            steps
          };
        }, "aStar")
      };
      floydWarshallDefaults = defaults$g({
        weight: /* @__PURE__ */ __name(function weight3(edge) {
          return 1;
        }, "weight"),
        directed: false
      });
      elesfn$r = {
        // Implemented from pseudocode from wikipedia
        floydWarshall: /* @__PURE__ */ __name(function floydWarshall2(options2) {
          var cy = this.cy();
          var _floydWarshallDefault = floydWarshallDefaults(options2), weight8 = _floydWarshallDefault.weight, directed = _floydWarshallDefault.directed;
          var weightFn = weight8;
          var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges;
          var N3 = nodes5.length;
          var Nsq = N3 * N3;
          var indexOf2 = /* @__PURE__ */ __name(function indexOf3(node2) {
            return nodes5.indexOf(node2);
          }, "indexOf");
          var atIndex = /* @__PURE__ */ __name(function atIndex2(i3) {
            return nodes5[i3];
          }, "atIndex");
          var dist3 = new Array(Nsq);
          for (var n2 = 0; n2 < Nsq; n2++) {
            var j3 = n2 % N3;
            var i2 = (n2 - j3) / N3;
            if (i2 === j3) {
              dist3[n2] = 0;
            } else {
              dist3[n2] = Infinity;
            }
          }
          var next3 = new Array(Nsq);
          var edgeNext = new Array(Nsq);
          for (var _i = 0; _i < edges3.length; _i++) {
            var edge = edges3[_i];
            var src = edge.source()[0];
            var tgt = edge.target()[0];
            if (src === tgt) {
              continue;
            }
            var s2 = indexOf2(src);
            var t4 = indexOf2(tgt);
            var st2 = s2 * N3 + t4;
            var _weight = weightFn(edge);
            if (dist3[st2] > _weight) {
              dist3[st2] = _weight;
              next3[st2] = t4;
              edgeNext[st2] = edge;
            }
            if (!directed) {
              var ts = t4 * N3 + s2;
              if (!directed && dist3[ts] > _weight) {
                dist3[ts] = _weight;
                next3[ts] = s2;
                edgeNext[ts] = edge;
              }
            }
          }
          for (var k2 = 0; k2 < N3; k2++) {
            for (var _i2 = 0; _i2 < N3; _i2++) {
              var ik = _i2 * N3 + k2;
              for (var _j = 0; _j < N3; _j++) {
                var ij = _i2 * N3 + _j;
                var kj = k2 * N3 + _j;
                if (dist3[ik] + dist3[kj] < dist3[ij]) {
                  dist3[ij] = dist3[ik] + dist3[kj];
                  next3[ij] = next3[ik];
                }
              }
            }
          }
          var getArgEle = /* @__PURE__ */ __name(function getArgEle2(ele) {
            return (string(ele) ? cy.filter(ele) : ele)[0];
          }, "getArgEle");
          var indexOfArgEle = /* @__PURE__ */ __name(function indexOfArgEle2(ele) {
            return indexOf2(getArgEle(ele));
          }, "indexOfArgEle");
          var res = {
            distance: /* @__PURE__ */ __name(function distance3(from2, to) {
              var i3 = indexOfArgEle(from2);
              var j4 = indexOfArgEle(to);
              return dist3[i3 * N3 + j4];
            }, "distance"),
            path: /* @__PURE__ */ __name(function path4(from2, to) {
              var i3 = indexOfArgEle(from2);
              var j4 = indexOfArgEle(to);
              var fromNode = atIndex(i3);
              if (i3 === j4) {
                return fromNode.collection();
              }
              if (next3[i3 * N3 + j4] == null) {
                return cy.collection();
              }
              var path5 = cy.collection();
              var prev2 = i3;
              var edge2;
              path5.merge(fromNode);
              while (i3 !== j4) {
                prev2 = i3;
                i3 = next3[i3 * N3 + j4];
                edge2 = edgeNext[prev2 * N3 + i3];
                path5.merge(edge2);
                path5.merge(atIndex(i3));
              }
              return path5;
            }, "path")
          };
          return res;
        }, "floydWarshall")
        // floydWarshall
      };
      bellmanFordDefaults = defaults$g({
        weight: /* @__PURE__ */ __name(function weight4(edge) {
          return 1;
        }, "weight"),
        directed: false,
        root: null
      });
      elesfn$q = {
        // Implemented from pseudocode from wikipedia
        bellmanFord: /* @__PURE__ */ __name(function bellmanFord(options2) {
          var _this = this;
          var _bellmanFordDefaults = bellmanFordDefaults(options2), weight8 = _bellmanFordDefaults.weight, directed = _bellmanFordDefaults.directed, root4 = _bellmanFordDefaults.root;
          var weightFn = weight8;
          var eles = this;
          var cy = this.cy();
          var _this$byGroup = this.byGroup(), edges3 = _this$byGroup.edges, nodes5 = _this$byGroup.nodes;
          var numNodes = nodes5.length;
          var infoMap = new Map$1();
          var hasNegativeWeightCycle = false;
          var negativeWeightCycles = [];
          root4 = cy.collection(root4)[0];
          edges3.unmergeBy(function(edge2) {
            return edge2.isLoop();
          });
          var numEdges = edges3.length;
          var getInfo3 = /* @__PURE__ */ __name(function getInfo4(node3) {
            var obj = infoMap.get(node3.id());
            if (!obj) {
              obj = {};
              infoMap.set(node3.id(), obj);
            }
            return obj;
          }, "getInfo");
          var getNodeFromTo = /* @__PURE__ */ __name(function getNodeFromTo2(to) {
            return (string(to) ? cy.$(to) : to)[0];
          }, "getNodeFromTo");
          var distanceTo = /* @__PURE__ */ __name(function distanceTo2(to) {
            return getInfo3(getNodeFromTo(to)).dist;
          }, "distanceTo");
          var pathTo = /* @__PURE__ */ __name(function pathTo2(to) {
            var thisStart = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : root4;
            var end2 = getNodeFromTo(to);
            var path4 = [];
            var node3 = end2;
            for (; ; ) {
              if (node3 == null) {
                return _this.spawn();
              }
              var _getInfo = getInfo3(node3), edge2 = _getInfo.edge, pred = _getInfo.pred;
              path4.unshift(node3[0]);
              if (node3.same(thisStart) && path4.length > 0) {
                break;
              }
              if (edge2 != null) {
                path4.unshift(edge2);
              }
              node3 = pred;
            }
            return eles.spawn(path4);
          }, "pathTo");
          for (var i2 = 0; i2 < numNodes; i2++) {
            var node2 = nodes5[i2];
            var info2 = getInfo3(node2);
            if (node2.same(root4)) {
              info2.dist = 0;
            } else {
              info2.dist = Infinity;
            }
            info2.pred = null;
            info2.edge = null;
          }
          var replacedEdge = false;
          var checkForEdgeReplacement = /* @__PURE__ */ __name(function checkForEdgeReplacement2(node1, node22, edge2, info1, info22, weight9) {
            var dist3 = info1.dist + weight9;
            if (dist3 < info22.dist && !edge2.same(info1.edge)) {
              info22.dist = dist3;
              info22.pred = node1;
              info22.edge = edge2;
              replacedEdge = true;
            }
          }, "checkForEdgeReplacement");
          for (var _i = 1; _i < numNodes; _i++) {
            replacedEdge = false;
            for (var e3 = 0; e3 < numEdges; e3++) {
              var edge = edges3[e3];
              var src = edge.source();
              var tgt = edge.target();
              var _weight = weightFn(edge);
              var srcInfo = getInfo3(src);
              var tgtInfo = getInfo3(tgt);
              checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight);
              if (!directed) {
                checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight);
              }
            }
            if (!replacedEdge) {
              break;
            }
          }
          if (replacedEdge) {
            var negativeWeightCycleIds = [];
            for (var _e2 = 0; _e2 < numEdges; _e2++) {
              var _edge = edges3[_e2];
              var _src = _edge.source();
              var _tgt = _edge.target();
              var _weight2 = weightFn(_edge);
              var srcDist = getInfo3(_src).dist;
              var tgtDist = getInfo3(_tgt).dist;
              if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) {
                if (!hasNegativeWeightCycle) {
                  warn("Graph contains a negative weight cycle for Bellman-Ford");
                  hasNegativeWeightCycle = true;
                }
                if (options2.findNegativeWeightCycles !== false) {
                  var negativeNodes = [];
                  if (srcDist + _weight2 < tgtDist) {
                    negativeNodes.push(_src);
                  }
                  if (!directed && tgtDist + _weight2 < srcDist) {
                    negativeNodes.push(_tgt);
                  }
                  var numNegativeNodes = negativeNodes.length;
                  for (var n2 = 0; n2 < numNegativeNodes; n2++) {
                    var start3 = negativeNodes[n2];
                    var cycle = [start3];
                    cycle.push(getInfo3(start3).edge);
                    var _node = getInfo3(start3).pred;
                    while (cycle.indexOf(_node) === -1) {
                      cycle.push(_node);
                      cycle.push(getInfo3(_node).edge);
                      _node = getInfo3(_node).pred;
                    }
                    cycle = cycle.slice(cycle.indexOf(_node));
                    var smallestId = cycle[0].id();
                    var smallestIndex = 0;
                    for (var c3 = 2; c3 < cycle.length; c3 += 2) {
                      if (cycle[c3].id() < smallestId) {
                        smallestId = cycle[c3].id();
                        smallestIndex = c3;
                      }
                    }
                    cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex));
                    cycle.push(cycle[0]);
                    var cycleId = cycle.map(function(el) {
                      return el.id();
                    }).join(",");
                    if (negativeWeightCycleIds.indexOf(cycleId) === -1) {
                      negativeWeightCycles.push(eles.spawn(cycle));
                      negativeWeightCycleIds.push(cycleId);
                    }
                  }
                } else {
                  break;
                }
              }
            }
          }
          return {
            distanceTo,
            pathTo,
            hasNegativeWeightCycle,
            negativeWeightCycles
          };
        }, "bellmanFord")
        // bellmanFord
      };
      sqrt2 = Math.sqrt(2);
      collapse = /* @__PURE__ */ __name(function collapse2(edgeIndex, nodeMap, remainingEdges) {
        if (remainingEdges.length === 0) {
          error("Karger-Stein must be run on a connected (sub)graph");
        }
        var edgeInfo = remainingEdges[edgeIndex];
        var sourceIn = edgeInfo[1];
        var targetIn = edgeInfo[2];
        var partition1 = nodeMap[sourceIn];
        var partition2 = nodeMap[targetIn];
        var newEdges = remainingEdges;
        for (var i2 = newEdges.length - 1; i2 >= 0; i2--) {
          var edge = newEdges[i2];
          var src = edge[1];
          var tgt = edge[2];
          if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) {
            newEdges.splice(i2, 1);
          }
        }
        for (var _i = 0; _i < newEdges.length; _i++) {
          var _edge = newEdges[_i];
          if (_edge[1] === partition2) {
            newEdges[_i] = _edge.slice();
            newEdges[_i][1] = partition1;
          } else if (_edge[2] === partition2) {
            newEdges[_i] = _edge.slice();
            newEdges[_i][2] = partition1;
          }
        }
        for (var _i2 = 0; _i2 < nodeMap.length; _i2++) {
          if (nodeMap[_i2] === partition2) {
            nodeMap[_i2] = partition1;
          }
        }
        return newEdges;
      }, "collapse");
      contractUntil = /* @__PURE__ */ __name(function contractUntil2(metaNodeMap, remainingEdges, size4, sizeLimit) {
        while (size4 > sizeLimit) {
          var edgeIndex = Math.floor(Math.random() * remainingEdges.length);
          remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges);
          size4--;
        }
        return remainingEdges;
      }, "contractUntil");
      elesfn$p = {
        // Computes the minimum cut of an undirected graph
        // Returns the correct answer with high probability
        kargerStein: /* @__PURE__ */ __name(function kargerStein() {
          var _this = this;
          var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges;
          edges3.unmergeBy(function(edge) {
            return edge.isLoop();
          });
          var numNodes = nodes5.length;
          var numEdges = edges3.length;
          var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2));
          var stopSize = Math.floor(numNodes / sqrt2);
          if (numNodes < 2) {
            error("At least 2 nodes are required for Karger-Stein algorithm");
            return void 0;
          }
          var edgeIndexes = [];
          for (var i2 = 0; i2 < numEdges; i2++) {
            var e3 = edges3[i2];
            edgeIndexes.push([i2, nodes5.indexOf(e3.source()), nodes5.indexOf(e3.target())]);
          }
          var minCutSize = Infinity;
          var minCutEdgeIndexes = [];
          var minCutNodeMap = new Array(numNodes);
          var metaNodeMap = new Array(numNodes);
          var metaNodeMap2 = new Array(numNodes);
          var copyNodesMap = /* @__PURE__ */ __name(function copyNodesMap2(from2, to) {
            for (var _i3 = 0; _i3 < numNodes; _i3++) {
              to[_i3] = from2[_i3];
            }
          }, "copyNodesMap");
          for (var iter = 0; iter <= numIter; iter++) {
            for (var _i4 = 0; _i4 < numNodes; _i4++) {
              metaNodeMap[_i4] = _i4;
            }
            var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize);
            var edgesState2 = edgesState.slice();
            copyNodesMap(metaNodeMap, metaNodeMap2);
            var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2);
            var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2);
            if (res1.length <= res2.length && res1.length < minCutSize) {
              minCutSize = res1.length;
              minCutEdgeIndexes = res1;
              copyNodesMap(metaNodeMap, minCutNodeMap);
            } else if (res2.length <= res1.length && res2.length < minCutSize) {
              minCutSize = res2.length;
              minCutEdgeIndexes = res2;
              copyNodesMap(metaNodeMap2, minCutNodeMap);
            }
          }
          var cut = this.spawn(minCutEdgeIndexes.map(function(e4) {
            return edges3[e4[0]];
          }));
          var partition1 = this.spawn();
          var partition2 = this.spawn();
          var witnessNodePartition = minCutNodeMap[0];
          for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) {
            var partitionId = minCutNodeMap[_i5];
            var node2 = nodes5[_i5];
            if (partitionId === witnessNodePartition) {
              partition1.merge(node2);
            } else {
              partition2.merge(node2);
            }
          }
          var constructComponent = /* @__PURE__ */ __name(function constructComponent2(subset) {
            var component2 = _this.spawn();
            subset.forEach(function(node3) {
              component2.merge(node3);
              node3.connectedEdges().forEach(function(edge) {
                if (_this.contains(edge) && !cut.contains(edge)) {
                  component2.merge(edge);
                }
              });
            });
            return component2;
          }, "constructComponent");
          var components3 = [constructComponent(partition1), constructComponent(partition2)];
          var ret = {
            cut,
            components: components3,
            // n.b. partitions are included to be compatible with the old api spec
            // (could be removed in a future major version)
            partition1,
            partition2
          };
          return ret;
        }, "kargerStein")
      };
      copyPosition = /* @__PURE__ */ __name(function copyPosition2(p3) {
        return {
          x: p3.x,
          y: p3.y
        };
      }, "copyPosition");
      modelToRenderedPosition$1 = /* @__PURE__ */ __name(function modelToRenderedPosition(p3, zoom2, pan2) {
        return {
          x: p3.x * zoom2 + pan2.x,
          y: p3.y * zoom2 + pan2.y
        };
      }, "modelToRenderedPosition");
      renderedToModelPosition = /* @__PURE__ */ __name(function renderedToModelPosition2(p3, zoom2, pan2) {
        return {
          x: (p3.x - pan2.x) / zoom2,
          y: (p3.y - pan2.y) / zoom2
        };
      }, "renderedToModelPosition");
      array2point = /* @__PURE__ */ __name(function array2point2(arr) {
        return {
          x: arr[0],
          y: arr[1]
        };
      }, "array2point");
      min5 = /* @__PURE__ */ __name(function min6(arr) {
        var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
        var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length;
        var min10 = Infinity;
        for (var i2 = begin; i2 < end2; i2++) {
          var val = arr[i2];
          if (isFinite(val)) {
            min10 = Math.min(val, min10);
          }
        }
        return min10;
      }, "min");
      max5 = /* @__PURE__ */ __name(function max6(arr) {
        var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
        var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length;
        var max10 = -Infinity;
        for (var i2 = begin; i2 < end2; i2++) {
          var val = arr[i2];
          if (isFinite(val)) {
            max10 = Math.max(val, max10);
          }
        }
        return max10;
      }, "max");
      mean = /* @__PURE__ */ __name(function mean2(arr) {
        var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
        var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length;
        var total = 0;
        var n2 = 0;
        for (var i2 = begin; i2 < end2; i2++) {
          var val = arr[i2];
          if (isFinite(val)) {
            total += val;
            n2++;
          }
        }
        return total / n2;
      }, "mean");
      median2 = /* @__PURE__ */ __name(function median3(arr) {
        var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
        var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length;
        var copy5 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true;
        var sort3 = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true;
        var includeHoles = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true;
        if (copy5) {
          arr = arr.slice(begin, end2);
        } else {
          if (end2 < arr.length) {
            arr.splice(end2, arr.length - end2);
          }
          if (begin > 0) {
            arr.splice(0, begin);
          }
        }
        var off = 0;
        for (var i2 = arr.length - 1; i2 >= 0; i2--) {
          var v3 = arr[i2];
          if (includeHoles) {
            if (!isFinite(v3)) {
              arr[i2] = -Infinity;
              off++;
            }
          } else {
            arr.splice(i2, 1);
          }
        }
        if (sort3) {
          arr.sort(function(a2, b3) {
            return a2 - b3;
          });
        }
        var len = arr.length;
        var mid = Math.floor(len / 2);
        if (len % 2 !== 0) {
          return arr[mid + 1 + off];
        } else {
          return (arr[mid - 1 + off] + arr[mid + off]) / 2;
        }
      }, "median");
      deg2rad = /* @__PURE__ */ __name(function deg2rad2(deg) {
        return Math.PI * deg / 180;
      }, "deg2rad");
      getAngleFromDisp = /* @__PURE__ */ __name(function getAngleFromDisp2(dispX, dispY) {
        return Math.atan2(dispY, dispX) - Math.PI / 2;
      }, "getAngleFromDisp");
      log22 = Math.log2 || function(n2) {
        return Math.log(n2) / Math.log(2);
      };
      signum = /* @__PURE__ */ __name(function signum2(x5) {
        if (x5 > 0) {
          return 1;
        } else if (x5 < 0) {
          return -1;
        } else {
          return 0;
        }
      }, "signum");
      dist = /* @__PURE__ */ __name(function dist2(p1, p22) {
        return Math.sqrt(sqdist(p1, p22));
      }, "dist");
      sqdist = /* @__PURE__ */ __name(function sqdist2(p1, p22) {
        var dx = p22.x - p1.x;
        var dy = p22.y - p1.y;
        return dx * dx + dy * dy;
      }, "sqdist");
      inPlaceSumNormalize = /* @__PURE__ */ __name(function inPlaceSumNormalize2(v3) {
        var length2 = v3.length;
        var total = 0;
        for (var i2 = 0; i2 < length2; i2++) {
          total += v3[i2];
        }
        for (var _i = 0; _i < length2; _i++) {
          v3[_i] = v3[_i] / total;
        }
        return v3;
      }, "inPlaceSumNormalize");
      qbezierAt = /* @__PURE__ */ __name(function qbezierAt2(p0, p1, p22, t4) {
        return (1 - t4) * (1 - t4) * p0 + 2 * (1 - t4) * t4 * p1 + t4 * t4 * p22;
      }, "qbezierAt");
      qbezierPtAt = /* @__PURE__ */ __name(function qbezierPtAt2(p0, p1, p22, t4) {
        return {
          x: qbezierAt(p0.x, p1.x, p22.x, t4),
          y: qbezierAt(p0.y, p1.y, p22.y, t4)
        };
      }, "qbezierPtAt");
      lineAt = /* @__PURE__ */ __name(function lineAt2(p0, p1, t4, d3) {
        var vec = {
          x: p1.x - p0.x,
          y: p1.y - p0.y
        };
        var vecDist = dist(p0, p1);
        var normVec = {
          x: vec.x / vecDist,
          y: vec.y / vecDist
        };
        t4 = t4 == null ? 0 : t4;
        d3 = d3 != null ? d3 : t4 * vecDist;
        return {
          x: p0.x + normVec.x * d3,
          y: p0.y + normVec.y * d3
        };
      }, "lineAt");
      bound = /* @__PURE__ */ __name(function bound2(min10, val, max10) {
        return Math.max(min10, Math.min(max10, val));
      }, "bound");
      makeBoundingBox = /* @__PURE__ */ __name(function makeBoundingBox2(bb) {
        if (bb == null) {
          return {
            x1: Infinity,
            y1: Infinity,
            x2: -Infinity,
            y2: -Infinity,
            w: 0,
            h: 0
          };
        } else if (bb.x1 != null && bb.y1 != null) {
          if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) {
            return {
              x1: bb.x1,
              y1: bb.y1,
              x2: bb.x2,
              y2: bb.y2,
              w: bb.x2 - bb.x1,
              h: bb.y2 - bb.y1
            };
          } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) {
            return {
              x1: bb.x1,
              y1: bb.y1,
              x2: bb.x1 + bb.w,
              y2: bb.y1 + bb.h,
              w: bb.w,
              h: bb.h
            };
          }
        }
      }, "makeBoundingBox");
      copyBoundingBox = /* @__PURE__ */ __name(function copyBoundingBox2(bb) {
        return {
          x1: bb.x1,
          x2: bb.x2,
          w: bb.w,
          y1: bb.y1,
          y2: bb.y2,
          h: bb.h
        };
      }, "copyBoundingBox");
      clearBoundingBox = /* @__PURE__ */ __name(function clearBoundingBox2(bb) {
        bb.x1 = Infinity;
        bb.y1 = Infinity;
        bb.x2 = -Infinity;
        bb.y2 = -Infinity;
        bb.w = 0;
        bb.h = 0;
      }, "clearBoundingBox");
      updateBoundingBox = /* @__PURE__ */ __name(function updateBoundingBox2(bb1, bb2) {
        bb1.x1 = Math.min(bb1.x1, bb2.x1);
        bb1.x2 = Math.max(bb1.x2, bb2.x2);
        bb1.w = bb1.x2 - bb1.x1;
        bb1.y1 = Math.min(bb1.y1, bb2.y1);
        bb1.y2 = Math.max(bb1.y2, bb2.y2);
        bb1.h = bb1.y2 - bb1.y1;
      }, "updateBoundingBox");
      expandBoundingBoxByPoint = /* @__PURE__ */ __name(function expandBoundingBoxByPoint2(bb, x5, y6) {
        bb.x1 = Math.min(bb.x1, x5);
        bb.x2 = Math.max(bb.x2, x5);
        bb.w = bb.x2 - bb.x1;
        bb.y1 = Math.min(bb.y1, y6);
        bb.y2 = Math.max(bb.y2, y6);
        bb.h = bb.y2 - bb.y1;
      }, "expandBoundingBoxByPoint");
      expandBoundingBox = /* @__PURE__ */ __name(function expandBoundingBox2(bb) {
        var padding = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
        bb.x1 -= padding;
        bb.x2 += padding;
        bb.y1 -= padding;
        bb.y2 += padding;
        bb.w = bb.x2 - bb.x1;
        bb.h = bb.y2 - bb.y1;
        return bb;
      }, "expandBoundingBox");
      expandBoundingBoxSides = /* @__PURE__ */ __name(function expandBoundingBoxSides2(bb) {
        var padding = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [0];
        var top2, right3, bottom2, left3;
        if (padding.length === 1) {
          top2 = right3 = bottom2 = left3 = padding[0];
        } else if (padding.length === 2) {
          top2 = bottom2 = padding[0];
          left3 = right3 = padding[1];
        } else if (padding.length === 4) {
          var _padding = _slicedToArray(padding, 4);
          top2 = _padding[0];
          right3 = _padding[1];
          bottom2 = _padding[2];
          left3 = _padding[3];
        }
        bb.x1 -= left3;
        bb.x2 += right3;
        bb.y1 -= top2;
        bb.y2 += bottom2;
        bb.w = bb.x2 - bb.x1;
        bb.h = bb.y2 - bb.y1;
        return bb;
      }, "expandBoundingBoxSides");
      assignBoundingBox = /* @__PURE__ */ __name(function assignBoundingBox2(bb1, bb2) {
        bb1.x1 = bb2.x1;
        bb1.y1 = bb2.y1;
        bb1.x2 = bb2.x2;
        bb1.y2 = bb2.y2;
        bb1.w = bb1.x2 - bb1.x1;
        bb1.h = bb1.y2 - bb1.y1;
      }, "assignBoundingBox");
      boundingBoxesIntersect = /* @__PURE__ */ __name(function boundingBoxesIntersect2(bb1, bb2) {
        if (bb1.x1 > bb2.x2) {
          return false;
        }
        if (bb2.x1 > bb1.x2) {
          return false;
        }
        if (bb1.x2 < bb2.x1) {
          return false;
        }
        if (bb2.x2 < bb1.x1) {
          return false;
        }
        if (bb1.y2 < bb2.y1) {
          return false;
        }
        if (bb2.y2 < bb1.y1) {
          return false;
        }
        if (bb1.y1 > bb2.y2) {
          return false;
        }
        if (bb2.y1 > bb1.y2) {
          return false;
        }
        return true;
      }, "boundingBoxesIntersect");
      inBoundingBox = /* @__PURE__ */ __name(function inBoundingBox2(bb, x5, y6) {
        return bb.x1 <= x5 && x5 <= bb.x2 && bb.y1 <= y6 && y6 <= bb.y2;
      }, "inBoundingBox");
      pointInBoundingBox = /* @__PURE__ */ __name(function pointInBoundingBox2(bb, pt) {
        return inBoundingBox(bb, pt.x, pt.y);
      }, "pointInBoundingBox");
      boundingBoxInBoundingBox = /* @__PURE__ */ __name(function boundingBoxInBoundingBox2(bb1, bb2) {
        return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2);
      }, "boundingBoxInBoundingBox");
      hypot = (_Math$hypot = Math.hypot) !== null && _Math$hypot !== void 0 ? _Math$hypot : function(x5, y6) {
        return Math.sqrt(x5 * x5 + y6 * y6);
      };
      __name(inflatePolygon, "inflatePolygon");
      __name(miterBox, "miterBox");
      roundRectangleIntersectLine = /* @__PURE__ */ __name(function roundRectangleIntersectLine2(x5, y6, nodeX, nodeY, width3, height2, padding) {
        var radius2 = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : "auto";
        var cornerRadius = radius2 === "auto" ? getRoundRectangleRadius(width3, height2) : radius2;
        var halfWidth = width3 / 2;
        var halfHeight = height2 / 2;
        cornerRadius = Math.min(cornerRadius, halfWidth, halfHeight);
        var doWidth = cornerRadius !== halfWidth, doHeight = cornerRadius !== halfHeight;
        var straightLineIntersections;
        if (doWidth) {
          var topStartX = nodeX - halfWidth + cornerRadius - padding;
          var topStartY = nodeY - halfHeight - padding;
          var topEndX = nodeX + halfWidth - cornerRadius + padding;
          var topEndY = topStartY;
          straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);
          if (straightLineIntersections.length > 0) {
            return straightLineIntersections;
          }
        }
        if (doHeight) {
          var rightStartX = nodeX + halfWidth + padding;
          var rightStartY = nodeY - halfHeight + cornerRadius - padding;
          var rightEndX = rightStartX;
          var rightEndY = nodeY + halfHeight - cornerRadius + padding;
          straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false);
          if (straightLineIntersections.length > 0) {
            return straightLineIntersections;
          }
        }
        if (doWidth) {
          var bottomStartX = nodeX - halfWidth + cornerRadius - padding;
          var bottomStartY = nodeY + halfHeight + padding;
          var bottomEndX = nodeX + halfWidth - cornerRadius + padding;
          var bottomEndY = bottomStartY;
          straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false);
          if (straightLineIntersections.length > 0) {
            return straightLineIntersections;
          }
        }
        if (doHeight) {
          var leftStartX = nodeX - halfWidth - padding;
          var leftStartY = nodeY - halfHeight + cornerRadius - padding;
          var leftEndX = leftStartX;
          var leftEndY = nodeY + halfHeight - cornerRadius + padding;
          straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false);
          if (straightLineIntersections.length > 0) {
            return straightLineIntersections;
          }
        }
        var arcIntersections;
        {
          var topLeftCenterX = nodeX - halfWidth + cornerRadius;
          var topLeftCenterY = nodeY - halfHeight + cornerRadius;
          arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding);
          if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) {
            return [arcIntersections[0], arcIntersections[1]];
          }
        }
        {
          var topRightCenterX = nodeX + halfWidth - cornerRadius;
          var topRightCenterY = nodeY - halfHeight + cornerRadius;
          arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding);
          if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) {
            return [arcIntersections[0], arcIntersections[1]];
          }
        }
        {
          var bottomRightCenterX = nodeX + halfWidth - cornerRadius;
          var bottomRightCenterY = nodeY + halfHeight - cornerRadius;
          arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding);
          if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) {
            return [arcIntersections[0], arcIntersections[1]];
          }
        }
        {
          var bottomLeftCenterX = nodeX - halfWidth + cornerRadius;
          var bottomLeftCenterY = nodeY + halfHeight - cornerRadius;
          arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding);
          if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) {
            return [arcIntersections[0], arcIntersections[1]];
          }
        }
        return [];
      }, "roundRectangleIntersectLine");
      inLineVicinity = /* @__PURE__ */ __name(function inLineVicinity2(x5, y6, lx1, ly1, lx2, ly2, tolerance) {
        var t4 = tolerance;
        var x1 = Math.min(lx1, lx2);
        var x22 = Math.max(lx1, lx2);
        var y1 = Math.min(ly1, ly2);
        var y22 = Math.max(ly1, ly2);
        return x1 - t4 <= x5 && x5 <= x22 + t4 && y1 - t4 <= y6 && y6 <= y22 + t4;
      }, "inLineVicinity");
      inBezierVicinity = /* @__PURE__ */ __name(function inBezierVicinity2(x5, y6, x1, y1, x22, y22, x32, y32, tolerance) {
        var bb = {
          x1: Math.min(x1, x32, x22) - tolerance,
          x2: Math.max(x1, x32, x22) + tolerance,
          y1: Math.min(y1, y32, y22) - tolerance,
          y2: Math.max(y1, y32, y22) + tolerance
        };
        if (x5 < bb.x1 || x5 > bb.x2 || y6 < bb.y1 || y6 > bb.y2) {
          return false;
        } else {
          return true;
        }
      }, "inBezierVicinity");
      solveQuadratic = /* @__PURE__ */ __name(function solveQuadratic2(a2, b3, c3, val) {
        c3 -= val;
        var r2 = b3 * b3 - 4 * a2 * c3;
        if (r2 < 0) {
          return [];
        }
        var sqrtR = Math.sqrt(r2);
        var denom = 2 * a2;
        var root1 = (-b3 + sqrtR) / denom;
        var root23 = (-b3 - sqrtR) / denom;
        return [root1, root23];
      }, "solveQuadratic");
      solveCubic = /* @__PURE__ */ __name(function solveCubic2(a2, b3, c3, d3, result) {
        var epsilon6 = 1e-5;
        if (a2 === 0) {
          a2 = epsilon6;
        }
        b3 /= a2;
        c3 /= a2;
        d3 /= a2;
        var discriminant, q3, r2, dum1, s2, t4, term1, r13;
        q3 = (3 * c3 - b3 * b3) / 9;
        r2 = -(27 * d3) + b3 * (9 * c3 - 2 * (b3 * b3));
        r2 /= 54;
        discriminant = q3 * q3 * q3 + r2 * r2;
        result[1] = 0;
        term1 = b3 / 3;
        if (discriminant > 0) {
          s2 = r2 + Math.sqrt(discriminant);
          s2 = s2 < 0 ? -Math.pow(-s2, 1 / 3) : Math.pow(s2, 1 / 3);
          t4 = r2 - Math.sqrt(discriminant);
          t4 = t4 < 0 ? -Math.pow(-t4, 1 / 3) : Math.pow(t4, 1 / 3);
          result[0] = -term1 + s2 + t4;
          term1 += (s2 + t4) / 2;
          result[4] = result[2] = -term1;
          term1 = Math.sqrt(3) * (-t4 + s2) / 2;
          result[3] = term1;
          result[5] = -term1;
          return;
        }
        result[5] = result[3] = 0;
        if (discriminant === 0) {
          r13 = r2 < 0 ? -Math.pow(-r2, 1 / 3) : Math.pow(r2, 1 / 3);
          result[0] = -term1 + 2 * r13;
          result[4] = result[2] = -(r13 + term1);
          return;
        }
        q3 = -q3;
        dum1 = q3 * q3 * q3;
        dum1 = Math.acos(r2 / Math.sqrt(dum1));
        r13 = 2 * Math.sqrt(q3);
        result[0] = -term1 + r13 * Math.cos(dum1 / 3);
        result[2] = -term1 + r13 * Math.cos((dum1 + 2 * Math.PI) / 3);
        result[4] = -term1 + r13 * Math.cos((dum1 + 4 * Math.PI) / 3);
        return;
      }, "solveCubic");
      sqdistToQuadraticBezier = /* @__PURE__ */ __name(function sqdistToQuadraticBezier2(x5, y6, x1, y1, x22, y22, x32, y32) {
        var a2 = 1 * x1 * x1 - 4 * x1 * x22 + 2 * x1 * x32 + 4 * x22 * x22 - 4 * x22 * x32 + x32 * x32 + y1 * y1 - 4 * y1 * y22 + 2 * y1 * y32 + 4 * y22 * y22 - 4 * y22 * y32 + y32 * y32;
        var b3 = 1 * 9 * x1 * x22 - 3 * x1 * x1 - 3 * x1 * x32 - 6 * x22 * x22 + 3 * x22 * x32 + 9 * y1 * y22 - 3 * y1 * y1 - 3 * y1 * y32 - 6 * y22 * y22 + 3 * y22 * y32;
        var c3 = 1 * 3 * x1 * x1 - 6 * x1 * x22 + x1 * x32 - x1 * x5 + 2 * x22 * x22 + 2 * x22 * x5 - x32 * x5 + 3 * y1 * y1 - 6 * y1 * y22 + y1 * y32 - y1 * y6 + 2 * y22 * y22 + 2 * y22 * y6 - y32 * y6;
        var d3 = 1 * x1 * x22 - x1 * x1 + x1 * x5 - x22 * x5 + y1 * y22 - y1 * y1 + y1 * y6 - y22 * y6;
        var roots = [];
        solveCubic(a2, b3, c3, d3, roots);
        var zeroThreshold = 1e-7;
        var params = [];
        for (var index = 0; index < 6; index += 2) {
          if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1) {
            params.push(roots[index]);
          }
        }
        params.push(1);
        params.push(0);
        var minDistanceSquared = -1;
        var curX, curY, distSquared;
        for (var i2 = 0; i2 < params.length; i2++) {
          curX = Math.pow(1 - params[i2], 2) * x1 + 2 * (1 - params[i2]) * params[i2] * x22 + params[i2] * params[i2] * x32;
          curY = Math.pow(1 - params[i2], 2) * y1 + 2 * (1 - params[i2]) * params[i2] * y22 + params[i2] * params[i2] * y32;
          distSquared = Math.pow(curX - x5, 2) + Math.pow(curY - y6, 2);
          if (minDistanceSquared >= 0) {
            if (distSquared < minDistanceSquared) {
              minDistanceSquared = distSquared;
            }
          } else {
            minDistanceSquared = distSquared;
          }
        }
        return minDistanceSquared;
      }, "sqdistToQuadraticBezier");
      sqdistToFiniteLine = /* @__PURE__ */ __name(function sqdistToFiniteLine2(x5, y6, x1, y1, x22, y22) {
        var offset = [x5 - x1, y6 - y1];
        var line2 = [x22 - x1, y22 - y1];
        var lineSq = line2[0] * line2[0] + line2[1] * line2[1];
        var hypSq = offset[0] * offset[0] + offset[1] * offset[1];
        var dotProduct = offset[0] * line2[0] + offset[1] * line2[1];
        var adjSq = dotProduct * dotProduct / lineSq;
        if (dotProduct < 0) {
          return hypSq;
        }
        if (adjSq > lineSq) {
          return (x5 - x22) * (x5 - x22) + (y6 - y22) * (y6 - y22);
        }
        return hypSq - adjSq;
      }, "sqdistToFiniteLine");
      pointInsidePolygonPoints = /* @__PURE__ */ __name(function pointInsidePolygonPoints2(x5, y6, points) {
        var x1, y1, x22, y22;
        var y32;
        var up = 0;
        for (var i2 = 0; i2 < points.length / 2; i2++) {
          x1 = points[i2 * 2];
          y1 = points[i2 * 2 + 1];
          if (i2 + 1 < points.length / 2) {
            x22 = points[(i2 + 1) * 2];
            y22 = points[(i2 + 1) * 2 + 1];
          } else {
            x22 = points[(i2 + 1 - points.length / 2) * 2];
            y22 = points[(i2 + 1 - points.length / 2) * 2 + 1];
          }
          if (x1 == x5 && x22 == x5) ;
          else if (x1 >= x5 && x5 >= x22 || x1 <= x5 && x5 <= x22) {
            y32 = (x5 - x1) / (x22 - x1) * (y22 - y1) + y1;
            if (y32 > y6) {
              up++;
            }
          } else {
            continue;
          }
        }
        if (up % 2 === 0) {
          return false;
        } else {
          return true;
        }
      }, "pointInsidePolygonPoints");
      pointInsidePolygon = /* @__PURE__ */ __name(function pointInsidePolygon2(x5, y6, basePoints, centerX, centerY, width3, height2, direction2, padding) {
        var transformedPoints = new Array(basePoints.length);
        var angle2;
        if (direction2[0] != null) {
          angle2 = Math.atan(direction2[1] / direction2[0]);
          if (direction2[0] < 0) {
            angle2 = angle2 + Math.PI / 2;
          } else {
            angle2 = -angle2 - Math.PI / 2;
          }
        } else {
          angle2 = direction2;
        }
        var cos3 = Math.cos(-angle2);
        var sin3 = Math.sin(-angle2);
        for (var i2 = 0; i2 < transformedPoints.length / 2; i2++) {
          transformedPoints[i2 * 2] = width3 / 2 * (basePoints[i2 * 2] * cos3 - basePoints[i2 * 2 + 1] * sin3);
          transformedPoints[i2 * 2 + 1] = height2 / 2 * (basePoints[i2 * 2 + 1] * cos3 + basePoints[i2 * 2] * sin3);
          transformedPoints[i2 * 2] += centerX;
          transformedPoints[i2 * 2 + 1] += centerY;
        }
        var points;
        if (padding > 0) {
          var expandedLineSet = expandPolygon(transformedPoints, -padding);
          points = joinLines(expandedLineSet);
        } else {
          points = transformedPoints;
        }
        return pointInsidePolygonPoints(x5, y6, points);
      }, "pointInsidePolygon");
      pointInsideRoundPolygon = /* @__PURE__ */ __name(function pointInsideRoundPolygon2(x5, y6, basePoints, centerX, centerY, width3, height2, corners) {
        var cutPolygonPoints = new Array(basePoints.length * 2);
        for (var i2 = 0; i2 < corners.length; i2++) {
          var corner = corners[i2];
          cutPolygonPoints[i2 * 4 + 0] = corner.startX;
          cutPolygonPoints[i2 * 4 + 1] = corner.startY;
          cutPolygonPoints[i2 * 4 + 2] = corner.stopX;
          cutPolygonPoints[i2 * 4 + 3] = corner.stopY;
          var squaredDistance = Math.pow(corner.cx - x5, 2) + Math.pow(corner.cy - y6, 2);
          if (squaredDistance <= Math.pow(corner.radius, 2)) {
            return true;
          }
        }
        return pointInsidePolygonPoints(x5, y6, cutPolygonPoints);
      }, "pointInsideRoundPolygon");
      joinLines = /* @__PURE__ */ __name(function joinLines2(lineSet) {
        var vertices = new Array(lineSet.length / 2);
        var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY;
        var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY;
        for (var i2 = 0; i2 < lineSet.length / 4; i2++) {
          currentLineStartX = lineSet[i2 * 4];
          currentLineStartY = lineSet[i2 * 4 + 1];
          currentLineEndX = lineSet[i2 * 4 + 2];
          currentLineEndY = lineSet[i2 * 4 + 3];
          if (i2 < lineSet.length / 4 - 1) {
            nextLineStartX = lineSet[(i2 + 1) * 4];
            nextLineStartY = lineSet[(i2 + 1) * 4 + 1];
            nextLineEndX = lineSet[(i2 + 1) * 4 + 2];
            nextLineEndY = lineSet[(i2 + 1) * 4 + 3];
          } else {
            nextLineStartX = lineSet[0];
            nextLineStartY = lineSet[1];
            nextLineEndX = lineSet[2];
            nextLineEndY = lineSet[3];
          }
          var intersection4 = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true);
          vertices[i2 * 2] = intersection4[0];
          vertices[i2 * 2 + 1] = intersection4[1];
        }
        return vertices;
      }, "joinLines");
      expandPolygon = /* @__PURE__ */ __name(function expandPolygon2(points, pad3) {
        var expandedLineSet = new Array(points.length * 2);
        var currentPointX, currentPointY, nextPointX, nextPointY;
        for (var i2 = 0; i2 < points.length / 2; i2++) {
          currentPointX = points[i2 * 2];
          currentPointY = points[i2 * 2 + 1];
          if (i2 < points.length / 2 - 1) {
            nextPointX = points[(i2 + 1) * 2];
            nextPointY = points[(i2 + 1) * 2 + 1];
          } else {
            nextPointX = points[0];
            nextPointY = points[1];
          }
          var offsetX = nextPointY - currentPointY;
          var offsetY = -(nextPointX - currentPointX);
          var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY);
          var normalizedOffsetX = offsetX / offsetLength;
          var normalizedOffsetY = offsetY / offsetLength;
          expandedLineSet[i2 * 4] = currentPointX + normalizedOffsetX * pad3;
          expandedLineSet[i2 * 4 + 1] = currentPointY + normalizedOffsetY * pad3;
          expandedLineSet[i2 * 4 + 2] = nextPointX + normalizedOffsetX * pad3;
          expandedLineSet[i2 * 4 + 3] = nextPointY + normalizedOffsetY * pad3;
        }
        return expandedLineSet;
      }, "expandPolygon");
      intersectLineEllipse = /* @__PURE__ */ __name(function intersectLineEllipse2(x5, y6, centerX, centerY, ellipseWradius, ellipseHradius) {
        var dispX = centerX - x5;
        var dispY = centerY - y6;
        dispX /= ellipseWradius;
        dispY /= ellipseHradius;
        var len = Math.sqrt(dispX * dispX + dispY * dispY);
        var newLength = len - 1;
        if (newLength < 0) {
          return [];
        }
        var lenProportion = newLength / len;
        return [(centerX - x5) * lenProportion + x5, (centerY - y6) * lenProportion + y6];
      }, "intersectLineEllipse");
      checkInEllipse = /* @__PURE__ */ __name(function checkInEllipse2(x5, y6, width3, height2, centerX, centerY, padding) {
        x5 -= centerX;
        y6 -= centerY;
        x5 /= width3 / 2 + padding;
        y6 /= height2 / 2 + padding;
        return x5 * x5 + y6 * y6 <= 1;
      }, "checkInEllipse");
      intersectLineCircle = /* @__PURE__ */ __name(function intersectLineCircle2(x1, y1, x22, y22, centerX, centerY, radius2) {
        var d3 = [x22 - x1, y22 - y1];
        var f2 = [x1 - centerX, y1 - centerY];
        var a2 = d3[0] * d3[0] + d3[1] * d3[1];
        var b3 = 2 * (f2[0] * d3[0] + f2[1] * d3[1]);
        var c3 = f2[0] * f2[0] + f2[1] * f2[1] - radius2 * radius2;
        var discriminant = b3 * b3 - 4 * a2 * c3;
        if (discriminant < 0) {
          return [];
        }
        var t13 = (-b3 + Math.sqrt(discriminant)) / (2 * a2);
        var t22 = (-b3 - Math.sqrt(discriminant)) / (2 * a2);
        var tMin = Math.min(t13, t22);
        var tMax = Math.max(t13, t22);
        var inRangeParams = [];
        if (tMin >= 0 && tMin <= 1) {
          inRangeParams.push(tMin);
        }
        if (tMax >= 0 && tMax <= 1) {
          inRangeParams.push(tMax);
        }
        if (inRangeParams.length === 0) {
          return [];
        }
        var nearIntersectionX = inRangeParams[0] * d3[0] + x1;
        var nearIntersectionY = inRangeParams[0] * d3[1] + y1;
        if (inRangeParams.length > 1) {
          if (inRangeParams[0] == inRangeParams[1]) {
            return [nearIntersectionX, nearIntersectionY];
          } else {
            var farIntersectionX = inRangeParams[1] * d3[0] + x1;
            var farIntersectionY = inRangeParams[1] * d3[1] + y1;
            return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY];
          }
        } else {
          return [nearIntersectionX, nearIntersectionY];
        }
      }, "intersectLineCircle");
      midOfThree = /* @__PURE__ */ __name(function midOfThree2(a2, b3, c3) {
        if (b3 <= a2 && a2 <= c3 || c3 <= a2 && a2 <= b3) {
          return a2;
        } else if (a2 <= b3 && b3 <= c3 || c3 <= b3 && b3 <= a2) {
          return b3;
        } else {
          return c3;
        }
      }, "midOfThree");
      finiteLinesIntersect = /* @__PURE__ */ __name(function finiteLinesIntersect2(x1, y1, x22, y22, x32, y32, x42, y42, infiniteLines) {
        var dx13 = x1 - x32;
        var dx21 = x22 - x1;
        var dx43 = x42 - x32;
        var dy13 = y1 - y32;
        var dy21 = y22 - y1;
        var dy43 = y42 - y32;
        var ua_t = dx43 * dy13 - dy43 * dx13;
        var ub_t = dx21 * dy13 - dy21 * dx13;
        var u_b = dy43 * dx21 - dx43 * dy21;
        if (u_b !== 0) {
          var ua = ua_t / u_b;
          var ub = ub_t / u_b;
          var flptThreshold = 1e-3;
          var _min = 0 - flptThreshold;
          var _max = 1 + flptThreshold;
          if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) {
            return [x1 + ua * dx21, y1 + ua * dy21];
          } else {
            if (!infiniteLines) {
              return [];
            } else {
              return [x1 + ua * dx21, y1 + ua * dy21];
            }
          }
        } else {
          if (ua_t === 0 || ub_t === 0) {
            if (midOfThree(x1, x22, x42) === x42) {
              return [x42, y42];
            }
            if (midOfThree(x1, x22, x32) === x32) {
              return [x32, y32];
            }
            if (midOfThree(x32, x42, x22) === x22) {
              return [x22, y22];
            }
            return [];
          } else {
            return [];
          }
        }
      }, "finiteLinesIntersect");
      transformPoints = /* @__PURE__ */ __name(function transformPoints2(points, centerX, centerY, width3, height2) {
        var ret = [];
        var halfW = width3 / 2;
        var halfH = height2 / 2;
        var x5 = centerX;
        var y6 = centerY;
        ret.push({
          x: x5 + halfW * points[0],
          y: y6 + halfH * points[1]
        });
        for (var i2 = 1; i2 < points.length / 2; i2++) {
          ret.push({
            x: x5 + halfW * points[i2 * 2],
            y: y6 + halfH * points[i2 * 2 + 1]
          });
        }
        return ret;
      }, "transformPoints");
      polygonIntersectLine = /* @__PURE__ */ __name(function polygonIntersectLine2(x5, y6, basePoints, centerX, centerY, width3, height2, padding) {
        var intersections = [];
        var intersection4;
        var transformedPoints = new Array(basePoints.length);
        var doTransform = true;
        if (width3 == null) {
          doTransform = false;
        }
        var points;
        if (doTransform) {
          for (var i2 = 0; i2 < transformedPoints.length / 2; i2++) {
            transformedPoints[i2 * 2] = basePoints[i2 * 2] * width3 + centerX;
            transformedPoints[i2 * 2 + 1] = basePoints[i2 * 2 + 1] * height2 + centerY;
          }
          if (padding > 0) {
            var expandedLineSet = expandPolygon(transformedPoints, -padding);
            points = joinLines(expandedLineSet);
          } else {
            points = transformedPoints;
          }
        } else {
          points = basePoints;
        }
        var currentX, currentY, nextX, nextY;
        for (var _i3 = 0; _i3 < points.length / 2; _i3++) {
          currentX = points[_i3 * 2];
          currentY = points[_i3 * 2 + 1];
          if (_i3 < points.length / 2 - 1) {
            nextX = points[(_i3 + 1) * 2];
            nextY = points[(_i3 + 1) * 2 + 1];
          } else {
            nextX = points[0];
            nextY = points[1];
          }
          intersection4 = finiteLinesIntersect(x5, y6, centerX, centerY, currentX, currentY, nextX, nextY);
          if (intersection4.length !== 0) {
            intersections.push(intersection4[0], intersection4[1]);
          }
        }
        return intersections;
      }, "polygonIntersectLine");
      roundPolygonIntersectLine = /* @__PURE__ */ __name(function roundPolygonIntersectLine2(x5, y6, basePoints, centerX, centerY, width3, height2, padding, corners) {
        var intersections = [];
        var intersection4;
        var lines = new Array(basePoints.length * 2);
        corners.forEach(function(corner, i3) {
          if (i3 === 0) {
            lines[lines.length - 2] = corner.startX;
            lines[lines.length - 1] = corner.startY;
          } else {
            lines[i3 * 4 - 2] = corner.startX;
            lines[i3 * 4 - 1] = corner.startY;
          }
          lines[i3 * 4] = corner.stopX;
          lines[i3 * 4 + 1] = corner.stopY;
          intersection4 = intersectLineCircle(x5, y6, centerX, centerY, corner.cx, corner.cy, corner.radius);
          if (intersection4.length !== 0) {
            intersections.push(intersection4[0], intersection4[1]);
          }
        });
        for (var i2 = 0; i2 < lines.length / 4; i2++) {
          intersection4 = finiteLinesIntersect(x5, y6, centerX, centerY, lines[i2 * 4], lines[i2 * 4 + 1], lines[i2 * 4 + 2], lines[i2 * 4 + 3], false);
          if (intersection4.length !== 0) {
            intersections.push(intersection4[0], intersection4[1]);
          }
        }
        if (intersections.length > 2) {
          var lowestIntersection = [intersections[0], intersections[1]];
          var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x5, 2) + Math.pow(lowestIntersection[1] - y6, 2);
          for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) {
            var squaredDistance = Math.pow(intersections[_i4 * 2] - x5, 2) + Math.pow(intersections[_i4 * 2 + 1] - y6, 2);
            if (squaredDistance <= lowestSquaredDistance) {
              lowestIntersection[0] = intersections[_i4 * 2];
              lowestIntersection[1] = intersections[_i4 * 2 + 1];
              lowestSquaredDistance = squaredDistance;
            }
          }
          return lowestIntersection;
        }
        return intersections;
      }, "roundPolygonIntersectLine");
      shortenIntersection = /* @__PURE__ */ __name(function shortenIntersection2(intersection4, offset, amount) {
        var disp = [intersection4[0] - offset[0], intersection4[1] - offset[1]];
        var length2 = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]);
        var lenRatio = (length2 - amount) / length2;
        if (lenRatio < 0) {
          lenRatio = 1e-5;
        }
        return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]];
      }, "shortenIntersection");
      generateUnitNgonPointsFitToSquare = /* @__PURE__ */ __name(function generateUnitNgonPointsFitToSquare2(sides, rotationRadians) {
        var points = generateUnitNgonPoints(sides, rotationRadians);
        points = fitPolygonToSquare(points);
        return points;
      }, "generateUnitNgonPointsFitToSquare");
      fitPolygonToSquare = /* @__PURE__ */ __name(function fitPolygonToSquare2(points) {
        var x5, y6;
        var sides = points.length / 2;
        var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
        for (var i2 = 0; i2 < sides; i2++) {
          x5 = points[2 * i2];
          y6 = points[2 * i2 + 1];
          minX = Math.min(minX, x5);
          maxX = Math.max(maxX, x5);
          minY = Math.min(minY, y6);
          maxY = Math.max(maxY, y6);
        }
        var sx = 2 / (maxX - minX);
        var sy = 2 / (maxY - minY);
        for (var _i5 = 0; _i5 < sides; _i5++) {
          x5 = points[2 * _i5] = points[2 * _i5] * sx;
          y6 = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy;
          minX = Math.min(minX, x5);
          maxX = Math.max(maxX, x5);
          minY = Math.min(minY, y6);
          maxY = Math.max(maxY, y6);
        }
        if (minY < -1) {
          for (var _i6 = 0; _i6 < sides; _i6++) {
            y6 = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY);
          }
        }
        return points;
      }, "fitPolygonToSquare");
      generateUnitNgonPoints = /* @__PURE__ */ __name(function generateUnitNgonPoints2(sides, rotationRadians) {
        var increment = 1 / sides * 2 * Math.PI;
        var startAngle = sides % 2 === 0 ? Math.PI / 2 + increment / 2 : Math.PI / 2;
        startAngle += rotationRadians;
        var points = new Array(sides * 2);
        var currentAngle;
        for (var i2 = 0; i2 < sides; i2++) {
          currentAngle = i2 * increment + startAngle;
          points[2 * i2] = Math.cos(currentAngle);
          points[2 * i2 + 1] = Math.sin(-currentAngle);
        }
        return points;
      }, "generateUnitNgonPoints");
      getRoundRectangleRadius = /* @__PURE__ */ __name(function getRoundRectangleRadius2(width3, height2) {
        return Math.min(width3 / 4, height2 / 4, 8);
      }, "getRoundRectangleRadius");
      getRoundPolygonRadius = /* @__PURE__ */ __name(function getRoundPolygonRadius2(width3, height2) {
        return Math.min(width3 / 10, height2 / 10, 8);
      }, "getRoundPolygonRadius");
      getCutRectangleCornerLength = /* @__PURE__ */ __name(function getCutRectangleCornerLength2() {
        return 8;
      }, "getCutRectangleCornerLength");
      bezierPtsToQuadCoeff = /* @__PURE__ */ __name(function bezierPtsToQuadCoeff2(p0, p1, p22) {
        return [p0 - 2 * p1 + p22, 2 * (p1 - p0), p0];
      }, "bezierPtsToQuadCoeff");
      getBarrelCurveConstants = /* @__PURE__ */ __name(function getBarrelCurveConstants2(width3, height2) {
        return {
          heightOffset: Math.min(15, 0.05 * height2),
          widthOffset: Math.min(100, 0.25 * width3),
          ctrlPtOffsetPct: 0.05
        };
      }, "getBarrelCurveConstants");
      __name(satPolygonIntersection, "satPolygonIntersection");
      pageRankDefaults = defaults$g({
        dampingFactor: 0.8,
        precision: 1e-6,
        iterations: 200,
        weight: /* @__PURE__ */ __name(function weight5(edge) {
          return 1;
        }, "weight")
      });
      elesfn$o = {
        pageRank: /* @__PURE__ */ __name(function pageRank(options2) {
          var _pageRankDefaults = pageRankDefaults(options2), dampingFactor = _pageRankDefaults.dampingFactor, precision = _pageRankDefaults.precision, iterations = _pageRankDefaults.iterations, weight8 = _pageRankDefaults.weight;
          var cy = this._private.cy;
          var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges;
          var numNodes = nodes5.length;
          var numNodesSqd = numNodes * numNodes;
          var numEdges = edges3.length;
          var matrix = new Array(numNodesSqd);
          var columnSum = new Array(numNodes);
          var additionalProb = (1 - dampingFactor) / numNodes;
          for (var i2 = 0; i2 < numNodes; i2++) {
            for (var j3 = 0; j3 < numNodes; j3++) {
              var n2 = i2 * numNodes + j3;
              matrix[n2] = 0;
            }
            columnSum[i2] = 0;
          }
          for (var _i = 0; _i < numEdges; _i++) {
            var edge = edges3[_i];
            var srcId = edge.data("source");
            var tgtId = edge.data("target");
            if (srcId === tgtId) {
              continue;
            }
            var s2 = nodes5.indexOfId(srcId);
            var t4 = nodes5.indexOfId(tgtId);
            var w4 = weight8(edge);
            var _n = t4 * numNodes + s2;
            matrix[_n] += w4;
            columnSum[s2] += w4;
          }
          var p3 = 1 / numNodes + additionalProb;
          for (var _j = 0; _j < numNodes; _j++) {
            if (columnSum[_j] === 0) {
              for (var _i2 = 0; _i2 < numNodes; _i2++) {
                var _n2 = _i2 * numNodes + _j;
                matrix[_n2] = p3;
              }
            } else {
              for (var _i3 = 0; _i3 < numNodes; _i3++) {
                var _n3 = _i3 * numNodes + _j;
                matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb;
              }
            }
          }
          var eigenvector = new Array(numNodes);
          var temp = new Array(numNodes);
          var previous;
          for (var _i4 = 0; _i4 < numNodes; _i4++) {
            eigenvector[_i4] = 1;
          }
          for (var iter = 0; iter < iterations; iter++) {
            for (var _i5 = 0; _i5 < numNodes; _i5++) {
              temp[_i5] = 0;
            }
            for (var _i6 = 0; _i6 < numNodes; _i6++) {
              for (var _j2 = 0; _j2 < numNodes; _j2++) {
                var _n4 = _i6 * numNodes + _j2;
                temp[_i6] += matrix[_n4] * eigenvector[_j2];
              }
            }
            inPlaceSumNormalize(temp);
            previous = eigenvector;
            eigenvector = temp;
            temp = previous;
            var diff2 = 0;
            for (var _i7 = 0; _i7 < numNodes; _i7++) {
              var delta = previous[_i7] - eigenvector[_i7];
              diff2 += delta * delta;
            }
            if (diff2 < precision) {
              break;
            }
          }
          var res = {
            rank: /* @__PURE__ */ __name(function rank2(node2) {
              node2 = cy.collection(node2)[0];
              return eigenvector[nodes5.indexOf(node2)];
            }, "rank")
          };
          return res;
        }, "pageRank")
        // pageRank
      };
      defaults$f = defaults$g({
        root: null,
        weight: /* @__PURE__ */ __name(function weight6(edge) {
          return 1;
        }, "weight"),
        directed: false,
        alpha: 0
      });
      elesfn$n = {
        degreeCentralityNormalized: /* @__PURE__ */ __name(function degreeCentralityNormalized(options2) {
          options2 = defaults$f(options2);
          var cy = this.cy();
          var nodes5 = this.nodes();
          var numNodes = nodes5.length;
          if (!options2.directed) {
            var degrees3 = {};
            var maxDegree = 0;
            for (var i2 = 0; i2 < numNodes; i2++) {
              var node2 = nodes5[i2];
              options2.root = node2;
              var currDegree = this.degreeCentrality(options2);
              if (maxDegree < currDegree.degree) {
                maxDegree = currDegree.degree;
              }
              degrees3[node2.id()] = currDegree.degree;
            }
            return {
              degree: /* @__PURE__ */ __name(function degree(node3) {
                if (maxDegree === 0) {
                  return 0;
                }
                if (string(node3)) {
                  node3 = cy.filter(node3);
                }
                return degrees3[node3.id()] / maxDegree;
              }, "degree")
            };
          } else {
            var indegrees = {};
            var outdegrees = {};
            var maxIndegree = 0;
            var maxOutdegree = 0;
            for (var _i = 0; _i < numNodes; _i++) {
              var _node = nodes5[_i];
              var id41 = _node.id();
              options2.root = _node;
              var _currDegree = this.degreeCentrality(options2);
              if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree;
              if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree;
              indegrees[id41] = _currDegree.indegree;
              outdegrees[id41] = _currDegree.outdegree;
            }
            return {
              indegree: /* @__PURE__ */ __name(function indegree(node3) {
                if (maxIndegree == 0) {
                  return 0;
                }
                if (string(node3)) {
                  node3 = cy.filter(node3);
                }
                return indegrees[node3.id()] / maxIndegree;
              }, "indegree"),
              outdegree: /* @__PURE__ */ __name(function outdegree(node3) {
                if (maxOutdegree === 0) {
                  return 0;
                }
                if (string(node3)) {
                  node3 = cy.filter(node3);
                }
                return outdegrees[node3.id()] / maxOutdegree;
              }, "outdegree")
            };
          }
        }, "degreeCentralityNormalized"),
        // degreeCentralityNormalized
        // Implemented from the algorithm in Opsahl's paper
        // "Node centrality in weighted networks: Generalizing degree and shortest paths"
        // check the heading 2 "Degree"
        degreeCentrality: /* @__PURE__ */ __name(function degreeCentrality(options2) {
          options2 = defaults$f(options2);
          var cy = this.cy();
          var callingEles = this;
          var _options = options2, root4 = _options.root, weight8 = _options.weight, directed = _options.directed, alpha = _options.alpha;
          root4 = cy.collection(root4)[0];
          if (!directed) {
            var connEdges = root4.connectedEdges().intersection(callingEles);
            var k2 = connEdges.length;
            var s2 = 0;
            for (var i2 = 0; i2 < connEdges.length; i2++) {
              s2 += weight8(connEdges[i2]);
            }
            return {
              degree: Math.pow(k2, 1 - alpha) * Math.pow(s2, alpha)
            };
          } else {
            var edges3 = root4.connectedEdges();
            var incoming2 = edges3.filter(function(edge) {
              return edge.target().same(root4) && callingEles.has(edge);
            });
            var outgoing = edges3.filter(function(edge) {
              return edge.source().same(root4) && callingEles.has(edge);
            });
            var k_in = incoming2.length;
            var k_out = outgoing.length;
            var s_in = 0;
            var s_out = 0;
            for (var _i2 = 0; _i2 < incoming2.length; _i2++) {
              s_in += weight8(incoming2[_i2]);
            }
            for (var _i3 = 0; _i3 < outgoing.length; _i3++) {
              s_out += weight8(outgoing[_i3]);
            }
            return {
              indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha),
              outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha)
            };
          }
        }, "degreeCentrality")
        // degreeCentrality
      };
      elesfn$n.dc = elesfn$n.degreeCentrality;
      elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized;
      defaults$e = defaults$g({
        harmonic: true,
        weight: /* @__PURE__ */ __name(function weight7() {
          return 1;
        }, "weight"),
        directed: false,
        root: null
      });
      elesfn$m = {
        closenessCentralityNormalized: /* @__PURE__ */ __name(function closenessCentralityNormalized(options2) {
          var _defaults = defaults$e(options2), harmonic = _defaults.harmonic, weight8 = _defaults.weight, directed = _defaults.directed;
          var cy = this.cy();
          var closenesses = {};
          var maxCloseness = 0;
          var nodes5 = this.nodes();
          var fw = this.floydWarshall({
            weight: weight8,
            directed
          });
          for (var i2 = 0; i2 < nodes5.length; i2++) {
            var currCloseness = 0;
            var node_i = nodes5[i2];
            for (var j3 = 0; j3 < nodes5.length; j3++) {
              if (i2 !== j3) {
                var d3 = fw.distance(node_i, nodes5[j3]);
                if (harmonic) {
                  currCloseness += 1 / d3;
                } else {
                  currCloseness += d3;
                }
              }
            }
            if (!harmonic) {
              currCloseness = 1 / currCloseness;
            }
            if (maxCloseness < currCloseness) {
              maxCloseness = currCloseness;
            }
            closenesses[node_i.id()] = currCloseness;
          }
          return {
            closeness: /* @__PURE__ */ __name(function closeness(node2) {
              if (maxCloseness == 0) {
                return 0;
              }
              if (string(node2)) {
                node2 = cy.filter(node2)[0].id();
              } else {
                node2 = node2.id();
              }
              return closenesses[node2] / maxCloseness;
            }, "closeness")
          };
        }, "closenessCentralityNormalized"),
        // Implemented from pseudocode from wikipedia
        closenessCentrality: /* @__PURE__ */ __name(function closenessCentrality(options2) {
          var _defaults2 = defaults$e(options2), root4 = _defaults2.root, weight8 = _defaults2.weight, directed = _defaults2.directed, harmonic = _defaults2.harmonic;
          root4 = this.filter(root4)[0];
          var dijkstra3 = this.dijkstra({
            root: root4,
            weight: weight8,
            directed
          });
          var totalDistance = 0;
          var nodes5 = this.nodes();
          for (var i2 = 0; i2 < nodes5.length; i2++) {
            var n2 = nodes5[i2];
            if (!n2.same(root4)) {
              var d3 = dijkstra3.distanceTo(n2);
              if (harmonic) {
                totalDistance += 1 / d3;
              } else {
                totalDistance += d3;
              }
            }
          }
          return harmonic ? totalDistance : 1 / totalDistance;
        }, "closenessCentrality")
        // closenessCentrality
      };
      elesfn$m.cc = elesfn$m.closenessCentrality;
      elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized;
      defaults$d = defaults$g({
        weight: null,
        directed: false
      });
      elesfn$l = {
        // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes
        betweennessCentrality: /* @__PURE__ */ __name(function betweennessCentrality(options2) {
          var _defaults = defaults$d(options2), directed = _defaults.directed, weight8 = _defaults.weight;
          var weighted = weight8 != null;
          var cy = this.cy();
          var V3 = this.nodes();
          var A2 = {};
          var _C = {};
          var max10 = 0;
          var C3 = {
            set: /* @__PURE__ */ __name(function set5(key, val) {
              _C[key] = val;
              if (val > max10) {
                max10 = val;
              }
            }, "set"),
            get: /* @__PURE__ */ __name(function get6(key) {
              return _C[key];
            }, "get")
          };
          for (var i2 = 0; i2 < V3.length; i2++) {
            var v3 = V3[i2];
            var vid = v3.id();
            if (directed) {
              A2[vid] = v3.outgoers().nodes();
            } else {
              A2[vid] = v3.openNeighborhood().nodes();
            }
            C3.set(vid, 0);
          }
          var _loop = /* @__PURE__ */ __name(function _loop2() {
            var sid = V3[s2].id();
            var S4 = [];
            var P3 = {};
            var g2 = {};
            var d3 = {};
            var Q3 = new Heap(function(a2, b3) {
              return d3[a2] - d3[b3];
            });
            for (var _i = 0; _i < V3.length; _i++) {
              var _vid = V3[_i].id();
              P3[_vid] = [];
              g2[_vid] = 0;
              d3[_vid] = Infinity;
            }
            g2[sid] = 1;
            d3[sid] = 0;
            Q3.push(sid);
            while (!Q3.empty()) {
              var _v = Q3.pop();
              S4.push(_v);
              if (weighted) {
                for (var j3 = 0; j3 < A2[_v].length; j3++) {
                  var w4 = A2[_v][j3];
                  var vEle = cy.getElementById(_v);
                  var edge = void 0;
                  if (vEle.edgesTo(w4).length > 0) {
                    edge = vEle.edgesTo(w4)[0];
                  } else {
                    edge = w4.edgesTo(vEle)[0];
                  }
                  var edgeWeight = weight8(edge);
                  w4 = w4.id();
                  if (d3[w4] > d3[_v] + edgeWeight) {
                    d3[w4] = d3[_v] + edgeWeight;
                    if (Q3.nodes.indexOf(w4) < 0) {
                      Q3.push(w4);
                    } else {
                      Q3.updateItem(w4);
                    }
                    g2[w4] = 0;
                    P3[w4] = [];
                  }
                  if (d3[w4] == d3[_v] + edgeWeight) {
                    g2[w4] = g2[w4] + g2[_v];
                    P3[w4].push(_v);
                  }
                }
              } else {
                for (var _j = 0; _j < A2[_v].length; _j++) {
                  var _w = A2[_v][_j].id();
                  if (d3[_w] == Infinity) {
                    Q3.push(_w);
                    d3[_w] = d3[_v] + 1;
                  }
                  if (d3[_w] == d3[_v] + 1) {
                    g2[_w] = g2[_w] + g2[_v];
                    P3[_w].push(_v);
                  }
                }
              }
            }
            var e3 = {};
            for (var _i2 = 0; _i2 < V3.length; _i2++) {
              e3[V3[_i2].id()] = 0;
            }
            while (S4.length > 0) {
              var _w2 = S4.pop();
              for (var _j2 = 0; _j2 < P3[_w2].length; _j2++) {
                var _v2 = P3[_w2][_j2];
                e3[_v2] = e3[_v2] + g2[_v2] / g2[_w2] * (1 + e3[_w2]);
              }
              if (_w2 != V3[s2].id()) {
                C3.set(_w2, C3.get(_w2) + e3[_w2]);
              }
            }
          }, "_loop");
          for (var s2 = 0; s2 < V3.length; s2++) {
            _loop();
          }
          var ret = {
            betweenness: /* @__PURE__ */ __name(function betweenness(node2) {
              var id41 = cy.collection(node2).id();
              return C3.get(id41);
            }, "betweenness"),
            betweennessNormalized: /* @__PURE__ */ __name(function betweennessNormalized(node2) {
              if (max10 == 0) {
                return 0;
              }
              var id41 = cy.collection(node2).id();
              return C3.get(id41) / max10;
            }, "betweennessNormalized")
          };
          ret.betweennessNormalised = ret.betweennessNormalized;
          return ret;
        }, "betweennessCentrality")
        // betweennessCentrality
      };
      elesfn$l.bc = elesfn$l.betweennessCentrality;
      defaults$c = defaults$g({
        expandFactor: 2,
        // affects time of computation and cluster granularity to some extent: M * M
        inflateFactor: 2,
        // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j)
        multFactor: 1,
        // optional self loops for each node. Use a neutral value to improve cluster computations.
        maxIterations: 20,
        // maximum number of iterations of the MCL algorithm in a single run
        attributes: [
          // attributes/features used to group nodes, ie. similarity values between nodes
          function(edge) {
            return 1;
          }
        ]
      });
      setOptions$3 = /* @__PURE__ */ __name(function setOptions(options2) {
        return defaults$c(options2);
      }, "setOptions");
      getSimilarity$1 = /* @__PURE__ */ __name(function getSimilarity(edge, attributes) {
        var total = 0;
        for (var i2 = 0; i2 < attributes.length; i2++) {
          total += attributes[i2](edge);
        }
        return total;
      }, "getSimilarity");
      addLoops = /* @__PURE__ */ __name(function addLoops2(M3, n2, val) {
        for (var i2 = 0; i2 < n2; i2++) {
          M3[i2 * n2 + i2] = val;
        }
      }, "addLoops");
      normalize2 = /* @__PURE__ */ __name(function normalize3(M3, n2) {
        var sum2;
        for (var col = 0; col < n2; col++) {
          sum2 = 0;
          for (var row = 0; row < n2; row++) {
            sum2 += M3[row * n2 + col];
          }
          for (var _row = 0; _row < n2; _row++) {
            M3[_row * n2 + col] = M3[_row * n2 + col] / sum2;
          }
        }
      }, "normalize");
      mmult = /* @__PURE__ */ __name(function mmult2(A2, B3, n2) {
        var C3 = new Array(n2 * n2);
        for (var i2 = 0; i2 < n2; i2++) {
          for (var j3 = 0; j3 < n2; j3++) {
            C3[i2 * n2 + j3] = 0;
          }
          for (var k2 = 0; k2 < n2; k2++) {
            for (var _j = 0; _j < n2; _j++) {
              C3[i2 * n2 + _j] += A2[i2 * n2 + k2] * B3[k2 * n2 + _j];
            }
          }
        }
        return C3;
      }, "mmult");
      expand = /* @__PURE__ */ __name(function expand2(M3, n2, expandFactor) {
        var _M = M3.slice(0);
        for (var p3 = 1; p3 < expandFactor; p3++) {
          M3 = mmult(M3, _M, n2);
        }
        return M3;
      }, "expand");
      inflate = /* @__PURE__ */ __name(function inflate2(M3, n2, inflateFactor) {
        var _M = new Array(n2 * n2);
        for (var i2 = 0; i2 < n2 * n2; i2++) {
          _M[i2] = Math.pow(M3[i2], inflateFactor);
        }
        normalize2(_M, n2);
        return _M;
      }, "inflate");
      hasConverged = /* @__PURE__ */ __name(function hasConverged2(M3, _M, n2, roundFactor) {
        for (var i2 = 0; i2 < n2; i2++) {
          var v12 = Math.round(M3[i2] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor);
          var v23 = Math.round(_M[i2] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor);
          if (v12 !== v23) {
            return false;
          }
        }
        return true;
      }, "hasConverged");
      assign$2 = /* @__PURE__ */ __name(function assign(M3, n2, nodes5, cy) {
        var clusters = [];
        for (var i2 = 0; i2 < n2; i2++) {
          var cluster = [];
          for (var j3 = 0; j3 < n2; j3++) {
            if (Math.round(M3[i2 * n2 + j3] * 1e3) / 1e3 > 0) {
              cluster.push(nodes5[j3]);
            }
          }
          if (cluster.length !== 0) {
            clusters.push(cy.collection(cluster));
          }
        }
        return clusters;
      }, "assign");
      isDuplicate = /* @__PURE__ */ __name(function isDuplicate2(c1, c22) {
        for (var i2 = 0; i2 < c1.length; i2++) {
          if (!c22[i2] || c1[i2].id() !== c22[i2].id()) {
            return false;
          }
        }
        return true;
      }, "isDuplicate");
      removeDuplicates = /* @__PURE__ */ __name(function removeDuplicates2(clusters) {
        for (var i2 = 0; i2 < clusters.length; i2++) {
          for (var j3 = 0; j3 < clusters.length; j3++) {
            if (i2 != j3 && isDuplicate(clusters[i2], clusters[j3])) {
              clusters.splice(j3, 1);
            }
          }
        }
        return clusters;
      }, "removeDuplicates");
      markovClustering = /* @__PURE__ */ __name(function markovClustering2(options2) {
        var nodes5 = this.nodes();
        var edges3 = this.edges();
        var cy = this.cy();
        var opts = setOptions$3(options2);
        var id2position = {};
        for (var i2 = 0; i2 < nodes5.length; i2++) {
          id2position[nodes5[i2].id()] = i2;
        }
        var n2 = nodes5.length, n22 = n2 * n2;
        var M3 = new Array(n22), _M;
        for (var _i = 0; _i < n22; _i++) {
          M3[_i] = 0;
        }
        for (var e3 = 0; e3 < edges3.length; e3++) {
          var edge = edges3[e3];
          var _i2 = id2position[edge.source().id()];
          var j3 = id2position[edge.target().id()];
          var sim = getSimilarity$1(edge, opts.attributes);
          M3[_i2 * n2 + j3] += sim;
          M3[j3 * n2 + _i2] += sim;
        }
        addLoops(M3, n2, opts.multFactor);
        normalize2(M3, n2);
        var isStillMoving = true;
        var iterations = 0;
        while (isStillMoving && iterations < opts.maxIterations) {
          isStillMoving = false;
          _M = expand(M3, n2, opts.expandFactor);
          M3 = inflate(_M, n2, opts.inflateFactor);
          if (!hasConverged(M3, _M, n22, 4)) {
            isStillMoving = true;
          }
          iterations++;
        }
        var clusters = assign$2(M3, n2, nodes5, cy);
        clusters = removeDuplicates(clusters);
        return clusters;
      }, "markovClustering");
      markovClustering$1 = {
        markovClustering,
        mcl: markovClustering
      };
      identity$1 = /* @__PURE__ */ __name(function identity5(x5) {
        return x5;
      }, "identity");
      absDiff = /* @__PURE__ */ __name(function absDiff2(p3, q3) {
        return Math.abs(q3 - p3);
      }, "absDiff");
      addAbsDiff = /* @__PURE__ */ __name(function addAbsDiff2(total, p3, q3) {
        return total + absDiff(p3, q3);
      }, "addAbsDiff");
      addSquaredDiff = /* @__PURE__ */ __name(function addSquaredDiff2(total, p3, q3) {
        return total + Math.pow(q3 - p3, 2);
      }, "addSquaredDiff");
      sqrt3 = /* @__PURE__ */ __name(function sqrt4(x5) {
        return Math.sqrt(x5);
      }, "sqrt");
      maxAbsDiff = /* @__PURE__ */ __name(function maxAbsDiff2(currentMax, p3, q3) {
        return Math.max(currentMax, absDiff(p3, q3));
      }, "maxAbsDiff");
      getDistance = /* @__PURE__ */ __name(function getDistance2(length2, getP, getQ, init3, visit) {
        var post = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : identity$1;
        var ret = init3;
        var p3, q3;
        for (var dim = 0; dim < length2; dim++) {
          p3 = getP(dim);
          q3 = getQ(dim);
          ret = visit(ret, p3, q3);
        }
        return post(ret);
      }, "getDistance");
      distances = {
        euclidean: /* @__PURE__ */ __name(function euclidean(length2, getP, getQ) {
          if (length2 >= 2) {
            return getDistance(length2, getP, getQ, 0, addSquaredDiff, sqrt3);
          } else {
            return getDistance(length2, getP, getQ, 0, addAbsDiff);
          }
        }, "euclidean"),
        squaredEuclidean: /* @__PURE__ */ __name(function squaredEuclidean(length2, getP, getQ) {
          return getDistance(length2, getP, getQ, 0, addSquaredDiff);
        }, "squaredEuclidean"),
        manhattan: /* @__PURE__ */ __name(function manhattan(length2, getP, getQ) {
          return getDistance(length2, getP, getQ, 0, addAbsDiff);
        }, "manhattan"),
        max: /* @__PURE__ */ __name(function max7(length2, getP, getQ) {
          return getDistance(length2, getP, getQ, -Infinity, maxAbsDiff);
        }, "max")
      };
      distances["squared-euclidean"] = distances["squaredEuclidean"];
      distances["squaredeuclidean"] = distances["squaredEuclidean"];
      __name(clusteringDistance, "clusteringDistance");
      defaults$b = defaults$g({
        k: 2,
        m: 2,
        sensitivityThreshold: 1e-4,
        distance: "euclidean",
        maxIterations: 10,
        attributes: [],
        testMode: false,
        testCentroids: null
      });
      setOptions$2 = /* @__PURE__ */ __name(function setOptions2(options2) {
        return defaults$b(options2);
      }, "setOptions");
      getDist = /* @__PURE__ */ __name(function getDist2(type3, node2, centroid, attributes, mode) {
        var noNodeP = mode !== "kMedoids";
        var getP = noNodeP ? function(i2) {
          return centroid[i2];
        } : function(i2) {
          return attributes[i2](centroid);
        };
        var getQ = /* @__PURE__ */ __name(function getQ2(i2) {
          return attributes[i2](node2);
        }, "getQ");
        var nodeP = centroid;
        var nodeQ = node2;
        return clusteringDistance(type3, attributes.length, getP, getQ, nodeP, nodeQ);
      }, "getDist");
      randomCentroids = /* @__PURE__ */ __name(function randomCentroids2(nodes5, k2, attributes) {
        var ndim = attributes.length;
        var min10 = new Array(ndim);
        var max10 = new Array(ndim);
        var centroids = new Array(k2);
        var centroid = null;
        for (var i2 = 0; i2 < ndim; i2++) {
          min10[i2] = nodes5.min(attributes[i2]).value;
          max10[i2] = nodes5.max(attributes[i2]).value;
        }
        for (var c3 = 0; c3 < k2; c3++) {
          centroid = [];
          for (var _i = 0; _i < ndim; _i++) {
            centroid[_i] = Math.random() * (max10[_i] - min10[_i]) + min10[_i];
          }
          centroids[c3] = centroid;
        }
        return centroids;
      }, "randomCentroids");
      classify = /* @__PURE__ */ __name(function classify2(node2, centroids, distance3, attributes, type3) {
        var min10 = Infinity;
        var index = 0;
        for (var i2 = 0; i2 < centroids.length; i2++) {
          var dist3 = getDist(distance3, node2, centroids[i2], attributes, type3);
          if (dist3 < min10) {
            min10 = dist3;
            index = i2;
          }
        }
        return index;
      }, "classify");
      buildCluster = /* @__PURE__ */ __name(function buildCluster2(centroid, nodes5, assignment) {
        var cluster = [];
        var node2 = null;
        for (var n2 = 0; n2 < nodes5.length; n2++) {
          node2 = nodes5[n2];
          if (assignment[node2.id()] === centroid) {
            cluster.push(node2);
          }
        }
        return cluster;
      }, "buildCluster");
      haveValuesConverged = /* @__PURE__ */ __name(function haveValuesConverged2(v12, v23, sensitivityThreshold) {
        return Math.abs(v23 - v12) <= sensitivityThreshold;
      }, "haveValuesConverged");
      haveMatricesConverged = /* @__PURE__ */ __name(function haveMatricesConverged2(v12, v23, sensitivityThreshold) {
        for (var i2 = 0; i2 < v12.length; i2++) {
          for (var j3 = 0; j3 < v12[i2].length; j3++) {
            var diff2 = Math.abs(v12[i2][j3] - v23[i2][j3]);
            if (diff2 > sensitivityThreshold) {
              return false;
            }
          }
        }
        return true;
      }, "haveMatricesConverged");
      seenBefore = /* @__PURE__ */ __name(function seenBefore2(node2, medoids, n2) {
        for (var i2 = 0; i2 < n2; i2++) {
          if (node2 === medoids[i2]) return true;
        }
        return false;
      }, "seenBefore");
      randomMedoids = /* @__PURE__ */ __name(function randomMedoids2(nodes5, k2) {
        var medoids = new Array(k2);
        if (nodes5.length < 50) {
          for (var i2 = 0; i2 < k2; i2++) {
            var node2 = nodes5[Math.floor(Math.random() * nodes5.length)];
            while (seenBefore(node2, medoids, i2)) {
              node2 = nodes5[Math.floor(Math.random() * nodes5.length)];
            }
            medoids[i2] = node2;
          }
        } else {
          for (var _i2 = 0; _i2 < k2; _i2++) {
            medoids[_i2] = nodes5[Math.floor(Math.random() * nodes5.length)];
          }
        }
        return medoids;
      }, "randomMedoids");
      findCost = /* @__PURE__ */ __name(function findCost2(potentialNewMedoid, cluster, attributes) {
        var cost = 0;
        for (var n2 = 0; n2 < cluster.length; n2++) {
          cost += getDist("manhattan", cluster[n2], potentialNewMedoid, attributes, "kMedoids");
        }
        return cost;
      }, "findCost");
      kMeans = /* @__PURE__ */ __name(function kMeans2(options2) {
        var cy = this.cy();
        var nodes5 = this.nodes();
        var node2 = null;
        var opts = setOptions$2(options2);
        var clusters = new Array(opts.k);
        var assignment = {};
        var centroids;
        if (opts.testMode) {
          if (typeof opts.testCentroids === "number") {
            opts.testCentroids;
            centroids = randomCentroids(nodes5, opts.k, opts.attributes);
          } else if (_typeof(opts.testCentroids) === "object") {
            centroids = opts.testCentroids;
          } else {
            centroids = randomCentroids(nodes5, opts.k, opts.attributes);
          }
        } else {
          centroids = randomCentroids(nodes5, opts.k, opts.attributes);
        }
        var isStillMoving = true;
        var iterations = 0;
        while (isStillMoving && iterations < opts.maxIterations) {
          for (var n2 = 0; n2 < nodes5.length; n2++) {
            node2 = nodes5[n2];
            assignment[node2.id()] = classify(node2, centroids, opts.distance, opts.attributes, "kMeans");
          }
          isStillMoving = false;
          for (var c3 = 0; c3 < opts.k; c3++) {
            var cluster = buildCluster(c3, nodes5, assignment);
            if (cluster.length === 0) {
              continue;
            }
            var ndim = opts.attributes.length;
            var centroid = centroids[c3];
            var newCentroid = new Array(ndim);
            var sum2 = new Array(ndim);
            for (var d3 = 0; d3 < ndim; d3++) {
              sum2[d3] = 0;
              for (var i2 = 0; i2 < cluster.length; i2++) {
                node2 = cluster[i2];
                sum2[d3] += opts.attributes[d3](node2);
              }
              newCentroid[d3] = sum2[d3] / cluster.length;
              if (!haveValuesConverged(newCentroid[d3], centroid[d3], opts.sensitivityThreshold)) {
                isStillMoving = true;
              }
            }
            centroids[c3] = newCentroid;
            clusters[c3] = cy.collection(cluster);
          }
          iterations++;
        }
        return clusters;
      }, "kMeans");
      kMedoids = /* @__PURE__ */ __name(function kMedoids2(options2) {
        var cy = this.cy();
        var nodes5 = this.nodes();
        var node2 = null;
        var opts = setOptions$2(options2);
        var clusters = new Array(opts.k);
        var medoids;
        var assignment = {};
        var curCost;
        var minCosts = new Array(opts.k);
        if (opts.testMode) {
          if (typeof opts.testCentroids === "number") ;
          else if (_typeof(opts.testCentroids) === "object") {
            medoids = opts.testCentroids;
          } else {
            medoids = randomMedoids(nodes5, opts.k);
          }
        } else {
          medoids = randomMedoids(nodes5, opts.k);
        }
        var isStillMoving = true;
        var iterations = 0;
        while (isStillMoving && iterations < opts.maxIterations) {
          for (var n2 = 0; n2 < nodes5.length; n2++) {
            node2 = nodes5[n2];
            assignment[node2.id()] = classify(node2, medoids, opts.distance, opts.attributes, "kMedoids");
          }
          isStillMoving = false;
          for (var m3 = 0; m3 < medoids.length; m3++) {
            var cluster = buildCluster(m3, nodes5, assignment);
            if (cluster.length === 0) {
              continue;
            }
            minCosts[m3] = findCost(medoids[m3], cluster, opts.attributes);
            for (var _n = 0; _n < cluster.length; _n++) {
              curCost = findCost(cluster[_n], cluster, opts.attributes);
              if (curCost < minCosts[m3]) {
                minCosts[m3] = curCost;
                medoids[m3] = cluster[_n];
                isStillMoving = true;
              }
            }
            clusters[m3] = cy.collection(cluster);
          }
          iterations++;
        }
        return clusters;
      }, "kMedoids");
      updateCentroids = /* @__PURE__ */ __name(function updateCentroids2(centroids, nodes5, U3, weight8, opts) {
        var numerator, denominator;
        for (var n2 = 0; n2 < nodes5.length; n2++) {
          for (var c3 = 0; c3 < centroids.length; c3++) {
            weight8[n2][c3] = Math.pow(U3[n2][c3], opts.m);
          }
        }
        for (var _c = 0; _c < centroids.length; _c++) {
          for (var dim = 0; dim < opts.attributes.length; dim++) {
            numerator = 0;
            denominator = 0;
            for (var _n2 = 0; _n2 < nodes5.length; _n2++) {
              numerator += weight8[_n2][_c] * opts.attributes[dim](nodes5[_n2]);
              denominator += weight8[_n2][_c];
            }
            centroids[_c][dim] = numerator / denominator;
          }
        }
      }, "updateCentroids");
      updateMembership = /* @__PURE__ */ __name(function updateMembership2(U3, _U, centroids, nodes5, opts) {
        for (var i2 = 0; i2 < U3.length; i2++) {
          _U[i2] = U3[i2].slice();
        }
        var sum2, numerator, denominator;
        var pow = 2 / (opts.m - 1);
        for (var c3 = 0; c3 < centroids.length; c3++) {
          for (var n2 = 0; n2 < nodes5.length; n2++) {
            sum2 = 0;
            for (var k2 = 0; k2 < centroids.length; k2++) {
              numerator = getDist(opts.distance, nodes5[n2], centroids[c3], opts.attributes, "cmeans");
              denominator = getDist(opts.distance, nodes5[n2], centroids[k2], opts.attributes, "cmeans");
              sum2 += Math.pow(numerator / denominator, pow);
            }
            U3[n2][c3] = 1 / sum2;
          }
        }
      }, "updateMembership");
      assign$1 = /* @__PURE__ */ __name(function assign2(nodes5, U3, opts, cy) {
        var clusters = new Array(opts.k);
        for (var c3 = 0; c3 < clusters.length; c3++) {
          clusters[c3] = [];
        }
        var max10;
        var index;
        for (var n2 = 0; n2 < U3.length; n2++) {
          max10 = -Infinity;
          index = -1;
          for (var _c2 = 0; _c2 < U3[0].length; _c2++) {
            if (U3[n2][_c2] > max10) {
              max10 = U3[n2][_c2];
              index = _c2;
            }
          }
          clusters[index].push(nodes5[n2]);
        }
        for (var _c3 = 0; _c3 < clusters.length; _c3++) {
          clusters[_c3] = cy.collection(clusters[_c3]);
        }
        return clusters;
      }, "assign");
      fuzzyCMeans = /* @__PURE__ */ __name(function fuzzyCMeans2(options2) {
        var cy = this.cy();
        var nodes5 = this.nodes();
        var opts = setOptions$2(options2);
        var clusters;
        var centroids;
        var U3;
        var _U;
        var weight8;
        _U = new Array(nodes5.length);
        for (var i2 = 0; i2 < nodes5.length; i2++) {
          _U[i2] = new Array(opts.k);
        }
        U3 = new Array(nodes5.length);
        for (var _i3 = 0; _i3 < nodes5.length; _i3++) {
          U3[_i3] = new Array(opts.k);
        }
        for (var _i4 = 0; _i4 < nodes5.length; _i4++) {
          var total = 0;
          for (var j3 = 0; j3 < opts.k; j3++) {
            U3[_i4][j3] = Math.random();
            total += U3[_i4][j3];
          }
          for (var _j = 0; _j < opts.k; _j++) {
            U3[_i4][_j] = U3[_i4][_j] / total;
          }
        }
        centroids = new Array(opts.k);
        for (var _i5 = 0; _i5 < opts.k; _i5++) {
          centroids[_i5] = new Array(opts.attributes.length);
        }
        weight8 = new Array(nodes5.length);
        for (var _i6 = 0; _i6 < nodes5.length; _i6++) {
          weight8[_i6] = new Array(opts.k);
        }
        var isStillMoving = true;
        var iterations = 0;
        while (isStillMoving && iterations < opts.maxIterations) {
          isStillMoving = false;
          updateCentroids(centroids, nodes5, U3, weight8, opts);
          updateMembership(U3, _U, centroids, nodes5, opts);
          if (!haveMatricesConverged(U3, _U, opts.sensitivityThreshold)) {
            isStillMoving = true;
          }
          iterations++;
        }
        clusters = assign$1(nodes5, U3, opts, cy);
        return {
          clusters,
          degreeOfMembership: U3
        };
      }, "fuzzyCMeans");
      kClustering = {
        kMeans,
        kMedoids,
        fuzzyCMeans,
        fcm: fuzzyCMeans
      };
      defaults$a = defaults$g({
        distance: "euclidean",
        // distance metric to compare nodes
        linkage: "min",
        // linkage criterion : how to determine the distance between clusters of nodes
        mode: "threshold",
        // mode:'threshold' => clusters must be threshold distance apart
        threshold: Infinity,
        // the distance threshold
        // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters
        addDendrogram: false,
        // whether to add the dendrogram to the graph for viz
        dendrogramDepth: 0,
        // depth at which dendrogram branches are merged into the returned clusters
        attributes: []
        // array of attr functions
      });
      linkageAliases = {
        "single": "min",
        "complete": "max"
      };
      setOptions$1 = /* @__PURE__ */ __name(function setOptions3(options2) {
        var opts = defaults$a(options2);
        var preferredAlias = linkageAliases[opts.linkage];
        if (preferredAlias != null) {
          opts.linkage = preferredAlias;
        }
        return opts;
      }, "setOptions");
      mergeClosest = /* @__PURE__ */ __name(function mergeClosest2(clusters, index, dists, mins, opts) {
        var minKey = 0;
        var min10 = Infinity;
        var dist3;
        var attrs = opts.attributes;
        var getDist3 = /* @__PURE__ */ __name(function getDist4(n1, n2) {
          return clusteringDistance(opts.distance, attrs.length, function(i3) {
            return attrs[i3](n1);
          }, function(i3) {
            return attrs[i3](n2);
          }, n1, n2);
        }, "getDist");
        for (var i2 = 0; i2 < clusters.length; i2++) {
          var key = clusters[i2].key;
          var _dist = dists[key][mins[key]];
          if (_dist < min10) {
            minKey = key;
            min10 = _dist;
          }
        }
        if (opts.mode === "threshold" && min10 >= opts.threshold || opts.mode === "dendrogram" && clusters.length === 1) {
          return false;
        }
        var c1 = index[minKey];
        var c22 = index[mins[minKey]];
        var merged;
        if (opts.mode === "dendrogram") {
          merged = {
            left: c1,
            right: c22,
            key: c1.key
          };
        } else {
          merged = {
            value: c1.value.concat(c22.value),
            key: c1.key
          };
        }
        clusters[c1.index] = merged;
        clusters.splice(c22.index, 1);
        index[c1.key] = merged;
        for (var _i = 0; _i < clusters.length; _i++) {
          var cur = clusters[_i];
          if (c1.key === cur.key) {
            dist3 = Infinity;
          } else if (opts.linkage === "min") {
            dist3 = dists[c1.key][cur.key];
            if (dists[c1.key][cur.key] > dists[c22.key][cur.key]) {
              dist3 = dists[c22.key][cur.key];
            }
          } else if (opts.linkage === "max") {
            dist3 = dists[c1.key][cur.key];
            if (dists[c1.key][cur.key] < dists[c22.key][cur.key]) {
              dist3 = dists[c22.key][cur.key];
            }
          } else if (opts.linkage === "mean") {
            dist3 = (dists[c1.key][cur.key] * c1.size + dists[c22.key][cur.key] * c22.size) / (c1.size + c22.size);
          } else {
            if (opts.mode === "dendrogram") dist3 = getDist3(cur.value, c1.value);
            else dist3 = getDist3(cur.value[0], c1.value[0]);
          }
          dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist3;
        }
        for (var _i2 = 0; _i2 < clusters.length; _i2++) {
          var key1 = clusters[_i2].key;
          if (mins[key1] === c1.key || mins[key1] === c22.key) {
            var _min = key1;
            for (var j3 = 0; j3 < clusters.length; j3++) {
              var key2 = clusters[j3].key;
              if (dists[key1][key2] < dists[key1][_min]) {
                _min = key2;
              }
            }
            mins[key1] = _min;
          }
          clusters[_i2].index = _i2;
        }
        c1.key = c22.key = c1.index = c22.index = null;
        return true;
      }, "mergeClosest");
      _getAllChildren = /* @__PURE__ */ __name(function getAllChildren(root4, arr, cy) {
        if (!root4) return;
        if (root4.value) {
          arr.push(root4.value);
        } else {
          if (root4.left) _getAllChildren(root4.left, arr);
          if (root4.right) _getAllChildren(root4.right, arr);
        }
      }, "getAllChildren");
      _buildDendrogram = /* @__PURE__ */ __name(function buildDendrogram(root4, cy) {
        if (!root4) return "";
        if (root4.left && root4.right) {
          var leftStr = _buildDendrogram(root4.left, cy);
          var rightStr = _buildDendrogram(root4.right, cy);
          var node2 = cy.add({
            group: "nodes",
            data: {
              id: leftStr + "," + rightStr
            }
          });
          cy.add({
            group: "edges",
            data: {
              source: leftStr,
              target: node2.id()
            }
          });
          cy.add({
            group: "edges",
            data: {
              source: rightStr,
              target: node2.id()
            }
          });
          return node2.id();
        } else if (root4.value) {
          return root4.value.id();
        }
      }, "buildDendrogram");
      _buildClustersFromTree = /* @__PURE__ */ __name(function buildClustersFromTree(root4, k2, cy) {
        if (!root4) return [];
        var left3 = [], right3 = [], leaves = [];
        if (k2 === 0) {
          if (root4.left) _getAllChildren(root4.left, left3);
          if (root4.right) _getAllChildren(root4.right, right3);
          leaves = left3.concat(right3);
          return [cy.collection(leaves)];
        } else if (k2 === 1) {
          if (root4.value) {
            return [cy.collection(root4.value)];
          } else {
            if (root4.left) _getAllChildren(root4.left, left3);
            if (root4.right) _getAllChildren(root4.right, right3);
            return [cy.collection(left3), cy.collection(right3)];
          }
        } else {
          if (root4.value) {
            return [cy.collection(root4.value)];
          } else {
            if (root4.left) left3 = _buildClustersFromTree(root4.left, k2 - 1, cy);
            if (root4.right) right3 = _buildClustersFromTree(root4.right, k2 - 1, cy);
            return left3.concat(right3);
          }
        }
      }, "buildClustersFromTree");
      hierarchicalClustering = /* @__PURE__ */ __name(function hierarchicalClustering2(options2) {
        var cy = this.cy();
        var nodes5 = this.nodes();
        var opts = setOptions$1(options2);
        var attrs = opts.attributes;
        var getDist3 = /* @__PURE__ */ __name(function getDist4(n1, n22) {
          return clusteringDistance(opts.distance, attrs.length, function(i3) {
            return attrs[i3](n1);
          }, function(i3) {
            return attrs[i3](n22);
          }, n1, n22);
        }, "getDist");
        var clusters = [];
        var dists = [];
        var mins = [];
        var index = [];
        for (var n2 = 0; n2 < nodes5.length; n2++) {
          var cluster = {
            value: opts.mode === "dendrogram" ? nodes5[n2] : [nodes5[n2]],
            key: n2,
            index: n2
          };
          clusters[n2] = cluster;
          index[n2] = cluster;
          dists[n2] = [];
          mins[n2] = 0;
        }
        for (var i2 = 0; i2 < clusters.length; i2++) {
          for (var j3 = 0; j3 <= i2; j3++) {
            var dist3 = void 0;
            if (opts.mode === "dendrogram") {
              dist3 = i2 === j3 ? Infinity : getDist3(clusters[i2].value, clusters[j3].value);
            } else {
              dist3 = i2 === j3 ? Infinity : getDist3(clusters[i2].value[0], clusters[j3].value[0]);
            }
            dists[i2][j3] = dist3;
            dists[j3][i2] = dist3;
            if (dist3 < dists[i2][mins[i2]]) {
              mins[i2] = j3;
            }
          }
        }
        var merged = mergeClosest(clusters, index, dists, mins, opts);
        while (merged) {
          merged = mergeClosest(clusters, index, dists, mins, opts);
        }
        var retClusters;
        if (opts.mode === "dendrogram") {
          retClusters = _buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy);
          if (opts.addDendrogram) _buildDendrogram(clusters[0], cy);
        } else {
          retClusters = new Array(clusters.length);
          clusters.forEach(function(cluster2, i3) {
            cluster2.key = cluster2.index = null;
            retClusters[i3] = cy.collection(cluster2.value);
          });
        }
        return retClusters;
      }, "hierarchicalClustering");
      hierarchicalClustering$1 = {
        hierarchicalClustering,
        hca: hierarchicalClustering
      };
      defaults$9 = defaults$g({
        distance: "euclidean",
        // distance metric to compare attributes between two nodes
        preference: "median",
        // suitability of a data point to serve as an exemplar
        damping: 0.8,
        // damping factor between [0.5, 1)
        maxIterations: 1e3,
        // max number of iterations to run
        minIterations: 100,
        // min number of iterations to run in order for clustering to stop
        attributes: [
          // functions to quantify the similarity between any two points
          // e.g. node => node.data('weight')
        ]
      });
      setOptions4 = /* @__PURE__ */ __name(function setOptions5(options2) {
        var dmp = options2.damping;
        var pref = options2.preference;
        if (!(0.5 <= dmp && dmp < 1)) {
          error("Damping must range on [0.5, 1).  Got: ".concat(dmp));
        }
        var validPrefs = ["median", "mean", "min", "max"];
        if (!(validPrefs.some(function(v3) {
          return v3 === pref;
        }) || number$1(pref))) {
          error("Preference must be one of [".concat(validPrefs.map(function(p3) {
            return "'".concat(p3, "'");
          }).join(", "), "] or a number.  Got: ").concat(pref));
        }
        return defaults$9(options2);
      }, "setOptions");
      getSimilarity2 = /* @__PURE__ */ __name(function getSimilarity3(type3, n1, n2, attributes) {
        var attr = /* @__PURE__ */ __name(function attr2(n3, i2) {
          return attributes[i2](n3);
        }, "attr");
        return -clusteringDistance(type3, attributes.length, function(i2) {
          return attr(n1, i2);
        }, function(i2) {
          return attr(n2, i2);
        }, n1, n2);
      }, "getSimilarity");
      getPreference = /* @__PURE__ */ __name(function getPreference2(S4, preference) {
        var p3 = null;
        if (preference === "median") {
          p3 = median2(S4);
        } else if (preference === "mean") {
          p3 = mean(S4);
        } else if (preference === "min") {
          p3 = min5(S4);
        } else if (preference === "max") {
          p3 = max5(S4);
        } else {
          p3 = preference;
        }
        return p3;
      }, "getPreference");
      findExemplars = /* @__PURE__ */ __name(function findExemplars2(n2, R3, A2) {
        var indices = [];
        for (var i2 = 0; i2 < n2; i2++) {
          if (R3[i2 * n2 + i2] + A2[i2 * n2 + i2] > 0) {
            indices.push(i2);
          }
        }
        return indices;
      }, "findExemplars");
      assignClusters = /* @__PURE__ */ __name(function assignClusters2(n2, S4, exemplars) {
        var clusters = [];
        for (var i2 = 0; i2 < n2; i2++) {
          var index = -1;
          var max10 = -Infinity;
          for (var ei = 0; ei < exemplars.length; ei++) {
            var e3 = exemplars[ei];
            if (S4[i2 * n2 + e3] > max10) {
              index = e3;
              max10 = S4[i2 * n2 + e3];
            }
          }
          if (index > 0) {
            clusters.push(index);
          }
        }
        for (var _ei = 0; _ei < exemplars.length; _ei++) {
          clusters[exemplars[_ei]] = exemplars[_ei];
        }
        return clusters;
      }, "assignClusters");
      assign3 = /* @__PURE__ */ __name(function assign4(n2, S4, exemplars) {
        var clusters = assignClusters(n2, S4, exemplars);
        for (var ei = 0; ei < exemplars.length; ei++) {
          var ii = [];
          for (var c3 = 0; c3 < clusters.length; c3++) {
            if (clusters[c3] === exemplars[ei]) {
              ii.push(c3);
            }
          }
          var maxI = -1;
          var maxSum = -Infinity;
          for (var i2 = 0; i2 < ii.length; i2++) {
            var sum2 = 0;
            for (var j3 = 0; j3 < ii.length; j3++) {
              sum2 += S4[ii[j3] * n2 + ii[i2]];
            }
            if (sum2 > maxSum) {
              maxI = i2;
              maxSum = sum2;
            }
          }
          exemplars[ei] = ii[maxI];
        }
        clusters = assignClusters(n2, S4, exemplars);
        return clusters;
      }, "assign");
      affinityPropagation = /* @__PURE__ */ __name(function affinityPropagation2(options2) {
        var cy = this.cy();
        var nodes5 = this.nodes();
        var opts = setOptions4(options2);
        var id2position = {};
        for (var i2 = 0; i2 < nodes5.length; i2++) {
          id2position[nodes5[i2].id()] = i2;
        }
        var n2;
        var n22;
        var S4;
        var p3;
        var R3;
        var A2;
        n2 = nodes5.length;
        n22 = n2 * n2;
        S4 = new Array(n22);
        for (var _i = 0; _i < n22; _i++) {
          S4[_i] = -Infinity;
        }
        for (var _i2 = 0; _i2 < n2; _i2++) {
          for (var j3 = 0; j3 < n2; j3++) {
            if (_i2 !== j3) {
              S4[_i2 * n2 + j3] = getSimilarity2(opts.distance, nodes5[_i2], nodes5[j3], opts.attributes);
            }
          }
        }
        p3 = getPreference(S4, opts.preference);
        for (var _i3 = 0; _i3 < n2; _i3++) {
          S4[_i3 * n2 + _i3] = p3;
        }
        R3 = new Array(n22);
        for (var _i4 = 0; _i4 < n22; _i4++) {
          R3[_i4] = 0;
        }
        A2 = new Array(n22);
        for (var _i5 = 0; _i5 < n22; _i5++) {
          A2[_i5] = 0;
        }
        var old = new Array(n2);
        var Rp = new Array(n2);
        var se2 = new Array(n2);
        for (var _i6 = 0; _i6 < n2; _i6++) {
          old[_i6] = 0;
          Rp[_i6] = 0;
          se2[_i6] = 0;
        }
        var e3 = new Array(n2 * opts.minIterations);
        for (var _i7 = 0; _i7 < e3.length; _i7++) {
          e3[_i7] = 0;
        }
        var iter;
        for (iter = 0; iter < opts.maxIterations; iter++) {
          for (var _i8 = 0; _i8 < n2; _i8++) {
            var max10 = -Infinity, max22 = -Infinity, maxI = -1, AS = 0;
            for (var _j = 0; _j < n2; _j++) {
              old[_j] = R3[_i8 * n2 + _j];
              AS = A2[_i8 * n2 + _j] + S4[_i8 * n2 + _j];
              if (AS >= max10) {
                max22 = max10;
                max10 = AS;
                maxI = _j;
              } else if (AS > max22) {
                max22 = AS;
              }
            }
            for (var _j2 = 0; _j2 < n2; _j2++) {
              R3[_i8 * n2 + _j2] = (1 - opts.damping) * (S4[_i8 * n2 + _j2] - max10) + opts.damping * old[_j2];
            }
            R3[_i8 * n2 + maxI] = (1 - opts.damping) * (S4[_i8 * n2 + maxI] - max22) + opts.damping * old[maxI];
          }
          for (var _i9 = 0; _i9 < n2; _i9++) {
            var sum2 = 0;
            for (var _j3 = 0; _j3 < n2; _j3++) {
              old[_j3] = A2[_j3 * n2 + _i9];
              Rp[_j3] = Math.max(0, R3[_j3 * n2 + _i9]);
              sum2 += Rp[_j3];
            }
            sum2 -= Rp[_i9];
            Rp[_i9] = R3[_i9 * n2 + _i9];
            sum2 += Rp[_i9];
            for (var _j4 = 0; _j4 < n2; _j4++) {
              A2[_j4 * n2 + _i9] = (1 - opts.damping) * Math.min(0, sum2 - Rp[_j4]) + opts.damping * old[_j4];
            }
            A2[_i9 * n2 + _i9] = (1 - opts.damping) * (sum2 - Rp[_i9]) + opts.damping * old[_i9];
          }
          var K5 = 0;
          for (var _i10 = 0; _i10 < n2; _i10++) {
            var E3 = A2[_i10 * n2 + _i10] + R3[_i10 * n2 + _i10] > 0 ? 1 : 0;
            e3[iter % opts.minIterations * n2 + _i10] = E3;
            K5 += E3;
          }
          if (K5 > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) {
            var _sum = 0;
            for (var _i11 = 0; _i11 < n2; _i11++) {
              se2[_i11] = 0;
              for (var _j5 = 0; _j5 < opts.minIterations; _j5++) {
                se2[_i11] += e3[_j5 * n2 + _i11];
              }
              if (se2[_i11] === 0 || se2[_i11] === opts.minIterations) {
                _sum++;
              }
            }
            if (_sum === n2) {
              break;
            }
          }
        }
        var exemplarsIndices = findExemplars(n2, R3, A2);
        var clusterIndices = assign3(n2, S4, exemplarsIndices);
        var clusters = {};
        for (var c3 = 0; c3 < exemplarsIndices.length; c3++) {
          clusters[exemplarsIndices[c3]] = [];
        }
        for (var _i12 = 0; _i12 < nodes5.length; _i12++) {
          var pos = id2position[nodes5[_i12].id()];
          var clusterIndex = clusterIndices[pos];
          if (clusterIndex != null) {
            clusters[clusterIndex].push(nodes5[_i12]);
          }
        }
        var retClusters = new Array(exemplarsIndices.length);
        for (var _c = 0; _c < exemplarsIndices.length; _c++) {
          retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]);
        }
        return retClusters;
      }, "affinityPropagation");
      affinityPropagation$1 = {
        affinityPropagation,
        ap: affinityPropagation
      };
      hierholzerDefaults = defaults$g({
        root: void 0,
        directed: false
      });
      elesfn$k = {
        hierholzer: /* @__PURE__ */ __name(function hierholzer(options2) {
          if (!plainObject(options2)) {
            var args = arguments;
            options2 = {
              root: args[0],
              directed: args[1]
            };
          }
          var _hierholzerDefaults = hierholzerDefaults(options2), root4 = _hierholzerDefaults.root, directed = _hierholzerDefaults.directed;
          var eles = this;
          var dflag = false;
          var oddIn;
          var oddOut;
          var startVertex;
          if (root4) startVertex = string(root4) ? this.filter(root4)[0].id() : root4[0].id();
          var nodes5 = {};
          var edges3 = {};
          if (directed) {
            eles.forEach(function(ele) {
              var id41 = ele.id();
              if (ele.isNode()) {
                var ind = ele.indegree(true);
                var outd = ele.outdegree(true);
                var d1 = ind - outd;
                var d22 = outd - ind;
                if (d1 == 1) {
                  if (oddIn) dflag = true;
                  else oddIn = id41;
                } else if (d22 == 1) {
                  if (oddOut) dflag = true;
                  else oddOut = id41;
                } else if (d22 > 1 || d1 > 1) {
                  dflag = true;
                }
                nodes5[id41] = [];
                ele.outgoers().forEach(function(e3) {
                  if (e3.isEdge()) nodes5[id41].push(e3.id());
                });
              } else {
                edges3[id41] = [void 0, ele.target().id()];
              }
            });
          } else {
            eles.forEach(function(ele) {
              var id41 = ele.id();
              if (ele.isNode()) {
                var d4 = ele.degree(true);
                if (d4 % 2) {
                  if (!oddIn) oddIn = id41;
                  else if (!oddOut) oddOut = id41;
                  else dflag = true;
                }
                nodes5[id41] = [];
                ele.connectedEdges().forEach(function(e3) {
                  return nodes5[id41].push(e3.id());
                });
              } else {
                edges3[id41] = [ele.source().id(), ele.target().id()];
              }
            });
          }
          var result = {
            found: false,
            trail: void 0
          };
          if (dflag) return result;
          else if (oddOut && oddIn) {
            if (directed) {
              if (startVertex && oddOut != startVertex) {
                return result;
              }
              startVertex = oddOut;
            } else {
              if (startVertex && oddOut != startVertex && oddIn != startVertex) {
                return result;
              } else if (!startVertex) {
                startVertex = oddOut;
              }
            }
          } else {
            if (!startVertex) startVertex = eles[0].id();
          }
          var walk = /* @__PURE__ */ __name(function walk2(v3) {
            var currentNode = v3;
            var subtour2 = [v3];
            var adj, adjTail, adjHead;
            while (nodes5[currentNode].length) {
              adj = nodes5[currentNode].shift();
              adjTail = edges3[adj][0];
              adjHead = edges3[adj][1];
              if (currentNode != adjHead) {
                nodes5[adjHead] = nodes5[adjHead].filter(function(e3) {
                  return e3 != adj;
                });
                currentNode = adjHead;
              } else if (!directed && currentNode != adjTail) {
                nodes5[adjTail] = nodes5[adjTail].filter(function(e3) {
                  return e3 != adj;
                });
                currentNode = adjTail;
              }
              subtour2.unshift(adj);
              subtour2.unshift(currentNode);
            }
            return subtour2;
          }, "walk");
          var trail = [];
          var subtour = [];
          subtour = walk(startVertex);
          while (subtour.length != 1) {
            if (nodes5[subtour[0]].length == 0) {
              trail.unshift(eles.getElementById(subtour.shift()));
              trail.unshift(eles.getElementById(subtour.shift()));
            } else {
              subtour = walk(subtour.shift()).concat(subtour);
            }
          }
          trail.unshift(eles.getElementById(subtour.shift()));
          for (var d3 in nodes5) {
            if (nodes5[d3].length) {
              return result;
            }
          }
          result.found = true;
          result.trail = this.spawn(trail, true);
          return result;
        }, "hierholzer")
      };
      hopcroftTarjanBiconnected = /* @__PURE__ */ __name(function hopcroftTarjanBiconnected2() {
        var eles = this;
        var nodes5 = {};
        var id41 = 0;
        var edgeCount3 = 0;
        var components3 = [];
        var stack = [];
        var visitedEdges = {};
        var buildComponent = /* @__PURE__ */ __name(function buildComponent2(x5, y6) {
          var i2 = stack.length - 1;
          var cutset = [];
          var component2 = eles.spawn();
          while (stack[i2].x != x5 || stack[i2].y != y6) {
            cutset.push(stack.pop().edge);
            i2--;
          }
          cutset.push(stack.pop().edge);
          cutset.forEach(function(edge) {
            var connectedNodes = edge.connectedNodes().intersection(eles);
            component2.merge(edge);
            connectedNodes.forEach(function(node2) {
              var nodeId = node2.id();
              var connectedEdges = node2.connectedEdges().intersection(eles);
              component2.merge(node2);
              if (!nodes5[nodeId].cutVertex) {
                component2.merge(connectedEdges);
              } else {
                component2.merge(connectedEdges.filter(function(edge2) {
                  return edge2.isLoop();
                }));
              }
            });
          });
          components3.push(component2);
        }, "buildComponent");
        var _biconnectedSearch = /* @__PURE__ */ __name(function biconnectedSearch(root4, currentNode, parent4) {
          if (root4 === parent4) edgeCount3 += 1;
          nodes5[currentNode] = {
            id: id41,
            low: id41++,
            cutVertex: false
          };
          var edges3 = eles.getElementById(currentNode).connectedEdges().intersection(eles);
          if (edges3.size() === 0) {
            components3.push(eles.spawn(eles.getElementById(currentNode)));
          } else {
            var sourceId, targetId, otherNodeId, edgeId;
            edges3.forEach(function(edge) {
              sourceId = edge.source().id();
              targetId = edge.target().id();
              otherNodeId = sourceId === currentNode ? targetId : sourceId;
              if (otherNodeId !== parent4) {
                edgeId = edge.id();
                if (!visitedEdges[edgeId]) {
                  visitedEdges[edgeId] = true;
                  stack.push({
                    x: currentNode,
                    y: otherNodeId,
                    edge
                  });
                }
                if (!(otherNodeId in nodes5)) {
                  _biconnectedSearch(root4, otherNodeId, currentNode);
                  nodes5[currentNode].low = Math.min(nodes5[currentNode].low, nodes5[otherNodeId].low);
                  if (nodes5[currentNode].id <= nodes5[otherNodeId].low) {
                    nodes5[currentNode].cutVertex = true;
                    buildComponent(currentNode, otherNodeId);
                  }
                } else {
                  nodes5[currentNode].low = Math.min(nodes5[currentNode].low, nodes5[otherNodeId].id);
                }
              }
            });
          }
        }, "biconnectedSearch");
        eles.forEach(function(ele) {
          if (ele.isNode()) {
            var nodeId = ele.id();
            if (!(nodeId in nodes5)) {
              edgeCount3 = 0;
              _biconnectedSearch(nodeId, nodeId);
              nodes5[nodeId].cutVertex = edgeCount3 > 1;
            }
          }
        });
        var cutVertices = Object.keys(nodes5).filter(function(id42) {
          return nodes5[id42].cutVertex;
        }).map(function(id42) {
          return eles.getElementById(id42);
        });
        return {
          cut: eles.spawn(cutVertices),
          components: components3
        };
      }, "hopcroftTarjanBiconnected");
      hopcroftTarjanBiconnected$1 = {
        hopcroftTarjanBiconnected,
        htbc: hopcroftTarjanBiconnected,
        htb: hopcroftTarjanBiconnected,
        hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected
      };
      tarjanStronglyConnected = /* @__PURE__ */ __name(function tarjanStronglyConnected2() {
        var eles = this;
        var nodes5 = {};
        var index = 0;
        var components3 = [];
        var stack = [];
        var cut = eles.spawn(eles);
        var _stronglyConnectedSearch = /* @__PURE__ */ __name(function stronglyConnectedSearch(sourceNodeId) {
          stack.push(sourceNodeId);
          nodes5[sourceNodeId] = {
            index,
            low: index++,
            explored: false
          };
          var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles);
          connectedEdges.forEach(function(edge) {
            var targetNodeId = edge.target().id();
            if (targetNodeId !== sourceNodeId) {
              if (!(targetNodeId in nodes5)) {
                _stronglyConnectedSearch(targetNodeId);
              }
              if (!nodes5[targetNodeId].explored) {
                nodes5[sourceNodeId].low = Math.min(nodes5[sourceNodeId].low, nodes5[targetNodeId].low);
              }
            }
          });
          if (nodes5[sourceNodeId].index === nodes5[sourceNodeId].low) {
            var componentNodes = eles.spawn();
            for (; ; ) {
              var nodeId = stack.pop();
              componentNodes.merge(eles.getElementById(nodeId));
              nodes5[nodeId].low = nodes5[sourceNodeId].index;
              nodes5[nodeId].explored = true;
              if (nodeId === sourceNodeId) {
                break;
              }
            }
            var componentEdges = componentNodes.edgesWith(componentNodes);
            var component2 = componentNodes.merge(componentEdges);
            components3.push(component2);
            cut = cut.difference(component2);
          }
        }, "stronglyConnectedSearch");
        eles.forEach(function(ele) {
          if (ele.isNode()) {
            var nodeId = ele.id();
            if (!(nodeId in nodes5)) {
              _stronglyConnectedSearch(nodeId);
            }
          }
        });
        return {
          cut,
          components: components3
        };
      }, "tarjanStronglyConnected");
      tarjanStronglyConnected$1 = {
        tarjanStronglyConnected,
        tsc: tarjanStronglyConnected,
        tscc: tarjanStronglyConnected,
        tarjanStronglyConnectedComponents: tarjanStronglyConnected
      };
      elesfn$j = {};
      [elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function(props) {
        extend4(elesfn$j, props);
      });
      STATE_PENDING = 0;
      STATE_FULFILLED = 1;
      STATE_REJECTED = 2;
      _api = /* @__PURE__ */ __name(function api(executor) {
        if (!(this instanceof _api)) return new _api(executor);
        this.id = "Thenable/1.0.7";
        this.state = STATE_PENDING;
        this.fulfillValue = void 0;
        this.rejectReason = void 0;
        this.onFulfilled = [];
        this.onRejected = [];
        this.proxy = {
          then: this.then.bind(this)
        };
        if (typeof executor === "function") executor.call(this, this.fulfill.bind(this), this.reject.bind(this));
      }, "api");
      _api.prototype = {
        /*  promise resolving methods  */
        fulfill: /* @__PURE__ */ __name(function fulfill(value2) {
          return deliver(this, STATE_FULFILLED, "fulfillValue", value2);
        }, "fulfill"),
        reject: /* @__PURE__ */ __name(function reject(value2) {
          return deliver(this, STATE_REJECTED, "rejectReason", value2);
        }, "reject"),
        /*  "The then Method" [Promises/A+ 1.1, 1.2, 2.2]  */
        then: /* @__PURE__ */ __name(function then(onFulfilled, onRejected) {
          var curr = this;
          var next3 = new _api();
          curr.onFulfilled.push(resolver(onFulfilled, next3, "fulfill"));
          curr.onRejected.push(resolver(onRejected, next3, "reject"));
          execute(curr);
          return next3.proxy;
        }, "then")
      };
      deliver = /* @__PURE__ */ __name(function deliver2(curr, state4, name, value2) {
        if (curr.state === STATE_PENDING) {
          curr.state = state4;
          curr[name] = value2;
          execute(curr);
        }
        return curr;
      }, "deliver");
      execute = /* @__PURE__ */ __name(function execute2(curr) {
        if (curr.state === STATE_FULFILLED) execute_handlers(curr, "onFulfilled", curr.fulfillValue);
        else if (curr.state === STATE_REJECTED) execute_handlers(curr, "onRejected", curr.rejectReason);
      }, "execute");
      execute_handlers = /* @__PURE__ */ __name(function execute_handlers2(curr, name, value2) {
        if (curr[name].length === 0) return;
        var handlers = curr[name];
        curr[name] = [];
        var func = /* @__PURE__ */ __name(function func2() {
          for (var i2 = 0; i2 < handlers.length; i2++) handlers[i2](value2);
        }, "func");
        if (typeof setImmediate === "function") setImmediate(func);
        else setTimeout(func, 0);
      }, "execute_handlers");
      resolver = /* @__PURE__ */ __name(function resolver2(cb, next3, method) {
        return function(value2) {
          if (typeof cb !== "function")
            next3[method].call(next3, value2);
          else {
            var result;
            try {
              result = cb(value2);
            } catch (e3) {
              next3.reject(e3);
              return;
            }
            _resolve(next3, result);
          }
        };
      }, "resolver");
      _resolve = /* @__PURE__ */ __name(function resolve(promise4, x5) {
        if (promise4 === x5 || promise4.proxy === x5) {
          promise4.reject(new TypeError("cannot resolve promise with itself"));
          return;
        }
        var then2;
        if (_typeof(x5) === "object" && x5 !== null || typeof x5 === "function") {
          try {
            then2 = x5.then;
          } catch (e3) {
            promise4.reject(e3);
            return;
          }
        }
        if (typeof then2 === "function") {
          var resolved = false;
          try {
            then2.call(
              x5,
              /*  resolvePromise  */
              /*  [Promises/A+ 2.3.3.3.1]  */
              function(y6) {
                if (resolved) return;
                resolved = true;
                if (y6 === x5)
                  promise4.reject(new TypeError("circular thenable chain"));
                else _resolve(promise4, y6);
              },
              /*  rejectPromise  */
              /*  [Promises/A+ 2.3.3.3.2]  */
              function(r2) {
                if (resolved) return;
                resolved = true;
                promise4.reject(r2);
              }
            );
          } catch (e3) {
            if (!resolved)
              promise4.reject(e3);
          }
          return;
        }
        promise4.fulfill(x5);
      }, "resolve");
      _api.all = function(ps) {
        return new _api(function(resolveAll, rejectAll) {
          var vals = new Array(ps.length);
          var doneCount = 0;
          var fulfill2 = /* @__PURE__ */ __name(function fulfill3(i3, val) {
            vals[i3] = val;
            doneCount++;
            if (doneCount === ps.length) {
              resolveAll(vals);
            }
          }, "fulfill");
          for (var i2 = 0; i2 < ps.length; i2++) {
            (function(i3) {
              var p3 = ps[i3];
              var isPromise = p3 != null && p3.then != null;
              if (isPromise) {
                p3.then(function(val2) {
                  fulfill2(i3, val2);
                }, function(err) {
                  rejectAll(err);
                });
              } else {
                var val = p3;
                fulfill2(i3, val);
              }
            })(i2);
          }
        });
      };
      _api.resolve = function(val) {
        return new _api(function(resolve2, reject3) {
          resolve2(val);
        });
      };
      _api.reject = function(val) {
        return new _api(function(resolve2, reject3) {
          reject3(val);
        });
      };
      Promise$1 = typeof Promise !== "undefined" ? Promise : _api;
      Animation = /* @__PURE__ */ __name(function Animation2(target, opts, opts2) {
        var isCore = core2(target);
        var isEle = !isCore;
        var _p = this._private = extend4({
          duration: 1e3
        }, opts, opts2);
        _p.target = target;
        _p.style = _p.style || _p.css;
        _p.started = false;
        _p.playing = false;
        _p.hooked = false;
        _p.applying = false;
        _p.progress = 0;
        _p.completes = [];
        _p.frames = [];
        if (_p.complete && fn$6(_p.complete)) {
          _p.completes.push(_p.complete);
        }
        if (isEle) {
          var pos = target.position();
          _p.startPosition = _p.startPosition || {
            x: pos.x,
            y: pos.y
          };
          _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style);
        }
        if (isCore) {
          var pan2 = target.pan();
          _p.startPan = {
            x: pan2.x,
            y: pan2.y
          };
          _p.startZoom = target.zoom();
        }
        this.length = 1;
        this[0] = this;
      }, "Animation");
      anifn = Animation.prototype;
      extend4(anifn, {
        instanceString: /* @__PURE__ */ __name(function instanceString() {
          return "animation";
        }, "instanceString"),
        hook: /* @__PURE__ */ __name(function hook() {
          var _p = this._private;
          if (!_p.hooked) {
            var q3;
            var tAni = _p.target._private.animation;
            if (_p.queue) {
              q3 = tAni.queue;
            } else {
              q3 = tAni.current;
            }
            q3.push(this);
            if (elementOrCollection(_p.target)) {
              _p.target.cy().addToAnimationPool(_p.target);
            }
            _p.hooked = true;
          }
          return this;
        }, "hook"),
        play: /* @__PURE__ */ __name(function play() {
          var _p = this._private;
          if (_p.progress === 1) {
            _p.progress = 0;
          }
          _p.playing = true;
          _p.started = false;
          _p.stopped = false;
          this.hook();
          return this;
        }, "play"),
        playing: /* @__PURE__ */ __name(function playing() {
          return this._private.playing;
        }, "playing"),
        apply: /* @__PURE__ */ __name(function apply3() {
          var _p = this._private;
          _p.applying = true;
          _p.started = false;
          _p.stopped = false;
          this.hook();
          return this;
        }, "apply"),
        applying: /* @__PURE__ */ __name(function applying() {
          return this._private.applying;
        }, "applying"),
        pause: /* @__PURE__ */ __name(function pause() {
          var _p = this._private;
          _p.playing = false;
          _p.started = false;
          return this;
        }, "pause"),
        stop: /* @__PURE__ */ __name(function stop() {
          var _p = this._private;
          _p.playing = false;
          _p.started = false;
          _p.stopped = true;
          return this;
        }, "stop"),
        rewind: /* @__PURE__ */ __name(function rewind() {
          return this.progress(0);
        }, "rewind"),
        fastforward: /* @__PURE__ */ __name(function fastforward() {
          return this.progress(1);
        }, "fastforward"),
        time: /* @__PURE__ */ __name(function time3(t4) {
          var _p = this._private;
          if (t4 === void 0) {
            return _p.progress * _p.duration;
          } else {
            return this.progress(t4 / _p.duration);
          }
        }, "time"),
        progress: /* @__PURE__ */ __name(function progress(p3) {
          var _p = this._private;
          var wasPlaying = _p.playing;
          if (p3 === void 0) {
            return _p.progress;
          } else {
            if (wasPlaying) {
              this.pause();
            }
            _p.progress = p3;
            _p.started = false;
            if (wasPlaying) {
              this.play();
            }
          }
          return this;
        }, "progress"),
        completed: /* @__PURE__ */ __name(function completed() {
          return this._private.progress === 1;
        }, "completed"),
        reverse: /* @__PURE__ */ __name(function reverse() {
          var _p = this._private;
          var wasPlaying = _p.playing;
          if (wasPlaying) {
            this.pause();
          }
          _p.progress = 1 - _p.progress;
          _p.started = false;
          var swap = /* @__PURE__ */ __name(function swap2(a2, b3) {
            var _pa = _p[a2];
            if (_pa == null) {
              return;
            }
            _p[a2] = _p[b3];
            _p[b3] = _pa;
          }, "swap");
          swap("zoom", "startZoom");
          swap("pan", "startPan");
          swap("position", "startPosition");
          if (_p.style) {
            for (var i2 = 0; i2 < _p.style.length; i2++) {
              var prop = _p.style[i2];
              var name = prop.name;
              var startStyleProp = _p.startStyle[name];
              _p.startStyle[name] = prop;
              _p.style[i2] = startStyleProp;
            }
          }
          if (wasPlaying) {
            this.play();
          }
          return this;
        }, "reverse"),
        promise: /* @__PURE__ */ __name(function promise3(type3) {
          var _p = this._private;
          var arr;
          switch (type3) {
            case "frame":
              arr = _p.frames;
              break;
            default:
            case "complete":
            case "completed":
              arr = _p.completes;
          }
          return new Promise$1(function(resolve2, reject3) {
            arr.push(function() {
              resolve2();
            });
          });
        }, "promise")
      });
      anifn.complete = anifn.completed;
      anifn.run = anifn.play;
      anifn.running = anifn.playing;
      define$3 = {
        animated: /* @__PURE__ */ __name(function animated() {
          return /* @__PURE__ */ __name(function animatedImpl() {
            var self2 = this;
            var selfIsArrayLike = self2.length !== void 0;
            var all = selfIsArrayLike ? self2 : [self2];
            var cy = this._private.cy || this;
            if (!cy.styleEnabled()) {
              return false;
            }
            var ele = all[0];
            if (ele) {
              return ele._private.animation.current.length > 0;
            }
          }, "animatedImpl");
        }, "animated"),
        // animated
        clearQueue: /* @__PURE__ */ __name(function clearQueue() {
          return /* @__PURE__ */ __name(function clearQueueImpl() {
            var self2 = this;
            var selfIsArrayLike = self2.length !== void 0;
            var all = selfIsArrayLike ? self2 : [self2];
            var cy = this._private.cy || this;
            if (!cy.styleEnabled()) {
              return this;
            }
            for (var i2 = 0; i2 < all.length; i2++) {
              var ele = all[i2];
              ele._private.animation.queue = [];
            }
            return this;
          }, "clearQueueImpl");
        }, "clearQueue"),
        // clearQueue
        delay: /* @__PURE__ */ __name(function delay() {
          return /* @__PURE__ */ __name(function delayImpl(time4, complete) {
            var cy = this._private.cy || this;
            if (!cy.styleEnabled()) {
              return this;
            }
            return this.animate({
              delay: time4,
              duration: time4,
              complete
            });
          }, "delayImpl");
        }, "delay"),
        // delay
        delayAnimation: /* @__PURE__ */ __name(function delayAnimation() {
          return /* @__PURE__ */ __name(function delayAnimationImpl(time4, complete) {
            var cy = this._private.cy || this;
            if (!cy.styleEnabled()) {
              return this;
            }
            return this.animation({
              delay: time4,
              duration: time4,
              complete
            });
          }, "delayAnimationImpl");
        }, "delayAnimation"),
        // delay
        animation: /* @__PURE__ */ __name(function animation() {
          return /* @__PURE__ */ __name(function animationImpl(properties, params) {
            var self2 = this;
            var selfIsArrayLike = self2.length !== void 0;
            var all = selfIsArrayLike ? self2 : [self2];
            var cy = this._private.cy || this;
            var isCore = !selfIsArrayLike;
            var isEles = !isCore;
            if (!cy.styleEnabled()) {
              return this;
            }
            var style3 = cy.style();
            properties = extend4({}, properties, params);
            var propertiesEmpty = Object.keys(properties).length === 0;
            if (propertiesEmpty) {
              return new Animation(all[0], properties);
            }
            if (properties.duration === void 0) {
              properties.duration = 400;
            }
            switch (properties.duration) {
              case "slow":
                properties.duration = 600;
                break;
              case "fast":
                properties.duration = 200;
                break;
            }
            if (isEles) {
              properties.style = style3.getPropsList(properties.style || properties.css);
              properties.css = void 0;
            }
            if (isEles && properties.renderedPosition != null) {
              var rpos = properties.renderedPosition;
              var pan2 = cy.pan();
              var zoom2 = cy.zoom();
              properties.position = renderedToModelPosition(rpos, zoom2, pan2);
            }
            if (isCore && properties.panBy != null) {
              var panBy2 = properties.panBy;
              var cyPan = cy.pan();
              properties.pan = {
                x: cyPan.x + panBy2.x,
                y: cyPan.y + panBy2.y
              };
            }
            var center4 = properties.center || properties.centre;
            if (isCore && center4 != null) {
              var centerPan = cy.getCenterPan(center4.eles, properties.zoom);
              if (centerPan != null) {
                properties.pan = centerPan;
              }
            }
            if (isCore && properties.fit != null) {
              var fit2 = properties.fit;
              var fitVp = cy.getFitViewport(fit2.eles || fit2.boundingBox, fit2.padding);
              if (fitVp != null) {
                properties.pan = fitVp.pan;
                properties.zoom = fitVp.zoom;
              }
            }
            if (isCore && plainObject(properties.zoom)) {
              var vp = cy.getZoomedViewport(properties.zoom);
              if (vp != null) {
                if (vp.zoomed) {
                  properties.zoom = vp.zoom;
                }
                if (vp.panned) {
                  properties.pan = vp.pan;
                }
              } else {
                properties.zoom = null;
              }
            }
            return new Animation(all[0], properties);
          }, "animationImpl");
        }, "animation"),
        // animate
        animate: /* @__PURE__ */ __name(function animate() {
          return /* @__PURE__ */ __name(function animateImpl(properties, params) {
            var self2 = this;
            var selfIsArrayLike = self2.length !== void 0;
            var all = selfIsArrayLike ? self2 : [self2];
            var cy = this._private.cy || this;
            if (!cy.styleEnabled()) {
              return this;
            }
            if (params) {
              properties = extend4({}, properties, params);
            }
            for (var i2 = 0; i2 < all.length; i2++) {
              var ele = all[i2];
              var queue = ele.animated() && (properties.queue === void 0 || properties.queue);
              var ani = ele.animation(properties, queue ? {
                queue: true
              } : void 0);
              ani.play();
            }
            return this;
          }, "animateImpl");
        }, "animate"),
        // animate
        stop: /* @__PURE__ */ __name(function stop2() {
          return /* @__PURE__ */ __name(function stopImpl(clearQueue2, jumpToEnd) {
            var self2 = this;
            var selfIsArrayLike = self2.length !== void 0;
            var all = selfIsArrayLike ? self2 : [self2];
            var cy = this._private.cy || this;
            if (!cy.styleEnabled()) {
              return this;
            }
            for (var i2 = 0; i2 < all.length; i2++) {
              var ele = all[i2];
              var _p = ele._private;
              var anis = _p.animation.current;
              for (var j3 = 0; j3 < anis.length; j3++) {
                var ani = anis[j3];
                var ani_p = ani._private;
                if (jumpToEnd) {
                  ani_p.duration = 0;
                }
              }
              if (clearQueue2) {
                _p.animation.queue = [];
              }
              if (!jumpToEnd) {
                _p.animation.current = [];
              }
            }
            cy.notify("draw");
            return this;
          }, "stopImpl");
        }, "stop")
        // stop
      };
      __name(requireIsArray, "requireIsArray");
      __name(require_isKey, "require_isKey");
      __name(requireIsFunction, "requireIsFunction");
      __name(require_coreJsData, "require_coreJsData");
      __name(require_isMasked, "require_isMasked");
      __name(require_toSource, "require_toSource");
      __name(require_baseIsNative, "require_baseIsNative");
      __name(require_getValue, "require_getValue");
      __name(require_getNative, "require_getNative");
      __name(require_nativeCreate, "require_nativeCreate");
      __name(require_hashClear, "require_hashClear");
      __name(require_hashDelete, "require_hashDelete");
      __name(require_hashGet, "require_hashGet");
      __name(require_hashHas, "require_hashHas");
      __name(require_hashSet, "require_hashSet");
      __name(require_Hash, "require_Hash");
      __name(require_listCacheClear, "require_listCacheClear");
      __name(requireEq, "requireEq");
      __name(require_assocIndexOf, "require_assocIndexOf");
      __name(require_listCacheDelete, "require_listCacheDelete");
      __name(require_listCacheGet, "require_listCacheGet");
      __name(require_listCacheHas, "require_listCacheHas");
      __name(require_listCacheSet, "require_listCacheSet");
      __name(require_ListCache, "require_ListCache");
      __name(require_Map, "require_Map");
      __name(require_mapCacheClear, "require_mapCacheClear");
      __name(require_isKeyable, "require_isKeyable");
      __name(require_getMapData, "require_getMapData");
      __name(require_mapCacheDelete, "require_mapCacheDelete");
      __name(require_mapCacheGet, "require_mapCacheGet");
      __name(require_mapCacheHas, "require_mapCacheHas");
      __name(require_mapCacheSet, "require_mapCacheSet");
      __name(require_MapCache, "require_MapCache");
      __name(requireMemoize, "requireMemoize");
      __name(require_memoizeCapped, "require_memoizeCapped");
      __name(require_stringToPath, "require_stringToPath");
      __name(require_arrayMap, "require_arrayMap");
      __name(require_baseToString, "require_baseToString");
      __name(requireToString, "requireToString");
      __name(require_castPath, "require_castPath");
      __name(require_toKey, "require_toKey");
      __name(require_baseGet, "require_baseGet");
      __name(requireGet, "requireGet");
      getExports = requireGet();
      get4 = /* @__PURE__ */ getDefaultExportFromCjs(getExports);
      __name(require_defineProperty, "require_defineProperty");
      __name(require_baseAssignValue, "require_baseAssignValue");
      __name(require_assignValue, "require_assignValue");
      __name(require_isIndex, "require_isIndex");
      __name(require_baseSet, "require_baseSet");
      __name(requireSet, "requireSet");
      setExports = requireSet();
      set4 = /* @__PURE__ */ getDefaultExportFromCjs(setExports);
      __name(require_copyArray, "require_copyArray");
      __name(requireToPath, "requireToPath");
      toPathExports = requireToPath();
      toPath = /* @__PURE__ */ getDefaultExportFromCjs(toPathExports);
      define$2 = {
        // access data field
        data: /* @__PURE__ */ __name(function data(params) {
          var defaults5 = {
            field: "data",
            bindingEvent: "data",
            allowBinding: false,
            allowSetting: false,
            allowGetting: false,
            settingEvent: "data",
            settingTriggersEvent: false,
            triggerFnName: "trigger",
            immutableKeys: {},
            // key => true if immutable
            updateStyle: false,
            beforeGet: /* @__PURE__ */ __name(function beforeGet2(self2) {
            }, "beforeGet"),
            beforeSet: /* @__PURE__ */ __name(function beforeSet3(self2, obj) {
            }, "beforeSet"),
            onSet: /* @__PURE__ */ __name(function onSet3(self2) {
            }, "onSet"),
            canSet: /* @__PURE__ */ __name(function canSet2(self2) {
              return true;
            }, "canSet")
          };
          params = extend4({}, defaults5, params);
          return /* @__PURE__ */ __name(function dataImpl(name, value2) {
            var p3 = params;
            var self2 = this;
            var selfIsArrayLike = self2.length !== void 0;
            var all = selfIsArrayLike ? self2 : [self2];
            var single = selfIsArrayLike ? self2[0] : self2;
            if (string(name)) {
              var isPathLike = name.indexOf(".") !== -1;
              var path4 = isPathLike && toPath(name);
              if (p3.allowGetting && value2 === void 0) {
                var ret;
                if (single) {
                  p3.beforeGet(single);
                  if (path4 && single._private[p3.field][name] === void 0) {
                    ret = get4(single._private[p3.field], path4);
                  } else {
                    ret = single._private[p3.field][name];
                  }
                }
                return ret;
              } else if (p3.allowSetting && value2 !== void 0) {
                var valid2 = !p3.immutableKeys[name];
                if (valid2) {
                  var change2 = _defineProperty$1({}, name, value2);
                  p3.beforeSet(self2, change2);
                  for (var i2 = 0, l4 = all.length; i2 < l4; i2++) {
                    var ele = all[i2];
                    if (p3.canSet(ele)) {
                      if (path4 && single._private[p3.field][name] === void 0) {
                        set4(ele._private[p3.field], path4, value2);
                      } else {
                        ele._private[p3.field][name] = value2;
                      }
                    }
                  }
                  if (p3.updateStyle) {
                    self2.updateStyle();
                  }
                  p3.onSet(self2);
                  if (p3.settingTriggersEvent) {
                    self2[p3.triggerFnName](p3.settingEvent);
                  }
                }
              }
            } else if (p3.allowSetting && plainObject(name)) {
              var obj = name;
              var k2, v3;
              var keys3 = Object.keys(obj);
              p3.beforeSet(self2, obj);
              for (var _i = 0; _i < keys3.length; _i++) {
                k2 = keys3[_i];
                v3 = obj[k2];
                var _valid = !p3.immutableKeys[k2];
                if (_valid) {
                  for (var j3 = 0; j3 < all.length; j3++) {
                    var _ele = all[j3];
                    if (p3.canSet(_ele)) {
                      _ele._private[p3.field][k2] = v3;
                    }
                  }
                }
              }
              if (p3.updateStyle) {
                self2.updateStyle();
              }
              p3.onSet(self2);
              if (p3.settingTriggersEvent) {
                self2[p3.triggerFnName](p3.settingEvent);
              }
            } else if (p3.allowBinding && fn$6(name)) {
              var fn3 = name;
              self2.on(p3.bindingEvent, fn3);
            } else if (p3.allowGetting && name === void 0) {
              var _ret;
              if (single) {
                p3.beforeGet(single);
                _ret = single._private[p3.field];
              }
              return _ret;
            }
            return self2;
          }, "dataImpl");
        }, "data"),
        // data
        // remove data field
        removeData: /* @__PURE__ */ __name(function removeData(params) {
          var defaults5 = {
            field: "data",
            event: "data",
            triggerFnName: "trigger",
            triggerEvent: false,
            immutableKeys: {}
            // key => true if immutable
          };
          params = extend4({}, defaults5, params);
          return /* @__PURE__ */ __name(function removeDataImpl(names) {
            var p3 = params;
            var self2 = this;
            var selfIsArrayLike = self2.length !== void 0;
            var all = selfIsArrayLike ? self2 : [self2];
            if (string(names)) {
              var keys3 = names.split(/\s+/);
              var l4 = keys3.length;
              for (var i2 = 0; i2 < l4; i2++) {
                var key = keys3[i2];
                if (emptyString(key)) {
                  continue;
                }
                var valid2 = !p3.immutableKeys[key];
                if (valid2) {
                  for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) {
                    all[i_a]._private[p3.field][key] = void 0;
                  }
                }
              }
              if (p3.triggerEvent) {
                self2[p3.triggerFnName](p3.event);
              }
            } else if (names === void 0) {
              for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) {
                var _privateFields = all[_i_a]._private[p3.field];
                var _keys = Object.keys(_privateFields);
                for (var _i2 = 0; _i2 < _keys.length; _i2++) {
                  var _key = _keys[_i2];
                  var validKeyToDelete = !p3.immutableKeys[_key];
                  if (validKeyToDelete) {
                    _privateFields[_key] = void 0;
                  }
                }
              }
              if (p3.triggerEvent) {
                self2[p3.triggerFnName](p3.event);
              }
            }
            return self2;
          }, "removeDataImpl");
        }, "removeData")
        // removeData
      };
      define$1 = {
        eventAliasesOn: /* @__PURE__ */ __name(function eventAliasesOn(proto) {
          var p3 = proto;
          p3.addListener = p3.listen = p3.bind = p3.on;
          p3.unlisten = p3.unbind = p3.off = p3.removeListener;
          p3.trigger = p3.emit;
          p3.pon = p3.promiseOn = function(events, selector) {
            var self2 = this;
            var args = Array.prototype.slice.call(arguments, 0);
            return new Promise$1(function(resolve2, reject3) {
              var callback = /* @__PURE__ */ __name(function callback2(e3) {
                self2.off.apply(self2, offArgs);
                resolve2(e3);
              }, "callback");
              var onArgs = args.concat([callback]);
              var offArgs = onArgs.concat([]);
              self2.on.apply(self2, onArgs);
            });
          };
        }, "eventAliasesOn")
      };
      define2 = {};
      [define$3, define$2, define$1].forEach(function(m3) {
        extend4(define2, m3);
      });
      elesfn$i = {
        animate: define2.animate(),
        animation: define2.animation(),
        animated: define2.animated(),
        clearQueue: define2.clearQueue(),
        delay: define2.delay(),
        delayAnimation: define2.delayAnimation(),
        stop: define2.stop()
      };
      elesfn$h = {
        classes: /* @__PURE__ */ __name(function classes(_classes) {
          var self2 = this;
          if (_classes === void 0) {
            var ret = [];
            self2[0]._private.classes.forEach(function(cls2) {
              return ret.push(cls2);
            });
            return ret;
          } else if (!array2(_classes)) {
            _classes = (_classes || "").match(/\S+/g) || [];
          }
          var changed = [];
          var classesSet = new Set$1(_classes);
          for (var j3 = 0; j3 < self2.length; j3++) {
            var ele = self2[j3];
            var _p = ele._private;
            var eleClasses = _p.classes;
            var changedEle = false;
            for (var i2 = 0; i2 < _classes.length; i2++) {
              var cls = _classes[i2];
              var eleHasClass = eleClasses.has(cls);
              if (!eleHasClass) {
                changedEle = true;
                break;
              }
            }
            if (!changedEle) {
              changedEle = eleClasses.size !== _classes.length;
            }
            if (changedEle) {
              _p.classes = classesSet;
              changed.push(ele);
            }
          }
          if (changed.length > 0) {
            this.spawn(changed).updateStyle().emit("class");
          }
          return self2;
        }, "classes"),
        addClass: /* @__PURE__ */ __name(function addClass(classes3) {
          return this.toggleClass(classes3, true);
        }, "addClass"),
        hasClass: /* @__PURE__ */ __name(function hasClass(className) {
          var ele = this[0];
          return ele != null && ele._private.classes.has(className);
        }, "hasClass"),
        toggleClass: /* @__PURE__ */ __name(function toggleClass(classes3, toggle) {
          if (!array2(classes3)) {
            classes3 = classes3.match(/\S+/g) || [];
          }
          var self2 = this;
          var toggleUndefd = toggle === void 0;
          var changed = [];
          for (var i2 = 0, il = self2.length; i2 < il; i2++) {
            var ele = self2[i2];
            var eleClasses = ele._private.classes;
            var changedEle = false;
            for (var j3 = 0; j3 < classes3.length; j3++) {
              var cls = classes3[j3];
              var hasClass2 = eleClasses.has(cls);
              var changedNow = false;
              if (toggle || toggleUndefd && !hasClass2) {
                eleClasses.add(cls);
                changedNow = true;
              } else if (!toggle || toggleUndefd && hasClass2) {
                eleClasses["delete"](cls);
                changedNow = true;
              }
              if (!changedEle && changedNow) {
                changed.push(ele);
                changedEle = true;
              }
            }
          }
          if (changed.length > 0) {
            this.spawn(changed).updateStyle().emit("class");
          }
          return self2;
        }, "toggleClass"),
        removeClass: /* @__PURE__ */ __name(function removeClass(classes3) {
          return this.toggleClass(classes3, false);
        }, "removeClass"),
        flashClass: /* @__PURE__ */ __name(function flashClass(classes3, duration) {
          var self2 = this;
          if (duration == null) {
            duration = 250;
          } else if (duration === 0) {
            return self2;
          }
          self2.addClass(classes3);
          setTimeout(function() {
            self2.removeClass(classes3);
          }, duration);
          return self2;
        }, "flashClass")
      };
      elesfn$h.className = elesfn$h.classNames = elesfn$h.classes;
      tokens = {
        metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",
        // chars we need to escape in let names, etc
        comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",
        // binary comparison op (used in data selectors)
        boolOp: "\\?|\\!|\\^",
        // boolean (unary) operators (used in data selectors)
        string: `"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,
        // string literals (used in data selectors) -- doublequotes | singlequotes
        number: number6,
        // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123
        meta: "degree|indegree|outdegree",
        // allowed metadata fields (i.e. allowed functions to use from Collection)
        separator: "\\s*,\\s*",
        // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass
        descendant: "\\s+",
        child: "\\s+>\\s+",
        subject: "\\$",
        group: "node|edge|\\*",
        directedEdge: "\\s+->\\s+",
        undirectedEdge: "\\s+<->\\s+"
      };
      tokens.variable = "(?:[\\w-.]|(?:\\\\" + tokens.metaChar + "))+";
      tokens.className = "(?:[\\w-]|(?:\\\\" + tokens.metaChar + "))+";
      tokens.value = tokens.string + "|" + tokens.number;
      tokens.id = tokens.variable;
      (function() {
        var ops, op2, i2;
        ops = tokens.comparatorOp.split("|");
        for (i2 = 0; i2 < ops.length; i2++) {
          op2 = ops[i2];
          tokens.comparatorOp += "|@" + op2;
        }
        ops = tokens.comparatorOp.split("|");
        for (i2 = 0; i2 < ops.length; i2++) {
          op2 = ops[i2];
          if (op2.indexOf("!") >= 0) {
            continue;
          }
          if (op2 === "=") {
            continue;
          }
          tokens.comparatorOp += "|\\!" + op2;
        }
      })();
      newQuery = /* @__PURE__ */ __name(function newQuery2() {
        return {
          checks: []
        };
      }, "newQuery");
      Type2 = {
        /** E.g. node */
        GROUP: 0,
        /** A collection of elements */
        COLLECTION: 1,
        /** A filter(ele) function */
        FILTER: 2,
        /** E.g. [foo > 1] */
        DATA_COMPARE: 3,
        /** E.g. [foo] */
        DATA_EXIST: 4,
        /** E.g. [?foo] */
        DATA_BOOL: 5,
        /** E.g. [[degree > 2]] */
        META_COMPARE: 6,
        /** E.g. :selected */
        STATE: 7,
        /** E.g. #foo */
        ID: 8,
        /** E.g. .foo */
        CLASS: 9,
        /** E.g. #foo <-> #bar */
        UNDIRECTED_EDGE: 10,
        /** E.g. #foo -> #bar */
        DIRECTED_EDGE: 11,
        /** E.g. $#foo -> #bar */
        NODE_SOURCE: 12,
        /** E.g. #foo -> $#bar */
        NODE_TARGET: 13,
        /** E.g. $#foo <-> #bar */
        NODE_NEIGHBOR: 14,
        /** E.g. #foo > #bar */
        CHILD: 15,
        /** E.g. #foo #bar */
        DESCENDANT: 16,
        /** E.g. $#foo > #bar */
        PARENT: 17,
        /** E.g. $#foo #bar */
        ANCESTOR: 18,
        /** E.g. #foo > $bar > #baz */
        COMPOUND_SPLIT: 19,
        /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */
        TRUE: 20
      };
      stateSelectors = [{
        selector: ":selected",
        matches: /* @__PURE__ */ __name(function matches(ele) {
          return ele.selected();
        }, "matches")
      }, {
        selector: ":unselected",
        matches: /* @__PURE__ */ __name(function matches2(ele) {
          return !ele.selected();
        }, "matches")
      }, {
        selector: ":selectable",
        matches: /* @__PURE__ */ __name(function matches3(ele) {
          return ele.selectable();
        }, "matches")
      }, {
        selector: ":unselectable",
        matches: /* @__PURE__ */ __name(function matches4(ele) {
          return !ele.selectable();
        }, "matches")
      }, {
        selector: ":locked",
        matches: /* @__PURE__ */ __name(function matches5(ele) {
          return ele.locked();
        }, "matches")
      }, {
        selector: ":unlocked",
        matches: /* @__PURE__ */ __name(function matches6(ele) {
          return !ele.locked();
        }, "matches")
      }, {
        selector: ":visible",
        matches: /* @__PURE__ */ __name(function matches7(ele) {
          return ele.visible();
        }, "matches")
      }, {
        selector: ":hidden",
        matches: /* @__PURE__ */ __name(function matches8(ele) {
          return !ele.visible();
        }, "matches")
      }, {
        selector: ":transparent",
        matches: /* @__PURE__ */ __name(function matches9(ele) {
          return ele.transparent();
        }, "matches")
      }, {
        selector: ":grabbed",
        matches: /* @__PURE__ */ __name(function matches10(ele) {
          return ele.grabbed();
        }, "matches")
      }, {
        selector: ":free",
        matches: /* @__PURE__ */ __name(function matches11(ele) {
          return !ele.grabbed();
        }, "matches")
      }, {
        selector: ":removed",
        matches: /* @__PURE__ */ __name(function matches12(ele) {
          return ele.removed();
        }, "matches")
      }, {
        selector: ":inside",
        matches: /* @__PURE__ */ __name(function matches13(ele) {
          return !ele.removed();
        }, "matches")
      }, {
        selector: ":grabbable",
        matches: /* @__PURE__ */ __name(function matches14(ele) {
          return ele.grabbable();
        }, "matches")
      }, {
        selector: ":ungrabbable",
        matches: /* @__PURE__ */ __name(function matches15(ele) {
          return !ele.grabbable();
        }, "matches")
      }, {
        selector: ":animated",
        matches: /* @__PURE__ */ __name(function matches16(ele) {
          return ele.animated();
        }, "matches")
      }, {
        selector: ":unanimated",
        matches: /* @__PURE__ */ __name(function matches17(ele) {
          return !ele.animated();
        }, "matches")
      }, {
        selector: ":parent",
        matches: /* @__PURE__ */ __name(function matches18(ele) {
          return ele.isParent();
        }, "matches")
      }, {
        selector: ":childless",
        matches: /* @__PURE__ */ __name(function matches19(ele) {
          return ele.isChildless();
        }, "matches")
      }, {
        selector: ":child",
        matches: /* @__PURE__ */ __name(function matches20(ele) {
          return ele.isChild();
        }, "matches")
      }, {
        selector: ":orphan",
        matches: /* @__PURE__ */ __name(function matches21(ele) {
          return ele.isOrphan();
        }, "matches")
      }, {
        selector: ":nonorphan",
        matches: /* @__PURE__ */ __name(function matches22(ele) {
          return ele.isChild();
        }, "matches")
      }, {
        selector: ":compound",
        matches: /* @__PURE__ */ __name(function matches23(ele) {
          if (ele.isNode()) {
            return ele.isParent();
          } else {
            return ele.source().isParent() || ele.target().isParent();
          }
        }, "matches")
      }, {
        selector: ":loop",
        matches: /* @__PURE__ */ __name(function matches24(ele) {
          return ele.isLoop();
        }, "matches")
      }, {
        selector: ":simple",
        matches: /* @__PURE__ */ __name(function matches25(ele) {
          return ele.isSimple();
        }, "matches")
      }, {
        selector: ":active",
        matches: /* @__PURE__ */ __name(function matches26(ele) {
          return ele.active();
        }, "matches")
      }, {
        selector: ":inactive",
        matches: /* @__PURE__ */ __name(function matches27(ele) {
          return !ele.active();
        }, "matches")
      }, {
        selector: ":backgrounding",
        matches: /* @__PURE__ */ __name(function matches28(ele) {
          return ele.backgrounding();
        }, "matches")
      }, {
        selector: ":nonbackgrounding",
        matches: /* @__PURE__ */ __name(function matches29(ele) {
          return !ele.backgrounding();
        }, "matches")
      }].sort(function(a2, b3) {
        return descending2(a2.selector, b3.selector);
      });
      lookup = (function() {
        var selToFn = {};
        var s2;
        for (var i2 = 0; i2 < stateSelectors.length; i2++) {
          s2 = stateSelectors[i2];
          selToFn[s2.selector] = s2.matches;
        }
        return selToFn;
      })();
      stateSelectorMatches = /* @__PURE__ */ __name(function stateSelectorMatches2(sel, ele) {
        return lookup[sel](ele);
      }, "stateSelectorMatches");
      stateSelectorRegex = "(" + stateSelectors.map(function(s2) {
        return s2.selector;
      }).join("|") + ")";
      cleanMetaChars = /* @__PURE__ */ __name(function cleanMetaChars2(str2) {
        return str2.replace(new RegExp("\\\\(" + tokens.metaChar + ")", "g"), function(match3, $1) {
          return $1;
        });
      }, "cleanMetaChars");
      replaceLastQuery = /* @__PURE__ */ __name(function replaceLastQuery2(selector, examiningQuery, replacementQuery) {
        selector[selector.length - 1] = replacementQuery;
      }, "replaceLastQuery");
      exprs = [{
        name: "group",
        // just used for identifying when debugging
        query: true,
        regex: "(" + tokens.group + ")",
        populate: /* @__PURE__ */ __name(function populate(selector, query, _ref) {
          var _ref2 = _slicedToArray(_ref, 1), group2 = _ref2[0];
          query.checks.push({
            type: Type2.GROUP,
            value: group2 === "*" ? group2 : group2 + "s"
          });
        }, "populate")
      }, {
        name: "state",
        query: true,
        regex: stateSelectorRegex,
        populate: /* @__PURE__ */ __name(function populate2(selector, query, _ref3) {
          var _ref4 = _slicedToArray(_ref3, 1), state4 = _ref4[0];
          query.checks.push({
            type: Type2.STATE,
            value: state4
          });
        }, "populate")
      }, {
        name: "id",
        query: true,
        regex: "\\#(" + tokens.id + ")",
        populate: /* @__PURE__ */ __name(function populate3(selector, query, _ref5) {
          var _ref6 = _slicedToArray(_ref5, 1), id41 = _ref6[0];
          query.checks.push({
            type: Type2.ID,
            value: cleanMetaChars(id41)
          });
        }, "populate")
      }, {
        name: "className",
        query: true,
        regex: "\\.(" + tokens.className + ")",
        populate: /* @__PURE__ */ __name(function populate4(selector, query, _ref7) {
          var _ref8 = _slicedToArray(_ref7, 1), className = _ref8[0];
          query.checks.push({
            type: Type2.CLASS,
            value: cleanMetaChars(className)
          });
        }, "populate")
      }, {
        name: "dataExists",
        query: true,
        regex: "\\[\\s*(" + tokens.variable + ")\\s*\\]",
        populate: /* @__PURE__ */ __name(function populate5(selector, query, _ref9) {
          var _ref10 = _slicedToArray(_ref9, 1), variable = _ref10[0];
          query.checks.push({
            type: Type2.DATA_EXIST,
            field: cleanMetaChars(variable)
          });
        }, "populate")
      }, {
        name: "dataCompare",
        query: true,
        regex: "\\[\\s*(" + tokens.variable + ")\\s*(" + tokens.comparatorOp + ")\\s*(" + tokens.value + ")\\s*\\]",
        populate: /* @__PURE__ */ __name(function populate6(selector, query, _ref11) {
          var _ref12 = _slicedToArray(_ref11, 3), variable = _ref12[0], comparatorOp = _ref12[1], value2 = _ref12[2];
          var valueIsString = new RegExp("^" + tokens.string + "$").exec(value2) != null;
          if (valueIsString) {
            value2 = value2.substring(1, value2.length - 1);
          } else {
            value2 = parseFloat(value2);
          }
          query.checks.push({
            type: Type2.DATA_COMPARE,
            field: cleanMetaChars(variable),
            operator: comparatorOp,
            value: value2
          });
        }, "populate")
      }, {
        name: "dataBool",
        query: true,
        regex: "\\[\\s*(" + tokens.boolOp + ")\\s*(" + tokens.variable + ")\\s*\\]",
        populate: /* @__PURE__ */ __name(function populate7(selector, query, _ref13) {
          var _ref14 = _slicedToArray(_ref13, 2), boolOp = _ref14[0], variable = _ref14[1];
          query.checks.push({
            type: Type2.DATA_BOOL,
            field: cleanMetaChars(variable),
            operator: boolOp
          });
        }, "populate")
      }, {
        name: "metaCompare",
        query: true,
        regex: "\\[\\[\\s*(" + tokens.meta + ")\\s*(" + tokens.comparatorOp + ")\\s*(" + tokens.number + ")\\s*\\]\\]",
        populate: /* @__PURE__ */ __name(function populate8(selector, query, _ref15) {
          var _ref16 = _slicedToArray(_ref15, 3), meta3 = _ref16[0], comparatorOp = _ref16[1], number7 = _ref16[2];
          query.checks.push({
            type: Type2.META_COMPARE,
            field: cleanMetaChars(meta3),
            operator: comparatorOp,
            value: parseFloat(number7)
          });
        }, "populate")
      }, {
        name: "nextQuery",
        separator: true,
        regex: tokens.separator,
        populate: /* @__PURE__ */ __name(function populate9(selector, query) {
          var currentSubject = selector.currentSubject;
          var edgeCount3 = selector.edgeCount;
          var compoundCount = selector.compoundCount;
          var lastQ = selector[selector.length - 1];
          if (currentSubject != null) {
            lastQ.subject = currentSubject;
            selector.currentSubject = null;
          }
          lastQ.edgeCount = edgeCount3;
          lastQ.compoundCount = compoundCount;
          selector.edgeCount = 0;
          selector.compoundCount = 0;
          var nextQuery = selector[selector.length++] = newQuery();
          return nextQuery;
        }, "populate")
      }, {
        name: "directedEdge",
        separator: true,
        regex: tokens.directedEdge,
        populate: /* @__PURE__ */ __name(function populate10(selector, query) {
          if (selector.currentSubject == null) {
            var edgeQuery = newQuery();
            var source = query;
            var target = newQuery();
            edgeQuery.checks.push({
              type: Type2.DIRECTED_EDGE,
              source,
              target
            });
            replaceLastQuery(selector, query, edgeQuery);
            selector.edgeCount++;
            return target;
          } else {
            var srcTgtQ = newQuery();
            var _source = query;
            var _target = newQuery();
            srcTgtQ.checks.push({
              type: Type2.NODE_SOURCE,
              source: _source,
              target: _target
            });
            replaceLastQuery(selector, query, srcTgtQ);
            selector.edgeCount++;
            return _target;
          }
        }, "populate")
      }, {
        name: "undirectedEdge",
        separator: true,
        regex: tokens.undirectedEdge,
        populate: /* @__PURE__ */ __name(function populate11(selector, query) {
          if (selector.currentSubject == null) {
            var edgeQuery = newQuery();
            var source = query;
            var target = newQuery();
            edgeQuery.checks.push({
              type: Type2.UNDIRECTED_EDGE,
              nodes: [source, target]
            });
            replaceLastQuery(selector, query, edgeQuery);
            selector.edgeCount++;
            return target;
          } else {
            var nhoodQ = newQuery();
            var node2 = query;
            var neighbor = newQuery();
            nhoodQ.checks.push({
              type: Type2.NODE_NEIGHBOR,
              node: node2,
              neighbor
            });
            replaceLastQuery(selector, query, nhoodQ);
            return neighbor;
          }
        }, "populate")
      }, {
        name: "child",
        separator: true,
        regex: tokens.child,
        populate: /* @__PURE__ */ __name(function populate12(selector, query) {
          if (selector.currentSubject == null) {
            var parentChildQuery = newQuery();
            var child = newQuery();
            var parent4 = selector[selector.length - 1];
            parentChildQuery.checks.push({
              type: Type2.CHILD,
              parent: parent4,
              child
            });
            replaceLastQuery(selector, query, parentChildQuery);
            selector.compoundCount++;
            return child;
          } else if (selector.currentSubject === query) {
            var compound = newQuery();
            var left3 = selector[selector.length - 1];
            var right3 = newQuery();
            var subject = newQuery();
            var _child = newQuery();
            var _parent = newQuery();
            compound.checks.push({
              type: Type2.COMPOUND_SPLIT,
              left: left3,
              right: right3,
              subject
            });
            subject.checks = query.checks;
            query.checks = [{
              type: Type2.TRUE
            }];
            _parent.checks.push({
              type: Type2.TRUE
            });
            right3.checks.push({
              type: Type2.PARENT,
              // type is swapped on right side queries
              parent: _parent,
              child: _child
              // empty for now
            });
            replaceLastQuery(selector, left3, compound);
            selector.currentSubject = subject;
            selector.compoundCount++;
            return _child;
          } else {
            var _parent2 = newQuery();
            var _child2 = newQuery();
            var pcQChecks = [{
              type: Type2.PARENT,
              parent: _parent2,
              child: _child2
            }];
            _parent2.checks = query.checks;
            query.checks = pcQChecks;
            selector.compoundCount++;
            return _child2;
          }
        }, "populate")
      }, {
        name: "descendant",
        separator: true,
        regex: tokens.descendant,
        populate: /* @__PURE__ */ __name(function populate13(selector, query) {
          if (selector.currentSubject == null) {
            var ancChQuery = newQuery();
            var descendant = newQuery();
            var ancestor = selector[selector.length - 1];
            ancChQuery.checks.push({
              type: Type2.DESCENDANT,
              ancestor,
              descendant
            });
            replaceLastQuery(selector, query, ancChQuery);
            selector.compoundCount++;
            return descendant;
          } else if (selector.currentSubject === query) {
            var compound = newQuery();
            var left3 = selector[selector.length - 1];
            var right3 = newQuery();
            var subject = newQuery();
            var _descendant = newQuery();
            var _ancestor = newQuery();
            compound.checks.push({
              type: Type2.COMPOUND_SPLIT,
              left: left3,
              right: right3,
              subject
            });
            subject.checks = query.checks;
            query.checks = [{
              type: Type2.TRUE
            }];
            _ancestor.checks.push({
              type: Type2.TRUE
            });
            right3.checks.push({
              type: Type2.ANCESTOR,
              // type is swapped on right side queries
              ancestor: _ancestor,
              descendant: _descendant
              // empty for now
            });
            replaceLastQuery(selector, left3, compound);
            selector.currentSubject = subject;
            selector.compoundCount++;
            return _descendant;
          } else {
            var _ancestor2 = newQuery();
            var _descendant2 = newQuery();
            var adQChecks = [{
              type: Type2.ANCESTOR,
              ancestor: _ancestor2,
              descendant: _descendant2
            }];
            _ancestor2.checks = query.checks;
            query.checks = adQChecks;
            selector.compoundCount++;
            return _descendant2;
          }
        }, "populate")
      }, {
        name: "subject",
        modifier: true,
        regex: tokens.subject,
        populate: /* @__PURE__ */ __name(function populate14(selector, query) {
          if (selector.currentSubject != null && selector.currentSubject !== query) {
            warn("Redefinition of subject in selector `" + selector.toString() + "`");
            return false;
          }
          selector.currentSubject = query;
          var topQ = selector[selector.length - 1];
          var topChk = topQ.checks[0];
          var topType = topChk == null ? null : topChk.type;
          if (topType === Type2.DIRECTED_EDGE) {
            topChk.type = Type2.NODE_TARGET;
          } else if (topType === Type2.UNDIRECTED_EDGE) {
            topChk.type = Type2.NODE_NEIGHBOR;
            topChk.node = topChk.nodes[1];
            topChk.neighbor = topChk.nodes[0];
            topChk.nodes = null;
          }
        }, "populate")
      }];
      exprs.forEach(function(e3) {
        return e3.regexObj = new RegExp("^" + e3.regex);
      });
      consumeExpr = /* @__PURE__ */ __name(function consumeExpr2(remaining) {
        var expr;
        var match3;
        var name;
        for (var j3 = 0; j3 < exprs.length; j3++) {
          var e3 = exprs[j3];
          var n2 = e3.name;
          var m3 = remaining.match(e3.regexObj);
          if (m3 != null) {
            match3 = m3;
            expr = e3;
            name = n2;
            var consumed = m3[0];
            remaining = remaining.substring(consumed.length);
            break;
          }
        }
        return {
          expr,
          match: match3,
          name,
          remaining
        };
      }, "consumeExpr");
      consumeWhitespace = /* @__PURE__ */ __name(function consumeWhitespace2(remaining) {
        var match3 = remaining.match(/^\s+/);
        if (match3) {
          var consumed = match3[0];
          remaining = remaining.substring(consumed.length);
        }
        return remaining;
      }, "consumeWhitespace");
      parse = /* @__PURE__ */ __name(function parse2(selector) {
        var self2 = this;
        var remaining = self2.inputText = selector;
        var currentQuery = self2[0] = newQuery();
        self2.length = 1;
        remaining = consumeWhitespace(remaining);
        for (; ; ) {
          var exprInfo = consumeExpr(remaining);
          if (exprInfo.expr == null) {
            warn("The selector `" + selector + "`is invalid");
            return false;
          } else {
            var args = exprInfo.match.slice(1);
            var ret = exprInfo.expr.populate(self2, currentQuery, args);
            if (ret === false) {
              return false;
            } else if (ret != null) {
              currentQuery = ret;
            }
          }
          remaining = exprInfo.remaining;
          if (remaining.match(/^\s*$/)) {
            break;
          }
        }
        var lastQ = self2[self2.length - 1];
        if (self2.currentSubject != null) {
          lastQ.subject = self2.currentSubject;
        }
        lastQ.edgeCount = self2.edgeCount;
        lastQ.compoundCount = self2.compoundCount;
        for (var i2 = 0; i2 < self2.length; i2++) {
          var q3 = self2[i2];
          if (q3.compoundCount > 0 && q3.edgeCount > 0) {
            warn("The selector `" + selector + "` is invalid because it uses both a compound selector and an edge selector");
            return false;
          }
          if (q3.edgeCount > 1) {
            warn("The selector `" + selector + "` is invalid because it uses multiple edge selectors");
            return false;
          } else if (q3.edgeCount === 1) {
            warn("The selector `" + selector + "` is deprecated.  Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons.  Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.");
          }
        }
        return true;
      }, "parse");
      toString3 = /* @__PURE__ */ __name(function toString4() {
        if (this.toStringCache != null) {
          return this.toStringCache;
        }
        var clean = /* @__PURE__ */ __name(function clean2(obj) {
          if (obj == null) {
            return "";
          } else {
            return obj;
          }
        }, "clean");
        var cleanVal = /* @__PURE__ */ __name(function cleanVal2(val) {
          if (string(val)) {
            return '"' + val + '"';
          } else {
            return clean(val);
          }
        }, "cleanVal");
        var space = /* @__PURE__ */ __name(function space2(val) {
          return " " + val + " ";
        }, "space");
        var checkToString = /* @__PURE__ */ __name(function checkToString2(check, subject) {
          var type3 = check.type, value2 = check.value;
          switch (type3) {
            case Type2.GROUP: {
              var group2 = clean(value2);
              return group2.substring(0, group2.length - 1);
            }
            case Type2.DATA_COMPARE: {
              var field = check.field, operator = check.operator;
              return "[" + field + space(clean(operator)) + cleanVal(value2) + "]";
            }
            case Type2.DATA_BOOL: {
              var _operator = check.operator, _field = check.field;
              return "[" + clean(_operator) + _field + "]";
            }
            case Type2.DATA_EXIST: {
              var _field2 = check.field;
              return "[" + _field2 + "]";
            }
            case Type2.META_COMPARE: {
              var _operator2 = check.operator, _field3 = check.field;
              return "[[" + _field3 + space(clean(_operator2)) + cleanVal(value2) + "]]";
            }
            case Type2.STATE: {
              return value2;
            }
            case Type2.ID: {
              return "#" + value2;
            }
            case Type2.CLASS: {
              return "." + value2;
            }
            case Type2.PARENT:
            case Type2.CHILD: {
              return queryToString(check.parent, subject) + space(">") + queryToString(check.child, subject);
            }
            case Type2.ANCESTOR:
            case Type2.DESCENDANT: {
              return queryToString(check.ancestor, subject) + " " + queryToString(check.descendant, subject);
            }
            case Type2.COMPOUND_SPLIT: {
              var lhs = queryToString(check.left, subject);
              var sub2 = queryToString(check.subject, subject);
              var rhs = queryToString(check.right, subject);
              return lhs + (lhs.length > 0 ? " " : "") + sub2 + rhs;
            }
            case Type2.TRUE: {
              return "";
            }
          }
        }, "checkToString");
        var queryToString = /* @__PURE__ */ __name(function queryToString2(query2, subject) {
          return query2.checks.reduce(function(str3, chk, i3) {
            return str3 + (subject === query2 && i3 === 0 ? "$" : "") + checkToString(chk, subject);
          }, "");
        }, "queryToString");
        var str2 = "";
        for (var i2 = 0; i2 < this.length; i2++) {
          var query = this[i2];
          str2 += queryToString(query, query.subject);
          if (this.length > 1 && i2 < this.length - 1) {
            str2 += ", ";
          }
        }
        this.toStringCache = str2;
        return str2;
      }, "toString");
      parse$1 = {
        parse,
        toString: toString3
      };
      valCmp = /* @__PURE__ */ __name(function valCmp2(fieldVal, operator, value2) {
        var matches33;
        var isFieldStr = string(fieldVal);
        var isFieldNum = number$1(fieldVal);
        var isValStr = string(value2);
        var fieldStr, valStr;
        var caseInsensitive = false;
        var notExpr = false;
        var isIneqCmp = false;
        if (operator.indexOf("!") >= 0) {
          operator = operator.replace("!", "");
          notExpr = true;
        }
        if (operator.indexOf("@") >= 0) {
          operator = operator.replace("@", "");
          caseInsensitive = true;
        }
        if (isFieldStr || isValStr || caseInsensitive) {
          fieldStr = !isFieldStr && !isFieldNum ? "" : "" + fieldVal;
          valStr = "" + value2;
        }
        if (caseInsensitive) {
          fieldVal = fieldStr = fieldStr.toLowerCase();
          value2 = valStr = valStr.toLowerCase();
        }
        switch (operator) {
          case "*=":
            matches33 = fieldStr.indexOf(valStr) >= 0;
            break;
          case "$=":
            matches33 = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0;
            break;
          case "^=":
            matches33 = fieldStr.indexOf(valStr) === 0;
            break;
          case "=":
            matches33 = fieldVal === value2;
            break;
          case ">":
            isIneqCmp = true;
            matches33 = fieldVal > value2;
            break;
          case ">=":
            isIneqCmp = true;
            matches33 = fieldVal >= value2;
            break;
          case "<":
            isIneqCmp = true;
            matches33 = fieldVal < value2;
            break;
          case "<=":
            isIneqCmp = true;
            matches33 = fieldVal <= value2;
            break;
          default:
            matches33 = false;
            break;
        }
        if (notExpr && (fieldVal != null || !isIneqCmp)) {
          matches33 = !matches33;
        }
        return matches33;
      }, "valCmp");
      boolCmp = /* @__PURE__ */ __name(function boolCmp2(fieldVal, operator) {
        switch (operator) {
          case "?":
            return fieldVal ? true : false;
          case "!":
            return fieldVal ? false : true;
          case "^":
            return fieldVal === void 0;
        }
      }, "boolCmp");
      existCmp = /* @__PURE__ */ __name(function existCmp2(fieldVal) {
        return fieldVal !== void 0;
      }, "existCmp");
      data$1 = /* @__PURE__ */ __name(function data2(ele, field) {
        return ele.data(field);
      }, "data");
      meta = /* @__PURE__ */ __name(function meta2(ele, field) {
        return ele[field]();
      }, "meta");
      match = [];
      matches$1 = /* @__PURE__ */ __name(function matches30(query, ele) {
        return query.checks.every(function(chk) {
          return match[chk.type](chk, ele);
        });
      }, "matches");
      match[Type2.GROUP] = function(check, ele) {
        var group2 = check.value;
        return group2 === "*" || group2 === ele.group();
      };
      match[Type2.STATE] = function(check, ele) {
        var stateSelector = check.value;
        return stateSelectorMatches(stateSelector, ele);
      };
      match[Type2.ID] = function(check, ele) {
        var id41 = check.value;
        return ele.id() === id41;
      };
      match[Type2.CLASS] = function(check, ele) {
        var cls = check.value;
        return ele.hasClass(cls);
      };
      match[Type2.META_COMPARE] = function(check, ele) {
        var field = check.field, operator = check.operator, value2 = check.value;
        return valCmp(meta(ele, field), operator, value2);
      };
      match[Type2.DATA_COMPARE] = function(check, ele) {
        var field = check.field, operator = check.operator, value2 = check.value;
        return valCmp(data$1(ele, field), operator, value2);
      };
      match[Type2.DATA_BOOL] = function(check, ele) {
        var field = check.field, operator = check.operator;
        return boolCmp(data$1(ele, field), operator);
      };
      match[Type2.DATA_EXIST] = function(check, ele) {
        var field = check.field;
        check.operator;
        return existCmp(data$1(ele, field));
      };
      match[Type2.UNDIRECTED_EDGE] = function(check, ele) {
        var qA = check.nodes[0];
        var qB = check.nodes[1];
        var src = ele.source();
        var tgt = ele.target();
        return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt);
      };
      match[Type2.NODE_NEIGHBOR] = function(check, ele) {
        return matches$1(check.node, ele) && ele.neighborhood().some(function(n2) {
          return n2.isNode() && matches$1(check.neighbor, n2);
        });
      };
      match[Type2.DIRECTED_EDGE] = function(check, ele) {
        return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target());
      };
      match[Type2.NODE_SOURCE] = function(check, ele) {
        return matches$1(check.source, ele) && ele.outgoers().some(function(n2) {
          return n2.isNode() && matches$1(check.target, n2);
        });
      };
      match[Type2.NODE_TARGET] = function(check, ele) {
        return matches$1(check.target, ele) && ele.incomers().some(function(n2) {
          return n2.isNode() && matches$1(check.source, n2);
        });
      };
      match[Type2.CHILD] = function(check, ele) {
        return matches$1(check.child, ele) && matches$1(check.parent, ele.parent());
      };
      match[Type2.PARENT] = function(check, ele) {
        return matches$1(check.parent, ele) && ele.children().some(function(c3) {
          return matches$1(check.child, c3);
        });
      };
      match[Type2.DESCENDANT] = function(check, ele) {
        return matches$1(check.descendant, ele) && ele.ancestors().some(function(a2) {
          return matches$1(check.ancestor, a2);
        });
      };
      match[Type2.ANCESTOR] = function(check, ele) {
        return matches$1(check.ancestor, ele) && ele.descendants().some(function(d3) {
          return matches$1(check.descendant, d3);
        });
      };
      match[Type2.COMPOUND_SPLIT] = function(check, ele) {
        return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele);
      };
      match[Type2.TRUE] = function() {
        return true;
      };
      match[Type2.COLLECTION] = function(check, ele) {
        var collection4 = check.value;
        return collection4.has(ele);
      };
      match[Type2.FILTER] = function(check, ele) {
        var filter8 = check.value;
        return filter8(ele);
      };
      filter3 = /* @__PURE__ */ __name(function filter4(collection4) {
        var self2 = this;
        if (self2.length === 1 && self2[0].checks.length === 1 && self2[0].checks[0].type === Type2.ID) {
          return collection4.getElementById(self2[0].checks[0].value).collection();
        }
        var selectorFunction = /* @__PURE__ */ __name(function selectorFunction2(element3) {
          for (var j3 = 0; j3 < self2.length; j3++) {
            var query = self2[j3];
            if (matches$1(query, element3)) {
              return true;
            }
          }
          return false;
        }, "selectorFunction");
        if (self2.text() == null) {
          selectorFunction = /* @__PURE__ */ __name(function selectorFunction2() {
            return true;
          }, "selectorFunction");
        }
        return collection4.filter(selectorFunction);
      }, "filter");
      matches31 = /* @__PURE__ */ __name(function matches32(ele) {
        var self2 = this;
        for (var j3 = 0; j3 < self2.length; j3++) {
          var query = self2[j3];
          if (matches$1(query, ele)) {
            return true;
          }
        }
        return false;
      }, "matches");
      matching = {
        matches: matches31,
        filter: filter3
      };
      Selector = /* @__PURE__ */ __name(function Selector2(selector) {
        this.inputText = selector;
        this.currentSubject = null;
        this.compoundCount = 0;
        this.edgeCount = 0;
        this.length = 0;
        if (selector == null || string(selector) && selector.match(/^\s*$/)) ;
        else if (elementOrCollection(selector)) {
          this.addQuery({
            checks: [{
              type: Type2.COLLECTION,
              value: selector.collection()
            }]
          });
        } else if (fn$6(selector)) {
          this.addQuery({
            checks: [{
              type: Type2.FILTER,
              value: selector
            }]
          });
        } else if (string(selector)) {
          if (!this.parse(selector)) {
            this.invalid = true;
          }
        } else {
          error("A selector must be created from a string; found ");
        }
      }, "Selector");
      selfn = Selector.prototype;
      [parse$1, matching].forEach(function(p3) {
        return extend4(selfn, p3);
      });
      selfn.text = function() {
        return this.inputText;
      };
      selfn.size = function() {
        return this.length;
      };
      selfn.eq = function(i2) {
        return this[i2];
      };
      selfn.sameText = function(otherSel) {
        return !this.invalid && !otherSel.invalid && this.text() === otherSel.text();
      };
      selfn.addQuery = function(q3) {
        this[this.length++] = q3;
      };
      selfn.selector = selfn.toString;
      elesfn$g = {
        allAre: /* @__PURE__ */ __name(function allAre(selector) {
          var selObj = new Selector(selector);
          return this.every(function(ele) {
            return selObj.matches(ele);
          });
        }, "allAre"),
        is: /* @__PURE__ */ __name(function is(selector) {
          var selObj = new Selector(selector);
          return this.some(function(ele) {
            return selObj.matches(ele);
          });
        }, "is"),
        some: /* @__PURE__ */ __name(function some(fn3, thisArg) {
          for (var i2 = 0; i2 < this.length; i2++) {
            var ret = !thisArg ? fn3(this[i2], i2, this) : fn3.apply(thisArg, [this[i2], i2, this]);
            if (ret) {
              return true;
            }
          }
          return false;
        }, "some"),
        every: /* @__PURE__ */ __name(function every(fn3, thisArg) {
          for (var i2 = 0; i2 < this.length; i2++) {
            var ret = !thisArg ? fn3(this[i2], i2, this) : fn3.apply(thisArg, [this[i2], i2, this]);
            if (!ret) {
              return false;
            }
          }
          return true;
        }, "every"),
        same: /* @__PURE__ */ __name(function same(collection4) {
          if (this === collection4) {
            return true;
          }
          collection4 = this.cy().collection(collection4);
          var thisLength = this.length;
          var collectionLength = collection4.length;
          if (thisLength !== collectionLength) {
            return false;
          }
          if (thisLength === 1) {
            return this[0] === collection4[0];
          }
          return this.every(function(ele) {
            return collection4.hasElementWithId(ele.id());
          });
        }, "same"),
        anySame: /* @__PURE__ */ __name(function anySame(collection4) {
          collection4 = this.cy().collection(collection4);
          return this.some(function(ele) {
            return collection4.hasElementWithId(ele.id());
          });
        }, "anySame"),
        allAreNeighbors: /* @__PURE__ */ __name(function allAreNeighbors(collection4) {
          collection4 = this.cy().collection(collection4);
          var nhood = this.neighborhood();
          return collection4.every(function(ele) {
            return nhood.hasElementWithId(ele.id());
          });
        }, "allAreNeighbors"),
        contains: /* @__PURE__ */ __name(function contains(collection4) {
          collection4 = this.cy().collection(collection4);
          var self2 = this;
          return collection4.every(function(ele) {
            return self2.hasElementWithId(ele.id());
          });
        }, "contains")
      };
      elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors;
      elesfn$g.has = elesfn$g.contains;
      elesfn$g.equal = elesfn$g.equals = elesfn$g.same;
      cache = /* @__PURE__ */ __name(function cache2(fn3, name) {
        return /* @__PURE__ */ __name(function traversalCache(arg1, arg2, arg3, arg4) {
          var selectorOrEles = arg1;
          var eles = this;
          var key;
          if (selectorOrEles == null) {
            key = "";
          } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) {
            key = selectorOrEles.id();
          }
          if (eles.length === 1 && key) {
            var _p = eles[0]._private;
            var tch = _p.traversalCache = _p.traversalCache || {};
            var ch = tch[name] = tch[name] || [];
            var hash = hashString2(key);
            var cacheHit = ch[hash];
            if (cacheHit) {
              return cacheHit;
            } else {
              return ch[hash] = fn3.call(eles, arg1, arg2, arg3, arg4);
            }
          } else {
            return fn3.call(eles, arg1, arg2, arg3, arg4);
          }
        }, "traversalCache");
      }, "cache");
      elesfn$f = {
        parent: /* @__PURE__ */ __name(function parent(selector) {
          var parents3 = [];
          if (this.length === 1) {
            var parent4 = this[0]._private.parent;
            if (parent4) {
              return parent4;
            }
          }
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            var _parent = ele._private.parent;
            if (_parent) {
              parents3.push(_parent);
            }
          }
          return this.spawn(parents3, true).filter(selector);
        }, "parent"),
        parents: /* @__PURE__ */ __name(function parents2(selector) {
          var parents3 = [];
          var eles = this.parent();
          while (eles.nonempty()) {
            for (var i2 = 0; i2 < eles.length; i2++) {
              var ele = eles[i2];
              parents3.push(ele);
            }
            eles = eles.parent();
          }
          return this.spawn(parents3, true).filter(selector);
        }, "parents"),
        commonAncestors: /* @__PURE__ */ __name(function commonAncestors(selector) {
          var ancestors;
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            var parents3 = ele.parents();
            ancestors = ancestors || parents3;
            ancestors = ancestors.intersect(parents3);
          }
          return ancestors.filter(selector);
        }, "commonAncestors"),
        orphans: /* @__PURE__ */ __name(function orphans(selector) {
          return this.stdFilter(function(ele) {
            return ele.isOrphan();
          }).filter(selector);
        }, "orphans"),
        nonorphans: /* @__PURE__ */ __name(function nonorphans(selector) {
          return this.stdFilter(function(ele) {
            return ele.isChild();
          }).filter(selector);
        }, "nonorphans"),
        children: cache(function(selector) {
          var children2 = [];
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            var eleChildren = ele._private.children;
            for (var j3 = 0; j3 < eleChildren.length; j3++) {
              children2.push(eleChildren[j3]);
            }
          }
          return this.spawn(children2, true).filter(selector);
        }, "children"),
        siblings: /* @__PURE__ */ __name(function siblings(selector) {
          return this.parent().children().not(this).filter(selector);
        }, "siblings"),
        isParent: /* @__PURE__ */ __name(function isParent() {
          var ele = this[0];
          if (ele) {
            return ele.isNode() && ele._private.children.length !== 0;
          }
        }, "isParent"),
        isChildless: /* @__PURE__ */ __name(function isChildless() {
          var ele = this[0];
          if (ele) {
            return ele.isNode() && ele._private.children.length === 0;
          }
        }, "isChildless"),
        isChild: /* @__PURE__ */ __name(function isChild() {
          var ele = this[0];
          if (ele) {
            return ele.isNode() && ele._private.parent != null;
          }
        }, "isChild"),
        isOrphan: /* @__PURE__ */ __name(function isOrphan() {
          var ele = this[0];
          if (ele) {
            return ele.isNode() && ele._private.parent == null;
          }
        }, "isOrphan"),
        descendants: /* @__PURE__ */ __name(function descendants2(selector) {
          var elements2 = [];
          function add3(eles) {
            for (var i2 = 0; i2 < eles.length; i2++) {
              var ele = eles[i2];
              elements2.push(ele);
              if (ele.children().nonempty()) {
                add3(ele.children());
              }
            }
          }
          __name(add3, "add");
          add3(this.children());
          return this.spawn(elements2, true).filter(selector);
        }, "descendants")
      };
      __name(forEachCompound, "forEachCompound");
      __name(addChildren, "addChildren");
      elesfn$f.forEachDown = function(fn3) {
        var includeSelf = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
        return forEachCompound(this, fn3, includeSelf, addChildren);
      };
      __name(addParent, "addParent");
      elesfn$f.forEachUp = function(fn3) {
        var includeSelf = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
        return forEachCompound(this, fn3, includeSelf, addParent);
      };
      __name(addParentAndChildren, "addParentAndChildren");
      elesfn$f.forEachUpAndDown = function(fn3) {
        var includeSelf = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
        return forEachCompound(this, fn3, includeSelf, addParentAndChildren);
      };
      elesfn$f.ancestors = elesfn$f.parents;
      fn$5 = elesfn$e = {
        data: define2.data({
          field: "data",
          bindingEvent: "data",
          allowBinding: true,
          allowSetting: true,
          settingEvent: "data",
          settingTriggersEvent: true,
          triggerFnName: "trigger",
          allowGetting: true,
          immutableKeys: {
            "id": true,
            "source": true,
            "target": true,
            "parent": true
          },
          updateStyle: true
        }),
        removeData: define2.removeData({
          field: "data",
          event: "data",
          triggerFnName: "trigger",
          triggerEvent: true,
          immutableKeys: {
            "id": true,
            "source": true,
            "target": true,
            "parent": true
          },
          updateStyle: true
        }),
        scratch: define2.data({
          field: "scratch",
          bindingEvent: "scratch",
          allowBinding: true,
          allowSetting: true,
          settingEvent: "scratch",
          settingTriggersEvent: true,
          triggerFnName: "trigger",
          allowGetting: true,
          updateStyle: true
        }),
        removeScratch: define2.removeData({
          field: "scratch",
          event: "scratch",
          triggerFnName: "trigger",
          triggerEvent: true,
          updateStyle: true
        }),
        rscratch: define2.data({
          field: "rscratch",
          allowBinding: false,
          allowSetting: true,
          settingTriggersEvent: false,
          allowGetting: true
        }),
        removeRscratch: define2.removeData({
          field: "rscratch",
          triggerEvent: false
        }),
        id: /* @__PURE__ */ __name(function id3() {
          var ele = this[0];
          if (ele) {
            return ele._private.data.id;
          }
        }, "id")
      };
      fn$5.attr = fn$5.data;
      fn$5.removeAttr = fn$5.removeData;
      data3 = elesfn$e;
      elesfn$d = {};
      __name(defineDegreeFunction, "defineDegreeFunction");
      extend4(elesfn$d, {
        degree: defineDegreeFunction(function(node2, edge) {
          if (edge.source().same(edge.target())) {
            return 2;
          } else {
            return 1;
          }
        }),
        indegree: defineDegreeFunction(function(node2, edge) {
          if (edge.target().same(node2)) {
            return 1;
          } else {
            return 0;
          }
        }),
        outdegree: defineDegreeFunction(function(node2, edge) {
          if (edge.source().same(node2)) {
            return 1;
          } else {
            return 0;
          }
        })
      });
      __name(defineDegreeBoundsFunction, "defineDegreeBoundsFunction");
      extend4(elesfn$d, {
        minDegree: defineDegreeBoundsFunction("degree", function(degree, min10) {
          return degree < min10;
        }),
        maxDegree: defineDegreeBoundsFunction("degree", function(degree, max10) {
          return degree > max10;
        }),
        minIndegree: defineDegreeBoundsFunction("indegree", function(degree, min10) {
          return degree < min10;
        }),
        maxIndegree: defineDegreeBoundsFunction("indegree", function(degree, max10) {
          return degree > max10;
        }),
        minOutdegree: defineDegreeBoundsFunction("outdegree", function(degree, min10) {
          return degree < min10;
        }),
        maxOutdegree: defineDegreeBoundsFunction("outdegree", function(degree, max10) {
          return degree > max10;
        })
      });
      extend4(elesfn$d, {
        totalDegree: /* @__PURE__ */ __name(function totalDegree(includeLoops) {
          var total = 0;
          var nodes5 = this.nodes();
          for (var i2 = 0; i2 < nodes5.length; i2++) {
            total += nodes5[i2].degree(includeLoops);
          }
          return total;
        }, "totalDegree")
      });
      beforePositionSet = /* @__PURE__ */ __name(function beforePositionSet2(eles, newPos, silent) {
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          if (!ele.locked()) {
            var oldPos = ele._private.position;
            var delta = {
              x: newPos.x != null ? newPos.x - oldPos.x : 0,
              y: newPos.y != null ? newPos.y - oldPos.y : 0
            };
            if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) {
              ele.children().shift(delta, silent);
            }
            ele.dirtyBoundingBoxCache();
          }
        }
      }, "beforePositionSet");
      positionDef = {
        field: "position",
        bindingEvent: "position",
        allowBinding: true,
        allowSetting: true,
        settingEvent: "position",
        settingTriggersEvent: true,
        triggerFnName: "emitAndNotify",
        allowGetting: true,
        validKeys: ["x", "y"],
        beforeGet: /* @__PURE__ */ __name(function beforeGet(ele) {
          ele.updateCompoundBounds();
        }, "beforeGet"),
        beforeSet: /* @__PURE__ */ __name(function beforeSet(eles, newPos) {
          beforePositionSet(eles, newPos, false);
        }, "beforeSet"),
        onSet: /* @__PURE__ */ __name(function onSet(eles) {
          eles.dirtyCompoundBoundsCache();
        }, "onSet"),
        canSet: /* @__PURE__ */ __name(function canSet(ele) {
          return !ele.locked();
        }, "canSet")
      };
      fn$4 = elesfn$c = {
        position: define2.data(positionDef),
        // position but no notification to renderer
        silentPosition: define2.data(extend4({}, positionDef, {
          allowBinding: false,
          allowSetting: true,
          settingTriggersEvent: false,
          allowGetting: false,
          beforeSet: /* @__PURE__ */ __name(function beforeSet2(eles, newPos) {
            beforePositionSet(eles, newPos, true);
          }, "beforeSet"),
          onSet: /* @__PURE__ */ __name(function onSet2(eles) {
            eles.dirtyCompoundBoundsCache();
          }, "onSet")
        })),
        positions: /* @__PURE__ */ __name(function positions(pos, silent) {
          if (plainObject(pos)) {
            if (silent) {
              this.silentPosition(pos);
            } else {
              this.position(pos);
            }
          } else if (fn$6(pos)) {
            var _fn = pos;
            var cy = this.cy();
            cy.startBatch();
            for (var i2 = 0; i2 < this.length; i2++) {
              var ele = this[i2];
              var _pos = void 0;
              if (_pos = _fn(ele, i2)) {
                if (silent) {
                  ele.silentPosition(_pos);
                } else {
                  ele.position(_pos);
                }
              }
            }
            cy.endBatch();
          }
          return this;
        }, "positions"),
        silentPositions: /* @__PURE__ */ __name(function silentPositions(pos) {
          return this.positions(pos, true);
        }, "silentPositions"),
        shift: /* @__PURE__ */ __name(function shift(dim, val, silent) {
          var delta;
          if (plainObject(dim)) {
            delta = {
              x: number$1(dim.x) ? dim.x : 0,
              y: number$1(dim.y) ? dim.y : 0
            };
            silent = val;
          } else if (string(dim) && number$1(val)) {
            delta = {
              x: 0,
              y: 0
            };
            delta[dim] = val;
          }
          if (delta != null) {
            var cy = this.cy();
            cy.startBatch();
            for (var i2 = 0; i2 < this.length; i2++) {
              var ele = this[i2];
              if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) {
                continue;
              }
              var pos = ele.position();
              var newPos = {
                x: pos.x + delta.x,
                y: pos.y + delta.y
              };
              if (silent) {
                ele.silentPosition(newPos);
              } else {
                ele.position(newPos);
              }
            }
            cy.endBatch();
          }
          return this;
        }, "shift"),
        silentShift: /* @__PURE__ */ __name(function silentShift(dim, val) {
          if (plainObject(dim)) {
            this.shift(dim, true);
          } else if (string(dim) && number$1(val)) {
            this.shift(dim, val, true);
          }
          return this;
        }, "silentShift"),
        // get/set the rendered (i.e. on screen) positon of the element
        renderedPosition: /* @__PURE__ */ __name(function renderedPosition(dim, val) {
          var ele = this[0];
          var cy = this.cy();
          var zoom2 = cy.zoom();
          var pan2 = cy.pan();
          var rpos = plainObject(dim) ? dim : void 0;
          var setting = rpos !== void 0 || val !== void 0 && string(dim);
          if (ele && ele.isNode()) {
            if (setting) {
              for (var i2 = 0; i2 < this.length; i2++) {
                var _ele = this[i2];
                if (val !== void 0) {
                  _ele.position(dim, (val - pan2[dim]) / zoom2);
                } else if (rpos !== void 0) {
                  _ele.position(renderedToModelPosition(rpos, zoom2, pan2));
                }
              }
            } else {
              var pos = ele.position();
              rpos = modelToRenderedPosition$1(pos, zoom2, pan2);
              if (dim === void 0) {
                return rpos;
              } else {
                return rpos[dim];
              }
            }
          } else if (!setting) {
            return void 0;
          }
          return this;
        }, "renderedPosition"),
        // get/set the position relative to the parent
        relativePosition: /* @__PURE__ */ __name(function relativePosition(dim, val) {
          var ele = this[0];
          var cy = this.cy();
          var ppos = plainObject(dim) ? dim : void 0;
          var setting = ppos !== void 0 || val !== void 0 && string(dim);
          var hasCompoundNodes2 = cy.hasCompoundNodes();
          if (ele && ele.isNode()) {
            if (setting) {
              for (var i2 = 0; i2 < this.length; i2++) {
                var _ele2 = this[i2];
                var parent4 = hasCompoundNodes2 ? _ele2.parent() : null;
                var hasParent = parent4 && parent4.length > 0;
                var relativeToParent = hasParent;
                if (hasParent) {
                  parent4 = parent4[0];
                }
                var origin = relativeToParent ? parent4.position() : {
                  x: 0,
                  y: 0
                };
                if (val !== void 0) {
                  _ele2.position(dim, val + origin[dim]);
                } else if (ppos !== void 0) {
                  _ele2.position({
                    x: ppos.x + origin.x,
                    y: ppos.y + origin.y
                  });
                }
              }
            } else {
              var pos = ele.position();
              var _parent = hasCompoundNodes2 ? ele.parent() : null;
              var _hasParent = _parent && _parent.length > 0;
              var _relativeToParent = _hasParent;
              if (_hasParent) {
                _parent = _parent[0];
              }
              var _origin = _relativeToParent ? _parent.position() : {
                x: 0,
                y: 0
              };
              ppos = {
                x: pos.x - _origin.x,
                y: pos.y - _origin.y
              };
              if (dim === void 0) {
                return ppos;
              } else {
                return ppos[dim];
              }
            }
          } else if (!setting) {
            return void 0;
          }
          return this;
        }, "relativePosition")
      };
      fn$4.modelPosition = fn$4.point = fn$4.position;
      fn$4.modelPositions = fn$4.points = fn$4.positions;
      fn$4.renderedPoint = fn$4.renderedPosition;
      fn$4.relativePoint = fn$4.relativePosition;
      position2 = elesfn$c;
      fn$3 = elesfn$b = {};
      elesfn$b.renderedBoundingBox = function(options2) {
        var bb = this.boundingBox(options2);
        var cy = this.cy();
        var zoom2 = cy.zoom();
        var pan2 = cy.pan();
        var x1 = bb.x1 * zoom2 + pan2.x;
        var x22 = bb.x2 * zoom2 + pan2.x;
        var y1 = bb.y1 * zoom2 + pan2.y;
        var y22 = bb.y2 * zoom2 + pan2.y;
        return {
          x1,
          x2: x22,
          y1,
          y2: y22,
          w: x22 - x1,
          h: y22 - y1
        };
      };
      elesfn$b.dirtyCompoundBoundsCache = function() {
        var silent = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
        var cy = this.cy();
        if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {
          return this;
        }
        this.forEachUp(function(ele) {
          if (ele.isParent()) {
            var _p = ele._private;
            _p.compoundBoundsClean = false;
            _p.bbCache = null;
            if (!silent) {
              ele.emitAndNotify("bounds");
            }
          }
        });
        return this;
      };
      elesfn$b.updateCompoundBounds = function() {
        var force = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
        var cy = this.cy();
        if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {
          return this;
        }
        if (!force && cy.batching()) {
          return this;
        }
        function update2(parent4) {
          if (!parent4.isParent()) {
            return;
          }
          var _p2 = parent4._private;
          var children2 = parent4.children();
          var includeLabels = parent4.pstyle("compound-sizing-wrt-labels").value === "include";
          var min10 = {
            width: {
              val: parent4.pstyle("min-width").pfValue,
              left: parent4.pstyle("min-width-bias-left"),
              right: parent4.pstyle("min-width-bias-right")
            },
            height: {
              val: parent4.pstyle("min-height").pfValue,
              top: parent4.pstyle("min-height-bias-top"),
              bottom: parent4.pstyle("min-height-bias-bottom")
            }
          };
          var bb = children2.boundingBox({
            includeLabels,
            includeOverlays: false,
            // updating the compound bounds happens outside of the regular
            // cache cycle (i.e. before fired events)
            useCache: false
          });
          var pos = _p2.position;
          if (bb.w === 0 || bb.h === 0) {
            bb = {
              w: parent4.pstyle("width").pfValue,
              h: parent4.pstyle("height").pfValue
            };
            bb.x1 = pos.x - bb.w / 2;
            bb.x2 = pos.x + bb.w / 2;
            bb.y1 = pos.y - bb.h / 2;
            bb.y2 = pos.y + bb.h / 2;
          }
          function computeBiasValues(propDiff, propBias, propBiasComplement) {
            var biasDiff = 0;
            var biasComplementDiff = 0;
            var biasTotal = propBias + propBiasComplement;
            if (propDiff > 0 && biasTotal > 0) {
              biasDiff = propBias / biasTotal * propDiff;
              biasComplementDiff = propBiasComplement / biasTotal * propDiff;
            }
            return {
              biasDiff,
              biasComplementDiff
            };
          }
          __name(computeBiasValues, "computeBiasValues");
          function computePaddingValues(width3, height2, paddingObject, relativeTo) {
            if (paddingObject.units === "%") {
              switch (relativeTo) {
                case "width":
                  return width3 > 0 ? paddingObject.pfValue * width3 : 0;
                case "height":
                  return height2 > 0 ? paddingObject.pfValue * height2 : 0;
                case "average":
                  return width3 > 0 && height2 > 0 ? paddingObject.pfValue * (width3 + height2) / 2 : 0;
                case "min":
                  return width3 > 0 && height2 > 0 ? width3 > height2 ? paddingObject.pfValue * height2 : paddingObject.pfValue * width3 : 0;
                case "max":
                  return width3 > 0 && height2 > 0 ? width3 > height2 ? paddingObject.pfValue * width3 : paddingObject.pfValue * height2 : 0;
                default:
                  return 0;
              }
            } else if (paddingObject.units === "px") {
              return paddingObject.pfValue;
            } else {
              return 0;
            }
          }
          __name(computePaddingValues, "computePaddingValues");
          var leftVal = min10.width.left.value;
          if (min10.width.left.units === "px" && min10.width.val > 0) {
            leftVal = leftVal * 100 / min10.width.val;
          }
          var rightVal = min10.width.right.value;
          if (min10.width.right.units === "px" && min10.width.val > 0) {
            rightVal = rightVal * 100 / min10.width.val;
          }
          var topVal = min10.height.top.value;
          if (min10.height.top.units === "px" && min10.height.val > 0) {
            topVal = topVal * 100 / min10.height.val;
          }
          var bottomVal = min10.height.bottom.value;
          if (min10.height.bottom.units === "px" && min10.height.val > 0) {
            bottomVal = bottomVal * 100 / min10.height.val;
          }
          var widthBiasDiffs = computeBiasValues(min10.width.val - bb.w, leftVal, rightVal);
          var diffLeft = widthBiasDiffs.biasDiff;
          var diffRight = widthBiasDiffs.biasComplementDiff;
          var heightBiasDiffs = computeBiasValues(min10.height.val - bb.h, topVal, bottomVal);
          var diffTop = heightBiasDiffs.biasDiff;
          var diffBottom = heightBiasDiffs.biasComplementDiff;
          _p2.autoPadding = computePaddingValues(bb.w, bb.h, parent4.pstyle("padding"), parent4.pstyle("padding-relative-to").value);
          _p2.autoWidth = Math.max(bb.w, min10.width.val);
          pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2;
          _p2.autoHeight = Math.max(bb.h, min10.height.val);
          pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2;
        }
        __name(update2, "update");
        for (var i2 = 0; i2 < this.length; i2++) {
          var ele = this[i2];
          var _p = ele._private;
          if (!_p.compoundBoundsClean || force) {
            update2(ele);
            if (!cy.batching()) {
              _p.compoundBoundsClean = true;
            }
          }
        }
        return this;
      };
      noninf = /* @__PURE__ */ __name(function noninf2(x5) {
        if (x5 === Infinity || x5 === -Infinity) {
          return 0;
        }
        return x5;
      }, "noninf");
      updateBounds = /* @__PURE__ */ __name(function updateBounds2(b3, x1, y1, x22, y22) {
        if (x22 - x1 === 0 || y22 - y1 === 0) {
          return;
        }
        if (x1 == null || y1 == null || x22 == null || y22 == null) {
          return;
        }
        b3.x1 = x1 < b3.x1 ? x1 : b3.x1;
        b3.x2 = x22 > b3.x2 ? x22 : b3.x2;
        b3.y1 = y1 < b3.y1 ? y1 : b3.y1;
        b3.y2 = y22 > b3.y2 ? y22 : b3.y2;
        b3.w = b3.x2 - b3.x1;
        b3.h = b3.y2 - b3.y1;
      }, "updateBounds");
      updateBoundsFromBox = /* @__PURE__ */ __name(function updateBoundsFromBox2(b3, b22) {
        if (b22 == null) {
          return b3;
        }
        return updateBounds(b3, b22.x1, b22.y1, b22.x2, b22.y2);
      }, "updateBoundsFromBox");
      prefixedProperty = /* @__PURE__ */ __name(function prefixedProperty2(obj, field, prefix) {
        return getPrefixedProperty(obj, field, prefix);
      }, "prefixedProperty");
      updateBoundsFromArrow = /* @__PURE__ */ __name(function updateBoundsFromArrow2(bounds4, ele, prefix) {
        if (ele.cy().headless()) {
          return;
        }
        var _p = ele._private;
        var rstyle = _p.rstyle;
        var halfArW = rstyle.arrowWidth / 2;
        var arrowType = ele.pstyle(prefix + "-arrow-shape").value;
        var x5;
        var y6;
        if (arrowType !== "none") {
          if (prefix === "source") {
            x5 = rstyle.srcX;
            y6 = rstyle.srcY;
          } else if (prefix === "target") {
            x5 = rstyle.tgtX;
            y6 = rstyle.tgtY;
          } else {
            x5 = rstyle.midX;
            y6 = rstyle.midY;
          }
          var bbs = _p.arrowBounds = _p.arrowBounds || {};
          var bb = bbs[prefix] = bbs[prefix] || {};
          bb.x1 = x5 - halfArW;
          bb.y1 = y6 - halfArW;
          bb.x2 = x5 + halfArW;
          bb.y2 = y6 + halfArW;
          bb.w = bb.x2 - bb.x1;
          bb.h = bb.y2 - bb.y1;
          expandBoundingBox(bb, 1);
          updateBounds(bounds4, bb.x1, bb.y1, bb.x2, bb.y2);
        }
      }, "updateBoundsFromArrow");
      updateBoundsFromLabel = /* @__PURE__ */ __name(function updateBoundsFromLabel2(bounds4, ele, prefix) {
        if (ele.cy().headless()) {
          return;
        }
        var prefixDash;
        if (prefix) {
          prefixDash = prefix + "-";
        } else {
          prefixDash = "";
        }
        var _p = ele._private;
        var rstyle = _p.rstyle;
        var label = ele.pstyle(prefixDash + "label").strValue;
        if (label) {
          var halign = ele.pstyle("text-halign");
          var valign = ele.pstyle("text-valign");
          var labelWidth = prefixedProperty(rstyle, "labelWidth", prefix);
          var labelHeight = prefixedProperty(rstyle, "labelHeight", prefix);
          var labelX = prefixedProperty(rstyle, "labelX", prefix);
          var labelY = prefixedProperty(rstyle, "labelY", prefix);
          var marginX = ele.pstyle(prefixDash + "text-margin-x").pfValue;
          var marginY = ele.pstyle(prefixDash + "text-margin-y").pfValue;
          var isEdge2 = ele.isEdge();
          var rotation = ele.pstyle(prefixDash + "text-rotation");
          var outlineWidth = ele.pstyle("text-outline-width").pfValue;
          var borderWidth = ele.pstyle("text-border-width").pfValue;
          var halfBorderWidth = borderWidth / 2;
          var padding = ele.pstyle("text-background-padding").pfValue;
          var marginOfError = 2;
          var lh = labelHeight;
          var lw = labelWidth;
          var lw_2 = lw / 2;
          var lh_2 = lh / 2;
          var lx1, lx2, ly1, ly2;
          if (isEdge2) {
            lx1 = labelX - lw_2;
            lx2 = labelX + lw_2;
            ly1 = labelY - lh_2;
            ly2 = labelY + lh_2;
          } else {
            switch (halign.value) {
              case "left":
                lx1 = labelX - lw;
                lx2 = labelX;
                break;
              case "center":
                lx1 = labelX - lw_2;
                lx2 = labelX + lw_2;
                break;
              case "right":
                lx1 = labelX;
                lx2 = labelX + lw;
                break;
            }
            switch (valign.value) {
              case "top":
                ly1 = labelY - lh;
                ly2 = labelY;
                break;
              case "center":
                ly1 = labelY - lh_2;
                ly2 = labelY + lh_2;
                break;
              case "bottom":
                ly1 = labelY;
                ly2 = labelY + lh;
                break;
            }
          }
          var leftPad = marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;
          var rightPad = marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError;
          var topPad = marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;
          var botPad = marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError;
          lx1 += leftPad;
          lx2 += rightPad;
          ly1 += topPad;
          ly2 += botPad;
          var bbPrefix = prefix || "main";
          var bbs = _p.labelBounds;
          var bb = bbs[bbPrefix] = bbs[bbPrefix] || {};
          bb.x1 = lx1;
          bb.y1 = ly1;
          bb.x2 = lx2;
          bb.y2 = ly2;
          bb.w = lx2 - lx1;
          bb.h = ly2 - ly1;
          bb.leftPad = leftPad;
          bb.rightPad = rightPad;
          bb.topPad = topPad;
          bb.botPad = botPad;
          var isAutorotate = isEdge2 && rotation.strValue === "autorotate";
          var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0;
          if (isAutorotate || isPfValue) {
            var theta = isAutorotate ? prefixedProperty(_p.rstyle, "labelAngle", prefix) : rotation.pfValue;
            var cos3 = Math.cos(theta);
            var sin3 = Math.sin(theta);
            var xo = (lx1 + lx2) / 2;
            var yo = (ly1 + ly2) / 2;
            if (!isEdge2) {
              switch (halign.value) {
                case "left":
                  xo = lx2;
                  break;
                case "right":
                  xo = lx1;
                  break;
              }
              switch (valign.value) {
                case "top":
                  yo = ly2;
                  break;
                case "bottom":
                  yo = ly1;
                  break;
              }
            }
            var rotate2 = /* @__PURE__ */ __name(function rotate3(x5, y6) {
              x5 = x5 - xo;
              y6 = y6 - yo;
              return {
                x: x5 * cos3 - y6 * sin3 + xo,
                y: x5 * sin3 + y6 * cos3 + yo
              };
            }, "rotate");
            var px1y1 = rotate2(lx1, ly1);
            var px1y2 = rotate2(lx1, ly2);
            var px2y1 = rotate2(lx2, ly1);
            var px2y2 = rotate2(lx2, ly2);
            lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x);
            lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x);
            ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y);
            ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y);
          }
          var bbPrefixRot = bbPrefix + "Rot";
          var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {};
          bbRot.x1 = lx1;
          bbRot.y1 = ly1;
          bbRot.x2 = lx2;
          bbRot.y2 = ly2;
          bbRot.w = lx2 - lx1;
          bbRot.h = ly2 - ly1;
          updateBounds(bounds4, lx1, ly1, lx2, ly2);
          updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2);
        }
        return bounds4;
      }, "updateBoundsFromLabel");
      updateBoundsFromOutline = /* @__PURE__ */ __name(function updateBoundsFromOutline2(bounds4, ele) {
        if (ele.cy().headless()) {
          return;
        }
        var outlineOpacity = ele.pstyle("outline-opacity").value;
        var outlineWidth = ele.pstyle("outline-width").value;
        var outlineOffset = ele.pstyle("outline-offset").value;
        var expansion = outlineWidth + outlineOffset;
        updateBoundsFromMiter(bounds4, ele, outlineOpacity, expansion, "outside", expansion / 2);
      }, "updateBoundsFromOutline");
      updateBoundsFromMiter = /* @__PURE__ */ __name(function updateBoundsFromMiter2(bounds4, ele, opacity, expansionSize, expansionPosition, useFallbackValue) {
        if (opacity === 0 || expansionSize <= 0 || expansionPosition === "inside") {
          return;
        }
        var cy = ele.cy();
        var r2 = cy.renderer();
        var rshape = r2.nodeShapes[r2.getNodeShape(ele)];
        if (!rshape) {
          return;
        }
        var _ele$position = ele.position(), x5 = _ele$position.x, y6 = _ele$position.y;
        var w4 = ele.width();
        var h3 = ele.height();
        if (rshape.hasMiterBounds) {
          if (expansionPosition === "center") {
            expansionSize /= 2;
          }
          var mbb = rshape.miterBounds(x5, y6, w4, h3, expansionSize);
          updateBoundsFromBox(bounds4, mbb);
        } else if (useFallbackValue != null && useFallbackValue > 0) {
          expandBoundingBoxSides(bounds4, [useFallbackValue, useFallbackValue, useFallbackValue, useFallbackValue]);
        }
      }, "updateBoundsFromMiter");
      updateBoundsFromMiterBorder = /* @__PURE__ */ __name(function updateBoundsFromMiterBorder2(bounds4, ele) {
        if (ele.cy().headless()) {
          return;
        }
        var borderOpacity = ele.pstyle("border-opacity").value;
        var borderWidth = ele.pstyle("border-width").pfValue;
        var borderPosition = ele.pstyle("border-position").value;
        updateBoundsFromMiter(bounds4, ele, borderOpacity, borderWidth, borderPosition);
      }, "updateBoundsFromMiterBorder");
      boundingBoxImpl = /* @__PURE__ */ __name(function boundingBoxImpl2(ele, options2) {
        var cy = ele._private.cy;
        var styleEnabled2 = cy.styleEnabled();
        var headless2 = cy.headless();
        var bounds4 = makeBoundingBox();
        var _p = ele._private;
        var isNode2 = ele.isNode();
        var isEdge2 = ele.isEdge();
        var ex1, ex2, ey1, ey2;
        var x5, y6;
        var rstyle = _p.rstyle;
        var manualExpansion = isNode2 && styleEnabled2 ? ele.pstyle("bounds-expansion").pfValue : [0];
        var isDisplayed = /* @__PURE__ */ __name(function isDisplayed2(ele2) {
          return ele2.pstyle("display").value !== "none";
        }, "isDisplayed");
        var displayed = !styleEnabled2 || isDisplayed(ele) && (!isEdge2 || isDisplayed(ele.source()) && isDisplayed(ele.target()));
        if (displayed) {
          var overlayOpacity = 0;
          var overlayPadding = 0;
          if (styleEnabled2 && options2.includeOverlays) {
            overlayOpacity = ele.pstyle("overlay-opacity").value;
            if (overlayOpacity !== 0) {
              overlayPadding = ele.pstyle("overlay-padding").value;
            }
          }
          var underlayOpacity = 0;
          var underlayPadding = 0;
          if (styleEnabled2 && options2.includeUnderlays) {
            underlayOpacity = ele.pstyle("underlay-opacity").value;
            if (underlayOpacity !== 0) {
              underlayPadding = ele.pstyle("underlay-padding").value;
            }
          }
          var padding = Math.max(overlayPadding, underlayPadding);
          var w4 = 0;
          var wHalf = 0;
          if (styleEnabled2) {
            w4 = ele.pstyle("width").pfValue;
            wHalf = w4 / 2;
          }
          if (isNode2 && options2.includeNodes) {
            var pos = ele.position();
            x5 = pos.x;
            y6 = pos.y;
            var _w = ele.outerWidth();
            var halfW = _w / 2;
            var h3 = ele.outerHeight();
            var halfH = h3 / 2;
            ex1 = x5 - halfW;
            ex2 = x5 + halfW;
            ey1 = y6 - halfH;
            ey2 = y6 + halfH;
            updateBounds(bounds4, ex1, ey1, ex2, ey2);
            if (styleEnabled2) {
              updateBoundsFromOutline(bounds4, ele);
            }
            if (styleEnabled2 && options2.includeOutlines && !headless2) {
              updateBoundsFromOutline(bounds4, ele);
            }
            if (styleEnabled2) {
              updateBoundsFromMiterBorder(bounds4, ele);
            }
          } else if (isEdge2 && options2.includeEdges) {
            if (styleEnabled2 && !headless2) {
              var curveStyle = ele.pstyle("curve-style").strValue;
              ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX);
              ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX);
              ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY);
              ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY);
              ex1 -= wHalf;
              ex2 += wHalf;
              ey1 -= wHalf;
              ey2 += wHalf;
              updateBounds(bounds4, ex1, ey1, ex2, ey2);
              if (curveStyle === "haystack") {
                var hpts = rstyle.haystackPts;
                if (hpts && hpts.length === 2) {
                  ex1 = hpts[0].x;
                  ey1 = hpts[0].y;
                  ex2 = hpts[1].x;
                  ey2 = hpts[1].y;
                  if (ex1 > ex2) {
                    var temp = ex1;
                    ex1 = ex2;
                    ex2 = temp;
                  }
                  if (ey1 > ey2) {
                    var _temp = ey1;
                    ey1 = ey2;
                    ey2 = _temp;
                  }
                  updateBounds(bounds4, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf);
                }
              } else if (curveStyle === "bezier" || curveStyle === "unbundled-bezier" || endsWith(curveStyle, "segments") || endsWith(curveStyle, "taxi")) {
                var pts2;
                switch (curveStyle) {
                  case "bezier":
                  case "unbundled-bezier":
                    pts2 = rstyle.bezierPts;
                    break;
                  case "segments":
                  case "taxi":
                  case "round-segments":
                  case "round-taxi":
                    pts2 = rstyle.linePts;
                    break;
                }
                if (pts2 != null) {
                  for (var j3 = 0; j3 < pts2.length; j3++) {
                    var pt = pts2[j3];
                    ex1 = pt.x - wHalf;
                    ex2 = pt.x + wHalf;
                    ey1 = pt.y - wHalf;
                    ey2 = pt.y + wHalf;
                    updateBounds(bounds4, ex1, ey1, ex2, ey2);
                  }
                }
              }
            } else {
              var n1 = ele.source();
              var n1pos = n1.position();
              var n2 = ele.target();
              var n2pos = n2.position();
              ex1 = n1pos.x;
              ex2 = n2pos.x;
              ey1 = n1pos.y;
              ey2 = n2pos.y;
              if (ex1 > ex2) {
                var _temp2 = ex1;
                ex1 = ex2;
                ex2 = _temp2;
              }
              if (ey1 > ey2) {
                var _temp3 = ey1;
                ey1 = ey2;
                ey2 = _temp3;
              }
              ex1 -= wHalf;
              ex2 += wHalf;
              ey1 -= wHalf;
              ey2 += wHalf;
              updateBounds(bounds4, ex1, ey1, ex2, ey2);
            }
          }
          if (styleEnabled2 && options2.includeEdges && isEdge2) {
            updateBoundsFromArrow(bounds4, ele, "mid-source");
            updateBoundsFromArrow(bounds4, ele, "mid-target");
            updateBoundsFromArrow(bounds4, ele, "source");
            updateBoundsFromArrow(bounds4, ele, "target");
          }
          if (styleEnabled2) {
            var ghost = ele.pstyle("ghost").value === "yes";
            if (ghost) {
              var gx = ele.pstyle("ghost-offset-x").pfValue;
              var gy = ele.pstyle("ghost-offset-y").pfValue;
              updateBounds(bounds4, bounds4.x1 + gx, bounds4.y1 + gy, bounds4.x2 + gx, bounds4.y2 + gy);
            }
          }
          var bbBody = _p.bodyBounds = _p.bodyBounds || {};
          assignBoundingBox(bbBody, bounds4);
          expandBoundingBoxSides(bbBody, manualExpansion);
          expandBoundingBox(bbBody, 1);
          if (styleEnabled2) {
            ex1 = bounds4.x1;
            ex2 = bounds4.x2;
            ey1 = bounds4.y1;
            ey2 = bounds4.y2;
            updateBounds(bounds4, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding);
          }
          var bbOverlay = _p.overlayBounds = _p.overlayBounds || {};
          assignBoundingBox(bbOverlay, bounds4);
          expandBoundingBoxSides(bbOverlay, manualExpansion);
          expandBoundingBox(bbOverlay, 1);
          var bbLabels = _p.labelBounds = _p.labelBounds || {};
          if (bbLabels.all != null) {
            clearBoundingBox(bbLabels.all);
          } else {
            bbLabels.all = makeBoundingBox();
          }
          if (styleEnabled2 && options2.includeLabels) {
            if (options2.includeMainLabels) {
              updateBoundsFromLabel(bounds4, ele, null);
            }
            if (isEdge2) {
              if (options2.includeSourceLabels) {
                updateBoundsFromLabel(bounds4, ele, "source");
              }
              if (options2.includeTargetLabels) {
                updateBoundsFromLabel(bounds4, ele, "target");
              }
            }
          }
        }
        bounds4.x1 = noninf(bounds4.x1);
        bounds4.y1 = noninf(bounds4.y1);
        bounds4.x2 = noninf(bounds4.x2);
        bounds4.y2 = noninf(bounds4.y2);
        bounds4.w = noninf(bounds4.x2 - bounds4.x1);
        bounds4.h = noninf(bounds4.y2 - bounds4.y1);
        if (bounds4.w > 0 && bounds4.h > 0 && displayed) {
          expandBoundingBoxSides(bounds4, manualExpansion);
          expandBoundingBox(bounds4, 1);
        }
        return bounds4;
      }, "boundingBoxImpl");
      getKey = /* @__PURE__ */ __name(function getKey2(opts) {
        var i2 = 0;
        var tf = /* @__PURE__ */ __name(function tf2(val) {
          return (val ? 1 : 0) << i2++;
        }, "tf");
        var key = 0;
        key += tf(opts.incudeNodes);
        key += tf(opts.includeEdges);
        key += tf(opts.includeLabels);
        key += tf(opts.includeMainLabels);
        key += tf(opts.includeSourceLabels);
        key += tf(opts.includeTargetLabels);
        key += tf(opts.includeOverlays);
        key += tf(opts.includeOutlines);
        return key;
      }, "getKey");
      getBoundingBoxPosKey = /* @__PURE__ */ __name(function getBoundingBoxPosKey2(ele) {
        var r2 = /* @__PURE__ */ __name(function r3(x5) {
          return Math.round(x5);
        }, "r");
        if (ele.isEdge()) {
          var p1 = ele.source().position();
          var p22 = ele.target().position();
          return hashIntsArray([r2(p1.x), r2(p1.y), r2(p22.x), r2(p22.y)]);
        } else {
          var p3 = ele.position();
          return hashIntsArray([r2(p3.x), r2(p3.y)]);
        }
      }, "getBoundingBoxPosKey");
      cachedBoundingBoxImpl = /* @__PURE__ */ __name(function cachedBoundingBoxImpl2(ele, opts) {
        var _p = ele._private;
        var bb;
        var isEdge2 = ele.isEdge();
        var key = opts == null ? defBbOptsKey : getKey(opts);
        var usingDefOpts = key === defBbOptsKey;
        if (_p.bbCache == null) {
          bb = boundingBoxImpl(ele, defBbOpts);
          _p.bbCache = bb;
          _p.bbCachePosKey = getBoundingBoxPosKey(ele);
        } else {
          bb = _p.bbCache;
        }
        if (!usingDefOpts) {
          var isNode2 = ele.isNode();
          bb = makeBoundingBox();
          if (opts.includeNodes && isNode2 || opts.includeEdges && !isNode2) {
            if (opts.includeOverlays) {
              updateBoundsFromBox(bb, _p.overlayBounds);
            } else {
              updateBoundsFromBox(bb, _p.bodyBounds);
            }
          }
          if (opts.includeLabels) {
            if (opts.includeMainLabels && (!isEdge2 || opts.includeSourceLabels && opts.includeTargetLabels)) {
              updateBoundsFromBox(bb, _p.labelBounds.all);
            } else {
              if (opts.includeMainLabels) {
                updateBoundsFromBox(bb, _p.labelBounds.mainRot);
              }
              if (opts.includeSourceLabels) {
                updateBoundsFromBox(bb, _p.labelBounds.sourceRot);
              }
              if (opts.includeTargetLabels) {
                updateBoundsFromBox(bb, _p.labelBounds.targetRot);
              }
            }
          }
          bb.w = bb.x2 - bb.x1;
          bb.h = bb.y2 - bb.y1;
        }
        return bb;
      }, "cachedBoundingBoxImpl");
      defBbOpts = {
        includeNodes: true,
        includeEdges: true,
        includeLabels: true,
        includeMainLabels: true,
        includeSourceLabels: true,
        includeTargetLabels: true,
        includeOverlays: true,
        includeUnderlays: true,
        includeOutlines: true,
        useCache: true
      };
      defBbOptsKey = getKey(defBbOpts);
      filledBbOpts = defaults$g(defBbOpts);
      elesfn$b.boundingBox = function(options2) {
        var bounds4;
        var useCache = options2 === void 0 || options2.useCache === void 0 || options2.useCache === true;
        var isDirty = memoize3(function(ele2) {
          var _p = ele2._private;
          return _p.bbCache == null || _p.styleDirty || _p.bbCachePosKey !== getBoundingBoxPosKey(ele2);
        }, function(ele2) {
          return ele2.id();
        });
        if (useCache && this.length === 1 && !isDirty(this[0])) {
          if (options2 === void 0) {
            options2 = defBbOpts;
          } else {
            options2 = filledBbOpts(options2);
          }
          bounds4 = cachedBoundingBoxImpl(this[0], options2);
        } else {
          bounds4 = makeBoundingBox();
          options2 = options2 || defBbOpts;
          var opts = filledBbOpts(options2);
          var eles = this;
          var cy = eles.cy();
          var styleEnabled2 = cy.styleEnabled();
          this.edges().forEach(isDirty);
          this.nodes().forEach(isDirty);
          if (styleEnabled2) {
            this.recalculateRenderedStyle(useCache);
          }
          this.updateCompoundBounds(!useCache);
          for (var i2 = 0; i2 < eles.length; i2++) {
            var ele = eles[i2];
            if (isDirty(ele)) {
              ele.dirtyBoundingBoxCache();
            }
            updateBoundsFromBox(bounds4, cachedBoundingBoxImpl(ele, opts));
          }
        }
        bounds4.x1 = noninf(bounds4.x1);
        bounds4.y1 = noninf(bounds4.y1);
        bounds4.x2 = noninf(bounds4.x2);
        bounds4.y2 = noninf(bounds4.y2);
        bounds4.w = noninf(bounds4.x2 - bounds4.x1);
        bounds4.h = noninf(bounds4.y2 - bounds4.y1);
        return bounds4;
      };
      elesfn$b.dirtyBoundingBoxCache = function() {
        for (var i2 = 0; i2 < this.length; i2++) {
          var _p = this[i2]._private;
          _p.bbCache = null;
          _p.bbCachePosKey = null;
          _p.bodyBounds = null;
          _p.overlayBounds = null;
          _p.labelBounds.all = null;
          _p.labelBounds.source = null;
          _p.labelBounds.target = null;
          _p.labelBounds.main = null;
          _p.labelBounds.sourceRot = null;
          _p.labelBounds.targetRot = null;
          _p.labelBounds.mainRot = null;
          _p.arrowBounds.source = null;
          _p.arrowBounds.target = null;
          _p.arrowBounds["mid-source"] = null;
          _p.arrowBounds["mid-target"] = null;
        }
        this.emitAndNotify("bounds");
        return this;
      };
      elesfn$b.boundingBoxAt = function(fn3) {
        var nodes5 = this.nodes();
        var cy = this.cy();
        var hasCompoundNodes2 = cy.hasCompoundNodes();
        var parents3 = cy.collection();
        if (hasCompoundNodes2) {
          parents3 = nodes5.filter(function(node2) {
            return node2.isParent();
          });
          nodes5 = nodes5.not(parents3);
        }
        if (plainObject(fn3)) {
          var obj = fn3;
          fn3 = /* @__PURE__ */ __name(function fn4() {
            return obj;
          }, "fn");
        }
        var storeOldPos = /* @__PURE__ */ __name(function storeOldPos2(node2, i2) {
          return node2._private.bbAtOldPos = fn3(node2, i2);
        }, "storeOldPos");
        var getOldPos = /* @__PURE__ */ __name(function getOldPos2(node2) {
          return node2._private.bbAtOldPos;
        }, "getOldPos");
        cy.startBatch();
        nodes5.forEach(storeOldPos).silentPositions(fn3);
        if (hasCompoundNodes2) {
          parents3.dirtyCompoundBoundsCache();
          parents3.dirtyBoundingBoxCache();
          parents3.updateCompoundBounds(true);
        }
        var bb = copyBoundingBox(this.boundingBox({
          useCache: false
        }));
        nodes5.silentPositions(getOldPos);
        if (hasCompoundNodes2) {
          parents3.dirtyCompoundBoundsCache();
          parents3.dirtyBoundingBoxCache();
          parents3.updateCompoundBounds(true);
        }
        cy.endBatch();
        return bb;
      };
      fn$3.boundingbox = fn$3.bb = fn$3.boundingBox;
      fn$3.renderedBoundingbox = fn$3.renderedBoundingBox;
      bounds = elesfn$b;
      fn$2 = elesfn$a = {};
      defineDimFns = /* @__PURE__ */ __name(function defineDimFns2(opts) {
        opts.uppercaseName = capitalize(opts.name);
        opts.autoName = "auto" + opts.uppercaseName;
        opts.labelName = "label" + opts.uppercaseName;
        opts.outerName = "outer" + opts.uppercaseName;
        opts.uppercaseOuterName = capitalize(opts.outerName);
        fn$2[opts.name] = /* @__PURE__ */ __name(function dimImpl() {
          var ele = this[0];
          var _p = ele._private;
          var cy = _p.cy;
          var styleEnabled2 = cy._private.styleEnabled;
          if (ele) {
            if (styleEnabled2) {
              if (ele.isParent()) {
                ele.updateCompoundBounds();
                return _p[opts.autoName] || 0;
              }
              var d3 = ele.pstyle(opts.name);
              switch (d3.strValue) {
                case "label":
                  ele.recalculateRenderedStyle();
                  return _p.rstyle[opts.labelName] || 0;
                default:
                  return d3.pfValue;
              }
            } else {
              return 1;
            }
          }
        }, "dimImpl");
        fn$2["outer" + opts.uppercaseName] = /* @__PURE__ */ __name(function outerDimImpl() {
          var ele = this[0];
          var _p = ele._private;
          var cy = _p.cy;
          var styleEnabled2 = cy._private.styleEnabled;
          if (ele) {
            if (styleEnabled2) {
              var dim = ele[opts.name]();
              var borderPos = ele.pstyle("border-position").value;
              var border;
              if (borderPos === "center") {
                border = ele.pstyle("border-width").pfValue;
              } else if (borderPos === "outside") {
                border = 2 * ele.pstyle("border-width").pfValue;
              } else {
                border = 0;
              }
              var padding = 2 * ele.padding();
              return dim + border + padding;
            } else {
              return 1;
            }
          }
        }, "outerDimImpl");
        fn$2["rendered" + opts.uppercaseName] = /* @__PURE__ */ __name(function renderedDimImpl() {
          var ele = this[0];
          if (ele) {
            var d3 = ele[opts.name]();
            return d3 * this.cy().zoom();
          }
        }, "renderedDimImpl");
        fn$2["rendered" + opts.uppercaseOuterName] = /* @__PURE__ */ __name(function renderedOuterDimImpl() {
          var ele = this[0];
          if (ele) {
            var od = ele[opts.outerName]();
            return od * this.cy().zoom();
          }
        }, "renderedOuterDimImpl");
      }, "defineDimFns");
      defineDimFns({
        name: "width"
      });
      defineDimFns({
        name: "height"
      });
      elesfn$a.padding = function() {
        var ele = this[0];
        var _p = ele._private;
        if (ele.isParent()) {
          ele.updateCompoundBounds();
          if (_p.autoPadding !== void 0) {
            return _p.autoPadding;
          } else {
            return ele.pstyle("padding").pfValue;
          }
        } else {
          return ele.pstyle("padding").pfValue;
        }
      };
      elesfn$a.paddedHeight = function() {
        var ele = this[0];
        return ele.height() + 2 * ele.padding();
      };
      elesfn$a.paddedWidth = function() {
        var ele = this[0];
        return ele.width() + 2 * ele.padding();
      };
      widthHeight = elesfn$a;
      ifEdge = /* @__PURE__ */ __name(function ifEdge2(ele, getValue4) {
        if (ele.isEdge() && ele.takesUpSpace()) {
          return getValue4(ele);
        }
      }, "ifEdge");
      ifEdgeRenderedPosition = /* @__PURE__ */ __name(function ifEdgeRenderedPosition2(ele, getPoint) {
        if (ele.isEdge() && ele.takesUpSpace()) {
          var cy = ele.cy();
          return modelToRenderedPosition$1(getPoint(ele), cy.zoom(), cy.pan());
        }
      }, "ifEdgeRenderedPosition");
      ifEdgeRenderedPositions = /* @__PURE__ */ __name(function ifEdgeRenderedPositions2(ele, getPoints) {
        if (ele.isEdge() && ele.takesUpSpace()) {
          var cy = ele.cy();
          var pan2 = cy.pan();
          var zoom2 = cy.zoom();
          return getPoints(ele).map(function(p3) {
            return modelToRenderedPosition$1(p3, zoom2, pan2);
          });
        }
      }, "ifEdgeRenderedPositions");
      controlPoints2 = /* @__PURE__ */ __name(function controlPoints3(ele) {
        return ele.renderer().getControlPoints(ele);
      }, "controlPoints");
      segmentPoints = /* @__PURE__ */ __name(function segmentPoints2(ele) {
        return ele.renderer().getSegmentPoints(ele);
      }, "segmentPoints");
      sourceEndpoint = /* @__PURE__ */ __name(function sourceEndpoint2(ele) {
        return ele.renderer().getSourceEndpoint(ele);
      }, "sourceEndpoint");
      targetEndpoint = /* @__PURE__ */ __name(function targetEndpoint2(ele) {
        return ele.renderer().getTargetEndpoint(ele);
      }, "targetEndpoint");
      midpoint = /* @__PURE__ */ __name(function midpoint2(ele) {
        return ele.renderer().getEdgeMidpoint(ele);
      }, "midpoint");
      pts = {
        controlPoints: {
          get: controlPoints2,
          mult: true
        },
        segmentPoints: {
          get: segmentPoints,
          mult: true
        },
        sourceEndpoint: {
          get: sourceEndpoint
        },
        targetEndpoint: {
          get: targetEndpoint
        },
        midpoint: {
          get: midpoint
        }
      };
      renderedName = /* @__PURE__ */ __name(function renderedName2(name) {
        return "rendered" + name[0].toUpperCase() + name.substr(1);
      }, "renderedName");
      edgePoints = Object.keys(pts).reduce(function(obj, name) {
        var spec = pts[name];
        var rName = renderedName(name);
        obj[name] = function() {
          return ifEdge(this, spec.get);
        };
        if (spec.mult) {
          obj[rName] = function() {
            return ifEdgeRenderedPositions(this, spec.get);
          };
        } else {
          obj[rName] = function() {
            return ifEdgeRenderedPosition(this, spec.get);
          };
        }
        return obj;
      }, {});
      dimensions = extend4({}, position2, bounds, widthHeight, edgePoints);
      Event = /* @__PURE__ */ __name(function Event2(src, props) {
        this.recycle(src, props);
      }, "Event");
      __name(returnFalse, "returnFalse");
      __name(returnTrue, "returnTrue");
      Event.prototype = {
        instanceString: /* @__PURE__ */ __name(function instanceString2() {
          return "event";
        }, "instanceString"),
        recycle: /* @__PURE__ */ __name(function recycle(src, props) {
          this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse;
          if (src != null && src.preventDefault) {
            this.type = src.type;
            this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse;
          } else if (src != null && src.type) {
            props = src;
          } else {
            this.type = src;
          }
          if (props != null) {
            this.originalEvent = props.originalEvent;
            this.type = props.type != null ? props.type : this.type;
            this.cy = props.cy;
            this.target = props.target;
            this.position = props.position;
            this.renderedPosition = props.renderedPosition;
            this.namespace = props.namespace;
            this.layout = props.layout;
          }
          if (this.cy != null && this.position != null && this.renderedPosition == null) {
            var pos = this.position;
            var zoom2 = this.cy.zoom();
            var pan2 = this.cy.pan();
            this.renderedPosition = {
              x: pos.x * zoom2 + pan2.x,
              y: pos.y * zoom2 + pan2.y
            };
          }
          this.timeStamp = src && src.timeStamp || Date.now();
        }, "recycle"),
        preventDefault: /* @__PURE__ */ __name(function preventDefault() {
          this.isDefaultPrevented = returnTrue;
          var e3 = this.originalEvent;
          if (!e3) {
            return;
          }
          if (e3.preventDefault) {
            e3.preventDefault();
          }
        }, "preventDefault"),
        stopPropagation: /* @__PURE__ */ __name(function stopPropagation() {
          this.isPropagationStopped = returnTrue;
          var e3 = this.originalEvent;
          if (!e3) {
            return;
          }
          if (e3.stopPropagation) {
            e3.stopPropagation();
          }
        }, "stopPropagation"),
        stopImmediatePropagation: /* @__PURE__ */ __name(function stopImmediatePropagation() {
          this.isImmediatePropagationStopped = returnTrue;
          this.stopPropagation();
        }, "stopImmediatePropagation"),
        isDefaultPrevented: returnFalse,
        isPropagationStopped: returnFalse,
        isImmediatePropagationStopped: returnFalse
      };
      eventRegex = /^([^.]+)(\.(?:[^.]+))?$/;
      universalNamespace = ".*";
      defaults$8 = {
        qualifierCompare: /* @__PURE__ */ __name(function qualifierCompare(q1, q22) {
          return q1 === q22;
        }, "qualifierCompare"),
        eventMatches: /* @__PURE__ */ __name(function eventMatches() {
          return true;
        }, "eventMatches"),
        addEventFields: /* @__PURE__ */ __name(function addEventFields() {
        }, "addEventFields"),
        callbackContext: /* @__PURE__ */ __name(function callbackContext(context) {
          return context;
        }, "callbackContext"),
        beforeEmit: /* @__PURE__ */ __name(function beforeEmit() {
        }, "beforeEmit"),
        afterEmit: /* @__PURE__ */ __name(function afterEmit() {
        }, "afterEmit"),
        bubble: /* @__PURE__ */ __name(function bubble() {
          return false;
        }, "bubble"),
        parent: /* @__PURE__ */ __name(function parent2() {
          return null;
        }, "parent"),
        context: null
      };
      defaultsKeys = Object.keys(defaults$8);
      emptyOpts = {};
      __name(Emitter, "Emitter");
      p2 = Emitter.prototype;
      forEachEvent = /* @__PURE__ */ __name(function forEachEvent2(self2, handler, events, qualifier, callback, conf5, confOverrides) {
        if (fn$6(qualifier)) {
          callback = qualifier;
          qualifier = null;
        }
        if (confOverrides) {
          if (conf5 == null) {
            conf5 = confOverrides;
          } else {
            conf5 = extend4({}, conf5, confOverrides);
          }
        }
        var eventList = array2(events) ? events : events.split(/\s+/);
        for (var i2 = 0; i2 < eventList.length; i2++) {
          var evt = eventList[i2];
          if (emptyString(evt)) {
            continue;
          }
          var match3 = evt.match(eventRegex);
          if (match3) {
            var type3 = match3[1];
            var namespace = match3[2] ? match3[2] : null;
            var ret = handler(self2, evt, type3, namespace, qualifier, callback, conf5);
            if (ret === false) {
              break;
            }
          }
        }
      }, "forEachEvent");
      makeEventObj = /* @__PURE__ */ __name(function makeEventObj2(self2, obj) {
        self2.addEventFields(self2.context, obj);
        return new Event(obj.type, obj);
      }, "makeEventObj");
      forEachEventObj = /* @__PURE__ */ __name(function forEachEventObj2(self2, handler, events) {
        if (event(events)) {
          handler(self2, events);
          return;
        } else if (plainObject(events)) {
          handler(self2, makeEventObj(self2, events));
          return;
        }
        var eventList = array2(events) ? events : events.split(/\s+/);
        for (var i2 = 0; i2 < eventList.length; i2++) {
          var evt = eventList[i2];
          if (emptyString(evt)) {
            continue;
          }
          var match3 = evt.match(eventRegex);
          if (match3) {
            var type3 = match3[1];
            var namespace = match3[2] ? match3[2] : null;
            var eventObj = makeEventObj(self2, {
              type: type3,
              namespace,
              target: self2.context
            });
            handler(self2, eventObj);
          }
        }
      }, "forEachEventObj");
      p2.on = p2.addListener = function(events, qualifier, callback, conf5, confOverrides) {
        forEachEvent(this, function(self2, event3, type3, namespace, qualifier2, callback2, conf6) {
          if (fn$6(callback2)) {
            self2.listeners.push({
              event: event3,
              // full event string
              callback: callback2,
              // callback to run
              type: type3,
              // the event type (e.g. 'click')
              namespace,
              // the event namespace (e.g. ".foo")
              qualifier: qualifier2,
              // a restriction on whether to match this emitter
              conf: conf6
              // additional configuration
            });
          }
        }, events, qualifier, callback, conf5, confOverrides);
        return this;
      };
      p2.one = function(events, qualifier, callback, conf5) {
        return this.on(events, qualifier, callback, conf5, {
          one: true
        });
      };
      p2.removeListener = p2.off = function(events, qualifier, callback, conf5) {
        var _this = this;
        if (this.emitting !== 0) {
          this.listeners = copyArray2(this.listeners);
        }
        var listeners = this.listeners;
        var _loop = /* @__PURE__ */ __name(function _loop2(i3) {
          var listener = listeners[i3];
          forEachEvent(_this, function(self2, event3, type3, namespace, qualifier2, callback2) {
            if ((listener.type === type3 || events === "*") && (!namespace && listener.namespace !== ".*" || listener.namespace === namespace) && (!qualifier2 || self2.qualifierCompare(listener.qualifier, qualifier2)) && (!callback2 || listener.callback === callback2)) {
              listeners.splice(i3, 1);
              return false;
            }
          }, events, qualifier, callback, conf5);
        }, "_loop");
        for (var i2 = listeners.length - 1; i2 >= 0; i2--) {
          _loop(i2);
        }
        return this;
      };
      p2.removeAllListeners = function() {
        return this.removeListener("*");
      };
      p2.emit = p2.trigger = function(events, extraParams, manualCallback) {
        var listeners = this.listeners;
        var numListenersBeforeEmit = listeners.length;
        this.emitting++;
        if (!array2(extraParams)) {
          extraParams = [extraParams];
        }
        forEachEventObj(this, function(self2, eventObj) {
          if (manualCallback != null) {
            listeners = [{
              event: eventObj.event,
              type: eventObj.type,
              namespace: eventObj.namespace,
              callback: manualCallback
            }];
            numListenersBeforeEmit = listeners.length;
          }
          var _loop2 = /* @__PURE__ */ __name(function _loop22() {
            var listener = listeners[i2];
            if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self2.eventMatches(self2.context, listener, eventObj)) {
              var args = [eventObj];
              if (extraParams != null) {
                push(args, extraParams);
              }
              self2.beforeEmit(self2.context, listener, eventObj);
              if (listener.conf && listener.conf.one) {
                self2.listeners = self2.listeners.filter(function(l4) {
                  return l4 !== listener;
                });
              }
              var context = self2.callbackContext(self2.context, listener, eventObj);
              var ret = listener.callback.apply(context, args);
              self2.afterEmit(self2.context, listener, eventObj);
              if (ret === false) {
                eventObj.stopPropagation();
                eventObj.preventDefault();
              }
            }
          }, "_loop2");
          for (var i2 = 0; i2 < numListenersBeforeEmit; i2++) {
            _loop2();
          }
          if (self2.bubble(self2.context) && !eventObj.isPropagationStopped()) {
            self2.parent(self2.context).emit(eventObj, extraParams);
          }
        }, events);
        this.emitting--;
        return this;
      };
      emitterOptions$1 = {
        qualifierCompare: /* @__PURE__ */ __name(function qualifierCompare2(selector1, selector2) {
          if (selector1 == null || selector2 == null) {
            return selector1 == null && selector2 == null;
          } else {
            return selector1.sameText(selector2);
          }
        }, "qualifierCompare"),
        eventMatches: /* @__PURE__ */ __name(function eventMatches2(ele, listener, eventObj) {
          var selector = listener.qualifier;
          if (selector != null) {
            return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);
          }
          return true;
        }, "eventMatches"),
        addEventFields: /* @__PURE__ */ __name(function addEventFields2(ele, evt) {
          evt.cy = ele.cy();
          evt.target = ele;
        }, "addEventFields"),
        callbackContext: /* @__PURE__ */ __name(function callbackContext2(ele, listener, eventObj) {
          return listener.qualifier != null ? eventObj.target : ele;
        }, "callbackContext"),
        beforeEmit: /* @__PURE__ */ __name(function beforeEmit2(context, listener) {
          if (listener.conf && listener.conf.once) {
            listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback);
          }
        }, "beforeEmit"),
        bubble: /* @__PURE__ */ __name(function bubble2() {
          return true;
        }, "bubble"),
        parent: /* @__PURE__ */ __name(function parent3(ele) {
          return ele.isChild() ? ele.parent() : ele.cy();
        }, "parent")
      };
      argSelector$1 = /* @__PURE__ */ __name(function argSelector(arg) {
        if (string(arg)) {
          return new Selector(arg);
        } else {
          return arg;
        }
      }, "argSelector");
      elesfn$9 = {
        createEmitter: /* @__PURE__ */ __name(function createEmitter() {
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            var _p = ele._private;
            if (!_p.emitter) {
              _p.emitter = new Emitter(emitterOptions$1, ele);
            }
          }
          return this;
        }, "createEmitter"),
        emitter: /* @__PURE__ */ __name(function emitter() {
          return this._private.emitter;
        }, "emitter"),
        on: /* @__PURE__ */ __name(function on(events, selector, callback) {
          var argSel = argSelector$1(selector);
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            ele.emitter().on(events, argSel, callback);
          }
          return this;
        }, "on"),
        removeListener: /* @__PURE__ */ __name(function removeListener(events, selector, callback) {
          var argSel = argSelector$1(selector);
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            ele.emitter().removeListener(events, argSel, callback);
          }
          return this;
        }, "removeListener"),
        removeAllListeners: /* @__PURE__ */ __name(function removeAllListeners() {
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            ele.emitter().removeAllListeners();
          }
          return this;
        }, "removeAllListeners"),
        one: /* @__PURE__ */ __name(function one2(events, selector, callback) {
          var argSel = argSelector$1(selector);
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            ele.emitter().one(events, argSel, callback);
          }
          return this;
        }, "one"),
        once: /* @__PURE__ */ __name(function once(events, selector, callback) {
          var argSel = argSelector$1(selector);
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            ele.emitter().on(events, argSel, callback, {
              once: true,
              onceCollection: this
            });
          }
        }, "once"),
        emit: /* @__PURE__ */ __name(function emit(events, extraParams) {
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            ele.emitter().emit(events, extraParams);
          }
          return this;
        }, "emit"),
        emitAndNotify: /* @__PURE__ */ __name(function emitAndNotify(event3, extraParams) {
          if (this.length === 0) {
            return;
          }
          this.cy().notify(event3, this);
          this.emit(event3, extraParams);
          return this;
        }, "emitAndNotify")
      };
      define2.eventAliasesOn(elesfn$9);
      elesfn$8 = {
        nodes: /* @__PURE__ */ __name(function nodes(selector) {
          return this.filter(function(ele) {
            return ele.isNode();
          }).filter(selector);
        }, "nodes"),
        edges: /* @__PURE__ */ __name(function edges(selector) {
          return this.filter(function(ele) {
            return ele.isEdge();
          }).filter(selector);
        }, "edges"),
        // internal helper to get nodes and edges as separate collections with single iteration over elements
        byGroup: /* @__PURE__ */ __name(function byGroup() {
          var nodes5 = this.spawn();
          var edges3 = this.spawn();
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            if (ele.isNode()) {
              nodes5.push(ele);
            } else {
              edges3.push(ele);
            }
          }
          return {
            nodes: nodes5,
            edges: edges3
          };
        }, "byGroup"),
        filter: /* @__PURE__ */ __name(function filter5(_filter, thisArg) {
          if (_filter === void 0) {
            return this;
          } else if (string(_filter) || elementOrCollection(_filter)) {
            return new Selector(_filter).filter(this);
          } else if (fn$6(_filter)) {
            var filterEles = this.spawn();
            var eles = this;
            for (var i2 = 0; i2 < eles.length; i2++) {
              var ele = eles[i2];
              var include = thisArg ? _filter.apply(thisArg, [ele, i2, eles]) : _filter(ele, i2, eles);
              if (include) {
                filterEles.push(ele);
              }
            }
            return filterEles;
          }
          return this.spawn();
        }, "filter"),
        not: /* @__PURE__ */ __name(function not(toRemove) {
          if (!toRemove) {
            return this;
          } else {
            if (string(toRemove)) {
              toRemove = this.filter(toRemove);
            }
            var elements2 = this.spawn();
            for (var i2 = 0; i2 < this.length; i2++) {
              var element3 = this[i2];
              var remove3 = toRemove.has(element3);
              if (!remove3) {
                elements2.push(element3);
              }
            }
            return elements2;
          }
        }, "not"),
        absoluteComplement: /* @__PURE__ */ __name(function absoluteComplement() {
          var cy = this.cy();
          return cy.mutableElements().not(this);
        }, "absoluteComplement"),
        intersect: /* @__PURE__ */ __name(function intersect2(other) {
          if (string(other)) {
            var selector = other;
            return this.filter(selector);
          }
          var elements2 = this.spawn();
          var col1 = this;
          var col2 = other;
          var col1Smaller = this.length < other.length;
          var colS = col1Smaller ? col1 : col2;
          var colL = col1Smaller ? col2 : col1;
          for (var i2 = 0; i2 < colS.length; i2++) {
            var ele = colS[i2];
            if (colL.has(ele)) {
              elements2.push(ele);
            }
          }
          return elements2;
        }, "intersect"),
        xor: /* @__PURE__ */ __name(function xor(other) {
          var cy = this._private.cy;
          if (string(other)) {
            other = cy.$(other);
          }
          var elements2 = this.spawn();
          var col1 = this;
          var col2 = other;
          var add3 = /* @__PURE__ */ __name(function add4(col, other2) {
            for (var i2 = 0; i2 < col.length; i2++) {
              var ele = col[i2];
              var id41 = ele._private.data.id;
              var inOther = other2.hasElementWithId(id41);
              if (!inOther) {
                elements2.push(ele);
              }
            }
          }, "add");
          add3(col1, col2);
          add3(col2, col1);
          return elements2;
        }, "xor"),
        diff: /* @__PURE__ */ __name(function diff(other) {
          var cy = this._private.cy;
          if (string(other)) {
            other = cy.$(other);
          }
          var left3 = this.spawn();
          var right3 = this.spawn();
          var both = this.spawn();
          var col1 = this;
          var col2 = other;
          var add3 = /* @__PURE__ */ __name(function add4(col, other2, retEles) {
            for (var i2 = 0; i2 < col.length; i2++) {
              var ele = col[i2];
              var id41 = ele._private.data.id;
              var inOther = other2.hasElementWithId(id41);
              if (inOther) {
                both.merge(ele);
              } else {
                retEles.push(ele);
              }
            }
          }, "add");
          add3(col1, col2, left3);
          add3(col2, col1, right3);
          return {
            left: left3,
            right: right3,
            both
          };
        }, "diff"),
        add: /* @__PURE__ */ __name(function add(toAdd) {
          var cy = this._private.cy;
          if (!toAdd) {
            return this;
          }
          if (string(toAdd)) {
            var selector = toAdd;
            toAdd = cy.mutableElements().filter(selector);
          }
          var elements2 = this.spawnSelf();
          for (var i2 = 0; i2 < toAdd.length; i2++) {
            var ele = toAdd[i2];
            var add3 = !this.has(ele);
            if (add3) {
              elements2.push(ele);
            }
          }
          return elements2;
        }, "add"),
        // in place merge on calling collection
        merge: /* @__PURE__ */ __name(function merge4(toAdd) {
          var _p = this._private;
          var cy = _p.cy;
          if (!toAdd) {
            return this;
          }
          if (toAdd && string(toAdd)) {
            var selector = toAdd;
            toAdd = cy.mutableElements().filter(selector);
          }
          var map6 = _p.map;
          for (var i2 = 0; i2 < toAdd.length; i2++) {
            var toAddEle = toAdd[i2];
            var id41 = toAddEle._private.data.id;
            var add3 = !map6.has(id41);
            if (add3) {
              var index = this.length++;
              this[index] = toAddEle;
              map6.set(id41, {
                ele: toAddEle,
                index
              });
            }
          }
          return this;
        }, "merge"),
        unmergeAt: /* @__PURE__ */ __name(function unmergeAt(i2) {
          var ele = this[i2];
          var id41 = ele.id();
          var _p = this._private;
          var map6 = _p.map;
          this[i2] = void 0;
          map6["delete"](id41);
          var unmergedLastEle = i2 === this.length - 1;
          if (this.length > 1 && !unmergedLastEle) {
            var lastEleI = this.length - 1;
            var lastEle = this[lastEleI];
            var lastEleId = lastEle._private.data.id;
            this[lastEleI] = void 0;
            this[i2] = lastEle;
            map6.set(lastEleId, {
              ele: lastEle,
              index: i2
            });
          }
          this.length--;
          return this;
        }, "unmergeAt"),
        // remove single ele in place in calling collection
        unmergeOne: /* @__PURE__ */ __name(function unmergeOne(ele) {
          ele = ele[0];
          var _p = this._private;
          var id41 = ele._private.data.id;
          var map6 = _p.map;
          var entry = map6.get(id41);
          if (!entry) {
            return this;
          }
          var i2 = entry.index;
          this.unmergeAt(i2);
          return this;
        }, "unmergeOne"),
        // remove eles in place on calling collection
        unmerge: /* @__PURE__ */ __name(function unmerge(toRemove) {
          var cy = this._private.cy;
          if (!toRemove) {
            return this;
          }
          if (toRemove && string(toRemove)) {
            var selector = toRemove;
            toRemove = cy.mutableElements().filter(selector);
          }
          for (var i2 = 0; i2 < toRemove.length; i2++) {
            this.unmergeOne(toRemove[i2]);
          }
          return this;
        }, "unmerge"),
        unmergeBy: /* @__PURE__ */ __name(function unmergeBy(toRmFn) {
          for (var i2 = this.length - 1; i2 >= 0; i2--) {
            var ele = this[i2];
            if (toRmFn(ele)) {
              this.unmergeAt(i2);
            }
          }
          return this;
        }, "unmergeBy"),
        map: /* @__PURE__ */ __name(function map4(mapFn, thisArg) {
          var arr = [];
          var eles = this;
          for (var i2 = 0; i2 < eles.length; i2++) {
            var ele = eles[i2];
            var ret = thisArg ? mapFn.apply(thisArg, [ele, i2, eles]) : mapFn(ele, i2, eles);
            arr.push(ret);
          }
          return arr;
        }, "map"),
        reduce: /* @__PURE__ */ __name(function reduce2(fn3, initialValue) {
          var val = initialValue;
          var eles = this;
          for (var i2 = 0; i2 < eles.length; i2++) {
            val = fn3(val, eles[i2], i2, eles);
          }
          return val;
        }, "reduce"),
        max: /* @__PURE__ */ __name(function max8(valFn, thisArg) {
          var max10 = -Infinity;
          var maxEle;
          var eles = this;
          for (var i2 = 0; i2 < eles.length; i2++) {
            var ele = eles[i2];
            var val = thisArg ? valFn.apply(thisArg, [ele, i2, eles]) : valFn(ele, i2, eles);
            if (val > max10) {
              max10 = val;
              maxEle = ele;
            }
          }
          return {
            value: max10,
            ele: maxEle
          };
        }, "max"),
        min: /* @__PURE__ */ __name(function min7(valFn, thisArg) {
          var min10 = Infinity;
          var minEle;
          var eles = this;
          for (var i2 = 0; i2 < eles.length; i2++) {
            var ele = eles[i2];
            var val = thisArg ? valFn.apply(thisArg, [ele, i2, eles]) : valFn(ele, i2, eles);
            if (val < min10) {
              min10 = val;
              minEle = ele;
            }
          }
          return {
            value: min10,
            ele: minEle
          };
        }, "min")
      };
      fn$1 = elesfn$8;
      fn$1["u"] = fn$1["|"] = fn$1["+"] = fn$1.union = fn$1.or = fn$1.add;
      fn$1["\\"] = fn$1["!"] = fn$1["-"] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not;
      fn$1["n"] = fn$1["&"] = fn$1["."] = fn$1.and = fn$1.intersection = fn$1.intersect;
      fn$1["^"] = fn$1["(+)"] = fn$1["(-)"] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor;
      fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter;
      fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement;
      elesfn$7 = {
        isNode: /* @__PURE__ */ __name(function isNode() {
          return this.group() === "nodes";
        }, "isNode"),
        isEdge: /* @__PURE__ */ __name(function isEdge() {
          return this.group() === "edges";
        }, "isEdge"),
        isLoop: /* @__PURE__ */ __name(function isLoop() {
          return this.isEdge() && this.source()[0] === this.target()[0];
        }, "isLoop"),
        isSimple: /* @__PURE__ */ __name(function isSimple() {
          return this.isEdge() && this.source()[0] !== this.target()[0];
        }, "isSimple"),
        group: /* @__PURE__ */ __name(function group() {
          var ele = this[0];
          if (ele) {
            return ele._private.group;
          }
        }, "group")
      };
      zIndexSort = /* @__PURE__ */ __name(function zIndexSort2(a2, b3) {
        var cy = a2.cy();
        var hasCompoundNodes2 = cy.hasCompoundNodes();
        function getDepth(ele) {
          var style3 = ele.pstyle("z-compound-depth");
          if (style3.value === "auto") {
            return hasCompoundNodes2 ? ele.zDepth() : 0;
          } else if (style3.value === "bottom") {
            return -1;
          } else if (style3.value === "top") {
            return MAX_INT$1;
          }
          return 0;
        }
        __name(getDepth, "getDepth");
        var depthDiff = getDepth(a2) - getDepth(b3);
        if (depthDiff !== 0) {
          return depthDiff;
        }
        function getEleDepth(ele) {
          var style3 = ele.pstyle("z-index-compare");
          if (style3.value === "auto") {
            return ele.isNode() ? 1 : 0;
          }
          return 0;
        }
        __name(getEleDepth, "getEleDepth");
        var eleDiff = getEleDepth(a2) - getEleDepth(b3);
        if (eleDiff !== 0) {
          return eleDiff;
        }
        var zDiff = a2.pstyle("z-index").value - b3.pstyle("z-index").value;
        if (zDiff !== 0) {
          return zDiff;
        }
        return a2.poolIndex() - b3.poolIndex();
      }, "zIndexSort");
      elesfn$6 = {
        forEach: /* @__PURE__ */ __name(function forEach2(fn3, thisArg) {
          if (fn$6(fn3)) {
            var N3 = this.length;
            for (var i2 = 0; i2 < N3; i2++) {
              var ele = this[i2];
              var ret = thisArg ? fn3.apply(thisArg, [ele, i2, this]) : fn3(ele, i2, this);
              if (ret === false) {
                break;
              }
            }
          }
          return this;
        }, "forEach"),
        toArray: /* @__PURE__ */ __name(function toArray2() {
          var array4 = [];
          for (var i2 = 0; i2 < this.length; i2++) {
            array4.push(this[i2]);
          }
          return array4;
        }, "toArray"),
        slice: /* @__PURE__ */ __name(function slice2(start3, end2) {
          var array4 = [];
          var thisSize = this.length;
          if (end2 == null) {
            end2 = thisSize;
          }
          if (start3 == null) {
            start3 = 0;
          }
          if (start3 < 0) {
            start3 = thisSize + start3;
          }
          if (end2 < 0) {
            end2 = thisSize + end2;
          }
          for (var i2 = start3; i2 >= 0 && i2 < end2 && i2 < thisSize; i2++) {
            array4.push(this[i2]);
          }
          return this.spawn(array4);
        }, "slice"),
        size: /* @__PURE__ */ __name(function size2() {
          return this.length;
        }, "size"),
        eq: /* @__PURE__ */ __name(function eq2(i2) {
          return this[i2] || this.spawn();
        }, "eq"),
        first: /* @__PURE__ */ __name(function first() {
          return this[0] || this.spawn();
        }, "first"),
        last: /* @__PURE__ */ __name(function last2() {
          return this[this.length - 1] || this.spawn();
        }, "last"),
        empty: /* @__PURE__ */ __name(function empty2() {
          return this.length === 0;
        }, "empty"),
        nonempty: /* @__PURE__ */ __name(function nonempty() {
          return !this.empty();
        }, "nonempty"),
        sort: /* @__PURE__ */ __name(function sort2(sortFn) {
          if (!fn$6(sortFn)) {
            return this;
          }
          var sorted = this.toArray().sort(sortFn);
          return this.spawn(sorted);
        }, "sort"),
        sortByZIndex: /* @__PURE__ */ __name(function sortByZIndex() {
          return this.sort(zIndexSort);
        }, "sortByZIndex"),
        zDepth: /* @__PURE__ */ __name(function zDepth() {
          var ele = this[0];
          if (!ele) {
            return void 0;
          }
          var _p = ele._private;
          var group2 = _p.group;
          if (group2 === "nodes") {
            var depth = _p.data.parent ? ele.parents().size() : 0;
            if (!ele.isParent()) {
              return MAX_INT$1 - 1;
            }
            return depth;
          } else {
            var src = _p.source;
            var tgt = _p.target;
            var srcDepth = src.zDepth();
            var tgtDepth = tgt.zDepth();
            return Math.max(srcDepth, tgtDepth, 0);
          }
        }, "zDepth")
      };
      elesfn$6.each = elesfn$6.forEach;
      defineSymbolIterator = /* @__PURE__ */ __name(function defineSymbolIterator2() {
        var typeofUndef = "undefined";
        var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef;
        if (isIteratorSupported) {
          elesfn$6[Symbol.iterator] = function() {
            var _this = this;
            var entry = {
              value: void 0,
              done: false
            };
            var i2 = 0;
            var length2 = this.length;
            return _defineProperty$1({
              next: /* @__PURE__ */ __name(function next3() {
                if (i2 < length2) {
                  entry.value = _this[i2++];
                } else {
                  entry.value = void 0;
                  entry.done = true;
                }
                return entry;
              }, "next")
            }, Symbol.iterator, function() {
              return this;
            });
          };
        }
      }, "defineSymbolIterator");
      defineSymbolIterator();
      getLayoutDimensionOptions = defaults$g({
        nodeDimensionsIncludeLabels: false
      });
      elesfn$5 = {
        // Calculates and returns node dimensions { x, y } based on options given
        layoutDimensions: /* @__PURE__ */ __name(function layoutDimensions(options2) {
          options2 = getLayoutDimensionOptions(options2);
          var dims;
          if (!this.takesUpSpace()) {
            dims = {
              w: 0,
              h: 0
            };
          } else if (options2.nodeDimensionsIncludeLabels) {
            var bbDim = this.boundingBox();
            dims = {
              w: bbDim.w,
              h: bbDim.h
            };
          } else {
            dims = {
              w: this.outerWidth(),
              h: this.outerHeight()
            };
          }
          if (dims.w === 0 || dims.h === 0) {
            dims.w = dims.h = 1;
          }
          return dims;
        }, "layoutDimensions"),
        // using standard layout options, apply position function (w/ or w/o animation)
        layoutPositions: /* @__PURE__ */ __name(function layoutPositions(layout7, options2, fn3) {
          var nodes5 = this.nodes().filter(function(n2) {
            return !n2.isParent();
          });
          var cy = this.cy();
          var layoutEles = options2.eles;
          var getMemoizeKey = /* @__PURE__ */ __name(function getMemoizeKey2(node3) {
            return node3.id();
          }, "getMemoizeKey");
          var fnMem = memoize3(fn3, getMemoizeKey);
          layout7.emit({
            type: "layoutstart",
            layout: layout7
          });
          layout7.animations = [];
          var calculateSpacing = /* @__PURE__ */ __name(function calculateSpacing2(spacing2, nodesBb, pos) {
            var center4 = {
              x: nodesBb.x1 + nodesBb.w / 2,
              y: nodesBb.y1 + nodesBb.h / 2
            };
            var spacingVector = {
              // scale from center of bounding box (not necessarily 0,0)
              x: (pos.x - center4.x) * spacing2,
              y: (pos.y - center4.y) * spacing2
            };
            return {
              x: center4.x + spacingVector.x,
              y: center4.y + spacingVector.y
            };
          }, "calculateSpacing");
          var useSpacingFactor = options2.spacingFactor && options2.spacingFactor !== 1;
          var spacingBb = /* @__PURE__ */ __name(function spacingBb2() {
            if (!useSpacingFactor) {
              return null;
            }
            var bb2 = makeBoundingBox();
            for (var i3 = 0; i3 < nodes5.length; i3++) {
              var node3 = nodes5[i3];
              var pos = fnMem(node3, i3);
              expandBoundingBoxByPoint(bb2, pos.x, pos.y);
            }
            return bb2;
          }, "spacingBb");
          var bb = spacingBb();
          var getFinalPos = memoize3(function(node3, i3) {
            var newPos2 = fnMem(node3, i3);
            if (useSpacingFactor) {
              var spacing2 = Math.abs(options2.spacingFactor);
              newPos2 = calculateSpacing(spacing2, bb, newPos2);
            }
            if (options2.transform != null) {
              newPos2 = options2.transform(node3, newPos2);
            }
            return newPos2;
          }, getMemoizeKey);
          if (options2.animate) {
            for (var i2 = 0; i2 < nodes5.length; i2++) {
              var node2 = nodes5[i2];
              var newPos = getFinalPos(node2, i2);
              var animateNode = options2.animateFilter == null || options2.animateFilter(node2, i2);
              if (animateNode) {
                var ani = node2.animation({
                  position: newPos,
                  duration: options2.animationDuration,
                  easing: options2.animationEasing
                });
                layout7.animations.push(ani);
              } else {
                node2.position(newPos);
              }
            }
            if (options2.fit) {
              var fitAni = cy.animation({
                fit: {
                  boundingBox: layoutEles.boundingBoxAt(getFinalPos),
                  padding: options2.padding
                },
                duration: options2.animationDuration,
                easing: options2.animationEasing
              });
              layout7.animations.push(fitAni);
            } else if (options2.zoom !== void 0 && options2.pan !== void 0) {
              var zoomPanAni = cy.animation({
                zoom: options2.zoom,
                pan: options2.pan,
                duration: options2.animationDuration,
                easing: options2.animationEasing
              });
              layout7.animations.push(zoomPanAni);
            }
            layout7.animations.forEach(function(ani2) {
              return ani2.play();
            });
            layout7.one("layoutready", options2.ready);
            layout7.emit({
              type: "layoutready",
              layout: layout7
            });
            Promise$1.all(layout7.animations.map(function(ani2) {
              return ani2.promise();
            })).then(function() {
              layout7.one("layoutstop", options2.stop);
              layout7.emit({
                type: "layoutstop",
                layout: layout7
              });
            });
          } else {
            nodes5.positions(getFinalPos);
            if (options2.fit) {
              cy.fit(options2.eles, options2.padding);
            }
            if (options2.zoom != null) {
              cy.zoom(options2.zoom);
            }
            if (options2.pan) {
              cy.pan(options2.pan);
            }
            layout7.one("layoutready", options2.ready);
            layout7.emit({
              type: "layoutready",
              layout: layout7
            });
            layout7.one("layoutstop", options2.stop);
            layout7.emit({
              type: "layoutstop",
              layout: layout7
            });
          }
          return this;
        }, "layoutPositions"),
        layout: /* @__PURE__ */ __name(function layout2(options2) {
          var cy = this.cy();
          return cy.makeLayout(extend4({}, options2, {
            eles: this
          }));
        }, "layout")
      };
      elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout;
      __name(styleCache, "styleCache");
      __name(cacheStyleFunction, "cacheStyleFunction");
      __name(cachePrototypeStyleFunction, "cachePrototypeStyleFunction");
      elesfn$4 = {
        recalculateRenderedStyle: /* @__PURE__ */ __name(function recalculateRenderedStyle(useCache) {
          var cy = this.cy();
          var renderer15 = cy.renderer();
          var styleEnabled2 = cy.styleEnabled();
          if (renderer15 && styleEnabled2) {
            renderer15.recalculateRenderedStyle(this, useCache);
          }
          return this;
        }, "recalculateRenderedStyle"),
        dirtyStyleCache: /* @__PURE__ */ __name(function dirtyStyleCache() {
          var cy = this.cy();
          var dirty = /* @__PURE__ */ __name(function dirty2(ele) {
            return ele._private.styleCache = null;
          }, "dirty");
          if (cy.hasCompoundNodes()) {
            var eles;
            eles = this.spawnSelf().merge(this.descendants()).merge(this.parents());
            eles.merge(eles.connectedEdges());
            eles.forEach(dirty);
          } else {
            this.forEach(function(ele) {
              dirty(ele);
              ele.connectedEdges().forEach(dirty);
            });
          }
          return this;
        }, "dirtyStyleCache"),
        // fully updates (recalculates) the style for the elements
        updateStyle: /* @__PURE__ */ __name(function updateStyle(notifyRenderer) {
          var cy = this._private.cy;
          if (!cy.styleEnabled()) {
            return this;
          }
          if (cy.batching()) {
            var bEles = cy._private.batchStyleEles;
            bEles.merge(this);
            return this;
          }
          var hasCompounds = cy.hasCompoundNodes();
          var updatedEles = this;
          notifyRenderer = notifyRenderer || notifyRenderer === void 0 ? true : false;
          if (hasCompounds) {
            updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents());
          }
          var changedEles = updatedEles;
          if (notifyRenderer) {
            changedEles.emitAndNotify("style");
          } else {
            changedEles.emit("style");
          }
          updatedEles.forEach(function(ele) {
            return ele._private.styleDirty = true;
          });
          return this;
        }, "updateStyle"),
        // private: clears dirty flag and recalculates style
        cleanStyle: /* @__PURE__ */ __name(function cleanStyle() {
          var cy = this.cy();
          if (!cy.styleEnabled()) {
            return;
          }
          for (var i2 = 0; i2 < this.length; i2++) {
            var ele = this[i2];
            if (ele._private.styleDirty) {
              ele._private.styleDirty = false;
              cy.style().apply(ele);
            }
          }
        }, "cleanStyle"),
        // get the internal parsed style object for the specified property
        parsedStyle: /* @__PURE__ */ __name(function parsedStyle(property3) {
          var includeNonDefault = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
          var ele = this[0];
          var cy = ele.cy();
          if (!cy.styleEnabled()) {
            return;
          }
          if (ele) {
            if (ele._private.styleDirty) {
              ele._private.styleDirty = false;
              cy.style().apply(ele);
            }
            var overriddenStyle = ele._private.style[property3];
            if (overriddenStyle != null) {
              return overriddenStyle;
            } else if (includeNonDefault) {
              return cy.style().getDefaultProperty(property3);
            } else {
              return null;
            }
          }
        }, "parsedStyle"),
        numericStyle: /* @__PURE__ */ __name(function numericStyle(property3) {
          var ele = this[0];
          if (!ele.cy().styleEnabled()) {
            return;
          }
          if (ele) {
            var pstyle = ele.pstyle(property3);
            return pstyle.pfValue !== void 0 ? pstyle.pfValue : pstyle.value;
          }
        }, "numericStyle"),
        numericStyleUnits: /* @__PURE__ */ __name(function numericStyleUnits(property3) {
          var ele = this[0];
          if (!ele.cy().styleEnabled()) {
            return;
          }
          if (ele) {
            return ele.pstyle(property3).units;
          }
        }, "numericStyleUnits"),
        // get the specified css property as a rendered value (i.e. on-screen value)
        // or get the whole rendered style if no property specified (NB doesn't allow setting)
        renderedStyle: /* @__PURE__ */ __name(function renderedStyle(property3) {
          var cy = this.cy();
          if (!cy.styleEnabled()) {
            return this;
          }
          var ele = this[0];
          if (ele) {
            return cy.style().getRenderedStyle(ele, property3);
          }
        }, "renderedStyle"),
        // read the calculated css style of the element or override the style (via a bypass)
        style: /* @__PURE__ */ __name(function style(name, value2) {
          var cy = this.cy();
          if (!cy.styleEnabled()) {
            return this;
          }
          var updateTransitions = false;
          var style3 = cy.style();
          if (plainObject(name)) {
            var props = name;
            style3.applyBypass(this, props, updateTransitions);
            this.emitAndNotify("style");
          } else if (string(name)) {
            if (value2 === void 0) {
              var ele = this[0];
              if (ele) {
                return style3.getStylePropertyValue(ele, name);
              } else {
                return;
              }
            } else {
              style3.applyBypass(this, name, value2, updateTransitions);
              this.emitAndNotify("style");
            }
          } else if (name === void 0) {
            var _ele = this[0];
            if (_ele) {
              return style3.getRawStyle(_ele);
            } else {
              return;
            }
          }
          return this;
        }, "style"),
        removeStyle: /* @__PURE__ */ __name(function removeStyle(names) {
          var cy = this.cy();
          if (!cy.styleEnabled()) {
            return this;
          }
          var updateTransitions = false;
          var style3 = cy.style();
          var eles = this;
          if (names === void 0) {
            for (var i2 = 0; i2 < eles.length; i2++) {
              var ele = eles[i2];
              style3.removeAllBypasses(ele, updateTransitions);
            }
          } else {
            names = names.split(/\s+/);
            for (var _i = 0; _i < eles.length; _i++) {
              var _ele2 = eles[_i];
              style3.removeBypasses(_ele2, names, updateTransitions);
            }
          }
          this.emitAndNotify("style");
          return this;
        }, "removeStyle"),
        show: /* @__PURE__ */ __name(function show() {
          this.css("display", "element");
          return this;
        }, "show"),
        hide: /* @__PURE__ */ __name(function hide() {
          this.css("display", "none");
          return this;
        }, "hide"),
        effectiveOpacity: /* @__PURE__ */ __name(function effectiveOpacity() {
          var cy = this.cy();
          if (!cy.styleEnabled()) {
            return 1;
          }
          var hasCompoundNodes2 = cy.hasCompoundNodes();
          var ele = this[0];
          if (ele) {
            var _p = ele._private;
            var parentOpacity = ele.pstyle("opacity").value;
            if (!hasCompoundNodes2) {
              return parentOpacity;
            }
            var parents3 = !_p.data.parent ? null : ele.parents();
            if (parents3) {
              for (var i2 = 0; i2 < parents3.length; i2++) {
                var parent4 = parents3[i2];
                var opacity = parent4.pstyle("opacity").value;
                parentOpacity = opacity * parentOpacity;
              }
            }
            return parentOpacity;
          }
        }, "effectiveOpacity"),
        transparent: /* @__PURE__ */ __name(function transparent() {
          var cy = this.cy();
          if (!cy.styleEnabled()) {
            return false;
          }
          var ele = this[0];
          var hasCompoundNodes2 = ele.cy().hasCompoundNodes();
          if (ele) {
            if (!hasCompoundNodes2) {
              return ele.pstyle("opacity").value === 0;
            } else {
              return ele.effectiveOpacity() === 0;
            }
          }
        }, "transparent"),
        backgrounding: /* @__PURE__ */ __name(function backgrounding() {
          var cy = this.cy();
          if (!cy.styleEnabled()) {
            return false;
          }
          var ele = this[0];
          return ele._private.backgrounding ? true : false;
        }, "backgrounding")
      };
      __name(checkCompound, "checkCompound");
      __name(defineDerivedStateFunction, "defineDerivedStateFunction");
      eleTakesUpSpace = cacheStyleFunction("eleTakesUpSpace", function(ele) {
        return ele.pstyle("display").value === "element" && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true);
      });
      elesfn$4.takesUpSpace = cachePrototypeStyleFunction("takesUpSpace", defineDerivedStateFunction({
        ok: eleTakesUpSpace
      }));
      eleInteractive = cacheStyleFunction("eleInteractive", function(ele) {
        return ele.pstyle("events").value === "yes" && ele.pstyle("visibility").value === "visible" && eleTakesUpSpace(ele);
      });
      parentInteractive = cacheStyleFunction("parentInteractive", function(parent4) {
        return parent4.pstyle("visibility").value === "visible" && eleTakesUpSpace(parent4);
      });
      elesfn$4.interactive = cachePrototypeStyleFunction("interactive", defineDerivedStateFunction({
        ok: eleInteractive,
        parentOk: parentInteractive,
        edgeOkViaNode: eleTakesUpSpace
      }));
      elesfn$4.noninteractive = function() {
        var ele = this[0];
        if (ele) {
          return !ele.interactive();
        }
      };
      eleVisible = cacheStyleFunction("eleVisible", function(ele) {
        return ele.pstyle("visibility").value === "visible" && ele.pstyle("opacity").pfValue !== 0 && eleTakesUpSpace(ele);
      });
      edgeVisibleViaNode = eleTakesUpSpace;
      elesfn$4.visible = cachePrototypeStyleFunction("visible", defineDerivedStateFunction({
        ok: eleVisible,
        edgeOkViaNode: edgeVisibleViaNode
      }));
      elesfn$4.hidden = function() {
        var ele = this[0];
        if (ele) {
          return !ele.visible();
        }
      };
      elesfn$4.isBundledBezier = cachePrototypeStyleFunction("isBundledBezier", function() {
        if (!this.cy().styleEnabled()) {
          return false;
        }
        return !this.removed() && this.pstyle("curve-style").value === "bezier" && this.takesUpSpace();
      });
      elesfn$4.bypass = elesfn$4.css = elesfn$4.style;
      elesfn$4.renderedCss = elesfn$4.renderedStyle;
      elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle;
      elesfn$4.pstyle = elesfn$4.parsedStyle;
      elesfn$3 = {};
      __name(defineSwitchFunction, "defineSwitchFunction");
      __name(defineSwitchSet, "defineSwitchSet");
      defineSwitchSet({
        field: "locked",
        overrideField: /* @__PURE__ */ __name(function overrideField(ele) {
          return ele.cy().autolock() ? true : void 0;
        }, "overrideField"),
        on: "lock",
        off: "unlock"
      });
      defineSwitchSet({
        field: "grabbable",
        overrideField: /* @__PURE__ */ __name(function overrideField2(ele) {
          return ele.cy().autoungrabify() || ele.pannable() ? false : void 0;
        }, "overrideField"),
        on: "grabify",
        off: "ungrabify"
      });
      defineSwitchSet({
        field: "selected",
        ableField: "selectable",
        overrideAble: /* @__PURE__ */ __name(function overrideAble(ele) {
          return ele.cy().autounselectify() ? false : void 0;
        }, "overrideAble"),
        on: "select",
        off: "unselect"
      });
      defineSwitchSet({
        field: "selectable",
        overrideField: /* @__PURE__ */ __name(function overrideField3(ele) {
          return ele.cy().autounselectify() ? false : void 0;
        }, "overrideField"),
        on: "selectify",
        off: "unselectify"
      });
      elesfn$3.deselect = elesfn$3.unselect;
      elesfn$3.grabbed = function() {
        var ele = this[0];
        if (ele) {
          return ele._private.grabbed;
        }
      };
      defineSwitchSet({
        field: "active",
        on: "activate",
        off: "unactivate"
      });
      defineSwitchSet({
        field: "pannable",
        on: "panify",
        off: "unpanify"
      });
      elesfn$3.inactive = function() {
        var ele = this[0];
        if (ele) {
          return !ele._private.active;
        }
      };
      elesfn$2 = {};
      defineDagExtremity = /* @__PURE__ */ __name(function defineDagExtremity2(params) {
        return /* @__PURE__ */ __name(function dagExtremityImpl(selector) {
          var eles = this;
          var ret = [];
          for (var i2 = 0; i2 < eles.length; i2++) {
            var ele = eles[i2];
            if (!ele.isNode()) {
              continue;
            }
            var disqualified = false;
            var edges3 = ele.connectedEdges();
            for (var j3 = 0; j3 < edges3.length; j3++) {
              var edge = edges3[j3];
              var src = edge.source();
              var tgt = edge.target();
              if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) {
                disqualified = true;
                break;
              }
            }
            if (!disqualified) {
              ret.push(ele);
            }
          }
          return this.spawn(ret, true).filter(selector);
        }, "dagExtremityImpl");
      }, "defineDagExtremity");
      defineDagOneHop = /* @__PURE__ */ __name(function defineDagOneHop2(params) {
        return function(selector) {
          var eles = this;
          var oEles = [];
          for (var i2 = 0; i2 < eles.length; i2++) {
            var ele = eles[i2];
            if (!ele.isNode()) {
              continue;
            }
            var edges3 = ele.connectedEdges();
            for (var j3 = 0; j3 < edges3.length; j3++) {
              var edge = edges3[j3];
              var src = edge.source();
              var tgt = edge.target();
              if (params.outgoing && src === ele) {
                oEles.push(edge);
                oEles.push(tgt);
              } else if (params.incoming && tgt === ele) {
                oEles.push(edge);
                oEles.push(src);
              }
            }
          }
          return this.spawn(oEles, true).filter(selector);
        };
      }, "defineDagOneHop");
      defineDagAllHops = /* @__PURE__ */ __name(function defineDagAllHops2(params) {
        return function(selector) {
          var eles = this;
          var sEles = [];
          var sElesIds = {};
          for (; ; ) {
            var next3 = params.outgoing ? eles.outgoers() : eles.incomers();
            if (next3.length === 0) {
              break;
            }
            var newNext = false;
            for (var i2 = 0; i2 < next3.length; i2++) {
              var n2 = next3[i2];
              var nid = n2.id();
              if (!sElesIds[nid]) {
                sElesIds[nid] = true;
                sEles.push(n2);
                newNext = true;
              }
            }
            if (!newNext) {
              break;
            }
            eles = next3;
          }
          return this.spawn(sEles, true).filter(selector);
        };
      }, "defineDagAllHops");
      elesfn$2.clearTraversalCache = function() {
        for (var i2 = 0; i2 < this.length; i2++) {
          this[i2]._private.traversalCache = null;
        }
      };
      extend4(elesfn$2, {
        // get the root nodes in the DAG
        roots: defineDagExtremity({
          noIncomingEdges: true
        }),
        // get the leaf nodes in the DAG
        leaves: defineDagExtremity({
          noOutgoingEdges: true
        }),
        // normally called children in graph theory
        // these nodes =edges=> outgoing nodes
        outgoers: cache(defineDagOneHop({
          outgoing: true
        }), "outgoers"),
        // aka DAG descendants
        successors: defineDagAllHops({
          outgoing: true
        }),
        // normally called parents in graph theory
        // these nodes <=edges= incoming nodes
        incomers: cache(defineDagOneHop({
          incoming: true
        }), "incomers"),
        // aka DAG ancestors
        predecessors: defineDagAllHops({})
      });
      extend4(elesfn$2, {
        neighborhood: cache(function(selector) {
          var elements2 = [];
          var nodes5 = this.nodes();
          for (var i2 = 0; i2 < nodes5.length; i2++) {
            var node2 = nodes5[i2];
            var connectedEdges = node2.connectedEdges();
            for (var j3 = 0; j3 < connectedEdges.length; j3++) {
              var edge = connectedEdges[j3];
              var src = edge.source();
              var tgt = edge.target();
              var otherNode = node2 === src ? tgt : src;
              if (otherNode.length > 0) {
                elements2.push(otherNode[0]);
              }
              elements2.push(edge[0]);
            }
          }
          return this.spawn(elements2, true).filter(selector);
        }, "neighborhood"),
        closedNeighborhood: /* @__PURE__ */ __name(function closedNeighborhood(selector) {
          return this.neighborhood().add(this).filter(selector);
        }, "closedNeighborhood"),
        openNeighborhood: /* @__PURE__ */ __name(function openNeighborhood(selector) {
          return this.neighborhood(selector);
        }, "openNeighborhood")
      });
      elesfn$2.neighbourhood = elesfn$2.neighborhood;
      elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood;
      elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood;
      extend4(elesfn$2, {
        source: cache(/* @__PURE__ */ __name(function sourceImpl(selector) {
          var ele = this[0];
          var src;
          if (ele) {
            src = ele._private.source || ele.cy().collection();
          }
          return src && selector ? src.filter(selector) : src;
        }, "sourceImpl"), "source"),
        target: cache(/* @__PURE__ */ __name(function targetImpl(selector) {
          var ele = this[0];
          var tgt;
          if (ele) {
            tgt = ele._private.target || ele.cy().collection();
          }
          return tgt && selector ? tgt.filter(selector) : tgt;
        }, "targetImpl"), "target"),
        sources: defineSourceFunction({
          attr: "source"
        }),
        targets: defineSourceFunction({
          attr: "target"
        })
      });
      __name(defineSourceFunction, "defineSourceFunction");
      extend4(elesfn$2, {
        edgesWith: cache(defineEdgesWithFunction(), "edgesWith"),
        edgesTo: cache(defineEdgesWithFunction({
          thisIsSrc: true
        }), "edgesTo")
      });
      __name(defineEdgesWithFunction, "defineEdgesWithFunction");
      extend4(elesfn$2, {
        connectedEdges: cache(function(selector) {
          var retEles = [];
          var eles = this;
          for (var i2 = 0; i2 < eles.length; i2++) {
            var node2 = eles[i2];
            if (!node2.isNode()) {
              continue;
            }
            var edges3 = node2._private.edges;
            for (var j3 = 0; j3 < edges3.length; j3++) {
              var edge = edges3[j3];
              retEles.push(edge);
            }
          }
          return this.spawn(retEles, true).filter(selector);
        }, "connectedEdges"),
        connectedNodes: cache(function(selector) {
          var retEles = [];
          var eles = this;
          for (var i2 = 0; i2 < eles.length; i2++) {
            var edge = eles[i2];
            if (!edge.isEdge()) {
              continue;
            }
            retEles.push(edge.source()[0]);
            retEles.push(edge.target()[0]);
          }
          return this.spawn(retEles, true).filter(selector);
        }, "connectedNodes"),
        parallelEdges: cache(defineParallelEdgesFunction(), "parallelEdges"),
        codirectedEdges: cache(defineParallelEdgesFunction({
          codirected: true
        }), "codirectedEdges")
      });
      __name(defineParallelEdgesFunction, "defineParallelEdgesFunction");
      extend4(elesfn$2, {
        components: /* @__PURE__ */ __name(function components2(root4) {
          var self2 = this;
          var cy = self2.cy();
          var visited = cy.collection();
          var unvisited = root4 == null ? self2.nodes() : root4.nodes();
          var components3 = [];
          if (root4 != null && unvisited.empty()) {
            unvisited = root4.sources();
          }
          var visitInComponent = /* @__PURE__ */ __name(function visitInComponent2(node2, component2) {
            visited.merge(node2);
            unvisited.unmerge(node2);
            component2.merge(node2);
          }, "visitInComponent");
          if (unvisited.empty()) {
            return self2.spawn();
          }
          var _loop = /* @__PURE__ */ __name(function _loop2() {
            var cmpt = cy.collection();
            components3.push(cmpt);
            var root5 = unvisited[0];
            visitInComponent(root5, cmpt);
            self2.bfs({
              directed: false,
              roots: root5,
              visit: /* @__PURE__ */ __name(function visit(v3) {
                return visitInComponent(v3, cmpt);
              }, "visit")
            });
            cmpt.forEach(function(node2) {
              node2.connectedEdges().forEach(function(e3) {
                if (self2.has(e3) && cmpt.has(e3.source()) && cmpt.has(e3.target())) {
                  cmpt.merge(e3);
                }
              });
            });
          }, "_loop");
          do {
            _loop();
          } while (unvisited.length > 0);
          return components3;
        }, "components"),
        component: /* @__PURE__ */ __name(function component() {
          var ele = this[0];
          return ele.cy().mutableElements().components(ele)[0];
        }, "component")
      });
      elesfn$2.componentsOf = elesfn$2.components;
      Collection = /* @__PURE__ */ __name(function Collection2(cy, elements2) {
        var unique = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
        var removed = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
        if (cy === void 0) {
          error("A collection must have a reference to the core");
          return;
        }
        var map6 = new Map$1();
        var createdElements = false;
        if (!elements2) {
          elements2 = [];
        } else if (elements2.length > 0 && plainObject(elements2[0]) && !element(elements2[0])) {
          createdElements = true;
          var eles = [];
          var elesIds = new Set$1();
          for (var i2 = 0, l4 = elements2.length; i2 < l4; i2++) {
            var json3 = elements2[i2];
            if (json3.data == null) {
              json3.data = {};
            }
            var _data = json3.data;
            if (_data.id == null) {
              _data.id = uuid();
            } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) {
              continue;
            }
            var ele = new Element(cy, json3, false);
            eles.push(ele);
            elesIds.add(_data.id);
          }
          elements2 = eles;
        }
        this.length = 0;
        for (var _i = 0, _l = elements2.length; _i < _l; _i++) {
          var element$1 = elements2[_i][0];
          if (element$1 == null) {
            continue;
          }
          var id41 = element$1._private.data.id;
          if (!unique || !map6.has(id41)) {
            if (unique) {
              map6.set(id41, {
                index: this.length,
                ele: element$1
              });
            }
            this[this.length] = element$1;
            this.length++;
          }
        }
        this._private = {
          eles: this,
          cy,
          get map() {
            if (this.lazyMap == null) {
              this.rebuildMap();
            }
            return this.lazyMap;
          },
          set map(m3) {
            this.lazyMap = m3;
          },
          rebuildMap: /* @__PURE__ */ __name(function rebuildMap() {
            var m3 = this.lazyMap = new Map$1();
            var eles2 = this.eles;
            for (var _i2 = 0; _i2 < eles2.length; _i2++) {
              var _ele = eles2[_i2];
              m3.set(_ele.id(), {
                index: _i2,
                ele: _ele
              });
            }
          }, "rebuildMap")
        };
        if (unique) {
          this._private.map = map6;
        }
        if (createdElements && !removed) {
          this.restore();
        }
      }, "Collection");
      elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype);
      elesfn$1.instanceString = function() {
        return "collection";
      };
      elesfn$1.spawn = function(eles, unique) {
        return new Collection(this.cy(), eles, unique);
      };
      elesfn$1.spawnSelf = function() {
        return this.spawn(this);
      };
      elesfn$1.cy = function() {
        return this._private.cy;
      };
      elesfn$1.renderer = function() {
        return this._private.cy.renderer();
      };
      elesfn$1.element = function() {
        return this[0];
      };
      elesfn$1.collection = function() {
        if (collection(this)) {
          return this;
        } else {
          return new Collection(this._private.cy, [this]);
        }
      };
      elesfn$1.unique = function() {
        return new Collection(this._private.cy, this, true);
      };
      elesfn$1.hasElementWithId = function(id41) {
        id41 = "" + id41;
        return this._private.map.has(id41);
      };
      elesfn$1.getElementById = function(id41) {
        id41 = "" + id41;
        var cy = this._private.cy;
        var entry = this._private.map.get(id41);
        return entry ? entry.ele : new Collection(cy);
      };
      elesfn$1.$id = elesfn$1.getElementById;
      elesfn$1.poolIndex = function() {
        var cy = this._private.cy;
        var eles = cy._private.elements;
        var id41 = this[0]._private.data.id;
        return eles._private.map.get(id41).index;
      };
      elesfn$1.indexOf = function(ele) {
        var id41 = ele[0]._private.data.id;
        return this._private.map.get(id41).index;
      };
      elesfn$1.indexOfId = function(id41) {
        id41 = "" + id41;
        return this._private.map.get(id41).index;
      };
      elesfn$1.json = function(obj) {
        var ele = this.element();
        var cy = this.cy();
        if (ele == null && obj) {
          return this;
        }
        if (ele == null) {
          return void 0;
        }
        var p3 = ele._private;
        if (plainObject(obj)) {
          cy.startBatch();
          if (obj.data) {
            ele.data(obj.data);
            var _data2 = p3.data;
            if (ele.isEdge()) {
              var move = false;
              var spec = {};
              var src = obj.data.source;
              var tgt = obj.data.target;
              if (src != null && src != _data2.source) {
                spec.source = "" + src;
                move = true;
              }
              if (tgt != null && tgt != _data2.target) {
                spec.target = "" + tgt;
                move = true;
              }
              if (move) {
                ele = ele.move(spec);
              }
            } else {
              var newParentValSpecd = "parent" in obj.data;
              var parent4 = obj.data.parent;
              if (newParentValSpecd && (parent4 != null || _data2.parent != null) && parent4 != _data2.parent) {
                if (parent4 === void 0) {
                  parent4 = null;
                }
                if (parent4 != null) {
                  parent4 = "" + parent4;
                }
                ele = ele.move({
                  parent: parent4
                });
              }
            }
          }
          if (obj.position) {
            ele.position(obj.position);
          }
          var checkSwitch = /* @__PURE__ */ __name(function checkSwitch2(k2, trueFnName, falseFnName) {
            var obj_k = obj[k2];
            if (obj_k != null && obj_k !== p3[k2]) {
              if (obj_k) {
                ele[trueFnName]();
              } else {
                ele[falseFnName]();
              }
            }
          }, "checkSwitch");
          checkSwitch("removed", "remove", "restore");
          checkSwitch("selected", "select", "unselect");
          checkSwitch("selectable", "selectify", "unselectify");
          checkSwitch("locked", "lock", "unlock");
          checkSwitch("grabbable", "grabify", "ungrabify");
          checkSwitch("pannable", "panify", "unpanify");
          if (obj.classes != null) {
            ele.classes(obj.classes);
          }
          cy.endBatch();
          return this;
        } else if (obj === void 0) {
          var json3 = {
            data: copy3(p3.data),
            position: copy3(p3.position),
            group: p3.group,
            removed: p3.removed,
            selected: p3.selected,
            selectable: p3.selectable,
            locked: p3.locked,
            grabbable: p3.grabbable,
            pannable: p3.pannable,
            classes: null
          };
          json3.classes = "";
          var i2 = 0;
          p3.classes.forEach(function(cls) {
            return json3.classes += i2++ === 0 ? cls : " " + cls;
          });
          return json3;
        }
      };
      elesfn$1.jsons = function() {
        var jsons = [];
        for (var i2 = 0; i2 < this.length; i2++) {
          var ele = this[i2];
          var json3 = ele.json();
          jsons.push(json3);
        }
        return jsons;
      };
      elesfn$1.clone = function() {
        var cy = this.cy();
        var elesArr = [];
        for (var i2 = 0; i2 < this.length; i2++) {
          var ele = this[i2];
          var json3 = ele.json();
          var clone9 = new Element(cy, json3, false);
          elesArr.push(clone9);
        }
        return new Collection(cy, elesArr);
      };
      elesfn$1.copy = elesfn$1.clone;
      elesfn$1.restore = function() {
        var notifyRenderer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
        var addToPool2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
        var self2 = this;
        var cy = self2.cy();
        var cy_p = cy._private;
        var nodes5 = [];
        var edges3 = [];
        var elements2;
        for (var _i3 = 0, l4 = self2.length; _i3 < l4; _i3++) {
          var ele = self2[_i3];
          if (addToPool2 && !ele.removed()) {
            continue;
          }
          if (ele.isNode()) {
            nodes5.push(ele);
          } else {
            edges3.push(ele);
          }
        }
        elements2 = nodes5.concat(edges3);
        var i2;
        var removeFromElements = /* @__PURE__ */ __name(function removeFromElements2() {
          elements2.splice(i2, 1);
          i2--;
        }, "removeFromElements");
        for (i2 = 0; i2 < elements2.length; i2++) {
          var _ele2 = elements2[i2];
          var _private = _ele2._private;
          var _data3 = _private.data;
          _ele2.clearTraversalCache();
          if (!addToPool2 && !_private.removed) ;
          else if (_data3.id === void 0) {
            _data3.id = uuid();
          } else if (number$1(_data3.id)) {
            _data3.id = "" + _data3.id;
          } else if (emptyString(_data3.id) || !string(_data3.id)) {
            error("Can not create element with invalid string ID `" + _data3.id + "`");
            removeFromElements();
            continue;
          } else if (cy.hasElementWithId(_data3.id)) {
            error("Can not create second element with ID `" + _data3.id + "`");
            removeFromElements();
            continue;
          }
          var id41 = _data3.id;
          if (_ele2.isNode()) {
            var pos = _private.position;
            if (pos.x == null) {
              pos.x = 0;
            }
            if (pos.y == null) {
              pos.y = 0;
            }
          }
          if (_ele2.isEdge()) {
            var edge = _ele2;
            var fields = ["source", "target"];
            var fieldsLength = fields.length;
            var badSourceOrTarget = false;
            for (var j3 = 0; j3 < fieldsLength; j3++) {
              var field = fields[j3];
              var val = _data3[field];
              if (number$1(val)) {
                val = _data3[field] = "" + _data3[field];
              }
              if (val == null || val === "") {
                error("Can not create edge `" + id41 + "` with unspecified " + field);
                badSourceOrTarget = true;
              } else if (!cy.hasElementWithId(val)) {
                error("Can not create edge `" + id41 + "` with nonexistent " + field + " `" + val + "`");
                badSourceOrTarget = true;
              }
            }
            if (badSourceOrTarget) {
              removeFromElements();
              continue;
            }
            var src = cy.getElementById(_data3.source);
            var tgt = cy.getElementById(_data3.target);
            if (src.same(tgt)) {
              src._private.edges.push(edge);
            } else {
              src._private.edges.push(edge);
              tgt._private.edges.push(edge);
            }
            edge._private.source = src;
            edge._private.target = tgt;
          }
          _private.map = new Map$1();
          _private.map.set(id41, {
            ele: _ele2,
            index: 0
          });
          _private.removed = false;
          if (addToPool2) {
            cy.addToPool(_ele2);
          }
        }
        for (var _i4 = 0; _i4 < nodes5.length; _i4++) {
          var node2 = nodes5[_i4];
          var _data4 = node2._private.data;
          if (number$1(_data4.parent)) {
            _data4.parent = "" + _data4.parent;
          }
          var parentId = _data4.parent;
          var specifiedParent = parentId != null;
          if (specifiedParent || node2._private.parent) {
            var parent4 = node2._private.parent ? cy.collection().merge(node2._private.parent) : cy.getElementById(parentId);
            if (parent4.empty()) {
              _data4.parent = void 0;
            } else if (parent4[0].removed()) {
              warn("Node added with missing parent, reference to parent removed");
              _data4.parent = void 0;
              node2._private.parent = null;
            } else {
              var selfAsParent = false;
              var ancestor = parent4;
              while (!ancestor.empty()) {
                if (node2.same(ancestor)) {
                  selfAsParent = true;
                  _data4.parent = void 0;
                  break;
                }
                ancestor = ancestor.parent();
              }
              if (!selfAsParent) {
                parent4[0]._private.children.push(node2);
                node2._private.parent = parent4[0];
                cy_p.hasCompoundNodes = true;
              }
            }
          }
        }
        if (elements2.length > 0) {
          var restored = elements2.length === self2.length ? self2 : new Collection(cy, elements2);
          for (var _i5 = 0; _i5 < restored.length; _i5++) {
            var _ele3 = restored[_i5];
            if (_ele3.isNode()) {
              continue;
            }
            _ele3.parallelEdges().clearTraversalCache();
            _ele3.source().clearTraversalCache();
            _ele3.target().clearTraversalCache();
          }
          var toUpdateStyle;
          if (cy_p.hasCompoundNodes) {
            toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent());
          } else {
            toUpdateStyle = restored;
          }
          toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer);
          if (notifyRenderer) {
            restored.emitAndNotify("add");
          } else if (addToPool2) {
            restored.emit("add");
          }
        }
        return self2;
      };
      elesfn$1.removed = function() {
        var ele = this[0];
        return ele && ele._private.removed;
      };
      elesfn$1.inside = function() {
        var ele = this[0];
        return ele && !ele._private.removed;
      };
      elesfn$1.remove = function() {
        var notifyRenderer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
        var removeFromPool2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
        var self2 = this;
        var elesToRemove = [];
        var elesToRemoveIds = {};
        var cy = self2._private.cy;
        function addConnectedEdges(node2) {
          var edges3 = node2._private.edges;
          for (var i3 = 0; i3 < edges3.length; i3++) {
            add3(edges3[i3]);
          }
        }
        __name(addConnectedEdges, "addConnectedEdges");
        function addChildren2(node2) {
          var children2 = node2._private.children;
          for (var i3 = 0; i3 < children2.length; i3++) {
            add3(children2[i3]);
          }
        }
        __name(addChildren2, "addChildren");
        function add3(ele2) {
          var alreadyAdded = elesToRemoveIds[ele2.id()];
          if (removeFromPool2 && ele2.removed() || alreadyAdded) {
            return;
          } else {
            elesToRemoveIds[ele2.id()] = true;
          }
          if (ele2.isNode()) {
            elesToRemove.push(ele2);
            addConnectedEdges(ele2);
            addChildren2(ele2);
          } else {
            elesToRemove.unshift(ele2);
          }
        }
        __name(add3, "add");
        for (var i2 = 0, l4 = self2.length; i2 < l4; i2++) {
          var ele = self2[i2];
          add3(ele);
        }
        function removeEdgeRef(node2, edge) {
          var connectedEdges = node2._private.edges;
          removeFromArray(connectedEdges, edge);
          node2.clearTraversalCache();
        }
        __name(removeEdgeRef, "removeEdgeRef");
        function removeParallelRef(pllEdge2) {
          pllEdge2.clearTraversalCache();
        }
        __name(removeParallelRef, "removeParallelRef");
        var alteredParents = [];
        alteredParents.ids = {};
        function removeChildRef(parent5, ele2) {
          ele2 = ele2[0];
          parent5 = parent5[0];
          var children2 = parent5._private.children;
          var pid = parent5.id();
          removeFromArray(children2, ele2);
          ele2._private.parent = null;
          if (!alteredParents.ids[pid]) {
            alteredParents.ids[pid] = true;
            alteredParents.push(parent5);
          }
        }
        __name(removeChildRef, "removeChildRef");
        self2.dirtyCompoundBoundsCache();
        if (removeFromPool2) {
          cy.removeFromPool(elesToRemove);
        }
        for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) {
          var _ele4 = elesToRemove[_i6];
          if (_ele4.isEdge()) {
            var src = _ele4.source()[0];
            var tgt = _ele4.target()[0];
            removeEdgeRef(src, _ele4);
            removeEdgeRef(tgt, _ele4);
            var pllEdges = _ele4.parallelEdges();
            for (var j3 = 0; j3 < pllEdges.length; j3++) {
              var pllEdge = pllEdges[j3];
              removeParallelRef(pllEdge);
              if (pllEdge.isBundledBezier()) {
                pllEdge.dirtyBoundingBoxCache();
              }
            }
          } else {
            var parent4 = _ele4.parent();
            if (parent4.length !== 0) {
              removeChildRef(parent4, _ele4);
            }
          }
          if (removeFromPool2) {
            _ele4._private.removed = true;
          }
        }
        var elesStillInside = cy._private.elements;
        cy._private.hasCompoundNodes = false;
        for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) {
          var _ele5 = elesStillInside[_i7];
          if (_ele5.isParent()) {
            cy._private.hasCompoundNodes = true;
            break;
          }
        }
        var removedElements = new Collection(this.cy(), elesToRemove);
        if (removedElements.size() > 0) {
          if (notifyRenderer) {
            removedElements.emitAndNotify("remove");
          } else if (removeFromPool2) {
            removedElements.emit("remove");
          }
        }
        for (var _i8 = 0; _i8 < alteredParents.length; _i8++) {
          var _ele6 = alteredParents[_i8];
          if (!removeFromPool2 || !_ele6.removed()) {
            _ele6.updateStyle();
          }
        }
        return removedElements;
      };
      elesfn$1.move = function(struct) {
        var cy = this._private.cy;
        var eles = this;
        var notifyRenderer = false;
        var modifyPool = false;
        var toString6 = /* @__PURE__ */ __name(function toString7(id41) {
          return id41 == null ? id41 : "" + id41;
        }, "toString");
        if (struct.source !== void 0 || struct.target !== void 0) {
          var srcId = toString6(struct.source);
          var tgtId = toString6(struct.target);
          var srcExists = srcId != null && cy.hasElementWithId(srcId);
          var tgtExists = tgtId != null && cy.hasElementWithId(tgtId);
          if (srcExists || tgtExists) {
            cy.batch(function() {
              eles.remove(notifyRenderer, modifyPool);
              eles.emitAndNotify("moveout");
              for (var i2 = 0; i2 < eles.length; i2++) {
                var ele = eles[i2];
                var _data5 = ele._private.data;
                if (ele.isEdge()) {
                  if (srcExists) {
                    _data5.source = srcId;
                  }
                  if (tgtExists) {
                    _data5.target = tgtId;
                  }
                }
              }
              eles.restore(notifyRenderer, modifyPool);
            });
            eles.emitAndNotify("move");
          }
        } else if (struct.parent !== void 0) {
          var parentId = toString6(struct.parent);
          var parentExists = parentId === null || cy.hasElementWithId(parentId);
          if (parentExists) {
            var pidToAssign = parentId === null ? void 0 : parentId;
            cy.batch(function() {
              var updated = eles.remove(notifyRenderer, modifyPool);
              updated.emitAndNotify("moveout");
              for (var i2 = 0; i2 < eles.length; i2++) {
                var ele = eles[i2];
                var _data6 = ele._private.data;
                if (ele.isNode()) {
                  _data6.parent = pidToAssign;
                }
              }
              updated.restore(notifyRenderer, modifyPool);
            });
            eles.emitAndNotify("move");
          }
        }
        return this;
      };
      [elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data3, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function(props) {
        extend4(elesfn$1, props);
      });
      corefn$9 = {
        add: /* @__PURE__ */ __name(function add2(opts) {
          var elements2;
          var cy = this;
          if (elementOrCollection(opts)) {
            var eles = opts;
            if (eles._private.cy === cy) {
              elements2 = eles.restore();
            } else {
              var jsons = [];
              for (var i2 = 0; i2 < eles.length; i2++) {
                var ele = eles[i2];
                jsons.push(ele.json());
              }
              elements2 = new Collection(cy, jsons);
            }
          } else if (array2(opts)) {
            var _jsons = opts;
            elements2 = new Collection(cy, _jsons);
          } else if (plainObject(opts) && (array2(opts.nodes) || array2(opts.edges))) {
            var elesByGroup = opts;
            var _jsons2 = [];
            var grs = ["nodes", "edges"];
            for (var _i = 0, il = grs.length; _i < il; _i++) {
              var group2 = grs[_i];
              var elesArray = elesByGroup[group2];
              if (array2(elesArray)) {
                for (var j3 = 0, jl = elesArray.length; j3 < jl; j3++) {
                  var json3 = extend4({
                    group: group2
                  }, elesArray[j3]);
                  _jsons2.push(json3);
                }
              }
            }
            elements2 = new Collection(cy, _jsons2);
          } else {
            var _json = opts;
            elements2 = new Element(cy, _json).collection();
          }
          return elements2;
        }, "add"),
        remove: /* @__PURE__ */ __name(function remove2(collection4) {
          if (elementOrCollection(collection4)) ;
          else if (string(collection4)) {
            var selector = collection4;
            collection4 = this.$(selector);
          }
          return collection4.remove();
        }, "remove")
      };
      __name(generateCubicBezier, "generateCubicBezier");
      generateSpringRK4 = /* @__PURE__ */ (function() {
        function springAccelerationForState(state4) {
          return -state4.tension * state4.x - state4.friction * state4.v;
        }
        __name(springAccelerationForState, "springAccelerationForState");
        function springEvaluateStateWithDerivative(initialState, dt, derivative) {
          var state4 = {
            x: initialState.x + derivative.dx * dt,
            v: initialState.v + derivative.dv * dt,
            tension: initialState.tension,
            friction: initialState.friction
          };
          return {
            dx: state4.v,
            dv: springAccelerationForState(state4)
          };
        }
        __name(springEvaluateStateWithDerivative, "springEvaluateStateWithDerivative");
        function springIntegrateState(state4, dt) {
          var a2 = {
            dx: state4.v,
            dv: springAccelerationForState(state4)
          }, b3 = springEvaluateStateWithDerivative(state4, dt * 0.5, a2), c3 = springEvaluateStateWithDerivative(state4, dt * 0.5, b3), d3 = springEvaluateStateWithDerivative(state4, dt, c3), dxdt = 1 / 6 * (a2.dx + 2 * (b3.dx + c3.dx) + d3.dx), dvdt = 1 / 6 * (a2.dv + 2 * (b3.dv + c3.dv) + d3.dv);
          state4.x = state4.x + dxdt * dt;
          state4.v = state4.v + dvdt * dt;
          return state4;
        }
        __name(springIntegrateState, "springIntegrateState");
        return /* @__PURE__ */ __name(function springRK4Factory(tension, friction, duration) {
          var initState = {
            x: -1,
            v: 0,
            tension: null,
            friction: null
          }, path4 = [0], time_lapsed = 0, tolerance = 1 / 1e4, DT = 16 / 1e3, have_duration, dt, last_state;
          tension = parseFloat(tension) || 500;
          friction = parseFloat(friction) || 20;
          duration = duration || null;
          initState.tension = tension;
          initState.friction = friction;
          have_duration = duration !== null;
          if (have_duration) {
            time_lapsed = springRK4Factory(tension, friction);
            dt = time_lapsed / duration * DT;
          } else {
            dt = DT;
          }
          for (; ; ) {
            last_state = springIntegrateState(last_state || initState, dt);
            path4.push(1 + last_state.x);
            time_lapsed += 16;
            if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) {
              break;
            }
          }
          return !have_duration ? time_lapsed : function(percentComplete) {
            return path4[percentComplete * (path4.length - 1) | 0];
          };
        }, "springRK4Factory");
      })();
      cubicBezier = /* @__PURE__ */ __name(function cubicBezier2(t13, p1, t22, p22) {
        var bezier = generateCubicBezier(t13, p1, t22, p22);
        return function(start3, end2, percent) {
          return start3 + (end2 - start3) * bezier(percent);
        };
      }, "cubicBezier");
      easings = {
        "linear": /* @__PURE__ */ __name(function linear3(start3, end2, percent) {
          return start3 + (end2 - start3) * percent;
        }, "linear"),
        // default easings
        "ease": cubicBezier(0.25, 0.1, 0.25, 1),
        "ease-in": cubicBezier(0.42, 0, 1, 1),
        "ease-out": cubicBezier(0, 0, 0.58, 1),
        "ease-in-out": cubicBezier(0.42, 0, 0.58, 1),
        // sine
        "ease-in-sine": cubicBezier(0.47, 0, 0.745, 0.715),
        "ease-out-sine": cubicBezier(0.39, 0.575, 0.565, 1),
        "ease-in-out-sine": cubicBezier(0.445, 0.05, 0.55, 0.95),
        // quad
        "ease-in-quad": cubicBezier(0.55, 0.085, 0.68, 0.53),
        "ease-out-quad": cubicBezier(0.25, 0.46, 0.45, 0.94),
        "ease-in-out-quad": cubicBezier(0.455, 0.03, 0.515, 0.955),
        // cubic
        "ease-in-cubic": cubicBezier(0.55, 0.055, 0.675, 0.19),
        "ease-out-cubic": cubicBezier(0.215, 0.61, 0.355, 1),
        "ease-in-out-cubic": cubicBezier(0.645, 0.045, 0.355, 1),
        // quart
        "ease-in-quart": cubicBezier(0.895, 0.03, 0.685, 0.22),
        "ease-out-quart": cubicBezier(0.165, 0.84, 0.44, 1),
        "ease-in-out-quart": cubicBezier(0.77, 0, 0.175, 1),
        // quint
        "ease-in-quint": cubicBezier(0.755, 0.05, 0.855, 0.06),
        "ease-out-quint": cubicBezier(0.23, 1, 0.32, 1),
        "ease-in-out-quint": cubicBezier(0.86, 0, 0.07, 1),
        // expo
        "ease-in-expo": cubicBezier(0.95, 0.05, 0.795, 0.035),
        "ease-out-expo": cubicBezier(0.19, 1, 0.22, 1),
        "ease-in-out-expo": cubicBezier(1, 0, 0, 1),
        // circ
        "ease-in-circ": cubicBezier(0.6, 0.04, 0.98, 0.335),
        "ease-out-circ": cubicBezier(0.075, 0.82, 0.165, 1),
        "ease-in-out-circ": cubicBezier(0.785, 0.135, 0.15, 0.86),
        // user param easings...
        "spring": /* @__PURE__ */ __name(function spring(tension, friction, duration) {
          if (duration === 0) {
            return easings.linear;
          }
          var spring2 = generateSpringRK4(tension, friction, duration);
          return function(start3, end2, percent) {
            return start3 + (end2 - start3) * spring2(percent);
          };
        }, "spring"),
        "cubic-bezier": cubicBezier
      };
      __name(getEasedValue, "getEasedValue");
      __name(getValue2, "getValue");
      __name(ease, "ease");
      __name(step$1, "step$1");
      __name(valid, "valid");
      __name(startAnimation, "startAnimation");
      __name(stepAll, "stepAll");
      corefn$8 = {
        // pull in animation functions
        animate: define2.animate(),
        animation: define2.animation(),
        animated: define2.animated(),
        clearQueue: define2.clearQueue(),
        delay: define2.delay(),
        delayAnimation: define2.delayAnimation(),
        stop: define2.stop(),
        addToAnimationPool: /* @__PURE__ */ __name(function addToAnimationPool(eles) {
          var cy = this;
          if (!cy.styleEnabled()) {
            return;
          }
          cy._private.aniEles.merge(eles);
        }, "addToAnimationPool"),
        stopAnimationLoop: /* @__PURE__ */ __name(function stopAnimationLoop() {
          this._private.animationsRunning = false;
        }, "stopAnimationLoop"),
        startAnimationLoop: /* @__PURE__ */ __name(function startAnimationLoop() {
          var cy = this;
          cy._private.animationsRunning = true;
          if (!cy.styleEnabled()) {
            return;
          }
          function headlessStep() {
            if (!cy._private.animationsRunning) {
              return;
            }
            requestAnimationFrame2(/* @__PURE__ */ __name(function animationStep(now3) {
              stepAll(now3, cy);
              headlessStep();
            }, "animationStep"));
          }
          __name(headlessStep, "headlessStep");
          var renderer15 = cy.renderer();
          if (renderer15 && renderer15.beforeRender) {
            renderer15.beforeRender(/* @__PURE__ */ __name(function rendererAnimationStep(willDraw, now3) {
              stepAll(now3, cy);
            }, "rendererAnimationStep"), renderer15.beforeRenderPriorities.animations);
          } else {
            headlessStep();
          }
        }, "startAnimationLoop")
      };
      emitterOptions = {
        qualifierCompare: /* @__PURE__ */ __name(function qualifierCompare3(selector1, selector2) {
          if (selector1 == null || selector2 == null) {
            return selector1 == null && selector2 == null;
          } else {
            return selector1.sameText(selector2);
          }
        }, "qualifierCompare"),
        eventMatches: /* @__PURE__ */ __name(function eventMatches3(cy, listener, eventObj) {
          var selector = listener.qualifier;
          if (selector != null) {
            return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);
          }
          return true;
        }, "eventMatches"),
        addEventFields: /* @__PURE__ */ __name(function addEventFields3(cy, evt) {
          evt.cy = cy;
          evt.target = cy;
        }, "addEventFields"),
        callbackContext: /* @__PURE__ */ __name(function callbackContext3(cy, listener, eventObj) {
          return listener.qualifier != null ? eventObj.target : cy;
        }, "callbackContext")
      };
      argSelector2 = /* @__PURE__ */ __name(function argSelector3(arg) {
        if (string(arg)) {
          return new Selector(arg);
        } else {
          return arg;
        }
      }, "argSelector");
      elesfn = {
        createEmitter: /* @__PURE__ */ __name(function createEmitter2() {
          var _p = this._private;
          if (!_p.emitter) {
            _p.emitter = new Emitter(emitterOptions, this);
          }
          return this;
        }, "createEmitter"),
        emitter: /* @__PURE__ */ __name(function emitter2() {
          return this._private.emitter;
        }, "emitter"),
        on: /* @__PURE__ */ __name(function on2(events, selector, callback) {
          this.emitter().on(events, argSelector2(selector), callback);
          return this;
        }, "on"),
        removeListener: /* @__PURE__ */ __name(function removeListener2(events, selector, callback) {
          this.emitter().removeListener(events, argSelector2(selector), callback);
          return this;
        }, "removeListener"),
        removeAllListeners: /* @__PURE__ */ __name(function removeAllListeners2() {
          this.emitter().removeAllListeners();
          return this;
        }, "removeAllListeners"),
        one: /* @__PURE__ */ __name(function one3(events, selector, callback) {
          this.emitter().one(events, argSelector2(selector), callback);
          return this;
        }, "one"),
        once: /* @__PURE__ */ __name(function once2(events, selector, callback) {
          this.emitter().one(events, argSelector2(selector), callback);
          return this;
        }, "once"),
        emit: /* @__PURE__ */ __name(function emit2(events, extraParams) {
          this.emitter().emit(events, extraParams);
          return this;
        }, "emit"),
        emitAndNotify: /* @__PURE__ */ __name(function emitAndNotify2(event3, eles) {
          this.emit(event3);
          this.notify(event3, eles);
          return this;
        }, "emitAndNotify")
      };
      define2.eventAliasesOn(elesfn);
      corefn$7 = {
        png: /* @__PURE__ */ __name(function png(options2) {
          var renderer15 = this._private.renderer;
          options2 = options2 || {};
          return renderer15.png(options2);
        }, "png"),
        jpg: /* @__PURE__ */ __name(function jpg(options2) {
          var renderer15 = this._private.renderer;
          options2 = options2 || {};
          options2.bg = options2.bg || "#fff";
          return renderer15.jpg(options2);
        }, "jpg")
      };
      corefn$7.jpeg = corefn$7.jpg;
      corefn$6 = {
        layout: /* @__PURE__ */ __name(function layout3(options2) {
          var cy = this;
          if (options2 == null) {
            error("Layout options must be specified to make a layout");
            return;
          }
          if (options2.name == null) {
            error("A `name` must be specified to make a layout");
            return;
          }
          var name = options2.name;
          var Layout2 = cy.extension("layout", name);
          if (Layout2 == null) {
            error("No such layout `" + name + "` found.  Did you forget to import it and `cytoscape.use()` it?");
            return;
          }
          var eles;
          if (string(options2.eles)) {
            eles = cy.$(options2.eles);
          } else {
            eles = options2.eles != null ? options2.eles : cy.$();
          }
          var layout7 = new Layout2(extend4({}, options2, {
            cy,
            eles
          }));
          return layout7;
        }, "layout")
      };
      corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout;
      corefn$5 = {
        notify: /* @__PURE__ */ __name(function notify(eventName, eventEles) {
          var _p = this._private;
          if (this.batching()) {
            _p.batchNotifications = _p.batchNotifications || {};
            var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection();
            if (eventEles != null) {
              eles.merge(eventEles);
            }
            return;
          }
          if (!_p.notificationsEnabled) {
            return;
          }
          var renderer15 = this.renderer();
          if (this.destroyed() || !renderer15) {
            return;
          }
          renderer15.notify(eventName, eventEles);
        }, "notify"),
        notifications: /* @__PURE__ */ __name(function notifications(bool2) {
          var p3 = this._private;
          if (bool2 === void 0) {
            return p3.notificationsEnabled;
          } else {
            p3.notificationsEnabled = bool2 ? true : false;
          }
          return this;
        }, "notifications"),
        noNotifications: /* @__PURE__ */ __name(function noNotifications(callback) {
          this.notifications(false);
          callback();
          this.notifications(true);
        }, "noNotifications"),
        batching: /* @__PURE__ */ __name(function batching() {
          return this._private.batchCount > 0;
        }, "batching"),
        startBatch: /* @__PURE__ */ __name(function startBatch() {
          var _p = this._private;
          if (_p.batchCount == null) {
            _p.batchCount = 0;
          }
          if (_p.batchCount === 0) {
            _p.batchStyleEles = this.collection();
            _p.batchNotifications = {};
          }
          _p.batchCount++;
          return this;
        }, "startBatch"),
        endBatch: /* @__PURE__ */ __name(function endBatch() {
          var _p = this._private;
          if (_p.batchCount === 0) {
            return this;
          }
          _p.batchCount--;
          if (_p.batchCount === 0) {
            _p.batchStyleEles.updateStyle();
            var renderer15 = this.renderer();
            Object.keys(_p.batchNotifications).forEach(function(eventName) {
              var eles = _p.batchNotifications[eventName];
              if (eles.empty()) {
                renderer15.notify(eventName);
              } else {
                renderer15.notify(eventName, eles);
              }
            });
          }
          return this;
        }, "endBatch"),
        batch: /* @__PURE__ */ __name(function batch(callback) {
          this.startBatch();
          callback();
          this.endBatch();
          return this;
        }, "batch"),
        // for backwards compatibility
        batchData: /* @__PURE__ */ __name(function batchData(map6) {
          var cy = this;
          return this.batch(function() {
            var ids = Object.keys(map6);
            for (var i2 = 0; i2 < ids.length; i2++) {
              var id41 = ids[i2];
              var data6 = map6[id41];
              var ele = cy.getElementById(id41);
              ele.data(data6);
            }
          });
        }, "batchData")
      };
      rendererDefaults = defaults$g({
        hideEdgesOnViewport: false,
        textureOnViewport: false,
        motionBlur: false,
        motionBlurOpacity: 0.05,
        pixelRatio: void 0,
        desktopTapThreshold: 4,
        touchTapThreshold: 8,
        wheelSensitivity: 1,
        debug: false,
        showFps: false,
        // webgl options
        webgl: false,
        webglDebug: false,
        webglDebugShowAtlases: false,
        // defaults good for mobile
        webglTexSize: 2048,
        webglTexRows: 36,
        webglTexRowsNodes: 18,
        webglBatchSize: 2048,
        webglTexPerBatch: 14,
        webglBgColor: [255, 255, 255]
      });
      corefn$4 = {
        renderTo: /* @__PURE__ */ __name(function renderTo(context, zoom2, pan2, pxRatio) {
          var r2 = this._private.renderer;
          r2.renderTo(context, zoom2, pan2, pxRatio);
          return this;
        }, "renderTo"),
        renderer: /* @__PURE__ */ __name(function renderer() {
          return this._private.renderer;
        }, "renderer"),
        forceRender: /* @__PURE__ */ __name(function forceRender() {
          this.notify("draw");
          return this;
        }, "forceRender"),
        resize: /* @__PURE__ */ __name(function resize() {
          this.invalidateSize();
          this.emitAndNotify("resize");
          return this;
        }, "resize"),
        initRenderer: /* @__PURE__ */ __name(function initRenderer(options2) {
          var cy = this;
          var RendererProto = cy.extension("renderer", options2.name);
          if (RendererProto == null) {
            error("Can not initialise: No such renderer `".concat(options2.name, "` found. Did you forget to import it and `cytoscape.use()` it?"));
            return;
          }
          if (options2.wheelSensitivity !== void 0) {
            warn("You have set a custom wheel sensitivity.  This will make your app zoom unnaturally when using mainstream mice.  You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");
          }
          var rOpts = rendererDefaults(options2);
          rOpts.cy = cy;
          cy._private.renderer = new RendererProto(rOpts);
          this.notify("init");
        }, "initRenderer"),
        destroyRenderer: /* @__PURE__ */ __name(function destroyRenderer() {
          var cy = this;
          cy.notify("destroy");
          var domEle = cy.container();
          if (domEle) {
            domEle._cyreg = null;
            while (domEle.childNodes.length > 0) {
              domEle.removeChild(domEle.childNodes[0]);
            }
          }
          cy._private.renderer = null;
          cy.mutableElements().forEach(function(ele) {
            var _p = ele._private;
            _p.rscratch = {};
            _p.rstyle = {};
            _p.animation.current = [];
            _p.animation.queue = [];
          });
        }, "destroyRenderer"),
        onRender: /* @__PURE__ */ __name(function onRender(fn3) {
          return this.on("render", fn3);
        }, "onRender"),
        offRender: /* @__PURE__ */ __name(function offRender(fn3) {
          return this.off("render", fn3);
        }, "offRender")
      };
      corefn$4.invalidateDimensions = corefn$4.resize;
      corefn$3 = {
        // get a collection
        // - empty collection on no args
        // - collection of elements in the graph on selector arg
        // - guarantee a returned collection when elements or collection specified
        collection: /* @__PURE__ */ __name(function collection3(eles, opts) {
          if (string(eles)) {
            return this.$(eles);
          } else if (elementOrCollection(eles)) {
            return eles.collection();
          } else if (array2(eles)) {
            if (!opts) {
              opts = {};
            }
            return new Collection(this, eles, opts.unique, opts.removed);
          }
          return new Collection(this);
        }, "collection"),
        nodes: /* @__PURE__ */ __name(function nodes2(selector) {
          var nodes5 = this.$(function(ele) {
            return ele.isNode();
          });
          if (selector) {
            return nodes5.filter(selector);
          }
          return nodes5;
        }, "nodes"),
        edges: /* @__PURE__ */ __name(function edges2(selector) {
          var edges3 = this.$(function(ele) {
            return ele.isEdge();
          });
          if (selector) {
            return edges3.filter(selector);
          }
          return edges3;
        }, "edges"),
        // search the graph like jQuery
        $: /* @__PURE__ */ __name(function $3(selector) {
          var eles = this._private.elements;
          if (selector) {
            return eles.filter(selector);
          } else {
            return eles.spawnSelf();
          }
        }, "$"),
        mutableElements: /* @__PURE__ */ __name(function mutableElements() {
          return this._private.elements;
        }, "mutableElements")
      };
      corefn$3.elements = corefn$3.filter = corefn$3.$;
      styfn$8 = {};
      TRUE = "t";
      FALSE = "f";
      styfn$8.apply = function(eles) {
        var self2 = this;
        var _p = self2._private;
        var cy = _p.cy;
        var updatedEles = cy.collection();
        for (var ie2 = 0; ie2 < eles.length; ie2++) {
          var ele = eles[ie2];
          var cxtMeta = self2.getContextMeta(ele);
          if (cxtMeta.empty) {
            continue;
          }
          var cxtStyle = self2.getContextStyle(cxtMeta);
          var app = self2.applyContextStyle(cxtMeta, cxtStyle, ele);
          if (ele._private.appliedInitStyle) {
            self2.updateTransitions(ele, app.diffProps);
          } else {
            ele._private.appliedInitStyle = true;
          }
          var hintsDiff = self2.updateStyleHints(ele);
          if (hintsDiff) {
            updatedEles.push(ele);
          }
        }
        return updatedEles;
      };
      styfn$8.getPropertiesDiff = function(oldCxtKey, newCxtKey) {
        var self2 = this;
        var cache3 = self2._private.propDiffs = self2._private.propDiffs || {};
        var dualCxtKey = oldCxtKey + "-" + newCxtKey;
        var cachedVal = cache3[dualCxtKey];
        if (cachedVal) {
          return cachedVal;
        }
        var diffProps = [];
        var addedProp = {};
        for (var i2 = 0; i2 < self2.length; i2++) {
          var cxt = self2[i2];
          var oldHasCxt = oldCxtKey[i2] === TRUE;
          var newHasCxt = newCxtKey[i2] === TRUE;
          var cxtHasDiffed = oldHasCxt !== newHasCxt;
          var cxtHasMappedProps = cxt.mappedProperties.length > 0;
          if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) {
            var props = void 0;
            if (cxtHasDiffed && cxtHasMappedProps) {
              props = cxt.properties;
            } else if (cxtHasDiffed) {
              props = cxt.properties;
            } else if (cxtHasMappedProps) {
              props = cxt.mappedProperties;
            }
            for (var j3 = 0; j3 < props.length; j3++) {
              var prop = props[j3];
              var name = prop.name;
              var laterCxtOverrides = false;
              for (var k2 = i2 + 1; k2 < self2.length; k2++) {
                var laterCxt = self2[k2];
                var hasLaterCxt = newCxtKey[k2] === TRUE;
                if (!hasLaterCxt) {
                  continue;
                }
                laterCxtOverrides = laterCxt.properties[prop.name] != null;
                if (laterCxtOverrides) {
                  break;
                }
              }
              if (!addedProp[name] && !laterCxtOverrides) {
                addedProp[name] = true;
                diffProps.push(name);
              }
            }
          }
        }
        cache3[dualCxtKey] = diffProps;
        return diffProps;
      };
      styfn$8.getContextMeta = function(ele) {
        var self2 = this;
        var cxtKey = "";
        var diffProps;
        var prevKey = ele._private.styleCxtKey || "";
        for (var i2 = 0; i2 < self2.length; i2++) {
          var context = self2[i2];
          var contextSelectorMatches = context.selector && context.selector.matches(ele);
          if (contextSelectorMatches) {
            cxtKey += TRUE;
          } else {
            cxtKey += FALSE;
          }
        }
        diffProps = self2.getPropertiesDiff(prevKey, cxtKey);
        ele._private.styleCxtKey = cxtKey;
        return {
          key: cxtKey,
          diffPropNames: diffProps,
          empty: diffProps.length === 0
        };
      };
      styfn$8.getContextStyle = function(cxtMeta) {
        var cxtKey = cxtMeta.key;
        var self2 = this;
        var cxtStyles = this._private.contextStyles = this._private.contextStyles || {};
        if (cxtStyles[cxtKey]) {
          return cxtStyles[cxtKey];
        }
        var style3 = {
          _private: {
            key: cxtKey
          }
        };
        for (var i2 = 0; i2 < self2.length; i2++) {
          var cxt = self2[i2];
          var hasCxt = cxtKey[i2] === TRUE;
          if (!hasCxt) {
            continue;
          }
          for (var j3 = 0; j3 < cxt.properties.length; j3++) {
            var prop = cxt.properties[j3];
            style3[prop.name] = prop;
          }
        }
        cxtStyles[cxtKey] = style3;
        return style3;
      };
      styfn$8.applyContextStyle = function(cxtMeta, cxtStyle, ele) {
        var self2 = this;
        var diffProps = cxtMeta.diffPropNames;
        var retDiffProps = {};
        var types = self2.types;
        for (var i2 = 0; i2 < diffProps.length; i2++) {
          var diffPropName = diffProps[i2];
          var cxtProp = cxtStyle[diffPropName];
          var eleProp = ele.pstyle(diffPropName);
          if (!cxtProp) {
            if (!eleProp) {
              continue;
            } else if (eleProp.bypass) {
              cxtProp = {
                name: diffPropName,
                deleteBypassed: true
              };
            } else {
              cxtProp = {
                name: diffPropName,
                "delete": true
              };
            }
          }
          if (eleProp === cxtProp) {
            continue;
          }
          if (cxtProp.mapped === types.fn && eleProp != null && eleProp.mapping != null && eleProp.mapping.value === cxtProp.value) {
            var mapping = eleProp.mapping;
            var fnValue = mapping.fnValue = cxtProp.value(ele);
            if (fnValue === mapping.prevFnValue) {
              continue;
            }
          }
          var retDiffProp = retDiffProps[diffPropName] = {
            prev: eleProp
          };
          self2.applyParsedProperty(ele, cxtProp);
          retDiffProp.next = ele.pstyle(diffPropName);
          if (retDiffProp.next && retDiffProp.next.bypass) {
            retDiffProp.next = retDiffProp.next.bypassed;
          }
        }
        return {
          diffProps: retDiffProps
        };
      };
      styfn$8.updateStyleHints = function(ele) {
        var _p = ele._private;
        var self2 = this;
        var propNames = self2.propertyGroupNames;
        var propGrKeys = self2.propertyGroupKeys;
        var propHash = /* @__PURE__ */ __name(function propHash2(ele2, propNames2, seedKey) {
          return self2.getPropertiesHash(ele2, propNames2, seedKey);
        }, "propHash");
        var oldStyleKey = _p.styleKey;
        if (ele.removed()) {
          return false;
        }
        var isNode2 = _p.group === "nodes";
        var overriddenStyles = ele._private.style;
        propNames = Object.keys(overriddenStyles);
        for (var i2 = 0; i2 < propGrKeys.length; i2++) {
          var grKey = propGrKeys[i2];
          _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];
        }
        var updateGrKey1 = /* @__PURE__ */ __name(function updateGrKey12(val, grKey2) {
          return _p.styleKeys[grKey2][0] = hashInt(val, _p.styleKeys[grKey2][0]);
        }, "updateGrKey1");
        var updateGrKey2 = /* @__PURE__ */ __name(function updateGrKey22(val, grKey2) {
          return _p.styleKeys[grKey2][1] = hashIntAlt(val, _p.styleKeys[grKey2][1]);
        }, "updateGrKey2");
        var updateGrKey = /* @__PURE__ */ __name(function updateGrKey3(val, grKey2) {
          updateGrKey1(val, grKey2);
          updateGrKey2(val, grKey2);
        }, "updateGrKey");
        var updateGrKeyWStr = /* @__PURE__ */ __name(function updateGrKeyWStr2(strVal, grKey2) {
          for (var j3 = 0; j3 < strVal.length; j3++) {
            var ch = strVal.charCodeAt(j3);
            updateGrKey1(ch, grKey2);
            updateGrKey2(ch, grKey2);
          }
        }, "updateGrKeyWStr");
        var N3 = 2e9;
        var cleanNum = /* @__PURE__ */ __name(function cleanNum2(val) {
          return -128 < val && val < 128 && Math.floor(val) !== val ? N3 - (val * 1024 | 0) : val;
        }, "cleanNum");
        for (var _i = 0; _i < propNames.length; _i++) {
          var name = propNames[_i];
          var parsedProp = overriddenStyles[name];
          if (parsedProp == null) {
            continue;
          }
          var propInfo = this.properties[name];
          var type3 = propInfo.type;
          var _grKey = propInfo.groupKey;
          var normalizedNumberVal = void 0;
          if (propInfo.hashOverride != null) {
            normalizedNumberVal = propInfo.hashOverride(ele, parsedProp);
          } else if (parsedProp.pfValue != null) {
            normalizedNumberVal = parsedProp.pfValue;
          }
          var numberVal = propInfo.enums == null ? parsedProp.value : null;
          var haveNormNum = normalizedNumberVal != null;
          var haveUnitedNum = numberVal != null;
          var haveNum = haveNormNum || haveUnitedNum;
          var units = parsedProp.units;
          if (type3.number && haveNum && !type3.multiple) {
            var v3 = haveNormNum ? normalizedNumberVal : numberVal;
            updateGrKey(cleanNum(v3), _grKey);
            if (!haveNormNum && units != null) {
              updateGrKeyWStr(units, _grKey);
            }
          } else {
            updateGrKeyWStr(parsedProp.strValue, _grKey);
          }
        }
        var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];
        for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) {
          var _grKey2 = propGrKeys[_i2];
          var grHash = _p.styleKeys[_grKey2];
          hash[0] = hashInt(grHash[0], hash[0]);
          hash[1] = hashIntAlt(grHash[1], hash[1]);
        }
        _p.styleKey = combineHashes(hash[0], hash[1]);
        var sk = _p.styleKeys;
        _p.labelDimsKey = combineHashesArray(sk.labelDimensions);
        var labelKeys = propHash(ele, ["label"], sk.labelDimensions);
        _p.labelKey = combineHashesArray(labelKeys);
        _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys));
        if (!isNode2) {
          var sourceLabelKeys = propHash(ele, ["source-label"], sk.labelDimensions);
          _p.sourceLabelKey = combineHashesArray(sourceLabelKeys);
          _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys));
          var targetLabelKeys = propHash(ele, ["target-label"], sk.labelDimensions);
          _p.targetLabelKey = combineHashesArray(targetLabelKeys);
          _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys));
        }
        if (isNode2) {
          var _p$styleKeys = _p.styleKeys, nodeBody = _p$styleKeys.nodeBody, nodeBorder = _p$styleKeys.nodeBorder, nodeOutline = _p$styleKeys.nodeOutline, backgroundImage = _p$styleKeys.backgroundImage, compound = _p$styleKeys.compound, pie2 = _p$styleKeys.pie, stripe = _p$styleKeys.stripe;
          var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie2, stripe].filter(function(k2) {
            return k2 != null;
          }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]);
          _p.nodeKey = combineHashesArray(nodeKeys);
          _p.hasPie = pie2 != null && pie2[0] !== DEFAULT_HASH_SEED && pie2[1] !== DEFAULT_HASH_SEED_ALT;
          _p.hasStripe = stripe != null && stripe[0] !== DEFAULT_HASH_SEED && stripe[1] !== DEFAULT_HASH_SEED_ALT;
        }
        return oldStyleKey !== _p.styleKey;
      };
      styfn$8.clearStyleHints = function(ele) {
        var _p = ele._private;
        _p.styleCxtKey = "";
        _p.styleKeys = {};
        _p.styleKey = null;
        _p.labelKey = null;
        _p.labelStyleKey = null;
        _p.sourceLabelKey = null;
        _p.sourceLabelStyleKey = null;
        _p.targetLabelKey = null;
        _p.targetLabelStyleKey = null;
        _p.nodeKey = null;
        _p.hasPie = null;
        _p.hasStripe = null;
      };
      styfn$8.applyParsedProperty = function(ele, parsedProp) {
        var self2 = this;
        var prop = parsedProp;
        var style3 = ele._private.style;
        var flatProp;
        var types = self2.types;
        var type3 = self2.properties[prop.name].type;
        var propIsBypass = prop.bypass;
        var origProp = style3[prop.name];
        var origPropIsBypass = origProp && origProp.bypass;
        var _p = ele._private;
        var flatPropMapping = "mapping";
        var getVal = /* @__PURE__ */ __name(function getVal2(p3) {
          if (p3 == null) {
            return null;
          } else if (p3.pfValue != null) {
            return p3.pfValue;
          } else {
            return p3.value;
          }
        }, "getVal");
        var checkTriggers = /* @__PURE__ */ __name(function checkTriggers2() {
          var fromVal = getVal(origProp);
          var toVal = getVal(prop);
          self2.checkTriggers(ele, prop.name, fromVal, toVal);
        }, "checkTriggers");
        if (parsedProp.name === "curve-style" && ele.isEdge() && // loops must be bundled beziers
        (parsedProp.value !== "bezier" && ele.isLoop() || // edges connected to compound nodes can not be haystacks
        parsedProp.value === "haystack" && (ele.source().isParent() || ele.target().isParent()))) {
          prop = parsedProp = this.parse(parsedProp.name, "bezier", propIsBypass);
        }
        if (prop["delete"]) {
          style3[prop.name] = void 0;
          checkTriggers();
          return true;
        }
        if (prop.deleteBypassed) {
          if (!origProp) {
            checkTriggers();
            return true;
          } else if (origProp.bypass) {
            origProp.bypassed = void 0;
            checkTriggers();
            return true;
          } else {
            return false;
          }
        }
        if (prop.deleteBypass) {
          if (!origProp) {
            checkTriggers();
            return true;
          } else if (origProp.bypass) {
            style3[prop.name] = origProp.bypassed;
            checkTriggers();
            return true;
          } else {
            return false;
          }
        }
        var printMappingErr = /* @__PURE__ */ __name(function printMappingErr2() {
          warn("Do not assign mappings to elements without corresponding data (i.e. ele `" + ele.id() + "` has no mapping for property `" + prop.name + "` with data field `" + prop.field + "`); try a `[" + prop.field + "]` selector to limit scope to elements with `" + prop.field + "` defined");
        }, "printMappingErr");
        switch (prop.mapped) {
          // flatten the property if mapped
          case types.mapData: {
            var fields = prop.field.split(".");
            var fieldVal = _p.data;
            for (var i2 = 0; i2 < fields.length && fieldVal; i2++) {
              var field = fields[i2];
              fieldVal = fieldVal[field];
            }
            if (fieldVal == null) {
              printMappingErr();
              return false;
            }
            var percent;
            if (!number$1(fieldVal)) {
              warn("Do not use continuous mappers without specifying numeric data (i.e. `" + prop.field + ": " + fieldVal + "` for `" + ele.id() + "` is non-numeric)");
              return false;
            } else {
              var fieldWidth = prop.fieldMax - prop.fieldMin;
              if (fieldWidth === 0) {
                percent = 0;
              } else {
                percent = (fieldVal - prop.fieldMin) / fieldWidth;
              }
            }
            if (percent < 0) {
              percent = 0;
            } else if (percent > 1) {
              percent = 1;
            }
            if (type3.color) {
              var r1 = prop.valueMin[0];
              var r2 = prop.valueMax[0];
              var g1 = prop.valueMin[1];
              var g2 = prop.valueMax[1];
              var b1 = prop.valueMin[2];
              var b22 = prop.valueMax[2];
              var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3];
              var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3];
              var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b22 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)];
              flatProp = {
                // colours are simple, so just create the flat property instead of expensive string parsing
                bypass: prop.bypass,
                // we're a bypass if the mapping property is a bypass
                name: prop.name,
                value: clr,
                strValue: "rgb(" + clr[0] + ", " + clr[1] + ", " + clr[2] + ")"
              };
            } else if (type3.number) {
              var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent;
              flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping);
            } else {
              return false;
            }
            if (!flatProp) {
              printMappingErr();
              return false;
            }
            flatProp.mapping = prop;
            prop = flatProp;
            break;
          }
          // direct mapping
          case types.data: {
            var _fields = prop.field.split(".");
            var _fieldVal = _p.data;
            for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) {
              var _field = _fields[_i3];
              _fieldVal = _fieldVal[_field];
            }
            if (_fieldVal != null) {
              flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping);
            }
            if (!flatProp) {
              printMappingErr();
              return false;
            }
            flatProp.mapping = prop;
            prop = flatProp;
            break;
          }
          case types.fn: {
            var fn3 = prop.value;
            var fnRetVal = prop.fnValue != null ? prop.fnValue : fn3(ele);
            prop.prevFnValue = fnRetVal;
            if (fnRetVal == null) {
              warn("Custom function mappers may not return null (i.e. `" + prop.name + "` for ele `" + ele.id() + "` is null)");
              return false;
            }
            flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping);
            if (!flatProp) {
              warn("Custom function mappers may not return invalid values for the property type (i.e. `" + prop.name + "` for ele `" + ele.id() + "` is invalid)");
              return false;
            }
            flatProp.mapping = copy3(prop);
            prop = flatProp;
            break;
          }
          case void 0:
            break;
          // just set the property
          default:
            return false;
        }
        if (propIsBypass) {
          if (origPropIsBypass) {
            prop.bypassed = origProp.bypassed;
          } else {
            prop.bypassed = origProp;
          }
          style3[prop.name] = prop;
        } else {
          if (origPropIsBypass) {
            origProp.bypassed = prop;
          } else {
            style3[prop.name] = prop;
          }
        }
        checkTriggers();
        return true;
      };
      styfn$8.cleanElements = function(eles, keepBypasses) {
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          this.clearStyleHints(ele);
          ele.dirtyCompoundBoundsCache();
          ele.dirtyBoundingBoxCache();
          if (!keepBypasses) {
            ele._private.style = {};
          } else {
            var style3 = ele._private.style;
            var propNames = Object.keys(style3);
            for (var j3 = 0; j3 < propNames.length; j3++) {
              var propName = propNames[j3];
              var eleProp = style3[propName];
              if (eleProp != null) {
                if (eleProp.bypass) {
                  eleProp.bypassed = null;
                } else {
                  style3[propName] = null;
                }
              }
            }
          }
        }
      };
      styfn$8.update = function() {
        var cy = this._private.cy;
        var eles = cy.mutableElements();
        eles.updateStyle();
      };
      styfn$8.updateTransitions = function(ele, diffProps) {
        var self2 = this;
        var _p = ele._private;
        var props = ele.pstyle("transition-property").value;
        var duration = ele.pstyle("transition-duration").pfValue;
        var delay2 = ele.pstyle("transition-delay").pfValue;
        if (props.length > 0 && duration > 0) {
          var style3 = {};
          var anyPrev = false;
          for (var i2 = 0; i2 < props.length; i2++) {
            var prop = props[i2];
            var styProp = ele.pstyle(prop);
            var diffProp = diffProps[prop];
            if (!diffProp) {
              continue;
            }
            var prevProp = diffProp.prev;
            var fromProp = prevProp;
            var toProp = diffProp.next != null ? diffProp.next : styProp;
            var diff2 = false;
            var initVal = void 0;
            var initDt = 1e-6;
            if (!fromProp) {
              continue;
            }
            if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) {
              diff2 = toProp.pfValue - fromProp.pfValue;
              initVal = fromProp.pfValue + initDt * diff2;
            } else if (number$1(fromProp.value) && number$1(toProp.value)) {
              diff2 = toProp.value - fromProp.value;
              initVal = fromProp.value + initDt * diff2;
            } else if (array2(fromProp.value) && array2(toProp.value)) {
              diff2 = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2];
              initVal = fromProp.strValue;
            }
            if (diff2) {
              style3[prop] = toProp.strValue;
              this.applyBypass(ele, prop, initVal);
              anyPrev = true;
            }
          }
          if (!anyPrev) {
            return;
          }
          _p.transitioning = true;
          new Promise$1(function(resolve2) {
            if (delay2 > 0) {
              ele.delayAnimation(delay2).play().promise().then(resolve2);
            } else {
              resolve2();
            }
          }).then(function() {
            return ele.animation({
              style: style3,
              duration,
              easing: ele.pstyle("transition-timing-function").value,
              queue: false
            }).play().promise();
          }).then(function() {
            self2.removeBypasses(ele, props);
            ele.emitAndNotify("style");
            _p.transitioning = false;
          });
        } else if (_p.transitioning) {
          this.removeBypasses(ele, props);
          ele.emitAndNotify("style");
          _p.transitioning = false;
        }
      };
      styfn$8.checkTrigger = function(ele, name, fromValue, toValue, getTrigger, onTrigger) {
        var prop = this.properties[name];
        var triggerCheck = getTrigger(prop);
        if (ele.removed()) {
          return;
        }
        if (triggerCheck != null && triggerCheck(fromValue, toValue, ele)) {
          onTrigger(prop);
        }
      };
      styfn$8.checkZOrderTrigger = function(ele, name, fromValue, toValue) {
        var _this = this;
        this.checkTrigger(ele, name, fromValue, toValue, function(prop) {
          return prop.triggersZOrder;
        }, function() {
          _this._private.cy.notify("zorder", ele);
        });
      };
      styfn$8.checkBoundsTrigger = function(ele, name, fromValue, toValue) {
        this.checkTrigger(ele, name, fromValue, toValue, function(prop) {
          return prop.triggersBounds;
        }, function(prop) {
          ele.dirtyCompoundBoundsCache();
          ele.dirtyBoundingBoxCache();
        });
      };
      styfn$8.checkConnectedEdgesBoundsTrigger = function(ele, name, fromValue, toValue) {
        this.checkTrigger(ele, name, fromValue, toValue, function(prop) {
          return prop.triggersBoundsOfConnectedEdges;
        }, function(prop) {
          ele.connectedEdges().forEach(function(edge) {
            edge.dirtyBoundingBoxCache();
          });
        });
      };
      styfn$8.checkParallelEdgesBoundsTrigger = function(ele, name, fromValue, toValue) {
        this.checkTrigger(ele, name, fromValue, toValue, function(prop) {
          return prop.triggersBoundsOfParallelEdges;
        }, function(prop) {
          ele.parallelEdges().forEach(function(pllEdge) {
            pllEdge.dirtyBoundingBoxCache();
          });
        });
      };
      styfn$8.checkTriggers = function(ele, name, fromValue, toValue) {
        ele.dirtyStyleCache();
        this.checkZOrderTrigger(ele, name, fromValue, toValue);
        this.checkBoundsTrigger(ele, name, fromValue, toValue);
        this.checkConnectedEdgesBoundsTrigger(ele, name, fromValue, toValue);
        this.checkParallelEdgesBoundsTrigger(ele, name, fromValue, toValue);
      };
      styfn$7 = {};
      styfn$7.applyBypass = function(eles, name, value2, updateTransitions) {
        var self2 = this;
        var props = [];
        var isBypass = true;
        if (name === "*" || name === "**") {
          if (value2 !== void 0) {
            for (var i2 = 0; i2 < self2.properties.length; i2++) {
              var prop = self2.properties[i2];
              var _name = prop.name;
              var parsedProp = this.parse(_name, value2, true);
              if (parsedProp) {
                props.push(parsedProp);
              }
            }
          }
        } else if (string(name)) {
          var _parsedProp = this.parse(name, value2, true);
          if (_parsedProp) {
            props.push(_parsedProp);
          }
        } else if (plainObject(name)) {
          var specifiedProps = name;
          updateTransitions = value2;
          var names = Object.keys(specifiedProps);
          for (var _i = 0; _i < names.length; _i++) {
            var _name2 = names[_i];
            var _value = specifiedProps[_name2];
            if (_value === void 0) {
              _value = specifiedProps[dash2camel(_name2)];
            }
            if (_value !== void 0) {
              var _parsedProp2 = this.parse(_name2, _value, true);
              if (_parsedProp2) {
                props.push(_parsedProp2);
              }
            }
          }
        } else {
          return false;
        }
        if (props.length === 0) {
          return false;
        }
        var ret = false;
        for (var _i2 = 0; _i2 < eles.length; _i2++) {
          var ele = eles[_i2];
          var diffProps = {};
          var diffProp = void 0;
          for (var j3 = 0; j3 < props.length; j3++) {
            var _prop = props[j3];
            if (updateTransitions) {
              var prevProp = ele.pstyle(_prop.name);
              diffProp = diffProps[_prop.name] = {
                prev: prevProp
              };
            }
            ret = this.applyParsedProperty(ele, copy3(_prop)) || ret;
            if (updateTransitions) {
              diffProp.next = ele.pstyle(_prop.name);
            }
          }
          if (ret) {
            this.updateStyleHints(ele);
          }
          if (updateTransitions) {
            this.updateTransitions(ele, diffProps, isBypass);
          }
        }
        return ret;
      };
      styfn$7.overrideBypass = function(eles, name, value2) {
        name = camel2dash(name);
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          var prop = ele._private.style[name];
          var type3 = this.properties[name].type;
          var isColor = type3.color;
          var isMulti = type3.mutiple;
          var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value;
          if (!prop || !prop.bypass) {
            this.applyBypass(ele, name, value2);
          } else {
            prop.value = value2;
            if (prop.pfValue != null) {
              prop.pfValue = value2;
            }
            if (isColor) {
              prop.strValue = "rgb(" + value2.join(",") + ")";
            } else if (isMulti) {
              prop.strValue = value2.join(" ");
            } else {
              prop.strValue = "" + value2;
            }
            this.updateStyleHints(ele);
          }
          this.checkTriggers(ele, name, oldValue, value2);
        }
      };
      styfn$7.removeAllBypasses = function(eles, updateTransitions) {
        return this.removeBypasses(eles, this.propertyNames, updateTransitions);
      };
      styfn$7.removeBypasses = function(eles, props, updateTransitions) {
        var isBypass = true;
        for (var j3 = 0; j3 < eles.length; j3++) {
          var ele = eles[j3];
          var diffProps = {};
          for (var i2 = 0; i2 < props.length; i2++) {
            var name = props[i2];
            var prop = this.properties[name];
            var prevProp = ele.pstyle(prop.name);
            if (!prevProp || !prevProp.bypass) {
              continue;
            }
            var value2 = "";
            var parsedProp = this.parse(name, value2, true);
            var diffProp = diffProps[prop.name] = {
              prev: prevProp
            };
            this.applyParsedProperty(ele, parsedProp);
            diffProp.next = ele.pstyle(prop.name);
          }
          this.updateStyleHints(ele);
          if (updateTransitions) {
            this.updateTransitions(ele, diffProps, isBypass);
          }
        }
      };
      styfn$6 = {};
      styfn$6.getEmSizeInPixels = function() {
        var px = this.containerCss("font-size");
        if (px != null) {
          return parseFloat(px);
        } else {
          return 1;
        }
      };
      styfn$6.containerCss = function(propName) {
        var cy = this._private.cy;
        var domElement3 = cy.container();
        var containerWindow = cy.window();
        if (containerWindow && domElement3 && containerWindow.getComputedStyle) {
          return containerWindow.getComputedStyle(domElement3).getPropertyValue(propName);
        }
      };
      styfn$5 = {};
      styfn$5.getRenderedStyle = function(ele, prop) {
        if (prop) {
          return this.getStylePropertyValue(ele, prop, true);
        } else {
          return this.getRawStyle(ele, true);
        }
      };
      styfn$5.getRawStyle = function(ele, isRenderedVal) {
        var self2 = this;
        ele = ele[0];
        if (ele) {
          var rstyle = {};
          for (var i2 = 0; i2 < self2.properties.length; i2++) {
            var prop = self2.properties[i2];
            var val = self2.getStylePropertyValue(ele, prop.name, isRenderedVal);
            if (val != null) {
              rstyle[prop.name] = val;
              rstyle[dash2camel(prop.name)] = val;
            }
          }
          return rstyle;
        }
      };
      styfn$5.getIndexedStyle = function(ele, property3, subproperty, index) {
        var pstyle = ele.pstyle(property3)[subproperty][index];
        return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property3)[subproperty][0];
      };
      styfn$5.getStylePropertyValue = function(ele, propName, isRenderedVal) {
        var self2 = this;
        ele = ele[0];
        if (ele) {
          var prop = self2.properties[propName];
          if (prop.alias) {
            prop = prop.pointsTo;
          }
          var type3 = prop.type;
          var styleProp = ele.pstyle(prop.name);
          if (styleProp) {
            var value2 = styleProp.value, units = styleProp.units, strValue = styleProp.strValue;
            if (isRenderedVal && type3.number && value2 != null && number$1(value2)) {
              var zoom2 = ele.cy().zoom();
              var getRenderedValue = /* @__PURE__ */ __name(function getRenderedValue2(val) {
                return val * zoom2;
              }, "getRenderedValue");
              var getValueStringWithUnits = /* @__PURE__ */ __name(function getValueStringWithUnits2(val, units2) {
                return getRenderedValue(val) + units2;
              }, "getValueStringWithUnits");
              var isArrayValue = array2(value2);
              var haveUnits = isArrayValue ? units.every(function(u2) {
                return u2 != null;
              }) : units != null;
              if (haveUnits) {
                if (isArrayValue) {
                  return value2.map(function(v3, i2) {
                    return getValueStringWithUnits(v3, units[i2]);
                  }).join(" ");
                } else {
                  return getValueStringWithUnits(value2, units);
                }
              } else {
                if (isArrayValue) {
                  return value2.map(function(v3) {
                    return string(v3) ? v3 : "" + getRenderedValue(v3);
                  }).join(" ");
                } else {
                  return "" + getRenderedValue(value2);
                }
              }
            } else if (strValue != null) {
              return strValue;
            }
          }
          return null;
        }
      };
      styfn$5.getAnimationStartStyle = function(ele, aniProps) {
        var rstyle = {};
        for (var i2 = 0; i2 < aniProps.length; i2++) {
          var aniProp = aniProps[i2];
          var name = aniProp.name;
          var styleProp = ele.pstyle(name);
          if (styleProp !== void 0) {
            if (plainObject(styleProp)) {
              styleProp = this.parse(name, styleProp.strValue);
            } else {
              styleProp = this.parse(name, styleProp);
            }
          }
          if (styleProp) {
            rstyle[name] = styleProp;
          }
        }
        return rstyle;
      };
      styfn$5.getPropsList = function(propsObj) {
        var self2 = this;
        var rstyle = [];
        var style3 = propsObj;
        var props = self2.properties;
        if (style3) {
          var names = Object.keys(style3);
          for (var i2 = 0; i2 < names.length; i2++) {
            var name = names[i2];
            var val = style3[name];
            var prop = props[name] || props[camel2dash(name)];
            var styleProp = this.parse(prop.name, val);
            if (styleProp) {
              rstyle.push(styleProp);
            }
          }
        }
        return rstyle;
      };
      styfn$5.getNonDefaultPropertiesHash = function(ele, propNames, seed) {
        var hash = seed.slice();
        var name, val, strVal, chVal;
        var i2, j3;
        for (i2 = 0; i2 < propNames.length; i2++) {
          name = propNames[i2];
          val = ele.pstyle(name, false);
          if (val == null) {
            continue;
          } else if (val.pfValue != null) {
            hash[0] = hashInt(chVal, hash[0]);
            hash[1] = hashIntAlt(chVal, hash[1]);
          } else {
            strVal = val.strValue;
            for (j3 = 0; j3 < strVal.length; j3++) {
              chVal = strVal.charCodeAt(j3);
              hash[0] = hashInt(chVal, hash[0]);
              hash[1] = hashIntAlt(chVal, hash[1]);
            }
          }
        }
        return hash;
      };
      styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash;
      styfn$4 = {};
      styfn$4.appendFromJson = function(json3) {
        var style3 = this;
        for (var i2 = 0; i2 < json3.length; i2++) {
          var context = json3[i2];
          var selector = context.selector;
          var props = context.style || context.css;
          var names = Object.keys(props);
          style3.selector(selector);
          for (var j3 = 0; j3 < names.length; j3++) {
            var name = names[j3];
            var value2 = props[name];
            style3.css(name, value2);
          }
        }
        return style3;
      };
      styfn$4.fromJson = function(json3) {
        var style3 = this;
        style3.resetToDefault();
        style3.appendFromJson(json3);
        return style3;
      };
      styfn$4.json = function() {
        var json3 = [];
        for (var i2 = this.defaultLength; i2 < this.length; i2++) {
          var cxt = this[i2];
          var selector = cxt.selector;
          var props = cxt.properties;
          var css = {};
          for (var j3 = 0; j3 < props.length; j3++) {
            var prop = props[j3];
            css[prop.name] = prop.strValue;
          }
          json3.push({
            selector: !selector ? "core" : selector.toString(),
            style: css
          });
        }
        return json3;
      };
      styfn$3 = {};
      styfn$3.appendFromString = function(string3) {
        var self2 = this;
        var style3 = this;
        var remaining = "" + string3;
        var selAndBlockStr;
        var blockRem;
        var propAndValStr;
        remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, "");
        function removeSelAndBlockFromRemaining() {
          if (remaining.length > selAndBlockStr.length) {
            remaining = remaining.substr(selAndBlockStr.length);
          } else {
            remaining = "";
          }
        }
        __name(removeSelAndBlockFromRemaining, "removeSelAndBlockFromRemaining");
        function removePropAndValFromRem() {
          if (blockRem.length > propAndValStr.length) {
            blockRem = blockRem.substr(propAndValStr.length);
          } else {
            blockRem = "";
          }
        }
        __name(removePropAndValFromRem, "removePropAndValFromRem");
        for (; ; ) {
          var nothingLeftToParse = remaining.match(/^\s*$/);
          if (nothingLeftToParse) {
            break;
          }
          var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);
          if (!selAndBlock) {
            warn("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + remaining);
            break;
          }
          selAndBlockStr = selAndBlock[0];
          var selectorStr = selAndBlock[1];
          if (selectorStr !== "core") {
            var selector = new Selector(selectorStr);
            if (selector.invalid) {
              warn("Skipping parsing of block: Invalid selector found in string stylesheet: " + selectorStr);
              removeSelAndBlockFromRemaining();
              continue;
            }
          }
          var blockStr = selAndBlock[2];
          var invalidBlock = false;
          blockRem = blockStr;
          var props = [];
          for (; ; ) {
            var _nothingLeftToParse = blockRem.match(/^\s*$/);
            if (_nothingLeftToParse) {
              break;
            }
            var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);
            if (!propAndVal) {
              warn("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + blockStr);
              invalidBlock = true;
              break;
            }
            propAndValStr = propAndVal[0];
            var propStr = propAndVal[1];
            var valStr = propAndVal[2];
            var prop = self2.properties[propStr];
            if (!prop) {
              warn("Skipping property: Invalid property name in: " + propAndValStr);
              removePropAndValFromRem();
              continue;
            }
            var parsedProp = style3.parse(propStr, valStr);
            if (!parsedProp) {
              warn("Skipping property: Invalid property definition in: " + propAndValStr);
              removePropAndValFromRem();
              continue;
            }
            props.push({
              name: propStr,
              val: valStr
            });
            removePropAndValFromRem();
          }
          if (invalidBlock) {
            removeSelAndBlockFromRemaining();
            break;
          }
          style3.selector(selectorStr);
          for (var i2 = 0; i2 < props.length; i2++) {
            var _prop = props[i2];
            style3.css(_prop.name, _prop.val);
          }
          removeSelAndBlockFromRemaining();
        }
        return style3;
      };
      styfn$3.fromString = function(string3) {
        var style3 = this;
        style3.resetToDefault();
        style3.appendFromString(string3);
        return style3;
      };
      styfn$2 = {};
      (function() {
        var number$12 = number6;
        var rgba4 = rgbaNoBackRefs;
        var hsla3 = hslaNoBackRefs;
        var hex3$1 = hex3;
        var hex6$1 = hex6;
        var data6 = /* @__PURE__ */ __name(function data7(prefix) {
          return "^" + prefix + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$";
        }, "data");
        var mapData = /* @__PURE__ */ __name(function mapData2(prefix) {
          var mapArg = number$12 + "|\\w+|" + rgba4 + "|" + hsla3 + "|" + hex3$1 + "|" + hex6$1;
          return "^" + prefix + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + number$12 + ")\\s*\\,\\s*(" + number$12 + ")\\s*,\\s*(" + mapArg + ")\\s*\\,\\s*(" + mapArg + ")\\)$";
        }, "mapData");
        var urlRegexes = [`^url\\s*\\(\\s*['"]?(.+?)['"]?\\s*\\)$`, "^(none)$", "^(.+)$"];
        styfn$2.types = {
          time: {
            number: true,
            min: 0,
            units: "s|ms",
            implicitUnits: "ms"
          },
          percent: {
            number: true,
            min: 0,
            max: 100,
            units: "%",
            implicitUnits: "%"
          },
          percentages: {
            number: true,
            min: 0,
            max: 100,
            units: "%",
            implicitUnits: "%",
            multiple: true
          },
          zeroOneNumber: {
            number: true,
            min: 0,
            max: 1,
            unitless: true
          },
          zeroOneNumbers: {
            number: true,
            min: 0,
            max: 1,
            unitless: true,
            multiple: true
          },
          nOneOneNumber: {
            number: true,
            min: -1,
            max: 1,
            unitless: true
          },
          nonNegativeInt: {
            number: true,
            min: 0,
            integer: true,
            unitless: true
          },
          nonNegativeNumber: {
            number: true,
            min: 0,
            unitless: true
          },
          position: {
            enums: ["parent", "origin"]
          },
          nodeSize: {
            number: true,
            min: 0,
            enums: ["label"]
          },
          number: {
            number: true,
            unitless: true
          },
          numbers: {
            number: true,
            unitless: true,
            multiple: true
          },
          positiveNumber: {
            number: true,
            unitless: true,
            min: 0,
            strictMin: true
          },
          size: {
            number: true,
            min: 0
          },
          bidirectionalSize: {
            number: true
          },
          // allows negative
          bidirectionalSizeMaybePercent: {
            number: true,
            allowPercent: true
          },
          // allows negative
          bidirectionalSizes: {
            number: true,
            multiple: true
          },
          // allows negative
          sizeMaybePercent: {
            number: true,
            min: 0,
            allowPercent: true
          },
          axisDirection: {
            enums: ["horizontal", "leftward", "rightward", "vertical", "upward", "downward", "auto"]
          },
          axisDirectionExplicit: {
            enums: ["leftward", "rightward", "upward", "downward"]
          },
          axisDirectionPrimary: {
            enums: ["horizontal", "vertical"]
          },
          paddingRelativeTo: {
            enums: ["width", "height", "average", "min", "max"]
          },
          bgWH: {
            number: true,
            min: 0,
            allowPercent: true,
            enums: ["auto"],
            multiple: true
          },
          bgPos: {
            number: true,
            allowPercent: true,
            multiple: true
          },
          bgRelativeTo: {
            enums: ["inner", "include-padding"],
            multiple: true
          },
          bgRepeat: {
            enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"],
            multiple: true
          },
          bgFit: {
            enums: ["none", "contain", "cover"],
            multiple: true
          },
          bgCrossOrigin: {
            enums: ["anonymous", "use-credentials", "null"],
            multiple: true
          },
          bgClip: {
            enums: ["none", "node"],
            multiple: true
          },
          bgContainment: {
            enums: ["inside", "over"],
            multiple: true
          },
          boxSelection: {
            enums: ["contain", "overlap", "none"]
          },
          color: {
            color: true
          },
          colors: {
            color: true,
            multiple: true
          },
          fill: {
            enums: ["solid", "linear-gradient", "radial-gradient"]
          },
          bool: {
            enums: ["yes", "no"]
          },
          bools: {
            enums: ["yes", "no"],
            multiple: true
          },
          lineStyle: {
            enums: ["solid", "dotted", "dashed"]
          },
          lineCap: {
            enums: ["butt", "round", "square"]
          },
          linePosition: {
            enums: ["center", "inside", "outside"]
          },
          lineJoin: {
            enums: ["round", "bevel", "miter"]
          },
          borderStyle: {
            enums: ["solid", "dotted", "dashed", "double"]
          },
          curveStyle: {
            enums: ["bezier", "unbundled-bezier", "haystack", "segments", "straight", "straight-triangle", "taxi", "round-segments", "round-taxi"]
          },
          radiusType: {
            enums: ["arc-radius", "influence-radius"],
            multiple: true
          },
          fontFamily: {
            regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'
          },
          fontStyle: {
            enums: ["italic", "normal", "oblique"]
          },
          fontWeight: {
            enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900]
          },
          textDecoration: {
            enums: ["none", "underline", "overline", "line-through"]
          },
          textTransform: {
            enums: ["none", "uppercase", "lowercase"]
          },
          textWrap: {
            enums: ["none", "wrap", "ellipsis"]
          },
          textOverflowWrap: {
            enums: ["whitespace", "anywhere"]
          },
          textBackgroundShape: {
            enums: ["rectangle", "roundrectangle", "round-rectangle", "circle"]
          },
          nodeShape: {
            enums: ["rectangle", "roundrectangle", "round-rectangle", "cutrectangle", "cut-rectangle", "bottomroundrectangle", "bottom-round-rectangle", "barrel", "ellipse", "triangle", "round-triangle", "square", "pentagon", "round-pentagon", "hexagon", "round-hexagon", "concavehexagon", "concave-hexagon", "heptagon", "round-heptagon", "octagon", "round-octagon", "tag", "round-tag", "star", "diamond", "round-diamond", "vee", "rhomboid", "right-rhomboid", "polygon"]
          },
          overlayShape: {
            enums: ["roundrectangle", "round-rectangle", "ellipse"]
          },
          cornerRadius: {
            number: true,
            min: 0,
            units: "px|em",
            implicitUnits: "px",
            enums: ["auto"]
          },
          compoundIncludeLabels: {
            enums: ["include", "exclude"]
          },
          arrowShape: {
            enums: ["tee", "triangle", "triangle-tee", "circle-triangle", "triangle-cross", "triangle-backcurve", "vee", "square", "circle", "diamond", "chevron", "none"]
          },
          arrowFill: {
            enums: ["filled", "hollow"]
          },
          arrowWidth: {
            number: true,
            units: "%|px|em",
            implicitUnits: "px",
            enums: ["match-line"]
          },
          display: {
            enums: ["element", "none"]
          },
          visibility: {
            enums: ["hidden", "visible"]
          },
          zCompoundDepth: {
            enums: ["bottom", "orphan", "auto", "top"]
          },
          zIndexCompare: {
            enums: ["auto", "manual"]
          },
          valign: {
            enums: ["top", "center", "bottom"]
          },
          halign: {
            enums: ["left", "center", "right"]
          },
          justification: {
            enums: ["left", "center", "right", "auto"]
          },
          text: {
            string: true
          },
          data: {
            mapping: true,
            regex: data6("data")
          },
          layoutData: {
            mapping: true,
            regex: data6("layoutData")
          },
          scratch: {
            mapping: true,
            regex: data6("scratch")
          },
          mapData: {
            mapping: true,
            regex: mapData("mapData")
          },
          mapLayoutData: {
            mapping: true,
            regex: mapData("mapLayoutData")
          },
          mapScratch: {
            mapping: true,
            regex: mapData("mapScratch")
          },
          fn: {
            mapping: true,
            fn: true
          },
          url: {
            regexes: urlRegexes,
            singleRegexMatchValue: true
          },
          urls: {
            regexes: urlRegexes,
            singleRegexMatchValue: true,
            multiple: true
          },
          propList: {
            propList: true
          },
          angle: {
            number: true,
            units: "deg|rad",
            implicitUnits: "rad"
          },
          textRotation: {
            number: true,
            units: "deg|rad",
            implicitUnits: "rad",
            enums: ["none", "autorotate"]
          },
          polygonPointList: {
            number: true,
            multiple: true,
            evenMultiple: true,
            min: -1,
            max: 1,
            unitless: true
          },
          edgeDistances: {
            enums: ["intersection", "node-position", "endpoints"]
          },
          edgeEndpoint: {
            number: true,
            multiple: true,
            units: "%|px|em|deg|rad",
            implicitUnits: "px",
            enums: ["inside-to-node", "outside-to-node", "outside-to-node-or-label", "outside-to-line", "outside-to-line-or-label"],
            singleEnum: true,
            validate: /* @__PURE__ */ __name(function validate(valArr, unitsArr) {
              switch (valArr.length) {
                case 2:
                  return unitsArr[0] !== "deg" && unitsArr[0] !== "rad" && unitsArr[1] !== "deg" && unitsArr[1] !== "rad";
                case 1:
                  return string(valArr[0]) || unitsArr[0] === "deg" || unitsArr[0] === "rad";
                default:
                  return false;
              }
            }, "validate")
          },
          easing: {
            regexes: ["^(spring)\\s*\\(\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*\\)$", "^(cubic-bezier)\\s*\\(\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*\\)$"],
            enums: ["linear", "ease", "ease-in", "ease-out", "ease-in-out", "ease-in-sine", "ease-out-sine", "ease-in-out-sine", "ease-in-quad", "ease-out-quad", "ease-in-out-quad", "ease-in-cubic", "ease-out-cubic", "ease-in-out-cubic", "ease-in-quart", "ease-out-quart", "ease-in-out-quart", "ease-in-quint", "ease-out-quint", "ease-in-out-quint", "ease-in-expo", "ease-out-expo", "ease-in-out-expo", "ease-in-circ", "ease-out-circ", "ease-in-out-circ"]
          },
          gradientDirection: {
            enums: [
              "to-bottom",
              "to-top",
              "to-left",
              "to-right",
              "to-bottom-right",
              "to-bottom-left",
              "to-top-right",
              "to-top-left",
              "to-right-bottom",
              "to-left-bottom",
              "to-right-top",
              "to-left-top"
              // different order
            ]
          },
          boundsExpansion: {
            number: true,
            multiple: true,
            min: 0,
            validate: /* @__PURE__ */ __name(function validate(valArr) {
              var length2 = valArr.length;
              return length2 === 1 || length2 === 2 || length2 === 4;
            }, "validate")
          }
        };
        var diff2 = {
          zeroNonZero: /* @__PURE__ */ __name(function zeroNonZero(val1, val2) {
            if ((val1 == null || val2 == null) && val1 !== val2) {
              return true;
            }
            if (val1 == 0 && val2 != 0) {
              return true;
            } else if (val1 != 0 && val2 == 0) {
              return true;
            } else {
              return false;
            }
          }, "zeroNonZero"),
          any: /* @__PURE__ */ __name(function any(val1, val2) {
            return val1 != val2;
          }, "any"),
          emptyNonEmpty: /* @__PURE__ */ __name(function emptyNonEmpty(str1, str2) {
            var empty1 = emptyString(str1);
            var empty22 = emptyString(str2);
            return empty1 && !empty22 || !empty1 && empty22;
          }, "emptyNonEmpty")
        };
        var t4 = styfn$2.types;
        var mainLabel = [{
          name: "label",
          type: t4.text,
          triggersBounds: diff2.any,
          triggersZOrder: diff2.emptyNonEmpty
        }, {
          name: "text-rotation",
          type: t4.textRotation,
          triggersBounds: diff2.any
        }, {
          name: "text-margin-x",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }, {
          name: "text-margin-y",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }];
        var sourceLabel = [{
          name: "source-label",
          type: t4.text,
          triggersBounds: diff2.any
        }, {
          name: "source-text-rotation",
          type: t4.textRotation,
          triggersBounds: diff2.any
        }, {
          name: "source-text-margin-x",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }, {
          name: "source-text-margin-y",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }, {
          name: "source-text-offset",
          type: t4.size,
          triggersBounds: diff2.any
        }];
        var targetLabel = [{
          name: "target-label",
          type: t4.text,
          triggersBounds: diff2.any
        }, {
          name: "target-text-rotation",
          type: t4.textRotation,
          triggersBounds: diff2.any
        }, {
          name: "target-text-margin-x",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }, {
          name: "target-text-margin-y",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }, {
          name: "target-text-offset",
          type: t4.size,
          triggersBounds: diff2.any
        }];
        var labelDimensions = [{
          name: "font-family",
          type: t4.fontFamily,
          triggersBounds: diff2.any
        }, {
          name: "font-style",
          type: t4.fontStyle,
          triggersBounds: diff2.any
        }, {
          name: "font-weight",
          type: t4.fontWeight,
          triggersBounds: diff2.any
        }, {
          name: "font-size",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "text-transform",
          type: t4.textTransform,
          triggersBounds: diff2.any
        }, {
          name: "text-wrap",
          type: t4.textWrap,
          triggersBounds: diff2.any
        }, {
          name: "text-overflow-wrap",
          type: t4.textOverflowWrap,
          triggersBounds: diff2.any
        }, {
          name: "text-max-width",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "text-outline-width",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "line-height",
          type: t4.positiveNumber,
          triggersBounds: diff2.any
        }];
        var commonLabel = [{
          name: "text-valign",
          type: t4.valign,
          triggersBounds: diff2.any
        }, {
          name: "text-halign",
          type: t4.halign,
          triggersBounds: diff2.any
        }, {
          name: "color",
          type: t4.color
        }, {
          name: "text-outline-color",
          type: t4.color
        }, {
          name: "text-outline-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "text-background-color",
          type: t4.color
        }, {
          name: "text-background-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "text-background-padding",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "text-border-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "text-border-color",
          type: t4.color
        }, {
          name: "text-border-width",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "text-border-style",
          type: t4.borderStyle,
          triggersBounds: diff2.any
        }, {
          name: "text-background-shape",
          type: t4.textBackgroundShape,
          triggersBounds: diff2.any
        }, {
          name: "text-justification",
          type: t4.justification
        }, {
          name: "box-select-labels",
          type: t4.bool,
          triggersBounds: diff2.any
        }];
        var behavior = [{
          name: "events",
          type: t4.bool,
          triggersZOrder: diff2.any
        }, {
          name: "text-events",
          type: t4.bool,
          triggersZOrder: diff2.any
        }, {
          name: "box-selection",
          type: t4.boxSelection,
          triggersZOrder: diff2.any
        }];
        var visibility = [{
          name: "display",
          type: t4.display,
          triggersZOrder: diff2.any,
          triggersBounds: diff2.any,
          triggersBoundsOfConnectedEdges: diff2.any,
          triggersBoundsOfParallelEdges: /* @__PURE__ */ __name(function triggersBoundsOfParallelEdges(fromValue, toValue, ele) {
            if (fromValue === toValue) {
              return false;
            }
            return ele.pstyle("curve-style").value === "bezier";
          }, "triggersBoundsOfParallelEdges")
        }, {
          name: "visibility",
          type: t4.visibility,
          triggersZOrder: diff2.any
        }, {
          name: "opacity",
          type: t4.zeroOneNumber,
          triggersZOrder: diff2.zeroNonZero
        }, {
          name: "text-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "min-zoomed-font-size",
          type: t4.size
        }, {
          name: "z-compound-depth",
          type: t4.zCompoundDepth,
          triggersZOrder: diff2.any
        }, {
          name: "z-index-compare",
          type: t4.zIndexCompare,
          triggersZOrder: diff2.any
        }, {
          name: "z-index",
          type: t4.number,
          triggersZOrder: diff2.any
        }];
        var overlay = [{
          name: "overlay-padding",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "overlay-color",
          type: t4.color
        }, {
          name: "overlay-opacity",
          type: t4.zeroOneNumber,
          triggersBounds: diff2.zeroNonZero
        }, {
          name: "overlay-shape",
          type: t4.overlayShape,
          triggersBounds: diff2.any
        }, {
          name: "overlay-corner-radius",
          type: t4.cornerRadius
        }];
        var underlay = [{
          name: "underlay-padding",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "underlay-color",
          type: t4.color
        }, {
          name: "underlay-opacity",
          type: t4.zeroOneNumber,
          triggersBounds: diff2.zeroNonZero
        }, {
          name: "underlay-shape",
          type: t4.overlayShape,
          triggersBounds: diff2.any
        }, {
          name: "underlay-corner-radius",
          type: t4.cornerRadius
        }];
        var transition2 = [{
          name: "transition-property",
          type: t4.propList
        }, {
          name: "transition-duration",
          type: t4.time
        }, {
          name: "transition-delay",
          type: t4.time
        }, {
          name: "transition-timing-function",
          type: t4.easing
        }];
        var nodeSizeHashOverride = /* @__PURE__ */ __name(function nodeSizeHashOverride2(ele, parsedProp) {
          if (parsedProp.value === "label") {
            return -ele.poolIndex();
          } else {
            return parsedProp.pfValue;
          }
        }, "nodeSizeHashOverride");
        var nodeBody = [{
          name: "height",
          type: t4.nodeSize,
          triggersBounds: diff2.any,
          hashOverride: nodeSizeHashOverride
        }, {
          name: "width",
          type: t4.nodeSize,
          triggersBounds: diff2.any,
          hashOverride: nodeSizeHashOverride
        }, {
          name: "shape",
          type: t4.nodeShape,
          triggersBounds: diff2.any
        }, {
          name: "shape-polygon-points",
          type: t4.polygonPointList,
          triggersBounds: diff2.any
        }, {
          name: "corner-radius",
          type: t4.cornerRadius
        }, {
          name: "background-color",
          type: t4.color
        }, {
          name: "background-fill",
          type: t4.fill
        }, {
          name: "background-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "background-blacken",
          type: t4.nOneOneNumber
        }, {
          name: "background-gradient-stop-colors",
          type: t4.colors
        }, {
          name: "background-gradient-stop-positions",
          type: t4.percentages
        }, {
          name: "background-gradient-direction",
          type: t4.gradientDirection
        }, {
          name: "padding",
          type: t4.sizeMaybePercent,
          triggersBounds: diff2.any
        }, {
          name: "padding-relative-to",
          type: t4.paddingRelativeTo,
          triggersBounds: diff2.any
        }, {
          name: "bounds-expansion",
          type: t4.boundsExpansion,
          triggersBounds: diff2.any
        }];
        var nodeBorder = [{
          name: "border-color",
          type: t4.color
        }, {
          name: "border-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "border-width",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "border-style",
          type: t4.borderStyle
        }, {
          name: "border-cap",
          type: t4.lineCap
        }, {
          name: "border-join",
          type: t4.lineJoin
        }, {
          name: "border-dash-pattern",
          type: t4.numbers
        }, {
          name: "border-dash-offset",
          type: t4.number
        }, {
          name: "border-position",
          type: t4.linePosition
        }];
        var nodeOutline = [{
          name: "outline-color",
          type: t4.color
        }, {
          name: "outline-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "outline-width",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "outline-style",
          type: t4.borderStyle
        }, {
          name: "outline-offset",
          type: t4.size,
          triggersBounds: diff2.any
        }];
        var backgroundImage = [{
          name: "background-image",
          type: t4.urls
        }, {
          name: "background-image-crossorigin",
          type: t4.bgCrossOrigin
        }, {
          name: "background-image-opacity",
          type: t4.zeroOneNumbers
        }, {
          name: "background-image-containment",
          type: t4.bgContainment
        }, {
          name: "background-image-smoothing",
          type: t4.bools
        }, {
          name: "background-position-x",
          type: t4.bgPos
        }, {
          name: "background-position-y",
          type: t4.bgPos
        }, {
          name: "background-width-relative-to",
          type: t4.bgRelativeTo
        }, {
          name: "background-height-relative-to",
          type: t4.bgRelativeTo
        }, {
          name: "background-repeat",
          type: t4.bgRepeat
        }, {
          name: "background-fit",
          type: t4.bgFit
        }, {
          name: "background-clip",
          type: t4.bgClip
        }, {
          name: "background-width",
          type: t4.bgWH
        }, {
          name: "background-height",
          type: t4.bgWH
        }, {
          name: "background-offset-x",
          type: t4.bgPos
        }, {
          name: "background-offset-y",
          type: t4.bgPos
        }];
        var compound = [{
          name: "position",
          type: t4.position,
          triggersBounds: diff2.any
        }, {
          name: "compound-sizing-wrt-labels",
          type: t4.compoundIncludeLabels,
          triggersBounds: diff2.any
        }, {
          name: "min-width",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "min-width-bias-left",
          type: t4.sizeMaybePercent,
          triggersBounds: diff2.any
        }, {
          name: "min-width-bias-right",
          type: t4.sizeMaybePercent,
          triggersBounds: diff2.any
        }, {
          name: "min-height",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "min-height-bias-top",
          type: t4.sizeMaybePercent,
          triggersBounds: diff2.any
        }, {
          name: "min-height-bias-bottom",
          type: t4.sizeMaybePercent,
          triggersBounds: diff2.any
        }];
        var edgeLine = [{
          name: "line-style",
          type: t4.lineStyle
        }, {
          name: "line-color",
          type: t4.color
        }, {
          name: "line-fill",
          type: t4.fill
        }, {
          name: "line-cap",
          type: t4.lineCap
        }, {
          name: "line-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "line-dash-pattern",
          type: t4.numbers
        }, {
          name: "line-dash-offset",
          type: t4.number
        }, {
          name: "line-outline-width",
          type: t4.size
        }, {
          name: "line-outline-color",
          type: t4.color
        }, {
          name: "line-gradient-stop-colors",
          type: t4.colors
        }, {
          name: "line-gradient-stop-positions",
          type: t4.percentages
        }, {
          name: "curve-style",
          type: t4.curveStyle,
          triggersBounds: diff2.any,
          triggersBoundsOfParallelEdges: /* @__PURE__ */ __name(function triggersBoundsOfParallelEdges(fromValue, toValue) {
            if (fromValue === toValue) {
              return false;
            }
            return fromValue === "bezier" || // remove from bundle
            toValue === "bezier";
          }, "triggersBoundsOfParallelEdges")
        }, {
          name: "haystack-radius",
          type: t4.zeroOneNumber,
          triggersBounds: diff2.any
        }, {
          name: "source-endpoint",
          type: t4.edgeEndpoint,
          triggersBounds: diff2.any
        }, {
          name: "target-endpoint",
          type: t4.edgeEndpoint,
          triggersBounds: diff2.any
        }, {
          name: "control-point-step-size",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "control-point-distances",
          type: t4.bidirectionalSizes,
          triggersBounds: diff2.any
        }, {
          name: "control-point-weights",
          type: t4.numbers,
          triggersBounds: diff2.any
        }, {
          name: "segment-distances",
          type: t4.bidirectionalSizes,
          triggersBounds: diff2.any
        }, {
          name: "segment-weights",
          type: t4.numbers,
          triggersBounds: diff2.any
        }, {
          name: "segment-radii",
          type: t4.numbers,
          triggersBounds: diff2.any
        }, {
          name: "radius-type",
          type: t4.radiusType,
          triggersBounds: diff2.any
        }, {
          name: "taxi-turn",
          type: t4.bidirectionalSizeMaybePercent,
          triggersBounds: diff2.any
        }, {
          name: "taxi-turn-min-distance",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "taxi-direction",
          type: t4.axisDirection,
          triggersBounds: diff2.any
        }, {
          name: "taxi-radius",
          type: t4.number,
          triggersBounds: diff2.any
        }, {
          name: "edge-distances",
          type: t4.edgeDistances,
          triggersBounds: diff2.any
        }, {
          name: "arrow-scale",
          type: t4.positiveNumber,
          triggersBounds: diff2.any
        }, {
          name: "loop-direction",
          type: t4.angle,
          triggersBounds: diff2.any
        }, {
          name: "loop-sweep",
          type: t4.angle,
          triggersBounds: diff2.any
        }, {
          name: "source-distance-from-node",
          type: t4.size,
          triggersBounds: diff2.any
        }, {
          name: "target-distance-from-node",
          type: t4.size,
          triggersBounds: diff2.any
        }];
        var ghost = [{
          name: "ghost",
          type: t4.bool,
          triggersBounds: diff2.any
        }, {
          name: "ghost-offset-x",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }, {
          name: "ghost-offset-y",
          type: t4.bidirectionalSize,
          triggersBounds: diff2.any
        }, {
          name: "ghost-opacity",
          type: t4.zeroOneNumber
        }];
        var core4 = [{
          name: "selection-box-color",
          type: t4.color
        }, {
          name: "selection-box-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "selection-box-border-color",
          type: t4.color
        }, {
          name: "selection-box-border-width",
          type: t4.size
        }, {
          name: "active-bg-color",
          type: t4.color
        }, {
          name: "active-bg-opacity",
          type: t4.zeroOneNumber
        }, {
          name: "active-bg-size",
          type: t4.size
        }, {
          name: "outside-texture-bg-color",
          type: t4.color
        }, {
          name: "outside-texture-bg-opacity",
          type: t4.zeroOneNumber
        }];
        var pie2 = [];
        styfn$2.pieBackgroundN = 16;
        pie2.push({
          name: "pie-size",
          type: t4.sizeMaybePercent
        });
        pie2.push({
          name: "pie-hole",
          type: t4.sizeMaybePercent
        });
        pie2.push({
          name: "pie-start-angle",
          type: t4.angle
        });
        for (var i2 = 1; i2 <= styfn$2.pieBackgroundN; i2++) {
          pie2.push({
            name: "pie-" + i2 + "-background-color",
            type: t4.color
          });
          pie2.push({
            name: "pie-" + i2 + "-background-size",
            type: t4.percent
          });
          pie2.push({
            name: "pie-" + i2 + "-background-opacity",
            type: t4.zeroOneNumber
          });
        }
        var stripe = [];
        styfn$2.stripeBackgroundN = 16;
        stripe.push({
          name: "stripe-size",
          type: t4.sizeMaybePercent
        });
        stripe.push({
          name: "stripe-direction",
          type: t4.axisDirectionPrimary
        });
        for (var _i = 1; _i <= styfn$2.stripeBackgroundN; _i++) {
          stripe.push({
            name: "stripe-" + _i + "-background-color",
            type: t4.color
          });
          stripe.push({
            name: "stripe-" + _i + "-background-size",
            type: t4.percent
          });
          stripe.push({
            name: "stripe-" + _i + "-background-opacity",
            type: t4.zeroOneNumber
          });
        }
        var edgeArrow = [];
        var arrowPrefixes = styfn$2.arrowPrefixes = ["source", "mid-source", "target", "mid-target"];
        [{
          name: "arrow-shape",
          type: t4.arrowShape,
          triggersBounds: diff2.any
        }, {
          name: "arrow-color",
          type: t4.color
        }, {
          name: "arrow-fill",
          type: t4.arrowFill
        }, {
          name: "arrow-width",
          type: t4.arrowWidth
        }].forEach(function(prop2) {
          arrowPrefixes.forEach(function(prefix) {
            var name = prefix + "-" + prop2.name;
            var type3 = prop2.type, triggersBounds = prop2.triggersBounds;
            edgeArrow.push({
              name,
              type: type3,
              triggersBounds
            });
          });
        }, {});
        var props = styfn$2.properties = [].concat(behavior, transition2, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, nodeOutline, backgroundImage, pie2, stripe, compound, edgeLine, edgeArrow, core4);
        var propGroups = styfn$2.propertyGroups = {
          // common to all eles
          behavior,
          transition: transition2,
          visibility,
          overlay,
          underlay,
          ghost,
          // labels
          commonLabel,
          labelDimensions,
          mainLabel,
          sourceLabel,
          targetLabel,
          // node props
          nodeBody,
          nodeBorder,
          nodeOutline,
          backgroundImage,
          pie: pie2,
          stripe,
          compound,
          // edge props
          edgeLine,
          edgeArrow,
          core: core4
        };
        var propGroupNames = styfn$2.propertyGroupNames = {};
        var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups);
        propGroupKeys.forEach(function(key) {
          propGroupNames[key] = propGroups[key].map(function(prop2) {
            return prop2.name;
          });
          propGroups[key].forEach(function(prop2) {
            return prop2.groupKey = key;
          });
        });
        var aliases = styfn$2.aliases = [{
          name: "content",
          pointsTo: "label"
        }, {
          name: "control-point-distance",
          pointsTo: "control-point-distances"
        }, {
          name: "control-point-weight",
          pointsTo: "control-point-weights"
        }, {
          name: "segment-distance",
          pointsTo: "segment-distances"
        }, {
          name: "segment-weight",
          pointsTo: "segment-weights"
        }, {
          name: "segment-radius",
          pointsTo: "segment-radii"
        }, {
          name: "edge-text-rotation",
          pointsTo: "text-rotation"
        }, {
          name: "padding-left",
          pointsTo: "padding"
        }, {
          name: "padding-right",
          pointsTo: "padding"
        }, {
          name: "padding-top",
          pointsTo: "padding"
        }, {
          name: "padding-bottom",
          pointsTo: "padding"
        }];
        styfn$2.propertyNames = props.map(function(p3) {
          return p3.name;
        });
        for (var _i2 = 0; _i2 < props.length; _i2++) {
          var prop = props[_i2];
          props[prop.name] = prop;
        }
        for (var _i3 = 0; _i3 < aliases.length; _i3++) {
          var alias = aliases[_i3];
          var pointsToProp = props[alias.pointsTo];
          var aliasProp = {
            name: alias.name,
            alias: true,
            pointsTo: pointsToProp
          };
          props.push(aliasProp);
          props[alias.name] = aliasProp;
        }
      })();
      styfn$2.getDefaultProperty = function(name) {
        return this.getDefaultProperties()[name];
      };
      styfn$2.getDefaultProperties = function() {
        var _p = this._private;
        if (_p.defaultProperties != null) {
          return _p.defaultProperties;
        }
        var rawProps = extend4({
          // core props
          "selection-box-color": "#ddd",
          "selection-box-opacity": 0.65,
          "selection-box-border-color": "#aaa",
          "selection-box-border-width": 1,
          "active-bg-color": "black",
          "active-bg-opacity": 0.15,
          "active-bg-size": 30,
          "outside-texture-bg-color": "#000",
          "outside-texture-bg-opacity": 0.125,
          // common node/edge props
          "events": "yes",
          "text-events": "no",
          "text-valign": "top",
          "text-halign": "center",
          "text-justification": "auto",
          "line-height": 1,
          "color": "#000",
          "box-selection": "contain",
          "text-outline-color": "#000",
          "text-outline-width": 0,
          "text-outline-opacity": 1,
          "text-opacity": 1,
          "text-decoration": "none",
          "text-transform": "none",
          "text-wrap": "none",
          "text-overflow-wrap": "whitespace",
          "text-max-width": 9999,
          "text-background-color": "#000",
          "text-background-opacity": 0,
          "text-background-shape": "rectangle",
          "text-background-padding": 0,
          "text-border-opacity": 0,
          "text-border-width": 0,
          "text-border-style": "solid",
          "text-border-color": "#000",
          "font-family": "Helvetica Neue, Helvetica, sans-serif",
          "font-style": "normal",
          "font-weight": "normal",
          "font-size": 16,
          "min-zoomed-font-size": 0,
          "text-rotation": "none",
          "source-text-rotation": "none",
          "target-text-rotation": "none",
          "visibility": "visible",
          "display": "element",
          "opacity": 1,
          "z-compound-depth": "auto",
          "z-index-compare": "auto",
          "z-index": 0,
          "label": "",
          "text-margin-x": 0,
          "text-margin-y": 0,
          "source-label": "",
          "source-text-offset": 0,
          "source-text-margin-x": 0,
          "source-text-margin-y": 0,
          "target-label": "",
          "target-text-offset": 0,
          "target-text-margin-x": 0,
          "target-text-margin-y": 0,
          "overlay-opacity": 0,
          "overlay-color": "#000",
          "overlay-padding": 10,
          "overlay-shape": "round-rectangle",
          "overlay-corner-radius": "auto",
          "underlay-opacity": 0,
          "underlay-color": "#000",
          "underlay-padding": 10,
          "underlay-shape": "round-rectangle",
          "underlay-corner-radius": "auto",
          "transition-property": "none",
          "transition-duration": 0,
          "transition-delay": 0,
          "transition-timing-function": "linear",
          "box-select-labels": "no",
          // node props
          "background-blacken": 0,
          "background-color": "#999",
          "background-fill": "solid",
          "background-opacity": 1,
          "background-image": "none",
          "background-image-crossorigin": "anonymous",
          "background-image-opacity": 1,
          "background-image-containment": "inside",
          "background-image-smoothing": "yes",
          "background-position-x": "50%",
          "background-position-y": "50%",
          "background-offset-x": 0,
          "background-offset-y": 0,
          "background-width-relative-to": "include-padding",
          "background-height-relative-to": "include-padding",
          "background-repeat": "no-repeat",
          "background-fit": "none",
          "background-clip": "node",
          "background-width": "auto",
          "background-height": "auto",
          "border-color": "#000",
          "border-opacity": 1,
          "border-width": 0,
          "border-style": "solid",
          "border-dash-pattern": [4, 2],
          "border-dash-offset": 0,
          "border-cap": "butt",
          "border-join": "miter",
          "border-position": "center",
          "outline-color": "#999",
          "outline-opacity": 1,
          "outline-width": 0,
          "outline-offset": 0,
          "outline-style": "solid",
          "height": 30,
          "width": 30,
          "shape": "ellipse",
          "shape-polygon-points": "-1, -1,   1, -1,   1, 1,   -1, 1",
          "corner-radius": "auto",
          "bounds-expansion": 0,
          // node gradient
          "background-gradient-direction": "to-bottom",
          "background-gradient-stop-colors": "#999",
          "background-gradient-stop-positions": "0%",
          // ghost props
          "ghost": "no",
          "ghost-offset-y": 0,
          "ghost-offset-x": 0,
          "ghost-opacity": 0,
          // compound props
          "padding": 0,
          "padding-relative-to": "width",
          "position": "origin",
          "compound-sizing-wrt-labels": "include",
          "min-width": 0,
          "min-width-bias-left": 0,
          "min-width-bias-right": 0,
          "min-height": 0,
          "min-height-bias-top": 0,
          "min-height-bias-bottom": 0
        }, {
          // node pie bg
          "pie-size": "100%",
          "pie-hole": 0,
          "pie-start-angle": "0deg"
        }, [{
          name: "pie-{{i}}-background-color",
          value: "black"
        }, {
          name: "pie-{{i}}-background-size",
          value: "0%"
        }, {
          name: "pie-{{i}}-background-opacity",
          value: 1
        }].reduce(function(css, prop2) {
          for (var i3 = 1; i3 <= styfn$2.pieBackgroundN; i3++) {
            var name2 = prop2.name.replace("{{i}}", i3);
            var val2 = prop2.value;
            css[name2] = val2;
          }
          return css;
        }, {}), {
          // node stripes bg
          "stripe-size": "100%",
          "stripe-direction": "horizontal"
        }, [{
          name: "stripe-{{i}}-background-color",
          value: "black"
        }, {
          name: "stripe-{{i}}-background-size",
          value: "0%"
        }, {
          name: "stripe-{{i}}-background-opacity",
          value: 1
        }].reduce(function(css, prop2) {
          for (var i3 = 1; i3 <= styfn$2.stripeBackgroundN; i3++) {
            var name2 = prop2.name.replace("{{i}}", i3);
            var val2 = prop2.value;
            css[name2] = val2;
          }
          return css;
        }, {}), {
          // edge props
          "line-style": "solid",
          "line-color": "#999",
          "line-fill": "solid",
          "line-cap": "butt",
          "line-opacity": 1,
          "line-outline-width": 0,
          "line-outline-color": "#000",
          "line-gradient-stop-colors": "#999",
          "line-gradient-stop-positions": "0%",
          "control-point-step-size": 40,
          "control-point-weights": 0.5,
          "segment-weights": 0.5,
          "segment-distances": 20,
          "segment-radii": 15,
          "radius-type": "arc-radius",
          "taxi-turn": "50%",
          "taxi-radius": 15,
          "taxi-turn-min-distance": 10,
          "taxi-direction": "auto",
          "edge-distances": "intersection",
          "curve-style": "haystack",
          "haystack-radius": 0,
          "arrow-scale": 1,
          "loop-direction": "-45deg",
          "loop-sweep": "-90deg",
          "source-distance-from-node": 0,
          "target-distance-from-node": 0,
          "source-endpoint": "outside-to-node",
          "target-endpoint": "outside-to-node",
          "line-dash-pattern": [6, 3],
          "line-dash-offset": 0
        }, [{
          name: "arrow-shape",
          value: "none"
        }, {
          name: "arrow-color",
          value: "#999"
        }, {
          name: "arrow-fill",
          value: "filled"
        }, {
          name: "arrow-width",
          value: 1
        }].reduce(function(css, prop2) {
          styfn$2.arrowPrefixes.forEach(function(prefix) {
            var name2 = prefix + "-" + prop2.name;
            var val2 = prop2.value;
            css[name2] = val2;
          });
          return css;
        }, {}));
        var parsedProps = {};
        for (var i2 = 0; i2 < this.properties.length; i2++) {
          var prop = this.properties[i2];
          if (prop.pointsTo) {
            continue;
          }
          var name = prop.name;
          var val = rawProps[name];
          var parsedProp = this.parse(name, val);
          parsedProps[name] = parsedProp;
        }
        _p.defaultProperties = parsedProps;
        return _p.defaultProperties;
      };
      styfn$2.addDefaultStylesheet = function() {
        this.selector(":parent").css({
          "shape": "rectangle",
          "padding": 10,
          "background-color": "#eee",
          "border-color": "#ccc",
          "border-width": 1
        }).selector("edge").css({
          "width": 3
        }).selector(":loop").css({
          "curve-style": "bezier"
        }).selector("edge:compound").css({
          "curve-style": "bezier",
          "source-endpoint": "outside-to-line",
          "target-endpoint": "outside-to-line"
        }).selector(":selected").css({
          "background-color": "#0169D9",
          "line-color": "#0169D9",
          "source-arrow-color": "#0169D9",
          "target-arrow-color": "#0169D9",
          "mid-source-arrow-color": "#0169D9",
          "mid-target-arrow-color": "#0169D9"
        }).selector(":parent:selected").css({
          "background-color": "#CCE1F9",
          "border-color": "#aec8e5"
        }).selector(":active").css({
          "overlay-color": "black",
          "overlay-padding": 10,
          "overlay-opacity": 0.25
        });
        this.defaultLength = this.length;
      };
      styfn$1 = {};
      styfn$1.parse = function(name, value2, propIsBypass, propIsFlat) {
        var self2 = this;
        if (fn$6(value2)) {
          return self2.parseImplWarn(name, value2, propIsBypass, propIsFlat);
        }
        var flatKey = propIsFlat === "mapping" || propIsFlat === true || propIsFlat === false || propIsFlat == null ? "dontcare" : propIsFlat;
        var bypassKey = propIsBypass ? "t" : "f";
        var valueKey = "" + value2;
        var argHash = hashStrings(name, valueKey, bypassKey, flatKey);
        var propCache = self2.propCache = self2.propCache || [];
        var ret;
        if (!(ret = propCache[argHash])) {
          ret = propCache[argHash] = self2.parseImplWarn(name, value2, propIsBypass, propIsFlat);
        }
        if (propIsBypass || propIsFlat === "mapping") {
          ret = copy3(ret);
          if (ret) {
            ret.value = copy3(ret.value);
          }
        }
        return ret;
      };
      styfn$1.parseImplWarn = function(name, value2, propIsBypass, propIsFlat) {
        var prop = this.parseImpl(name, value2, propIsBypass, propIsFlat);
        if (!prop && value2 != null) {
          warn("The style property `".concat(name, ": ").concat(value2, "` is invalid"));
        }
        if (prop && (prop.name === "width" || prop.name === "height") && value2 === "label") {
          warn("The style value of `label` is deprecated for `" + prop.name + "`");
        }
        return prop;
      };
      styfn$1.parseImpl = function(name, value2, propIsBypass, propIsFlat) {
        var self2 = this;
        name = camel2dash(name);
        var property3 = self2.properties[name];
        var passedValue = value2;
        var types = self2.types;
        if (!property3) {
          return null;
        }
        if (value2 === void 0) {
          return null;
        }
        if (property3.alias) {
          property3 = property3.pointsTo;
          name = property3.name;
        }
        var valueIsString = string(value2);
        if (valueIsString) {
          value2 = value2.trim();
        }
        var type3 = property3.type;
        if (!type3) {
          return null;
        }
        if (propIsBypass && (value2 === "" || value2 === null)) {
          return {
            name,
            value: value2,
            bypass: true,
            deleteBypass: true
          };
        }
        if (fn$6(value2)) {
          return {
            name,
            value: value2,
            strValue: "fn",
            mapped: types.fn,
            bypass: propIsBypass
          };
        }
        var data6, mapData;
        if (!valueIsString || propIsFlat || value2.length < 7 || value2[1] !== "a") ;
        else if (value2.length >= 7 && value2[0] === "d" && (data6 = new RegExp(types.data.regex).exec(value2))) {
          if (propIsBypass) {
            return false;
          }
          var mapped = types.data;
          return {
            name,
            value: data6,
            strValue: "" + value2,
            mapped,
            field: data6[1],
            bypass: propIsBypass
          };
        } else if (value2.length >= 10 && value2[0] === "m" && (mapData = new RegExp(types.mapData.regex).exec(value2))) {
          if (propIsBypass) {
            return false;
          }
          if (type3.multiple) {
            return false;
          }
          var _mapped = types.mapData;
          if (!(type3.color || type3.number)) {
            return false;
          }
          var valueMin = this.parse(name, mapData[4]);
          if (!valueMin || valueMin.mapped) {
            return false;
          }
          var valueMax = this.parse(name, mapData[5]);
          if (!valueMax || valueMax.mapped) {
            return false;
          }
          if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) {
            warn("`" + name + ": " + value2 + "` is not a valid mapper because the output range is zero; converting to `" + name + ": " + valueMin.strValue + "`");
            return this.parse(name, valueMin.strValue);
          } else if (type3.color) {
            var c1 = valueMin.value;
            var c22 = valueMax.value;
            var same2 = c1[0] === c22[0] && c1[1] === c22[1] && c1[2] === c22[2] && // optional alpha
            (c1[3] === c22[3] || (c1[3] == null || c1[3] === 1) && (c22[3] == null || c22[3] === 1));
            if (same2) {
              return false;
            }
          }
          return {
            name,
            value: mapData,
            strValue: "" + value2,
            mapped: _mapped,
            field: mapData[1],
            fieldMin: parseFloat(mapData[2]),
            // min & max are numeric
            fieldMax: parseFloat(mapData[3]),
            valueMin: valueMin.value,
            valueMax: valueMax.value,
            bypass: propIsBypass
          };
        }
        if (type3.multiple && propIsFlat !== "multiple") {
          var vals;
          if (valueIsString) {
            vals = value2.split(/\s+/);
          } else if (array2(value2)) {
            vals = value2;
          } else {
            vals = [value2];
          }
          if (type3.evenMultiple && vals.length % 2 !== 0) {
            return null;
          }
          var valArr = [];
          var unitsArr = [];
          var pfValArr = [];
          var strVal = "";
          var hasEnum = false;
          for (var i2 = 0; i2 < vals.length; i2++) {
            var p3 = self2.parse(name, vals[i2], propIsBypass, "multiple");
            hasEnum = hasEnum || string(p3.value);
            valArr.push(p3.value);
            pfValArr.push(p3.pfValue != null ? p3.pfValue : p3.value);
            unitsArr.push(p3.units);
            strVal += (i2 > 0 ? " " : "") + p3.strValue;
          }
          if (type3.validate && !type3.validate(valArr, unitsArr)) {
            return null;
          }
          if (type3.singleEnum && hasEnum) {
            if (valArr.length === 1 && string(valArr[0])) {
              return {
                name,
                value: valArr[0],
                strValue: valArr[0],
                bypass: propIsBypass
              };
            } else {
              return null;
            }
          }
          return {
            name,
            value: valArr,
            pfValue: pfValArr,
            strValue: strVal,
            bypass: propIsBypass,
            units: unitsArr
          };
        }
        var checkEnums = /* @__PURE__ */ __name(function checkEnums2() {
          for (var _i = 0; _i < type3.enums.length; _i++) {
            var en = type3.enums[_i];
            if (en === value2) {
              return {
                name,
                value: value2,
                strValue: "" + value2,
                bypass: propIsBypass
              };
            }
          }
          return null;
        }, "checkEnums");
        if (type3.number) {
          var units;
          var implicitUnits = "px";
          if (type3.units) {
            units = type3.units;
          }
          if (type3.implicitUnits) {
            implicitUnits = type3.implicitUnits;
          }
          if (!type3.unitless) {
            if (valueIsString) {
              var unitsRegex = "px|em" + (type3.allowPercent ? "|\\%" : "");
              if (units) {
                unitsRegex = units;
              }
              var match3 = value2.match("^(" + number6 + ")(" + unitsRegex + ")?$");
              if (match3) {
                value2 = match3[1];
                units = match3[2] || implicitUnits;
              }
            } else if (!units || type3.implicitUnits) {
              units = implicitUnits;
            }
          }
          value2 = parseFloat(value2);
          if (isNaN(value2) && type3.enums === void 0) {
            return null;
          }
          if (isNaN(value2) && type3.enums !== void 0) {
            value2 = passedValue;
            return checkEnums();
          }
          if (type3.integer && !integer(value2)) {
            return null;
          }
          if (type3.min !== void 0 && (value2 < type3.min || type3.strictMin && value2 === type3.min) || type3.max !== void 0 && (value2 > type3.max || type3.strictMax && value2 === type3.max)) {
            return null;
          }
          var ret = {
            name,
            value: value2,
            strValue: "" + value2 + (units ? units : ""),
            units,
            bypass: propIsBypass
          };
          if (type3.unitless || units !== "px" && units !== "em") {
            ret.pfValue = value2;
          } else {
            ret.pfValue = units === "px" || !units ? value2 : this.getEmSizeInPixels() * value2;
          }
          if (units === "ms" || units === "s") {
            ret.pfValue = units === "ms" ? value2 : 1e3 * value2;
          }
          if (units === "deg" || units === "rad") {
            ret.pfValue = units === "rad" ? value2 : deg2rad(value2);
          }
          if (units === "%") {
            ret.pfValue = value2 / 100;
          }
          return ret;
        } else if (type3.propList) {
          var props = [];
          var propsStr = "" + value2;
          if (propsStr === "none") ;
          else {
            var propsSplit = propsStr.split(/\s*,\s*|\s+/);
            for (var _i2 = 0; _i2 < propsSplit.length; _i2++) {
              var propName = propsSplit[_i2].trim();
              if (self2.properties[propName]) {
                props.push(propName);
              } else {
                warn("`" + propName + "` is not a valid property name");
              }
            }
            if (props.length === 0) {
              return null;
            }
          }
          return {
            name,
            value: props,
            strValue: props.length === 0 ? "none" : props.join(" "),
            bypass: propIsBypass
          };
        } else if (type3.color) {
          var tuple = color2tuple(value2);
          if (!tuple) {
            return null;
          }
          return {
            name,
            value: tuple,
            pfValue: tuple,
            strValue: "rgb(" + tuple[0] + "," + tuple[1] + "," + tuple[2] + ")",
            // n.b. no spaces b/c of multiple support
            bypass: propIsBypass
          };
        } else if (type3.regex || type3.regexes) {
          if (type3.enums) {
            var enumProp = checkEnums();
            if (enumProp) {
              return enumProp;
            }
          }
          var regexes = type3.regexes ? type3.regexes : [type3.regex];
          for (var _i3 = 0; _i3 < regexes.length; _i3++) {
            var regex2 = new RegExp(regexes[_i3]);
            var m3 = regex2.exec(value2);
            if (m3) {
              return {
                name,
                value: type3.singleRegexMatchValue ? m3[1] : m3,
                strValue: "" + value2,
                bypass: propIsBypass
              };
            }
          }
          return null;
        } else if (type3.string) {
          return {
            name,
            value: "" + value2,
            strValue: "" + value2,
            bypass: propIsBypass
          };
        } else if (type3.enums) {
          return checkEnums();
        } else {
          return null;
        }
      };
      _Style = /* @__PURE__ */ __name(function Style2(cy) {
        if (!(this instanceof _Style)) {
          return new _Style(cy);
        }
        if (!core2(cy)) {
          error("A style must have a core reference");
          return;
        }
        this._private = {
          cy,
          coreStyle: {}
        };
        this.length = 0;
        this.resetToDefault();
      }, "Style");
      styfn = _Style.prototype;
      styfn.instanceString = function() {
        return "style";
      };
      styfn.clear = function() {
        var _p = this._private;
        var cy = _p.cy;
        var eles = cy.elements();
        for (var i2 = 0; i2 < this.length; i2++) {
          this[i2] = void 0;
        }
        this.length = 0;
        _p.contextStyles = {};
        _p.propDiffs = {};
        this.cleanElements(eles, true);
        eles.forEach(function(ele) {
          var ele_p = ele[0]._private;
          ele_p.styleDirty = true;
          ele_p.appliedInitStyle = false;
        });
        return this;
      };
      styfn.resetToDefault = function() {
        this.clear();
        this.addDefaultStylesheet();
        return this;
      };
      styfn.core = function(propName) {
        return this._private.coreStyle[propName] || this.getDefaultProperty(propName);
      };
      styfn.selector = function(selectorStr) {
        var selector = selectorStr === "core" ? null : new Selector(selectorStr);
        var i2 = this.length++;
        this[i2] = {
          selector,
          properties: [],
          mappedProperties: [],
          index: i2
        };
        return this;
      };
      styfn.css = function() {
        var self2 = this;
        var args = arguments;
        if (args.length === 1) {
          var map6 = args[0];
          for (var i2 = 0; i2 < self2.properties.length; i2++) {
            var prop = self2.properties[i2];
            var mapVal = map6[prop.name];
            if (mapVal === void 0) {
              mapVal = map6[dash2camel(prop.name)];
            }
            if (mapVal !== void 0) {
              this.cssRule(prop.name, mapVal);
            }
          }
        } else if (args.length === 2) {
          this.cssRule(args[0], args[1]);
        }
        return this;
      };
      styfn.style = styfn.css;
      styfn.cssRule = function(name, value2) {
        var property3 = this.parse(name, value2);
        if (property3) {
          var i2 = this.length - 1;
          this[i2].properties.push(property3);
          this[i2].properties[property3.name] = property3;
          if (property3.name.match(/pie-(\d+)-background-size/) && property3.value) {
            this._private.hasPie = true;
          }
          if (property3.name.match(/stripe-(\d+)-background-size/) && property3.value) {
            this._private.hasStripe = true;
          }
          if (property3.mapped) {
            this[i2].mappedProperties.push(property3);
          }
          var currentSelectorIsCore = !this[i2].selector;
          if (currentSelectorIsCore) {
            this._private.coreStyle[property3.name] = property3;
          }
        }
        return this;
      };
      styfn.append = function(style3) {
        if (stylesheet(style3)) {
          style3.appendToStyle(this);
        } else if (array2(style3)) {
          this.appendFromJson(style3);
        } else if (string(style3)) {
          this.appendFromString(style3);
        }
        return this;
      };
      _Style.fromJson = function(cy, json3) {
        var style3 = new _Style(cy);
        style3.fromJson(json3);
        return style3;
      };
      _Style.fromString = function(cy, string3) {
        return new _Style(cy).fromString(string3);
      };
      [styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function(props) {
        extend4(styfn, props);
      });
      _Style.types = styfn.types;
      _Style.properties = styfn.properties;
      _Style.propertyGroups = styfn.propertyGroups;
      _Style.propertyGroupNames = styfn.propertyGroupNames;
      _Style.propertyGroupKeys = styfn.propertyGroupKeys;
      corefn$2 = {
        style: /* @__PURE__ */ __name(function style2(newStyle) {
          if (newStyle) {
            var s2 = this.setStyle(newStyle);
            s2.update();
          }
          return this._private.style;
        }, "style"),
        setStyle: /* @__PURE__ */ __name(function setStyle(style3) {
          var _p = this._private;
          if (stylesheet(style3)) {
            _p.style = style3.generateStyle(this);
          } else if (array2(style3)) {
            _p.style = _Style.fromJson(this, style3);
          } else if (string(style3)) {
            _p.style = _Style.fromString(this, style3);
          } else {
            _p.style = _Style(this);
          }
          return _p.style;
        }, "setStyle"),
        // e.g. cy.data() changed => recalc ele mappers
        updateStyle: /* @__PURE__ */ __name(function updateStyle2() {
          this.mutableElements().updateStyle();
        }, "updateStyle")
      };
      defaultSelectionType = "single";
      corefn$1 = {
        autolock: /* @__PURE__ */ __name(function autolock(bool2) {
          if (bool2 !== void 0) {
            this._private.autolock = bool2 ? true : false;
          } else {
            return this._private.autolock;
          }
          return this;
        }, "autolock"),
        autoungrabify: /* @__PURE__ */ __name(function autoungrabify(bool2) {
          if (bool2 !== void 0) {
            this._private.autoungrabify = bool2 ? true : false;
          } else {
            return this._private.autoungrabify;
          }
          return this;
        }, "autoungrabify"),
        autounselectify: /* @__PURE__ */ __name(function autounselectify(bool2) {
          if (bool2 !== void 0) {
            this._private.autounselectify = bool2 ? true : false;
          } else {
            return this._private.autounselectify;
          }
          return this;
        }, "autounselectify"),
        selectionType: /* @__PURE__ */ __name(function selectionType(selType) {
          var _p = this._private;
          if (_p.selectionType == null) {
            _p.selectionType = defaultSelectionType;
          }
          if (selType !== void 0) {
            if (selType === "additive" || selType === "single") {
              _p.selectionType = selType;
            }
          } else {
            return _p.selectionType;
          }
          return this;
        }, "selectionType"),
        panningEnabled: /* @__PURE__ */ __name(function panningEnabled(bool2) {
          if (bool2 !== void 0) {
            this._private.panningEnabled = bool2 ? true : false;
          } else {
            return this._private.panningEnabled;
          }
          return this;
        }, "panningEnabled"),
        userPanningEnabled: /* @__PURE__ */ __name(function userPanningEnabled(bool2) {
          if (bool2 !== void 0) {
            this._private.userPanningEnabled = bool2 ? true : false;
          } else {
            return this._private.userPanningEnabled;
          }
          return this;
        }, "userPanningEnabled"),
        zoomingEnabled: /* @__PURE__ */ __name(function zoomingEnabled(bool2) {
          if (bool2 !== void 0) {
            this._private.zoomingEnabled = bool2 ? true : false;
          } else {
            return this._private.zoomingEnabled;
          }
          return this;
        }, "zoomingEnabled"),
        userZoomingEnabled: /* @__PURE__ */ __name(function userZoomingEnabled(bool2) {
          if (bool2 !== void 0) {
            this._private.userZoomingEnabled = bool2 ? true : false;
          } else {
            return this._private.userZoomingEnabled;
          }
          return this;
        }, "userZoomingEnabled"),
        boxSelectionEnabled: /* @__PURE__ */ __name(function boxSelectionEnabled(bool2) {
          if (bool2 !== void 0) {
            this._private.boxSelectionEnabled = bool2 ? true : false;
          } else {
            return this._private.boxSelectionEnabled;
          }
          return this;
        }, "boxSelectionEnabled"),
        pan: /* @__PURE__ */ __name(function pan() {
          var args = arguments;
          var pan2 = this._private.pan;
          var dim, val, dims, x5, y6;
          switch (args.length) {
            case 0:
              return pan2;
            case 1:
              if (string(args[0])) {
                dim = args[0];
                return pan2[dim];
              } else if (plainObject(args[0])) {
                if (!this._private.panningEnabled) {
                  return this;
                }
                dims = args[0];
                x5 = dims.x;
                y6 = dims.y;
                if (number$1(x5)) {
                  pan2.x = x5;
                }
                if (number$1(y6)) {
                  pan2.y = y6;
                }
                this.emit("pan viewport");
              }
              break;
            case 2:
              if (!this._private.panningEnabled) {
                return this;
              }
              dim = args[0];
              val = args[1];
              if ((dim === "x" || dim === "y") && number$1(val)) {
                pan2[dim] = val;
              }
              this.emit("pan viewport");
              break;
          }
          this.notify("viewport");
          return this;
        }, "pan"),
        panBy: /* @__PURE__ */ __name(function panBy(arg0, arg1) {
          var args = arguments;
          var pan2 = this._private.pan;
          var dim, val, dims, x5, y6;
          if (!this._private.panningEnabled) {
            return this;
          }
          switch (args.length) {
            case 1:
              if (plainObject(arg0)) {
                dims = args[0];
                x5 = dims.x;
                y6 = dims.y;
                if (number$1(x5)) {
                  pan2.x += x5;
                }
                if (number$1(y6)) {
                  pan2.y += y6;
                }
                this.emit("pan viewport");
              }
              break;
            case 2:
              dim = arg0;
              val = arg1;
              if ((dim === "x" || dim === "y") && number$1(val)) {
                pan2[dim] += val;
              }
              this.emit("pan viewport");
              break;
          }
          this.notify("viewport");
          return this;
        }, "panBy"),
        gc: /* @__PURE__ */ __name(function gc() {
          this.notify("gc");
        }, "gc"),
        fit: /* @__PURE__ */ __name(function fit(elements2, padding) {
          var viewportState = this.getFitViewport(elements2, padding);
          if (viewportState) {
            var _p = this._private;
            _p.zoom = viewportState.zoom;
            _p.pan = viewportState.pan;
            this.emit("pan zoom viewport");
            this.notify("viewport");
          }
          return this;
        }, "fit"),
        getFitViewport: /* @__PURE__ */ __name(function getFitViewport(elements2, padding) {
          if (number$1(elements2) && padding === void 0) {
            padding = elements2;
            elements2 = void 0;
          }
          if (!this._private.panningEnabled || !this._private.zoomingEnabled) {
            return;
          }
          var bb;
          if (string(elements2)) {
            var sel = elements2;
            elements2 = this.$(sel);
          } else if (boundingBox(elements2)) {
            var bbe = elements2;
            bb = {
              x1: bbe.x1,
              y1: bbe.y1,
              x2: bbe.x2,
              y2: bbe.y2
            };
            bb.w = bb.x2 - bb.x1;
            bb.h = bb.y2 - bb.y1;
          } else if (!elementOrCollection(elements2)) {
            elements2 = this.mutableElements();
          }
          if (elementOrCollection(elements2) && elements2.empty()) {
            return;
          }
          bb = bb || elements2.boundingBox();
          var w4 = this.width();
          var h3 = this.height();
          var zoom2;
          padding = number$1(padding) ? padding : 0;
          if (!isNaN(w4) && !isNaN(h3) && w4 > 0 && h3 > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) {
            zoom2 = Math.min((w4 - 2 * padding) / bb.w, (h3 - 2 * padding) / bb.h);
            zoom2 = zoom2 > this._private.maxZoom ? this._private.maxZoom : zoom2;
            zoom2 = zoom2 < this._private.minZoom ? this._private.minZoom : zoom2;
            var pan2 = {
              // now pan to middle
              x: (w4 - zoom2 * (bb.x1 + bb.x2)) / 2,
              y: (h3 - zoom2 * (bb.y1 + bb.y2)) / 2
            };
            return {
              zoom: zoom2,
              pan: pan2
            };
          }
          return;
        }, "getFitViewport"),
        zoomRange: /* @__PURE__ */ __name(function zoomRange(min10, max10) {
          var _p = this._private;
          if (max10 == null) {
            var opts = min10;
            min10 = opts.min;
            max10 = opts.max;
          }
          if (number$1(min10) && number$1(max10) && min10 <= max10) {
            _p.minZoom = min10;
            _p.maxZoom = max10;
          } else if (number$1(min10) && max10 === void 0 && min10 <= _p.maxZoom) {
            _p.minZoom = min10;
          } else if (number$1(max10) && min10 === void 0 && max10 >= _p.minZoom) {
            _p.maxZoom = max10;
          }
          return this;
        }, "zoomRange"),
        minZoom: /* @__PURE__ */ __name(function minZoom(zoom2) {
          if (zoom2 === void 0) {
            return this._private.minZoom;
          } else {
            return this.zoomRange({
              min: zoom2
            });
          }
        }, "minZoom"),
        maxZoom: /* @__PURE__ */ __name(function maxZoom(zoom2) {
          if (zoom2 === void 0) {
            return this._private.maxZoom;
          } else {
            return this.zoomRange({
              max: zoom2
            });
          }
        }, "maxZoom"),
        getZoomedViewport: /* @__PURE__ */ __name(function getZoomedViewport(params) {
          var _p = this._private;
          var currentPan = _p.pan;
          var currentZoom = _p.zoom;
          var pos;
          var zoom2;
          var bail = false;
          if (!_p.zoomingEnabled) {
            bail = true;
          }
          if (number$1(params)) {
            zoom2 = params;
          } else if (plainObject(params)) {
            zoom2 = params.level;
            if (params.position != null) {
              pos = modelToRenderedPosition$1(params.position, currentZoom, currentPan);
            } else if (params.renderedPosition != null) {
              pos = params.renderedPosition;
            }
            if (pos != null && !_p.panningEnabled) {
              bail = true;
            }
          }
          zoom2 = zoom2 > _p.maxZoom ? _p.maxZoom : zoom2;
          zoom2 = zoom2 < _p.minZoom ? _p.minZoom : zoom2;
          if (bail || !number$1(zoom2) || zoom2 === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) {
            return null;
          }
          if (pos != null) {
            var pan1 = currentPan;
            var zoom1 = currentZoom;
            var zoom22 = zoom2;
            var pan2 = {
              x: -zoom22 / zoom1 * (pos.x - pan1.x) + pos.x,
              y: -zoom22 / zoom1 * (pos.y - pan1.y) + pos.y
            };
            return {
              zoomed: true,
              panned: true,
              zoom: zoom22,
              pan: pan2
            };
          } else {
            return {
              zoomed: true,
              panned: false,
              zoom: zoom2,
              pan: currentPan
            };
          }
        }, "getZoomedViewport"),
        zoom: /* @__PURE__ */ __name(function zoom(params) {
          if (params === void 0) {
            return this._private.zoom;
          } else {
            var vp = this.getZoomedViewport(params);
            var _p = this._private;
            if (vp == null || !vp.zoomed) {
              return this;
            }
            _p.zoom = vp.zoom;
            if (vp.panned) {
              _p.pan.x = vp.pan.x;
              _p.pan.y = vp.pan.y;
            }
            this.emit("zoom" + (vp.panned ? " pan" : "") + " viewport");
            this.notify("viewport");
            return this;
          }
        }, "zoom"),
        viewport: /* @__PURE__ */ __name(function viewport(opts) {
          var _p = this._private;
          var zoomDefd = true;
          var panDefd = true;
          var events = [];
          var zoomFailed = false;
          var panFailed = false;
          if (!opts) {
            return this;
          }
          if (!number$1(opts.zoom)) {
            zoomDefd = false;
          }
          if (!plainObject(opts.pan)) {
            panDefd = false;
          }
          if (!zoomDefd && !panDefd) {
            return this;
          }
          if (zoomDefd) {
            var z3 = opts.zoom;
            if (z3 < _p.minZoom || z3 > _p.maxZoom || !_p.zoomingEnabled) {
              zoomFailed = true;
            } else {
              _p.zoom = z3;
              events.push("zoom");
            }
          }
          if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) {
            var p3 = opts.pan;
            if (number$1(p3.x)) {
              _p.pan.x = p3.x;
              panFailed = false;
            }
            if (number$1(p3.y)) {
              _p.pan.y = p3.y;
              panFailed = false;
            }
            if (!panFailed) {
              events.push("pan");
            }
          }
          if (events.length > 0) {
            events.push("viewport");
            this.emit(events.join(" "));
            this.notify("viewport");
          }
          return this;
        }, "viewport"),
        center: /* @__PURE__ */ __name(function center2(elements2) {
          var pan2 = this.getCenterPan(elements2);
          if (pan2) {
            this._private.pan = pan2;
            this.emit("pan viewport");
            this.notify("viewport");
          }
          return this;
        }, "center"),
        getCenterPan: /* @__PURE__ */ __name(function getCenterPan(elements2, zoom2) {
          if (!this._private.panningEnabled) {
            return;
          }
          if (string(elements2)) {
            var selector = elements2;
            elements2 = this.mutableElements().filter(selector);
          } else if (!elementOrCollection(elements2)) {
            elements2 = this.mutableElements();
          }
          if (elements2.length === 0) {
            return;
          }
          var bb = elements2.boundingBox();
          var w4 = this.width();
          var h3 = this.height();
          zoom2 = zoom2 === void 0 ? this._private.zoom : zoom2;
          var pan2 = {
            // middle
            x: (w4 - zoom2 * (bb.x1 + bb.x2)) / 2,
            y: (h3 - zoom2 * (bb.y1 + bb.y2)) / 2
          };
          return pan2;
        }, "getCenterPan"),
        reset: /* @__PURE__ */ __name(function reset2() {
          if (!this._private.panningEnabled || !this._private.zoomingEnabled) {
            return this;
          }
          this.viewport({
            pan: {
              x: 0,
              y: 0
            },
            zoom: 1
          });
          return this;
        }, "reset"),
        invalidateSize: /* @__PURE__ */ __name(function invalidateSize() {
          this._private.sizeCache = null;
        }, "invalidateSize"),
        size: /* @__PURE__ */ __name(function size3() {
          var _p = this._private;
          var container2 = _p.container;
          var cy = this;
          return _p.sizeCache = _p.sizeCache || (container2 ? (function() {
            var style3 = cy.window().getComputedStyle(container2);
            var val = /* @__PURE__ */ __name(function val2(name) {
              return parseFloat(style3.getPropertyValue(name));
            }, "val");
            return {
              width: container2.clientWidth - val("padding-left") - val("padding-right"),
              height: container2.clientHeight - val("padding-top") - val("padding-bottom")
            };
          })() : {
            // fallback if no container (not 0 b/c can be used for dividing etc)
            width: 1,
            height: 1
          });
        }, "size"),
        width: /* @__PURE__ */ __name(function width2() {
          return this.size().width;
        }, "width"),
        height: /* @__PURE__ */ __name(function height() {
          return this.size().height;
        }, "height"),
        extent: /* @__PURE__ */ __name(function extent() {
          var pan2 = this._private.pan;
          var zoom2 = this._private.zoom;
          var rb = this.renderedExtent();
          var b3 = {
            x1: (rb.x1 - pan2.x) / zoom2,
            x2: (rb.x2 - pan2.x) / zoom2,
            y1: (rb.y1 - pan2.y) / zoom2,
            y2: (rb.y2 - pan2.y) / zoom2
          };
          b3.w = b3.x2 - b3.x1;
          b3.h = b3.y2 - b3.y1;
          return b3;
        }, "extent"),
        renderedExtent: /* @__PURE__ */ __name(function renderedExtent() {
          var width3 = this.width();
          var height2 = this.height();
          return {
            x1: 0,
            y1: 0,
            x2: width3,
            y2: height2,
            w: width3,
            h: height2
          };
        }, "renderedExtent"),
        multiClickDebounceTime: /* @__PURE__ */ __name(function multiClickDebounceTime(_int) {
          if (_int) this._private.multiClickDebounceTime = _int;
          else return this._private.multiClickDebounceTime;
          return this;
        }, "multiClickDebounceTime")
      };
      corefn$1.centre = corefn$1.center;
      corefn$1.autolockNodes = corefn$1.autolock;
      corefn$1.autoungrabifyNodes = corefn$1.autoungrabify;
      fn2 = {
        data: define2.data({
          field: "data",
          bindingEvent: "data",
          allowBinding: true,
          allowSetting: true,
          settingEvent: "data",
          settingTriggersEvent: true,
          triggerFnName: "trigger",
          allowGetting: true,
          updateStyle: true
        }),
        removeData: define2.removeData({
          field: "data",
          event: "data",
          triggerFnName: "trigger",
          triggerEvent: true,
          updateStyle: true
        }),
        scratch: define2.data({
          field: "scratch",
          bindingEvent: "scratch",
          allowBinding: true,
          allowSetting: true,
          settingEvent: "scratch",
          settingTriggersEvent: true,
          triggerFnName: "trigger",
          allowGetting: true,
          updateStyle: true
        }),
        removeScratch: define2.removeData({
          field: "scratch",
          event: "scratch",
          triggerFnName: "trigger",
          triggerEvent: true,
          updateStyle: true
        })
      };
      fn2.attr = fn2.data;
      fn2.removeAttr = fn2.removeData;
      Core = /* @__PURE__ */ __name(function Core2(opts) {
        var cy = this;
        opts = extend4({}, opts);
        var container2 = opts.container;
        if (container2 && !htmlElement(container2) && htmlElement(container2[0])) {
          container2 = container2[0];
        }
        var reg = container2 ? container2._cyreg : null;
        reg = reg || {};
        if (reg && reg.cy) {
          reg.cy.destroy();
          reg = {};
        }
        var readies = reg.readies = reg.readies || [];
        if (container2) {
          container2._cyreg = reg;
        }
        reg.cy = cy;
        var head2 = _window !== void 0 && container2 !== void 0 && !opts.headless;
        var options2 = opts;
        options2.layout = extend4({
          name: head2 ? "grid" : "null"
        }, options2.layout);
        options2.renderer = extend4({
          name: head2 ? "canvas" : "null"
        }, options2.renderer);
        var defVal = /* @__PURE__ */ __name(function defVal2(def, val, altVal) {
          if (val !== void 0) {
            return val;
          } else if (altVal !== void 0) {
            return altVal;
          } else {
            return def;
          }
        }, "defVal");
        var _p = this._private = {
          container: container2,
          // html dom ele container
          ready: false,
          // whether ready has been triggered
          options: options2,
          // cached options
          elements: new Collection(this),
          // elements in the graph
          listeners: [],
          // list of listeners
          aniEles: new Collection(this),
          // elements being animated
          data: options2.data || {},
          // data for the core
          scratch: {},
          // scratch object for core
          layout: null,
          renderer: null,
          destroyed: false,
          // whether destroy was called
          notificationsEnabled: true,
          // whether notifications are sent to the renderer
          minZoom: 1e-50,
          maxZoom: 1e50,
          zoomingEnabled: defVal(true, options2.zoomingEnabled),
          userZoomingEnabled: defVal(true, options2.userZoomingEnabled),
          panningEnabled: defVal(true, options2.panningEnabled),
          userPanningEnabled: defVal(true, options2.userPanningEnabled),
          boxSelectionEnabled: defVal(true, options2.boxSelectionEnabled),
          autolock: defVal(false, options2.autolock, options2.autolockNodes),
          autoungrabify: defVal(false, options2.autoungrabify, options2.autoungrabifyNodes),
          autounselectify: defVal(false, options2.autounselectify),
          styleEnabled: options2.styleEnabled === void 0 ? head2 : options2.styleEnabled,
          zoom: number$1(options2.zoom) ? options2.zoom : 1,
          pan: {
            x: plainObject(options2.pan) && number$1(options2.pan.x) ? options2.pan.x : 0,
            y: plainObject(options2.pan) && number$1(options2.pan.y) ? options2.pan.y : 0
          },
          animation: {
            // object for currently-running animations
            current: [],
            queue: []
          },
          hasCompoundNodes: false,
          multiClickDebounceTime: defVal(250, options2.multiClickDebounceTime)
        };
        this.createEmitter();
        this.selectionType(options2.selectionType);
        this.zoomRange({
          min: options2.minZoom,
          max: options2.maxZoom
        });
        var loadExtData = /* @__PURE__ */ __name(function loadExtData2(extData, next3) {
          var anyIsPromise = extData.some(promise);
          if (anyIsPromise) {
            return Promise$1.all(extData).then(next3);
          } else {
            next3(extData);
          }
        }, "loadExtData");
        if (_p.styleEnabled) {
          cy.setStyle([]);
        }
        var rendererOptions = extend4({}, options2, options2.renderer);
        cy.initRenderer(rendererOptions);
        var setElesAndLayout = /* @__PURE__ */ __name(function setElesAndLayout2(elements2, onload, ondone) {
          cy.notifications(false);
          var oldEles = cy.mutableElements();
          if (oldEles.length > 0) {
            oldEles.remove();
          }
          if (elements2 != null) {
            if (plainObject(elements2) || array2(elements2)) {
              cy.add(elements2);
            }
          }
          cy.one("layoutready", function(e3) {
            cy.notifications(true);
            cy.emit(e3);
            cy.one("load", onload);
            cy.emitAndNotify("load");
          }).one("layoutstop", function() {
            cy.one("done", ondone);
            cy.emit("done");
          });
          var layoutOpts = extend4({}, cy._private.options.layout);
          layoutOpts.eles = cy.elements();
          cy.layout(layoutOpts).run();
        }, "setElesAndLayout");
        loadExtData([options2.style, options2.elements], function(thens) {
          var initStyle = thens[0];
          var initEles = thens[1];
          if (_p.styleEnabled) {
            cy.style().append(initStyle);
          }
          setElesAndLayout(initEles, function() {
            cy.startAnimationLoop();
            _p.ready = true;
            if (fn$6(options2.ready)) {
              cy.on("ready", options2.ready);
            }
            for (var i2 = 0; i2 < readies.length; i2++) {
              var fn3 = readies[i2];
              cy.on("ready", fn3);
            }
            if (reg) {
              reg.readies = [];
            }
            cy.emit("ready");
          }, options2.done);
        });
      }, "Core");
      corefn = Core.prototype;
      extend4(corefn, {
        instanceString: /* @__PURE__ */ __name(function instanceString3() {
          return "core";
        }, "instanceString"),
        isReady: /* @__PURE__ */ __name(function isReady() {
          return this._private.ready;
        }, "isReady"),
        destroyed: /* @__PURE__ */ __name(function destroyed() {
          return this._private.destroyed;
        }, "destroyed"),
        ready: /* @__PURE__ */ __name(function ready(fn3) {
          if (this.isReady()) {
            this.emitter().emit("ready", [], fn3);
          } else {
            this.on("ready", fn3);
          }
          return this;
        }, "ready"),
        destroy: /* @__PURE__ */ __name(function destroy() {
          var cy = this;
          if (cy.destroyed()) return;
          cy.stopAnimationLoop();
          cy.destroyRenderer();
          this.emit("destroy");
          cy._private.destroyed = true;
          return cy;
        }, "destroy"),
        hasElementWithId: /* @__PURE__ */ __name(function hasElementWithId(id41) {
          return this._private.elements.hasElementWithId(id41);
        }, "hasElementWithId"),
        getElementById: /* @__PURE__ */ __name(function getElementById(id41) {
          return this._private.elements.getElementById(id41);
        }, "getElementById"),
        hasCompoundNodes: /* @__PURE__ */ __name(function hasCompoundNodes() {
          return this._private.hasCompoundNodes;
        }, "hasCompoundNodes"),
        headless: /* @__PURE__ */ __name(function headless() {
          return this._private.renderer.isHeadless();
        }, "headless"),
        styleEnabled: /* @__PURE__ */ __name(function styleEnabled() {
          return this._private.styleEnabled;
        }, "styleEnabled"),
        addToPool: /* @__PURE__ */ __name(function addToPool(eles) {
          this._private.elements.merge(eles);
          return this;
        }, "addToPool"),
        removeFromPool: /* @__PURE__ */ __name(function removeFromPool(eles) {
          this._private.elements.unmerge(eles);
          return this;
        }, "removeFromPool"),
        container: /* @__PURE__ */ __name(function container() {
          return this._private.container || null;
        }, "container"),
        window: /* @__PURE__ */ __name(function window2() {
          var container2 = this._private.container;
          if (container2 == null) return _window;
          var ownerDocument = this._private.container.ownerDocument;
          if (ownerDocument === void 0 || ownerDocument == null) {
            return _window;
          }
          return ownerDocument.defaultView || _window;
        }, "window"),
        mount: /* @__PURE__ */ __name(function mount(container2) {
          if (container2 == null) {
            return;
          }
          var cy = this;
          var _p = cy._private;
          var options2 = _p.options;
          if (!htmlElement(container2) && htmlElement(container2[0])) {
            container2 = container2[0];
          }
          cy.stopAnimationLoop();
          cy.destroyRenderer();
          _p.container = container2;
          _p.styleEnabled = true;
          cy.invalidateSize();
          cy.initRenderer(extend4({}, options2, options2.renderer, {
            // allow custom renderer name to be re-used, otherwise use canvas
            name: options2.renderer.name === "null" ? "canvas" : options2.renderer.name
          }));
          cy.startAnimationLoop();
          cy.style(options2.style);
          cy.emit("mount");
          return cy;
        }, "mount"),
        unmount: /* @__PURE__ */ __name(function unmount() {
          var cy = this;
          cy.stopAnimationLoop();
          cy.destroyRenderer();
          cy.initRenderer({
            name: "null"
          });
          cy.emit("unmount");
          return cy;
        }, "unmount"),
        options: /* @__PURE__ */ __name(function options() {
          return copy3(this._private.options);
        }, "options"),
        json: /* @__PURE__ */ __name(function json2(obj) {
          var cy = this;
          var _p = cy._private;
          var eles = cy.mutableElements();
          var getFreshRef = /* @__PURE__ */ __name(function getFreshRef2(ele) {
            return cy.getElementById(ele.id());
          }, "getFreshRef");
          if (plainObject(obj)) {
            cy.startBatch();
            if (obj.elements) {
              var idInJson = {};
              var updateEles = /* @__PURE__ */ __name(function updateEles2(jsons, gr2) {
                var toAdd = [];
                var toMod = [];
                for (var i3 = 0; i3 < jsons.length; i3++) {
                  var json4 = jsons[i3];
                  if (!json4.data.id) {
                    warn("cy.json() cannot handle elements without an ID attribute");
                    continue;
                  }
                  var id41 = "" + json4.data.id;
                  var ele = cy.getElementById(id41);
                  idInJson[id41] = true;
                  if (ele.length !== 0) {
                    toMod.push({
                      ele,
                      json: json4
                    });
                  } else {
                    if (gr2) {
                      json4.group = gr2;
                      toAdd.push(json4);
                    } else {
                      toAdd.push(json4);
                    }
                  }
                }
                cy.add(toAdd);
                for (var _i = 0; _i < toMod.length; _i++) {
                  var _toMod$_i = toMod[_i], _ele = _toMod$_i.ele, _json = _toMod$_i.json;
                  _ele.json(_json);
                }
              }, "updateEles");
              if (array2(obj.elements)) {
                updateEles(obj.elements);
              } else {
                var grs = ["nodes", "edges"];
                for (var i2 = 0; i2 < grs.length; i2++) {
                  var gr = grs[i2];
                  var elements2 = obj.elements[gr];
                  if (array2(elements2)) {
                    updateEles(elements2, gr);
                  }
                }
              }
              var parentsToRemove = cy.collection();
              eles.filter(function(ele) {
                return !idInJson[ele.id()];
              }).forEach(function(ele) {
                if (ele.isParent()) {
                  parentsToRemove.merge(ele);
                } else {
                  ele.remove();
                }
              });
              parentsToRemove.forEach(function(ele) {
                return ele.children().move({
                  parent: null
                });
              });
              parentsToRemove.forEach(function(ele) {
                return getFreshRef(ele).remove();
              });
            }
            if (obj.style) {
              cy.style(obj.style);
            }
            if (obj.zoom != null && obj.zoom !== _p.zoom) {
              cy.zoom(obj.zoom);
            }
            if (obj.pan) {
              if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) {
                cy.pan(obj.pan);
              }
            }
            if (obj.data) {
              cy.data(obj.data);
            }
            var fields = ["minZoom", "maxZoom", "zoomingEnabled", "userZoomingEnabled", "panningEnabled", "userPanningEnabled", "boxSelectionEnabled", "autolock", "autoungrabify", "autounselectify", "multiClickDebounceTime"];
            for (var _i2 = 0; _i2 < fields.length; _i2++) {
              var f2 = fields[_i2];
              if (obj[f2] != null) {
                cy[f2](obj[f2]);
              }
            }
            cy.endBatch();
            return this;
          } else {
            var flat = !!obj;
            var json3 = {};
            if (flat) {
              json3.elements = this.elements().map(function(ele) {
                return ele.json();
              });
            } else {
              json3.elements = {};
              eles.forEach(function(ele) {
                var group2 = ele.group();
                if (!json3.elements[group2]) {
                  json3.elements[group2] = [];
                }
                json3.elements[group2].push(ele.json());
              });
            }
            if (this._private.styleEnabled) {
              json3.style = cy.style().json();
            }
            json3.data = copy3(cy.data());
            var options2 = _p.options;
            json3.zoomingEnabled = _p.zoomingEnabled;
            json3.userZoomingEnabled = _p.userZoomingEnabled;
            json3.zoom = _p.zoom;
            json3.minZoom = _p.minZoom;
            json3.maxZoom = _p.maxZoom;
            json3.panningEnabled = _p.panningEnabled;
            json3.userPanningEnabled = _p.userPanningEnabled;
            json3.pan = copy3(_p.pan);
            json3.boxSelectionEnabled = _p.boxSelectionEnabled;
            json3.renderer = copy3(options2.renderer);
            json3.hideEdgesOnViewport = options2.hideEdgesOnViewport;
            json3.textureOnViewport = options2.textureOnViewport;
            json3.wheelSensitivity = options2.wheelSensitivity;
            json3.motionBlur = options2.motionBlur;
            json3.multiClickDebounceTime = options2.multiClickDebounceTime;
            return json3;
          }
        }, "json")
      });
      corefn.$id = corefn.getElementById;
      [corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn2].forEach(function(props) {
        extend4(corefn, props);
      });
      defaults$7 = {
        fit: true,
        // whether to fit the viewport to the graph
        directed: false,
        // whether the tree is directed downwards (or edges can point in any direction if false)
        direction: "downward",
        // determines the direction in which the tree structure is drawn.  The possible values are 'downward', 'upward', 'rightward', or 'leftward'.
        padding: 30,
        // padding on fit
        circle: false,
        // put depths in concentric circles if true, put depths top down if false
        grid: false,
        // whether to create an even grid into which the DAG is placed (circle:false only)
        spacingFactor: 1.75,
        // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap)
        boundingBox: void 0,
        // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
        avoidOverlap: true,
        // prevents node overlap, may overflow boundingBox if not enough space
        nodeDimensionsIncludeLabels: false,
        // Excludes the label when calculating node bounding boxes for the layout algorithm
        roots: void 0,
        // the roots of the trees
        depthSort: void 0,
        // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') }
        animate: false,
        // whether to transition the node positions
        animationDuration: 500,
        // duration of animation in ms if enabled
        animationEasing: void 0,
        // easing of animation if enabled,
        animateFilter: /* @__PURE__ */ __name(function animateFilter(node2, i2) {
          return true;
        }, "animateFilter"),
        // a function that determines whether the node should be animated.  All nodes animated by default on animate enabled.  Non-animated nodes are positioned immediately when the layout starts
        ready: void 0,
        // callback on layoutready
        stop: void 0,
        // callback on layoutstop
        transform: /* @__PURE__ */ __name(function transform2(node2, position5) {
          return position5;
        }, "transform")
        // transform a given node position. Useful for changing flow direction in discrete layouts
      };
      deprecatedOptionDefaults = {
        maximal: false,
        // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also
        acyclic: false
        // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops
      };
      getInfo = /* @__PURE__ */ __name(function getInfo2(ele) {
        return ele.scratch("breadthfirst");
      }, "getInfo");
      setInfo = /* @__PURE__ */ __name(function setInfo2(ele, obj) {
        return ele.scratch("breadthfirst", obj);
      }, "setInfo");
      __name(BreadthFirstLayout, "BreadthFirstLayout");
      BreadthFirstLayout.prototype.run = function() {
        var options2 = this.options;
        var cy = options2.cy;
        var eles = options2.eles;
        var nodes5 = eles.nodes().filter(function(n3) {
          return n3.isChildless();
        });
        var graph = eles;
        var directed = options2.directed;
        var maximal = options2.acyclic || options2.maximal || options2.maximalAdjustments > 0;
        var hasBoundingBox = !!options2.boundingBox;
        var bb = makeBoundingBox(hasBoundingBox ? options2.boundingBox : structuredClone(cy.extent()));
        var roots;
        if (elementOrCollection(options2.roots)) {
          roots = options2.roots;
        } else if (array2(options2.roots)) {
          var rootsArray = [];
          for (var i2 = 0; i2 < options2.roots.length; i2++) {
            var id41 = options2.roots[i2];
            var ele = cy.getElementById(id41);
            rootsArray.push(ele);
          }
          roots = cy.collection(rootsArray);
        } else if (string(options2.roots)) {
          roots = cy.$(options2.roots);
        } else {
          if (directed) {
            roots = nodes5.roots();
          } else {
            var components3 = eles.components();
            roots = cy.collection();
            var _loop = /* @__PURE__ */ __name(function _loop2() {
              var comp = components3[_i];
              var maxDegree = comp.maxDegree(false);
              var compRoots = comp.filter(function(ele2) {
                return ele2.degree(false) === maxDegree;
              });
              roots = roots.add(compRoots);
            }, "_loop");
            for (var _i = 0; _i < components3.length; _i++) {
              _loop();
            }
          }
        }
        var depths = [];
        var foundByBfs = {};
        var addToDepth = /* @__PURE__ */ __name(function addToDepth2(ele2, d3) {
          if (depths[d3] == null) {
            depths[d3] = [];
          }
          var i3 = depths[d3].length;
          depths[d3].push(ele2);
          setInfo(ele2, {
            index: i3,
            depth: d3
          });
        }, "addToDepth");
        var changeDepth = /* @__PURE__ */ __name(function changeDepth2(ele2, newDepth) {
          var _getInfo = getInfo(ele2), depth = _getInfo.depth, index = _getInfo.index;
          depths[depth][index] = null;
          if (ele2.isChildless()) addToDepth(ele2, newDepth);
        }, "changeDepth");
        graph.bfs({
          roots,
          directed: options2.directed,
          visit: /* @__PURE__ */ __name(function visit(node2, edge, pNode, i3, depth) {
            var ele2 = node2[0];
            var id42 = ele2.id();
            if (ele2.isChildless()) addToDepth(ele2, depth);
            foundByBfs[id42] = true;
          }, "visit")
        });
        var orphanNodes = [];
        for (var _i2 = 0; _i2 < nodes5.length; _i2++) {
          var _ele = nodes5[_i2];
          if (foundByBfs[_ele.id()]) {
            continue;
          } else {
            orphanNodes.push(_ele);
          }
        }
        var assignDepthsAt = /* @__PURE__ */ __name(function assignDepthsAt2(i3) {
          var eles2 = depths[i3];
          for (var j3 = 0; j3 < eles2.length; j3++) {
            var _ele2 = eles2[j3];
            if (_ele2 == null) {
              eles2.splice(j3, 1);
              j3--;
              continue;
            }
            setInfo(_ele2, {
              depth: i3,
              index: j3
            });
          }
        }, "assignDepthsAt");
        var adjustMaximally = /* @__PURE__ */ __name(function adjustMaximally2(ele2, shifted2) {
          var eInfo = getInfo(ele2);
          var incomers = ele2.incomers().filter(function(el) {
            return el.isNode() && eles.has(el);
          });
          var maxDepth = -1;
          var id42 = ele2.id();
          for (var k2 = 0; k2 < incomers.length; k2++) {
            var incmr = incomers[k2];
            var iInfo = getInfo(incmr);
            maxDepth = Math.max(maxDepth, iInfo.depth);
          }
          if (eInfo.depth <= maxDepth) {
            if (!options2.acyclic && shifted2[id42]) {
              return null;
            }
            var newDepth = maxDepth + 1;
            changeDepth(ele2, newDepth);
            shifted2[id42] = newDepth;
            return true;
          }
          return false;
        }, "adjustMaximally");
        if (directed && maximal) {
          var Q3 = [];
          var shifted = {};
          var enqueue = /* @__PURE__ */ __name(function enqueue2(n3) {
            return Q3.push(n3);
          }, "enqueue");
          var dequeue = /* @__PURE__ */ __name(function dequeue2() {
            return Q3.shift();
          }, "dequeue");
          nodes5.forEach(function(n3) {
            return Q3.push(n3);
          });
          while (Q3.length > 0) {
            var _ele3 = dequeue();
            var didShift = adjustMaximally(_ele3, shifted);
            if (didShift) {
              _ele3.outgoers().filter(function(el) {
                return el.isNode() && eles.has(el);
              }).forEach(enqueue);
            } else if (didShift === null) {
              warn("Detected double maximal shift for node `" + _ele3.id() + "`.  Bailing maximal adjustment due to cycle.  Use `options.maximal: true` only on DAGs.");
              break;
            }
          }
        }
        var minDistance = 0;
        if (options2.avoidOverlap) {
          for (var _i3 = 0; _i3 < nodes5.length; _i3++) {
            var n2 = nodes5[_i3];
            var nbb = n2.layoutDimensions(options2);
            var w4 = nbb.w;
            var h3 = nbb.h;
            minDistance = Math.max(minDistance, w4, h3);
          }
        }
        var cachedWeightedPercent = {};
        var getWeightedPercent = /* @__PURE__ */ __name(function getWeightedPercent2(ele2) {
          if (cachedWeightedPercent[ele2.id()]) {
            return cachedWeightedPercent[ele2.id()];
          }
          var eleDepth = getInfo(ele2).depth;
          var neighbors = ele2.neighborhood();
          var percent = 0;
          var samples = 0;
          for (var _i4 = 0; _i4 < neighbors.length; _i4++) {
            var neighbor = neighbors[_i4];
            if (neighbor.isEdge() || neighbor.isParent() || !nodes5.has(neighbor)) {
              continue;
            }
            var bf = getInfo(neighbor);
            if (bf == null) {
              continue;
            }
            var index = bf.index;
            var depth = bf.depth;
            if (index == null || depth == null) {
              continue;
            }
            var nDepth = depths[depth].length;
            if (depth < eleDepth) {
              percent += index / nDepth;
              samples++;
            }
          }
          samples = Math.max(1, samples);
          percent = percent / samples;
          if (samples === 0) {
            percent = 0;
          }
          cachedWeightedPercent[ele2.id()] = percent;
          return percent;
        }, "getWeightedPercent");
        var sortFn = /* @__PURE__ */ __name(function sortFn2(a2, b3) {
          var apct = getWeightedPercent(a2);
          var bpct = getWeightedPercent(b3);
          var diff2 = apct - bpct;
          if (diff2 === 0) {
            return ascending3(a2.id(), b3.id());
          } else {
            return diff2;
          }
        }, "sortFn");
        if (options2.depthSort !== void 0) {
          sortFn = options2.depthSort;
        }
        var depthsLen = depths.length;
        for (var _i5 = 0; _i5 < depthsLen; _i5++) {
          depths[_i5].sort(sortFn);
          assignDepthsAt(_i5);
        }
        var orphanDepth = [];
        for (var _i6 = 0; _i6 < orphanNodes.length; _i6++) {
          orphanDepth.push(orphanNodes[_i6]);
        }
        var assignDepths = /* @__PURE__ */ __name(function assignDepths2() {
          for (var _i7 = 0; _i7 < depthsLen; _i7++) {
            assignDepthsAt(_i7);
          }
        }, "assignDepths");
        if (orphanDepth.length) {
          depths.unshift(orphanDepth);
          depthsLen = depths.length;
          assignDepths();
        }
        var biggestDepthSize = 0;
        for (var _i8 = 0; _i8 < depthsLen; _i8++) {
          biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize);
        }
        var center4 = {
          x: bb.x1 + bb.w / 2,
          y: bb.y1 + bb.h / 2
        };
        var aveNodeSize = nodes5.reduce(function(acc, node2) {
          return (function(box) {
            return {
              w: acc.w === -1 ? box.w : (acc.w + box.w) / 2,
              h: acc.h === -1 ? box.h : (acc.h + box.h) / 2
            };
          })(node2.boundingBox({
            includeLabels: options2.nodeDimensionsIncludeLabels
          }));
        }, {
          w: -1,
          h: -1
        });
        var distanceY = Math.max(
          // only one depth
          depthsLen === 1 ? 0 : (
            // inside a bounding box, no need for top & bottom padding
            hasBoundingBox ? (bb.h - options2.padding * 2 - aveNodeSize.h) / (depthsLen - 1) : (bb.h - options2.padding * 2 - aveNodeSize.h) / (depthsLen + 1)
          ),
          minDistance
        );
        var maxDepthSize = depths.reduce(function(max10, eles2) {
          return Math.max(max10, eles2.length);
        }, 0);
        var getPositionTopBottom = /* @__PURE__ */ __name(function getPositionTopBottom2(ele2) {
          var _getInfo2 = getInfo(ele2), depth = _getInfo2.depth, index = _getInfo2.index;
          if (options2.circle) {
            var radiusStepSize = Math.min(bb.w / 2 / depthsLen, bb.h / 2 / depthsLen);
            radiusStepSize = Math.max(radiusStepSize, minDistance);
            var radius2 = radiusStepSize * depth + radiusStepSize - (depthsLen > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0);
            var theta = 2 * Math.PI / depths[depth].length * index;
            if (depth === 0 && depths[0].length === 1) {
              radius2 = 1;
            }
            return {
              x: center4.x + radius2 * Math.cos(theta),
              y: center4.y + radius2 * Math.sin(theta)
            };
          } else {
            var depthSize = depths[depth].length;
            var distanceX = Math.max(
              // only one depth
              depthSize === 1 ? 0 : (
                // inside a bounding box, no need for left & right padding
                hasBoundingBox ? (bb.w - options2.padding * 2 - aveNodeSize.w) / ((options2.grid ? maxDepthSize : depthSize) - 1) : (bb.w - options2.padding * 2 - aveNodeSize.w) / ((options2.grid ? maxDepthSize : depthSize) + 1)
              ),
              minDistance
            );
            var epos = {
              x: center4.x + (index + 1 - (depthSize + 1) / 2) * distanceX,
              y: center4.y + (depth + 1 - (depthsLen + 1) / 2) * distanceY
            };
            return epos;
          }
        }, "getPositionTopBottom");
        var rotateDegrees = {
          "downward": 0,
          "leftward": 90,
          "upward": 180,
          "rightward": -90
        };
        if (Object.keys(rotateDegrees).indexOf(options2.direction) === -1) {
          error("Invalid direction '".concat(options2.direction, "' specified for breadthfirst layout. Valid values are: ").concat(Object.keys(rotateDegrees).join(", ")));
        }
        var getPosition = /* @__PURE__ */ __name(function getPosition2(ele2) {
          return rotatePosAndSkewByBox(getPositionTopBottom(ele2), bb, rotateDegrees[options2.direction]);
        }, "getPosition");
        eles.nodes().layoutPositions(this, options2, getPosition);
        return this;
      };
      defaults$6 = {
        fit: true,
        // whether to fit the viewport to the graph
        padding: 30,
        // the padding on fit
        boundingBox: void 0,
        // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
        avoidOverlap: true,
        // prevents node overlap, may overflow boundingBox and radius if not enough space
        nodeDimensionsIncludeLabels: false,
        // Excludes the label when calculating node bounding boxes for the layout algorithm
        spacingFactor: void 0,
        // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up
        radius: void 0,
        // the radius of the circle
        startAngle: 3 / 2 * Math.PI,
        // where nodes start in radians
        sweep: void 0,
        // how many radians should be between the first and last node (defaults to full circle)
        clockwise: true,
        // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)
        sort: void 0,
        // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }
        animate: false,
        // whether to transition the node positions
        animationDuration: 500,
        // duration of animation in ms if enabled
        animationEasing: void 0,
        // easing of animation if enabled
        animateFilter: /* @__PURE__ */ __name(function animateFilter2(node2, i2) {
          return true;
        }, "animateFilter"),
        // a function that determines whether the node should be animated.  All nodes animated by default on animate enabled.  Non-animated nodes are positioned immediately when the layout starts
        ready: void 0,
        // callback on layoutready
        stop: void 0,
        // callback on layoutstop
        transform: /* @__PURE__ */ __name(function transform3(node2, position5) {
          return position5;
        }, "transform")
        // transform a given node position. Useful for changing flow direction in discrete layouts 
      };
      __name(CircleLayout, "CircleLayout");
      CircleLayout.prototype.run = function() {
        var params = this.options;
        var options2 = params;
        var cy = params.cy;
        var eles = options2.eles;
        var clockwise = options2.counterclockwise !== void 0 ? !options2.counterclockwise : options2.clockwise;
        var nodes5 = eles.nodes().not(":parent");
        if (options2.sort) {
          nodes5 = nodes5.sort(options2.sort);
        }
        var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : {
          x1: 0,
          y1: 0,
          w: cy.width(),
          h: cy.height()
        });
        var center4 = {
          x: bb.x1 + bb.w / 2,
          y: bb.y1 + bb.h / 2
        };
        var sweep = options2.sweep === void 0 ? 2 * Math.PI - 2 * Math.PI / nodes5.length : options2.sweep;
        var dTheta = sweep / Math.max(1, nodes5.length - 1);
        var r2;
        var minDistance = 0;
        for (var i2 = 0; i2 < nodes5.length; i2++) {
          var n2 = nodes5[i2];
          var nbb = n2.layoutDimensions(options2);
          var w4 = nbb.w;
          var h3 = nbb.h;
          minDistance = Math.max(minDistance, w4, h3);
        }
        if (number$1(options2.radius)) {
          r2 = options2.radius;
        } else if (nodes5.length <= 1) {
          r2 = 0;
        } else {
          r2 = Math.min(bb.h, bb.w) / 2 - minDistance;
        }
        if (nodes5.length > 1 && options2.avoidOverlap) {
          minDistance *= 1.75;
          var dcos = Math.cos(dTheta) - Math.cos(0);
          var dsin = Math.sin(dTheta) - Math.sin(0);
          var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin));
          r2 = Math.max(rMin, r2);
        }
        var getPos = /* @__PURE__ */ __name(function getPos2(ele, i3) {
          var theta = options2.startAngle + i3 * dTheta * (clockwise ? 1 : -1);
          var rx = r2 * Math.cos(theta);
          var ry = r2 * Math.sin(theta);
          var pos = {
            x: center4.x + rx,
            y: center4.y + ry
          };
          return pos;
        }, "getPos");
        eles.nodes().layoutPositions(this, options2, getPos);
        return this;
      };
      defaults$5 = {
        fit: true,
        // whether to fit the viewport to the graph
        padding: 30,
        // the padding on fit
        startAngle: 3 / 2 * Math.PI,
        // where nodes start in radians
        sweep: void 0,
        // how many radians should be between the first and last node (defaults to full circle)
        clockwise: true,
        // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)
        equidistant: false,
        // whether levels have an equal radial distance betwen them, may cause bounding box overflow
        minNodeSpacing: 10,
        // min spacing between outside of nodes (used for radius adjustment)
        boundingBox: void 0,
        // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
        avoidOverlap: true,
        // prevents node overlap, may overflow boundingBox if not enough space
        nodeDimensionsIncludeLabels: false,
        // Excludes the label when calculating node bounding boxes for the layout algorithm
        height: void 0,
        // height of layout area (overrides container height)
        width: void 0,
        // width of layout area (overrides container width)
        spacingFactor: void 0,
        // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up
        concentric: /* @__PURE__ */ __name(function concentric(node2) {
          return node2.degree();
        }, "concentric"),
        levelWidth: /* @__PURE__ */ __name(function levelWidth(nodes5) {
          return nodes5.maxDegree() / 4;
        }, "levelWidth"),
        animate: false,
        // whether to transition the node positions
        animationDuration: 500,
        // duration of animation in ms if enabled
        animationEasing: void 0,
        // easing of animation if enabled
        animateFilter: /* @__PURE__ */ __name(function animateFilter3(node2, i2) {
          return true;
        }, "animateFilter"),
        // a function that determines whether the node should be animated.  All nodes animated by default on animate enabled.  Non-animated nodes are positioned immediately when the layout starts
        ready: void 0,
        // callback on layoutready
        stop: void 0,
        // callback on layoutstop
        transform: /* @__PURE__ */ __name(function transform4(node2, position5) {
          return position5;
        }, "transform")
        // transform a given node position. Useful for changing flow direction in discrete layouts
      };
      __name(ConcentricLayout, "ConcentricLayout");
      ConcentricLayout.prototype.run = function() {
        var params = this.options;
        var options2 = params;
        var clockwise = options2.counterclockwise !== void 0 ? !options2.counterclockwise : options2.clockwise;
        var cy = params.cy;
        var eles = options2.eles;
        var nodes5 = eles.nodes().not(":parent");
        var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : {
          x1: 0,
          y1: 0,
          w: cy.width(),
          h: cy.height()
        });
        var center4 = {
          x: bb.x1 + bb.w / 2,
          y: bb.y1 + bb.h / 2
        };
        var nodeValues = [];
        var maxNodeSize = 0;
        for (var i2 = 0; i2 < nodes5.length; i2++) {
          var node2 = nodes5[i2];
          var value2 = void 0;
          value2 = options2.concentric(node2);
          nodeValues.push({
            value: value2,
            node: node2
          });
          node2._private.scratch.concentric = value2;
        }
        nodes5.updateStyle();
        for (var _i = 0; _i < nodes5.length; _i++) {
          var _node = nodes5[_i];
          var nbb = _node.layoutDimensions(options2);
          maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h);
        }
        nodeValues.sort(function(a2, b3) {
          return b3.value - a2.value;
        });
        var levelWidth2 = options2.levelWidth(nodes5);
        var levels = [[]];
        var currentLevel = levels[0];
        for (var _i2 = 0; _i2 < nodeValues.length; _i2++) {
          var val = nodeValues[_i2];
          if (currentLevel.length > 0) {
            var diff2 = Math.abs(currentLevel[0].value - val.value);
            if (diff2 >= levelWidth2) {
              currentLevel = [];
              levels.push(currentLevel);
            }
          }
          currentLevel.push(val);
        }
        var minDist = maxNodeSize + options2.minNodeSpacing;
        if (!options2.avoidOverlap) {
          var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1;
          var maxR = Math.min(bb.w, bb.h) / 2 - minDist;
          var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0);
          minDist = Math.min(minDist, rStep);
        }
        var r2 = 0;
        for (var _i3 = 0; _i3 < levels.length; _i3++) {
          var level = levels[_i3];
          var sweep = options2.sweep === void 0 ? 2 * Math.PI - 2 * Math.PI / level.length : options2.sweep;
          var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1);
          if (level.length > 1 && options2.avoidOverlap) {
            var dcos = Math.cos(dTheta) - Math.cos(0);
            var dsin = Math.sin(dTheta) - Math.sin(0);
            var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin));
            r2 = Math.max(rMin, r2);
          }
          level.r = r2;
          r2 += minDist;
        }
        if (options2.equidistant) {
          var rDeltaMax = 0;
          var _r = 0;
          for (var _i4 = 0; _i4 < levels.length; _i4++) {
            var _level = levels[_i4];
            var rDelta = _level.r - _r;
            rDeltaMax = Math.max(rDeltaMax, rDelta);
          }
          _r = 0;
          for (var _i5 = 0; _i5 < levels.length; _i5++) {
            var _level2 = levels[_i5];
            if (_i5 === 0) {
              _r = _level2.r;
            }
            _level2.r = _r;
            _r += rDeltaMax;
          }
        }
        var pos = {};
        for (var _i6 = 0; _i6 < levels.length; _i6++) {
          var _level3 = levels[_i6];
          var _dTheta = _level3.dTheta;
          var _r2 = _level3.r;
          for (var j3 = 0; j3 < _level3.length; j3++) {
            var _val = _level3[j3];
            var theta = options2.startAngle + (clockwise ? 1 : -1) * _dTheta * j3;
            var p3 = {
              x: center4.x + _r2 * Math.cos(theta),
              y: center4.y + _r2 * Math.sin(theta)
            };
            pos[_val.node.id()] = p3;
          }
        }
        eles.nodes().layoutPositions(this, options2, function(ele) {
          var id41 = ele.id();
          return pos[id41];
        });
        return this;
      };
      defaults$4 = {
        // Called on `layoutready`
        ready: /* @__PURE__ */ __name(function ready2() {
        }, "ready"),
        // Called on `layoutstop`
        stop: /* @__PURE__ */ __name(function stop3() {
        }, "stop"),
        // Whether to animate while running the layout
        // true : Animate continuously as the layout is running
        // false : Just show the end result
        // 'end' : Animate with the end result, from the initial positions to the end positions
        animate: true,
        // Easing of the animation for animate:'end'
        animationEasing: void 0,
        // The duration of the animation for animate:'end'
        animationDuration: void 0,
        // A function that determines whether the node should be animated
        // All nodes animated by default on animate enabled
        // Non-animated nodes are positioned immediately when the layout starts
        animateFilter: /* @__PURE__ */ __name(function animateFilter4(node2, i2) {
          return true;
        }, "animateFilter"),
        // The layout animates only after this many milliseconds for animate:true
        // (prevents flashing on fast runs)
        animationThreshold: 250,
        // Number of iterations between consecutive screen positions update
        refresh: 20,
        // Whether to fit the network view after when done
        fit: true,
        // Padding on fit
        padding: 30,
        // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
        boundingBox: void 0,
        // Excludes the label when calculating node bounding boxes for the layout algorithm
        nodeDimensionsIncludeLabels: false,
        // Randomize the initial positions of the nodes (true) or use existing positions (false)
        randomize: false,
        // Extra spacing between components in non-compound graphs
        componentSpacing: 40,
        // Node repulsion (non overlapping) multiplier
        nodeRepulsion: /* @__PURE__ */ __name(function nodeRepulsion(node2) {
          return 2048;
        }, "nodeRepulsion"),
        // Node repulsion (overlapping) multiplier
        nodeOverlap: 4,
        // Ideal edge (non nested) length
        idealEdgeLength: /* @__PURE__ */ __name(function idealEdgeLength(edge) {
          return 32;
        }, "idealEdgeLength"),
        // Divisor to compute edge forces
        edgeElasticity: /* @__PURE__ */ __name(function edgeElasticity(edge) {
          return 32;
        }, "edgeElasticity"),
        // Nesting factor (multiplier) to compute ideal edge length for nested edges
        nestingFactor: 1.2,
        // Gravity force (constant)
        gravity: 1,
        // Maximum number of iterations to perform
        numIter: 1e3,
        // Initial temperature (maximum node displacement)
        initialTemp: 1e3,
        // Cooling factor (how the temperature is reduced between consecutive iterations
        coolingFactor: 0.99,
        // Lower temperature threshold (below this point the layout will end)
        minTemp: 1
      };
      __name(CoseLayout, "CoseLayout");
      CoseLayout.prototype.run = function() {
        var options2 = this.options;
        var cy = options2.cy;
        var layout7 = this;
        layout7.stopped = false;
        if (options2.animate === true || options2.animate === false) {
          layout7.emit({
            type: "layoutstart",
            layout: layout7
          });
        }
        if (true === options2.debug) {
          DEBUG = true;
        } else {
          DEBUG = false;
        }
        var layoutInfo = createLayoutInfo(cy, layout7, options2);
        if (DEBUG) {
          printLayoutInfo(layoutInfo);
        }
        if (options2.randomize) {
          randomizePositions(layoutInfo);
        }
        var startTime = performanceNow();
        var refresh = /* @__PURE__ */ __name(function refresh2() {
          refreshPositions(layoutInfo, cy, options2);
          if (true === options2.fit) {
            cy.fit(options2.padding);
          }
        }, "refresh");
        var mainLoop = /* @__PURE__ */ __name(function mainLoop2(i3) {
          if (layout7.stopped || i3 >= options2.numIter) {
            return false;
          }
          step(layoutInfo, options2);
          layoutInfo.temperature = layoutInfo.temperature * options2.coolingFactor;
          if (layoutInfo.temperature < options2.minTemp) {
            return false;
          }
          return true;
        }, "mainLoop");
        var done = /* @__PURE__ */ __name(function done2() {
          if (options2.animate === true || options2.animate === false) {
            refresh();
            layout7.one("layoutstop", options2.stop);
            layout7.emit({
              type: "layoutstop",
              layout: layout7
            });
          } else {
            var nodes5 = options2.eles.nodes();
            var getScaledPos = getScaleInBoundsFn(layoutInfo, options2, nodes5);
            nodes5.layoutPositions(layout7, options2, getScaledPos);
          }
        }, "done");
        var i2 = 0;
        var loopRet = true;
        if (options2.animate === true) {
          var _frame = /* @__PURE__ */ __name(function frame2() {
            var f2 = 0;
            while (loopRet && f2 < options2.refresh) {
              loopRet = mainLoop(i2);
              i2++;
              f2++;
            }
            if (!loopRet) {
              separateComponents(layoutInfo, options2);
              done();
            } else {
              var now3 = performanceNow();
              if (now3 - startTime >= options2.animationThreshold) {
                refresh();
              }
              requestAnimationFrame2(_frame);
            }
          }, "frame");
          _frame();
        } else {
          while (loopRet) {
            loopRet = mainLoop(i2);
            i2++;
          }
          separateComponents(layoutInfo, options2);
          done();
        }
        return this;
      };
      CoseLayout.prototype.stop = function() {
        this.stopped = true;
        if (this.thread) {
          this.thread.stop();
        }
        this.emit("layoutstop");
        return this;
      };
      CoseLayout.prototype.destroy = function() {
        if (this.thread) {
          this.thread.stop();
        }
        return this;
      };
      createLayoutInfo = /* @__PURE__ */ __name(function createLayoutInfo2(cy, layout7, options2) {
        var edges3 = options2.eles.edges();
        var nodes5 = options2.eles.nodes();
        var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : {
          x1: 0,
          y1: 0,
          w: cy.width(),
          h: cy.height()
        });
        var layoutInfo = {
          isCompound: cy.hasCompoundNodes(),
          layoutNodes: [],
          idToIndex: {},
          nodeSize: nodes5.size(),
          graphSet: [],
          indexToGraph: [],
          layoutEdges: [],
          edgeSize: edges3.size(),
          temperature: options2.initialTemp,
          clientWidth: bb.w,
          clientHeight: bb.h,
          boundingBox: bb
        };
        var components3 = options2.eles.components();
        var id2cmptId = {};
        for (var i2 = 0; i2 < components3.length; i2++) {
          var component2 = components3[i2];
          for (var j3 = 0; j3 < component2.length; j3++) {
            var node2 = component2[j3];
            id2cmptId[node2.id()] = i2;
          }
        }
        for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) {
          var n2 = nodes5[i2];
          var nbb = n2.layoutDimensions(options2);
          var tempNode = {};
          tempNode.isLocked = n2.locked();
          tempNode.id = n2.data("id");
          tempNode.parentId = n2.data("parent");
          tempNode.cmptId = id2cmptId[n2.id()];
          tempNode.children = [];
          tempNode.positionX = n2.position("x");
          tempNode.positionY = n2.position("y");
          tempNode.offsetX = 0;
          tempNode.offsetY = 0;
          tempNode.height = nbb.w;
          tempNode.width = nbb.h;
          tempNode.maxX = tempNode.positionX + tempNode.width / 2;
          tempNode.minX = tempNode.positionX - tempNode.width / 2;
          tempNode.maxY = tempNode.positionY + tempNode.height / 2;
          tempNode.minY = tempNode.positionY - tempNode.height / 2;
          tempNode.padLeft = parseFloat(n2.style("padding"));
          tempNode.padRight = parseFloat(n2.style("padding"));
          tempNode.padTop = parseFloat(n2.style("padding"));
          tempNode.padBottom = parseFloat(n2.style("padding"));
          tempNode.nodeRepulsion = fn$6(options2.nodeRepulsion) ? options2.nodeRepulsion(n2) : options2.nodeRepulsion;
          layoutInfo.layoutNodes.push(tempNode);
          layoutInfo.idToIndex[tempNode.id] = i2;
        }
        var queue = [];
        var start3 = 0;
        var end2 = -1;
        var tempGraph = [];
        for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) {
          var n2 = layoutInfo.layoutNodes[i2];
          var p_id = n2.parentId;
          if (null != p_id) {
            layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n2.id);
          } else {
            queue[++end2] = n2.id;
            tempGraph.push(n2.id);
          }
        }
        layoutInfo.graphSet.push(tempGraph);
        while (start3 <= end2) {
          var node_id = queue[start3++];
          var node_ix = layoutInfo.idToIndex[node_id];
          var node2 = layoutInfo.layoutNodes[node_ix];
          var children2 = node2.children;
          if (children2.length > 0) {
            layoutInfo.graphSet.push(children2);
            for (var i2 = 0; i2 < children2.length; i2++) {
              queue[++end2] = children2[i2];
            }
          }
        }
        for (var i2 = 0; i2 < layoutInfo.graphSet.length; i2++) {
          var graph = layoutInfo.graphSet[i2];
          for (var j3 = 0; j3 < graph.length; j3++) {
            var index = layoutInfo.idToIndex[graph[j3]];
            layoutInfo.indexToGraph[index] = i2;
          }
        }
        for (var i2 = 0; i2 < layoutInfo.edgeSize; i2++) {
          var e3 = edges3[i2];
          var tempEdge = {};
          tempEdge.id = e3.data("id");
          tempEdge.sourceId = e3.data("source");
          tempEdge.targetId = e3.data("target");
          var idealLength = fn$6(options2.idealEdgeLength) ? options2.idealEdgeLength(e3) : options2.idealEdgeLength;
          var elasticity = fn$6(options2.edgeElasticity) ? options2.edgeElasticity(e3) : options2.edgeElasticity;
          var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId];
          var targetIx = layoutInfo.idToIndex[tempEdge.targetId];
          var sourceGraph = layoutInfo.indexToGraph[sourceIx];
          var targetGraph = layoutInfo.indexToGraph[targetIx];
          if (sourceGraph != targetGraph) {
            var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo);
            var lcaGraph = layoutInfo.graphSet[lca];
            var depth = 0;
            var tempNode = layoutInfo.layoutNodes[sourceIx];
            while (-1 === lcaGraph.indexOf(tempNode.id)) {
              tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];
              depth++;
            }
            tempNode = layoutInfo.layoutNodes[targetIx];
            while (-1 === lcaGraph.indexOf(tempNode.id)) {
              tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];
              depth++;
            }
            idealLength *= depth * options2.nestingFactor;
          }
          tempEdge.idealLength = idealLength;
          tempEdge.elasticity = elasticity;
          layoutInfo.layoutEdges.push(tempEdge);
        }
        return layoutInfo;
      }, "createLayoutInfo");
      findLCA = /* @__PURE__ */ __name(function findLCA2(node1, node2, layoutInfo) {
        var res = _findLCA_aux(node1, node2, 0, layoutInfo);
        if (2 > res.count) {
          return 0;
        } else {
          return res.graph;
        }
      }, "findLCA");
      _findLCA_aux = /* @__PURE__ */ __name(function findLCA_aux(node1, node2, graphIx, layoutInfo) {
        var graph = layoutInfo.graphSet[graphIx];
        if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) {
          return {
            count: 2,
            graph: graphIx
          };
        }
        var c3 = 0;
        for (var i2 = 0; i2 < graph.length; i2++) {
          var nodeId = graph[i2];
          var nodeIx = layoutInfo.idToIndex[nodeId];
          var children2 = layoutInfo.layoutNodes[nodeIx].children;
          if (0 === children2.length) {
            continue;
          }
          var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children2[0]]];
          var result = _findLCA_aux(node1, node2, childGraphIx, layoutInfo);
          if (0 === result.count) {
            continue;
          } else if (1 === result.count) {
            c3++;
            if (2 === c3) {
              break;
            }
          } else {
            return result;
          }
        }
        return {
          count: c3,
          graph: graphIx
        };
      }, "findLCA_aux");
      randomizePositions = /* @__PURE__ */ __name(function randomizePositions2(layoutInfo, cy) {
        var width3 = layoutInfo.clientWidth;
        var height2 = layoutInfo.clientHeight;
        for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) {
          var n2 = layoutInfo.layoutNodes[i2];
          if (0 === n2.children.length && !n2.isLocked) {
            n2.positionX = Math.random() * width3;
            n2.positionY = Math.random() * height2;
          }
        }
      }, "randomizePositions");
      getScaleInBoundsFn = /* @__PURE__ */ __name(function getScaleInBoundsFn2(layoutInfo, options2, nodes5) {
        var bb = layoutInfo.boundingBox;
        var coseBB = {
          x1: Infinity,
          x2: -Infinity,
          y1: Infinity,
          y2: -Infinity
        };
        if (options2.boundingBox) {
          nodes5.forEach(function(node2) {
            var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node2.data("id")]];
            coseBB.x1 = Math.min(coseBB.x1, lnode.positionX);
            coseBB.x2 = Math.max(coseBB.x2, lnode.positionX);
            coseBB.y1 = Math.min(coseBB.y1, lnode.positionY);
            coseBB.y2 = Math.max(coseBB.y2, lnode.positionY);
          });
          coseBB.w = coseBB.x2 - coseBB.x1;
          coseBB.h = coseBB.y2 - coseBB.y1;
        }
        return function(ele, i2) {
          var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data("id")]];
          if (options2.boundingBox) {
            var pctX = coseBB.w === 0 ? 0.5 : (lnode.positionX - coseBB.x1) / coseBB.w;
            var pctY = coseBB.h === 0 ? 0.5 : (lnode.positionY - coseBB.y1) / coseBB.h;
            return {
              x: bb.x1 + pctX * bb.w,
              y: bb.y1 + pctY * bb.h
            };
          } else {
            return {
              x: lnode.positionX,
              y: lnode.positionY
            };
          }
        };
      }, "getScaleInBoundsFn");
      refreshPositions = /* @__PURE__ */ __name(function refreshPositions2(layoutInfo, cy, options2) {
        var layout7 = options2.layout;
        var nodes5 = options2.eles.nodes();
        var getScaledPos = getScaleInBoundsFn(layoutInfo, options2, nodes5);
        nodes5.positions(getScaledPos);
        if (true !== layoutInfo.ready) {
          layoutInfo.ready = true;
          layout7.one("layoutready", options2.ready);
          layout7.emit({
            type: "layoutready",
            layout: this
          });
        }
      }, "refreshPositions");
      step = /* @__PURE__ */ __name(function step2(layoutInfo, options2, _step) {
        calculateNodeForces(layoutInfo, options2);
        calculateEdgeForces(layoutInfo);
        calculateGravityForces(layoutInfo, options2);
        propagateForces(layoutInfo);
        updatePositions(layoutInfo);
      }, "step");
      calculateNodeForces = /* @__PURE__ */ __name(function calculateNodeForces2(layoutInfo, options2) {
        for (var i2 = 0; i2 < layoutInfo.graphSet.length; i2++) {
          var graph = layoutInfo.graphSet[i2];
          var numNodes = graph.length;
          for (var j3 = 0; j3 < numNodes; j3++) {
            var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j3]]];
            for (var k2 = j3 + 1; k2 < numNodes; k2++) {
              var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k2]]];
              nodeRepulsion2(node1, node2, layoutInfo, options2);
            }
          }
        }
      }, "calculateNodeForces");
      randomDistance = /* @__PURE__ */ __name(function randomDistance2(max10) {
        return -1 + 2 * max10 * Math.random();
      }, "randomDistance");
      nodeRepulsion2 = /* @__PURE__ */ __name(function nodeRepulsion3(node1, node2, layoutInfo, options2) {
        var cmptId1 = node1.cmptId;
        var cmptId2 = node2.cmptId;
        if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) {
          return;
        }
        var directionX = node2.positionX - node1.positionX;
        var directionY = node2.positionY - node1.positionY;
        var maxRandDist = 1;
        if (0 === directionX && 0 === directionY) {
          directionX = randomDistance(maxRandDist);
          directionY = randomDistance(maxRandDist);
        }
        var overlap = nodesOverlap(node1, node2, directionX, directionY);
        if (overlap > 0) {
          var force = options2.nodeOverlap * overlap;
          var distance3 = Math.sqrt(directionX * directionX + directionY * directionY);
          var forceX = force * directionX / distance3;
          var forceY = force * directionY / distance3;
        } else {
          var point1 = findClippingPoint(node1, directionX, directionY);
          var point22 = findClippingPoint(node2, -1 * directionX, -1 * directionY);
          var distanceX = point22.x - point1.x;
          var distanceY = point22.y - point1.y;
          var distanceSqr = distanceX * distanceX + distanceY * distanceY;
          var distance3 = Math.sqrt(distanceSqr);
          var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr;
          var forceX = force * distanceX / distance3;
          var forceY = force * distanceY / distance3;
        }
        if (!node1.isLocked) {
          node1.offsetX -= forceX;
          node1.offsetY -= forceY;
        }
        if (!node2.isLocked) {
          node2.offsetX += forceX;
          node2.offsetY += forceY;
        }
        return;
      }, "nodeRepulsion");
      nodesOverlap = /* @__PURE__ */ __name(function nodesOverlap2(node1, node2, dX, dY) {
        if (dX > 0) {
          var overlapX = node1.maxX - node2.minX;
        } else {
          var overlapX = node2.maxX - node1.minX;
        }
        if (dY > 0) {
          var overlapY = node1.maxY - node2.minY;
        } else {
          var overlapY = node2.maxY - node1.minY;
        }
        if (overlapX >= 0 && overlapY >= 0) {
          return Math.sqrt(overlapX * overlapX + overlapY * overlapY);
        } else {
          return 0;
        }
      }, "nodesOverlap");
      findClippingPoint = /* @__PURE__ */ __name(function findClippingPoint2(node2, dX, dY) {
        var X4 = node2.positionX;
        var Y3 = node2.positionY;
        var H2 = node2.height || 1;
        var W3 = node2.width || 1;
        var dirSlope = dY / dX;
        var nodeSlope = H2 / W3;
        var res = {};
        if (0 === dX && 0 < dY) {
          res.x = X4;
          res.y = Y3 + H2 / 2;
          return res;
        }
        if (0 === dX && 0 > dY) {
          res.x = X4;
          res.y = Y3 + H2 / 2;
          return res;
        }
        if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {
          res.x = X4 + W3 / 2;
          res.y = Y3 + W3 * dY / 2 / dX;
          return res;
        }
        if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {
          res.x = X4 - W3 / 2;
          res.y = Y3 - W3 * dY / 2 / dX;
          return res;
        }
        if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {
          res.x = X4 + H2 * dX / 2 / dY;
          res.y = Y3 + H2 / 2;
          return res;
        }
        if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {
          res.x = X4 - H2 * dX / 2 / dY;
          res.y = Y3 - H2 / 2;
          return res;
        }
        return res;
      }, "findClippingPoint");
      calculateEdgeForces = /* @__PURE__ */ __name(function calculateEdgeForces2(layoutInfo, options2) {
        for (var i2 = 0; i2 < layoutInfo.edgeSize; i2++) {
          var edge = layoutInfo.layoutEdges[i2];
          var sourceIx = layoutInfo.idToIndex[edge.sourceId];
          var source = layoutInfo.layoutNodes[sourceIx];
          var targetIx = layoutInfo.idToIndex[edge.targetId];
          var target = layoutInfo.layoutNodes[targetIx];
          var directionX = target.positionX - source.positionX;
          var directionY = target.positionY - source.positionY;
          if (0 === directionX && 0 === directionY) {
            continue;
          }
          var point1 = findClippingPoint(source, directionX, directionY);
          var point22 = findClippingPoint(target, -1 * directionX, -1 * directionY);
          var lx = point22.x - point1.x;
          var ly = point22.y - point1.y;
          var l4 = Math.sqrt(lx * lx + ly * ly);
          var force = Math.pow(edge.idealLength - l4, 2) / edge.elasticity;
          if (0 !== l4) {
            var forceX = force * lx / l4;
            var forceY = force * ly / l4;
          } else {
            var forceX = 0;
            var forceY = 0;
          }
          if (!source.isLocked) {
            source.offsetX += forceX;
            source.offsetY += forceY;
          }
          if (!target.isLocked) {
            target.offsetX -= forceX;
            target.offsetY -= forceY;
          }
        }
      }, "calculateEdgeForces");
      calculateGravityForces = /* @__PURE__ */ __name(function calculateGravityForces2(layoutInfo, options2) {
        if (options2.gravity === 0) {
          return;
        }
        var distThreshold = 1;
        for (var i2 = 0; i2 < layoutInfo.graphSet.length; i2++) {
          var graph = layoutInfo.graphSet[i2];
          var numNodes = graph.length;
          if (0 === i2) {
            var centerX = layoutInfo.clientHeight / 2;
            var centerY = layoutInfo.clientWidth / 2;
          } else {
            var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]];
            var parent4 = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]];
            var centerX = parent4.positionX;
            var centerY = parent4.positionY;
          }
          for (var j3 = 0; j3 < numNodes; j3++) {
            var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j3]]];
            if (node2.isLocked) {
              continue;
            }
            var dx = centerX - node2.positionX;
            var dy = centerY - node2.positionY;
            var d3 = Math.sqrt(dx * dx + dy * dy);
            if (d3 > distThreshold) {
              var fx = options2.gravity * dx / d3;
              var fy = options2.gravity * dy / d3;
              node2.offsetX += fx;
              node2.offsetY += fy;
            }
          }
        }
      }, "calculateGravityForces");
      propagateForces = /* @__PURE__ */ __name(function propagateForces2(layoutInfo, options2) {
        var queue = [];
        var start3 = 0;
        var end2 = -1;
        queue.push.apply(queue, layoutInfo.graphSet[0]);
        end2 += layoutInfo.graphSet[0].length;
        while (start3 <= end2) {
          var nodeId = queue[start3++];
          var nodeIndex = layoutInfo.idToIndex[nodeId];
          var node2 = layoutInfo.layoutNodes[nodeIndex];
          var children2 = node2.children;
          if (0 < children2.length && !node2.isLocked) {
            var offX = node2.offsetX;
            var offY = node2.offsetY;
            for (var i2 = 0; i2 < children2.length; i2++) {
              var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children2[i2]]];
              childNode.offsetX += offX;
              childNode.offsetY += offY;
              queue[++end2] = children2[i2];
            }
            node2.offsetX = 0;
            node2.offsetY = 0;
          }
        }
      }, "propagateForces");
      updatePositions = /* @__PURE__ */ __name(function updatePositions2(layoutInfo, options2) {
        for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) {
          var n2 = layoutInfo.layoutNodes[i2];
          if (0 < n2.children.length) {
            n2.maxX = void 0;
            n2.minX = void 0;
            n2.maxY = void 0;
            n2.minY = void 0;
          }
        }
        for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) {
          var n2 = layoutInfo.layoutNodes[i2];
          if (0 < n2.children.length || n2.isLocked) {
            continue;
          }
          var tempForce = limitForce(n2.offsetX, n2.offsetY, layoutInfo.temperature);
          n2.positionX += tempForce.x;
          n2.positionY += tempForce.y;
          n2.offsetX = 0;
          n2.offsetY = 0;
          n2.minX = n2.positionX - n2.width;
          n2.maxX = n2.positionX + n2.width;
          n2.minY = n2.positionY - n2.height;
          n2.maxY = n2.positionY + n2.height;
          _updateAncestryBoundaries(n2, layoutInfo);
        }
        for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) {
          var n2 = layoutInfo.layoutNodes[i2];
          if (0 < n2.children.length && !n2.isLocked) {
            n2.positionX = (n2.maxX + n2.minX) / 2;
            n2.positionY = (n2.maxY + n2.minY) / 2;
            n2.width = n2.maxX - n2.minX;
            n2.height = n2.maxY - n2.minY;
          }
        }
      }, "updatePositions");
      limitForce = /* @__PURE__ */ __name(function limitForce2(forceX, forceY, max10) {
        var force = Math.sqrt(forceX * forceX + forceY * forceY);
        if (force > max10) {
          var res = {
            x: max10 * forceX / force,
            y: max10 * forceY / force
          };
        } else {
          var res = {
            x: forceX,
            y: forceY
          };
        }
        return res;
      }, "limitForce");
      _updateAncestryBoundaries = /* @__PURE__ */ __name(function updateAncestryBoundaries(node2, layoutInfo) {
        var parentId = node2.parentId;
        if (null == parentId) {
          return;
        }
        var p3 = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]];
        var flag = false;
        if (null == p3.maxX || node2.maxX + p3.padRight > p3.maxX) {
          p3.maxX = node2.maxX + p3.padRight;
          flag = true;
        }
        if (null == p3.minX || node2.minX - p3.padLeft < p3.minX) {
          p3.minX = node2.minX - p3.padLeft;
          flag = true;
        }
        if (null == p3.maxY || node2.maxY + p3.padBottom > p3.maxY) {
          p3.maxY = node2.maxY + p3.padBottom;
          flag = true;
        }
        if (null == p3.minY || node2.minY - p3.padTop < p3.minY) {
          p3.minY = node2.minY - p3.padTop;
          flag = true;
        }
        if (flag) {
          return _updateAncestryBoundaries(p3, layoutInfo);
        }
        return;
      }, "updateAncestryBoundaries");
      separateComponents = /* @__PURE__ */ __name(function separateComponents2(layoutInfo, options2) {
        var nodes5 = layoutInfo.layoutNodes;
        var components3 = [];
        for (var i2 = 0; i2 < nodes5.length; i2++) {
          var node2 = nodes5[i2];
          var cid = node2.cmptId;
          var component2 = components3[cid] = components3[cid] || [];
          component2.push(node2);
        }
        var totalA = 0;
        for (var i2 = 0; i2 < components3.length; i2++) {
          var c3 = components3[i2];
          if (!c3) {
            continue;
          }
          c3.x1 = Infinity;
          c3.x2 = -Infinity;
          c3.y1 = Infinity;
          c3.y2 = -Infinity;
          for (var j3 = 0; j3 < c3.length; j3++) {
            var n2 = c3[j3];
            c3.x1 = Math.min(c3.x1, n2.positionX - n2.width / 2);
            c3.x2 = Math.max(c3.x2, n2.positionX + n2.width / 2);
            c3.y1 = Math.min(c3.y1, n2.positionY - n2.height / 2);
            c3.y2 = Math.max(c3.y2, n2.positionY + n2.height / 2);
          }
          c3.w = c3.x2 - c3.x1;
          c3.h = c3.y2 - c3.y1;
          totalA += c3.w * c3.h;
        }
        components3.sort(function(c1, c22) {
          return c22.w * c22.h - c1.w * c1.h;
        });
        var x5 = 0;
        var y6 = 0;
        var usedW = 0;
        var rowH = 0;
        var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight;
        for (var i2 = 0; i2 < components3.length; i2++) {
          var c3 = components3[i2];
          if (!c3) {
            continue;
          }
          for (var j3 = 0; j3 < c3.length; j3++) {
            var n2 = c3[j3];
            if (!n2.isLocked) {
              n2.positionX += x5 - c3.x1;
              n2.positionY += y6 - c3.y1;
            }
          }
          x5 += c3.w + options2.componentSpacing;
          usedW += c3.w + options2.componentSpacing;
          rowH = Math.max(rowH, c3.h);
          if (usedW > maxRowW) {
            y6 += rowH + options2.componentSpacing;
            x5 = 0;
            usedW = 0;
            rowH = 0;
          }
        }
      }, "separateComponents");
      defaults$3 = {
        fit: true,
        // whether to fit the viewport to the graph
        padding: 30,
        // padding used on fit
        boundingBox: void 0,
        // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
        avoidOverlap: true,
        // prevents node overlap, may overflow boundingBox if not enough space
        avoidOverlapPadding: 10,
        // extra spacing around nodes when avoidOverlap: true
        nodeDimensionsIncludeLabels: false,
        // Excludes the label when calculating node bounding boxes for the layout algorithm
        spacingFactor: void 0,
        // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up
        condense: false,
        // uses all available space on false, uses minimal space on true
        rows: void 0,
        // force num of rows in the grid
        cols: void 0,
        // force num of columns in the grid
        position: /* @__PURE__ */ __name(function position3(node2) {
        }, "position"),
        // returns { row, col } for element
        sort: void 0,
        // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }
        animate: false,
        // whether to transition the node positions
        animationDuration: 500,
        // duration of animation in ms if enabled
        animationEasing: void 0,
        // easing of animation if enabled
        animateFilter: /* @__PURE__ */ __name(function animateFilter5(node2, i2) {
          return true;
        }, "animateFilter"),
        // a function that determines whether the node should be animated.  All nodes animated by default on animate enabled.  Non-animated nodes are positioned immediately when the layout starts
        ready: void 0,
        // callback on layoutready
        stop: void 0,
        // callback on layoutstop
        transform: /* @__PURE__ */ __name(function transform5(node2, position5) {
          return position5;
        }, "transform")
        // transform a given node position. Useful for changing flow direction in discrete layouts 
      };
      __name(GridLayout, "GridLayout");
      GridLayout.prototype.run = function() {
        var params = this.options;
        var options2 = params;
        var cy = params.cy;
        var eles = options2.eles;
        var nodes5 = eles.nodes().not(":parent");
        if (options2.sort) {
          nodes5 = nodes5.sort(options2.sort);
        }
        var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : {
          x1: 0,
          y1: 0,
          w: cy.width(),
          h: cy.height()
        });
        if (bb.h === 0 || bb.w === 0) {
          eles.nodes().layoutPositions(this, options2, function(ele) {
            return {
              x: bb.x1,
              y: bb.y1
            };
          });
        } else {
          var cells = nodes5.size();
          var splits = Math.sqrt(cells * bb.h / bb.w);
          var rows = Math.round(splits);
          var cols = Math.round(bb.w / bb.h * splits);
          var small = /* @__PURE__ */ __name(function small2(val) {
            if (val == null) {
              return Math.min(rows, cols);
            } else {
              var min10 = Math.min(rows, cols);
              if (min10 == rows) {
                rows = val;
              } else {
                cols = val;
              }
            }
          }, "small");
          var large = /* @__PURE__ */ __name(function large2(val) {
            if (val == null) {
              return Math.max(rows, cols);
            } else {
              var max10 = Math.max(rows, cols);
              if (max10 == rows) {
                rows = val;
              } else {
                cols = val;
              }
            }
          }, "large");
          var oRows = options2.rows;
          var oCols = options2.cols != null ? options2.cols : options2.columns;
          if (oRows != null && oCols != null) {
            rows = oRows;
            cols = oCols;
          } else if (oRows != null && oCols == null) {
            rows = oRows;
            cols = Math.ceil(cells / rows);
          } else if (oRows == null && oCols != null) {
            cols = oCols;
            rows = Math.ceil(cells / cols);
          } else if (cols * rows > cells) {
            var sm = small();
            var lg = large();
            if ((sm - 1) * lg >= cells) {
              small(sm - 1);
            } else if ((lg - 1) * sm >= cells) {
              large(lg - 1);
            }
          } else {
            while (cols * rows < cells) {
              var _sm = small();
              var _lg = large();
              if ((_lg + 1) * _sm >= cells) {
                large(_lg + 1);
              } else {
                small(_sm + 1);
              }
            }
          }
          var cellWidth = bb.w / cols;
          var cellHeight = bb.h / rows;
          if (options2.condense) {
            cellWidth = 0;
            cellHeight = 0;
          }
          if (options2.avoidOverlap) {
            for (var i2 = 0; i2 < nodes5.length; i2++) {
              var node2 = nodes5[i2];
              var pos = node2._private.position;
              if (pos.x == null || pos.y == null) {
                pos.x = 0;
                pos.y = 0;
              }
              var nbb = node2.layoutDimensions(options2);
              var p3 = options2.avoidOverlapPadding;
              var w4 = nbb.w + p3;
              var h3 = nbb.h + p3;
              cellWidth = Math.max(cellWidth, w4);
              cellHeight = Math.max(cellHeight, h3);
            }
          }
          var cellUsed = {};
          var used = /* @__PURE__ */ __name(function used2(row2, col2) {
            return cellUsed["c-" + row2 + "-" + col2] ? true : false;
          }, "used");
          var use = /* @__PURE__ */ __name(function use2(row2, col2) {
            cellUsed["c-" + row2 + "-" + col2] = true;
          }, "use");
          var row = 0;
          var col = 0;
          var moveToNextCell = /* @__PURE__ */ __name(function moveToNextCell2() {
            col++;
            if (col >= cols) {
              col = 0;
              row++;
            }
          }, "moveToNextCell");
          var id2manPos = {};
          for (var _i = 0; _i < nodes5.length; _i++) {
            var _node = nodes5[_i];
            var rcPos = options2.position(_node);
            if (rcPos && (rcPos.row !== void 0 || rcPos.col !== void 0)) {
              var _pos = {
                row: rcPos.row,
                col: rcPos.col
              };
              if (_pos.col === void 0) {
                _pos.col = 0;
                while (used(_pos.row, _pos.col)) {
                  _pos.col++;
                }
              } else if (_pos.row === void 0) {
                _pos.row = 0;
                while (used(_pos.row, _pos.col)) {
                  _pos.row++;
                }
              }
              id2manPos[_node.id()] = _pos;
              use(_pos.row, _pos.col);
            }
          }
          var getPos = /* @__PURE__ */ __name(function getPos2(element3, i3) {
            var x5, y6;
            if (element3.locked() || element3.isParent()) {
              return false;
            }
            var rcPos2 = id2manPos[element3.id()];
            if (rcPos2) {
              x5 = rcPos2.col * cellWidth + cellWidth / 2 + bb.x1;
              y6 = rcPos2.row * cellHeight + cellHeight / 2 + bb.y1;
            } else {
              while (used(row, col)) {
                moveToNextCell();
              }
              x5 = col * cellWidth + cellWidth / 2 + bb.x1;
              y6 = row * cellHeight + cellHeight / 2 + bb.y1;
              use(row, col);
              moveToNextCell();
            }
            return {
              x: x5,
              y: y6
            };
          }, "getPos");
          nodes5.layoutPositions(this, options2, getPos);
        }
        return this;
      };
      defaults$2 = {
        ready: /* @__PURE__ */ __name(function ready3() {
        }, "ready"),
        // on layoutready
        stop: /* @__PURE__ */ __name(function stop4() {
        }, "stop")
        // on layoutstop
      };
      __name(NullLayout, "NullLayout");
      NullLayout.prototype.run = function() {
        var options2 = this.options;
        var eles = options2.eles;
        var layout7 = this;
        options2.cy;
        layout7.emit("layoutstart");
        eles.nodes().positions(function() {
          return {
            x: 0,
            y: 0
          };
        });
        layout7.one("layoutready", options2.ready);
        layout7.emit("layoutready");
        layout7.one("layoutstop", options2.stop);
        layout7.emit("layoutstop");
        return this;
      };
      NullLayout.prototype.stop = function() {
        return this;
      };
      defaults$1 = {
        positions: void 0,
        // map of (node id) => (position obj); or function(node){ return somPos; }
        zoom: void 0,
        // the zoom level to set (prob want fit = false if set)
        pan: void 0,
        // the pan level to set (prob want fit = false if set)
        fit: true,
        // whether to fit to viewport
        padding: 30,
        // padding on fit
        spacingFactor: void 0,
        // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up
        animate: false,
        // whether to transition the node positions
        animationDuration: 500,
        // duration of animation in ms if enabled
        animationEasing: void 0,
        // easing of animation if enabled
        animateFilter: /* @__PURE__ */ __name(function animateFilter6(node2, i2) {
          return true;
        }, "animateFilter"),
        // a function that determines whether the node should be animated.  All nodes animated by default on animate enabled.  Non-animated nodes are positioned immediately when the layout starts
        ready: void 0,
        // callback on layoutready
        stop: void 0,
        // callback on layoutstop
        transform: /* @__PURE__ */ __name(function transform6(node2, position5) {
          return position5;
        }, "transform")
        // transform a given node position. Useful for changing flow direction in discrete layouts
      };
      __name(PresetLayout, "PresetLayout");
      PresetLayout.prototype.run = function() {
        var options2 = this.options;
        var eles = options2.eles;
        var nodes5 = eles.nodes();
        var posIsFn = fn$6(options2.positions);
        function getPosition(node2) {
          if (options2.positions == null) {
            return copyPosition(node2.position());
          }
          if (posIsFn) {
            return options2.positions(node2);
          }
          var pos = options2.positions[node2._private.data.id];
          if (pos == null) {
            return null;
          }
          return pos;
        }
        __name(getPosition, "getPosition");
        nodes5.layoutPositions(this, options2, function(node2, i2) {
          var position5 = getPosition(node2);
          if (node2.locked() || position5 == null) {
            return false;
          }
          return position5;
        });
        return this;
      };
      defaults3 = {
        fit: true,
        // whether to fit to viewport
        padding: 30,
        // fit padding
        boundingBox: void 0,
        // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
        animate: false,
        // whether to transition the node positions
        animationDuration: 500,
        // duration of animation in ms if enabled
        animationEasing: void 0,
        // easing of animation if enabled
        animateFilter: /* @__PURE__ */ __name(function animateFilter7(node2, i2) {
          return true;
        }, "animateFilter"),
        // a function that determines whether the node should be animated.  All nodes animated by default on animate enabled.  Non-animated nodes are positioned immediately when the layout starts
        ready: void 0,
        // callback on layoutready
        stop: void 0,
        // callback on layoutstop
        transform: /* @__PURE__ */ __name(function transform7(node2, position5) {
          return position5;
        }, "transform")
        // transform a given node position. Useful for changing flow direction in discrete layouts 
      };
      __name(RandomLayout, "RandomLayout");
      RandomLayout.prototype.run = function() {
        var options2 = this.options;
        var cy = options2.cy;
        var eles = options2.eles;
        var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : {
          x1: 0,
          y1: 0,
          w: cy.width(),
          h: cy.height()
        });
        var getPos = /* @__PURE__ */ __name(function getPos2(node2, i2) {
          return {
            x: bb.x1 + Math.round(Math.random() * bb.w),
            y: bb.y1 + Math.round(Math.random() * bb.h)
          };
        }, "getPos");
        eles.nodes().layoutPositions(this, options2, getPos);
        return this;
      };
      layout4 = [{
        name: "breadthfirst",
        impl: BreadthFirstLayout
      }, {
        name: "circle",
        impl: CircleLayout
      }, {
        name: "concentric",
        impl: ConcentricLayout
      }, {
        name: "cose",
        impl: CoseLayout
      }, {
        name: "grid",
        impl: GridLayout
      }, {
        name: "null",
        impl: NullLayout
      }, {
        name: "preset",
        impl: PresetLayout
      }, {
        name: "random",
        impl: RandomLayout
      }];
      __name(NullRenderer, "NullRenderer");
      noop5 = /* @__PURE__ */ __name(function noop6() {
      }, "noop");
      throwImgErr = /* @__PURE__ */ __name(function throwImgErr2() {
        throw new Error("A headless instance can not render images");
      }, "throwImgErr");
      NullRenderer.prototype = {
        recalculateRenderedStyle: noop5,
        notify: /* @__PURE__ */ __name(function notify2() {
          this.notifications++;
        }, "notify"),
        init: noop5,
        isHeadless: /* @__PURE__ */ __name(function isHeadless() {
          return true;
        }, "isHeadless"),
        png: throwImgErr,
        jpg: throwImgErr
      };
      BRp$f = {};
      BRp$f.arrowShapeWidth = 0.3;
      BRp$f.registerArrowShapes = function() {
        var arrowShapes = this.arrowShapes = {};
        var renderer15 = this;
        var bbCollide = /* @__PURE__ */ __name(function bbCollide2(x5, y6, size4, angle2, translation, edgeWidth, padding) {
          var x1 = translation.x - size4 / 2 - padding;
          var x22 = translation.x + size4 / 2 + padding;
          var y1 = translation.y - size4 / 2 - padding;
          var y22 = translation.y + size4 / 2 + padding;
          var inside = x1 <= x5 && x5 <= x22 && y1 <= y6 && y6 <= y22;
          return inside;
        }, "bbCollide");
        var transform8 = /* @__PURE__ */ __name(function transform9(x5, y6, size4, angle2, translation) {
          var xRotated = x5 * Math.cos(angle2) - y6 * Math.sin(angle2);
          var yRotated = x5 * Math.sin(angle2) + y6 * Math.cos(angle2);
          var xScaled = xRotated * size4;
          var yScaled = yRotated * size4;
          var xTranslated = xScaled + translation.x;
          var yTranslated = yScaled + translation.y;
          return {
            x: xTranslated,
            y: yTranslated
          };
        }, "transform");
        var transformPoints3 = /* @__PURE__ */ __name(function transformPoints4(pts2, size4, angle2, translation) {
          var retPts = [];
          for (var i2 = 0; i2 < pts2.length; i2 += 2) {
            var x5 = pts2[i2];
            var y6 = pts2[i2 + 1];
            retPts.push(transform8(x5, y6, size4, angle2, translation));
          }
          return retPts;
        }, "transformPoints");
        var pointsToArr = /* @__PURE__ */ __name(function pointsToArr2(pts2) {
          var ret = [];
          for (var i2 = 0; i2 < pts2.length; i2++) {
            var p3 = pts2[i2];
            ret.push(p3.x, p3.y);
          }
          return ret;
        }, "pointsToArr");
        var standardGap = /* @__PURE__ */ __name(function standardGap2(edge) {
          return edge.pstyle("width").pfValue * edge.pstyle("arrow-scale").pfValue * 2;
        }, "standardGap");
        var defineArrowShape = /* @__PURE__ */ __name(function defineArrowShape2(name, defn) {
          if (string(defn)) {
            defn = arrowShapes[defn];
          }
          arrowShapes[name] = extend4({
            name,
            points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3],
            collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, padding) {
              var points = pointsToArr(transformPoints3(this.points, size4 + 2 * padding, angle2, translation));
              var inside = pointInsidePolygonPoints(x5, y6, points);
              return inside;
            }, "collide"),
            roughCollide: bbCollide,
            draw: /* @__PURE__ */ __name(function draw34(context, size4, angle2, translation) {
              var points = transformPoints3(this.points, size4, angle2, translation);
              renderer15.arrowShapeImpl("polygon")(context, points);
            }, "draw"),
            spacing: /* @__PURE__ */ __name(function spacing2(edge) {
              return 0;
            }, "spacing"),
            gap: standardGap
          }, defn);
        }, "defineArrowShape");
        defineArrowShape("none", {
          collide: falsify,
          roughCollide: falsify,
          draw: noop$1,
          spacing: zeroify,
          gap: zeroify
        });
        defineArrowShape("triangle", {
          points: [-0.15, -0.3, 0, 0, 0.15, -0.3]
        });
        defineArrowShape("arrow", "triangle");
        defineArrowShape("triangle-backcurve", {
          points: arrowShapes["triangle"].points,
          controlPoint: [0, -0.15],
          roughCollide: bbCollide,
          draw: /* @__PURE__ */ __name(function draw34(context, size4, angle2, translation, edgeWidth) {
            var ptsTrans = transformPoints3(this.points, size4, angle2, translation);
            var ctrlPt = this.controlPoint;
            var ctrlPtTrans = transform8(ctrlPt[0], ctrlPt[1], size4, angle2, translation);
            renderer15.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans);
          }, "draw"),
          gap: /* @__PURE__ */ __name(function gap(edge) {
            return standardGap(edge) * 0.8;
          }, "gap")
        });
        defineArrowShape("triangle-tee", {
          points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],
          pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4],
          collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding) {
            var triPts = pointsToArr(transformPoints3(this.points, size4 + 2 * padding, angle2, translation));
            var teePts = pointsToArr(transformPoints3(this.pointsTee, size4 + 2 * padding, angle2, translation));
            var inside = pointInsidePolygonPoints(x5, y6, triPts) || pointInsidePolygonPoints(x5, y6, teePts);
            return inside;
          }, "collide"),
          draw: /* @__PURE__ */ __name(function draw34(context, size4, angle2, translation, edgeWidth) {
            var triPts = transformPoints3(this.points, size4, angle2, translation);
            var teePts = transformPoints3(this.pointsTee, size4, angle2, translation);
            renderer15.arrowShapeImpl(this.name)(context, triPts, teePts);
          }, "draw")
        });
        defineArrowShape("circle-triangle", {
          radius: 0.15,
          pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15],
          collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding) {
            var t4 = translation;
            var circleInside = Math.pow(t4.x - x5, 2) + Math.pow(t4.y - y6, 2) <= Math.pow((size4 + 2 * padding) * this.radius, 2);
            var triPts = pointsToArr(transformPoints3(this.points, size4 + 2 * padding, angle2, translation));
            return pointInsidePolygonPoints(x5, y6, triPts) || circleInside;
          }, "collide"),
          draw: /* @__PURE__ */ __name(function draw34(context, size4, angle2, translation, edgeWidth) {
            var triPts = transformPoints3(this.pointsTr, size4, angle2, translation);
            renderer15.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size4);
          }, "draw"),
          spacing: /* @__PURE__ */ __name(function spacing2(edge) {
            return renderer15.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.radius;
          }, "spacing")
        });
        defineArrowShape("triangle-cross", {
          points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],
          baseCrossLinePts: [
            -0.15,
            -0.4,
            // first half of the rectangle
            -0.15,
            -0.4,
            0.15,
            -0.4,
            // second half of the rectangle
            0.15,
            -0.4
          ],
          crossLinePts: /* @__PURE__ */ __name(function crossLinePts(size4, edgeWidth) {
            var p3 = this.baseCrossLinePts.slice();
            var shiftFactor = edgeWidth / size4;
            var y0 = 3;
            var y1 = 5;
            p3[y0] = p3[y0] - shiftFactor;
            p3[y1] = p3[y1] - shiftFactor;
            return p3;
          }, "crossLinePts"),
          collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding) {
            var triPts = pointsToArr(transformPoints3(this.points, size4 + 2 * padding, angle2, translation));
            var teePts = pointsToArr(transformPoints3(this.crossLinePts(size4, edgeWidth), size4 + 2 * padding, angle2, translation));
            var inside = pointInsidePolygonPoints(x5, y6, triPts) || pointInsidePolygonPoints(x5, y6, teePts);
            return inside;
          }, "collide"),
          draw: /* @__PURE__ */ __name(function draw34(context, size4, angle2, translation, edgeWidth) {
            var triPts = transformPoints3(this.points, size4, angle2, translation);
            var crossLinePts = transformPoints3(this.crossLinePts(size4, edgeWidth), size4, angle2, translation);
            renderer15.arrowShapeImpl(this.name)(context, triPts, crossLinePts);
          }, "draw")
        });
        defineArrowShape("vee", {
          points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15],
          gap: /* @__PURE__ */ __name(function gap(edge) {
            return standardGap(edge) * 0.525;
          }, "gap")
        });
        defineArrowShape("circle", {
          radius: 0.15,
          collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding) {
            var t4 = translation;
            var inside = Math.pow(t4.x - x5, 2) + Math.pow(t4.y - y6, 2) <= Math.pow((size4 + 2 * padding) * this.radius, 2);
            return inside;
          }, "collide"),
          draw: /* @__PURE__ */ __name(function draw34(context, size4, angle2, translation, edgeWidth) {
            renderer15.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size4);
          }, "draw"),
          spacing: /* @__PURE__ */ __name(function spacing2(edge) {
            return renderer15.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.radius;
          }, "spacing")
        });
        defineArrowShape("tee", {
          points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0],
          spacing: /* @__PURE__ */ __name(function spacing2(edge) {
            return 1;
          }, "spacing"),
          gap: /* @__PURE__ */ __name(function gap(edge) {
            return 1;
          }, "gap")
        });
        defineArrowShape("square", {
          points: [-0.15, 0, 0.15, 0, 0.15, -0.3, -0.15, -0.3]
        });
        defineArrowShape("diamond", {
          points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0],
          gap: /* @__PURE__ */ __name(function gap(edge) {
            return edge.pstyle("width").pfValue * edge.pstyle("arrow-scale").value;
          }, "gap")
        });
        defineArrowShape("chevron", {
          points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15],
          gap: /* @__PURE__ */ __name(function gap(edge) {
            return 0.95 * edge.pstyle("width").pfValue * edge.pstyle("arrow-scale").value;
          }, "gap")
        });
      };
      BRp$e = {};
      BRp$e.projectIntoViewport = function(clientX, clientY) {
        var cy = this.cy;
        var offsets = this.findContainerClientCoords();
        var offsetLeft = offsets[0];
        var offsetTop = offsets[1];
        var scale3 = offsets[4];
        var pan2 = cy.pan();
        var zoom2 = cy.zoom();
        var x5 = ((clientX - offsetLeft) / scale3 - pan2.x) / zoom2;
        var y6 = ((clientY - offsetTop) / scale3 - pan2.y) / zoom2;
        return [x5, y6];
      };
      BRp$e.findContainerClientCoords = function() {
        if (this.containerBB) {
          return this.containerBB;
        }
        var container2 = this.container;
        var rect3 = container2.getBoundingClientRect();
        var style3 = this.cy.window().getComputedStyle(container2);
        var styleValue2 = /* @__PURE__ */ __name(function styleValue3(name) {
          return parseFloat(style3.getPropertyValue(name));
        }, "styleValue");
        var padding = {
          left: styleValue2("padding-left"),
          right: styleValue2("padding-right"),
          top: styleValue2("padding-top"),
          bottom: styleValue2("padding-bottom")
        };
        var border = {
          left: styleValue2("border-left-width"),
          right: styleValue2("border-right-width"),
          top: styleValue2("border-top-width"),
          bottom: styleValue2("border-bottom-width")
        };
        var clientWidth = container2.clientWidth;
        var clientHeight = container2.clientHeight;
        var paddingHor = padding.left + padding.right;
        var paddingVer = padding.top + padding.bottom;
        var borderHor = border.left + border.right;
        var scale3 = rect3.width / (clientWidth + borderHor);
        var unscaledW = clientWidth - paddingHor;
        var unscaledH = clientHeight - paddingVer;
        var left3 = rect3.left + padding.left + border.left;
        var top2 = rect3.top + padding.top + border.top;
        return this.containerBB = [left3, top2, unscaledW, unscaledH, scale3];
      };
      BRp$e.invalidateContainerClientCoordsCache = function() {
        this.containerBB = null;
      };
      BRp$e.findNearestElement = function(x5, y6, interactiveElementsOnly, isTouch) {
        return this.findNearestElements(x5, y6, interactiveElementsOnly, isTouch)[0];
      };
      BRp$e.findNearestElements = function(x5, y6, interactiveElementsOnly, isTouch) {
        var self2 = this;
        var r2 = this;
        var eles = r2.getCachedZSortedEles();
        var near = [];
        var zoom2 = r2.cy.zoom();
        var hasCompounds = r2.cy.hasCompoundNodes();
        var edgeThreshold = (isTouch ? 24 : 8) / zoom2;
        var nodeThreshold = (isTouch ? 8 : 2) / zoom2;
        var labelThreshold = (isTouch ? 8 : 2) / zoom2;
        var minSqDist = Infinity;
        var nearEdge;
        var nearNode;
        if (interactiveElementsOnly) {
          eles = eles.interactive;
        }
        function addEle(ele2, sqDist) {
          if (ele2.isNode()) {
            if (nearNode) {
              return;
            } else {
              nearNode = ele2;
              near.push(ele2);
            }
          }
          if (ele2.isEdge() && (sqDist == null || sqDist < minSqDist)) {
            if (nearEdge) {
              if (nearEdge.pstyle("z-compound-depth").value === ele2.pstyle("z-compound-depth").value && nearEdge.pstyle("z-compound-depth").value === ele2.pstyle("z-compound-depth").value) {
                for (var i3 = 0; i3 < near.length; i3++) {
                  if (near[i3].isEdge()) {
                    near[i3] = ele2;
                    nearEdge = ele2;
                    minSqDist = sqDist != null ? sqDist : minSqDist;
                    break;
                  }
                }
              }
            } else {
              near.push(ele2);
              nearEdge = ele2;
              minSqDist = sqDist != null ? sqDist : minSqDist;
            }
          }
        }
        __name(addEle, "addEle");
        function checkNode(node2) {
          var width3 = node2.outerWidth() + 2 * nodeThreshold;
          var height2 = node2.outerHeight() + 2 * nodeThreshold;
          var hw = width3 / 2;
          var hh = height2 / 2;
          var pos = node2.position();
          var cornerRadius = node2.pstyle("corner-radius").value === "auto" ? "auto" : node2.pstyle("corner-radius").pfValue;
          var rs = node2._private.rscratch;
          if (pos.x - hw <= x5 && x5 <= pos.x + hw && pos.y - hh <= y6 && y6 <= pos.y + hh) {
            var shape = r2.nodeShapes[self2.getNodeShape(node2)];
            if (shape.checkPoint(x5, y6, 0, width3, height2, pos.x, pos.y, cornerRadius, rs)) {
              addEle(node2, 0);
              return true;
            }
          }
        }
        __name(checkNode, "checkNode");
        function checkEdge(edge) {
          var _p = edge._private;
          var rs = _p.rscratch;
          var styleWidth = edge.pstyle("width").pfValue;
          var scale3 = edge.pstyle("arrow-scale").value;
          var width3 = styleWidth / 2 + edgeThreshold;
          var widthSq = width3 * width3;
          var width22 = width3 * 2;
          var src = _p.source;
          var tgt = _p.target;
          var sqDist;
          if (rs.edgeType === "segments" || rs.edgeType === "straight" || rs.edgeType === "haystack") {
            var pts2 = rs.allpts;
            for (var i3 = 0; i3 + 3 < pts2.length; i3 += 2) {
              if (inLineVicinity(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], width22) && widthSq > (sqDist = sqdistToFiniteLine(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3]))) {
                addEle(edge, sqDist);
                return true;
              }
            }
          } else if (rs.edgeType === "bezier" || rs.edgeType === "multibezier" || rs.edgeType === "self" || rs.edgeType === "compound") {
            var pts2 = rs.allpts;
            for (var i3 = 0; i3 + 5 < rs.allpts.length; i3 += 4) {
              if (inBezierVicinity(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], pts2[i3 + 4], pts2[i3 + 5], width22) && widthSq > (sqDist = sqdistToQuadraticBezier(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], pts2[i3 + 4], pts2[i3 + 5]))) {
                addEle(edge, sqDist);
                return true;
              }
            }
          }
          var src = src || _p.source;
          var tgt = tgt || _p.target;
          var arSize = self2.getArrowWidth(styleWidth, scale3);
          var arrows = [{
            name: "source",
            x: rs.arrowStartX,
            y: rs.arrowStartY,
            angle: rs.srcArrowAngle
          }, {
            name: "target",
            x: rs.arrowEndX,
            y: rs.arrowEndY,
            angle: rs.tgtArrowAngle
          }, {
            name: "mid-source",
            x: rs.midX,
            y: rs.midY,
            angle: rs.midsrcArrowAngle
          }, {
            name: "mid-target",
            x: rs.midX,
            y: rs.midY,
            angle: rs.midtgtArrowAngle
          }];
          for (var i3 = 0; i3 < arrows.length; i3++) {
            var ar = arrows[i3];
            var shape = r2.arrowShapes[edge.pstyle(ar.name + "-arrow-shape").value];
            var edgeWidth = edge.pstyle("width").pfValue;
            if (shape.roughCollide(x5, y6, arSize, ar.angle, {
              x: ar.x,
              y: ar.y
            }, edgeWidth, edgeThreshold) && shape.collide(x5, y6, arSize, ar.angle, {
              x: ar.x,
              y: ar.y
            }, edgeWidth, edgeThreshold)) {
              addEle(edge);
              return true;
            }
          }
          if (hasCompounds && near.length > 0) {
            checkNode(src);
            checkNode(tgt);
          }
        }
        __name(checkEdge, "checkEdge");
        function preprop(obj, name, pre) {
          return getPrefixedProperty(obj, name, pre);
        }
        __name(preprop, "preprop");
        function checkLabel(ele2, prefix) {
          var _p = ele2._private;
          var th = labelThreshold;
          var prefixDash;
          if (prefix) {
            prefixDash = prefix + "-";
          } else {
            prefixDash = "";
          }
          ele2.boundingBox();
          var bb = _p.labelBounds[prefix || "main"];
          var text4 = ele2.pstyle(prefixDash + "label").value;
          var eventsEnabled = ele2.pstyle("text-events").strValue === "yes";
          if (!eventsEnabled || !text4) {
            return;
          }
          var lx = preprop(_p.rscratch, "labelX", prefix);
          var ly = preprop(_p.rscratch, "labelY", prefix);
          var theta = preprop(_p.rscratch, "labelAngle", prefix);
          var ox = ele2.pstyle(prefixDash + "text-margin-x").pfValue;
          var oy = ele2.pstyle(prefixDash + "text-margin-y").pfValue;
          var lx1 = bb.x1 - th - ox;
          var lx2 = bb.x2 + th - ox;
          var ly1 = bb.y1 - th - oy;
          var ly2 = bb.y2 + th - oy;
          if (theta) {
            var cos3 = Math.cos(theta);
            var sin3 = Math.sin(theta);
            var rotate2 = /* @__PURE__ */ __name(function rotate3(x6, y7) {
              x6 = x6 - lx;
              y7 = y7 - ly;
              return {
                x: x6 * cos3 - y7 * sin3 + lx,
                y: x6 * sin3 + y7 * cos3 + ly
              };
            }, "rotate");
            var px1y1 = rotate2(lx1, ly1);
            var px1y2 = rotate2(lx1, ly2);
            var px2y1 = rotate2(lx2, ly1);
            var px2y2 = rotate2(lx2, ly2);
            var points = [
              // with the margin added after the rotation is applied
              px1y1.x + ox,
              px1y1.y + oy,
              px2y1.x + ox,
              px2y1.y + oy,
              px2y2.x + ox,
              px2y2.y + oy,
              px1y2.x + ox,
              px1y2.y + oy
            ];
            if (pointInsidePolygonPoints(x5, y6, points)) {
              addEle(ele2);
              return true;
            }
          } else {
            if (inBoundingBox(bb, x5, y6)) {
              addEle(ele2);
              return true;
            }
          }
        }
        __name(checkLabel, "checkLabel");
        for (var i2 = eles.length - 1; i2 >= 0; i2--) {
          var ele = eles[i2];
          if (ele.isNode()) {
            checkNode(ele) || checkLabel(ele);
          } else {
            checkEdge(ele) || checkLabel(ele) || checkLabel(ele, "source") || checkLabel(ele, "target");
          }
        }
        return near;
      };
      BRp$e.getAllInBox = function(x1, y1, x22, y22) {
        var eles = this.getCachedZSortedEles().interactive;
        var zoom2 = this.cy.zoom();
        var labelThreshold = 2 / zoom2;
        var box = [];
        var x1c = Math.min(x1, x22);
        var x2c = Math.max(x1, x22);
        var y1c = Math.min(y1, y22);
        var y2c = Math.max(y1, y22);
        x1 = x1c;
        x22 = x2c;
        y1 = y1c;
        y22 = y2c;
        var boxBb = makeBoundingBox({
          x1,
          y1,
          x2: x22,
          y2: y22
        });
        var selectionBox = [{
          x: boxBb.x1,
          y: boxBb.y1
        }, {
          x: boxBb.x2,
          y: boxBb.y1
        }, {
          x: boxBb.x2,
          y: boxBb.y2
        }, {
          x: boxBb.x1,
          y: boxBb.y2
        }];
        var boxEdges = [[selectionBox[0], selectionBox[1]], [selectionBox[1], selectionBox[2]], [selectionBox[2], selectionBox[3]], [selectionBox[3], selectionBox[0]]];
        function preprop(obj, name, pre) {
          return getPrefixedProperty(obj, name, pre);
        }
        __name(preprop, "preprop");
        function getRotatedLabelBox(ele2, prefix) {
          var _p2 = ele2._private;
          var th = labelThreshold;
          var prefixDash = "";
          ele2.boundingBox();
          var bb = _p2.labelBounds["main"];
          if (!bb) {
            return null;
          }
          var lx = preprop(_p2.rscratch, "labelX", prefix);
          var ly = preprop(_p2.rscratch, "labelY", prefix);
          var theta = preprop(_p2.rscratch, "labelAngle", prefix);
          var ox = ele2.pstyle(prefixDash + "text-margin-x").pfValue;
          var oy = ele2.pstyle(prefixDash + "text-margin-y").pfValue;
          var lx1 = bb.x1 - th - ox;
          var lx2 = bb.x2 + th - ox;
          var ly1 = bb.y1 - th - oy;
          var ly2 = bb.y2 + th - oy;
          if (theta) {
            var cos3 = Math.cos(theta);
            var sin3 = Math.sin(theta);
            var rotate2 = /* @__PURE__ */ __name(function rotate3(x5, y6) {
              x5 = x5 - lx;
              y6 = y6 - ly;
              return {
                x: x5 * cos3 - y6 * sin3 + lx,
                y: x5 * sin3 + y6 * cos3 + ly
              };
            }, "rotate");
            return [rotate2(lx1, ly1), rotate2(lx2, ly1), rotate2(lx2, ly2), rotate2(lx1, ly2)];
          } else {
            return [{
              x: lx1,
              y: ly1
            }, {
              x: lx2,
              y: ly1
            }, {
              x: lx2,
              y: ly2
            }, {
              x: lx1,
              y: ly2
            }];
          }
        }
        __name(getRotatedLabelBox, "getRotatedLabelBox");
        function doLinesIntersect(p1, p22, q1, q22) {
          function ccw(a2, b4, c3) {
            return (c3.y - a2.y) * (b4.x - a2.x) > (b4.y - a2.y) * (c3.x - a2.x);
          }
          __name(ccw, "ccw");
          return ccw(p1, q1, q22) !== ccw(p22, q1, q22) && ccw(p1, p22, q1) !== ccw(p1, p22, q22);
        }
        __name(doLinesIntersect, "doLinesIntersect");
        for (var e3 = 0; e3 < eles.length; e3++) {
          var ele = eles[e3];
          if (ele.isNode()) {
            var node2 = ele;
            var textEvents = node2.pstyle("text-events").strValue === "yes";
            var nodeBoxSelectMode = node2.pstyle("box-selection").strValue;
            var labelBoxSelectEnabled = node2.pstyle("box-select-labels").strValue === "yes";
            if (nodeBoxSelectMode === "none") {
              continue;
            }
            var includeLabels = (nodeBoxSelectMode === "overlap" || labelBoxSelectEnabled) && textEvents;
            var nodeBb = node2.boundingBox({
              includeNodes: true,
              includeEdges: false,
              includeLabels
            });
            if (nodeBoxSelectMode === "contain") {
              var selected = false;
              if (labelBoxSelectEnabled && textEvents) {
                var rotatedLabelBox = getRotatedLabelBox(node2);
                if (rotatedLabelBox && satPolygonIntersection(rotatedLabelBox, selectionBox)) {
                  box.push(node2);
                  selected = true;
                }
              }
              if (!selected && boundingBoxInBoundingBox(boxBb, nodeBb)) {
                box.push(node2);
              }
            } else if (nodeBoxSelectMode === "overlap") {
              if (boundingBoxesIntersect(boxBb, nodeBb)) {
                var nodeBodyBb = node2.boundingBox({
                  includeNodes: true,
                  includeEdges: true,
                  includeLabels: false,
                  includeMainLabels: false,
                  includeSourceLabels: false,
                  includeTargetLabels: false
                });
                var nodeBodyCorners = [{
                  x: nodeBodyBb.x1,
                  y: nodeBodyBb.y1
                }, {
                  x: nodeBodyBb.x2,
                  y: nodeBodyBb.y1
                }, {
                  x: nodeBodyBb.x2,
                  y: nodeBodyBb.y2
                }, {
                  x: nodeBodyBb.x1,
                  y: nodeBodyBb.y2
                }];
                if (satPolygonIntersection(nodeBodyCorners, selectionBox)) {
                  box.push(node2);
                } else {
                  var _rotatedLabelBox = getRotatedLabelBox(node2);
                  if (_rotatedLabelBox && satPolygonIntersection(_rotatedLabelBox, selectionBox)) {
                    box.push(node2);
                  }
                }
              }
            }
          } else {
            var edge = ele;
            var _p = edge._private;
            var rs = _p.rscratch;
            var edgeBoxSelectMode = edge.pstyle("box-selection").strValue;
            if (edgeBoxSelectMode === "none") {
              continue;
            }
            if (edgeBoxSelectMode === "contain") {
              if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) {
                continue;
              }
              if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) {
                continue;
              }
              if (rs.edgeType === "bezier" || rs.edgeType === "multibezier" || rs.edgeType === "self" || rs.edgeType === "compound" || rs.edgeType === "segments" || rs.edgeType === "haystack") {
                var pts2 = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts;
                var allInside = true;
                for (var i2 = 0; i2 < pts2.length; i2++) {
                  if (!pointInBoundingBox(boxBb, pts2[i2])) {
                    allInside = false;
                    break;
                  }
                }
                if (allInside) {
                  box.push(edge);
                }
              } else if (rs.edgeType === "straight") {
                box.push(edge);
              }
            } else if (edgeBoxSelectMode === "overlap") {
              var _selected = false;
              if (rs.startX != null && rs.startY != null && rs.endX != null && rs.endY != null && (inBoundingBox(boxBb, rs.startX, rs.startY) || inBoundingBox(boxBb, rs.endX, rs.endY))) {
                box.push(edge);
                _selected = true;
              } else if (!_selected && rs.edgeType === "haystack") {
                var haystackPts = _p.rstyle.haystackPts;
                for (var _i = 0; _i < haystackPts.length; _i++) {
                  if (pointInBoundingBox(boxBb, haystackPts[_i])) {
                    box.push(edge);
                    _selected = true;
                    break;
                  }
                }
              }
              if (!_selected) {
                var _pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts;
                if ((!_pts || _pts.length < 2) && rs.edgeType === "straight") {
                  if (rs.startX != null && rs.startY != null && rs.endX != null && rs.endY != null) {
                    _pts = [{
                      x: rs.startX,
                      y: rs.startY
                    }, {
                      x: rs.endX,
                      y: rs.endY
                    }];
                  }
                }
                if (!_pts || _pts.length < 2) continue;
                for (var _i2 = 0; _i2 < _pts.length - 1; _i2++) {
                  var segStart = _pts[_i2];
                  var segEnd = _pts[_i2 + 1];
                  for (var b3 = 0; b3 < boxEdges.length; b3++) {
                    var _boxEdges$b = _slicedToArray(boxEdges[b3], 2), boxStart = _boxEdges$b[0], boxEnd = _boxEdges$b[1];
                    if (doLinesIntersect(segStart, segEnd, boxStart, boxEnd)) {
                      box.push(edge);
                      _selected = true;
                      break;
                    }
                  }
                  if (_selected) break;
                }
              }
            }
          }
        }
        return box;
      };
      BRp$d = {};
      BRp$d.calculateArrowAngles = function(edge) {
        var rs = edge._private.rscratch;
        var isHaystack = rs.edgeType === "haystack";
        var isBezier = rs.edgeType === "bezier";
        var isMultibezier = rs.edgeType === "multibezier";
        var isSegments = rs.edgeType === "segments";
        var isCompound = rs.edgeType === "compound";
        var isSelf = rs.edgeType === "self";
        var dispX, dispY;
        var startX2, startY2, endX, endY, midX, midY;
        if (isHaystack) {
          startX2 = rs.haystackPts[0];
          startY2 = rs.haystackPts[1];
          endX = rs.haystackPts[2];
          endY = rs.haystackPts[3];
        } else {
          startX2 = rs.arrowStartX;
          startY2 = rs.arrowStartY;
          endX = rs.arrowEndX;
          endY = rs.arrowEndY;
        }
        midX = rs.midX;
        midY = rs.midY;
        if (isSegments) {
          dispX = startX2 - rs.segpts[0];
          dispY = startY2 - rs.segpts[1];
        } else if (isMultibezier || isCompound || isSelf || isBezier) {
          var pts2 = rs.allpts;
          var bX = qbezierAt(pts2[0], pts2[2], pts2[4], 0.1);
          var bY = qbezierAt(pts2[1], pts2[3], pts2[5], 0.1);
          dispX = startX2 - bX;
          dispY = startY2 - bY;
        } else {
          dispX = startX2 - midX;
          dispY = startY2 - midY;
        }
        rs.srcArrowAngle = getAngleFromDisp(dispX, dispY);
        var midX = rs.midX;
        var midY = rs.midY;
        if (isHaystack) {
          midX = (startX2 + endX) / 2;
          midY = (startY2 + endY) / 2;
        }
        dispX = endX - startX2;
        dispY = endY - startY2;
        if (isSegments) {
          var pts2 = rs.allpts;
          if (pts2.length / 2 % 2 === 0) {
            var i2 = pts2.length / 2;
            var i1 = i2 - 2;
            dispX = pts2[i2] - pts2[i1];
            dispY = pts2[i2 + 1] - pts2[i1 + 1];
          } else if (rs.isRound) {
            dispX = rs.midVector[1];
            dispY = -rs.midVector[0];
          } else {
            var i2 = pts2.length / 2 - 1;
            var i1 = i2 - 2;
            dispX = pts2[i2] - pts2[i1];
            dispY = pts2[i2 + 1] - pts2[i1 + 1];
          }
        } else if (isMultibezier || isCompound || isSelf) {
          var pts2 = rs.allpts;
          var cpts = rs.ctrlpts;
          var bp0x, bp0y;
          var bp1x, bp1y;
          if (cpts.length / 2 % 2 === 0) {
            var p0 = pts2.length / 2 - 1;
            var ic = p0 + 2;
            var p1 = ic + 2;
            bp0x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 0);
            bp0y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 0);
            bp1x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 1e-4);
            bp1y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 1e-4);
          } else {
            var ic = pts2.length / 2 - 1;
            var p0 = ic - 2;
            var p1 = ic + 2;
            bp0x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 0.4999);
            bp0y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 0.4999);
            bp1x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 0.5);
            bp1y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 0.5);
          }
          dispX = bp1x - bp0x;
          dispY = bp1y - bp0y;
        }
        rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY);
        rs.midDispX = dispX;
        rs.midDispY = dispY;
        dispX *= -1;
        dispY *= -1;
        if (isSegments) {
          var pts2 = rs.allpts;
          if (pts2.length / 2 % 2 === 0) ;
          else if (!rs.isRound) {
            var i2 = pts2.length / 2 - 1;
            var i3 = i2 + 2;
            dispX = -(pts2[i3] - pts2[i2]);
            dispY = -(pts2[i3 + 1] - pts2[i2 + 1]);
          }
        }
        rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY);
        if (isSegments) {
          dispX = endX - rs.segpts[rs.segpts.length - 2];
          dispY = endY - rs.segpts[rs.segpts.length - 1];
        } else if (isMultibezier || isCompound || isSelf || isBezier) {
          var pts2 = rs.allpts;
          var l4 = pts2.length;
          var bX = qbezierAt(pts2[l4 - 6], pts2[l4 - 4], pts2[l4 - 2], 0.9);
          var bY = qbezierAt(pts2[l4 - 5], pts2[l4 - 3], pts2[l4 - 1], 0.9);
          dispX = endX - bX;
          dispY = endY - bY;
        } else {
          dispX = endX - midX;
          dispY = endY - midY;
        }
        rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY);
      };
      BRp$d.getArrowWidth = BRp$d.getArrowHeight = function(edgeWidth, scale3) {
        var cache3 = this.arrowWidthCache = this.arrowWidthCache || {};
        var cachedVal = cache3[edgeWidth + ", " + scale3];
        if (cachedVal) {
          return cachedVal;
        }
        cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale3;
        cache3[edgeWidth + ", " + scale3] = cachedVal;
        return cachedVal;
      };
      v1 = {};
      v22 = {};
      asVec = /* @__PURE__ */ __name(function asVec2(p3, pp, v3) {
        v3.x = pp.x - p3.x;
        v3.y = pp.y - p3.y;
        v3.len = Math.sqrt(v3.x * v3.x + v3.y * v3.y);
        v3.nx = v3.x / v3.len;
        v3.ny = v3.y / v3.len;
        v3.ang = Math.atan2(v3.ny, v3.nx);
      }, "asVec");
      invertVec = /* @__PURE__ */ __name(function invertVec2(originalV, invertedV) {
        invertedV.x = originalV.x * -1;
        invertedV.y = originalV.y * -1;
        invertedV.nx = originalV.nx * -1;
        invertedV.ny = originalV.ny * -1;
        invertedV.ang = originalV.ang > 0 ? -(Math.PI - originalV.ang) : Math.PI + originalV.ang;
      }, "invertVec");
      calcCornerArc = /* @__PURE__ */ __name(function calcCornerArc2(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius) {
        previousPoint !== lastPoint ? asVec(currentPoint, previousPoint, v1) : invertVec(v22, v1);
        asVec(currentPoint, nextPoint, v22);
        sinA = v1.nx * v22.ny - v1.ny * v22.nx;
        sinA90 = v1.nx * v22.nx - v1.ny * -v22.ny;
        angle = Math.asin(Math.max(-1, Math.min(1, sinA)));
        if (Math.abs(angle) < 1e-6) {
          x3 = currentPoint.x;
          y4 = currentPoint.y;
          cRadius = radius = 0;
          return;
        }
        radDirection = 1;
        drawDirection = false;
        if (sinA90 < 0) {
          if (angle < 0) {
            angle = Math.PI + angle;
          } else {
            angle = Math.PI - angle;
            radDirection = -1;
            drawDirection = true;
          }
        } else {
          if (angle > 0) {
            radDirection = -1;
            drawDirection = true;
          }
        }
        if (currentPoint.radius !== void 0) {
          radius = currentPoint.radius;
        } else {
          radius = radiusMax;
        }
        halfAngle = angle / 2;
        limit = Math.min(v1.len / 2, v22.len / 2);
        if (isArcRadius) {
          lenOut = Math.abs(Math.cos(halfAngle) * radius / Math.sin(halfAngle));
          if (lenOut > limit) {
            lenOut = limit;
            cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));
          } else {
            cRadius = radius;
          }
        } else {
          lenOut = Math.min(limit, radius);
          cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));
        }
        stopX = currentPoint.x + v22.nx * lenOut;
        stopY = currentPoint.y + v22.ny * lenOut;
        x3 = stopX - v22.ny * cRadius * radDirection;
        y4 = stopY + v22.nx * cRadius * radDirection;
        startX = currentPoint.x + v1.nx * lenOut;
        startY = currentPoint.y + v1.ny * lenOut;
        lastPoint = currentPoint;
      }, "calcCornerArc");
      __name(drawPreparedRoundCorner, "drawPreparedRoundCorner");
      __name(getRoundCorner, "getRoundCorner");
      AVOID_IMPOSSIBLE_BEZIER_CONSTANT = 0.01;
      AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L = Math.sqrt(2 * AVOID_IMPOSSIBLE_BEZIER_CONSTANT);
      BRp$c = {};
      BRp$c.findMidptPtsEtc = function(edge, pairInfo) {
        var posPts = pairInfo.posPts, intersectionPts = pairInfo.intersectionPts, vectorNormInverse = pairInfo.vectorNormInverse;
        var midptPts;
        var srcManEndpt = edge.pstyle("source-endpoint");
        var tgtManEndpt = edge.pstyle("target-endpoint");
        var haveManualEndPts = srcManEndpt.units != null && tgtManEndpt.units != null;
        var recalcVectorNormInverse = /* @__PURE__ */ __name(function recalcVectorNormInverse2(x12, y12, x23, y23) {
          var dy = y23 - y12;
          var dx = x23 - x12;
          var l4 = Math.sqrt(dx * dx + dy * dy);
          return {
            x: -dy / l4,
            y: dx / l4
          };
        }, "recalcVectorNormInverse");
        var edgeDistances = edge.pstyle("edge-distances").value;
        switch (edgeDistances) {
          case "node-position":
            midptPts = posPts;
            break;
          case "intersection":
            midptPts = intersectionPts;
            break;
          case "endpoints": {
            if (haveManualEndPts) {
              var _this$manualEndptToPx = this.manualEndptToPx(edge.source()[0], srcManEndpt), _this$manualEndptToPx2 = _slicedToArray(_this$manualEndptToPx, 2), x1 = _this$manualEndptToPx2[0], y1 = _this$manualEndptToPx2[1];
              var _this$manualEndptToPx3 = this.manualEndptToPx(edge.target()[0], tgtManEndpt), _this$manualEndptToPx4 = _slicedToArray(_this$manualEndptToPx3, 2), x22 = _this$manualEndptToPx4[0], y22 = _this$manualEndptToPx4[1];
              var endPts = {
                x1,
                y1,
                x2: x22,
                y2: y22
              };
              vectorNormInverse = recalcVectorNormInverse(x1, y1, x22, y22);
              midptPts = endPts;
            } else {
              warn("Edge ".concat(edge.id(), " has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint.  Falling back on edge-distances:intersection (default)."));
              midptPts = intersectionPts;
            }
            break;
          }
        }
        return {
          midptPts,
          vectorNormInverse
        };
      };
      BRp$c.findHaystackPoints = function(edges3) {
        for (var i2 = 0; i2 < edges3.length; i2++) {
          var edge = edges3[i2];
          var _p = edge._private;
          var rs = _p.rscratch;
          if (!rs.haystack) {
            var angle2 = Math.random() * 2 * Math.PI;
            rs.source = {
              x: Math.cos(angle2),
              y: Math.sin(angle2)
            };
            angle2 = Math.random() * 2 * Math.PI;
            rs.target = {
              x: Math.cos(angle2),
              y: Math.sin(angle2)
            };
          }
          var src = _p.source;
          var tgt = _p.target;
          var srcPos = src.position();
          var tgtPos = tgt.position();
          var srcW = src.width();
          var tgtW = tgt.width();
          var srcH = src.height();
          var tgtH = tgt.height();
          var radius2 = edge.pstyle("haystack-radius").value;
          var halfRadius = radius2 / 2;
          rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y];
          rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2;
          rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2;
          rs.edgeType = "haystack";
          rs.haystack = true;
          this.storeEdgeProjections(edge);
          this.calculateArrowAngles(edge);
          this.recalculateEdgeLabelProjections(edge);
          this.calculateLabelAngles(edge);
        }
      };
      BRp$c.findSegmentsPoints = function(edge, pairInfo) {
        var rs = edge._private.rscratch;
        var segmentWs = edge.pstyle("segment-weights");
        var segmentDs = edge.pstyle("segment-distances");
        var segmentRs = edge.pstyle("segment-radii");
        var segmentTs = edge.pstyle("radius-type");
        var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length);
        var lastRadius = segmentRs.pfValue[segmentRs.pfValue.length - 1];
        var lastRadiusType = segmentTs.pfValue[segmentTs.pfValue.length - 1];
        rs.edgeType = "segments";
        rs.segpts = [];
        rs.radii = [];
        rs.isArcRadius = [];
        for (var s2 = 0; s2 < segmentsN; s2++) {
          var w4 = segmentWs.pfValue[s2];
          var d3 = segmentDs.pfValue[s2];
          var w1 = 1 - w4;
          var w22 = w4;
          var _this$findMidptPtsEtc = this.findMidptPtsEtc(edge, pairInfo), midptPts = _this$findMidptPtsEtc.midptPts, vectorNormInverse = _this$findMidptPtsEtc.vectorNormInverse;
          var adjustedMidpt = {
            x: midptPts.x1 * w1 + midptPts.x2 * w22,
            y: midptPts.y1 * w1 + midptPts.y2 * w22
          };
          rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d3, adjustedMidpt.y + vectorNormInverse.y * d3);
          rs.radii.push(segmentRs.pfValue[s2] !== void 0 ? segmentRs.pfValue[s2] : lastRadius);
          rs.isArcRadius.push((segmentTs.pfValue[s2] !== void 0 ? segmentTs.pfValue[s2] : lastRadiusType) === "arc-radius");
        }
      };
      BRp$c.findLoopPoints = function(edge, pairInfo, i2, edgeIsUnbundled) {
        var rs = edge._private.rscratch;
        var dirCounts = pairInfo.dirCounts, srcPos = pairInfo.srcPos;
        var ctrlptDists = edge.pstyle("control-point-distances");
        var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : void 0;
        var loopDir = edge.pstyle("loop-direction").pfValue;
        var loopSwp = edge.pstyle("loop-sweep").pfValue;
        var stepSize = edge.pstyle("control-point-step-size").pfValue;
        rs.edgeType = "self";
        var j3 = i2;
        var loopDist = stepSize;
        if (edgeIsUnbundled) {
          j3 = 0;
          loopDist = ctrlptDist;
        }
        var loopAngle = loopDir - Math.PI / 2;
        var outAngle = loopAngle - loopSwp / 2;
        var inAngle = loopAngle + loopSwp / 2;
        var dc = String(loopDir + "_" + loopSwp);
        j3 = dirCounts[dc] === void 0 ? dirCounts[dc] = 0 : ++dirCounts[dc];
        rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j3 / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j3 / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j3 / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j3 / 3 + 1)];
      };
      BRp$c.findCompoundLoopPoints = function(edge, pairInfo, i2, edgeIsUnbundled) {
        var rs = edge._private.rscratch;
        rs.edgeType = "compound";
        var srcPos = pairInfo.srcPos, tgtPos = pairInfo.tgtPos, srcW = pairInfo.srcW, srcH = pairInfo.srcH, tgtW = pairInfo.tgtW, tgtH = pairInfo.tgtH;
        var stepSize = edge.pstyle("control-point-step-size").pfValue;
        var ctrlptDists = edge.pstyle("control-point-distances");
        var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : void 0;
        var j3 = i2;
        var loopDist = stepSize;
        if (edgeIsUnbundled) {
          j3 = 0;
          loopDist = ctrlptDist;
        }
        var loopW = 50;
        var loopaPos = {
          x: srcPos.x - srcW / 2,
          y: srcPos.y - srcH / 2
        };
        var loopbPos = {
          x: tgtPos.x - tgtW / 2,
          y: tgtPos.y - tgtH / 2
        };
        var loopPos = {
          x: Math.min(loopaPos.x, loopbPos.x),
          y: Math.min(loopaPos.y, loopbPos.y)
        };
        var minCompoundStretch = 0.5;
        var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * AVOID_IMPOSSIBLE_BEZIER_CONSTANT));
        var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * AVOID_IMPOSSIBLE_BEZIER_CONSTANT));
        rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j3 / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j3 / 3 + 1) * compoundStretchB, loopPos.y];
      };
      BRp$c.findStraightEdgePoints = function(edge) {
        edge._private.rscratch.edgeType = "straight";
      };
      BRp$c.findBezierPoints = function(edge, pairInfo, i2, edgeIsUnbundled, edgeIsSwapped) {
        var rs = edge._private.rscratch;
        var stepSize = edge.pstyle("control-point-step-size").pfValue;
        var ctrlptDists = edge.pstyle("control-point-distances");
        var ctrlptWs = edge.pstyle("control-point-weights");
        var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1;
        var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : void 0;
        var ctrlptWeight = ctrlptWs.value[0];
        var multi = edgeIsUnbundled;
        rs.edgeType = multi ? "multibezier" : "bezier";
        rs.ctrlpts = [];
        for (var b3 = 0; b3 < bezierN; b3++) {
          var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i2) * stepSize * (edgeIsSwapped ? -1 : 1);
          var manctrlptDist = void 0;
          var sign2 = signum(normctrlptDist);
          if (multi) {
            ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b3] : stepSize;
            ctrlptWeight = ctrlptWs.value[b3];
          }
          if (edgeIsUnbundled) {
            manctrlptDist = ctrlptDist;
          } else {
            manctrlptDist = ctrlptDist !== void 0 ? sign2 * ctrlptDist : void 0;
          }
          var distanceFromMidpoint = manctrlptDist !== void 0 ? manctrlptDist : normctrlptDist;
          var w1 = 1 - ctrlptWeight;
          var w22 = ctrlptWeight;
          var _this$findMidptPtsEtc2 = this.findMidptPtsEtc(edge, pairInfo), midptPts = _this$findMidptPtsEtc2.midptPts, vectorNormInverse = _this$findMidptPtsEtc2.vectorNormInverse;
          var adjustedMidpt = {
            x: midptPts.x1 * w1 + midptPts.x2 * w22,
            y: midptPts.y1 * w1 + midptPts.y2 * w22
          };
          rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint);
        }
      };
      BRp$c.findTaxiPoints = function(edge, pairInfo) {
        var rs = edge._private.rscratch;
        rs.edgeType = "segments";
        var VERTICAL = "vertical";
        var HORIZONTAL = "horizontal";
        var LEFTWARD = "leftward";
        var RIGHTWARD = "rightward";
        var DOWNWARD = "downward";
        var UPWARD = "upward";
        var AUTO = "auto";
        var posPts = pairInfo.posPts, srcW = pairInfo.srcW, srcH = pairInfo.srcH, tgtW = pairInfo.tgtW, tgtH = pairInfo.tgtH;
        var edgeDistances = edge.pstyle("edge-distances").value;
        var dIncludesNodeBody = edgeDistances !== "node-position";
        var taxiDir = edge.pstyle("taxi-direction").value;
        var rawTaxiDir = taxiDir;
        var taxiTurn = edge.pstyle("taxi-turn");
        var turnIsPercent = taxiTurn.units === "%";
        var taxiTurnPfVal = taxiTurn.pfValue;
        var turnIsNegative = taxiTurnPfVal < 0;
        var minD = edge.pstyle("taxi-turn-min-distance").pfValue;
        var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0;
        var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0;
        var pdx = posPts.x2 - posPts.x1;
        var pdy = posPts.y2 - posPts.y1;
        var subDWH = /* @__PURE__ */ __name(function subDWH2(dxy, dwh) {
          if (dxy > 0) {
            return Math.max(dxy - dwh, 0);
          } else {
            return Math.min(dxy + dwh, 0);
          }
        }, "subDWH");
        var dx = subDWH(pdx, dw);
        var dy = subDWH(pdy, dh);
        var isExplicitDir = false;
        if (rawTaxiDir === AUTO) {
          taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL;
        } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) {
          taxiDir = VERTICAL;
          isExplicitDir = true;
        } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) {
          taxiDir = HORIZONTAL;
          isExplicitDir = true;
        }
        var isVert = taxiDir === VERTICAL;
        var l4 = isVert ? dy : dx;
        var pl = isVert ? pdy : pdx;
        var sgnL = signum(pl);
        var forcedDir = false;
        if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) {
          sgnL *= -1;
          l4 = sgnL * Math.abs(l4);
          forcedDir = true;
        }
        var d3;
        if (turnIsPercent) {
          var p3 = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal;
          d3 = p3 * l4;
        } else {
          var k2 = taxiTurnPfVal < 0 ? l4 : 0;
          d3 = k2 + taxiTurnPfVal * sgnL;
        }
        var getIsTooClose = /* @__PURE__ */ __name(function getIsTooClose2(d4) {
          return Math.abs(d4) < minD || Math.abs(d4) >= Math.abs(l4);
        }, "getIsTooClose");
        var isTooCloseSrc = getIsTooClose(d3);
        var isTooCloseTgt = getIsTooClose(Math.abs(l4) - Math.abs(d3));
        var isTooClose = isTooCloseSrc || isTooCloseTgt;
        if (isTooClose && !forcedDir) {
          if (isVert) {
            var lShapeInsideSrc = Math.abs(pl) <= srcH / 2;
            var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2;
            if (lShapeInsideSrc) {
              var x5 = (posPts.x1 + posPts.x2) / 2;
              var y1 = posPts.y1, y22 = posPts.y2;
              rs.segpts = [x5, y1, x5, y22];
            } else if (lShapeInsideTgt) {
              var y6 = (posPts.y1 + posPts.y2) / 2;
              var x1 = posPts.x1, x22 = posPts.x2;
              rs.segpts = [x1, y6, x22, y6];
            } else {
              rs.segpts = [posPts.x1, posPts.y2];
            }
          } else {
            var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2;
            var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2;
            if (_lShapeInsideSrc) {
              var _y = (posPts.y1 + posPts.y2) / 2;
              var _x = posPts.x1, _x2 = posPts.x2;
              rs.segpts = [_x, _y, _x2, _y];
            } else if (_lShapeInsideTgt) {
              var _x3 = (posPts.x1 + posPts.x2) / 2;
              var _y2 = posPts.y1, _y3 = posPts.y2;
              rs.segpts = [_x3, _y2, _x3, _y3];
            } else {
              rs.segpts = [posPts.x2, posPts.y1];
            }
          }
        } else {
          if (isVert) {
            var _y4 = posPts.y1 + d3 + (dIncludesNodeBody ? srcH / 2 * sgnL : 0);
            var _x4 = posPts.x1, _x5 = posPts.x2;
            rs.segpts = [_x4, _y4, _x5, _y4];
          } else {
            var _x6 = posPts.x1 + d3 + (dIncludesNodeBody ? srcW / 2 * sgnL : 0);
            var _y5 = posPts.y1, _y6 = posPts.y2;
            rs.segpts = [_x6, _y5, _x6, _y6];
          }
        }
        if (rs.isRound) {
          var radius2 = edge.pstyle("taxi-radius").value;
          var isArcRadius = edge.pstyle("radius-type").value[0] === "arc-radius";
          rs.radii = new Array(rs.segpts.length / 2).fill(radius2);
          rs.isArcRadius = new Array(rs.segpts.length / 2).fill(isArcRadius);
        }
      };
      BRp$c.tryToCorrectInvalidPoints = function(edge, pairInfo) {
        var rs = edge._private.rscratch;
        if (rs.edgeType === "bezier") {
          var srcPos = pairInfo.srcPos, tgtPos = pairInfo.tgtPos, srcW = pairInfo.srcW, srcH = pairInfo.srcH, tgtW = pairInfo.tgtW, tgtH = pairInfo.tgtH, srcShape = pairInfo.srcShape, tgtShape = pairInfo.tgtShape, srcCornerRadius = pairInfo.srcCornerRadius, tgtCornerRadius = pairInfo.tgtCornerRadius, srcRs = pairInfo.srcRs, tgtRs = pairInfo.tgtRs;
          var badStart = !number$1(rs.startX) || !number$1(rs.startY);
          var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY);
          var badEnd = !number$1(rs.endX) || !number$1(rs.endY);
          var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY);
          var minCpADistFactor = 3;
          var arrowW = this.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.arrowShapeWidth;
          var minCpADist = minCpADistFactor * arrowW;
          var startACpDist = dist({
            x: rs.ctrlpts[0],
            y: rs.ctrlpts[1]
          }, {
            x: rs.startX,
            y: rs.startY
          });
          var closeStartACp = startACpDist < minCpADist;
          var endACpDist = dist({
            x: rs.ctrlpts[0],
            y: rs.ctrlpts[1]
          }, {
            x: rs.endX,
            y: rs.endY
          });
          var closeEndACp = endACpDist < minCpADist;
          var overlapping = false;
          if (badStart || badAStart || closeStartACp) {
            overlapping = true;
            var cpD = {
              // delta
              x: rs.ctrlpts[0] - srcPos.x,
              y: rs.ctrlpts[1] - srcPos.y
            };
            var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y);
            var cpM = {
              // normalised delta
              x: cpD.x / cpL,
              y: cpD.y / cpL
            };
            var radius2 = Math.max(srcW, srcH);
            var cpProj = {
              // *2 radius guarantees outside shape
              x: rs.ctrlpts[0] + cpM.x * 2 * radius2,
              y: rs.ctrlpts[1] + cpM.y * 2 * radius2
            };
            var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0, srcCornerRadius, srcRs);
            if (closeStartACp) {
              rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist);
              rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist);
            } else {
              rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist;
              rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist;
            }
          }
          if (badEnd || badAEnd || closeEndACp) {
            overlapping = true;
            var _cpD = {
              // delta
              x: rs.ctrlpts[0] - tgtPos.x,
              y: rs.ctrlpts[1] - tgtPos.y
            };
            var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y);
            var _cpM = {
              // normalised delta
              x: _cpD.x / _cpL,
              y: _cpD.y / _cpL
            };
            var _radius = Math.max(srcW, srcH);
            var _cpProj = {
              // *2 radius guarantees outside shape
              x: rs.ctrlpts[0] + _cpM.x * 2 * _radius,
              y: rs.ctrlpts[1] + _cpM.y * 2 * _radius
            };
            var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0, tgtCornerRadius, tgtRs);
            if (closeEndACp) {
              rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist);
              rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist);
            } else {
              rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist;
              rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist;
            }
          }
          if (overlapping) {
            this.findEndpoints(edge);
          }
        }
      };
      BRp$c.storeAllpts = function(edge) {
        var rs = edge._private.rscratch;
        if (rs.edgeType === "multibezier" || rs.edgeType === "bezier" || rs.edgeType === "self" || rs.edgeType === "compound") {
          rs.allpts = [];
          rs.allpts.push(rs.startX, rs.startY);
          for (var b3 = 0; b3 + 1 < rs.ctrlpts.length; b3 += 2) {
            rs.allpts.push(rs.ctrlpts[b3], rs.ctrlpts[b3 + 1]);
            if (b3 + 3 < rs.ctrlpts.length) {
              rs.allpts.push((rs.ctrlpts[b3] + rs.ctrlpts[b3 + 2]) / 2, (rs.ctrlpts[b3 + 1] + rs.ctrlpts[b3 + 3]) / 2);
            }
          }
          rs.allpts.push(rs.endX, rs.endY);
          var m3, mt;
          if (rs.ctrlpts.length / 2 % 2 === 0) {
            m3 = rs.allpts.length / 2 - 1;
            rs.midX = rs.allpts[m3];
            rs.midY = rs.allpts[m3 + 1];
          } else {
            m3 = rs.allpts.length / 2 - 3;
            mt = 0.5;
            rs.midX = qbezierAt(rs.allpts[m3], rs.allpts[m3 + 2], rs.allpts[m3 + 4], mt);
            rs.midY = qbezierAt(rs.allpts[m3 + 1], rs.allpts[m3 + 3], rs.allpts[m3 + 5], mt);
          }
        } else if (rs.edgeType === "straight") {
          rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY];
          rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4;
          rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4;
        } else if (rs.edgeType === "segments") {
          rs.allpts = [];
          rs.allpts.push(rs.startX, rs.startY);
          rs.allpts.push.apply(rs.allpts, rs.segpts);
          rs.allpts.push(rs.endX, rs.endY);
          if (rs.isRound) {
            rs.roundCorners = [];
            for (var i2 = 2; i2 + 3 < rs.allpts.length; i2 += 2) {
              var radius2 = rs.radii[i2 / 2 - 1];
              var isArcRadius = rs.isArcRadius[i2 / 2 - 1];
              rs.roundCorners.push(getRoundCorner({
                x: rs.allpts[i2 - 2],
                y: rs.allpts[i2 - 1]
              }, {
                x: rs.allpts[i2],
                y: rs.allpts[i2 + 1],
                radius: radius2
              }, {
                x: rs.allpts[i2 + 2],
                y: rs.allpts[i2 + 3]
              }, radius2, isArcRadius));
            }
          }
          if (rs.segpts.length % 4 === 0) {
            var i22 = rs.segpts.length / 2;
            var i1 = i22 - 2;
            rs.midX = (rs.segpts[i1] + rs.segpts[i22]) / 2;
            rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i22 + 1]) / 2;
          } else {
            var _i = rs.segpts.length / 2 - 1;
            if (!rs.isRound) {
              rs.midX = rs.segpts[_i];
              rs.midY = rs.segpts[_i + 1];
            } else {
              var point8 = {
                x: rs.segpts[_i],
                y: rs.segpts[_i + 1]
              };
              var corner = rs.roundCorners[_i / 2];
              if (corner.radius === 0) {
                var nextPoint = {
                  x: rs.segpts[_i + 2],
                  y: rs.segpts[_i + 3]
                };
                rs.midX = point8.x;
                rs.midY = point8.y;
                rs.midVector = [point8.y - nextPoint.y, nextPoint.x - point8.x];
              } else {
                var v3 = [point8.x - corner.cx, point8.y - corner.cy];
                var factor = corner.radius / Math.sqrt(Math.pow(v3[0], 2) + Math.pow(v3[1], 2));
                v3 = v3.map(function(c3) {
                  return c3 * factor;
                });
                rs.midX = corner.cx + v3[0];
                rs.midY = corner.cy + v3[1];
                rs.midVector = v3;
              }
            }
          }
        }
      };
      BRp$c.checkForInvalidEdgeWarning = function(edge) {
        var rs = edge[0]._private.rscratch;
        if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) {
          rs.loggedErr = false;
        } else {
          if (!rs.loggedErr) {
            rs.loggedErr = true;
            warn("Edge `" + edge.id() + "` has invalid endpoints and so it is impossible to draw.  Adjust your edge style (e.g. control points) accordingly or use an alternative edge type.  This is expected behaviour when the source node and the target node overlap.");
          }
        }
      };
      BRp$c.findEdgeControlPoints = function(edges3) {
        var _this = this;
        if (!edges3 || edges3.length === 0) {
          return;
        }
        var r2 = this;
        var cy = r2.cy;
        var hasCompounds = cy.hasCompoundNodes();
        var hashTable = new Map$1();
        var getKey3 = /* @__PURE__ */ __name(function getKey4(pairId2, edgeIsUnbundled2) {
          return [].concat(_toConsumableArray(pairId2), [edgeIsUnbundled2 ? 1 : 0]).join("-");
        }, "getKey");
        var pairIds = [];
        var haystackEdges = [];
        for (var i2 = 0; i2 < edges3.length; i2++) {
          var edge = edges3[i2];
          var _p = edge._private;
          var curveStyle = edge.pstyle("curve-style").value;
          if (edge.removed() || !edge.takesUpSpace()) {
            continue;
          }
          if (curveStyle === "haystack") {
            haystackEdges.push(edge);
            continue;
          }
          var edgeIsUnbundled = curveStyle === "unbundled-bezier" || endsWith(curveStyle, "segments") || curveStyle === "straight" || curveStyle === "straight-triangle" || endsWith(curveStyle, "taxi");
          var edgeIsBezier = curveStyle === "unbundled-bezier" || curveStyle === "bezier";
          var src = _p.source;
          var tgt = _p.target;
          var srcIndex = src.poolIndex();
          var tgtIndex = tgt.poolIndex();
          var pairId = [srcIndex, tgtIndex].sort();
          var key = getKey3(pairId, edgeIsUnbundled);
          var tableEntry = hashTable.get(key);
          if (tableEntry == null) {
            tableEntry = {
              eles: []
            };
            pairIds.push({
              pairId,
              edgeIsUnbundled
            });
            hashTable.set(key, tableEntry);
          }
          tableEntry.eles.push(edge);
          if (edgeIsUnbundled) {
            tableEntry.hasUnbundled = true;
          }
          if (edgeIsBezier) {
            tableEntry.hasBezier = true;
          }
        }
        var _loop = /* @__PURE__ */ __name(function _loop2() {
          var _pairIds$p = pairIds[p3], pairId2 = _pairIds$p.pairId, edgeIsUnbundled2 = _pairIds$p.edgeIsUnbundled;
          var key2 = getKey3(pairId2, edgeIsUnbundled2);
          var pairInfo = hashTable.get(key2);
          var swappedpairInfo;
          if (!pairInfo.hasUnbundled) {
            var pllEdges = pairInfo.eles[0].parallelEdges().filter(function(e3) {
              return e3.isBundledBezier();
            });
            clearArray(pairInfo.eles);
            pllEdges.forEach(function(edge2) {
              return pairInfo.eles.push(edge2);
            });
            pairInfo.eles.sort(function(edge1, edge2) {
              return edge1.poolIndex() - edge2.poolIndex();
            });
          }
          var firstEdge = pairInfo.eles[0];
          var src2 = firstEdge.source();
          var tgt2 = firstEdge.target();
          if (src2.poolIndex() > tgt2.poolIndex()) {
            var temp = src2;
            src2 = tgt2;
            tgt2 = temp;
          }
          var srcPos = pairInfo.srcPos = src2.position();
          var tgtPos = pairInfo.tgtPos = tgt2.position();
          var srcW = pairInfo.srcW = src2.outerWidth();
          var srcH = pairInfo.srcH = src2.outerHeight();
          var tgtW = pairInfo.tgtW = tgt2.outerWidth();
          var tgtH = pairInfo.tgtH = tgt2.outerHeight();
          var srcShape = pairInfo.srcShape = r2.nodeShapes[_this.getNodeShape(src2)];
          var tgtShape = pairInfo.tgtShape = r2.nodeShapes[_this.getNodeShape(tgt2)];
          var srcCornerRadius = pairInfo.srcCornerRadius = src2.pstyle("corner-radius").value === "auto" ? "auto" : src2.pstyle("corner-radius").pfValue;
          var tgtCornerRadius = pairInfo.tgtCornerRadius = tgt2.pstyle("corner-radius").value === "auto" ? "auto" : tgt2.pstyle("corner-radius").pfValue;
          var tgtRs = pairInfo.tgtRs = tgt2._private.rscratch;
          var srcRs = pairInfo.srcRs = src2._private.rscratch;
          pairInfo.dirCounts = {
            "north": 0,
            "west": 0,
            "south": 0,
            "east": 0,
            "northwest": 0,
            "southwest": 0,
            "northeast": 0,
            "southeast": 0
          };
          for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) {
            var _edge = pairInfo.eles[_i2];
            var rs = _edge[0]._private.rscratch;
            var _curveStyle = _edge.pstyle("curve-style").value;
            var _edgeIsUnbundled = _curveStyle === "unbundled-bezier" || endsWith(_curveStyle, "segments") || endsWith(_curveStyle, "taxi");
            var edgeIsSwapped = !src2.same(_edge.source());
            if (!pairInfo.calculatedIntersection && src2 !== tgt2 && (pairInfo.hasBezier || pairInfo.hasUnbundled)) {
              pairInfo.calculatedIntersection = true;
              var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0, srcCornerRadius, srcRs);
              var srcIntn = pairInfo.srcIntn = srcOutside;
              var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0, tgtCornerRadius, tgtRs);
              var tgtIntn = pairInfo.tgtIntn = tgtOutside;
              var intersectionPts = pairInfo.intersectionPts = {
                x1: srcOutside[0],
                x2: tgtOutside[0],
                y1: srcOutside[1],
                y2: tgtOutside[1]
              };
              var posPts = pairInfo.posPts = {
                x1: srcPos.x,
                x2: tgtPos.x,
                y1: srcPos.y,
                y2: tgtPos.y
              };
              var dy = tgtOutside[1] - srcOutside[1];
              var dx = tgtOutside[0] - srcOutside[0];
              var l4 = Math.sqrt(dx * dx + dy * dy);
              if (number$1(l4) && l4 >= AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L) ;
              else {
                l4 = Math.sqrt(Math.max(dx * dx, AVOID_IMPOSSIBLE_BEZIER_CONSTANT) + Math.max(dy * dy, AVOID_IMPOSSIBLE_BEZIER_CONSTANT));
              }
              var vector = pairInfo.vector = {
                x: dx,
                y: dy
              };
              var vectorNorm = pairInfo.vectorNorm = {
                x: vector.x / l4,
                y: vector.y / l4
              };
              var vectorNormInverse = {
                x: -vectorNorm.y,
                y: vectorNorm.x
              };
              pairInfo.nodesOverlap = !number$1(l4) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y, tgtCornerRadius, tgtRs) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y, srcCornerRadius, srcRs);
              pairInfo.vectorNormInverse = vectorNormInverse;
              swappedpairInfo = {
                nodesOverlap: pairInfo.nodesOverlap,
                dirCounts: pairInfo.dirCounts,
                calculatedIntersection: true,
                hasBezier: pairInfo.hasBezier,
                hasUnbundled: pairInfo.hasUnbundled,
                eles: pairInfo.eles,
                srcPos: tgtPos,
                srcRs: tgtRs,
                tgtPos: srcPos,
                tgtRs: srcRs,
                srcW: tgtW,
                srcH: tgtH,
                tgtW: srcW,
                tgtH: srcH,
                srcIntn: tgtIntn,
                tgtIntn: srcIntn,
                srcShape: tgtShape,
                tgtShape: srcShape,
                posPts: {
                  x1: posPts.x2,
                  y1: posPts.y2,
                  x2: posPts.x1,
                  y2: posPts.y1
                },
                intersectionPts: {
                  x1: intersectionPts.x2,
                  y1: intersectionPts.y2,
                  x2: intersectionPts.x1,
                  y2: intersectionPts.y1
                },
                vector: {
                  x: -vector.x,
                  y: -vector.y
                },
                vectorNorm: {
                  x: -vectorNorm.x,
                  y: -vectorNorm.y
                },
                vectorNormInverse: {
                  x: -vectorNormInverse.x,
                  y: -vectorNormInverse.y
                }
              };
            }
            var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo;
            rs.nodesOverlap = passedPairInfo.nodesOverlap;
            rs.srcIntn = passedPairInfo.srcIntn;
            rs.tgtIntn = passedPairInfo.tgtIntn;
            rs.isRound = _curveStyle.startsWith("round");
            if (hasCompounds && (src2.isParent() || src2.isChild() || tgt2.isParent() || tgt2.isChild()) && (src2.parents().anySame(tgt2) || tgt2.parents().anySame(src2) || src2.same(tgt2) && src2.isParent())) {
              _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);
            } else if (src2 === tgt2) {
              _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);
            } else if (_curveStyle.endsWith("segments")) {
              _this.findSegmentsPoints(_edge, passedPairInfo);
            } else if (_curveStyle.endsWith("taxi")) {
              _this.findTaxiPoints(_edge, passedPairInfo);
            } else if (_curveStyle === "straight" || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) {
              _this.findStraightEdgePoints(_edge);
            } else {
              _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped);
            }
            _this.findEndpoints(_edge);
            _this.tryToCorrectInvalidPoints(_edge, passedPairInfo);
            _this.checkForInvalidEdgeWarning(_edge);
            _this.storeAllpts(_edge);
            _this.storeEdgeProjections(_edge);
            _this.calculateArrowAngles(_edge);
            _this.recalculateEdgeLabelProjections(_edge);
            _this.calculateLabelAngles(_edge);
          }
        }, "_loop");
        for (var p3 = 0; p3 < pairIds.length; p3++) {
          _loop();
        }
        this.findHaystackPoints(haystackEdges);
      };
      __name(getPts, "getPts");
      BRp$c.getSegmentPoints = function(edge) {
        var rs = edge[0]._private.rscratch;
        this.recalculateRenderedStyle(edge);
        var type3 = rs.edgeType;
        if (type3 === "segments") {
          return getPts(rs.segpts);
        }
      };
      BRp$c.getControlPoints = function(edge) {
        var rs = edge[0]._private.rscratch;
        this.recalculateRenderedStyle(edge);
        var type3 = rs.edgeType;
        if (type3 === "bezier" || type3 === "multibezier" || type3 === "self" || type3 === "compound") {
          return getPts(rs.ctrlpts);
        }
      };
      BRp$c.getEdgeMidpoint = function(edge) {
        var rs = edge[0]._private.rscratch;
        this.recalculateRenderedStyle(edge);
        return {
          x: rs.midX,
          y: rs.midY
        };
      };
      BRp$b = {};
      BRp$b.manualEndptToPx = function(node2, prop) {
        var r2 = this;
        var npos = node2.position();
        var w4 = node2.outerWidth();
        var h3 = node2.outerHeight();
        var rs = node2._private.rscratch;
        if (prop.value.length === 2) {
          var p3 = [prop.pfValue[0], prop.pfValue[1]];
          if (prop.units[0] === "%") {
            p3[0] = p3[0] * w4;
          }
          if (prop.units[1] === "%") {
            p3[1] = p3[1] * h3;
          }
          p3[0] += npos.x;
          p3[1] += npos.y;
          return p3;
        } else {
          var angle2 = prop.pfValue[0];
          angle2 = -Math.PI / 2 + angle2;
          var l4 = 2 * Math.max(w4, h3);
          var _p = [npos.x + Math.cos(angle2) * l4, npos.y + Math.sin(angle2) * l4];
          return r2.nodeShapes[this.getNodeShape(node2)].intersectLine(npos.x, npos.y, w4, h3, _p[0], _p[1], 0, node2.pstyle("corner-radius").value === "auto" ? "auto" : node2.pstyle("corner-radius").pfValue, rs);
        }
      };
      BRp$b.findEndpoints = function(edge) {
        var _ref, _tgtManEndpt$pfValue, _ref2, _srcManEndpt$pfValue;
        var r2 = this;
        var intersect3;
        var source = edge.source()[0];
        var target = edge.target()[0];
        var srcPos = source.position();
        var tgtPos = target.position();
        var tgtArShape = edge.pstyle("target-arrow-shape").value;
        var srcArShape = edge.pstyle("source-arrow-shape").value;
        var tgtDist = edge.pstyle("target-distance-from-node").pfValue;
        var srcDist = edge.pstyle("source-distance-from-node").pfValue;
        var srcRs = source._private.rscratch;
        var tgtRs = target._private.rscratch;
        var curveStyle = edge.pstyle("curve-style").value;
        var rs = edge._private.rscratch;
        var et2 = rs.edgeType;
        var taxi = endsWith(curveStyle, "taxi");
        var self2 = et2 === "self" || et2 === "compound";
        var bezier = et2 === "bezier" || et2 === "multibezier" || self2;
        var multi = et2 !== "bezier";
        var lines = et2 === "straight" || et2 === "segments";
        var segments = et2 === "segments";
        var hasEndpts = bezier || multi || lines;
        var overrideEndpts = self2 || taxi;
        var srcManEndpt = edge.pstyle("source-endpoint");
        var srcManEndptVal = overrideEndpts ? "outside-to-node" : srcManEndpt.value;
        var srcCornerRadius = source.pstyle("corner-radius").value === "auto" ? "auto" : source.pstyle("corner-radius").pfValue;
        var tgtManEndpt = edge.pstyle("target-endpoint");
        var tgtManEndptVal = overrideEndpts ? "outside-to-node" : tgtManEndpt.value;
        var tgtCornerRadius = target.pstyle("corner-radius").value === "auto" ? "auto" : target.pstyle("corner-radius").pfValue;
        rs.srcManEndpt = srcManEndpt;
        rs.tgtManEndpt = tgtManEndpt;
        var p1;
        var p22;
        var p1_i;
        var p2_i;
        var tgtManEndptPt = (_ref = (tgtManEndpt === null || tgtManEndpt === void 0 || (_tgtManEndpt$pfValue = tgtManEndpt.pfValue) === null || _tgtManEndpt$pfValue === void 0 ? void 0 : _tgtManEndpt$pfValue.length) === 2 ? tgtManEndpt.pfValue : null) !== null && _ref !== void 0 ? _ref : [0, 0];
        var srcManEndptPt = (_ref2 = (srcManEndpt === null || srcManEndpt === void 0 || (_srcManEndpt$pfValue = srcManEndpt.pfValue) === null || _srcManEndpt$pfValue === void 0 ? void 0 : _srcManEndpt$pfValue.length) === 2 ? srcManEndpt.pfValue : null) !== null && _ref2 !== void 0 ? _ref2 : [0, 0];
        if (bezier) {
          var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]];
          var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart;
          p1 = cpEnd;
          p22 = cpStart;
        } else if (lines) {
          var srcArrowFromPt = !segments ? [tgtPos.x + tgtManEndptPt[0], tgtPos.y + tgtManEndptPt[1]] : rs.segpts.slice(0, 2);
          var tgtArrowFromPt = !segments ? [srcPos.x + srcManEndptPt[0], srcPos.y + srcManEndptPt[1]] : rs.segpts.slice(rs.segpts.length - 2);
          p1 = tgtArrowFromPt;
          p22 = srcArrowFromPt;
        }
        if (tgtManEndptVal === "inside-to-node") {
          intersect3 = [tgtPos.x, tgtPos.y];
        } else if (tgtManEndpt.units) {
          intersect3 = this.manualEndptToPx(target, tgtManEndpt);
        } else if (tgtManEndptVal === "outside-to-line") {
          intersect3 = rs.tgtIntn;
        } else {
          if (tgtManEndptVal === "outside-to-node" || tgtManEndptVal === "outside-to-node-or-label") {
            p1_i = p1;
          } else if (tgtManEndptVal === "outside-to-line" || tgtManEndptVal === "outside-to-line-or-label") {
            p1_i = [srcPos.x, srcPos.y];
          }
          intersect3 = r2.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0, tgtCornerRadius, tgtRs);
          if (tgtManEndptVal === "outside-to-node-or-label" || tgtManEndptVal === "outside-to-line-or-label") {
            var trs = target._private.rscratch;
            var lw = trs.labelWidth;
            var lh = trs.labelHeight;
            var lx = trs.labelX;
            var ly = trs.labelY;
            var lw2 = lw / 2;
            var lh2 = lh / 2;
            var va = target.pstyle("text-valign").value;
            if (va === "top") {
              ly -= lh2;
            } else if (va === "bottom") {
              ly += lh2;
            }
            var ha = target.pstyle("text-halign").value;
            if (ha === "left") {
              lx -= lw2;
            } else if (ha === "right") {
              lx += lw2;
            }
            var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y);
            if (labelIntersect.length > 0) {
              var refPt = srcPos;
              var intSqdist = sqdist(refPt, array2point(intersect3));
              var labIntSqdist = sqdist(refPt, array2point(labelIntersect));
              var minSqDist = intSqdist;
              if (labIntSqdist < intSqdist) {
                intersect3 = labelIntersect;
                minSqDist = labIntSqdist;
              }
              if (labelIntersect.length > 2) {
                var labInt2SqDist = sqdist(refPt, {
                  x: labelIntersect[2],
                  y: labelIntersect[3]
                });
                if (labInt2SqDist < minSqDist) {
                  intersect3 = [labelIntersect[2], labelIntersect[3]];
                }
              }
            }
          }
        }
        var arrowEnd = shortenIntersection(intersect3, p1, r2.arrowShapes[tgtArShape].spacing(edge) + tgtDist);
        var edgeEnd = shortenIntersection(intersect3, p1, r2.arrowShapes[tgtArShape].gap(edge) + tgtDist);
        rs.endX = edgeEnd[0];
        rs.endY = edgeEnd[1];
        rs.arrowEndX = arrowEnd[0];
        rs.arrowEndY = arrowEnd[1];
        if (srcManEndptVal === "inside-to-node") {
          intersect3 = [srcPos.x, srcPos.y];
        } else if (srcManEndpt.units) {
          intersect3 = this.manualEndptToPx(source, srcManEndpt);
        } else if (srcManEndptVal === "outside-to-line") {
          intersect3 = rs.srcIntn;
        } else {
          if (srcManEndptVal === "outside-to-node" || srcManEndptVal === "outside-to-node-or-label") {
            p2_i = p22;
          } else if (srcManEndptVal === "outside-to-line" || srcManEndptVal === "outside-to-line-or-label") {
            p2_i = [tgtPos.x, tgtPos.y];
          }
          intersect3 = r2.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0, srcCornerRadius, srcRs);
          if (srcManEndptVal === "outside-to-node-or-label" || srcManEndptVal === "outside-to-line-or-label") {
            var srs = source._private.rscratch;
            var _lw = srs.labelWidth;
            var _lh = srs.labelHeight;
            var _lx = srs.labelX;
            var _ly = srs.labelY;
            var _lw2 = _lw / 2;
            var _lh2 = _lh / 2;
            var _va = source.pstyle("text-valign").value;
            if (_va === "top") {
              _ly -= _lh2;
            } else if (_va === "bottom") {
              _ly += _lh2;
            }
            var _ha = source.pstyle("text-halign").value;
            if (_ha === "left") {
              _lx -= _lw2;
            } else if (_ha === "right") {
              _lx += _lw2;
            }
            var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y);
            if (_labelIntersect.length > 0) {
              var _refPt = tgtPos;
              var _intSqdist = sqdist(_refPt, array2point(intersect3));
              var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect));
              var _minSqDist = _intSqdist;
              if (_labIntSqdist < _intSqdist) {
                intersect3 = [_labelIntersect[0], _labelIntersect[1]];
                _minSqDist = _labIntSqdist;
              }
              if (_labelIntersect.length > 2) {
                var _labInt2SqDist = sqdist(_refPt, {
                  x: _labelIntersect[2],
                  y: _labelIntersect[3]
                });
                if (_labInt2SqDist < _minSqDist) {
                  intersect3 = [_labelIntersect[2], _labelIntersect[3]];
                }
              }
            }
          }
        }
        var arrowStart = shortenIntersection(intersect3, p22, r2.arrowShapes[srcArShape].spacing(edge) + srcDist);
        var edgeStart = shortenIntersection(intersect3, p22, r2.arrowShapes[srcArShape].gap(edge) + srcDist);
        rs.startX = edgeStart[0];
        rs.startY = edgeStart[1];
        rs.arrowStartX = arrowStart[0];
        rs.arrowStartY = arrowStart[1];
        if (hasEndpts) {
          if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) {
            rs.badLine = true;
          } else {
            rs.badLine = false;
          }
        }
      };
      BRp$b.getSourceEndpoint = function(edge) {
        var rs = edge[0]._private.rscratch;
        this.recalculateRenderedStyle(edge);
        switch (rs.edgeType) {
          case "haystack":
            return {
              x: rs.haystackPts[0],
              y: rs.haystackPts[1]
            };
          default:
            return {
              x: rs.arrowStartX,
              y: rs.arrowStartY
            };
        }
      };
      BRp$b.getTargetEndpoint = function(edge) {
        var rs = edge[0]._private.rscratch;
        this.recalculateRenderedStyle(edge);
        switch (rs.edgeType) {
          case "haystack":
            return {
              x: rs.haystackPts[2],
              y: rs.haystackPts[3]
            };
          default:
            return {
              x: rs.arrowEndX,
              y: rs.arrowEndY
            };
        }
      };
      BRp$a = {};
      __name(pushBezierPts, "pushBezierPts");
      BRp$a.storeEdgeProjections = function(edge) {
        var _p = edge._private;
        var rs = _p.rscratch;
        var et2 = rs.edgeType;
        _p.rstyle.bezierPts = null;
        _p.rstyle.linePts = null;
        _p.rstyle.haystackPts = null;
        if (et2 === "multibezier" || et2 === "bezier" || et2 === "self" || et2 === "compound") {
          _p.rstyle.bezierPts = [];
          for (var i2 = 0; i2 + 5 < rs.allpts.length; i2 += 4) {
            pushBezierPts(this, edge, rs.allpts.slice(i2, i2 + 6));
          }
        } else if (et2 === "segments") {
          var lpts = _p.rstyle.linePts = [];
          for (var i2 = 0; i2 + 1 < rs.allpts.length; i2 += 2) {
            lpts.push({
              x: rs.allpts[i2],
              y: rs.allpts[i2 + 1]
            });
          }
        } else if (et2 === "haystack") {
          var hpts = rs.haystackPts;
          _p.rstyle.haystackPts = [{
            x: hpts[0],
            y: hpts[1]
          }, {
            x: hpts[2],
            y: hpts[3]
          }];
        }
        _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.arrowShapeWidth;
      };
      BRp$a.recalculateEdgeProjections = function(edges3) {
        this.findEdgeControlPoints(edges3);
      };
      BRp$9 = {};
      BRp$9.recalculateNodeLabelProjection = function(node2) {
        var content = node2.pstyle("label").strValue;
        if (emptyString(content)) {
          return;
        }
        var textX, textY;
        var _p = node2._private;
        var nodeWidth = node2.width();
        var nodeHeight = node2.height();
        var padding = node2.padding();
        var nodePos = node2.position();
        var textHalign = node2.pstyle("text-halign").strValue;
        var textValign = node2.pstyle("text-valign").strValue;
        var rs = _p.rscratch;
        var rstyle = _p.rstyle;
        switch (textHalign) {
          case "left":
            textX = nodePos.x - nodeWidth / 2 - padding;
            break;
          case "right":
            textX = nodePos.x + nodeWidth / 2 + padding;
            break;
          default:
            textX = nodePos.x;
        }
        switch (textValign) {
          case "top":
            textY = nodePos.y - nodeHeight / 2 - padding;
            break;
          case "bottom":
            textY = nodePos.y + nodeHeight / 2 + padding;
            break;
          default:
            textY = nodePos.y;
        }
        rs.labelX = textX;
        rs.labelY = textY;
        rstyle.labelX = textX;
        rstyle.labelY = textY;
        this.calculateLabelAngles(node2);
        this.applyLabelDimensions(node2);
      };
      lineAngleFromDelta = /* @__PURE__ */ __name(function lineAngleFromDelta2(dx, dy) {
        var angle2 = Math.atan(dy / dx);
        if (dx === 0 && angle2 < 0) {
          angle2 = angle2 * -1;
        }
        return angle2;
      }, "lineAngleFromDelta");
      lineAngle = /* @__PURE__ */ __name(function lineAngle2(p0, p1) {
        var dx = p1.x - p0.x;
        var dy = p1.y - p0.y;
        return lineAngleFromDelta(dx, dy);
      }, "lineAngle");
      bezierAngle = /* @__PURE__ */ __name(function bezierAngle2(p0, p1, p22, t4) {
        var t03 = bound(0, t4 - 1e-3, 1);
        var t13 = bound(0, t4 + 1e-3, 1);
        var lp0 = qbezierPtAt(p0, p1, p22, t03);
        var lp1 = qbezierPtAt(p0, p1, p22, t13);
        return lineAngle(lp0, lp1);
      }, "bezierAngle");
      BRp$9.recalculateEdgeLabelProjections = function(edge) {
        var p3;
        var _p = edge._private;
        var rs = _p.rscratch;
        var r2 = this;
        var content = {
          mid: edge.pstyle("label").strValue,
          source: edge.pstyle("source-label").strValue,
          target: edge.pstyle("target-label").strValue
        };
        if (content.mid || content.source || content.target) ;
        else {
          return;
        }
        p3 = {
          x: rs.midX,
          y: rs.midY
        };
        var setRs = /* @__PURE__ */ __name(function setRs2(propName, prefix, value2) {
          setPrefixedProperty(_p.rscratch, propName, prefix, value2);
          setPrefixedProperty(_p.rstyle, propName, prefix, value2);
        }, "setRs");
        setRs("labelX", null, p3.x);
        setRs("labelY", null, p3.y);
        var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY);
        setRs("labelAutoAngle", null, midAngle);
        var _createControlPointInfo = /* @__PURE__ */ __name(function createControlPointInfo() {
          if (_createControlPointInfo.cache) {
            return _createControlPointInfo.cache;
          }
          var ctrlpts = [];
          for (var i2 = 0; i2 + 5 < rs.allpts.length; i2 += 4) {
            var p0 = {
              x: rs.allpts[i2],
              y: rs.allpts[i2 + 1]
            };
            var p1 = {
              x: rs.allpts[i2 + 2],
              y: rs.allpts[i2 + 3]
            };
            var p22 = {
              x: rs.allpts[i2 + 4],
              y: rs.allpts[i2 + 5]
            };
            ctrlpts.push({
              p0,
              p1,
              p2: p22,
              startDist: 0,
              length: 0,
              segments: []
            });
          }
          var bpts = _p.rstyle.bezierPts;
          var nProjs = r2.bezierProjPcts.length;
          function addSegment(cp2, p02, p12, t03, t13) {
            var length2 = dist(p02, p12);
            var prevSegment = cp2.segments[cp2.segments.length - 1];
            var segment = {
              p0: p02,
              p1: p12,
              t0: t03,
              t1: t13,
              startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0,
              length: length2
            };
            cp2.segments.push(segment);
            cp2.length += length2;
          }
          __name(addSegment, "addSegment");
          for (var _i = 0; _i < ctrlpts.length; _i++) {
            var cp = ctrlpts[_i];
            var prevCp = ctrlpts[_i - 1];
            if (prevCp) {
              cp.startDist = prevCp.startDist + prevCp.length;
            }
            addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r2.bezierProjPcts[0]);
            for (var j3 = 0; j3 < nProjs - 1; j3++) {
              addSegment(cp, bpts[_i * nProjs + j3], bpts[_i * nProjs + j3 + 1], r2.bezierProjPcts[j3], r2.bezierProjPcts[j3 + 1]);
            }
            addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r2.bezierProjPcts[nProjs - 1], 1);
          }
          return _createControlPointInfo.cache = ctrlpts;
        }, "createControlPointInfo");
        var calculateEndProjection = /* @__PURE__ */ __name(function calculateEndProjection2(prefix) {
          var angle2;
          var isSrc = prefix === "source";
          if (!content[prefix]) {
            return;
          }
          var offset = edge.pstyle(prefix + "-text-offset").pfValue;
          switch (rs.edgeType) {
            case "self":
            case "compound":
            case "bezier":
            case "multibezier": {
              var cps = _createControlPointInfo();
              var selected;
              var startDist = 0;
              var totalDist = 0;
              for (var i2 = 0; i2 < cps.length; i2++) {
                var _cp = cps[isSrc ? i2 : cps.length - 1 - i2];
                for (var j3 = 0; j3 < _cp.segments.length; j3++) {
                  var _seg = _cp.segments[isSrc ? j3 : _cp.segments.length - 1 - j3];
                  var lastSeg = i2 === cps.length - 1 && j3 === _cp.segments.length - 1;
                  startDist = totalDist;
                  totalDist += _seg.length;
                  if (totalDist >= offset || lastSeg) {
                    selected = {
                      cp: _cp,
                      segment: _seg
                    };
                    break;
                  }
                }
                if (selected) {
                  break;
                }
              }
              var cp = selected.cp;
              var seg = selected.segment;
              var tSegment = (offset - startDist) / seg.length;
              var segDt = seg.t1 - seg.t0;
              var t4 = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment;
              t4 = bound(0, t4, 1);
              p3 = qbezierPtAt(cp.p0, cp.p1, cp.p2, t4);
              angle2 = bezierAngle(cp.p0, cp.p1, cp.p2, t4);
              break;
            }
            case "straight":
            case "segments":
            case "haystack": {
              var d3 = 0, di, d0;
              var p0, p1;
              var l4 = rs.allpts.length;
              for (var _i2 = 0; _i2 + 3 < l4; _i2 += 2) {
                if (isSrc) {
                  p0 = {
                    x: rs.allpts[_i2],
                    y: rs.allpts[_i2 + 1]
                  };
                  p1 = {
                    x: rs.allpts[_i2 + 2],
                    y: rs.allpts[_i2 + 3]
                  };
                } else {
                  p0 = {
                    x: rs.allpts[l4 - 2 - _i2],
                    y: rs.allpts[l4 - 1 - _i2]
                  };
                  p1 = {
                    x: rs.allpts[l4 - 4 - _i2],
                    y: rs.allpts[l4 - 3 - _i2]
                  };
                }
                di = dist(p0, p1);
                d0 = d3;
                d3 += di;
                if (d3 >= offset) {
                  break;
                }
              }
              var pD = offset - d0;
              var _t = pD / di;
              _t = bound(0, _t, 1);
              p3 = lineAt(p0, p1, _t);
              angle2 = lineAngle(p0, p1);
              break;
            }
          }
          setRs("labelX", prefix, p3.x);
          setRs("labelY", prefix, p3.y);
          setRs("labelAutoAngle", prefix, angle2);
        }, "calculateEndProjection");
        calculateEndProjection("source");
        calculateEndProjection("target");
        this.applyLabelDimensions(edge);
      };
      BRp$9.applyLabelDimensions = function(ele) {
        this.applyPrefixedLabelDimensions(ele);
        if (ele.isEdge()) {
          this.applyPrefixedLabelDimensions(ele, "source");
          this.applyPrefixedLabelDimensions(ele, "target");
        }
      };
      BRp$9.applyPrefixedLabelDimensions = function(ele, prefix) {
        var _p = ele._private;
        var text4 = this.getLabelText(ele, prefix);
        var cacheKey = hashString2(text4, ele._private.labelDimsKey);
        if (getPrefixedProperty(_p.rscratch, "prefixedLabelDimsKey", prefix) === cacheKey) {
          return;
        }
        setPrefixedProperty(_p.rscratch, "prefixedLabelDimsKey", prefix, cacheKey);
        var labelDims = this.calculateLabelDimensions(ele, text4);
        var lineHeight = ele.pstyle("line-height").pfValue;
        var textWrap = ele.pstyle("text-wrap").strValue;
        var lines = getPrefixedProperty(_p.rscratch, "labelWrapCachedLines", prefix) || [];
        var numLines = textWrap !== "wrap" ? 1 : Math.max(lines.length, 1);
        var normPerLineHeight = labelDims.height / numLines;
        var labelLineHeight = normPerLineHeight * lineHeight;
        var width3 = labelDims.width;
        var height2 = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight;
        setPrefixedProperty(_p.rstyle, "labelWidth", prefix, width3);
        setPrefixedProperty(_p.rscratch, "labelWidth", prefix, width3);
        setPrefixedProperty(_p.rstyle, "labelHeight", prefix, height2);
        setPrefixedProperty(_p.rscratch, "labelHeight", prefix, height2);
        setPrefixedProperty(_p.rscratch, "labelLineHeight", prefix, labelLineHeight);
      };
      BRp$9.getLabelText = function(ele, prefix) {
        var _p = ele._private;
        var pfd = prefix ? prefix + "-" : "";
        var text4 = ele.pstyle(pfd + "label").strValue;
        var textTransform = ele.pstyle("text-transform").value;
        var rscratch = /* @__PURE__ */ __name(function rscratch2(propName, value2) {
          if (value2) {
            setPrefixedProperty(_p.rscratch, propName, prefix, value2);
            return value2;
          } else {
            return getPrefixedProperty(_p.rscratch, propName, prefix);
          }
        }, "rscratch");
        if (!text4) {
          return "";
        }
        if (textTransform == "none") ;
        else if (textTransform == "uppercase") {
          text4 = text4.toUpperCase();
        } else if (textTransform == "lowercase") {
          text4 = text4.toLowerCase();
        }
        var wrapStyle = ele.pstyle("text-wrap").value;
        if (wrapStyle === "wrap") {
          var labelKey = rscratch("labelKey");
          if (labelKey != null && rscratch("labelWrapKey") === labelKey) {
            return rscratch("labelWrapCachedText");
          }
          var zwsp = "\u200B";
          var lines = text4.split("\n");
          var maxW = ele.pstyle("text-max-width").pfValue;
          var overflow = ele.pstyle("text-overflow-wrap").value;
          var overflowAny = overflow === "anywhere";
          var wrappedLines = [];
          var separatorRegex = /[\s\u200b]+|$/g;
          for (var l4 = 0; l4 < lines.length; l4++) {
            var line2 = lines[l4];
            var lineDims = this.calculateLabelDimensions(ele, line2);
            var lineW = lineDims.width;
            if (overflowAny) {
              var processedLine = line2.split("").join(zwsp);
              line2 = processedLine;
            }
            if (lineW > maxW) {
              var separatorMatches = line2.matchAll(separatorRegex);
              var subline = "";
              var previousIndex = 0;
              var _iterator = _createForOfIteratorHelper(separatorMatches), _step;
              try {
                for (_iterator.s(); !(_step = _iterator.n()).done; ) {
                  var separatorMatch = _step.value;
                  var wordSeparator = separatorMatch[0];
                  var word = line2.substring(previousIndex, separatorMatch.index);
                  previousIndex = separatorMatch.index + wordSeparator.length;
                  var testLine = subline.length === 0 ? word : subline + word + wordSeparator;
                  var testDims = this.calculateLabelDimensions(ele, testLine);
                  var testW = testDims.width;
                  if (testW <= maxW) {
                    subline += word + wordSeparator;
                  } else {
                    if (subline) {
                      wrappedLines.push(subline);
                    }
                    subline = word + wordSeparator;
                  }
                }
              } catch (err) {
                _iterator.e(err);
              } finally {
                _iterator.f();
              }
              if (!subline.match(/^[\s\u200b]+$/)) {
                wrappedLines.push(subline);
              }
            } else {
              wrappedLines.push(line2);
            }
          }
          rscratch("labelWrapCachedLines", wrappedLines);
          text4 = rscratch("labelWrapCachedText", wrappedLines.join("\n"));
          rscratch("labelWrapKey", labelKey);
        } else if (wrapStyle === "ellipsis") {
          var _maxW = ele.pstyle("text-max-width").pfValue;
          var ellipsized = "";
          var ellipsis = "\u2026";
          var incLastCh = false;
          if (this.calculateLabelDimensions(ele, text4).width < _maxW) {
            return text4;
          }
          for (var i2 = 0; i2 < text4.length; i2++) {
            var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text4[i2] + ellipsis).width;
            if (widthWithNextCh > _maxW) {
              break;
            }
            ellipsized += text4[i2];
            if (i2 === text4.length - 1) {
              incLastCh = true;
            }
          }
          if (!incLastCh) {
            ellipsized += ellipsis;
          }
          return ellipsized;
        }
        return text4;
      };
      BRp$9.getLabelJustification = function(ele) {
        var justification = ele.pstyle("text-justification").strValue;
        var textHalign = ele.pstyle("text-halign").strValue;
        if (justification === "auto") {
          if (ele.isNode()) {
            switch (textHalign) {
              case "left":
                return "right";
              case "right":
                return "left";
              default:
                return "center";
            }
          } else {
            return "center";
          }
        } else {
          return justification;
        }
      };
      BRp$9.calculateLabelDimensions = function(ele, text4) {
        var r2 = this;
        var containerWindow = r2.cy.window();
        var document2 = containerWindow.document;
        var padding = 0;
        var fStyle = ele.pstyle("font-style").strValue;
        var size4 = ele.pstyle("font-size").pfValue;
        var family = ele.pstyle("font-family").strValue;
        var weight8 = ele.pstyle("font-weight").strValue;
        var canvas = this.labelCalcCanvas;
        var c2d = this.labelCalcCanvasContext;
        if (!canvas) {
          canvas = this.labelCalcCanvas = document2.createElement("canvas");
          c2d = this.labelCalcCanvasContext = canvas.getContext("2d");
          var ds = canvas.style;
          ds.position = "absolute";
          ds.left = "-9999px";
          ds.top = "-9999px";
          ds.zIndex = "-1";
          ds.visibility = "hidden";
          ds.pointerEvents = "none";
        }
        c2d.font = "".concat(fStyle, " ").concat(weight8, " ").concat(size4, "px ").concat(family);
        var width3 = 0;
        var height2 = 0;
        var lines = text4.split("\n");
        for (var i2 = 0; i2 < lines.length; i2++) {
          var line2 = lines[i2];
          var metrics = c2d.measureText(line2);
          var w4 = Math.ceil(metrics.width);
          var h3 = size4;
          width3 = Math.max(w4, width3);
          height2 += h3;
        }
        width3 += padding;
        height2 += padding;
        return {
          width: width3,
          height: height2
        };
      };
      BRp$9.calculateLabelAngle = function(ele, prefix) {
        var _p = ele._private;
        var rs = _p.rscratch;
        var isEdge2 = ele.isEdge();
        var prefixDash = prefix ? prefix + "-" : "";
        var rot = ele.pstyle(prefixDash + "text-rotation");
        var rotStr = rot.strValue;
        if (rotStr === "none") {
          return 0;
        } else if (isEdge2 && rotStr === "autorotate") {
          return rs.labelAutoAngle;
        } else if (rotStr === "autorotate") {
          return 0;
        } else {
          return rot.pfValue;
        }
      };
      BRp$9.calculateLabelAngles = function(ele) {
        var r2 = this;
        var isEdge2 = ele.isEdge();
        var _p = ele._private;
        var rs = _p.rscratch;
        rs.labelAngle = r2.calculateLabelAngle(ele);
        if (isEdge2) {
          rs.sourceLabelAngle = r2.calculateLabelAngle(ele, "source");
          rs.targetLabelAngle = r2.calculateLabelAngle(ele, "target");
        }
      };
      BRp$8 = {};
      TOO_SMALL_CUT_RECT = 28;
      warnedCutRect = false;
      BRp$8.getNodeShape = function(node2) {
        var r2 = this;
        var shape = node2.pstyle("shape").value;
        if (shape === "cutrectangle" && (node2.width() < TOO_SMALL_CUT_RECT || node2.height() < TOO_SMALL_CUT_RECT)) {
          if (!warnedCutRect) {
            warn("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead");
            warnedCutRect = true;
          }
          return "rectangle";
        }
        if (node2.isParent()) {
          if (shape === "rectangle" || shape === "roundrectangle" || shape === "round-rectangle" || shape === "cutrectangle" || shape === "cut-rectangle" || shape === "barrel") {
            return shape;
          } else {
            return "rectangle";
          }
        }
        if (shape === "polygon") {
          var points = node2.pstyle("shape-polygon-points").value;
          return r2.nodeShapes.makePolygon(points).name;
        }
        return shape;
      };
      BRp$7 = {};
      BRp$7.registerCalculationListeners = function() {
        var cy = this.cy;
        var elesToUpdate = cy.collection();
        var r2 = this;
        var enqueue = /* @__PURE__ */ __name(function enqueue2(eles) {
          var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
          elesToUpdate.merge(eles);
          if (dirtyStyleCaches) {
            for (var i2 = 0; i2 < eles.length; i2++) {
              var ele = eles[i2];
              var _p = ele._private;
              var rstyle = _p.rstyle;
              rstyle.clean = false;
              rstyle.cleanConnected = false;
            }
          }
        }, "enqueue");
        r2.binder(cy).on("bounds.* dirty.*", /* @__PURE__ */ __name(function onDirtyBounds(e3) {
          var ele = e3.target;
          enqueue(ele);
        }, "onDirtyBounds")).on("style.* background.*", /* @__PURE__ */ __name(function onDirtyStyle(e3) {
          var ele = e3.target;
          enqueue(ele, false);
        }, "onDirtyStyle"));
        var updateEleCalcs = /* @__PURE__ */ __name(function updateEleCalcs2(willDraw) {
          if (willDraw) {
            var fns = r2.onUpdateEleCalcsFns;
            elesToUpdate.cleanStyle();
            for (var i2 = 0; i2 < elesToUpdate.length; i2++) {
              var ele = elesToUpdate[i2];
              var rstyle = ele._private.rstyle;
              if (ele.isNode() && !rstyle.cleanConnected) {
                enqueue(ele.connectedEdges());
                rstyle.cleanConnected = true;
              }
            }
            if (fns) {
              for (var _i = 0; _i < fns.length; _i++) {
                var fn3 = fns[_i];
                fn3(willDraw, elesToUpdate);
              }
            }
            r2.recalculateRenderedStyle(elesToUpdate);
            elesToUpdate = cy.collection();
          }
        }, "updateEleCalcs");
        r2.flushRenderedStyleQueue = function() {
          updateEleCalcs(true);
        };
        r2.beforeRender(updateEleCalcs, r2.beforeRenderPriorities.eleCalcs);
      };
      BRp$7.onUpdateEleCalcs = function(fn3) {
        var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || [];
        fns.push(fn3);
      };
      BRp$7.recalculateRenderedStyle = function(eles, useCache) {
        var isCleanConnected = /* @__PURE__ */ __name(function isCleanConnected2(ele2) {
          return ele2._private.rstyle.cleanConnected;
        }, "isCleanConnected");
        if (eles.length === 0) {
          return;
        }
        var edges3 = [];
        var nodes5 = [];
        if (this.destroyed) {
          return;
        }
        if (useCache === void 0) {
          useCache = true;
        }
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          var _p = ele._private;
          var rstyle = _p.rstyle;
          if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) {
            rstyle.clean = false;
          }
          if (ele.isEdge() && ele.isBundledBezier()) {
            if (ele.parallelEdges().some(function(ele2) {
              return !ele2._private.rstyle.clean && ele2.isBundledBezier();
            })) {
              rstyle.clean = false;
            }
          }
          if (useCache && rstyle.clean || ele.removed()) {
            continue;
          }
          if (ele.pstyle("display").value === "none") {
            continue;
          }
          if (_p.group === "nodes") {
            nodes5.push(ele);
          } else {
            edges3.push(ele);
          }
          rstyle.clean = true;
        }
        for (var _i2 = 0; _i2 < nodes5.length; _i2++) {
          var _ele = nodes5[_i2];
          var _p2 = _ele._private;
          var _rstyle = _p2.rstyle;
          var pos = _ele.position();
          this.recalculateNodeLabelProjection(_ele);
          _rstyle.nodeX = pos.x;
          _rstyle.nodeY = pos.y;
          _rstyle.nodeW = _ele.pstyle("width").pfValue;
          _rstyle.nodeH = _ele.pstyle("height").pfValue;
        }
        this.recalculateEdgeProjections(edges3);
        for (var _i3 = 0; _i3 < edges3.length; _i3++) {
          var _ele2 = edges3[_i3];
          var _p3 = _ele2._private;
          var _rstyle2 = _p3.rstyle;
          var rs = _p3.rscratch;
          _rstyle2.srcX = rs.arrowStartX;
          _rstyle2.srcY = rs.arrowStartY;
          _rstyle2.tgtX = rs.arrowEndX;
          _rstyle2.tgtY = rs.arrowEndY;
          _rstyle2.midX = rs.midX;
          _rstyle2.midY = rs.midY;
          _rstyle2.labelAngle = rs.labelAngle;
          _rstyle2.sourceLabelAngle = rs.sourceLabelAngle;
          _rstyle2.targetLabelAngle = rs.targetLabelAngle;
        }
      };
      BRp$6 = {};
      BRp$6.updateCachedGrabbedEles = function() {
        var eles = this.cachedZSortedEles;
        if (!eles) {
          return;
        }
        eles.drag = [];
        eles.nondrag = [];
        var grabTargets = [];
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          var rs = ele._private.rscratch;
          if (ele.grabbed() && !ele.isParent()) {
            grabTargets.push(ele);
          } else if (rs.inDragLayer) {
            eles.drag.push(ele);
          } else {
            eles.nondrag.push(ele);
          }
        }
        for (var i2 = 0; i2 < grabTargets.length; i2++) {
          var ele = grabTargets[i2];
          eles.drag.push(ele);
        }
      };
      BRp$6.invalidateCachedZSortedEles = function() {
        this.cachedZSortedEles = null;
      };
      BRp$6.getCachedZSortedEles = function(forceRecalc) {
        if (forceRecalc || !this.cachedZSortedEles) {
          var eles = this.cy.mutableElements().toArray();
          eles.sort(zIndexSort);
          eles.interactive = eles.filter(function(ele) {
            return ele.interactive();
          });
          this.cachedZSortedEles = eles;
          this.updateCachedGrabbedEles();
        } else {
          eles = this.cachedZSortedEles;
        }
        return eles;
      };
      BRp$5 = {};
      [BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function(props) {
        extend4(BRp$5, props);
      });
      BRp$4 = {};
      BRp$4.getCachedImage = function(url, crossOrigin, onLoad) {
        var r2 = this;
        var imageCache = r2.imageCache = r2.imageCache || {};
        var cache3 = imageCache[url];
        if (cache3) {
          if (!cache3.image.complete) {
            cache3.image.addEventListener("load", onLoad);
          }
          return cache3.image;
        } else {
          cache3 = imageCache[url] = imageCache[url] || {};
          var image = cache3.image = new Image();
          image.addEventListener("load", onLoad);
          image.addEventListener("error", function() {
            image.error = true;
          });
          var dataUriPrefix = "data:";
          var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix;
          if (!isDataUri) {
            crossOrigin = crossOrigin === "null" ? null : crossOrigin;
            image.crossOrigin = crossOrigin;
          }
          image.src = url;
          return image;
        }
      };
      setGrabState = /* @__PURE__ */ __name(function setGrabState2(ele, grabbed) {
        var ele0 = ele[0];
        if (!ele0 || ele0._private.grabbed === grabbed) {
          return;
        }
        ele0._private.grabbed = grabbed;
        ele.updateStyle(false);
      }, "setGrabState");
      setGrabbed = /* @__PURE__ */ __name(function setGrabbed2(ele) {
        setGrabState(ele, true);
      }, "setGrabbed");
      setFreed = /* @__PURE__ */ __name(function setFreed2(ele) {
        setGrabState(ele, false);
      }, "setFreed");
      BRp$3 = {};
      BRp$3.registerBinding = function(target, event3, handler, useCapture) {
        var args = Array.prototype.slice.apply(arguments, [1]);
        if (Array.isArray(target)) {
          var res = [];
          for (var i2 = 0; i2 < target.length; i2++) {
            var t4 = target[i2];
            if (t4 !== void 0) {
              var b3 = this.binder(t4);
              res.push(b3.on.apply(b3, args));
            }
          }
          return res;
        }
        var b3 = this.binder(target);
        return b3.on.apply(b3, args);
      };
      BRp$3.binder = function(tgt) {
        var r2 = this;
        var containerWindow = r2.cy.window();
        var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt);
        if (r2.supportsPassiveEvents == null) {
          var supportsPassive = false;
          try {
            var opts = Object.defineProperty({}, "passive", {
              get: /* @__PURE__ */ __name(function get6() {
                supportsPassive = true;
                return true;
              }, "get")
            });
            containerWindow.addEventListener("test", null, opts);
          } catch (err) {
          }
          r2.supportsPassiveEvents = supportsPassive;
        }
        var on3 = /* @__PURE__ */ __name(function on4(event3, handler, useCapture) {
          var args = Array.prototype.slice.call(arguments);
          if (tgtIsDom && r2.supportsPassiveEvents) {
            args[2] = {
              capture: useCapture != null ? useCapture : false,
              passive: false,
              once: false
            };
          }
          r2.bindings.push({
            target: tgt,
            args
          });
          (tgt.addEventListener || tgt.on).apply(tgt, args);
          return this;
        }, "on");
        return {
          on: on3,
          addEventListener: on3,
          addListener: on3,
          bind: on3
        };
      };
      BRp$3.nodeIsDraggable = function(node2) {
        return node2 && node2.isNode() && !node2.locked() && node2.grabbable();
      };
      BRp$3.nodeIsGrabbable = function(node2) {
        return this.nodeIsDraggable(node2) && node2.interactive();
      };
      BRp$3.load = function() {
        var r2 = this;
        var containerWindow = r2.cy.window();
        var isSelected = /* @__PURE__ */ __name(function isSelected2(ele) {
          return ele.selected();
        }, "isSelected");
        var getShadowRoot = /* @__PURE__ */ __name(function getShadowRoot2(element3) {
          var rootNode = element3.getRootNode();
          if (rootNode && rootNode.nodeType === 11 && rootNode.host !== void 0) {
            return rootNode;
          }
        }, "getShadowRoot");
        var triggerEvents = /* @__PURE__ */ __name(function triggerEvents2(target, names, e3, position5) {
          if (target == null) {
            target = r2.cy;
          }
          for (var i2 = 0; i2 < names.length; i2++) {
            var name = names[i2];
            target.emit({
              originalEvent: e3,
              type: name,
              position: position5
            });
          }
        }, "triggerEvents");
        var isMultSelKeyDown = /* @__PURE__ */ __name(function isMultSelKeyDown2(e3) {
          return e3.shiftKey || e3.metaKey || e3.ctrlKey;
        }, "isMultSelKeyDown");
        var allowPanningPassthrough = /* @__PURE__ */ __name(function allowPanningPassthrough2(down, downs) {
          var allowPassthrough = true;
          if (r2.cy.hasCompoundNodes() && down && down.pannable()) {
            for (var i2 = 0; downs && i2 < downs.length; i2++) {
              var down = downs[i2];
              if (down.isNode() && down.isParent() && !down.pannable()) {
                allowPassthrough = false;
                break;
              }
            }
          } else {
            allowPassthrough = true;
          }
          return allowPassthrough;
        }, "allowPanningPassthrough");
        var setInDragLayer = /* @__PURE__ */ __name(function setInDragLayer2(ele) {
          ele[0]._private.rscratch.inDragLayer = true;
        }, "setInDragLayer");
        var setOutDragLayer = /* @__PURE__ */ __name(function setOutDragLayer2(ele) {
          ele[0]._private.rscratch.inDragLayer = false;
        }, "setOutDragLayer");
        var setGrabTarget = /* @__PURE__ */ __name(function setGrabTarget2(ele) {
          ele[0]._private.rscratch.isGrabTarget = true;
        }, "setGrabTarget");
        var removeGrabTarget = /* @__PURE__ */ __name(function removeGrabTarget2(ele) {
          ele[0]._private.rscratch.isGrabTarget = false;
        }, "removeGrabTarget");
        var addToDragList = /* @__PURE__ */ __name(function addToDragList2(ele, opts) {
          var list = opts.addToList;
          var listHasEle = list.has(ele);
          if (!listHasEle && ele.grabbable() && !ele.locked()) {
            list.merge(ele);
            setGrabbed(ele);
          }
        }, "addToDragList");
        var addDescendantsToDrag = /* @__PURE__ */ __name(function addDescendantsToDrag2(node2, opts) {
          if (!node2.cy().hasCompoundNodes()) {
            return;
          }
          if (opts.inDragLayer == null && opts.addToList == null) {
            return;
          }
          var innerNodes = node2.descendants();
          if (opts.inDragLayer) {
            innerNodes.forEach(setInDragLayer);
            innerNodes.connectedEdges().forEach(setInDragLayer);
          }
          if (opts.addToList) {
            addToDragList(innerNodes, opts);
          }
        }, "addDescendantsToDrag");
        var addNodesToDrag = /* @__PURE__ */ __name(function addNodesToDrag2(nodes5, opts) {
          opts = opts || {};
          var hasCompoundNodes2 = nodes5.cy().hasCompoundNodes();
          if (opts.inDragLayer) {
            nodes5.forEach(setInDragLayer);
            nodes5.neighborhood().stdFilter(function(ele) {
              return !hasCompoundNodes2 || ele.isEdge();
            }).forEach(setInDragLayer);
          }
          if (opts.addToList) {
            nodes5.forEach(function(ele) {
              addToDragList(ele, opts);
            });
          }
          addDescendantsToDrag(nodes5, opts);
          updateAncestorsInDragLayer(nodes5, {
            inDragLayer: opts.inDragLayer
          });
          r2.updateCachedGrabbedEles();
        }, "addNodesToDrag");
        var addNodeToDrag = addNodesToDrag;
        var freeDraggedElements = /* @__PURE__ */ __name(function freeDraggedElements2(grabbedEles) {
          if (!grabbedEles) {
            return;
          }
          r2.getCachedZSortedEles().forEach(function(ele) {
            setFreed(ele);
            setOutDragLayer(ele);
            removeGrabTarget(ele);
          });
          r2.updateCachedGrabbedEles();
        }, "freeDraggedElements");
        var updateAncestorsInDragLayer = /* @__PURE__ */ __name(function updateAncestorsInDragLayer2(node2, opts) {
          if (opts.inDragLayer == null && opts.addToList == null) {
            return;
          }
          if (!node2.cy().hasCompoundNodes()) {
            return;
          }
          var parent4 = node2.ancestors().orphans();
          if (parent4.same(node2)) {
            return;
          }
          var nodes5 = parent4.descendants().spawnSelf().merge(parent4).unmerge(node2).unmerge(node2.descendants());
          var edges3 = nodes5.connectedEdges();
          if (opts.inDragLayer) {
            edges3.forEach(setInDragLayer);
            nodes5.forEach(setInDragLayer);
          }
          if (opts.addToList) {
            nodes5.forEach(function(ele) {
              addToDragList(ele, opts);
            });
          }
        }, "updateAncestorsInDragLayer");
        var blurActiveDomElement = /* @__PURE__ */ __name(function blurActiveDomElement2() {
          if (document.activeElement != null && document.activeElement.blur != null) {
            document.activeElement.blur();
          }
        }, "blurActiveDomElement");
        var haveMutationsApi = typeof MutationObserver !== "undefined";
        var haveResizeObserverApi = typeof ResizeObserver !== "undefined";
        if (haveMutationsApi) {
          r2.removeObserver = new MutationObserver(function(mutns) {
            for (var i2 = 0; i2 < mutns.length; i2++) {
              var mutn = mutns[i2];
              var rNodes = mutn.removedNodes;
              if (rNodes) {
                for (var j3 = 0; j3 < rNodes.length; j3++) {
                  var rNode = rNodes[j3];
                  if (rNode === r2.container) {
                    r2.destroy();
                    break;
                  }
                }
              }
            }
          });
          if (r2.container.parentNode) {
            r2.removeObserver.observe(r2.container.parentNode, {
              childList: true
            });
          }
        } else {
          r2.registerBinding(r2.container, "DOMNodeRemoved", function(e3) {
            r2.destroy();
          });
        }
        var onResize = debounce(function() {
          r2.cy.resize();
        }, 100);
        if (haveMutationsApi) {
          r2.styleObserver = new MutationObserver(onResize);
          r2.styleObserver.observe(r2.container, {
            attributes: true
          });
        }
        r2.registerBinding(containerWindow, "resize", onResize);
        if (haveResizeObserverApi) {
          r2.resizeObserver = new ResizeObserver(onResize);
          r2.resizeObserver.observe(r2.container);
        }
        var forEachUp = /* @__PURE__ */ __name(function forEachUp2(domEle, fn3) {
          while (domEle != null) {
            fn3(domEle);
            domEle = domEle.parentNode;
          }
        }, "forEachUp");
        var invalidateCoords = /* @__PURE__ */ __name(function invalidateCoords2() {
          r2.invalidateContainerClientCoordsCache();
        }, "invalidateCoords");
        forEachUp(r2.container, function(domEle) {
          r2.registerBinding(domEle, "transitionend", invalidateCoords);
          r2.registerBinding(domEle, "animationend", invalidateCoords);
          r2.registerBinding(domEle, "scroll", invalidateCoords);
        });
        r2.registerBinding(r2.container, "contextmenu", function(e3) {
          e3.preventDefault();
        });
        var inBoxSelection = /* @__PURE__ */ __name(function inBoxSelection2() {
          return r2.selection[4] !== 0;
        }, "inBoxSelection");
        var eventInContainer = /* @__PURE__ */ __name(function eventInContainer2(e3) {
          var containerPageCoords = r2.findContainerClientCoords();
          var x5 = containerPageCoords[0];
          var y6 = containerPageCoords[1];
          var width3 = containerPageCoords[2];
          var height2 = containerPageCoords[3];
          var positions2 = e3.touches ? e3.touches : [e3];
          var atLeastOnePosInside = false;
          for (var i2 = 0; i2 < positions2.length; i2++) {
            var p3 = positions2[i2];
            if (x5 <= p3.clientX && p3.clientX <= x5 + width3 && y6 <= p3.clientY && p3.clientY <= y6 + height2) {
              atLeastOnePosInside = true;
              break;
            }
          }
          if (!atLeastOnePosInside) {
            return false;
          }
          var container2 = r2.container;
          var target = e3.target;
          var tParent = target.parentNode;
          var containerIsTarget = false;
          while (tParent) {
            if (tParent === container2) {
              containerIsTarget = true;
              break;
            }
            tParent = tParent.parentNode;
          }
          if (!containerIsTarget) {
            return false;
          }
          return true;
        }, "eventInContainer");
        r2.registerBinding(r2.container, "mousedown", /* @__PURE__ */ __name(function mousedownHandler(e3) {
          if (!eventInContainer(e3)) {
            return;
          }
          if (r2.hoverData.which === 1 && e3.which !== 1) {
            return;
          }
          e3.preventDefault();
          blurActiveDomElement();
          r2.hoverData.capture = true;
          r2.hoverData.which = e3.which;
          var cy = r2.cy;
          var gpos = [e3.clientX, e3.clientY];
          var pos = r2.projectIntoViewport(gpos[0], gpos[1]);
          var select = r2.selection;
          var nears = r2.findNearestElements(pos[0], pos[1], true, false);
          var near = nears[0];
          var draggedElements = r2.dragData.possibleDragElements;
          r2.hoverData.mdownPos = pos;
          r2.hoverData.mdownGPos = gpos;
          var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) {
            return {
              originalEvent: e3,
              type: type3,
              position: {
                x: pos[0],
                y: pos[1]
              }
            };
          }, "makeEvent");
          var checkForTaphold = /* @__PURE__ */ __name(function checkForTaphold2() {
            r2.hoverData.tapholdCancelled = false;
            clearTimeout(r2.hoverData.tapholdTimeout);
            r2.hoverData.tapholdTimeout = setTimeout(function() {
              if (r2.hoverData.tapholdCancelled) {
                return;
              } else {
                var ele = r2.hoverData.down;
                if (ele) {
                  ele.emit(makeEvent("taphold"));
                } else {
                  cy.emit(makeEvent("taphold"));
                }
              }
            }, r2.tapholdDuration);
          }, "checkForTaphold");
          if (e3.which == 3) {
            r2.hoverData.cxtStarted = true;
            var cxtEvt = {
              originalEvent: e3,
              type: "cxttapstart",
              position: {
                x: pos[0],
                y: pos[1]
              }
            };
            if (near) {
              near.activate();
              near.emit(cxtEvt);
              r2.hoverData.down = near;
            } else {
              cy.emit(cxtEvt);
            }
            r2.hoverData.downTime = (/* @__PURE__ */ new Date()).getTime();
            r2.hoverData.cxtDragged = false;
          } else if (e3.which == 1) {
            if (near) {
              near.activate();
            }
            {
              if (near != null) {
                if (r2.nodeIsGrabbable(near)) {
                  var triggerGrab = /* @__PURE__ */ __name(function triggerGrab2(ele) {
                    ele.emit(makeEvent("grab"));
                  }, "triggerGrab");
                  setGrabTarget(near);
                  if (!near.selected()) {
                    draggedElements = r2.dragData.possibleDragElements = cy.collection();
                    addNodeToDrag(near, {
                      addToList: draggedElements
                    });
                    near.emit(makeEvent("grabon")).emit(makeEvent("grab"));
                  } else {
                    draggedElements = r2.dragData.possibleDragElements = cy.collection();
                    var selectedNodes = cy.$(function(ele) {
                      return ele.isNode() && ele.selected() && r2.nodeIsGrabbable(ele);
                    });
                    addNodesToDrag(selectedNodes, {
                      addToList: draggedElements
                    });
                    near.emit(makeEvent("grabon"));
                    selectedNodes.forEach(triggerGrab);
                  }
                  r2.redrawHint("eles", true);
                  r2.redrawHint("drag", true);
                }
              }
              r2.hoverData.down = near;
              r2.hoverData.downs = nears;
              r2.hoverData.downTime = (/* @__PURE__ */ new Date()).getTime();
            }
            triggerEvents(near, ["mousedown", "tapstart", "vmousedown"], e3, {
              x: pos[0],
              y: pos[1]
            });
            if (near == null) {
              select[4] = 1;
              r2.data.bgActivePosistion = {
                x: pos[0],
                y: pos[1]
              };
              r2.redrawHint("select", true);
              r2.redraw();
            } else if (near.pannable()) {
              select[4] = 1;
            }
            checkForTaphold();
          }
          select[0] = select[2] = pos[0];
          select[1] = select[3] = pos[1];
        }, "mousedownHandler"), false);
        var shadowRoot = getShadowRoot(r2.container);
        r2.registerBinding([containerWindow, shadowRoot], "mousemove", /* @__PURE__ */ __name(function mousemoveHandler(e3) {
          var capture = r2.hoverData.capture;
          if (!capture && !eventInContainer(e3)) {
            return;
          }
          var preventDefault2 = false;
          var cy = r2.cy;
          var zoom2 = cy.zoom();
          var gpos = [e3.clientX, e3.clientY];
          var pos = r2.projectIntoViewport(gpos[0], gpos[1]);
          var mdownPos = r2.hoverData.mdownPos;
          var mdownGPos = r2.hoverData.mdownGPos;
          var select = r2.selection;
          var near = null;
          if (!r2.hoverData.draggingEles && !r2.hoverData.dragging && !r2.hoverData.selecting) {
            near = r2.findNearestElement(pos[0], pos[1], true, false);
          }
          var last4 = r2.hoverData.last;
          var down = r2.hoverData.down;
          var disp = [pos[0] - select[2], pos[1] - select[3]];
          var draggedElements = r2.dragData.possibleDragElements;
          var isOverThresholdDrag;
          if (mdownGPos) {
            var dx = gpos[0] - mdownGPos[0];
            var dx2 = dx * dx;
            var dy = gpos[1] - mdownGPos[1];
            var dy2 = dy * dy;
            var dist22 = dx2 + dy2;
            r2.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist22 >= r2.desktopTapThreshold2;
          }
          var multSelKeyDown = isMultSelKeyDown(e3);
          if (isOverThresholdDrag) {
            r2.hoverData.tapholdCancelled = true;
          }
          var updateDragDelta = /* @__PURE__ */ __name(function updateDragDelta2() {
            var dragDelta2 = r2.hoverData.dragDelta = r2.hoverData.dragDelta || [];
            if (dragDelta2.length === 0) {
              dragDelta2.push(disp[0]);
              dragDelta2.push(disp[1]);
            } else {
              dragDelta2[0] += disp[0];
              dragDelta2[1] += disp[1];
            }
          }, "updateDragDelta");
          preventDefault2 = true;
          triggerEvents(near, ["mousemove", "vmousemove", "tapdrag"], e3, {
            x: pos[0],
            y: pos[1]
          });
          var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) {
            return {
              originalEvent: e3,
              type: type3,
              position: {
                x: pos[0],
                y: pos[1]
              }
            };
          }, "makeEvent");
          var goIntoBoxMode = /* @__PURE__ */ __name(function goIntoBoxMode2() {
            r2.data.bgActivePosistion = void 0;
            if (!r2.hoverData.selecting) {
              cy.emit(makeEvent("boxstart"));
            }
            select[4] = 1;
            r2.hoverData.selecting = true;
            r2.redrawHint("select", true);
            r2.redraw();
          }, "goIntoBoxMode");
          if (r2.hoverData.which === 3) {
            if (isOverThresholdDrag) {
              var cxtEvt = makeEvent("cxtdrag");
              if (down) {
                down.emit(cxtEvt);
              } else {
                cy.emit(cxtEvt);
              }
              r2.hoverData.cxtDragged = true;
              if (!r2.hoverData.cxtOver || near !== r2.hoverData.cxtOver) {
                if (r2.hoverData.cxtOver) {
                  r2.hoverData.cxtOver.emit(makeEvent("cxtdragout"));
                }
                r2.hoverData.cxtOver = near;
                if (near) {
                  near.emit(makeEvent("cxtdragover"));
                }
              }
            }
          } else if (r2.hoverData.dragging) {
            preventDefault2 = true;
            if (cy.panningEnabled() && cy.userPanningEnabled()) {
              var deltaP;
              if (r2.hoverData.justStartedPan) {
                var mdPos = r2.hoverData.mdownPos;
                deltaP = {
                  x: (pos[0] - mdPos[0]) * zoom2,
                  y: (pos[1] - mdPos[1]) * zoom2
                };
                r2.hoverData.justStartedPan = false;
              } else {
                deltaP = {
                  x: disp[0] * zoom2,
                  y: disp[1] * zoom2
                };
              }
              cy.panBy(deltaP);
              cy.emit(makeEvent("dragpan"));
              r2.hoverData.dragged = true;
            }
            pos = r2.projectIntoViewport(e3.clientX, e3.clientY);
          } else if (select[4] == 1 && (down == null || down.pannable())) {
            if (isOverThresholdDrag) {
              if (!r2.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) {
                goIntoBoxMode();
              } else if (!r2.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) {
                var allowPassthrough = allowPanningPassthrough(down, r2.hoverData.downs);
                if (allowPassthrough) {
                  r2.hoverData.dragging = true;
                  r2.hoverData.justStartedPan = true;
                  select[4] = 0;
                  r2.data.bgActivePosistion = array2point(mdownPos);
                  r2.redrawHint("select", true);
                  r2.redraw();
                }
              }
              if (down && down.pannable() && down.active()) {
                down.unactivate();
              }
            }
          } else {
            if (down && down.pannable() && down.active()) {
              down.unactivate();
            }
            if ((!down || !down.grabbed()) && near != last4) {
              if (last4) {
                triggerEvents(last4, ["mouseout", "tapdragout"], e3, {
                  x: pos[0],
                  y: pos[1]
                });
              }
              if (near) {
                triggerEvents(near, ["mouseover", "tapdragover"], e3, {
                  x: pos[0],
                  y: pos[1]
                });
              }
              r2.hoverData.last = near;
            }
            if (down) {
              if (isOverThresholdDrag) {
                if (cy.boxSelectionEnabled() && multSelKeyDown) {
                  if (down && down.grabbed()) {
                    freeDraggedElements(draggedElements);
                    down.emit(makeEvent("freeon"));
                    draggedElements.emit(makeEvent("free"));
                    if (r2.dragData.didDrag) {
                      down.emit(makeEvent("dragfreeon"));
                      draggedElements.emit(makeEvent("dragfree"));
                    }
                  }
                  goIntoBoxMode();
                } else if (down && down.grabbed() && r2.nodeIsDraggable(down)) {
                  var justStartedDrag = !r2.dragData.didDrag;
                  if (justStartedDrag) {
                    r2.redrawHint("eles", true);
                  }
                  r2.dragData.didDrag = true;
                  if (!r2.hoverData.draggingEles) {
                    addNodesToDrag(draggedElements, {
                      inDragLayer: true
                    });
                  }
                  var totalShift = {
                    x: 0,
                    y: 0
                  };
                  if (number$1(disp[0]) && number$1(disp[1])) {
                    totalShift.x += disp[0];
                    totalShift.y += disp[1];
                    if (justStartedDrag) {
                      var dragDelta = r2.hoverData.dragDelta;
                      if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {
                        totalShift.x += dragDelta[0];
                        totalShift.y += dragDelta[1];
                      }
                    }
                  }
                  r2.hoverData.draggingEles = true;
                  draggedElements.silentShift(totalShift).emit(makeEvent("position")).emit(makeEvent("drag"));
                  r2.redrawHint("drag", true);
                  r2.redraw();
                }
              } else {
                updateDragDelta();
              }
            }
            preventDefault2 = true;
          }
          select[2] = pos[0];
          select[3] = pos[1];
          if (preventDefault2) {
            if (e3.stopPropagation) e3.stopPropagation();
            if (e3.preventDefault) e3.preventDefault();
            return false;
          }
        }, "mousemoveHandler"), false);
        var clickTimeout, didDoubleClick, prevClickTimeStamp;
        r2.registerBinding(containerWindow, "mouseup", /* @__PURE__ */ __name(function mouseupHandler(e3) {
          if (r2.hoverData.which === 1 && e3.which !== 1 && r2.hoverData.capture) {
            return;
          }
          var capture = r2.hoverData.capture;
          if (!capture) {
            return;
          }
          r2.hoverData.capture = false;
          var cy = r2.cy;
          var pos = r2.projectIntoViewport(e3.clientX, e3.clientY);
          var select = r2.selection;
          var near = r2.findNearestElement(pos[0], pos[1], true, false);
          var draggedElements = r2.dragData.possibleDragElements;
          var down = r2.hoverData.down;
          var multSelKeyDown = isMultSelKeyDown(e3);
          if (r2.data.bgActivePosistion) {
            r2.redrawHint("select", true);
            r2.redraw();
          }
          r2.hoverData.tapholdCancelled = true;
          r2.data.bgActivePosistion = void 0;
          if (down) {
            down.unactivate();
          }
          var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) {
            return {
              originalEvent: e3,
              type: type3,
              position: {
                x: pos[0],
                y: pos[1]
              }
            };
          }, "makeEvent");
          if (r2.hoverData.which === 3) {
            var cxtEvt = makeEvent("cxttapend");
            if (down) {
              down.emit(cxtEvt);
            } else {
              cy.emit(cxtEvt);
            }
            if (!r2.hoverData.cxtDragged) {
              var cxtTap = makeEvent("cxttap");
              if (down) {
                down.emit(cxtTap);
              } else {
                cy.emit(cxtTap);
              }
            }
            r2.hoverData.cxtDragged = false;
            r2.hoverData.which = null;
          } else if (r2.hoverData.which === 1) {
            triggerEvents(near, ["mouseup", "tapend", "vmouseup"], e3, {
              x: pos[0],
              y: pos[1]
            });
            if (!r2.dragData.didDrag && // didn't move a node around
            !r2.hoverData.dragged && // didn't pan
            !r2.hoverData.selecting && // not box selection
            !r2.hoverData.isOverThresholdDrag) {
              triggerEvents(down, ["click", "tap", "vclick"], e3, {
                x: pos[0],
                y: pos[1]
              });
              didDoubleClick = false;
              if (e3.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) {
                clickTimeout && clearTimeout(clickTimeout);
                didDoubleClick = true;
                prevClickTimeStamp = null;
                triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e3, {
                  x: pos[0],
                  y: pos[1]
                });
              } else {
                clickTimeout = setTimeout(function() {
                  if (didDoubleClick) return;
                  triggerEvents(down, ["oneclick", "onetap", "voneclick"], e3, {
                    x: pos[0],
                    y: pos[1]
                  });
                }, cy.multiClickDebounceTime());
                prevClickTimeStamp = e3.timeStamp;
              }
            }
            if (down == null && !r2.dragData.didDrag && !r2.hoverData.selecting && !r2.hoverData.dragged && !isMultSelKeyDown(e3)) {
              cy.$(isSelected).unselect(["tapunselect"]);
              if (draggedElements.length > 0) {
                r2.redrawHint("eles", true);
              }
              r2.dragData.possibleDragElements = draggedElements = cy.collection();
            }
            if (near == down && !r2.dragData.didDrag && !r2.hoverData.selecting) {
              if (near != null && near._private.selectable) {
                if (r2.hoverData.dragging) ;
                else if (cy.selectionType() === "additive" || multSelKeyDown) {
                  if (near.selected()) {
                    near.unselect(["tapunselect"]);
                  } else {
                    near.select(["tapselect"]);
                  }
                } else {
                  if (!multSelKeyDown) {
                    cy.$(isSelected).unmerge(near).unselect(["tapunselect"]);
                    near.select(["tapselect"]);
                  }
                }
                r2.redrawHint("eles", true);
              }
            }
            if (r2.hoverData.selecting) {
              var box = cy.collection(r2.getAllInBox(select[0], select[1], select[2], select[3]));
              r2.redrawHint("select", true);
              if (box.length > 0) {
                r2.redrawHint("eles", true);
              }
              cy.emit(makeEvent("boxend"));
              var eleWouldBeSelected = /* @__PURE__ */ __name(function eleWouldBeSelected2(ele) {
                return ele.selectable() && !ele.selected();
              }, "eleWouldBeSelected");
              if (cy.selectionType() === "additive") {
                box.emit(makeEvent("box")).stdFilter(eleWouldBeSelected).select().emit(makeEvent("boxselect"));
              } else {
                if (!multSelKeyDown) {
                  cy.$(isSelected).unmerge(box).unselect();
                }
                box.emit(makeEvent("box")).stdFilter(eleWouldBeSelected).select().emit(makeEvent("boxselect"));
              }
              r2.redraw();
            }
            if (r2.hoverData.dragging) {
              r2.hoverData.dragging = false;
              r2.redrawHint("select", true);
              r2.redrawHint("eles", true);
              r2.redraw();
            }
            if (!select[4]) {
              r2.redrawHint("drag", true);
              r2.redrawHint("eles", true);
              var downWasGrabbed = down && down.grabbed();
              freeDraggedElements(draggedElements);
              if (downWasGrabbed) {
                down.emit(makeEvent("freeon"));
                draggedElements.emit(makeEvent("free"));
                if (r2.dragData.didDrag) {
                  down.emit(makeEvent("dragfreeon"));
                  draggedElements.emit(makeEvent("dragfree"));
                }
              }
            }
          }
          select[4] = 0;
          r2.hoverData.down = null;
          r2.hoverData.cxtStarted = false;
          r2.hoverData.draggingEles = false;
          r2.hoverData.selecting = false;
          r2.hoverData.isOverThresholdDrag = false;
          r2.dragData.didDrag = false;
          r2.hoverData.dragged = false;
          r2.hoverData.dragDelta = [];
          r2.hoverData.mdownPos = null;
          r2.hoverData.mdownGPos = null;
          r2.hoverData.which = null;
        }, "mouseupHandler"), false);
        var wheelDeltas = [];
        var wheelDeltaN = 4;
        var inaccurateScrollDevice;
        var inaccurateScrollFactor = 1e5;
        var allAreDivisibleBy = /* @__PURE__ */ __name(function allAreDivisibleBy2(list, factor) {
          for (var i2 = 0; i2 < list.length; i2++) {
            if (list[i2] % factor !== 0) {
              return false;
            }
          }
          return true;
        }, "allAreDivisibleBy");
        var allAreSameMagnitude = /* @__PURE__ */ __name(function allAreSameMagnitude2(list) {
          var firstMag = Math.abs(list[0]);
          for (var i2 = 1; i2 < list.length; i2++) {
            if (Math.abs(list[i2]) !== firstMag) {
              return false;
            }
          }
          return true;
        }, "allAreSameMagnitude");
        var wheelHandler = /* @__PURE__ */ __name(function wheelHandler2(e3) {
          var clamp2 = false;
          var delta = e3.deltaY;
          if (delta == null) {
            if (e3.wheelDeltaY != null) {
              delta = e3.wheelDeltaY / 4;
            } else if (e3.wheelDelta != null) {
              delta = e3.wheelDelta / 4;
            }
          }
          if (delta === 0) {
            return;
          }
          if (inaccurateScrollDevice == null) {
            if (wheelDeltas.length >= wheelDeltaN) {
              var wds = wheelDeltas;
              inaccurateScrollDevice = allAreDivisibleBy(wds, 5);
              if (!inaccurateScrollDevice) {
                var firstMag = Math.abs(wds[0]);
                inaccurateScrollDevice = allAreSameMagnitude(wds) && firstMag > 5;
              }
              if (inaccurateScrollDevice) {
                for (var i2 = 0; i2 < wds.length; i2++) {
                  inaccurateScrollFactor = Math.min(Math.abs(wds[i2]), inaccurateScrollFactor);
                }
              }
            } else {
              wheelDeltas.push(delta);
              clamp2 = true;
            }
          } else if (inaccurateScrollDevice) {
            inaccurateScrollFactor = Math.min(Math.abs(delta), inaccurateScrollFactor);
          }
          if (r2.scrollingPage) {
            return;
          }
          var cy = r2.cy;
          var zoom2 = cy.zoom();
          var pan2 = cy.pan();
          var pos = r2.projectIntoViewport(e3.clientX, e3.clientY);
          var rpos = [pos[0] * zoom2 + pan2.x, pos[1] * zoom2 + pan2.y];
          if (r2.hoverData.draggingEles || r2.hoverData.dragging || r2.hoverData.cxtStarted || inBoxSelection()) {
            e3.preventDefault();
            return;
          }
          if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) {
            e3.preventDefault();
            r2.data.wheelZooming = true;
            clearTimeout(r2.data.wheelTimeout);
            r2.data.wheelTimeout = setTimeout(function() {
              r2.data.wheelZooming = false;
              r2.redrawHint("eles", true);
              r2.redraw();
            }, 150);
            var diff2;
            if (clamp2 && Math.abs(delta) > 5) {
              delta = signum(delta) * 5;
            }
            diff2 = delta / -250;
            if (inaccurateScrollDevice) {
              diff2 /= inaccurateScrollFactor;
              diff2 *= 3;
            }
            diff2 = diff2 * r2.wheelSensitivity;
            var needsWheelFix = e3.deltaMode === 1;
            if (needsWheelFix) {
              diff2 *= 33;
            }
            var newZoom = cy.zoom() * Math.pow(10, diff2);
            if (e3.type === "gesturechange") {
              newZoom = r2.gestureStartZoom * e3.scale;
            }
            cy.zoom({
              level: newZoom,
              renderedPosition: {
                x: rpos[0],
                y: rpos[1]
              }
            });
            cy.emit({
              type: e3.type === "gesturechange" ? "pinchzoom" : "scrollzoom",
              originalEvent: e3,
              position: {
                x: pos[0],
                y: pos[1]
              }
            });
          }
        }, "wheelHandler");
        r2.registerBinding(r2.container, "wheel", wheelHandler, true);
        r2.registerBinding(containerWindow, "scroll", /* @__PURE__ */ __name(function scrollHandler(e3) {
          r2.scrollingPage = true;
          clearTimeout(r2.scrollingPageTimeout);
          r2.scrollingPageTimeout = setTimeout(function() {
            r2.scrollingPage = false;
          }, 250);
        }, "scrollHandler"), true);
        r2.registerBinding(r2.container, "gesturestart", /* @__PURE__ */ __name(function gestureStartHandler(e3) {
          r2.gestureStartZoom = r2.cy.zoom();
          if (!r2.hasTouchStarted) {
            e3.preventDefault();
          }
        }, "gestureStartHandler"), true);
        r2.registerBinding(r2.container, "gesturechange", function(e3) {
          if (!r2.hasTouchStarted) {
            wheelHandler(e3);
          }
        }, true);
        r2.registerBinding(r2.container, "mouseout", /* @__PURE__ */ __name(function mouseOutHandler(e3) {
          var pos = r2.projectIntoViewport(e3.clientX, e3.clientY);
          r2.cy.emit({
            originalEvent: e3,
            type: "mouseout",
            position: {
              x: pos[0],
              y: pos[1]
            }
          });
        }, "mouseOutHandler"), false);
        r2.registerBinding(r2.container, "mouseover", /* @__PURE__ */ __name(function mouseOverHandler(e3) {
          var pos = r2.projectIntoViewport(e3.clientX, e3.clientY);
          r2.cy.emit({
            originalEvent: e3,
            type: "mouseover",
            position: {
              x: pos[0],
              y: pos[1]
            }
          });
        }, "mouseOverHandler"), false);
        var f1x1, f1y1, f2x1, f2y1;
        var distance1, distance1Sq;
        var center1, modelCenter1;
        var offsetLeft, offsetTop;
        var containerWidth, containerHeight;
        var twoFingersStartInside;
        var distance3 = /* @__PURE__ */ __name(function distance4(x1, y1, x22, y22) {
          return Math.sqrt((x22 - x1) * (x22 - x1) + (y22 - y1) * (y22 - y1));
        }, "distance");
        var distanceSq = /* @__PURE__ */ __name(function distanceSq2(x1, y1, x22, y22) {
          return (x22 - x1) * (x22 - x1) + (y22 - y1) * (y22 - y1);
        }, "distanceSq");
        var touchstartHandler;
        r2.registerBinding(r2.container, "touchstart", touchstartHandler = /* @__PURE__ */ __name(function touchstartHandler2(e3) {
          r2.hasTouchStarted = true;
          if (!eventInContainer(e3)) {
            return;
          }
          blurActiveDomElement();
          r2.touchData.capture = true;
          r2.data.bgActivePosistion = void 0;
          var cy = r2.cy;
          var now3 = r2.touchData.now;
          var earlier = r2.touchData.earlier;
          if (e3.touches[0]) {
            var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY);
            now3[0] = pos[0];
            now3[1] = pos[1];
          }
          if (e3.touches[1]) {
            var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY);
            now3[2] = pos[0];
            now3[3] = pos[1];
          }
          if (e3.touches[2]) {
            var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY);
            now3[4] = pos[0];
            now3[5] = pos[1];
          }
          var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) {
            return {
              originalEvent: e3,
              type: type3,
              position: {
                x: now3[0],
                y: now3[1]
              }
            };
          }, "makeEvent");
          if (e3.touches[1]) {
            r2.touchData.singleTouchMoved = true;
            freeDraggedElements(r2.dragData.touchDragEles);
            var offsets = r2.findContainerClientCoords();
            offsetLeft = offsets[0];
            offsetTop = offsets[1];
            containerWidth = offsets[2];
            containerHeight = offsets[3];
            f1x1 = e3.touches[0].clientX - offsetLeft;
            f1y1 = e3.touches[0].clientY - offsetTop;
            f2x1 = e3.touches[1].clientX - offsetLeft;
            f2y1 = e3.touches[1].clientY - offsetTop;
            twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight;
            var pan2 = cy.pan();
            var zoom2 = cy.zoom();
            distance1 = distance3(f1x1, f1y1, f2x1, f2y1);
            distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1);
            center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2];
            modelCenter1 = [(center1[0] - pan2.x) / zoom2, (center1[1] - pan2.y) / zoom2];
            var cxtDistThreshold = 200;
            var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold;
            if (distance1Sq < cxtDistThresholdSq && !e3.touches[2]) {
              var near1 = r2.findNearestElement(now3[0], now3[1], true, true);
              var near2 = r2.findNearestElement(now3[2], now3[3], true, true);
              if (near1 && near1.isNode()) {
                near1.activate().emit(makeEvent("cxttapstart"));
                r2.touchData.start = near1;
              } else if (near2 && near2.isNode()) {
                near2.activate().emit(makeEvent("cxttapstart"));
                r2.touchData.start = near2;
              } else {
                cy.emit(makeEvent("cxttapstart"));
              }
              if (r2.touchData.start) {
                r2.touchData.start._private.grabbed = false;
              }
              r2.touchData.cxt = true;
              r2.touchData.cxtDragged = false;
              r2.data.bgActivePosistion = void 0;
              r2.redraw();
              return;
            }
          }
          if (e3.touches[2]) {
            if (cy.boxSelectionEnabled()) {
              e3.preventDefault();
            }
          } else if (e3.touches[1]) ;
          else if (e3.touches[0]) {
            var nears = r2.findNearestElements(now3[0], now3[1], true, true);
            var near = nears[0];
            if (near != null) {
              near.activate();
              r2.touchData.start = near;
              r2.touchData.starts = nears;
              if (r2.nodeIsGrabbable(near)) {
                var draggedEles = r2.dragData.touchDragEles = cy.collection();
                var selectedNodes = null;
                r2.redrawHint("eles", true);
                r2.redrawHint("drag", true);
                if (near.selected()) {
                  selectedNodes = cy.$(function(ele) {
                    return ele.selected() && r2.nodeIsGrabbable(ele);
                  });
                  addNodesToDrag(selectedNodes, {
                    addToList: draggedEles
                  });
                } else {
                  addNodeToDrag(near, {
                    addToList: draggedEles
                  });
                }
                setGrabTarget(near);
                near.emit(makeEvent("grabon"));
                if (selectedNodes) {
                  selectedNodes.forEach(function(n2) {
                    n2.emit(makeEvent("grab"));
                  });
                } else {
                  near.emit(makeEvent("grab"));
                }
              }
            }
            triggerEvents(near, ["touchstart", "tapstart", "vmousedown"], e3, {
              x: now3[0],
              y: now3[1]
            });
            if (near == null) {
              r2.data.bgActivePosistion = {
                x: pos[0],
                y: pos[1]
              };
              r2.redrawHint("select", true);
              r2.redraw();
            }
            r2.touchData.singleTouchMoved = false;
            r2.touchData.singleTouchStartTime = +/* @__PURE__ */ new Date();
            clearTimeout(r2.touchData.tapholdTimeout);
            r2.touchData.tapholdTimeout = setTimeout(function() {
              if (r2.touchData.singleTouchMoved === false && !r2.pinching && !r2.touchData.selecting) {
                triggerEvents(r2.touchData.start, ["taphold"], e3, {
                  x: now3[0],
                  y: now3[1]
                });
              }
            }, r2.tapholdDuration);
          }
          if (e3.touches.length >= 1) {
            var sPos = r2.touchData.startPosition = [null, null, null, null, null, null];
            for (var i2 = 0; i2 < now3.length; i2++) {
              sPos[i2] = earlier[i2] = now3[i2];
            }
            var touch0 = e3.touches[0];
            r2.touchData.startGPosition = [touch0.clientX, touch0.clientY];
          }
        }, "touchstartHandler"), false);
        var touchmoveHandler;
        r2.registerBinding(containerWindow, "touchmove", touchmoveHandler = /* @__PURE__ */ __name(function touchmoveHandler2(e3) {
          var capture = r2.touchData.capture;
          if (!capture && !eventInContainer(e3)) {
            return;
          }
          var select = r2.selection;
          var cy = r2.cy;
          var now3 = r2.touchData.now;
          var earlier = r2.touchData.earlier;
          var zoom2 = cy.zoom();
          if (e3.touches[0]) {
            var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY);
            now3[0] = pos[0];
            now3[1] = pos[1];
          }
          if (e3.touches[1]) {
            var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY);
            now3[2] = pos[0];
            now3[3] = pos[1];
          }
          if (e3.touches[2]) {
            var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY);
            now3[4] = pos[0];
            now3[5] = pos[1];
          }
          var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) {
            return {
              originalEvent: e3,
              type: type3,
              position: {
                x: now3[0],
                y: now3[1]
              }
            };
          }, "makeEvent");
          var startGPos = r2.touchData.startGPosition;
          var isOverThresholdDrag;
          if (capture && e3.touches[0] && startGPos) {
            var disp = [];
            for (var j3 = 0; j3 < now3.length; j3++) {
              disp[j3] = now3[j3] - earlier[j3];
            }
            var dx = e3.touches[0].clientX - startGPos[0];
            var dx2 = dx * dx;
            var dy = e3.touches[0].clientY - startGPos[1];
            var dy2 = dy * dy;
            var dist22 = dx2 + dy2;
            isOverThresholdDrag = dist22 >= r2.touchTapThreshold2;
          }
          if (capture && r2.touchData.cxt) {
            e3.preventDefault();
            var f1x2 = e3.touches[0].clientX - offsetLeft, f1y2 = e3.touches[0].clientY - offsetTop;
            var f2x2 = e3.touches[1].clientX - offsetLeft, f2y2 = e3.touches[1].clientY - offsetTop;
            var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2);
            var factorSq = distance2Sq / distance1Sq;
            var distThreshold = 150;
            var distThresholdSq = distThreshold * distThreshold;
            var factorThreshold = 1.5;
            var factorThresholdSq = factorThreshold * factorThreshold;
            if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) {
              r2.touchData.cxt = false;
              r2.data.bgActivePosistion = void 0;
              r2.redrawHint("select", true);
              var cxtEvt = makeEvent("cxttapend");
              if (r2.touchData.start) {
                r2.touchData.start.unactivate().emit(cxtEvt);
                r2.touchData.start = null;
              } else {
                cy.emit(cxtEvt);
              }
            }
          }
          if (capture && r2.touchData.cxt) {
            var cxtEvt = makeEvent("cxtdrag");
            r2.data.bgActivePosistion = void 0;
            r2.redrawHint("select", true);
            if (r2.touchData.start) {
              r2.touchData.start.emit(cxtEvt);
            } else {
              cy.emit(cxtEvt);
            }
            if (r2.touchData.start) {
              r2.touchData.start._private.grabbed = false;
            }
            r2.touchData.cxtDragged = true;
            var near = r2.findNearestElement(now3[0], now3[1], true, true);
            if (!r2.touchData.cxtOver || near !== r2.touchData.cxtOver) {
              if (r2.touchData.cxtOver) {
                r2.touchData.cxtOver.emit(makeEvent("cxtdragout"));
              }
              r2.touchData.cxtOver = near;
              if (near) {
                near.emit(makeEvent("cxtdragover"));
              }
            }
          } else if (capture && e3.touches[2] && cy.boxSelectionEnabled()) {
            e3.preventDefault();
            r2.data.bgActivePosistion = void 0;
            this.lastThreeTouch = +/* @__PURE__ */ new Date();
            if (!r2.touchData.selecting) {
              cy.emit(makeEvent("boxstart"));
            }
            r2.touchData.selecting = true;
            r2.touchData.didSelect = true;
            select[4] = 1;
            if (!select || select.length === 0 || select[0] === void 0) {
              select[0] = (now3[0] + now3[2] + now3[4]) / 3;
              select[1] = (now3[1] + now3[3] + now3[5]) / 3;
              select[2] = (now3[0] + now3[2] + now3[4]) / 3 + 1;
              select[3] = (now3[1] + now3[3] + now3[5]) / 3 + 1;
            } else {
              select[2] = (now3[0] + now3[2] + now3[4]) / 3;
              select[3] = (now3[1] + now3[3] + now3[5]) / 3;
            }
            r2.redrawHint("select", true);
            r2.redraw();
          } else if (capture && e3.touches[1] && !r2.touchData.didSelect && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) {
            e3.preventDefault();
            r2.data.bgActivePosistion = void 0;
            r2.redrawHint("select", true);
            var draggedEles = r2.dragData.touchDragEles;
            if (draggedEles) {
              r2.redrawHint("drag", true);
              for (var i2 = 0; i2 < draggedEles.length; i2++) {
                var de_p = draggedEles[i2]._private;
                de_p.grabbed = false;
                de_p.rscratch.inDragLayer = false;
              }
            }
            var _start = r2.touchData.start;
            var f1x2 = e3.touches[0].clientX - offsetLeft, f1y2 = e3.touches[0].clientY - offsetTop;
            var f2x2 = e3.touches[1].clientX - offsetLeft, f2y2 = e3.touches[1].clientY - offsetTop;
            var distance22 = distance3(f1x2, f1y2, f2x2, f2y2);
            var factor = distance22 / distance1;
            if (twoFingersStartInside) {
              var df1x = f1x2 - f1x1;
              var df1y = f1y2 - f1y1;
              var df2x = f2x2 - f2x1;
              var df2y = f2y2 - f2y1;
              var tx = (df1x + df2x) / 2;
              var ty = (df1y + df2y) / 2;
              var zoom1 = cy.zoom();
              var zoom22 = zoom1 * factor;
              var pan1 = cy.pan();
              var ctrx = modelCenter1[0] * zoom1 + pan1.x;
              var ctry = modelCenter1[1] * zoom1 + pan1.y;
              var pan2 = {
                x: -zoom22 / zoom1 * (ctrx - pan1.x - tx) + ctrx,
                y: -zoom22 / zoom1 * (ctry - pan1.y - ty) + ctry
              };
              if (_start && _start.active()) {
                var draggedEles = r2.dragData.touchDragEles;
                freeDraggedElements(draggedEles);
                r2.redrawHint("drag", true);
                r2.redrawHint("eles", true);
                _start.unactivate().emit(makeEvent("freeon"));
                draggedEles.emit(makeEvent("free"));
                if (r2.dragData.didDrag) {
                  _start.emit(makeEvent("dragfreeon"));
                  draggedEles.emit(makeEvent("dragfree"));
                }
              }
              cy.viewport({
                zoom: zoom22,
                pan: pan2,
                cancelOnFailedZoom: true
              });
              cy.emit(makeEvent("pinchzoom"));
              distance1 = distance22;
              f1x1 = f1x2;
              f1y1 = f1y2;
              f2x1 = f2x2;
              f2y1 = f2y2;
              r2.pinching = true;
            }
            if (e3.touches[0]) {
              var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY);
              now3[0] = pos[0];
              now3[1] = pos[1];
            }
            if (e3.touches[1]) {
              var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY);
              now3[2] = pos[0];
              now3[3] = pos[1];
            }
            if (e3.touches[2]) {
              var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY);
              now3[4] = pos[0];
              now3[5] = pos[1];
            }
          } else if (e3.touches[0] && !r2.touchData.didSelect) {
            var start3 = r2.touchData.start;
            var last4 = r2.touchData.last;
            var near;
            if (!r2.hoverData.draggingEles && !r2.swipePanning) {
              near = r2.findNearestElement(now3[0], now3[1], true, true);
            }
            if (capture && start3 != null) {
              e3.preventDefault();
            }
            if (capture && start3 != null && r2.nodeIsDraggable(start3)) {
              if (isOverThresholdDrag) {
                var draggedEles = r2.dragData.touchDragEles;
                var justStartedDrag = !r2.dragData.didDrag;
                if (justStartedDrag) {
                  addNodesToDrag(draggedEles, {
                    inDragLayer: true
                  });
                }
                r2.dragData.didDrag = true;
                var totalShift = {
                  x: 0,
                  y: 0
                };
                if (number$1(disp[0]) && number$1(disp[1])) {
                  totalShift.x += disp[0];
                  totalShift.y += disp[1];
                  if (justStartedDrag) {
                    r2.redrawHint("eles", true);
                    var dragDelta = r2.touchData.dragDelta;
                    if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {
                      totalShift.x += dragDelta[0];
                      totalShift.y += dragDelta[1];
                    }
                  }
                }
                r2.hoverData.draggingEles = true;
                draggedEles.silentShift(totalShift).emit(makeEvent("position")).emit(makeEvent("drag"));
                r2.redrawHint("drag", true);
                if (r2.touchData.startPosition[0] == earlier[0] && r2.touchData.startPosition[1] == earlier[1]) {
                  r2.redrawHint("eles", true);
                }
                r2.redraw();
              } else {
                var dragDelta = r2.touchData.dragDelta = r2.touchData.dragDelta || [];
                if (dragDelta.length === 0) {
                  dragDelta.push(disp[0]);
                  dragDelta.push(disp[1]);
                } else {
                  dragDelta[0] += disp[0];
                  dragDelta[1] += disp[1];
                }
              }
            }
            {
              triggerEvents(start3 || near, ["touchmove", "tapdrag", "vmousemove"], e3, {
                x: now3[0],
                y: now3[1]
              });
              if ((!start3 || !start3.grabbed()) && near != last4) {
                if (last4) {
                  last4.emit(makeEvent("tapdragout"));
                }
                if (near) {
                  near.emit(makeEvent("tapdragover"));
                }
              }
              r2.touchData.last = near;
            }
            if (capture) {
              for (var i2 = 0; i2 < now3.length; i2++) {
                if (now3[i2] && r2.touchData.startPosition[i2] && isOverThresholdDrag) {
                  r2.touchData.singleTouchMoved = true;
                }
              }
            }
            if (capture && (start3 == null || start3.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) {
              var allowPassthrough = allowPanningPassthrough(start3, r2.touchData.starts);
              if (allowPassthrough) {
                e3.preventDefault();
                if (!r2.data.bgActivePosistion) {
                  r2.data.bgActivePosistion = array2point(r2.touchData.startPosition);
                }
                if (r2.swipePanning) {
                  cy.panBy({
                    x: disp[0] * zoom2,
                    y: disp[1] * zoom2
                  });
                  cy.emit(makeEvent("dragpan"));
                } else if (isOverThresholdDrag) {
                  r2.swipePanning = true;
                  cy.panBy({
                    x: dx * zoom2,
                    y: dy * zoom2
                  });
                  cy.emit(makeEvent("dragpan"));
                  if (start3) {
                    start3.unactivate();
                    r2.redrawHint("select", true);
                    r2.touchData.start = null;
                  }
                }
              }
              var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY);
              now3[0] = pos[0];
              now3[1] = pos[1];
            }
          }
          for (var j3 = 0; j3 < now3.length; j3++) {
            earlier[j3] = now3[j3];
          }
          if (capture && e3.touches.length > 0 && !r2.hoverData.draggingEles && !r2.swipePanning && r2.data.bgActivePosistion != null) {
            r2.data.bgActivePosistion = void 0;
            r2.redrawHint("select", true);
            r2.redraw();
          }
        }, "touchmoveHandler"), false);
        var touchcancelHandler;
        r2.registerBinding(containerWindow, "touchcancel", touchcancelHandler = /* @__PURE__ */ __name(function touchcancelHandler2(e3) {
          var start3 = r2.touchData.start;
          r2.touchData.capture = false;
          if (start3) {
            start3.unactivate();
          }
        }, "touchcancelHandler"));
        var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp;
        r2.registerBinding(containerWindow, "touchend", touchendHandler = /* @__PURE__ */ __name(function touchendHandler2(e3) {
          var start3 = r2.touchData.start;
          var capture = r2.touchData.capture;
          if (capture) {
            if (e3.touches.length === 0) {
              r2.touchData.capture = false;
            }
            e3.preventDefault();
          } else {
            return;
          }
          var select = r2.selection;
          r2.swipePanning = false;
          r2.hoverData.draggingEles = false;
          var cy = r2.cy;
          var zoom2 = cy.zoom();
          var now3 = r2.touchData.now;
          var earlier = r2.touchData.earlier;
          if (e3.touches[0]) {
            var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY);
            now3[0] = pos[0];
            now3[1] = pos[1];
          }
          if (e3.touches[1]) {
            var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY);
            now3[2] = pos[0];
            now3[3] = pos[1];
          }
          if (e3.touches[2]) {
            var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY);
            now3[4] = pos[0];
            now3[5] = pos[1];
          }
          var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) {
            return {
              originalEvent: e3,
              type: type3,
              position: {
                x: now3[0],
                y: now3[1]
              }
            };
          }, "makeEvent");
          if (start3) {
            start3.unactivate();
          }
          var ctxTapend;
          if (r2.touchData.cxt) {
            ctxTapend = makeEvent("cxttapend");
            if (start3) {
              start3.emit(ctxTapend);
            } else {
              cy.emit(ctxTapend);
            }
            if (!r2.touchData.cxtDragged) {
              var ctxTap = makeEvent("cxttap");
              if (start3) {
                start3.emit(ctxTap);
              } else {
                cy.emit(ctxTap);
              }
            }
            if (r2.touchData.start) {
              r2.touchData.start._private.grabbed = false;
            }
            r2.touchData.cxt = false;
            r2.touchData.start = null;
            r2.redraw();
            return;
          }
          if (!e3.touches[2] && cy.boxSelectionEnabled() && r2.touchData.selecting) {
            r2.touchData.selecting = false;
            var box = cy.collection(r2.getAllInBox(select[0], select[1], select[2], select[3]));
            select[0] = void 0;
            select[1] = void 0;
            select[2] = void 0;
            select[3] = void 0;
            select[4] = 0;
            r2.redrawHint("select", true);
            cy.emit(makeEvent("boxend"));
            var eleWouldBeSelected = /* @__PURE__ */ __name(function eleWouldBeSelected2(ele) {
              return ele.selectable() && !ele.selected();
            }, "eleWouldBeSelected");
            box.emit(makeEvent("box")).stdFilter(eleWouldBeSelected).select().emit(makeEvent("boxselect"));
            if (box.nonempty()) {
              r2.redrawHint("eles", true);
            }
            r2.redraw();
          }
          if (start3 != null) {
            start3.unactivate();
          }
          if (e3.touches[2]) {
            r2.data.bgActivePosistion = void 0;
            r2.redrawHint("select", true);
          } else if (e3.touches[1]) ;
          else if (e3.touches[0]) ;
          else if (!e3.touches[0]) {
            r2.data.bgActivePosistion = void 0;
            r2.redrawHint("select", true);
            var draggedEles = r2.dragData.touchDragEles;
            if (start3 != null) {
              var startWasGrabbed = start3._private.grabbed;
              freeDraggedElements(draggedEles);
              r2.redrawHint("drag", true);
              r2.redrawHint("eles", true);
              if (startWasGrabbed) {
                start3.emit(makeEvent("freeon"));
                draggedEles.emit(makeEvent("free"));
                if (r2.dragData.didDrag) {
                  start3.emit(makeEvent("dragfreeon"));
                  draggedEles.emit(makeEvent("dragfree"));
                }
              }
              triggerEvents(start3, ["touchend", "tapend", "vmouseup", "tapdragout"], e3, {
                x: now3[0],
                y: now3[1]
              });
              start3.unactivate();
              r2.touchData.start = null;
            } else {
              var near = r2.findNearestElement(now3[0], now3[1], true, true);
              triggerEvents(near, ["touchend", "tapend", "vmouseup", "tapdragout"], e3, {
                x: now3[0],
                y: now3[1]
              });
            }
            var dx = r2.touchData.startPosition[0] - now3[0];
            var dx2 = dx * dx;
            var dy = r2.touchData.startPosition[1] - now3[1];
            var dy2 = dy * dy;
            var dist22 = dx2 + dy2;
            var rdist2 = dist22 * zoom2 * zoom2;
            if (!r2.touchData.singleTouchMoved) {
              if (!start3) {
                cy.$(":selected").unselect(["tapunselect"]);
              }
              triggerEvents(start3, ["tap", "vclick"], e3, {
                x: now3[0],
                y: now3[1]
              });
              didDoubleTouch = false;
              if (e3.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) {
                touchTimeout && clearTimeout(touchTimeout);
                didDoubleTouch = true;
                prevTouchTimeStamp = null;
                triggerEvents(start3, ["dbltap", "vdblclick"], e3, {
                  x: now3[0],
                  y: now3[1]
                });
              } else {
                touchTimeout = setTimeout(function() {
                  if (didDoubleTouch) return;
                  triggerEvents(start3, ["onetap", "voneclick"], e3, {
                    x: now3[0],
                    y: now3[1]
                  });
                }, cy.multiClickDebounceTime());
                prevTouchTimeStamp = e3.timeStamp;
              }
            }
            if (start3 != null && !r2.dragData.didDrag && start3._private.selectable && rdist2 < r2.touchTapThreshold2 && !r2.pinching) {
              if (cy.selectionType() === "single") {
                cy.$(isSelected).unmerge(start3).unselect(["tapunselect"]);
                start3.select(["tapselect"]);
              } else {
                if (start3.selected()) {
                  start3.unselect(["tapunselect"]);
                } else {
                  start3.select(["tapselect"]);
                }
              }
              r2.redrawHint("eles", true);
            }
            r2.touchData.singleTouchMoved = true;
          }
          for (var j3 = 0; j3 < now3.length; j3++) {
            earlier[j3] = now3[j3];
          }
          r2.dragData.didDrag = false;
          if (e3.touches.length === 0) {
            r2.touchData.dragDelta = [];
            r2.touchData.startPosition = [null, null, null, null, null, null];
            r2.touchData.startGPosition = null;
            r2.touchData.didSelect = false;
          }
          if (e3.touches.length < 2) {
            if (e3.touches.length === 1) {
              r2.touchData.startGPosition = [e3.touches[0].clientX, e3.touches[0].clientY];
            }
            r2.pinching = false;
            r2.redrawHint("eles", true);
            r2.redraw();
          }
        }, "touchendHandler"), false);
        if (typeof TouchEvent === "undefined") {
          var pointers = [];
          var makeTouch = /* @__PURE__ */ __name(function makeTouch2(e3) {
            return {
              clientX: e3.clientX,
              clientY: e3.clientY,
              force: 1,
              identifier: e3.pointerId,
              pageX: e3.pageX,
              pageY: e3.pageY,
              radiusX: e3.width / 2,
              radiusY: e3.height / 2,
              screenX: e3.screenX,
              screenY: e3.screenY,
              target: e3.target
            };
          }, "makeTouch");
          var makePointer = /* @__PURE__ */ __name(function makePointer2(e3) {
            return {
              event: e3,
              touch: makeTouch(e3)
            };
          }, "makePointer");
          var addPointer = /* @__PURE__ */ __name(function addPointer2(e3) {
            pointers.push(makePointer(e3));
          }, "addPointer");
          var removePointer = /* @__PURE__ */ __name(function removePointer2(e3) {
            for (var i2 = 0; i2 < pointers.length; i2++) {
              var p3 = pointers[i2];
              if (p3.event.pointerId === e3.pointerId) {
                pointers.splice(i2, 1);
                return;
              }
            }
          }, "removePointer");
          var updatePointer = /* @__PURE__ */ __name(function updatePointer2(e3) {
            var p3 = pointers.filter(function(p4) {
              return p4.event.pointerId === e3.pointerId;
            })[0];
            p3.event = e3;
            p3.touch = makeTouch(e3);
          }, "updatePointer");
          var addTouchesToEvent = /* @__PURE__ */ __name(function addTouchesToEvent2(e3) {
            e3.touches = pointers.map(function(p3) {
              return p3.touch;
            });
          }, "addTouchesToEvent");
          var pointerIsMouse = /* @__PURE__ */ __name(function pointerIsMouse2(e3) {
            return e3.pointerType === "mouse" || e3.pointerType === 4;
          }, "pointerIsMouse");
          r2.registerBinding(r2.container, "pointerdown", function(e3) {
            if (pointerIsMouse(e3)) {
              return;
            }
            e3.preventDefault();
            addPointer(e3);
            addTouchesToEvent(e3);
            touchstartHandler(e3);
          });
          r2.registerBinding(r2.container, "pointerup", function(e3) {
            if (pointerIsMouse(e3)) {
              return;
            }
            removePointer(e3);
            addTouchesToEvent(e3);
            touchendHandler(e3);
          });
          r2.registerBinding(r2.container, "pointercancel", function(e3) {
            if (pointerIsMouse(e3)) {
              return;
            }
            removePointer(e3);
            addTouchesToEvent(e3);
            touchcancelHandler(e3);
          });
          r2.registerBinding(r2.container, "pointermove", function(e3) {
            if (pointerIsMouse(e3)) {
              return;
            }
            e3.preventDefault();
            updatePointer(e3);
            addTouchesToEvent(e3);
            touchmoveHandler(e3);
          });
        }
      };
      BRp$2 = {};
      BRp$2.generatePolygon = function(name, points) {
        return this.nodeShapes[name] = {
          renderer: this,
          name,
          points,
          draw: /* @__PURE__ */ __name(function draw34(context, centerX, centerY, width3, height2, cornerRadius) {
            this.renderer.nodeShapeImpl("polygon", context, centerX, centerY, width3, height2, this.points);
          }, "draw"),
          intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding, cornerRadius) {
            return polygonIntersectLine(x5, y6, this.points, nodeX, nodeY, width3 / 2, height2 / 2, padding);
          }, "intersectLine"),
          checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding, width3, height2, centerX, centerY, cornerRadius) {
            return pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2, [0, -1], padding);
          }, "checkPoint"),
          hasMiterBounds: name !== "rectangle",
          miterBounds: /* @__PURE__ */ __name(function miterBounds(centerX, centerY, width3, height2, strokeWidth, strokePosition) {
            return miterBox(this.points, centerX, centerY, width3, height2, strokeWidth);
          }, "miterBounds")
        };
      };
      BRp$2.generateEllipse = function() {
        return this.nodeShapes["ellipse"] = {
          renderer: this,
          name: "ellipse",
          draw: /* @__PURE__ */ __name(function draw34(context, centerX, centerY, width3, height2, cornerRadius) {
            this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2);
          }, "draw"),
          intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding, cornerRadius) {
            return intersectLineEllipse(x5, y6, nodeX, nodeY, width3 / 2 + padding, height2 / 2 + padding);
          }, "intersectLine"),
          checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding, width3, height2, centerX, centerY, cornerRadius) {
            return checkInEllipse(x5, y6, width3, height2, centerX, centerY, padding);
          }, "checkPoint")
        };
      };
      BRp$2.generateRoundPolygon = function(name, points) {
        return this.nodeShapes[name] = {
          renderer: this,
          name,
          points,
          getOrCreateCorners: /* @__PURE__ */ __name(function getOrCreateCorners(centerX, centerY, width3, height2, cornerRadius, rs, field) {
            if (rs[field] !== void 0 && rs[field + "-cx"] === centerX && rs[field + "-cy"] === centerY) {
              return rs[field];
            }
            rs[field] = new Array(points.length / 2);
            rs[field + "-cx"] = centerX;
            rs[field + "-cy"] = centerY;
            var halfW = width3 / 2;
            var halfH = height2 / 2;
            cornerRadius = cornerRadius === "auto" ? getRoundPolygonRadius(width3, height2) : cornerRadius;
            var p3 = new Array(points.length / 2);
            for (var _i = 0; _i < points.length / 2; _i++) {
              p3[_i] = {
                x: centerX + halfW * points[_i * 2],
                y: centerY + halfH * points[_i * 2 + 1]
              };
            }
            var i2, p1, p22, p32, len = p3.length;
            p1 = p3[len - 1];
            for (i2 = 0; i2 < len; i2++) {
              p22 = p3[i2 % len];
              p32 = p3[(i2 + 1) % len];
              rs[field][i2] = getRoundCorner(p1, p22, p32, cornerRadius);
              p1 = p22;
              p22 = p32;
            }
            return rs[field];
          }, "getOrCreateCorners"),
          draw: /* @__PURE__ */ __name(function draw34(context, centerX, centerY, width3, height2, cornerRadius, rs) {
            this.renderer.nodeShapeImpl("round-polygon", context, centerX, centerY, width3, height2, this.points, this.getOrCreateCorners(centerX, centerY, width3, height2, cornerRadius, rs, "drawCorners"));
          }, "draw"),
          intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding, cornerRadius, rs) {
            return roundPolygonIntersectLine(x5, y6, this.points, nodeX, nodeY, width3, height2, padding, this.getOrCreateCorners(nodeX, nodeY, width3, height2, cornerRadius, rs, "corners"));
          }, "intersectLine"),
          checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding, width3, height2, centerX, centerY, cornerRadius, rs) {
            return pointInsideRoundPolygon(x5, y6, this.points, centerX, centerY, width3, height2, this.getOrCreateCorners(centerX, centerY, width3, height2, cornerRadius, rs, "corners"));
          }, "checkPoint")
        };
      };
      BRp$2.generateRoundRectangle = function() {
        return this.nodeShapes["round-rectangle"] = this.nodeShapes["roundrectangle"] = {
          renderer: this,
          name: "round-rectangle",
          points: generateUnitNgonPointsFitToSquare(4, 0),
          draw: /* @__PURE__ */ __name(function draw34(context, centerX, centerY, width3, height2, cornerRadius) {
            this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2, this.points, cornerRadius);
          }, "draw"),
          intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding, cornerRadius) {
            return roundRectangleIntersectLine(x5, y6, nodeX, nodeY, width3, height2, padding, cornerRadius);
          }, "intersectLine"),
          checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding, width3, height2, centerX, centerY, cornerRadius) {
            var halfWidth = width3 / 2;
            var halfHeight = height2 / 2;
            cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(width3, height2) : cornerRadius;
            cornerRadius = Math.min(halfWidth, halfHeight, cornerRadius);
            var diam = cornerRadius * 2;
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - diam, [0, -1], padding)) {
              return true;
            }
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - diam, height2, [0, -1], padding)) {
              return true;
            }
            if (checkInEllipse(x5, y6, diam, diam, centerX - halfWidth + cornerRadius, centerY - halfHeight + cornerRadius, padding)) {
              return true;
            }
            if (checkInEllipse(x5, y6, diam, diam, centerX + halfWidth - cornerRadius, centerY - halfHeight + cornerRadius, padding)) {
              return true;
            }
            if (checkInEllipse(x5, y6, diam, diam, centerX + halfWidth - cornerRadius, centerY + halfHeight - cornerRadius, padding)) {
              return true;
            }
            if (checkInEllipse(x5, y6, diam, diam, centerX - halfWidth + cornerRadius, centerY + halfHeight - cornerRadius, padding)) {
              return true;
            }
            return false;
          }, "checkPoint")
        };
      };
      BRp$2.generateCutRectangle = function() {
        return this.nodeShapes["cut-rectangle"] = this.nodeShapes["cutrectangle"] = {
          renderer: this,
          name: "cut-rectangle",
          cornerLength: getCutRectangleCornerLength(),
          points: generateUnitNgonPointsFitToSquare(4, 0),
          draw: /* @__PURE__ */ __name(function draw34(context, centerX, centerY, width3, height2, cornerRadius) {
            this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2, null, cornerRadius);
          }, "draw"),
          generateCutTrianglePts: /* @__PURE__ */ __name(function generateCutTrianglePts(width3, height2, centerX, centerY, cornerRadius) {
            var cl = cornerRadius === "auto" ? this.cornerLength : cornerRadius;
            var hh = height2 / 2;
            var hw = width3 / 2;
            var xBegin = centerX - hw;
            var xEnd = centerX + hw;
            var yBegin = centerY - hh;
            var yEnd = centerY + hh;
            return {
              topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl],
              topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl],
              bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl],
              bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl]
            };
          }, "generateCutTrianglePts"),
          intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding, cornerRadius) {
            var cPts = this.generateCutTrianglePts(width3 + 2 * padding, height2 + 2 * padding, nodeX, nodeY, cornerRadius);
            var pts2 = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]);
            return polygonIntersectLine(x5, y6, pts2, nodeX, nodeY);
          }, "intersectLine"),
          checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding, width3, height2, centerX, centerY, cornerRadius) {
            var cl = cornerRadius === "auto" ? this.cornerLength : cornerRadius;
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - 2 * cl, [0, -1], padding)) {
              return true;
            }
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - 2 * cl, height2, [0, -1], padding)) {
              return true;
            }
            var cutTrianglePts = this.generateCutTrianglePts(width3, height2, centerX, centerY);
            return pointInsidePolygonPoints(x5, y6, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x5, y6, cutTrianglePts.topRight) || pointInsidePolygonPoints(x5, y6, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x5, y6, cutTrianglePts.bottomLeft);
          }, "checkPoint")
        };
      };
      BRp$2.generateBarrel = function() {
        return this.nodeShapes["barrel"] = {
          renderer: this,
          name: "barrel",
          points: generateUnitNgonPointsFitToSquare(4, 0),
          draw: /* @__PURE__ */ __name(function draw34(context, centerX, centerY, width3, height2, cornerRadius) {
            this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2);
          }, "draw"),
          intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding, cornerRadius) {
            var t03 = 0.15;
            var t13 = 0.5;
            var t22 = 0.85;
            var bPts = this.generateBarrelBezierPts(width3 + 2 * padding, height2 + 2 * padding, nodeX, nodeY);
            var approximateBarrelCurvePts = /* @__PURE__ */ __name(function approximateBarrelCurvePts2(pts3) {
              var m0 = qbezierPtAt({
                x: pts3[0],
                y: pts3[1]
              }, {
                x: pts3[2],
                y: pts3[3]
              }, {
                x: pts3[4],
                y: pts3[5]
              }, t03);
              var m1 = qbezierPtAt({
                x: pts3[0],
                y: pts3[1]
              }, {
                x: pts3[2],
                y: pts3[3]
              }, {
                x: pts3[4],
                y: pts3[5]
              }, t13);
              var m22 = qbezierPtAt({
                x: pts3[0],
                y: pts3[1]
              }, {
                x: pts3[2],
                y: pts3[3]
              }, {
                x: pts3[4],
                y: pts3[5]
              }, t22);
              return [pts3[0], pts3[1], m0.x, m0.y, m1.x, m1.y, m22.x, m22.y, pts3[4], pts3[5]];
            }, "approximateBarrelCurvePts");
            var pts2 = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft));
            return polygonIntersectLine(x5, y6, pts2, nodeX, nodeY);
          }, "intersectLine"),
          generateBarrelBezierPts: /* @__PURE__ */ __name(function generateBarrelBezierPts(width3, height2, centerX, centerY) {
            var hh = height2 / 2;
            var hw = width3 / 2;
            var xBegin = centerX - hw;
            var xEnd = centerX + hw;
            var yBegin = centerY - hh;
            var yEnd = centerY + hh;
            var curveConstants = getBarrelCurveConstants(width3, height2);
            var hOffset = curveConstants.heightOffset;
            var wOffset = curveConstants.widthOffset;
            var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width3;
            var pts2 = {
              topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin],
              topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset],
              bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd],
              bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset]
            };
            pts2.topLeft.isTop = true;
            pts2.topRight.isTop = true;
            pts2.bottomLeft.isBottom = true;
            pts2.bottomRight.isBottom = true;
            return pts2;
          }, "generateBarrelBezierPts"),
          checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding, width3, height2, centerX, centerY, cornerRadius) {
            var curveConstants = getBarrelCurveConstants(width3, height2);
            var hOffset = curveConstants.heightOffset;
            var wOffset = curveConstants.widthOffset;
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - 2 * hOffset, [0, -1], padding)) {
              return true;
            }
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - 2 * wOffset, height2, [0, -1], padding)) {
              return true;
            }
            var barrelCurvePts = this.generateBarrelBezierPts(width3, height2, centerX, centerY);
            var getCurveT = /* @__PURE__ */ __name(function getCurveT2(x6, y7, curvePts) {
              var x0 = curvePts[4];
              var x1 = curvePts[2];
              var x22 = curvePts[0];
              var y02 = curvePts[5];
              var y23 = curvePts[1];
              var xMin = Math.min(x0, x22);
              var xMax = Math.max(x0, x22);
              var yMin = Math.min(y02, y23);
              var yMax = Math.max(y02, y23);
              if (xMin <= x6 && x6 <= xMax && yMin <= y7 && y7 <= yMax) {
                var coeff = bezierPtsToQuadCoeff(x0, x1, x22);
                var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x6);
                var validRoots = roots.filter(function(r2) {
                  return 0 <= r2 && r2 <= 1;
                });
                if (validRoots.length > 0) {
                  return validRoots[0];
                }
              }
              return null;
            }, "getCurveT");
            var curveRegions = Object.keys(barrelCurvePts);
            for (var i2 = 0; i2 < curveRegions.length; i2++) {
              var corner = curveRegions[i2];
              var cornerPts = barrelCurvePts[corner];
              var t4 = getCurveT(x5, y6, cornerPts);
              if (t4 == null) {
                continue;
              }
              var y0 = cornerPts[5];
              var y1 = cornerPts[3];
              var y22 = cornerPts[1];
              var bezY = qbezierAt(y0, y1, y22, t4);
              if (cornerPts.isTop && bezY <= y6) {
                return true;
              }
              if (cornerPts.isBottom && y6 <= bezY) {
                return true;
              }
            }
            return false;
          }, "checkPoint")
        };
      };
      BRp$2.generateBottomRoundrectangle = function() {
        return this.nodeShapes["bottom-round-rectangle"] = this.nodeShapes["bottomroundrectangle"] = {
          renderer: this,
          name: "bottom-round-rectangle",
          points: generateUnitNgonPointsFitToSquare(4, 0),
          draw: /* @__PURE__ */ __name(function draw34(context, centerX, centerY, width3, height2, cornerRadius) {
            this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2, this.points, cornerRadius);
          }, "draw"),
          intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding, cornerRadius) {
            var topStartX = nodeX - (width3 / 2 + padding);
            var topStartY = nodeY - (height2 / 2 + padding);
            var topEndY = topStartY;
            var topEndX = nodeX + (width3 / 2 + padding);
            var topIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);
            if (topIntersections.length > 0) {
              return topIntersections;
            }
            return roundRectangleIntersectLine(x5, y6, nodeX, nodeY, width3, height2, padding, cornerRadius);
          }, "intersectLine"),
          checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding, width3, height2, centerX, centerY, cornerRadius) {
            cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(width3, height2) : cornerRadius;
            var diam = 2 * cornerRadius;
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - diam, [0, -1], padding)) {
              return true;
            }
            if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - diam, height2, [0, -1], padding)) {
              return true;
            }
            var outerWidth = width3 / 2 + 2 * padding;
            var outerHeight = height2 / 2 + 2 * padding;
            var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight];
            if (pointInsidePolygonPoints(x5, y6, points)) {
              return true;
            }
            if (checkInEllipse(x5, y6, diam, diam, centerX + width3 / 2 - cornerRadius, centerY + height2 / 2 - cornerRadius, padding)) {
              return true;
            }
            if (checkInEllipse(x5, y6, diam, diam, centerX - width3 / 2 + cornerRadius, centerY + height2 / 2 - cornerRadius, padding)) {
              return true;
            }
            return false;
          }, "checkPoint")
        };
      };
      BRp$2.registerNodeShapes = function() {
        var nodeShapes = this.nodeShapes = {};
        var renderer15 = this;
        this.generateEllipse();
        this.generatePolygon("triangle", generateUnitNgonPointsFitToSquare(3, 0));
        this.generateRoundPolygon("round-triangle", generateUnitNgonPointsFitToSquare(3, 0));
        this.generatePolygon("rectangle", generateUnitNgonPointsFitToSquare(4, 0));
        nodeShapes["square"] = nodeShapes["rectangle"];
        this.generateRoundRectangle();
        this.generateCutRectangle();
        this.generateBarrel();
        this.generateBottomRoundrectangle();
        {
          var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0];
          this.generatePolygon("diamond", diamondPoints);
          this.generateRoundPolygon("round-diamond", diamondPoints);
        }
        this.generatePolygon("pentagon", generateUnitNgonPointsFitToSquare(5, 0));
        this.generateRoundPolygon("round-pentagon", generateUnitNgonPointsFitToSquare(5, 0));
        this.generatePolygon("hexagon", generateUnitNgonPointsFitToSquare(6, 0));
        this.generateRoundPolygon("round-hexagon", generateUnitNgonPointsFitToSquare(6, 0));
        this.generatePolygon("heptagon", generateUnitNgonPointsFitToSquare(7, 0));
        this.generateRoundPolygon("round-heptagon", generateUnitNgonPointsFitToSquare(7, 0));
        this.generatePolygon("octagon", generateUnitNgonPointsFitToSquare(8, 0));
        this.generateRoundPolygon("round-octagon", generateUnitNgonPointsFitToSquare(8, 0));
        var star5Points = new Array(20);
        {
          var outerPoints = generateUnitNgonPoints(5, 0);
          var innerPoints = generateUnitNgonPoints(5, Math.PI / 5);
          var innerRadius = 0.5 * (3 - Math.sqrt(5));
          innerRadius *= 1.57;
          for (var i2 = 0; i2 < innerPoints.length / 2; i2++) {
            innerPoints[i2 * 2] *= innerRadius;
            innerPoints[i2 * 2 + 1] *= innerRadius;
          }
          for (var i2 = 0; i2 < 20 / 4; i2++) {
            star5Points[i2 * 4] = outerPoints[i2 * 2];
            star5Points[i2 * 4 + 1] = outerPoints[i2 * 2 + 1];
            star5Points[i2 * 4 + 2] = innerPoints[i2 * 2];
            star5Points[i2 * 4 + 3] = innerPoints[i2 * 2 + 1];
          }
        }
        star5Points = fitPolygonToSquare(star5Points);
        this.generatePolygon("star", star5Points);
        this.generatePolygon("vee", [-1, -1, 0, -0.333, 1, -1, 0, 1]);
        this.generatePolygon("rhomboid", [-1, -1, 0.333, -1, 1, 1, -0.333, 1]);
        this.generatePolygon("right-rhomboid", [-0.333, -1, 1, -1, 0.333, 1, -1, 1]);
        this.nodeShapes["concavehexagon"] = this.generatePolygon("concave-hexagon", [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]);
        {
          var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1];
          this.generatePolygon("tag", tagPoints);
          this.generateRoundPolygon("round-tag", tagPoints);
        }
        nodeShapes.makePolygon = function(points) {
          var key = points.join("$");
          var name = "polygon-" + key;
          var shape;
          if (shape = this[name]) {
            return shape;
          }
          return renderer15.generatePolygon(name, points);
        };
      };
      BRp$1 = {};
      BRp$1.timeToRender = function() {
        return this.redrawTotalTime / this.redrawCount;
      };
      BRp$1.redraw = function(options2) {
        options2 = options2 || staticEmptyObject();
        var r2 = this;
        if (r2.averageRedrawTime === void 0) {
          r2.averageRedrawTime = 0;
        }
        if (r2.lastRedrawTime === void 0) {
          r2.lastRedrawTime = 0;
        }
        if (r2.lastDrawTime === void 0) {
          r2.lastDrawTime = 0;
        }
        r2.requestedFrame = true;
        r2.renderOptions = options2;
      };
      BRp$1.beforeRender = function(fn3, priority3) {
        if (this.destroyed) {
          return;
        }
        if (priority3 == null) {
          error("Priority is not optional for beforeRender");
        }
        var cbs = this.beforeRenderCallbacks;
        cbs.push({
          fn: fn3,
          priority: priority3
        });
        cbs.sort(function(a2, b3) {
          return b3.priority - a2.priority;
        });
      };
      beforeRenderCallbacks = /* @__PURE__ */ __name(function beforeRenderCallbacks2(r2, willDraw, startTime) {
        var cbs = r2.beforeRenderCallbacks;
        for (var i2 = 0; i2 < cbs.length; i2++) {
          cbs[i2].fn(willDraw, startTime);
        }
      }, "beforeRenderCallbacks");
      BRp$1.startRenderLoop = function() {
        var r2 = this;
        var cy = r2.cy;
        if (r2.renderLoopStarted) {
          return;
        } else {
          r2.renderLoopStarted = true;
        }
        var _renderFn = /* @__PURE__ */ __name(function renderFn(requestTime) {
          if (r2.destroyed) {
            return;
          }
          if (cy.batching()) ;
          else if (r2.requestedFrame && !r2.skipFrame) {
            beforeRenderCallbacks(r2, true, requestTime);
            var startTime = performanceNow();
            r2.render(r2.renderOptions);
            var endTime = r2.lastDrawTime = performanceNow();
            if (r2.averageRedrawTime === void 0) {
              r2.averageRedrawTime = endTime - startTime;
            }
            if (r2.redrawCount === void 0) {
              r2.redrawCount = 0;
            }
            r2.redrawCount++;
            if (r2.redrawTotalTime === void 0) {
              r2.redrawTotalTime = 0;
            }
            var duration = endTime - startTime;
            r2.redrawTotalTime += duration;
            r2.lastRedrawTime = duration;
            r2.averageRedrawTime = r2.averageRedrawTime / 2 + duration / 2;
            r2.requestedFrame = false;
          } else {
            beforeRenderCallbacks(r2, false, requestTime);
          }
          r2.skipFrame = false;
          requestAnimationFrame2(_renderFn);
        }, "renderFn");
        requestAnimationFrame2(_renderFn);
      };
      BaseRenderer = /* @__PURE__ */ __name(function BaseRenderer2(options2) {
        this.init(options2);
      }, "BaseRenderer");
      BR = BaseRenderer;
      BRp = BR.prototype;
      BRp.clientFunctions = ["redrawHint", "render", "renderTo", "matchCanvasSize", "nodeShapeImpl", "arrowShapeImpl"];
      BRp.init = function(options2) {
        var r2 = this;
        r2.options = options2;
        r2.cy = options2.cy;
        var ctr = r2.container = options2.cy.container();
        var containerWindow = r2.cy.window();
        if (containerWindow) {
          var document2 = containerWindow.document;
          var head2 = document2.head;
          var stylesheetId = "__________cytoscape_stylesheet";
          var className = "__________cytoscape_container";
          var stylesheetAlreadyExists = document2.getElementById(stylesheetId) != null;
          if (ctr.className.indexOf(className) < 0) {
            ctr.className = (ctr.className || "") + " " + className;
          }
          if (!stylesheetAlreadyExists) {
            var stylesheet3 = document2.createElement("style");
            stylesheet3.id = stylesheetId;
            stylesheet3.textContent = "." + className + " { position: relative; }";
            head2.insertBefore(stylesheet3, head2.children[0]);
          }
          var computedStyle = containerWindow.getComputedStyle(ctr);
          var position5 = computedStyle.getPropertyValue("position");
          if (position5 === "static") {
            warn("A Cytoscape container has style position:static and so can not use UI extensions properly");
          }
        }
        r2.selection = [void 0, void 0, void 0, void 0, 0];
        r2.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95];
        r2.hoverData = {
          down: null,
          last: null,
          downTime: null,
          triggerMode: null,
          dragging: false,
          initialPan: [null, null],
          capture: false
        };
        r2.dragData = {
          possibleDragElements: []
        };
        r2.touchData = {
          start: null,
          capture: false,
          // These 3 fields related to tap, taphold events
          startPosition: [null, null, null, null, null, null],
          singleTouchStartTime: null,
          singleTouchMoved: true,
          now: [null, null, null, null, null, null],
          earlier: [null, null, null, null, null, null]
        };
        r2.redraws = 0;
        r2.showFps = options2.showFps;
        r2.debug = options2.debug;
        r2.webgl = options2.webgl;
        r2.hideEdgesOnViewport = options2.hideEdgesOnViewport;
        r2.textureOnViewport = options2.textureOnViewport;
        r2.wheelSensitivity = options2.wheelSensitivity;
        r2.motionBlurEnabled = options2.motionBlur;
        r2.forcedPixelRatio = number$1(options2.pixelRatio) ? options2.pixelRatio : null;
        r2.motionBlur = options2.motionBlur;
        r2.motionBlurOpacity = options2.motionBlurOpacity;
        r2.motionBlurTransparency = 1 - r2.motionBlurOpacity;
        r2.motionBlurPxRatio = 1;
        r2.mbPxRBlurry = 1;
        r2.minMbLowQualFrames = 4;
        r2.fullQualityMb = false;
        r2.clearedForMotionBlur = [];
        r2.desktopTapThreshold = options2.desktopTapThreshold;
        r2.desktopTapThreshold2 = options2.desktopTapThreshold * options2.desktopTapThreshold;
        r2.touchTapThreshold = options2.touchTapThreshold;
        r2.touchTapThreshold2 = options2.touchTapThreshold * options2.touchTapThreshold;
        r2.tapholdDuration = 500;
        r2.bindings = [];
        r2.beforeRenderCallbacks = [];
        r2.beforeRenderPriorities = {
          // higher priority execs before lower one
          animations: 400,
          eleCalcs: 300,
          eleTxrDeq: 200,
          lyrTxrDeq: 150,
          lyrTxrSkip: 100
        };
        r2.registerNodeShapes();
        r2.registerArrowShapes();
        r2.registerCalculationListeners();
      };
      BRp.notify = function(eventName, eles) {
        var r2 = this;
        var cy = r2.cy;
        if (this.destroyed) {
          return;
        }
        if (eventName === "init") {
          r2.load();
          return;
        }
        if (eventName === "destroy") {
          r2.destroy();
          return;
        }
        if (eventName === "add" || eventName === "remove" || eventName === "move" && cy.hasCompoundNodes() || eventName === "load" || eventName === "zorder" || eventName === "mount") {
          r2.invalidateCachedZSortedEles();
        }
        if (eventName === "viewport") {
          r2.redrawHint("select", true);
        }
        if (eventName === "gc") {
          r2.redrawHint("gc", true);
        }
        if (eventName === "load" || eventName === "resize" || eventName === "mount") {
          r2.invalidateContainerClientCoordsCache();
          r2.matchCanvasSize(r2.container);
        }
        r2.redrawHint("eles", true);
        r2.redrawHint("drag", true);
        this.startRenderLoop();
        this.redraw();
      };
      BRp.destroy = function() {
        var r2 = this;
        r2.destroyed = true;
        r2.cy.stopAnimationLoop();
        for (var i2 = 0; i2 < r2.bindings.length; i2++) {
          var binding = r2.bindings[i2];
          var b3 = binding;
          var tgt = b3.target;
          (tgt.off || tgt.removeEventListener).apply(tgt, b3.args);
        }
        r2.bindings = [];
        r2.beforeRenderCallbacks = [];
        r2.onUpdateEleCalcsFns = [];
        if (r2.removeObserver) {
          r2.removeObserver.disconnect();
        }
        if (r2.styleObserver) {
          r2.styleObserver.disconnect();
        }
        if (r2.resizeObserver) {
          r2.resizeObserver.disconnect();
        }
        if (r2.labelCalcDiv) {
          try {
            document.body.removeChild(r2.labelCalcDiv);
          } catch (e3) {
          }
        }
      };
      BRp.isHeadless = function() {
        return false;
      };
      [BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function(props) {
        extend4(BRp, props);
      });
      fullFpsTime = 1e3 / 60;
      defs = {
        setupDequeueing: /* @__PURE__ */ __name(function setupDequeueing(opts) {
          return /* @__PURE__ */ __name(function setupDequeueingImpl() {
            var self2 = this;
            var r2 = this.renderer;
            if (self2.dequeueingSetup) {
              return;
            } else {
              self2.dequeueingSetup = true;
            }
            var queueRedraw = debounce(function() {
              r2.redrawHint("eles", true);
              r2.redrawHint("drag", true);
              r2.redraw();
            }, opts.deqRedrawThreshold);
            var dequeue = /* @__PURE__ */ __name(function dequeue2(willDraw, frameStartTime) {
              var startTime = performanceNow();
              var avgRenderTime = r2.averageRedrawTime;
              var renderTime = r2.lastRedrawTime;
              var deqd = [];
              var extent2 = r2.cy.extent();
              var pixelRatio = r2.getPixelRatio();
              if (!willDraw) {
                r2.flushRenderedStyleQueue();
              }
              while (true) {
                var now3 = performanceNow();
                var duration = now3 - startTime;
                var frameDuration = now3 - frameStartTime;
                if (renderTime < fullFpsTime) {
                  var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0);
                  if (frameDuration >= opts.deqFastCost * timeAvailable) {
                    break;
                  }
                } else {
                  if (willDraw) {
                    if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) {
                      break;
                    }
                  } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) {
                    break;
                  }
                }
                var thisDeqd = opts.deq(self2, pixelRatio, extent2);
                if (thisDeqd.length > 0) {
                  for (var i2 = 0; i2 < thisDeqd.length; i2++) {
                    deqd.push(thisDeqd[i2]);
                  }
                } else {
                  break;
                }
              }
              if (deqd.length > 0) {
                opts.onDeqd(self2, deqd);
                if (!willDraw && opts.shouldRedraw(self2, deqd, pixelRatio, extent2)) {
                  queueRedraw();
                }
              }
            }, "dequeue");
            var priority3 = opts.priority || noop$1;
            r2.beforeRender(dequeue, priority3(self2));
          }, "setupDequeueingImpl");
        }, "setupDequeueing")
      };
      ElementTextureCacheLookup = /* @__PURE__ */ (function() {
        function ElementTextureCacheLookup2(getKey3) {
          var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : falsify;
          _classCallCheck(this, ElementTextureCacheLookup2);
          this.idsByKey = new Map$1();
          this.keyForId = new Map$1();
          this.cachesByLvl = new Map$1();
          this.lvls = [];
          this.getKey = getKey3;
          this.doesEleInvalidateKey = doesEleInvalidateKey;
        }
        __name(ElementTextureCacheLookup2, "ElementTextureCacheLookup");
        return _createClass(ElementTextureCacheLookup2, [{
          key: "getIdsFor",
          value: /* @__PURE__ */ __name(function getIdsFor(key) {
            if (key == null) {
              error("Can not get id list for null key");
            }
            var idsByKey = this.idsByKey;
            var ids = this.idsByKey.get(key);
            if (!ids) {
              ids = new Set$1();
              idsByKey.set(key, ids);
            }
            return ids;
          }, "getIdsFor")
        }, {
          key: "addIdForKey",
          value: /* @__PURE__ */ __name(function addIdForKey(key, id41) {
            if (key != null) {
              this.getIdsFor(key).add(id41);
            }
          }, "addIdForKey")
        }, {
          key: "deleteIdForKey",
          value: /* @__PURE__ */ __name(function deleteIdForKey(key, id41) {
            if (key != null) {
              this.getIdsFor(key)["delete"](id41);
            }
          }, "deleteIdForKey")
        }, {
          key: "getNumberOfIdsForKey",
          value: /* @__PURE__ */ __name(function getNumberOfIdsForKey(key) {
            if (key == null) {
              return 0;
            } else {
              return this.getIdsFor(key).size;
            }
          }, "getNumberOfIdsForKey")
        }, {
          key: "updateKeyMappingFor",
          value: /* @__PURE__ */ __name(function updateKeyMappingFor(ele) {
            var id41 = ele.id();
            var prevKey = this.keyForId.get(id41);
            var currKey = this.getKey(ele);
            this.deleteIdForKey(prevKey, id41);
            this.addIdForKey(currKey, id41);
            this.keyForId.set(id41, currKey);
          }, "updateKeyMappingFor")
        }, {
          key: "deleteKeyMappingFor",
          value: /* @__PURE__ */ __name(function deleteKeyMappingFor(ele) {
            var id41 = ele.id();
            var prevKey = this.keyForId.get(id41);
            this.deleteIdForKey(prevKey, id41);
            this.keyForId["delete"](id41);
          }, "deleteKeyMappingFor")
        }, {
          key: "keyHasChangedFor",
          value: /* @__PURE__ */ __name(function keyHasChangedFor(ele) {
            var id41 = ele.id();
            var prevKey = this.keyForId.get(id41);
            var newKey = this.getKey(ele);
            return prevKey !== newKey;
          }, "keyHasChangedFor")
        }, {
          key: "isInvalid",
          value: /* @__PURE__ */ __name(function isInvalid(ele) {
            return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele);
          }, "isInvalid")
        }, {
          key: "getCachesAt",
          value: /* @__PURE__ */ __name(function getCachesAt(lvl) {
            var cachesByLvl = this.cachesByLvl, lvls = this.lvls;
            var caches = cachesByLvl.get(lvl);
            if (!caches) {
              caches = new Map$1();
              cachesByLvl.set(lvl, caches);
              lvls.push(lvl);
            }
            return caches;
          }, "getCachesAt")
        }, {
          key: "getCache",
          value: /* @__PURE__ */ __name(function getCache(key, lvl) {
            return this.getCachesAt(lvl).get(key);
          }, "getCache")
        }, {
          key: "get",
          value: /* @__PURE__ */ __name(function get6(ele, lvl) {
            var key = this.getKey(ele);
            var cache3 = this.getCache(key, lvl);
            if (cache3 != null) {
              this.updateKeyMappingFor(ele);
            }
            return cache3;
          }, "get")
        }, {
          key: "getForCachedKey",
          value: /* @__PURE__ */ __name(function getForCachedKey(ele, lvl) {
            var key = this.keyForId.get(ele.id());
            var cache3 = this.getCache(key, lvl);
            return cache3;
          }, "getForCachedKey")
        }, {
          key: "hasCache",
          value: /* @__PURE__ */ __name(function hasCache(key, lvl) {
            return this.getCachesAt(lvl).has(key);
          }, "hasCache")
        }, {
          key: "has",
          value: /* @__PURE__ */ __name(function has3(ele, lvl) {
            var key = this.getKey(ele);
            return this.hasCache(key, lvl);
          }, "has")
        }, {
          key: "setCache",
          value: /* @__PURE__ */ __name(function setCache(key, lvl, cache3) {
            cache3.key = key;
            this.getCachesAt(lvl).set(key, cache3);
          }, "setCache")
        }, {
          key: "set",
          value: /* @__PURE__ */ __name(function set5(ele, lvl, cache3) {
            var key = this.getKey(ele);
            this.setCache(key, lvl, cache3);
            this.updateKeyMappingFor(ele);
          }, "set")
        }, {
          key: "deleteCache",
          value: /* @__PURE__ */ __name(function deleteCache(key, lvl) {
            this.getCachesAt(lvl)["delete"](key);
          }, "deleteCache")
        }, {
          key: "delete",
          value: /* @__PURE__ */ __name(function _delete(ele, lvl) {
            var key = this.getKey(ele);
            this.deleteCache(key, lvl);
          }, "_delete")
        }, {
          key: "invalidateKey",
          value: /* @__PURE__ */ __name(function invalidateKey(key) {
            var _this = this;
            this.lvls.forEach(function(lvl) {
              return _this.deleteCache(key, lvl);
            });
          }, "invalidateKey")
          // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key)
        }, {
          key: "invalidate",
          value: /* @__PURE__ */ __name(function invalidate(ele) {
            var id41 = ele.id();
            var key = this.keyForId.get(id41);
            this.deleteKeyMappingFor(ele);
            var entireKeyInvalidated = this.doesEleInvalidateKey(ele);
            if (entireKeyInvalidated) {
              this.invalidateKey(key);
            }
            return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0;
          }, "invalidate")
        }]);
      })();
      minTxrH = 25;
      txrStepH = 50;
      minLvl$1 = -4;
      maxLvl$1 = 3;
      maxZoom$1 = 7.99;
      eleTxrSpacing = 8;
      defTxrWidth = 1024;
      maxTxrW = 1024;
      maxTxrH = 1024;
      minUtility = 0.2;
      maxFullness = 0.8;
      maxFullnessChecks = 10;
      deqCost$1 = 0.15;
      deqAvgCost$1 = 0.1;
      deqNoDrawCost$1 = 0.9;
      deqFastCost$1 = 0.9;
      deqRedrawThreshold$1 = 100;
      maxDeqSize$1 = 1;
      getTxrReasons = {
        dequeue: "dequeue",
        downscale: "downscale",
        highQuality: "highQuality"
      };
      initDefaults = defaults$g({
        getKey: null,
        doesEleInvalidateKey: falsify,
        drawElement: null,
        getBoundingBox: null,
        getRotationPoint: null,
        getRotationOffset: null,
        isVisible: trueify,
        allowEdgeTxrCaching: true,
        allowParentTxrCaching: true
      });
      ElementTextureCache = /* @__PURE__ */ __name(function ElementTextureCache2(renderer15, initOptions) {
        var self2 = this;
        self2.renderer = renderer15;
        self2.onDequeues = [];
        var opts = initDefaults(initOptions);
        extend4(self2, opts);
        self2.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey);
        self2.setupDequeueing();
      }, "ElementTextureCache");
      ETCp = ElementTextureCache.prototype;
      ETCp.reasons = getTxrReasons;
      ETCp.getTextureQueue = function(txrH) {
        var self2 = this;
        self2.eleImgCaches = self2.eleImgCaches || {};
        return self2.eleImgCaches[txrH] = self2.eleImgCaches[txrH] || [];
      };
      ETCp.getRetiredTextureQueue = function(txrH) {
        var self2 = this;
        var rtxtrQs = self2.eleImgCaches.retired = self2.eleImgCaches.retired || {};
        var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || [];
        return rtxtrQ;
      };
      ETCp.getElementQueue = function() {
        var self2 = this;
        var q3 = self2.eleCacheQueue = self2.eleCacheQueue || new Heap(function(a2, b3) {
          return b3.reqs - a2.reqs;
        });
        return q3;
      };
      ETCp.getElementKeyToQueue = function() {
        var self2 = this;
        var k2q = self2.eleKeyToCacheQueue = self2.eleKeyToCacheQueue || {};
        return k2q;
      };
      ETCp.getElement = function(ele, bb, pxRatio, lvl, reason) {
        var self2 = this;
        var r2 = this.renderer;
        var zoom2 = r2.cy.zoom();
        var lookup2 = this.lookup;
        if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) {
          return null;
        }
        if (!self2.allowEdgeTxrCaching && ele.isEdge() || !self2.allowParentTxrCaching && ele.isParent()) {
          return null;
        }
        if (lvl == null) {
          lvl = Math.ceil(log22(zoom2 * pxRatio));
        }
        if (lvl < minLvl$1) {
          lvl = minLvl$1;
        } else if (zoom2 >= maxZoom$1 || lvl > maxLvl$1) {
          return null;
        }
        var scale3 = Math.pow(2, lvl);
        var eleScaledH = bb.h * scale3;
        var eleScaledW = bb.w * scale3;
        var scaledLabelShown = r2.eleTextBiggerThanMin(ele, scale3);
        if (!this.isVisible(ele, scaledLabelShown)) {
          return null;
        }
        var eleCache = lookup2.get(ele, lvl);
        if (eleCache && eleCache.invalidated) {
          eleCache.invalidated = false;
          eleCache.texture.invalidatedWidth -= eleCache.width;
        }
        if (eleCache) {
          return eleCache;
        }
        var txrH;
        if (eleScaledH <= minTxrH) {
          txrH = minTxrH;
        } else if (eleScaledH <= txrStepH) {
          txrH = txrStepH;
        } else {
          txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH;
        }
        if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) {
          return null;
        }
        var txrQ = self2.getTextureQueue(txrH);
        var txr = txrQ[txrQ.length - 2];
        var addNewTxr = /* @__PURE__ */ __name(function addNewTxr2() {
          return self2.recycleTexture(txrH, eleScaledW) || self2.addTexture(txrH, eleScaledW);
        }, "addNewTxr");
        if (!txr) {
          txr = txrQ[txrQ.length - 1];
        }
        if (!txr) {
          txr = addNewTxr();
        }
        if (txr.width - txr.usedWidth < eleScaledW) {
          txr = addNewTxr();
        }
        var scalableFrom = /* @__PURE__ */ __name(function scalableFrom2(otherCache) {
          return otherCache && otherCache.scaledLabelShown === scaledLabelShown;
        }, "scalableFrom");
        var deqing = reason && reason === getTxrReasons.dequeue;
        var highQualityReq = reason && reason === getTxrReasons.highQuality;
        var downscaleReq = reason && reason === getTxrReasons.downscale;
        var higherCache;
        for (var l4 = lvl + 1; l4 <= maxLvl$1; l4++) {
          var c3 = lookup2.get(ele, l4);
          if (c3) {
            higherCache = c3;
            break;
          }
        }
        var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null;
        var downscale = /* @__PURE__ */ __name(function downscale2() {
          txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH);
        }, "downscale");
        txr.context.setTransform(1, 0, 0, 1, 0, 0);
        txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH);
        if (scalableFrom(oneUpCache)) {
          downscale();
        } else if (scalableFrom(higherCache)) {
          if (highQualityReq) {
            for (var _l = higherCache.level; _l > lvl; _l--) {
              oneUpCache = self2.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale);
            }
            downscale();
          } else {
            self2.queueElement(ele, higherCache.level - 1);
            return higherCache;
          }
        } else {
          var lowerCache;
          if (!deqing && !highQualityReq && !downscaleReq) {
            for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) {
              var _c = lookup2.get(ele, _l2);
              if (_c) {
                lowerCache = _c;
                break;
              }
            }
          }
          if (scalableFrom(lowerCache)) {
            self2.queueElement(ele, lvl);
            return lowerCache;
          }
          txr.context.translate(txr.usedWidth, 0);
          txr.context.scale(scale3, scale3);
          this.drawElement(txr.context, ele, bb, scaledLabelShown, false);
          txr.context.scale(1 / scale3, 1 / scale3);
          txr.context.translate(-txr.usedWidth, 0);
        }
        eleCache = {
          x: txr.usedWidth,
          texture: txr,
          level: lvl,
          scale: scale3,
          width: eleScaledW,
          height: eleScaledH,
          scaledLabelShown
        };
        txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing);
        txr.eleCaches.push(eleCache);
        lookup2.set(ele, lvl, eleCache);
        self2.checkTextureFullness(txr);
        return eleCache;
      };
      ETCp.invalidateElements = function(eles) {
        for (var i2 = 0; i2 < eles.length; i2++) {
          this.invalidateElement(eles[i2]);
        }
      };
      ETCp.invalidateElement = function(ele) {
        var self2 = this;
        var lookup2 = self2.lookup;
        var caches = [];
        var invalid = lookup2.isInvalid(ele);
        if (!invalid) {
          return;
        }
        for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) {
          var cache3 = lookup2.getForCachedKey(ele, lvl);
          if (cache3) {
            caches.push(cache3);
          }
        }
        var noOtherElesUseCache = lookup2.invalidate(ele);
        if (noOtherElesUseCache) {
          for (var i2 = 0; i2 < caches.length; i2++) {
            var _cache = caches[i2];
            var txr = _cache.texture;
            txr.invalidatedWidth += _cache.width;
            _cache.invalidated = true;
            self2.checkTextureUtility(txr);
          }
        }
        self2.removeFromQueue(ele);
      };
      ETCp.checkTextureUtility = function(txr) {
        if (txr.invalidatedWidth >= minUtility * txr.width) {
          this.retireTexture(txr);
        }
      };
      ETCp.checkTextureFullness = function(txr) {
        var self2 = this;
        var txrQ = self2.getTextureQueue(txr.height);
        if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) {
          removeFromArray(txrQ, txr);
        } else {
          txr.fullnessChecks++;
        }
      };
      ETCp.retireTexture = function(txr) {
        var self2 = this;
        var txrH = txr.height;
        var txrQ = self2.getTextureQueue(txrH);
        var lookup2 = this.lookup;
        removeFromArray(txrQ, txr);
        txr.retired = true;
        var eleCaches = txr.eleCaches;
        for (var i2 = 0; i2 < eleCaches.length; i2++) {
          var eleCache = eleCaches[i2];
          lookup2.deleteCache(eleCache.key, eleCache.level);
        }
        clearArray(eleCaches);
        var rtxtrQ = self2.getRetiredTextureQueue(txrH);
        rtxtrQ.push(txr);
      };
      ETCp.addTexture = function(txrH, minW) {
        var self2 = this;
        var txrQ = self2.getTextureQueue(txrH);
        var txr = {};
        txrQ.push(txr);
        txr.eleCaches = [];
        txr.height = txrH;
        txr.width = Math.max(defTxrWidth, minW);
        txr.usedWidth = 0;
        txr.invalidatedWidth = 0;
        txr.fullnessChecks = 0;
        txr.canvas = self2.renderer.makeOffscreenCanvas(txr.width, txr.height);
        txr.context = txr.canvas.getContext("2d");
        return txr;
      };
      ETCp.recycleTexture = function(txrH, minW) {
        var self2 = this;
        var txrQ = self2.getTextureQueue(txrH);
        var rtxtrQ = self2.getRetiredTextureQueue(txrH);
        for (var i2 = 0; i2 < rtxtrQ.length; i2++) {
          var txr = rtxtrQ[i2];
          if (txr.width >= minW) {
            txr.retired = false;
            txr.usedWidth = 0;
            txr.invalidatedWidth = 0;
            txr.fullnessChecks = 0;
            clearArray(txr.eleCaches);
            txr.context.setTransform(1, 0, 0, 1, 0, 0);
            txr.context.clearRect(0, 0, txr.width, txr.height);
            removeFromArray(rtxtrQ, txr);
            txrQ.push(txr);
            return txr;
          }
        }
      };
      ETCp.queueElement = function(ele, lvl) {
        var self2 = this;
        var q3 = self2.getElementQueue();
        var k2q = self2.getElementKeyToQueue();
        var key = this.getKey(ele);
        var existingReq = k2q[key];
        if (existingReq) {
          existingReq.level = Math.max(existingReq.level, lvl);
          existingReq.eles.merge(ele);
          existingReq.reqs++;
          q3.updateItem(existingReq);
        } else {
          var req = {
            eles: ele.spawn().merge(ele),
            level: lvl,
            reqs: 1,
            key
          };
          q3.push(req);
          k2q[key] = req;
        }
      };
      ETCp.dequeue = function(pxRatio) {
        var self2 = this;
        var q3 = self2.getElementQueue();
        var k2q = self2.getElementKeyToQueue();
        var dequeued = [];
        var lookup2 = self2.lookup;
        for (var i2 = 0; i2 < maxDeqSize$1; i2++) {
          if (q3.size() > 0) {
            var req = q3.pop();
            var key = req.key;
            var ele = req.eles[0];
            var cacheExists = lookup2.hasCache(ele, req.level);
            k2q[key] = null;
            if (cacheExists) {
              continue;
            }
            dequeued.push(req);
            var bb = self2.getBoundingBox(ele);
            self2.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue);
          } else {
            break;
          }
        }
        return dequeued;
      };
      ETCp.removeFromQueue = function(ele) {
        var self2 = this;
        var q3 = self2.getElementQueue();
        var k2q = self2.getElementKeyToQueue();
        var key = this.getKey(ele);
        var req = k2q[key];
        if (req != null) {
          if (req.eles.length === 1) {
            req.reqs = MAX_INT$1;
            q3.updateItem(req);
            q3.pop();
            k2q[key] = null;
          } else {
            req.eles.unmerge(ele);
          }
        }
      };
      ETCp.onDequeue = function(fn3) {
        this.onDequeues.push(fn3);
      };
      ETCp.offDequeue = function(fn3) {
        removeFromArray(this.onDequeues, fn3);
      };
      ETCp.setupDequeueing = defs.setupDequeueing({
        deqRedrawThreshold: deqRedrawThreshold$1,
        deqCost: deqCost$1,
        deqAvgCost: deqAvgCost$1,
        deqNoDrawCost: deqNoDrawCost$1,
        deqFastCost: deqFastCost$1,
        deq: /* @__PURE__ */ __name(function deq(self2, pxRatio, extent2) {
          return self2.dequeue(pxRatio, extent2);
        }, "deq"),
        onDeqd: /* @__PURE__ */ __name(function onDeqd(self2, deqd) {
          for (var i2 = 0; i2 < self2.onDequeues.length; i2++) {
            var fn3 = self2.onDequeues[i2];
            fn3(deqd);
          }
        }, "onDeqd"),
        shouldRedraw: /* @__PURE__ */ __name(function shouldRedraw(self2, deqd, pxRatio, extent2) {
          for (var i2 = 0; i2 < deqd.length; i2++) {
            var eles = deqd[i2].eles;
            for (var j3 = 0; j3 < eles.length; j3++) {
              var bb = eles[j3].boundingBox();
              if (boundingBoxesIntersect(bb, extent2)) {
                return true;
              }
            }
          }
          return false;
        }, "shouldRedraw"),
        priority: /* @__PURE__ */ __name(function priority(self2) {
          return self2.renderer.beforeRenderPriorities.eleTxrDeq;
        }, "priority")
      });
      defNumLayers = 1;
      minLvl = -4;
      maxLvl = 2;
      maxZoom2 = 3.99;
      deqRedrawThreshold = 50;
      refineEleDebounceTime = 50;
      deqCost = 0.15;
      deqAvgCost = 0.1;
      deqNoDrawCost = 0.9;
      deqFastCost = 0.9;
      maxDeqSize = 1;
      invalidThreshold = 250;
      maxLayerArea = 4e3 * 4e3;
      maxLayerDim = 32767;
      useHighQualityEleTxrReqs = true;
      LayeredTextureCache = /* @__PURE__ */ __name(function LayeredTextureCache2(renderer15) {
        var self2 = this;
        var r2 = self2.renderer = renderer15;
        var cy = r2.cy;
        self2.layersByLevel = {};
        self2.firstGet = true;
        self2.lastInvalidationTime = performanceNow() - 2 * invalidThreshold;
        self2.skipping = false;
        self2.eleTxrDeqs = cy.collection();
        self2.scheduleElementRefinement = debounce(function() {
          self2.refineElementTextures(self2.eleTxrDeqs);
          self2.eleTxrDeqs.unmerge(self2.eleTxrDeqs);
        }, refineEleDebounceTime);
        r2.beforeRender(function(willDraw, now3) {
          if (now3 - self2.lastInvalidationTime <= invalidThreshold) {
            self2.skipping = true;
          } else {
            self2.skipping = false;
          }
        }, r2.beforeRenderPriorities.lyrTxrSkip);
        var qSort = /* @__PURE__ */ __name(function qSort2(a2, b3) {
          return b3.reqs - a2.reqs;
        }, "qSort");
        self2.layersQueue = new Heap(qSort);
        self2.setupDequeueing();
      }, "LayeredTextureCache");
      LTCp = LayeredTextureCache.prototype;
      layerIdPool = 0;
      MAX_INT = Math.pow(2, 53) - 1;
      LTCp.makeLayer = function(bb, lvl) {
        var scale3 = Math.pow(2, lvl);
        var w4 = Math.ceil(bb.w * scale3);
        var h3 = Math.ceil(bb.h * scale3);
        var canvas = this.renderer.makeOffscreenCanvas(w4, h3);
        var layer = {
          id: layerIdPool = ++layerIdPool % MAX_INT,
          bb,
          level: lvl,
          width: w4,
          height: h3,
          canvas,
          context: canvas.getContext("2d"),
          eles: [],
          elesQueue: [],
          reqs: 0
        };
        var cxt = layer.context;
        var dx = -layer.bb.x1;
        var dy = -layer.bb.y1;
        cxt.scale(scale3, scale3);
        cxt.translate(dx, dy);
        return layer;
      };
      LTCp.getLayers = function(eles, pxRatio, lvl) {
        var self2 = this;
        var r2 = self2.renderer;
        var cy = r2.cy;
        var zoom2 = cy.zoom();
        var firstGet = self2.firstGet;
        self2.firstGet = false;
        if (lvl == null) {
          lvl = Math.ceil(log22(zoom2 * pxRatio));
          if (lvl < minLvl) {
            lvl = minLvl;
          } else if (zoom2 >= maxZoom2 || lvl > maxLvl) {
            return null;
          }
        }
        self2.validateLayersElesOrdering(lvl, eles);
        var layersByLvl = self2.layersByLevel;
        var scale3 = Math.pow(2, lvl);
        var layers = layersByLvl[lvl] = layersByLvl[lvl] || [];
        var bb;
        var lvlComplete = self2.levelIsComplete(lvl, eles);
        var tmpLayers;
        var checkTempLevels = /* @__PURE__ */ __name(function checkTempLevels2() {
          var canUseAsTmpLvl = /* @__PURE__ */ __name(function canUseAsTmpLvl2(l4) {
            self2.validateLayersElesOrdering(l4, eles);
            if (self2.levelIsComplete(l4, eles)) {
              tmpLayers = layersByLvl[l4];
              return true;
            }
          }, "canUseAsTmpLvl");
          var checkLvls = /* @__PURE__ */ __name(function checkLvls2(dir2) {
            if (tmpLayers) {
              return;
            }
            for (var l4 = lvl + dir2; minLvl <= l4 && l4 <= maxLvl; l4 += dir2) {
              if (canUseAsTmpLvl(l4)) {
                break;
              }
            }
          }, "checkLvls");
          checkLvls(1);
          checkLvls(-1);
          for (var i3 = layers.length - 1; i3 >= 0; i3--) {
            var layer2 = layers[i3];
            if (layer2.invalid) {
              removeFromArray(layers, layer2);
            }
          }
        }, "checkTempLevels");
        if (!lvlComplete) {
          checkTempLevels();
        } else {
          return layers;
        }
        var getBb = /* @__PURE__ */ __name(function getBb2() {
          if (!bb) {
            bb = makeBoundingBox();
            for (var i3 = 0; i3 < eles.length; i3++) {
              updateBoundingBox(bb, eles[i3].boundingBox());
            }
          }
          return bb;
        }, "getBb");
        var makeLayer = /* @__PURE__ */ __name(function makeLayer2(opts) {
          opts = opts || {};
          var after = opts.after;
          getBb();
          var w4 = Math.ceil(bb.w * scale3);
          var h3 = Math.ceil(bb.h * scale3);
          if (w4 > maxLayerDim || h3 > maxLayerDim) {
            return null;
          }
          var area = w4 * h3;
          if (area > maxLayerArea) {
            return null;
          }
          var layer2 = self2.makeLayer(bb, lvl);
          if (after != null) {
            var index = layers.indexOf(after) + 1;
            layers.splice(index, 0, layer2);
          } else if (opts.insert === void 0 || opts.insert) {
            layers.unshift(layer2);
          }
          return layer2;
        }, "makeLayer");
        if (self2.skipping && !firstGet) {
          return null;
        }
        var layer = null;
        var maxElesPerLayer = eles.length / defNumLayers;
        var allowLazyQueueing = !firstGet;
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          var rs = ele._private.rscratch;
          var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};
          var existingLayer = caches[lvl];
          if (existingLayer) {
            layer = existingLayer;
            continue;
          }
          if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) {
            layer = makeLayer({
              insert: true,
              after: layer
            });
            if (!layer) {
              return null;
            }
          }
          if (tmpLayers || allowLazyQueueing) {
            self2.queueLayer(layer, ele);
          } else {
            self2.drawEleInLayer(layer, ele, lvl, pxRatio);
          }
          layer.eles.push(ele);
          caches[lvl] = layer;
        }
        if (tmpLayers) {
          return tmpLayers;
        }
        if (allowLazyQueueing) {
          return null;
        }
        return layers;
      };
      LTCp.getEleLevelForLayerLevel = function(lvl, pxRatio) {
        return lvl;
      };
      LTCp.drawEleInLayer = function(layer, ele, lvl, pxRatio) {
        var self2 = this;
        var r2 = this.renderer;
        var context = layer.context;
        var bb = ele.boundingBox();
        if (bb.w === 0 || bb.h === 0 || !ele.visible()) {
          return;
        }
        lvl = self2.getEleLevelForLayerLevel(lvl, pxRatio);
        {
          r2.setImgSmoothing(context, false);
        }
        {
          r2.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs);
        }
        {
          r2.setImgSmoothing(context, true);
        }
      };
      LTCp.levelIsComplete = function(lvl, eles) {
        var self2 = this;
        var layers = self2.layersByLevel[lvl];
        if (!layers || layers.length === 0) {
          return false;
        }
        var numElesInLayers = 0;
        for (var i2 = 0; i2 < layers.length; i2++) {
          var layer = layers[i2];
          if (layer.reqs > 0) {
            return false;
          }
          if (layer.invalid) {
            return false;
          }
          numElesInLayers += layer.eles.length;
        }
        if (numElesInLayers !== eles.length) {
          return false;
        }
        return true;
      };
      LTCp.validateLayersElesOrdering = function(lvl, eles) {
        var layers = this.layersByLevel[lvl];
        if (!layers) {
          return;
        }
        for (var i2 = 0; i2 < layers.length; i2++) {
          var layer = layers[i2];
          var offset = -1;
          for (var j3 = 0; j3 < eles.length; j3++) {
            if (layer.eles[0] === eles[j3]) {
              offset = j3;
              break;
            }
          }
          if (offset < 0) {
            this.invalidateLayer(layer);
            continue;
          }
          var o2 = offset;
          for (var j3 = 0; j3 < layer.eles.length; j3++) {
            if (layer.eles[j3] !== eles[o2 + j3]) {
              this.invalidateLayer(layer);
              break;
            }
          }
        }
      };
      LTCp.updateElementsInLayers = function(eles, update2) {
        var self2 = this;
        var isEles = element(eles[0]);
        for (var i2 = 0; i2 < eles.length; i2++) {
          var req = isEles ? null : eles[i2];
          var ele = isEles ? eles[i2] : eles[i2].ele;
          var rs = ele._private.rscratch;
          var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};
          for (var l4 = minLvl; l4 <= maxLvl; l4++) {
            var layer = caches[l4];
            if (!layer) {
              continue;
            }
            if (req && self2.getEleLevelForLayerLevel(layer.level) !== req.level) {
              continue;
            }
            update2(layer, ele, req);
          }
        }
      };
      LTCp.haveLayers = function() {
        var self2 = this;
        var haveLayers = false;
        for (var l4 = minLvl; l4 <= maxLvl; l4++) {
          var layers = self2.layersByLevel[l4];
          if (layers && layers.length > 0) {
            haveLayers = true;
            break;
          }
        }
        return haveLayers;
      };
      LTCp.invalidateElements = function(eles) {
        var self2 = this;
        if (eles.length === 0) {
          return;
        }
        self2.lastInvalidationTime = performanceNow();
        if (eles.length === 0 || !self2.haveLayers()) {
          return;
        }
        self2.updateElementsInLayers(eles, /* @__PURE__ */ __name(function invalAssocLayers(layer, ele, req) {
          self2.invalidateLayer(layer);
        }, "invalAssocLayers"));
      };
      LTCp.invalidateLayer = function(layer) {
        this.lastInvalidationTime = performanceNow();
        if (layer.invalid) {
          return;
        }
        var lvl = layer.level;
        var eles = layer.eles;
        var layers = this.layersByLevel[lvl];
        removeFromArray(layers, layer);
        layer.elesQueue = [];
        layer.invalid = true;
        if (layer.replacement) {
          layer.replacement.invalid = true;
        }
        for (var i2 = 0; i2 < eles.length; i2++) {
          var caches = eles[i2]._private.rscratch.imgLayerCaches;
          if (caches) {
            caches[lvl] = null;
          }
        }
      };
      LTCp.refineElementTextures = function(eles) {
        var self2 = this;
        self2.updateElementsInLayers(eles, /* @__PURE__ */ __name(function refineEachEle(layer, ele, req) {
          var rLyr = layer.replacement;
          if (!rLyr) {
            rLyr = layer.replacement = self2.makeLayer(layer.bb, layer.level);
            rLyr.replaces = layer;
            rLyr.eles = layer.eles;
          }
          if (!rLyr.reqs) {
            for (var i2 = 0; i2 < rLyr.eles.length; i2++) {
              self2.queueLayer(rLyr, rLyr.eles[i2]);
            }
          }
        }, "refineEachEle"));
      };
      LTCp.enqueueElementRefinement = function(ele) {
        this.eleTxrDeqs.merge(ele);
        this.scheduleElementRefinement();
      };
      LTCp.queueLayer = function(layer, ele) {
        var self2 = this;
        var q3 = self2.layersQueue;
        var elesQ = layer.elesQueue;
        var hasId = elesQ.hasId = elesQ.hasId || {};
        if (layer.replacement) {
          return;
        }
        if (ele) {
          if (hasId[ele.id()]) {
            return;
          }
          elesQ.push(ele);
          hasId[ele.id()] = true;
        }
        if (layer.reqs) {
          layer.reqs++;
          q3.updateItem(layer);
        } else {
          layer.reqs = 1;
          q3.push(layer);
        }
      };
      LTCp.dequeue = function(pxRatio) {
        var self2 = this;
        var q3 = self2.layersQueue;
        var deqd = [];
        var eleDeqs = 0;
        while (eleDeqs < maxDeqSize) {
          if (q3.size() === 0) {
            break;
          }
          var layer = q3.peek();
          if (layer.replacement) {
            q3.pop();
            continue;
          }
          if (layer.replaces && layer !== layer.replaces.replacement) {
            q3.pop();
            continue;
          }
          if (layer.invalid) {
            q3.pop();
            continue;
          }
          var ele = layer.elesQueue.shift();
          if (ele) {
            self2.drawEleInLayer(layer, ele, layer.level, pxRatio);
            eleDeqs++;
          }
          if (deqd.length === 0) {
            deqd.push(true);
          }
          if (layer.elesQueue.length === 0) {
            q3.pop();
            layer.reqs = 0;
            if (layer.replaces) {
              self2.applyLayerReplacement(layer);
            }
            self2.requestRedraw();
          }
        }
        return deqd;
      };
      LTCp.applyLayerReplacement = function(layer) {
        var self2 = this;
        var layersInLevel = self2.layersByLevel[layer.level];
        var replaced = layer.replaces;
        var index = layersInLevel.indexOf(replaced);
        if (index < 0 || replaced.invalid) {
          return;
        }
        layersInLevel[index] = layer;
        for (var i2 = 0; i2 < layer.eles.length; i2++) {
          var _p = layer.eles[i2]._private;
          var cache3 = _p.imgLayerCaches = _p.imgLayerCaches || {};
          if (cache3) {
            cache3[layer.level] = layer;
          }
        }
        self2.requestRedraw();
      };
      LTCp.requestRedraw = debounce(function() {
        var r2 = this.renderer;
        r2.redrawHint("eles", true);
        r2.redrawHint("drag", true);
        r2.redraw();
      }, 100);
      LTCp.setupDequeueing = defs.setupDequeueing({
        deqRedrawThreshold,
        deqCost,
        deqAvgCost,
        deqNoDrawCost,
        deqFastCost,
        deq: /* @__PURE__ */ __name(function deq2(self2, pxRatio) {
          return self2.dequeue(pxRatio);
        }, "deq"),
        onDeqd: noop$1,
        shouldRedraw: trueify,
        priority: /* @__PURE__ */ __name(function priority2(self2) {
          return self2.renderer.beforeRenderPriorities.lyrTxrDeq;
        }, "priority")
      });
      CRp$b = {};
      __name(polygon, "polygon");
      __name(triangleBackcurve, "triangleBackcurve");
      __name(triangleTee, "triangleTee");
      __name(circleTriangle, "circleTriangle");
      __name(circle$1, "circle$1");
      CRp$b.arrowShapeImpl = function(name) {
        return (impl || (impl = {
          "polygon": polygon,
          "triangle-backcurve": triangleBackcurve,
          "triangle-tee": triangleTee,
          "circle-triangle": circleTriangle,
          "triangle-cross": triangleTee,
          "circle": circle$1
        }))[name];
      };
      CRp$a = {};
      CRp$a.drawElement = function(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) {
        var r2 = this;
        if (ele.isNode()) {
          r2.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);
        } else {
          r2.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);
        }
      };
      CRp$a.drawElementOverlay = function(context, ele) {
        var r2 = this;
        if (ele.isNode()) {
          r2.drawNodeOverlay(context, ele);
        } else {
          r2.drawEdgeOverlay(context, ele);
        }
      };
      CRp$a.drawElementUnderlay = function(context, ele) {
        var r2 = this;
        if (ele.isNode()) {
          r2.drawNodeUnderlay(context, ele);
        } else {
          r2.drawEdgeUnderlay(context, ele);
        }
      };
      CRp$a.drawCachedElementPortion = function(context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity3) {
        var r2 = this;
        var bb = eleTxrCache.getBoundingBox(ele);
        if (bb.w === 0 || bb.h === 0) {
          return;
        }
        var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason);
        if (eleCache != null) {
          var opacity = getOpacity3(r2, ele);
          if (opacity === 0) {
            return;
          }
          var theta = getRotation(r2, ele);
          var x1 = bb.x1, y1 = bb.y1, w4 = bb.w, h3 = bb.h;
          var x5, y6, sx, sy, smooth;
          if (theta !== 0) {
            var rotPt = eleTxrCache.getRotationPoint(ele);
            sx = rotPt.x;
            sy = rotPt.y;
            context.translate(sx, sy);
            context.rotate(theta);
            smooth = r2.getImgSmoothing(context);
            if (!smooth) {
              r2.setImgSmoothing(context, true);
            }
            var off = eleTxrCache.getRotationOffset(ele);
            x5 = off.x;
            y6 = off.y;
          } else {
            x5 = x1;
            y6 = y1;
          }
          var oldGlobalAlpha;
          if (opacity !== 1) {
            oldGlobalAlpha = context.globalAlpha;
            context.globalAlpha = oldGlobalAlpha * opacity;
          }
          context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x5, y6, w4, h3);
          if (opacity !== 1) {
            context.globalAlpha = oldGlobalAlpha;
          }
          if (theta !== 0) {
            context.rotate(-theta);
            context.translate(-sx, -sy);
            if (!smooth) {
              r2.setImgSmoothing(context, false);
            }
          }
        } else {
          eleTxrCache.drawElement(context, ele);
        }
      };
      getZeroRotation = /* @__PURE__ */ __name(function getZeroRotation2() {
        return 0;
      }, "getZeroRotation");
      getLabelRotation = /* @__PURE__ */ __name(function getLabelRotation2(r2, ele) {
        return r2.getTextAngle(ele, null);
      }, "getLabelRotation");
      getSourceLabelRotation = /* @__PURE__ */ __name(function getSourceLabelRotation2(r2, ele) {
        return r2.getTextAngle(ele, "source");
      }, "getSourceLabelRotation");
      getTargetLabelRotation = /* @__PURE__ */ __name(function getTargetLabelRotation2(r2, ele) {
        return r2.getTextAngle(ele, "target");
      }, "getTargetLabelRotation");
      getOpacity = /* @__PURE__ */ __name(function getOpacity2(r2, ele) {
        return ele.effectiveOpacity();
      }, "getOpacity");
      getTextOpacity = /* @__PURE__ */ __name(function getTextOpacity2(e3, ele) {
        return ele.pstyle("text-opacity").pfValue * ele.effectiveOpacity();
      }, "getTextOpacity");
      CRp$a.drawCachedElement = function(context, ele, pxRatio, extent2, lvl, requestHighQuality) {
        var r2 = this;
        var _r$data = r2.data, eleTxrCache = _r$data.eleTxrCache, lblTxrCache = _r$data.lblTxrCache, slbTxrCache = _r$data.slbTxrCache, tlbTxrCache = _r$data.tlbTxrCache;
        var bb = ele.boundingBox();
        var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null;
        if (bb.w === 0 || bb.h === 0 || !ele.visible()) {
          return;
        }
        if (!extent2 || boundingBoxesIntersect(bb, extent2)) {
          var isEdge2 = ele.isEdge();
          var badLine = ele.element()._private.rscratch.badLine;
          r2.drawElementUnderlay(context, ele);
          r2.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity);
          if (!isEdge2 || !badLine) {
            r2.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity);
          }
          if (isEdge2 && !badLine) {
            r2.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity);
            r2.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity);
          }
          r2.drawElementOverlay(context, ele);
        }
      };
      CRp$a.drawElements = function(context, eles) {
        var r2 = this;
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          r2.drawElement(context, ele);
        }
      };
      CRp$a.drawCachedElements = function(context, eles, pxRatio, extent2) {
        var r2 = this;
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          r2.drawCachedElement(context, ele, pxRatio, extent2);
        }
      };
      CRp$a.drawCachedNodes = function(context, eles, pxRatio, extent2) {
        var r2 = this;
        for (var i2 = 0; i2 < eles.length; i2++) {
          var ele = eles[i2];
          if (!ele.isNode()) {
            continue;
          }
          r2.drawCachedElement(context, ele, pxRatio, extent2);
        }
      };
      CRp$a.drawLayeredElements = function(context, eles, pxRatio, extent2) {
        var r2 = this;
        var layers = r2.data.lyrTxrCache.getLayers(eles, pxRatio);
        if (layers) {
          for (var i2 = 0; i2 < layers.length; i2++) {
            var layer = layers[i2];
            var bb = layer.bb;
            if (bb.w === 0 || bb.h === 0) {
              continue;
            }
            context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h);
          }
        } else {
          r2.drawCachedElements(context, eles, pxRatio, extent2);
        }
      };
      CRp$9 = {};
      CRp$9.drawEdge = function(context, edge, shiftToOriginWithBb) {
        var drawLabel4 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true;
        var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true;
        var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true;
        var r2 = this;
        var rs = edge._private.rscratch;
        if (shouldDrawOpacity && !edge.visible()) {
          return;
        }
        if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) {
          return;
        }
        var bb;
        if (shiftToOriginWithBb) {
          bb = shiftToOriginWithBb;
          context.translate(-bb.x1, -bb.y1);
        }
        var opacity = shouldDrawOpacity ? edge.pstyle("opacity").value : 1;
        var lineOpacity = shouldDrawOpacity ? edge.pstyle("line-opacity").value : 1;
        var curveStyle = edge.pstyle("curve-style").value;
        var lineStyle = edge.pstyle("line-style").value;
        var edgeWidth = edge.pstyle("width").pfValue;
        var lineCap = edge.pstyle("line-cap").value;
        var lineOutlineWidth = edge.pstyle("line-outline-width").value;
        var lineOutlineColor = edge.pstyle("line-outline-color").value;
        var effectiveLineOpacity = opacity * lineOpacity;
        var effectiveArrowOpacity = opacity * lineOpacity;
        var drawLine2 = /* @__PURE__ */ __name(function drawLine3() {
          var strokeOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : effectiveLineOpacity;
          if (curveStyle === "straight-triangle") {
            r2.eleStrokeStyle(context, edge, strokeOpacity);
            r2.drawEdgeTrianglePath(edge, context, rs.allpts);
          } else {
            context.lineWidth = edgeWidth;
            context.lineCap = lineCap;
            r2.eleStrokeStyle(context, edge, strokeOpacity);
            r2.drawEdgePath(edge, context, rs.allpts, lineStyle);
            context.lineCap = "butt";
          }
        }, "drawLine");
        var drawLineOutline = /* @__PURE__ */ __name(function drawLineOutline2() {
          var strokeOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : effectiveLineOpacity;
          context.lineWidth = edgeWidth + lineOutlineWidth;
          context.lineCap = lineCap;
          if (lineOutlineWidth > 0) {
            r2.colorStrokeStyle(context, lineOutlineColor[0], lineOutlineColor[1], lineOutlineColor[2], strokeOpacity);
          } else {
            context.lineCap = "butt";
            return;
          }
          if (curveStyle === "straight-triangle") {
            r2.drawEdgeTrianglePath(edge, context, rs.allpts);
          } else {
            r2.drawEdgePath(edge, context, rs.allpts, lineStyle);
            context.lineCap = "butt";
          }
        }, "drawLineOutline");
        var drawOverlay = /* @__PURE__ */ __name(function drawOverlay2() {
          if (!shouldDrawOverlay) {
            return;
          }
          r2.drawEdgeOverlay(context, edge);
        }, "drawOverlay");
        var drawUnderlay = /* @__PURE__ */ __name(function drawUnderlay2() {
          if (!shouldDrawOverlay) {
            return;
          }
          r2.drawEdgeUnderlay(context, edge);
        }, "drawUnderlay");
        var drawArrows2 = /* @__PURE__ */ __name(function drawArrows3() {
          var arrowOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : effectiveArrowOpacity;
          r2.drawArrowheads(context, edge, arrowOpacity);
        }, "drawArrows");
        var drawText6 = /* @__PURE__ */ __name(function drawText7() {
          r2.drawElementText(context, edge, null, drawLabel4);
        }, "drawText");
        context.lineJoin = "round";
        var ghost = edge.pstyle("ghost").value === "yes";
        if (ghost) {
          var gx = edge.pstyle("ghost-offset-x").pfValue;
          var gy = edge.pstyle("ghost-offset-y").pfValue;
          var ghostOpacity = edge.pstyle("ghost-opacity").value;
          var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity;
          context.translate(gx, gy);
          drawLine2(effectiveGhostOpacity);
          drawArrows2(effectiveGhostOpacity);
          context.translate(-gx, -gy);
        } else {
          drawLineOutline();
        }
        drawUnderlay();
        drawLine2();
        drawArrows2();
        drawOverlay();
        drawText6();
        if (shiftToOriginWithBb) {
          context.translate(bb.x1, bb.y1);
        }
      };
      drawEdgeOverlayUnderlay = /* @__PURE__ */ __name(function drawEdgeOverlayUnderlay2(overlayOrUnderlay) {
        if (!["overlay", "underlay"].includes(overlayOrUnderlay)) {
          throw new Error("Invalid state");
        }
        return function(context, edge) {
          if (!edge.visible()) {
            return;
          }
          var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value;
          if (opacity === 0) {
            return;
          }
          var r2 = this;
          var usePaths = r2.usePaths();
          var rs = edge._private.rscratch;
          var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue;
          var width3 = 2 * padding;
          var color2 = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value;
          context.lineWidth = width3;
          if (rs.edgeType === "self" && !usePaths) {
            context.lineCap = "butt";
          } else {
            context.lineCap = "round";
          }
          r2.colorStrokeStyle(context, color2[0], color2[1], color2[2], opacity);
          r2.drawEdgePath(edge, context, rs.allpts, "solid");
        };
      }, "drawEdgeOverlayUnderlay");
      CRp$9.drawEdgeOverlay = drawEdgeOverlayUnderlay("overlay");
      CRp$9.drawEdgeUnderlay = drawEdgeOverlayUnderlay("underlay");
      CRp$9.drawEdgePath = function(edge, context, pts2, type3) {
        var rs = edge._private.rscratch;
        var canvasCxt = context;
        var path4;
        var pathCacheHit = false;
        var usePaths = this.usePaths();
        var lineDashPattern = edge.pstyle("line-dash-pattern").pfValue;
        var lineDashOffset = edge.pstyle("line-dash-offset").pfValue;
        if (usePaths) {
          var pathCacheKey = pts2.join("$");
          var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey;
          if (keyMatches) {
            path4 = context = rs.pathCache;
            pathCacheHit = true;
          } else {
            path4 = context = new Path2D();
            rs.pathCacheKey = pathCacheKey;
            rs.pathCache = path4;
          }
        }
        if (canvasCxt.setLineDash) {
          switch (type3) {
            case "dotted":
              canvasCxt.setLineDash([1, 1]);
              break;
            case "dashed":
              canvasCxt.setLineDash(lineDashPattern);
              canvasCxt.lineDashOffset = lineDashOffset;
              break;
            case "solid":
              canvasCxt.setLineDash([]);
              break;
          }
        }
        if (!pathCacheHit && !rs.badLine) {
          if (context.beginPath) {
            context.beginPath();
          }
          context.moveTo(pts2[0], pts2[1]);
          switch (rs.edgeType) {
            case "bezier":
            case "self":
            case "compound":
            case "multibezier":
              for (var i2 = 2; i2 + 3 < pts2.length; i2 += 4) {
                context.quadraticCurveTo(pts2[i2], pts2[i2 + 1], pts2[i2 + 2], pts2[i2 + 3]);
              }
              break;
            case "straight":
            case "haystack":
              for (var _i = 2; _i + 1 < pts2.length; _i += 2) {
                context.lineTo(pts2[_i], pts2[_i + 1]);
              }
              break;
            case "segments":
              if (rs.isRound) {
                var _iterator = _createForOfIteratorHelper(rs.roundCorners), _step;
                try {
                  for (_iterator.s(); !(_step = _iterator.n()).done; ) {
                    var corner = _step.value;
                    drawPreparedRoundCorner(context, corner);
                  }
                } catch (err) {
                  _iterator.e(err);
                } finally {
                  _iterator.f();
                }
                context.lineTo(pts2[pts2.length - 2], pts2[pts2.length - 1]);
              } else {
                for (var _i2 = 2; _i2 + 1 < pts2.length; _i2 += 2) {
                  context.lineTo(pts2[_i2], pts2[_i2 + 1]);
                }
              }
              break;
          }
        }
        context = canvasCxt;
        if (usePaths) {
          context.stroke(path4);
        } else {
          context.stroke();
        }
        if (context.setLineDash) {
          context.setLineDash([]);
        }
      };
      CRp$9.drawEdgeTrianglePath = function(edge, context, pts2) {
        context.fillStyle = context.strokeStyle;
        var edgeWidth = edge.pstyle("width").pfValue;
        for (var i2 = 0; i2 + 1 < pts2.length; i2 += 2) {
          var vector = [pts2[i2 + 2] - pts2[i2], pts2[i2 + 3] - pts2[i2 + 1]];
          var length2 = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]);
          var normal = [vector[1] / length2, -vector[0] / length2];
          var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2];
          context.beginPath();
          context.moveTo(pts2[i2] - triangleHead[0], pts2[i2 + 1] - triangleHead[1]);
          context.lineTo(pts2[i2] + triangleHead[0], pts2[i2 + 1] + triangleHead[1]);
          context.lineTo(pts2[i2 + 2], pts2[i2 + 3]);
          context.closePath();
          context.fill();
        }
      };
      CRp$9.drawArrowheads = function(context, edge, opacity) {
        var rs = edge._private.rscratch;
        var isHaystack = rs.edgeType === "haystack";
        if (!isHaystack) {
          this.drawArrowhead(context, edge, "source", rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity);
        }
        this.drawArrowhead(context, edge, "mid-target", rs.midX, rs.midY, rs.midtgtArrowAngle, opacity);
        this.drawArrowhead(context, edge, "mid-source", rs.midX, rs.midY, rs.midsrcArrowAngle, opacity);
        if (!isHaystack) {
          this.drawArrowhead(context, edge, "target", rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity);
        }
      };
      CRp$9.drawArrowhead = function(context, edge, prefix, x5, y6, angle2, opacity) {
        if (isNaN(x5) || x5 == null || isNaN(y6) || y6 == null || isNaN(angle2) || angle2 == null) {
          return;
        }
        var self2 = this;
        var arrowShape = edge.pstyle(prefix + "-arrow-shape").value;
        if (arrowShape === "none") {
          return;
        }
        var arrowClearFill = edge.pstyle(prefix + "-arrow-fill").value === "hollow" ? "both" : "filled";
        var arrowFill = edge.pstyle(prefix + "-arrow-fill").value;
        var edgeWidth = edge.pstyle("width").pfValue;
        var pArrowWidth = edge.pstyle(prefix + "-arrow-width");
        var arrowWidth = pArrowWidth.value === "match-line" ? edgeWidth : pArrowWidth.pfValue;
        if (pArrowWidth.units === "%") arrowWidth *= edgeWidth;
        var edgeOpacity = edge.pstyle("opacity").value;
        if (opacity === void 0) {
          opacity = edgeOpacity;
        }
        var gco = context.globalCompositeOperation;
        if (opacity !== 1 || arrowFill === "hollow") {
          context.globalCompositeOperation = "destination-out";
          self2.colorFillStyle(context, 255, 255, 255, 1);
          self2.colorStrokeStyle(context, 255, 255, 255, 1);
          self2.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, arrowWidth, x5, y6, angle2);
          context.globalCompositeOperation = gco;
        }
        var color2 = edge.pstyle(prefix + "-arrow-color").value;
        self2.colorFillStyle(context, color2[0], color2[1], color2[2], opacity);
        self2.colorStrokeStyle(context, color2[0], color2[1], color2[2], opacity);
        self2.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x5, y6, angle2);
      };
      CRp$9.drawArrowShape = function(edge, context, fill, edgeWidth, shape, shapeWidth, x5, y6, angle2) {
        var r2 = this;
        var usePaths = this.usePaths() && shape !== "triangle-cross";
        var pathCacheHit = false;
        var path4;
        var canvasContext = context;
        var translation = {
          x: x5,
          y: y6
        };
        var scale3 = edge.pstyle("arrow-scale").value;
        var size4 = this.getArrowWidth(edgeWidth, scale3);
        var shapeImpl = r2.arrowShapes[shape];
        if (usePaths) {
          var cache3 = r2.arrowPathCache = r2.arrowPathCache || [];
          var key = hashString2(shape);
          var cachedPath = cache3[key];
          if (cachedPath != null) {
            path4 = context = cachedPath;
            pathCacheHit = true;
          } else {
            path4 = context = new Path2D();
            cache3[key] = path4;
          }
        }
        if (!pathCacheHit) {
          if (context.beginPath) {
            context.beginPath();
          }
          if (usePaths) {
            shapeImpl.draw(context, 1, 0, {
              x: 0,
              y: 0
            }, 1);
          } else {
            shapeImpl.draw(context, size4, angle2, translation, edgeWidth);
          }
          if (context.closePath) {
            context.closePath();
          }
        }
        context = canvasContext;
        if (usePaths) {
          context.translate(x5, y6);
          context.rotate(angle2);
          context.scale(size4, size4);
        }
        if (fill === "filled" || fill === "both") {
          if (usePaths) {
            context.fill(path4);
          } else {
            context.fill();
          }
        }
        if (fill === "hollow" || fill === "both") {
          context.lineWidth = shapeWidth / (usePaths ? size4 : 1);
          context.lineJoin = "miter";
          if (usePaths) {
            context.stroke(path4);
          } else {
            context.stroke();
          }
        }
        if (usePaths) {
          context.scale(1 / size4, 1 / size4);
          context.rotate(-angle2);
          context.translate(-x5, -y6);
        }
      };
      CRp$8 = {};
      CRp$8.safeDrawImage = function(context, img, ix, iy, iw, ih, x5, y6, w4, h3) {
        if (iw <= 0 || ih <= 0 || w4 <= 0 || h3 <= 0) {
          return;
        }
        try {
          context.drawImage(img, ix, iy, iw, ih, x5, y6, w4, h3);
        } catch (e3) {
          warn(e3);
        }
      };
      CRp$8.drawInscribedImage = function(context, img, node2, index, nodeOpacity) {
        var r2 = this;
        var pos = node2.position();
        var nodeX = pos.x;
        var nodeY = pos.y;
        var styleObj = node2.cy().style();
        var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj);
        var fit2 = getIndexedStyle(node2, "background-fit", "value", index);
        var repeat2 = getIndexedStyle(node2, "background-repeat", "value", index);
        var nodeW = node2.width();
        var nodeH = node2.height();
        var paddingX2 = node2.padding() * 2;
        var nodeTW = nodeW + (getIndexedStyle(node2, "background-width-relative-to", "value", index) === "inner" ? 0 : paddingX2);
        var nodeTH = nodeH + (getIndexedStyle(node2, "background-height-relative-to", "value", index) === "inner" ? 0 : paddingX2);
        var rs = node2._private.rscratch;
        var clip = getIndexedStyle(node2, "background-clip", "value", index);
        var shouldClip = clip === "node";
        var imgOpacity = getIndexedStyle(node2, "background-image-opacity", "value", index) * nodeOpacity;
        var smooth = getIndexedStyle(node2, "background-image-smoothing", "value", index);
        var cornerRadius = node2.pstyle("corner-radius").value;
        if (cornerRadius !== "auto") cornerRadius = node2.pstyle("corner-radius").pfValue;
        var imgW = img.width || img.cachedW;
        var imgH = img.height || img.cachedH;
        if (null == imgW || null == imgH) {
          document.body.appendChild(img);
          imgW = img.cachedW = img.width || img.offsetWidth;
          imgH = img.cachedH = img.height || img.offsetHeight;
          document.body.removeChild(img);
        }
        var w4 = imgW;
        var h3 = imgH;
        if (getIndexedStyle(node2, "background-width", "value", index) !== "auto") {
          if (getIndexedStyle(node2, "background-width", "units", index) === "%") {
            w4 = getIndexedStyle(node2, "background-width", "pfValue", index) * nodeTW;
          } else {
            w4 = getIndexedStyle(node2, "background-width", "pfValue", index);
          }
        }
        if (getIndexedStyle(node2, "background-height", "value", index) !== "auto") {
          if (getIndexedStyle(node2, "background-height", "units", index) === "%") {
            h3 = getIndexedStyle(node2, "background-height", "pfValue", index) * nodeTH;
          } else {
            h3 = getIndexedStyle(node2, "background-height", "pfValue", index);
          }
        }
        if (w4 === 0 || h3 === 0) {
          return;
        }
        if (fit2 === "contain") {
          var scale3 = Math.min(nodeTW / w4, nodeTH / h3);
          w4 *= scale3;
          h3 *= scale3;
        } else if (fit2 === "cover") {
          var scale3 = Math.max(nodeTW / w4, nodeTH / h3);
          w4 *= scale3;
          h3 *= scale3;
        }
        var x5 = nodeX - nodeTW / 2;
        var posXUnits = getIndexedStyle(node2, "background-position-x", "units", index);
        var posXPfVal = getIndexedStyle(node2, "background-position-x", "pfValue", index);
        if (posXUnits === "%") {
          x5 += (nodeTW - w4) * posXPfVal;
        } else {
          x5 += posXPfVal;
        }
        var offXUnits = getIndexedStyle(node2, "background-offset-x", "units", index);
        var offXPfVal = getIndexedStyle(node2, "background-offset-x", "pfValue", index);
        if (offXUnits === "%") {
          x5 += (nodeTW - w4) * offXPfVal;
        } else {
          x5 += offXPfVal;
        }
        var y6 = nodeY - nodeTH / 2;
        var posYUnits = getIndexedStyle(node2, "background-position-y", "units", index);
        var posYPfVal = getIndexedStyle(node2, "background-position-y", "pfValue", index);
        if (posYUnits === "%") {
          y6 += (nodeTH - h3) * posYPfVal;
        } else {
          y6 += posYPfVal;
        }
        var offYUnits = getIndexedStyle(node2, "background-offset-y", "units", index);
        var offYPfVal = getIndexedStyle(node2, "background-offset-y", "pfValue", index);
        if (offYUnits === "%") {
          y6 += (nodeTH - h3) * offYPfVal;
        } else {
          y6 += offYPfVal;
        }
        if (rs.pathCache) {
          x5 -= nodeX;
          y6 -= nodeY;
          nodeX = 0;
          nodeY = 0;
        }
        var gAlpha = context.globalAlpha;
        context.globalAlpha = imgOpacity;
        var smoothingEnabled = r2.getImgSmoothing(context);
        var isSmoothingSwitched = false;
        if (smooth === "no" && smoothingEnabled) {
          r2.setImgSmoothing(context, false);
          isSmoothingSwitched = true;
        } else if (smooth === "yes" && !smoothingEnabled) {
          r2.setImgSmoothing(context, true);
          isSmoothingSwitched = true;
        }
        if (repeat2 === "no-repeat") {
          if (shouldClip) {
            context.save();
            if (rs.pathCache) {
              context.clip(rs.pathCache);
            } else {
              r2.nodeShapes[r2.getNodeShape(node2)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs);
              context.clip();
            }
          }
          r2.safeDrawImage(context, img, 0, 0, imgW, imgH, x5, y6, w4, h3);
          if (shouldClip) {
            context.restore();
          }
        } else {
          var pattern = context.createPattern(img, repeat2);
          context.fillStyle = pattern;
          r2.nodeShapes[r2.getNodeShape(node2)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs);
          context.translate(x5, y6);
          context.fill();
          context.translate(-x5, -y6);
        }
        context.globalAlpha = gAlpha;
        if (isSmoothingSwitched) {
          r2.setImgSmoothing(context, smoothingEnabled);
        }
      };
      CRp$7 = {};
      CRp$7.eleTextBiggerThanMin = function(ele, scale3) {
        if (!scale3) {
          var zoom2 = ele.cy().zoom();
          var pxRatio = this.getPixelRatio();
          var lvl = Math.ceil(log22(zoom2 * pxRatio));
          scale3 = Math.pow(2, lvl);
        }
        var computedSize = ele.pstyle("font-size").pfValue * scale3;
        var minSize = ele.pstyle("min-zoomed-font-size").pfValue;
        if (computedSize < minSize) {
          return false;
        }
        return true;
      };
      CRp$7.drawElementText = function(context, ele, shiftToOriginWithBb, force, prefix) {
        var useEleOpacity = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true;
        var r2 = this;
        if (force == null) {
          if (useEleOpacity && !r2.eleTextBiggerThanMin(ele)) {
            return;
          }
        } else if (force === false) {
          return;
        }
        if (ele.isNode()) {
          var label = ele.pstyle("label");
          if (!label || !label.value) {
            return;
          }
          var justification = r2.getLabelJustification(ele);
          context.textAlign = justification;
          context.textBaseline = "bottom";
        } else {
          var badLine = ele.element()._private.rscratch.badLine;
          var _label = ele.pstyle("label");
          var srcLabel = ele.pstyle("source-label");
          var tgtLabel = ele.pstyle("target-label");
          if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) {
            return;
          }
          context.textAlign = "center";
          context.textBaseline = "bottom";
        }
        var applyRotation = !shiftToOriginWithBb;
        var bb;
        if (shiftToOriginWithBb) {
          bb = shiftToOriginWithBb;
          context.translate(-bb.x1, -bb.y1);
        }
        if (prefix == null) {
          r2.drawText(context, ele, null, applyRotation, useEleOpacity);
          if (ele.isEdge()) {
            r2.drawText(context, ele, "source", applyRotation, useEleOpacity);
            r2.drawText(context, ele, "target", applyRotation, useEleOpacity);
          }
        } else {
          r2.drawText(context, ele, prefix, applyRotation, useEleOpacity);
        }
        if (shiftToOriginWithBb) {
          context.translate(bb.x1, bb.y1);
        }
      };
      CRp$7.getFontCache = function(context) {
        var cache3;
        this.fontCaches = this.fontCaches || [];
        for (var i2 = 0; i2 < this.fontCaches.length; i2++) {
          cache3 = this.fontCaches[i2];
          if (cache3.context === context) {
            return cache3;
          }
        }
        cache3 = {
          context
        };
        this.fontCaches.push(cache3);
        return cache3;
      };
      CRp$7.setupTextStyle = function(context, ele) {
        var useEleOpacity = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;
        var labelStyle = ele.pstyle("font-style").strValue;
        var labelSize = ele.pstyle("font-size").pfValue + "px";
        var labelFamily = ele.pstyle("font-family").strValue;
        var labelWeight = ele.pstyle("font-weight").strValue;
        var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle("text-opacity").value : 1;
        var outlineOpacity = ele.pstyle("text-outline-opacity").value * opacity;
        var color2 = ele.pstyle("color").value;
        var outlineColor = ele.pstyle("text-outline-color").value;
        context.font = labelStyle + " " + labelWeight + " " + labelSize + " " + labelFamily;
        context.lineJoin = "round";
        this.colorFillStyle(context, color2[0], color2[1], color2[2], opacity);
        this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity);
      };
      __name(circle3, "circle");
      __name(roundRect, "roundRect");
      CRp$7.getTextAngle = function(ele, prefix) {
        var theta;
        var _p = ele._private;
        var rscratch = _p.rscratch;
        var pdash = prefix ? prefix + "-" : "";
        var rotation = ele.pstyle(pdash + "text-rotation");
        if (rotation.strValue === "autorotate") {
          var textAngle = getPrefixedProperty(rscratch, "labelAngle", prefix);
          theta = ele.isEdge() ? textAngle : 0;
        } else if (rotation.strValue === "none") {
          theta = 0;
        } else {
          theta = rotation.pfValue;
        }
        return theta;
      };
      CRp$7.drawText = function(context, ele, prefix) {
        var applyRotation = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true;
        var useEleOpacity = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true;
        var _p = ele._private;
        var rscratch = _p.rscratch;
        var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1;
        if (useEleOpacity && (parentOpacity === 0 || ele.pstyle("text-opacity").value === 0)) {
          return;
        }
        if (prefix === "main") {
          prefix = null;
        }
        var textX = getPrefixedProperty(rscratch, "labelX", prefix);
        var textY = getPrefixedProperty(rscratch, "labelY", prefix);
        var orgTextX, orgTextY;
        var text4 = this.getLabelText(ele, prefix);
        if (text4 != null && text4 !== "" && !isNaN(textX) && !isNaN(textY)) {
          this.setupTextStyle(context, ele, useEleOpacity);
          var pdash = prefix ? prefix + "-" : "";
          var textW = getPrefixedProperty(rscratch, "labelWidth", prefix);
          var textH = getPrefixedProperty(rscratch, "labelHeight", prefix);
          var marginX = ele.pstyle(pdash + "text-margin-x").pfValue;
          var marginY = ele.pstyle(pdash + "text-margin-y").pfValue;
          var isEdge2 = ele.isEdge();
          var halign = ele.pstyle("text-halign").value;
          var valign = ele.pstyle("text-valign").value;
          if (isEdge2) {
            halign = "center";
            valign = "center";
          }
          textX += marginX;
          textY += marginY;
          var theta;
          if (!applyRotation) {
            theta = 0;
          } else {
            theta = this.getTextAngle(ele, prefix);
          }
          if (theta !== 0) {
            orgTextX = textX;
            orgTextY = textY;
            context.translate(orgTextX, orgTextY);
            context.rotate(theta);
            textX = 0;
            textY = 0;
          }
          switch (valign) {
            case "top":
              break;
            case "center":
              textY += textH / 2;
              break;
            case "bottom":
              textY += textH;
              break;
          }
          var backgroundOpacity = ele.pstyle("text-background-opacity").value;
          var borderOpacity = ele.pstyle("text-border-opacity").value;
          var textBorderWidth = ele.pstyle("text-border-width").pfValue;
          var backgroundPadding = ele.pstyle("text-background-padding").pfValue;
          var styleShape = ele.pstyle("text-background-shape").strValue;
          var rounded = styleShape === "round-rectangle" || styleShape === "roundrectangle";
          var circled = styleShape === "circle";
          var roundRadius = 2;
          if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) {
            var textFill = context.fillStyle;
            var textStroke = context.strokeStyle;
            var textLineWidth = context.lineWidth;
            var textBackgroundColor = ele.pstyle("text-background-color").value;
            var textBorderColor = ele.pstyle("text-border-color").value;
            var textBorderStyle = ele.pstyle("text-border-style").value;
            var doFill = backgroundOpacity > 0;
            var doStroke = textBorderWidth > 0 && borderOpacity > 0;
            var bgX = textX - backgroundPadding;
            switch (halign) {
              case "left":
                bgX -= textW;
                break;
              case "center":
                bgX -= textW / 2;
                break;
            }
            var bgY = textY - textH - backgroundPadding;
            var bgW = textW + 2 * backgroundPadding;
            var bgH = textH + 2 * backgroundPadding;
            if (doFill) {
              context.fillStyle = "rgba(".concat(textBackgroundColor[0], ",").concat(textBackgroundColor[1], ",").concat(textBackgroundColor[2], ",").concat(backgroundOpacity * parentOpacity, ")");
            }
            if (doStroke) {
              context.strokeStyle = "rgba(".concat(textBorderColor[0], ",").concat(textBorderColor[1], ",").concat(textBorderColor[2], ",").concat(borderOpacity * parentOpacity, ")");
              context.lineWidth = textBorderWidth;
              if (context.setLineDash) {
                switch (textBorderStyle) {
                  case "dotted":
                    context.setLineDash([1, 1]);
                    break;
                  case "dashed":
                    context.setLineDash([4, 2]);
                    break;
                  case "double":
                    context.lineWidth = textBorderWidth / 4;
                    context.setLineDash([]);
                    break;
                  case "solid":
                  default:
                    context.setLineDash([]);
                    break;
                }
              }
            }
            if (rounded) {
              context.beginPath();
              roundRect(context, bgX, bgY, bgW, bgH, roundRadius);
            } else if (circled) {
              context.beginPath();
              circle3(context, bgX, bgY, bgW, bgH);
            } else {
              context.beginPath();
              context.rect(bgX, bgY, bgW, bgH);
            }
            if (doFill) context.fill();
            if (doStroke) context.stroke();
            if (doStroke && textBorderStyle === "double") {
              var whiteWidth = textBorderWidth / 2;
              context.beginPath();
              if (rounded) {
                roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - 2 * whiteWidth, bgH - 2 * whiteWidth, roundRadius);
              } else {
                context.rect(bgX + whiteWidth, bgY + whiteWidth, bgW - 2 * whiteWidth, bgH - 2 * whiteWidth);
              }
              context.stroke();
            }
            context.fillStyle = textFill;
            context.strokeStyle = textStroke;
            context.lineWidth = textLineWidth;
            if (context.setLineDash) context.setLineDash([]);
          }
          var lineWidth = 2 * ele.pstyle("text-outline-width").pfValue;
          if (lineWidth > 0) {
            context.lineWidth = lineWidth;
          }
          if (ele.pstyle("text-wrap").value === "wrap") {
            var lines = getPrefixedProperty(rscratch, "labelWrapCachedLines", prefix);
            var lineHeight = getPrefixedProperty(rscratch, "labelLineHeight", prefix);
            var halfTextW = textW / 2;
            var justification = this.getLabelJustification(ele);
            if (justification === "auto") ;
            else if (halign === "left") {
              if (justification === "left") {
                textX += -textW;
              } else if (justification === "center") {
                textX += -halfTextW;
              }
            } else if (halign === "center") {
              if (justification === "left") {
                textX += -halfTextW;
              } else if (justification === "right") {
                textX += halfTextW;
              }
            } else if (halign === "right") {
              if (justification === "center") {
                textX += halfTextW;
              } else if (justification === "right") {
                textX += textW;
              }
            }
            switch (valign) {
              case "top":
                textY -= (lines.length - 1) * lineHeight;
                break;
              case "center":
              case "bottom":
                textY -= (lines.length - 1) * lineHeight;
                break;
            }
            for (var l4 = 0; l4 < lines.length; l4++) {
              if (lineWidth > 0) {
                context.strokeText(lines[l4], textX, textY);
              }
              context.fillText(lines[l4], textX, textY);
              textY += lineHeight;
            }
          } else {
            if (lineWidth > 0) {
              context.strokeText(text4, textX, textY);
            }
            context.fillText(text4, textX, textY);
          }
          if (theta !== 0) {
            context.rotate(-theta);
            context.translate(-orgTextX, -orgTextY);
          }
        }
      };
      CRp$6 = {};
      CRp$6.drawNode = function(context, node2, shiftToOriginWithBb) {
        var drawLabel4 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true;
        var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true;
        var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true;
        var r2 = this;
        var nodeWidth, nodeHeight;
        var _p = node2._private;
        var rs = _p.rscratch;
        var pos = node2.position();
        if (!number$1(pos.x) || !number$1(pos.y)) {
          return;
        }
        if (shouldDrawOpacity && !node2.visible()) {
          return;
        }
        var eleOpacity = shouldDrawOpacity ? node2.effectiveOpacity() : 1;
        var usePaths = r2.usePaths();
        var path4;
        var pathCacheHit = false;
        var padding = node2.padding();
        nodeWidth = node2.width() + 2 * padding;
        nodeHeight = node2.height() + 2 * padding;
        var bb;
        if (shiftToOriginWithBb) {
          bb = shiftToOriginWithBb;
          context.translate(-bb.x1, -bb.y1);
        }
        var bgImgProp = node2.pstyle("background-image");
        var urls = bgImgProp.value;
        var urlDefined = new Array(urls.length);
        var image = new Array(urls.length);
        var numImages = 0;
        for (var i2 = 0; i2 < urls.length; i2++) {
          var url = urls[i2];
          var defd = urlDefined[i2] = url != null && url !== "none";
          if (defd) {
            var bgImgCrossOrigin = node2.cy().style().getIndexedStyle(node2, "background-image-crossorigin", "value", i2);
            numImages++;
            image[i2] = r2.getCachedImage(url, bgImgCrossOrigin, function() {
              _p.backgroundTimestamp = Date.now();
              node2.emitAndNotify("background");
            });
          }
        }
        var darkness = node2.pstyle("background-blacken").value;
        var borderWidth = node2.pstyle("border-width").pfValue;
        var bgOpacity = node2.pstyle("background-opacity").value * eleOpacity;
        var borderColor = node2.pstyle("border-color").value;
        var borderStyle = node2.pstyle("border-style").value;
        var borderJoin = node2.pstyle("border-join").value;
        var borderCap = node2.pstyle("border-cap").value;
        var borderPosition = node2.pstyle("border-position").value;
        var borderPattern = node2.pstyle("border-dash-pattern").pfValue;
        var borderOffset = node2.pstyle("border-dash-offset").pfValue;
        var borderOpacity = node2.pstyle("border-opacity").value * eleOpacity;
        var outlineWidth = node2.pstyle("outline-width").pfValue;
        var outlineColor = node2.pstyle("outline-color").value;
        var outlineStyle = node2.pstyle("outline-style").value;
        var outlineOpacity = node2.pstyle("outline-opacity").value * eleOpacity;
        var outlineOffset = node2.pstyle("outline-offset").value;
        var cornerRadius = node2.pstyle("corner-radius").value;
        if (cornerRadius !== "auto") cornerRadius = node2.pstyle("corner-radius").pfValue;
        var setupShapeColor = /* @__PURE__ */ __name(function setupShapeColor2() {
          var bgOpy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : bgOpacity;
          r2.eleFillStyle(context, node2, bgOpy);
        }, "setupShapeColor");
        var setupBorderColor = /* @__PURE__ */ __name(function setupBorderColor2() {
          var bdrOpy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : borderOpacity;
          r2.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy);
        }, "setupBorderColor");
        var setupOutlineColor = /* @__PURE__ */ __name(function setupOutlineColor2() {
          var otlnOpy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : outlineOpacity;
          r2.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], otlnOpy);
        }, "setupOutlineColor");
        var getPath = /* @__PURE__ */ __name(function getPath2(width3, height2, shape, points) {
          var pathCache = r2.nodePathCache = r2.nodePathCache || [];
          var key = hashStrings(shape === "polygon" ? shape + "," + points.join(",") : shape, "" + height2, "" + width3, "" + cornerRadius);
          var cachedPath = pathCache[key];
          var path5;
          var cacheHit = false;
          if (cachedPath != null) {
            path5 = cachedPath;
            cacheHit = true;
            rs.pathCache = path5;
          } else {
            path5 = new Path2D();
            pathCache[key] = rs.pathCache = path5;
          }
          return {
            path: path5,
            cacheHit
          };
        }, "getPath");
        var styleShape = node2.pstyle("shape").strValue;
        var shapePts = node2.pstyle("shape-polygon-points").pfValue;
        if (usePaths) {
          context.translate(pos.x, pos.y);
          var shapePath = getPath(nodeWidth, nodeHeight, styleShape, shapePts);
          path4 = shapePath.path;
          pathCacheHit = shapePath.cacheHit;
        }
        var drawShape = /* @__PURE__ */ __name(function drawShape2() {
          if (!pathCacheHit) {
            var npos = pos;
            if (usePaths) {
              npos = {
                x: 0,
                y: 0
              };
            }
            r2.nodeShapes[r2.getNodeShape(node2)].draw(path4 || context, npos.x, npos.y, nodeWidth, nodeHeight, cornerRadius, rs);
          }
          if (usePaths) {
            context.fill(path4);
          } else {
            context.fill();
          }
        }, "drawShape");
        var drawImages = /* @__PURE__ */ __name(function drawImages2() {
          var nodeOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : eleOpacity;
          var inside = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
          var prevBging = _p.backgrounding;
          var totalCompleted = 0;
          for (var _i = 0; _i < image.length; _i++) {
            var bgContainment = node2.cy().style().getIndexedStyle(node2, "background-image-containment", "value", _i);
            if (inside && bgContainment === "over" || !inside && bgContainment === "inside") {
              totalCompleted++;
              continue;
            }
            if (urlDefined[_i] && image[_i].complete && !image[_i].error) {
              totalCompleted++;
              r2.drawInscribedImage(context, image[_i], node2, _i, nodeOpacity);
            }
          }
          _p.backgrounding = !(totalCompleted === numImages);
          if (prevBging !== _p.backgrounding) {
            node2.updateStyle(false);
          }
        }, "drawImages");
        var drawPie = /* @__PURE__ */ __name(function drawPie2() {
          var redrawShape = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
          var pieOpacity = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : eleOpacity;
          if (r2.hasPie(node2)) {
            r2.drawPie(context, node2, pieOpacity);
            if (redrawShape) {
              if (!usePaths) {
                r2.nodeShapes[r2.getNodeShape(node2)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs);
              }
            }
          }
        }, "drawPie");
        var drawStripe = /* @__PURE__ */ __name(function drawStripe2() {
          var redrawShape = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
          var stripeOpacity = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : eleOpacity;
          if (r2.hasStripe(node2)) {
            context.save();
            if (usePaths) {
              context.clip(rs.pathCache);
            } else {
              r2.nodeShapes[r2.getNodeShape(node2)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs);
              context.clip();
            }
            r2.drawStripe(context, node2, stripeOpacity);
            context.restore();
            if (redrawShape) {
              if (!usePaths) {
                r2.nodeShapes[r2.getNodeShape(node2)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs);
              }
            }
          }
        }, "drawStripe");
        var darken2 = /* @__PURE__ */ __name(function darken3() {
          var darkenOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : eleOpacity;
          var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity;
          var c3 = darkness > 0 ? 0 : 255;
          if (darkness !== 0) {
            r2.colorFillStyle(context, c3, c3, c3, opacity);
            if (usePaths) {
              context.fill(path4);
            } else {
              context.fill();
            }
          }
        }, "darken");
        var drawBorder = /* @__PURE__ */ __name(function drawBorder2() {
          if (borderWidth > 0) {
            context.lineWidth = borderWidth;
            context.lineCap = borderCap;
            context.lineJoin = borderJoin;
            if (context.setLineDash) {
              switch (borderStyle) {
                case "dotted":
                  context.setLineDash([1, 1]);
                  break;
                case "dashed":
                  context.setLineDash(borderPattern);
                  context.lineDashOffset = borderOffset;
                  break;
                case "solid":
                case "double":
                  context.setLineDash([]);
                  break;
              }
            }
            if (borderPosition !== "center") {
              context.save();
              context.lineWidth *= 2;
              if (borderPosition === "inside") {
                usePaths ? context.clip(path4) : context.clip();
              } else {
                var region = new Path2D();
                region.rect(-nodeWidth / 2 - borderWidth, -nodeHeight / 2 - borderWidth, nodeWidth + 2 * borderWidth, nodeHeight + 2 * borderWidth);
                region.addPath(path4);
                context.clip(region, "evenodd");
              }
              usePaths ? context.stroke(path4) : context.stroke();
              context.restore();
            } else {
              usePaths ? context.stroke(path4) : context.stroke();
            }
            if (borderStyle === "double") {
              context.lineWidth = borderWidth / 3;
              var gco = context.globalCompositeOperation;
              context.globalCompositeOperation = "destination-out";
              if (usePaths) {
                context.stroke(path4);
              } else {
                context.stroke();
              }
              context.globalCompositeOperation = gco;
            }
            if (context.setLineDash) {
              context.setLineDash([]);
            }
          }
        }, "drawBorder");
        var drawOutline = /* @__PURE__ */ __name(function drawOutline2() {
          if (outlineWidth > 0) {
            context.lineWidth = outlineWidth;
            context.lineCap = "butt";
            if (context.setLineDash) {
              switch (outlineStyle) {
                case "dotted":
                  context.setLineDash([1, 1]);
                  break;
                case "dashed":
                  context.setLineDash([4, 2]);
                  break;
                case "solid":
                case "double":
                  context.setLineDash([]);
                  break;
              }
            }
            var npos = pos;
            if (usePaths) {
              npos = {
                x: 0,
                y: 0
              };
            }
            var shape = r2.getNodeShape(node2);
            var bWidth = borderWidth;
            if (borderPosition === "inside") bWidth = 0;
            if (borderPosition === "outside") bWidth *= 2;
            var scaleX = (nodeWidth + bWidth + (outlineWidth + outlineOffset)) / nodeWidth;
            var scaleY = (nodeHeight + bWidth + (outlineWidth + outlineOffset)) / nodeHeight;
            var sWidth = nodeWidth * scaleX;
            var sHeight = nodeHeight * scaleY;
            var points = r2.nodeShapes[shape].points;
            var _path;
            if (usePaths) {
              var outlinePath = getPath(sWidth, sHeight, shape, points);
              _path = outlinePath.path;
            }
            if (shape === "ellipse") {
              r2.drawEllipsePath(_path || context, npos.x, npos.y, sWidth, sHeight);
            } else if (["round-diamond", "round-heptagon", "round-hexagon", "round-octagon", "round-pentagon", "round-polygon", "round-triangle", "round-tag"].includes(shape)) {
              var sMult = 0;
              var offsetX = 0;
              var offsetY = 0;
              if (shape === "round-diamond") {
                sMult = (bWidth + outlineOffset + outlineWidth) * 1.4;
              } else if (shape === "round-heptagon") {
                sMult = (bWidth + outlineOffset + outlineWidth) * 1.075;
                offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 35;
              } else if (shape === "round-hexagon") {
                sMult = (bWidth + outlineOffset + outlineWidth) * 1.12;
              } else if (shape === "round-pentagon") {
                sMult = (bWidth + outlineOffset + outlineWidth) * 1.13;
                offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 15;
              } else if (shape === "round-tag") {
                sMult = (bWidth + outlineOffset + outlineWidth) * 1.12;
                offsetX = (bWidth / 2 + outlineWidth + outlineOffset) * 0.07;
              } else if (shape === "round-triangle") {
                sMult = (bWidth + outlineOffset + outlineWidth) * (Math.PI / 2);
                offsetY = -(bWidth + outlineOffset / 2 + outlineWidth) / Math.PI;
              }
              if (sMult !== 0) {
                scaleX = (nodeWidth + sMult) / nodeWidth;
                sWidth = nodeWidth * scaleX;
                if (!["round-hexagon", "round-tag"].includes(shape)) {
                  scaleY = (nodeHeight + sMult) / nodeHeight;
                  sHeight = nodeHeight * scaleY;
                }
              }
              cornerRadius = cornerRadius === "auto" ? getRoundPolygonRadius(sWidth, sHeight) : cornerRadius;
              var halfW = sWidth / 2;
              var halfH = sHeight / 2;
              var radius2 = cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2;
              var p3 = new Array(points.length / 2);
              var corners = new Array(points.length / 2);
              for (var _i2 = 0; _i2 < points.length / 2; _i2++) {
                p3[_i2] = {
                  x: npos.x + offsetX + halfW * points[_i2 * 2],
                  y: npos.y + offsetY + halfH * points[_i2 * 2 + 1]
                };
              }
              var _i3, p1, p22, p32, len = p3.length;
              p1 = p3[len - 1];
              for (_i3 = 0; _i3 < len; _i3++) {
                p22 = p3[_i3 % len];
                p32 = p3[(_i3 + 1) % len];
                corners[_i3] = getRoundCorner(p1, p22, p32, radius2);
                p1 = p22;
                p22 = p32;
              }
              r2.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points, corners);
            } else if (["roundrectangle", "round-rectangle"].includes(shape)) {
              cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius;
              r2.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2);
            } else if (["cutrectangle", "cut-rectangle"].includes(shape)) {
              cornerRadius = cornerRadius === "auto" ? getCutRectangleCornerLength() : cornerRadius;
              r2.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, null, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 4);
            } else if (["bottomroundrectangle", "bottom-round-rectangle"].includes(shape)) {
              cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius;
              r2.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2);
            } else if (shape === "barrel") {
              r2.drawBarrelPath(_path || context, npos.x, npos.y, sWidth, sHeight);
            } else if (shape.startsWith("polygon") || ["rhomboid", "right-rhomboid", "round-tag", "tag", "vee"].includes(shape)) {
              var pad3 = (bWidth + outlineWidth + outlineOffset) / nodeWidth;
              points = joinLines(expandPolygon(points, pad3));
              r2.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points);
            } else {
              var _pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth;
              points = joinLines(expandPolygon(points, -_pad));
              r2.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points);
            }
            if (usePaths) {
              context.stroke(_path);
            } else {
              context.stroke();
            }
            if (outlineStyle === "double") {
              context.lineWidth = bWidth / 3;
              var gco = context.globalCompositeOperation;
              context.globalCompositeOperation = "destination-out";
              if (usePaths) {
                context.stroke(_path);
              } else {
                context.stroke();
              }
              context.globalCompositeOperation = gco;
            }
            if (context.setLineDash) {
              context.setLineDash([]);
            }
          }
        }, "drawOutline");
        var drawOverlay = /* @__PURE__ */ __name(function drawOverlay2() {
          if (shouldDrawOverlay) {
            r2.drawNodeOverlay(context, node2, pos, nodeWidth, nodeHeight);
          }
        }, "drawOverlay");
        var drawUnderlay = /* @__PURE__ */ __name(function drawUnderlay2() {
          if (shouldDrawOverlay) {
            r2.drawNodeUnderlay(context, node2, pos, nodeWidth, nodeHeight);
          }
        }, "drawUnderlay");
        var drawText6 = /* @__PURE__ */ __name(function drawText7() {
          r2.drawElementText(context, node2, null, drawLabel4);
        }, "drawText");
        var ghost = node2.pstyle("ghost").value === "yes";
        if (ghost) {
          var gx = node2.pstyle("ghost-offset-x").pfValue;
          var gy = node2.pstyle("ghost-offset-y").pfValue;
          var ghostOpacity = node2.pstyle("ghost-opacity").value;
          var effGhostOpacity = ghostOpacity * eleOpacity;
          context.translate(gx, gy);
          setupOutlineColor();
          drawOutline();
          setupShapeColor(ghostOpacity * bgOpacity);
          drawShape();
          drawImages(effGhostOpacity, true);
          setupBorderColor(ghostOpacity * borderOpacity);
          drawBorder();
          drawPie(darkness !== 0 || borderWidth !== 0);
          drawStripe(darkness !== 0 || borderWidth !== 0);
          drawImages(effGhostOpacity, false);
          darken2(effGhostOpacity);
          context.translate(-gx, -gy);
        }
        if (usePaths) {
          context.translate(-pos.x, -pos.y);
        }
        drawUnderlay();
        if (usePaths) {
          context.translate(pos.x, pos.y);
        }
        setupOutlineColor();
        drawOutline();
        setupShapeColor();
        drawShape();
        drawImages(eleOpacity, true);
        setupBorderColor();
        drawBorder();
        drawPie(darkness !== 0 || borderWidth !== 0);
        drawStripe(darkness !== 0 || borderWidth !== 0);
        drawImages(eleOpacity, false);
        darken2();
        if (usePaths) {
          context.translate(-pos.x, -pos.y);
        }
        drawText6();
        drawOverlay();
        if (shiftToOriginWithBb) {
          context.translate(bb.x1, bb.y1);
        }
      };
      drawNodeOverlayUnderlay = /* @__PURE__ */ __name(function drawNodeOverlayUnderlay2(overlayOrUnderlay) {
        if (!["overlay", "underlay"].includes(overlayOrUnderlay)) {
          throw new Error("Invalid state");
        }
        return function(context, node2, pos, nodeWidth, nodeHeight) {
          var r2 = this;
          if (!node2.visible()) {
            return;
          }
          var padding = node2.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue;
          var opacity = node2.pstyle("".concat(overlayOrUnderlay, "-opacity")).value;
          var color2 = node2.pstyle("".concat(overlayOrUnderlay, "-color")).value;
          var shape = node2.pstyle("".concat(overlayOrUnderlay, "-shape")).value;
          var radius2 = node2.pstyle("".concat(overlayOrUnderlay, "-corner-radius")).value;
          if (opacity > 0) {
            pos = pos || node2.position();
            if (nodeWidth == null || nodeHeight == null) {
              var _padding = node2.padding();
              nodeWidth = node2.width() + 2 * _padding;
              nodeHeight = node2.height() + 2 * _padding;
            }
            r2.colorFillStyle(context, color2[0], color2[1], color2[2], opacity);
            r2.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2, radius2);
            context.fill();
          }
        };
      }, "drawNodeOverlayUnderlay");
      CRp$6.drawNodeOverlay = drawNodeOverlayUnderlay("overlay");
      CRp$6.drawNodeUnderlay = drawNodeOverlayUnderlay("underlay");
      CRp$6.hasPie = function(node2) {
        node2 = node2[0];
        return node2._private.hasPie;
      };
      CRp$6.hasStripe = function(node2) {
        node2 = node2[0];
        return node2._private.hasStripe;
      };
      CRp$6.drawPie = function(context, node2, nodeOpacity, pos) {
        node2 = node2[0];
        pos = pos || node2.position();
        var cyStyle = node2.cy().style();
        var pieSize = node2.pstyle("pie-size");
        var hole = node2.pstyle("pie-hole");
        var overallStartAngle = node2.pstyle("pie-start-angle").pfValue;
        var x5 = pos.x;
        var y6 = pos.y;
        var nodeW = node2.width();
        var nodeH = node2.height();
        var radius2 = Math.min(nodeW, nodeH) / 2;
        var holeRadius;
        var lastPercent = 0;
        var usePaths = this.usePaths();
        if (usePaths) {
          x5 = 0;
          y6 = 0;
        }
        if (pieSize.units === "%") {
          radius2 = radius2 * pieSize.pfValue;
        } else if (pieSize.pfValue !== void 0) {
          radius2 = pieSize.pfValue / 2;
        }
        if (hole.units === "%") {
          holeRadius = radius2 * hole.pfValue;
        } else if (hole.pfValue !== void 0) {
          holeRadius = hole.pfValue / 2;
        }
        if (holeRadius >= radius2) {
          return;
        }
        for (var i2 = 1; i2 <= cyStyle.pieBackgroundN; i2++) {
          var size4 = node2.pstyle("pie-" + i2 + "-background-size").value;
          var color2 = node2.pstyle("pie-" + i2 + "-background-color").value;
          var opacity = node2.pstyle("pie-" + i2 + "-background-opacity").value * nodeOpacity;
          var percent = size4 / 100;
          if (percent + lastPercent > 1) {
            percent = 1 - lastPercent;
          }
          var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent;
          angleStart += overallStartAngle;
          var angleDelta = 2 * Math.PI * percent;
          var angleEnd = angleStart + angleDelta;
          if (size4 === 0 || lastPercent >= 1 || lastPercent + percent > 1) {
            continue;
          }
          if (holeRadius === 0) {
            context.beginPath();
            context.moveTo(x5, y6);
            context.arc(x5, y6, radius2, angleStart, angleEnd);
            context.closePath();
          } else {
            context.beginPath();
            context.arc(x5, y6, radius2, angleStart, angleEnd);
            context.arc(x5, y6, holeRadius, angleEnd, angleStart, true);
            context.closePath();
          }
          this.colorFillStyle(context, color2[0], color2[1], color2[2], opacity);
          context.fill();
          lastPercent += percent;
        }
      };
      CRp$6.drawStripe = function(context, node2, nodeOpacity, pos) {
        node2 = node2[0];
        pos = pos || node2.position();
        var cyStyle = node2.cy().style();
        var x5 = pos.x;
        var y6 = pos.y;
        var nodeW = node2.width();
        var nodeH = node2.height();
        var lastPercent = 0;
        var usePaths = this.usePaths();
        context.save();
        var direction2 = node2.pstyle("stripe-direction").value;
        var stripeSize = node2.pstyle("stripe-size");
        switch (direction2) {
          case "vertical":
            break;
          // default
          case "righward":
            context.rotate(-Math.PI / 2);
            break;
        }
        var stripeW = nodeW;
        var stripeH = nodeH;
        if (stripeSize.units === "%") {
          stripeW = stripeW * stripeSize.pfValue;
          stripeH = stripeH * stripeSize.pfValue;
        } else if (stripeSize.pfValue !== void 0) {
          stripeW = stripeSize.pfValue;
          stripeH = stripeSize.pfValue;
        }
        if (usePaths) {
          x5 = 0;
          y6 = 0;
        }
        y6 -= stripeW / 2;
        x5 -= stripeH / 2;
        for (var i2 = 1; i2 <= cyStyle.stripeBackgroundN; i2++) {
          var size4 = node2.pstyle("stripe-" + i2 + "-background-size").value;
          var color2 = node2.pstyle("stripe-" + i2 + "-background-color").value;
          var opacity = node2.pstyle("stripe-" + i2 + "-background-opacity").value * nodeOpacity;
          var percent = size4 / 100;
          if (percent + lastPercent > 1) {
            percent = 1 - lastPercent;
          }
          if (size4 === 0 || lastPercent >= 1 || lastPercent + percent > 1) {
            continue;
          }
          context.beginPath();
          context.rect(x5, y6 + stripeH * lastPercent, stripeW, stripeH * percent);
          context.closePath();
          this.colorFillStyle(context, color2[0], color2[1], color2[2], opacity);
          context.fill();
          lastPercent += percent;
        }
        context.restore();
      };
      CRp$5 = {};
      motionBlurDelay = 100;
      CRp$5.getPixelRatio = function() {
        var context = this.data.contexts[0];
        if (this.forcedPixelRatio != null) {
          return this.forcedPixelRatio;
        }
        var containerWindow = this.cy.window();
        var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;
        return (containerWindow.devicePixelRatio || 1) / backingStore;
      };
      CRp$5.paintCache = function(context) {
        var caches = this.paintCaches = this.paintCaches || [];
        var needToCreateCache = true;
        var cache3;
        for (var i2 = 0; i2 < caches.length; i2++) {
          cache3 = caches[i2];
          if (cache3.context === context) {
            needToCreateCache = false;
            break;
          }
        }
        if (needToCreateCache) {
          cache3 = {
            context
          };
          caches.push(cache3);
        }
        return cache3;
      };
      CRp$5.createGradientStyleFor = function(context, shapeStyleName, ele, fill, opacity) {
        var gradientStyle;
        var usePaths = this.usePaths();
        var colors2 = ele.pstyle(shapeStyleName + "-gradient-stop-colors").value, positions2 = ele.pstyle(shapeStyleName + "-gradient-stop-positions").pfValue;
        if (fill === "radial-gradient") {
          if (ele.isEdge()) {
            var start3 = ele.sourceEndpoint(), end2 = ele.targetEndpoint(), mid = ele.midpoint();
            var d1 = dist(start3, mid);
            var d22 = dist(end2, mid);
            gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d22));
          } else {
            var pos = usePaths ? {
              x: 0,
              y: 0
            } : ele.position(), width3 = ele.paddedWidth(), height2 = ele.paddedHeight();
            gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width3, height2));
          }
        } else {
          if (ele.isEdge()) {
            var _start = ele.sourceEndpoint(), _end = ele.targetEndpoint();
            gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y);
          } else {
            var _pos = usePaths ? {
              x: 0,
              y: 0
            } : ele.position(), _width = ele.paddedWidth(), _height = ele.paddedHeight(), halfWidth = _width / 2, halfHeight = _height / 2;
            var direction2 = ele.pstyle("background-gradient-direction").value;
            switch (direction2) {
              case "to-bottom":
                gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight);
                break;
              case "to-top":
                gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight);
                break;
              case "to-left":
                gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y);
                break;
              case "to-right":
                gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y);
                break;
              case "to-bottom-right":
              case "to-right-bottom":
                gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight);
                break;
              case "to-top-right":
              case "to-right-top":
                gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight);
                break;
              case "to-bottom-left":
              case "to-left-bottom":
                gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight);
                break;
              case "to-top-left":
              case "to-left-top":
                gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight);
                break;
            }
          }
        }
        if (!gradientStyle) return null;
        var hasPositions = positions2.length === colors2.length;
        var length2 = colors2.length;
        for (var i2 = 0; i2 < length2; i2++) {
          gradientStyle.addColorStop(hasPositions ? positions2[i2] : i2 / (length2 - 1), "rgba(" + colors2[i2][0] + "," + colors2[i2][1] + "," + colors2[i2][2] + "," + opacity + ")");
        }
        return gradientStyle;
      };
      CRp$5.gradientFillStyle = function(context, ele, fill, opacity) {
        var gradientStyle = this.createGradientStyleFor(context, "background", ele, fill, opacity);
        if (!gradientStyle) return null;
        context.fillStyle = gradientStyle;
      };
      CRp$5.colorFillStyle = function(context, r2, g2, b3, a2) {
        context.fillStyle = "rgba(" + r2 + "," + g2 + "," + b3 + "," + a2 + ")";
      };
      CRp$5.eleFillStyle = function(context, ele, opacity) {
        var backgroundFill = ele.pstyle("background-fill").value;
        if (backgroundFill === "linear-gradient" || backgroundFill === "radial-gradient") {
          this.gradientFillStyle(context, ele, backgroundFill, opacity);
        } else {
          var backgroundColor = ele.pstyle("background-color").value;
          this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity);
        }
      };
      CRp$5.gradientStrokeStyle = function(context, ele, fill, opacity) {
        var gradientStyle = this.createGradientStyleFor(context, "line", ele, fill, opacity);
        if (!gradientStyle) return null;
        context.strokeStyle = gradientStyle;
      };
      CRp$5.colorStrokeStyle = function(context, r2, g2, b3, a2) {
        context.strokeStyle = "rgba(" + r2 + "," + g2 + "," + b3 + "," + a2 + ")";
      };
      CRp$5.eleStrokeStyle = function(context, ele, opacity) {
        var lineFill = ele.pstyle("line-fill").value;
        if (lineFill === "linear-gradient" || lineFill === "radial-gradient") {
          this.gradientStrokeStyle(context, ele, lineFill, opacity);
        } else {
          var lineColor = ele.pstyle("line-color").value;
          this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity);
        }
      };
      CRp$5.matchCanvasSize = function(container2) {
        var r2 = this;
        var data6 = r2.data;
        var bb = r2.findContainerClientCoords();
        var width3 = bb[2];
        var height2 = bb[3];
        var pixelRatio = r2.getPixelRatio();
        var mbPxRatio = r2.motionBlurPxRatio;
        if (container2 === r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_NODE] || container2 === r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_DRAG]) {
          pixelRatio = mbPxRatio;
        }
        var canvasWidth = width3 * pixelRatio;
        var canvasHeight = height2 * pixelRatio;
        var canvas;
        if (canvasWidth === r2.canvasWidth && canvasHeight === r2.canvasHeight) {
          return;
        }
        r2.fontCaches = null;
        var canvasContainer = data6.canvasContainer;
        canvasContainer.style.width = width3 + "px";
        canvasContainer.style.height = height2 + "px";
        for (var i2 = 0; i2 < r2.CANVAS_LAYERS; i2++) {
          canvas = data6.canvases[i2];
          canvas.width = canvasWidth;
          canvas.height = canvasHeight;
          canvas.style.width = width3 + "px";
          canvas.style.height = height2 + "px";
        }
        for (var i2 = 0; i2 < r2.BUFFER_COUNT; i2++) {
          canvas = data6.bufferCanvases[i2];
          canvas.width = canvasWidth;
          canvas.height = canvasHeight;
          canvas.style.width = width3 + "px";
          canvas.style.height = height2 + "px";
        }
        r2.textureMult = 1;
        if (pixelRatio <= 1) {
          canvas = data6.bufferCanvases[r2.TEXTURE_BUFFER];
          r2.textureMult = 2;
          canvas.width = canvasWidth * r2.textureMult;
          canvas.height = canvasHeight * r2.textureMult;
        }
        r2.canvasWidth = canvasWidth;
        r2.canvasHeight = canvasHeight;
        r2.pixelRatio = pixelRatio;
      };
      CRp$5.renderTo = function(cxt, zoom2, pan2, pxRatio) {
        this.render({
          forcedContext: cxt,
          forcedZoom: zoom2,
          forcedPan: pan2,
          drawAllLayers: true,
          forcedPxRatio: pxRatio
        });
      };
      CRp$5.clearCanvas = function() {
        var r2 = this;
        var data6 = r2.data;
        function clear24(context) {
          context.clearRect(0, 0, r2.canvasWidth, r2.canvasHeight);
        }
        __name(clear24, "clear");
        clear24(data6.contexts[r2.NODE]);
        clear24(data6.contexts[r2.DRAG]);
      };
      CRp$5.render = function(options2) {
        var r2 = this;
        options2 = options2 || staticEmptyObject();
        var cy = r2.cy;
        var forcedContext = options2.forcedContext;
        var drawAllLayers = options2.drawAllLayers;
        var drawOnlyNodeLayer = options2.drawOnlyNodeLayer;
        var forcedZoom = options2.forcedZoom;
        var forcedPan = options2.forcedPan;
        var pixelRatio = options2.forcedPxRatio === void 0 ? this.getPixelRatio() : options2.forcedPxRatio;
        var data6 = r2.data;
        var needDraw = data6.canvasNeedsRedraw;
        var textureDraw = r2.textureOnViewport && !forcedContext && (r2.pinching || r2.hoverData.dragging || r2.swipePanning || r2.data.wheelZooming);
        var motionBlur = options2.motionBlur !== void 0 ? options2.motionBlur : r2.motionBlur;
        var mbPxRatio = r2.motionBlurPxRatio;
        var hasCompoundNodes2 = cy.hasCompoundNodes();
        var inNodeDragGesture = r2.hoverData.draggingEles;
        var inBoxSelection = r2.hoverData.selecting || r2.touchData.selecting ? true : false;
        motionBlur = motionBlur && !forcedContext && r2.motionBlurEnabled && !inBoxSelection;
        var motionBlurFadeEffect = motionBlur;
        if (!forcedContext) {
          if (r2.prevPxRatio !== pixelRatio) {
            r2.invalidateContainerClientCoordsCache();
            r2.matchCanvasSize(r2.container);
            r2.redrawHint("eles", true);
            r2.redrawHint("drag", true);
          }
          r2.prevPxRatio = pixelRatio;
        }
        if (!forcedContext && r2.motionBlurTimeout) {
          clearTimeout(r2.motionBlurTimeout);
        }
        if (motionBlur) {
          if (r2.mbFrames == null) {
            r2.mbFrames = 0;
          }
          r2.mbFrames++;
          if (r2.mbFrames < 3) {
            motionBlurFadeEffect = false;
          }
          if (r2.mbFrames > r2.minMbLowQualFrames) {
            r2.motionBlurPxRatio = r2.mbPxRBlurry;
          }
        }
        if (r2.clearingMotionBlur) {
          r2.motionBlurPxRatio = 1;
        }
        if (r2.textureDrawLastFrame && !textureDraw) {
          needDraw[r2.NODE] = true;
          needDraw[r2.SELECT_BOX] = true;
        }
        var style3 = cy.style();
        var zoom2 = cy.zoom();
        var effectiveZoom = forcedZoom !== void 0 ? forcedZoom : zoom2;
        var pan2 = cy.pan();
        var effectivePan = {
          x: pan2.x,
          y: pan2.y
        };
        var vp = {
          zoom: zoom2,
          pan: {
            x: pan2.x,
            y: pan2.y
          }
        };
        var prevVp = r2.prevViewport;
        var viewportIsDiff = prevVp === void 0 || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y;
        if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes2)) {
          r2.motionBlurPxRatio = 1;
        }
        if (forcedPan) {
          effectivePan = forcedPan;
        }
        effectiveZoom *= pixelRatio;
        effectivePan.x *= pixelRatio;
        effectivePan.y *= pixelRatio;
        var eles = r2.getCachedZSortedEles();
        function mbclear(context2, x5, y6, w4, h3) {
          var gco = context2.globalCompositeOperation;
          context2.globalCompositeOperation = "destination-out";
          r2.colorFillStyle(context2, 255, 255, 255, r2.motionBlurTransparency);
          context2.fillRect(x5, y6, w4, h3);
          context2.globalCompositeOperation = gco;
        }
        __name(mbclear, "mbclear");
        function setContextTransform2(context2, clear25) {
          var ePan, eZoom, w4, h3;
          if (!r2.clearingMotionBlur && (context2 === data6.bufferContexts[r2.MOTIONBLUR_BUFFER_NODE] || context2 === data6.bufferContexts[r2.MOTIONBLUR_BUFFER_DRAG])) {
            ePan = {
              x: pan2.x * mbPxRatio,
              y: pan2.y * mbPxRatio
            };
            eZoom = zoom2 * mbPxRatio;
            w4 = r2.canvasWidth * mbPxRatio;
            h3 = r2.canvasHeight * mbPxRatio;
          } else {
            ePan = effectivePan;
            eZoom = effectiveZoom;
            w4 = r2.canvasWidth;
            h3 = r2.canvasHeight;
          }
          context2.setTransform(1, 0, 0, 1, 0, 0);
          if (clear25 === "motionBlur") {
            mbclear(context2, 0, 0, w4, h3);
          } else if (!forcedContext && (clear25 === void 0 || clear25)) {
            context2.clearRect(0, 0, w4, h3);
          }
          if (!drawAllLayers) {
            context2.translate(ePan.x, ePan.y);
            context2.scale(eZoom, eZoom);
          }
          if (forcedPan) {
            context2.translate(forcedPan.x, forcedPan.y);
          }
          if (forcedZoom) {
            context2.scale(forcedZoom, forcedZoom);
          }
        }
        __name(setContextTransform2, "setContextTransform");
        if (!textureDraw) {
          r2.textureDrawLastFrame = false;
        }
        if (textureDraw) {
          r2.textureDrawLastFrame = true;
          if (!r2.textureCache) {
            r2.textureCache = {};
            r2.textureCache.bb = cy.mutableElements().boundingBox();
            r2.textureCache.texture = r2.data.bufferCanvases[r2.TEXTURE_BUFFER];
            var cxt = r2.data.bufferContexts[r2.TEXTURE_BUFFER];
            cxt.setTransform(1, 0, 0, 1, 0, 0);
            cxt.clearRect(0, 0, r2.canvasWidth * r2.textureMult, r2.canvasHeight * r2.textureMult);
            r2.render({
              forcedContext: cxt,
              drawOnlyNodeLayer: true,
              forcedPxRatio: pixelRatio * r2.textureMult
            });
            var vp = r2.textureCache.viewport = {
              zoom: cy.zoom(),
              pan: cy.pan(),
              width: r2.canvasWidth,
              height: r2.canvasHeight
            };
            vp.mpan = {
              x: (0 - vp.pan.x) / vp.zoom,
              y: (0 - vp.pan.y) / vp.zoom
            };
          }
          needDraw[r2.DRAG] = false;
          needDraw[r2.NODE] = false;
          var context = data6.contexts[r2.NODE];
          var texture = r2.textureCache.texture;
          var vp = r2.textureCache.viewport;
          context.setTransform(1, 0, 0, 1, 0, 0);
          if (motionBlur) {
            mbclear(context, 0, 0, vp.width, vp.height);
          } else {
            context.clearRect(0, 0, vp.width, vp.height);
          }
          var outsideBgColor = style3.core("outside-texture-bg-color").value;
          var outsideBgOpacity = style3.core("outside-texture-bg-opacity").value;
          r2.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity);
          context.fillRect(0, 0, vp.width, vp.height);
          var zoom2 = cy.zoom();
          setContextTransform2(context, false);
          context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);
          context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);
        } else if (r2.textureOnViewport && !forcedContext) {
          r2.textureCache = null;
        }
        var extent2 = cy.extent();
        var vpManip = r2.pinching || r2.hoverData.dragging || r2.swipePanning || r2.data.wheelZooming || r2.hoverData.draggingEles || r2.cy.animated();
        var hideEdges = r2.hideEdgesOnViewport && vpManip;
        var needMbClear = [];
        needMbClear[r2.NODE] = !needDraw[r2.NODE] && motionBlur && !r2.clearedForMotionBlur[r2.NODE] || r2.clearingMotionBlur;
        if (needMbClear[r2.NODE]) {
          r2.clearedForMotionBlur[r2.NODE] = true;
        }
        needMbClear[r2.DRAG] = !needDraw[r2.DRAG] && motionBlur && !r2.clearedForMotionBlur[r2.DRAG] || r2.clearingMotionBlur;
        if (needMbClear[r2.DRAG]) {
          r2.clearedForMotionBlur[r2.DRAG] = true;
        }
        if (needDraw[r2.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r2.NODE]) {
          var useBuffer = motionBlur && !needMbClear[r2.NODE] && mbPxRatio !== 1;
          var context = forcedContext || (useBuffer ? r2.data.bufferContexts[r2.MOTIONBLUR_BUFFER_NODE] : data6.contexts[r2.NODE]);
          var clear24 = motionBlur && !useBuffer ? "motionBlur" : void 0;
          setContextTransform2(context, clear24);
          if (hideEdges) {
            r2.drawCachedNodes(context, eles.nondrag, pixelRatio, extent2);
          } else {
            r2.drawLayeredElements(context, eles.nondrag, pixelRatio, extent2);
          }
          if (r2.debug) {
            r2.drawDebugPoints(context, eles.nondrag);
          }
          if (!drawAllLayers && !motionBlur) {
            needDraw[r2.NODE] = false;
          }
        }
        if (!drawOnlyNodeLayer && (needDraw[r2.DRAG] || drawAllLayers || needMbClear[r2.DRAG])) {
          var useBuffer = motionBlur && !needMbClear[r2.DRAG] && mbPxRatio !== 1;
          var context = forcedContext || (useBuffer ? r2.data.bufferContexts[r2.MOTIONBLUR_BUFFER_DRAG] : data6.contexts[r2.DRAG]);
          setContextTransform2(context, motionBlur && !useBuffer ? "motionBlur" : void 0);
          if (hideEdges) {
            r2.drawCachedNodes(context, eles.drag, pixelRatio, extent2);
          } else {
            r2.drawCachedElements(context, eles.drag, pixelRatio, extent2);
          }
          if (r2.debug) {
            r2.drawDebugPoints(context, eles.drag);
          }
          if (!drawAllLayers && !motionBlur) {
            needDraw[r2.DRAG] = false;
          }
        }
        this.drawSelectionRectangle(options2, setContextTransform2);
        if (motionBlur && mbPxRatio !== 1) {
          var cxtNode = data6.contexts[r2.NODE];
          var txtNode = r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_NODE];
          var cxtDrag = data6.contexts[r2.DRAG];
          var txtDrag = r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_DRAG];
          var drawMotionBlur = /* @__PURE__ */ __name(function drawMotionBlur2(cxt2, txt, needClear) {
            cxt2.setTransform(1, 0, 0, 1, 0, 0);
            if (needClear || !motionBlurFadeEffect) {
              cxt2.clearRect(0, 0, r2.canvasWidth, r2.canvasHeight);
            } else {
              mbclear(cxt2, 0, 0, r2.canvasWidth, r2.canvasHeight);
            }
            var pxr = mbPxRatio;
            cxt2.drawImage(
              txt,
              // img
              0,
              0,
              // sx, sy
              r2.canvasWidth * pxr,
              r2.canvasHeight * pxr,
              // sw, sh
              0,
              0,
              // x, y
              r2.canvasWidth,
              r2.canvasHeight
              // w, h
            );
          }, "drawMotionBlur");
          if (needDraw[r2.NODE] || needMbClear[r2.NODE]) {
            drawMotionBlur(cxtNode, txtNode, needMbClear[r2.NODE]);
            needDraw[r2.NODE] = false;
          }
          if (needDraw[r2.DRAG] || needMbClear[r2.DRAG]) {
            drawMotionBlur(cxtDrag, txtDrag, needMbClear[r2.DRAG]);
            needDraw[r2.DRAG] = false;
          }
        }
        r2.prevViewport = vp;
        if (r2.clearingMotionBlur) {
          r2.clearingMotionBlur = false;
          r2.motionBlurCleared = true;
          r2.motionBlur = true;
        }
        if (motionBlur) {
          r2.motionBlurTimeout = setTimeout(function() {
            r2.motionBlurTimeout = null;
            r2.clearedForMotionBlur[r2.NODE] = false;
            r2.clearedForMotionBlur[r2.DRAG] = false;
            r2.motionBlur = false;
            r2.clearingMotionBlur = !textureDraw;
            r2.mbFrames = 0;
            needDraw[r2.NODE] = true;
            needDraw[r2.DRAG] = true;
            r2.redraw();
          }, motionBlurDelay);
        }
        if (!forcedContext) {
          cy.emit("render");
        }
      };
      CRp$5.drawSelectionRectangle = function(options2, setContextTransform2) {
        var r2 = this;
        var cy = r2.cy;
        var data6 = r2.data;
        var style3 = cy.style();
        var drawOnlyNodeLayer = options2.drawOnlyNodeLayer;
        var drawAllLayers = options2.drawAllLayers;
        var needDraw = data6.canvasNeedsRedraw;
        var forcedContext = options2.forcedContext;
        if (r2.showFps || !drawOnlyNodeLayer && needDraw[r2.SELECT_BOX] && !drawAllLayers) {
          var context = forcedContext || data6.contexts[r2.SELECT_BOX];
          setContextTransform2(context);
          if (r2.selection[4] == 1 && (r2.hoverData.selecting || r2.touchData.selecting)) {
            var zoom2 = r2.cy.zoom();
            var borderWidth = style3.core("selection-box-border-width").value / zoom2;
            context.lineWidth = borderWidth;
            context.fillStyle = "rgba(" + style3.core("selection-box-color").value[0] + "," + style3.core("selection-box-color").value[1] + "," + style3.core("selection-box-color").value[2] + "," + style3.core("selection-box-opacity").value + ")";
            context.fillRect(r2.selection[0], r2.selection[1], r2.selection[2] - r2.selection[0], r2.selection[3] - r2.selection[1]);
            if (borderWidth > 0) {
              context.strokeStyle = "rgba(" + style3.core("selection-box-border-color").value[0] + "," + style3.core("selection-box-border-color").value[1] + "," + style3.core("selection-box-border-color").value[2] + "," + style3.core("selection-box-opacity").value + ")";
              context.strokeRect(r2.selection[0], r2.selection[1], r2.selection[2] - r2.selection[0], r2.selection[3] - r2.selection[1]);
            }
          }
          if (data6.bgActivePosistion && !r2.hoverData.selecting) {
            var zoom2 = r2.cy.zoom();
            var pos = data6.bgActivePosistion;
            context.fillStyle = "rgba(" + style3.core("active-bg-color").value[0] + "," + style3.core("active-bg-color").value[1] + "," + style3.core("active-bg-color").value[2] + "," + style3.core("active-bg-opacity").value + ")";
            context.beginPath();
            context.arc(pos.x, pos.y, style3.core("active-bg-size").pfValue / zoom2, 0, 2 * Math.PI);
            context.fill();
          }
          var timeToRender = r2.lastRedrawTime;
          if (r2.showFps && timeToRender) {
            timeToRender = Math.round(timeToRender);
            var fps = Math.round(1e3 / timeToRender);
            var text4 = "1 frame = " + timeToRender + " ms = " + fps + " fps";
            context.setTransform(1, 0, 0, 1, 0, 0);
            context.fillStyle = "rgba(255, 0, 0, 0.75)";
            context.strokeStyle = "rgba(255, 0, 0, 0.75)";
            context.font = "30px Arial";
            if (!fpsHeight) {
              var dims = context.measureText(text4);
              fpsHeight = dims.actualBoundingBoxAscent;
            }
            context.fillText(text4, 0, fpsHeight);
            var maxFps = 60;
            context.strokeRect(0, fpsHeight + 10, 250, 20);
            context.fillRect(0, fpsHeight + 10, 250 * Math.min(fps / maxFps, 1), 20);
          }
          if (!drawAllLayers) {
            needDraw[r2.SELECT_BOX] = false;
          }
        }
      };
      __name(compileShader, "compileShader");
      __name(createProgram, "createProgram");
      __name(createTextureCanvas, "createTextureCanvas");
      __name(getEffectivePanZoom, "getEffectivePanZoom");
      __name(getEffectiveZoom, "getEffectiveZoom");
      __name(modelToRenderedPosition2, "modelToRenderedPosition");
      __name(isSimpleShape, "isSimpleShape");
      __name(arrayEqual, "arrayEqual");
      __name(toWebGLColor, "toWebGLColor");
      __name(indexToVec4, "indexToVec4");
      __name(vec4ToIndex, "vec4ToIndex");
      __name(createTexture, "createTexture");
      __name(getTypeInfo, "getTypeInfo");
      __name(createTypedArray, "createTypedArray");
      __name(createTypedArrayView, "createTypedArrayView");
      __name(createBufferStaticDraw, "createBufferStaticDraw");
      __name(createBufferDynamicDraw, "createBufferDynamicDraw");
      __name(create3x3MatrixBufferDynamicDraw, "create3x3MatrixBufferDynamicDraw");
      __name(createPickingFrameBuffer, "createPickingFrameBuffer");
      ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array;
      if (!Math.hypot) Math.hypot = function() {
        var y6 = 0, i2 = arguments.length;
        while (i2--) {
          y6 += arguments[i2] * arguments[i2];
        }
        return Math.sqrt(y6);
      };
      __name(create3, "create");
      __name(identity6, "identity");
      __name(multiply, "multiply");
      __name(translate, "translate");
      __name(rotate, "rotate");
      __name(scale, "scale");
      __name(projection, "projection");
      Atlas = /* @__PURE__ */ (function() {
        function Atlas2(r2, texSize, texRows, createTextureCanvas2) {
          _classCallCheck(this, Atlas2);
          this.debugID = Math.floor(Math.random() * 1e4);
          this.r = r2;
          this.texSize = texSize;
          this.texRows = texRows;
          this.texHeight = Math.floor(texSize / texRows);
          this.enableWrapping = true;
          this.locked = false;
          this.texture = null;
          this.needsBuffer = true;
          this.freePointer = {
            x: 0,
            row: 0
          };
          this.keyToLocation = /* @__PURE__ */ new Map();
          this.canvas = createTextureCanvas2(r2, texSize, texSize);
          this.scratch = createTextureCanvas2(r2, texSize, this.texHeight, "scratch");
        }
        __name(Atlas2, "Atlas");
        return _createClass(Atlas2, [{
          key: "lock",
          value: /* @__PURE__ */ __name(function lock() {
            this.locked = true;
          }, "lock")
        }, {
          key: "getKeys",
          value: /* @__PURE__ */ __name(function getKeys() {
            return new Set(this.keyToLocation.keys());
          }, "getKeys")
        }, {
          key: "getScale",
          value: /* @__PURE__ */ __name(function getScale(_ref) {
            var w4 = _ref.w, h3 = _ref.h;
            var texHeight = this.texHeight, maxTexWidth = this.texSize;
            var scale3 = texHeight / h3;
            var texW = w4 * scale3;
            var texH = h3 * scale3;
            if (texW > maxTexWidth) {
              scale3 = maxTexWidth / w4;
              texW = w4 * scale3;
              texH = h3 * scale3;
            }
            return {
              scale: scale3,
              texW,
              texH
            };
          }, "getScale")
        }, {
          key: "draw",
          value: /* @__PURE__ */ __name(function draw34(key, bb, doDrawing) {
            var _this = this;
            if (this.locked) throw new Error("can't draw, atlas is locked");
            var texSize = this.texSize, texRows = this.texRows, texHeight = this.texHeight;
            var _this$getScale = this.getScale(bb), scale3 = _this$getScale.scale, texW = _this$getScale.texW, texH = _this$getScale.texH;
            var drawAt = /* @__PURE__ */ __name(function drawAt2(location2, canvas) {
              if (doDrawing && canvas) {
                var context = canvas.context;
                var x5 = location2.x, row = location2.row;
                var xOffset = x5;
                var yOffset = texHeight * row;
                context.save();
                context.translate(xOffset, yOffset);
                context.scale(scale3, scale3);
                doDrawing(context, bb);
                context.restore();
              }
            }, "drawAt");
            var locations = [null, null];
            var drawNormal = /* @__PURE__ */ __name(function drawNormal2() {
              drawAt(_this.freePointer, _this.canvas);
              locations[0] = {
                x: _this.freePointer.x,
                y: _this.freePointer.row * texHeight,
                w: texW,
                h: texH
              };
              locations[1] = {
                // create a second location with a width of 0, for convenience
                x: _this.freePointer.x + texW,
                y: _this.freePointer.row * texHeight,
                w: 0,
                h: texH
              };
              _this.freePointer.x += texW;
              if (_this.freePointer.x == texSize) {
                _this.freePointer.x = 0;
                _this.freePointer.row++;
              }
            }, "drawNormal");
            var drawWrapped = /* @__PURE__ */ __name(function drawWrapped2() {
              var scratch = _this.scratch, canvas = _this.canvas;
              scratch.clear();
              drawAt({
                x: 0,
                row: 0
              }, scratch);
              var firstTexW = texSize - _this.freePointer.x;
              var secondTexW = texW - firstTexW;
              var h3 = texHeight;
              {
                var dx = _this.freePointer.x;
                var dy = _this.freePointer.row * texHeight;
                var w4 = firstTexW;
                canvas.context.drawImage(scratch, 0, 0, w4, h3, dx, dy, w4, h3);
                locations[0] = {
                  x: dx,
                  y: dy,
                  w: w4,
                  h: texH
                };
              }
              {
                var sx = firstTexW;
                var _dy = (_this.freePointer.row + 1) * texHeight;
                var _w = secondTexW;
                if (canvas) {
                  canvas.context.drawImage(scratch, sx, 0, _w, h3, 0, _dy, _w, h3);
                }
                locations[1] = {
                  x: 0,
                  y: _dy,
                  w: _w,
                  h: texH
                };
              }
              _this.freePointer.x = secondTexW;
              _this.freePointer.row++;
            }, "drawWrapped");
            var moveToStartOfNextRow = /* @__PURE__ */ __name(function moveToStartOfNextRow2() {
              _this.freePointer.x = 0;
              _this.freePointer.row++;
            }, "moveToStartOfNextRow");
            if (this.freePointer.x + texW <= texSize) {
              drawNormal();
            } else if (this.freePointer.row >= texRows - 1) {
              return false;
            } else if (this.freePointer.x === texSize) {
              moveToStartOfNextRow();
              drawNormal();
            } else if (this.enableWrapping) {
              drawWrapped();
            } else {
              moveToStartOfNextRow();
              drawNormal();
            }
            this.keyToLocation.set(key, locations);
            this.needsBuffer = true;
            return locations;
          }, "draw")
        }, {
          key: "getOffsets",
          value: /* @__PURE__ */ __name(function getOffsets(key) {
            return this.keyToLocation.get(key);
          }, "getOffsets")
        }, {
          key: "isEmpty",
          value: /* @__PURE__ */ __name(function isEmpty4() {
            return this.freePointer.x === 0 && this.freePointer.row === 0;
          }, "isEmpty")
        }, {
          key: "canFit",
          value: /* @__PURE__ */ __name(function canFit(bb) {
            if (this.locked) return false;
            var texSize = this.texSize, texRows = this.texRows;
            var _this$getScale2 = this.getScale(bb), texW = _this$getScale2.texW;
            if (this.freePointer.x + texW > texSize) {
              return this.freePointer.row < texRows - 1;
            }
            return true;
          }, "canFit")
          // called on every frame
        }, {
          key: "bufferIfNeeded",
          value: /* @__PURE__ */ __name(function bufferIfNeeded(gl) {
            if (!this.texture) {
              this.texture = createTexture(gl, this.debugID);
            }
            if (this.needsBuffer) {
              this.texture.buffer(this.canvas);
              this.needsBuffer = false;
              if (this.locked) {
                this.canvas = null;
                this.scratch = null;
              }
            }
          }, "bufferIfNeeded")
        }, {
          key: "dispose",
          value: /* @__PURE__ */ __name(function dispose() {
            if (this.texture) {
              this.texture.deleteTexture();
              this.texture = null;
            }
            this.canvas = null;
            this.scratch = null;
            this.locked = true;
          }, "dispose")
        }]);
      })();
      AtlasCollection = /* @__PURE__ */ (function() {
        function AtlasCollection2(r2, texSize, texRows, createTextureCanvas2) {
          _classCallCheck(this, AtlasCollection2);
          this.r = r2;
          this.texSize = texSize;
          this.texRows = texRows;
          this.createTextureCanvas = createTextureCanvas2;
          this.atlases = [];
          this.styleKeyToAtlas = /* @__PURE__ */ new Map();
          this.markedKeys = /* @__PURE__ */ new Set();
        }
        __name(AtlasCollection2, "AtlasCollection");
        return _createClass(AtlasCollection2, [{
          key: "getKeys",
          value: /* @__PURE__ */ __name(function getKeys() {
            return new Set(this.styleKeyToAtlas.keys());
          }, "getKeys")
        }, {
          key: "_createAtlas",
          value: /* @__PURE__ */ __name(function _createAtlas() {
            var r2 = this.r, texSize = this.texSize, texRows = this.texRows, createTextureCanvas2 = this.createTextureCanvas;
            return new Atlas(r2, texSize, texRows, createTextureCanvas2);
          }, "_createAtlas")
        }, {
          key: "_getScratchCanvas",
          value: /* @__PURE__ */ __name(function _getScratchCanvas() {
            if (!this.scratch) {
              var r2 = this.r, texSize = this.texSize, texRows = this.texRows, createTextureCanvas2 = this.createTextureCanvas;
              var texHeight = Math.floor(texSize / texRows);
              this.scratch = createTextureCanvas2(r2, texSize, texHeight, "scratch");
            }
            return this.scratch;
          }, "_getScratchCanvas")
        }, {
          key: "draw",
          value: /* @__PURE__ */ __name(function draw34(key, bb, doDrawing) {
            var atlas = this.styleKeyToAtlas.get(key);
            if (!atlas) {
              atlas = this.atlases[this.atlases.length - 1];
              if (!atlas || !atlas.canFit(bb)) {
                if (atlas) atlas.lock();
                atlas = this._createAtlas();
                this.atlases.push(atlas);
              }
              atlas.draw(key, bb, doDrawing);
              this.styleKeyToAtlas.set(key, atlas);
            }
            return atlas;
          }, "draw")
        }, {
          key: "getAtlas",
          value: /* @__PURE__ */ __name(function getAtlas(key) {
            return this.styleKeyToAtlas.get(key);
          }, "getAtlas")
        }, {
          key: "hasAtlas",
          value: /* @__PURE__ */ __name(function hasAtlas(key) {
            return this.styleKeyToAtlas.has(key);
          }, "hasAtlas")
        }, {
          key: "markKeyForGC",
          value: /* @__PURE__ */ __name(function markKeyForGC(key) {
            this.markedKeys.add(key);
          }, "markKeyForGC")
        }, {
          key: "gc",
          value: /* @__PURE__ */ __name(function gc2() {
            var _this2 = this;
            var markedKeys = this.markedKeys;
            if (markedKeys.size === 0) {
              console.log("nothing to garbage collect");
              return;
            }
            var newAtlases = [];
            var newStyleKeyToAtlas = /* @__PURE__ */ new Map();
            var newAtlas = null;
            var _iterator = _createForOfIteratorHelper(this.atlases), _step;
            try {
              var _loop = /* @__PURE__ */ __name(function _loop2() {
                var atlas = _step.value;
                var keys3 = atlas.getKeys();
                var keysToCollect = intersection2(markedKeys, keys3);
                if (keysToCollect.size === 0) {
                  newAtlases.push(atlas);
                  keys3.forEach(function(k2) {
                    return newStyleKeyToAtlas.set(k2, atlas);
                  });
                  return 1;
                }
                if (!newAtlas) {
                  newAtlas = _this2._createAtlas();
                  newAtlases.push(newAtlas);
                }
                var _iterator2 = _createForOfIteratorHelper(keys3), _step2;
                try {
                  for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
                    var key = _step2.value;
                    if (!keysToCollect.has(key)) {
                      var _atlas$getOffsets = atlas.getOffsets(key), _atlas$getOffsets2 = _slicedToArray(_atlas$getOffsets, 2), s1 = _atlas$getOffsets2[0], s2 = _atlas$getOffsets2[1];
                      if (!newAtlas.canFit({
                        w: s1.w + s2.w,
                        h: s1.h
                      })) {
                        newAtlas.lock();
                        newAtlas = _this2._createAtlas();
                        newAtlases.push(newAtlas);
                      }
                      if (atlas.canvas) {
                        _this2._copyTextureToNewAtlas(key, atlas, newAtlas);
                        newStyleKeyToAtlas.set(key, newAtlas);
                      }
                    }
                  }
                } catch (err) {
                  _iterator2.e(err);
                } finally {
                  _iterator2.f();
                }
                atlas.dispose();
              }, "_loop");
              for (_iterator.s(); !(_step = _iterator.n()).done; ) {
                if (_loop()) continue;
              }
            } catch (err) {
              _iterator.e(err);
            } finally {
              _iterator.f();
            }
            this.atlases = newAtlases;
            this.styleKeyToAtlas = newStyleKeyToAtlas;
            this.markedKeys = /* @__PURE__ */ new Set();
          }, "gc")
        }, {
          key: "_copyTextureToNewAtlas",
          value: /* @__PURE__ */ __name(function _copyTextureToNewAtlas(key, oldAtlas, newAtlas) {
            var _oldAtlas$getOffsets = oldAtlas.getOffsets(key), _oldAtlas$getOffsets2 = _slicedToArray(_oldAtlas$getOffsets, 2), s1 = _oldAtlas$getOffsets2[0], s2 = _oldAtlas$getOffsets2[1];
            if (s2.w === 0) {
              newAtlas.draw(key, s1, function(context) {
                context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h);
              });
            } else {
              var scratch = this._getScratchCanvas();
              scratch.clear();
              scratch.context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h);
              scratch.context.drawImage(oldAtlas.canvas, s2.x, s2.y, s2.w, s2.h, s1.w, 0, s2.w, s2.h);
              var w4 = s1.w + s2.w;
              var h3 = s1.h;
              newAtlas.draw(key, {
                w: w4,
                h: h3
              }, function(context) {
                context.drawImage(
                  scratch,
                  0,
                  0,
                  w4,
                  h3,
                  0,
                  0,
                  w4,
                  h3
                  // the destination context has already been translated to the correct position
                );
              });
            }
          }, "_copyTextureToNewAtlas")
        }, {
          key: "getCounts",
          value: /* @__PURE__ */ __name(function getCounts() {
            return {
              keyCount: this.styleKeyToAtlas.size,
              atlasCount: new Set(this.styleKeyToAtlas.values()).size
            };
          }, "getCounts")
        }]);
      })();
      __name(intersection2, "intersection");
      AtlasManager = /* @__PURE__ */ (function() {
        function AtlasManager2(r2, globalOptions) {
          _classCallCheck(this, AtlasManager2);
          this.r = r2;
          this.globalOptions = globalOptions;
          this.atlasSize = globalOptions.webglTexSize;
          this.maxAtlasesPerBatch = globalOptions.webglTexPerBatch;
          this.renderTypes = /* @__PURE__ */ new Map();
          this.collections = /* @__PURE__ */ new Map();
          this.typeAndIdToKey = /* @__PURE__ */ new Map();
        }
        __name(AtlasManager2, "AtlasManager");
        return _createClass(AtlasManager2, [{
          key: "getAtlasSize",
          value: /* @__PURE__ */ __name(function getAtlasSize() {
            return this.atlasSize;
          }, "getAtlasSize")
        }, {
          key: "addAtlasCollection",
          value: /* @__PURE__ */ __name(function addAtlasCollection(collectionName, atlasCollectionOptions) {
            var _this$globalOptions = this.globalOptions, webglTexSize = _this$globalOptions.webglTexSize, createTextureCanvas2 = _this$globalOptions.createTextureCanvas;
            var texRows = atlasCollectionOptions.texRows;
            var cachedCreateTextureCanvas = this._cacheScratchCanvas(createTextureCanvas2);
            var atlasCollection = new AtlasCollection(this.r, webglTexSize, texRows, cachedCreateTextureCanvas);
            this.collections.set(collectionName, atlasCollection);
          }, "addAtlasCollection")
        }, {
          key: "addRenderType",
          value: /* @__PURE__ */ __name(function addRenderType(type3, renderTypeOptions) {
            var collection4 = renderTypeOptions.collection;
            if (!this.collections.has(collection4)) throw new Error("invalid atlas collection name '".concat(collection4, "'"));
            var atlasCollection = this.collections.get(collection4);
            var opts = extend4({
              type: type3,
              atlasCollection
            }, renderTypeOptions);
            this.renderTypes.set(type3, opts);
          }, "addRenderType")
        }, {
          key: "getRenderTypeOpts",
          value: /* @__PURE__ */ __name(function getRenderTypeOpts(type3) {
            return this.renderTypes.get(type3);
          }, "getRenderTypeOpts")
        }, {
          key: "getAtlasCollection",
          value: /* @__PURE__ */ __name(function getAtlasCollection(name) {
            return this.collections.get(name);
          }, "getAtlasCollection")
        }, {
          key: "_cacheScratchCanvas",
          value: /* @__PURE__ */ __name(function _cacheScratchCanvas(createTextureCanvas2) {
            var prevW = -1;
            var prevH = -1;
            var scratchCanvas = null;
            return function(r2, w4, h3, scratch) {
              if (scratch) {
                if (!scratchCanvas || w4 != prevW || h3 != prevH) {
                  prevW = w4;
                  prevH = h3;
                  scratchCanvas = createTextureCanvas2(r2, w4, h3);
                }
                return scratchCanvas;
              } else {
                return createTextureCanvas2(r2, w4, h3);
              }
            };
          }, "_cacheScratchCanvas")
        }, {
          key: "_key",
          value: /* @__PURE__ */ __name(function _key(renderType, id41) {
            return "".concat(renderType, "-").concat(id41);
          }, "_key")
          /** Marks textues associated with the element for garbage collection. */
        }, {
          key: "invalidate",
          value: /* @__PURE__ */ __name(function invalidate(eles) {
            var _this3 = this;
            var _ref2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _ref2$forceRedraw = _ref2.forceRedraw, forceRedraw = _ref2$forceRedraw === void 0 ? false : _ref2$forceRedraw, _ref2$filterEle = _ref2.filterEle, filterEle = _ref2$filterEle === void 0 ? function() {
              return true;
            } : _ref2$filterEle, _ref2$filterType = _ref2.filterType, filterType = _ref2$filterType === void 0 ? function() {
              return true;
            } : _ref2$filterType;
            var needGC = false;
            var runGCNow = false;
            var _iterator3 = _createForOfIteratorHelper(eles), _step3;
            try {
              for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) {
                var ele = _step3.value;
                if (filterEle(ele)) {
                  var _iterator4 = _createForOfIteratorHelper(this.renderTypes.values()), _step4;
                  try {
                    var _loop2 = /* @__PURE__ */ __name(function _loop22() {
                      var opts = _step4.value;
                      var renderType = opts.type;
                      if (filterType(renderType)) {
                        var atlasCollection = _this3.collections.get(opts.collection);
                        var key = opts.getKey(ele);
                        var keyArray = Array.isArray(key) ? key : [key];
                        if (forceRedraw) {
                          keyArray.forEach(function(key2) {
                            return atlasCollection.markKeyForGC(key2);
                          });
                          runGCNow = true;
                        } else {
                          var id41 = opts.getID ? opts.getID(ele) : ele.id();
                          var mapKey = _this3._key(renderType, id41);
                          var oldKeyArray = _this3.typeAndIdToKey.get(mapKey);
                          if (oldKeyArray !== void 0 && !arrayEqual(keyArray, oldKeyArray)) {
                            needGC = true;
                            _this3.typeAndIdToKey["delete"](mapKey);
                            oldKeyArray.forEach(function(oldKey) {
                              return atlasCollection.markKeyForGC(oldKey);
                            });
                          }
                        }
                      }
                    }, "_loop2");
                    for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) {
                      _loop2();
                    }
                  } catch (err) {
                    _iterator4.e(err);
                  } finally {
                    _iterator4.f();
                  }
                }
              }
            } catch (err) {
              _iterator3.e(err);
            } finally {
              _iterator3.f();
            }
            if (runGCNow) {
              this.gc();
              needGC = false;
            }
            return needGC;
          }, "invalidate")
          /** Garbage collect */
        }, {
          key: "gc",
          value: /* @__PURE__ */ __name(function gc2() {
            var _iterator5 = _createForOfIteratorHelper(this.collections.values()), _step5;
            try {
              for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) {
                var collection4 = _step5.value;
                collection4.gc();
              }
            } catch (err) {
              _iterator5.e(err);
            } finally {
              _iterator5.f();
            }
          }, "gc")
        }, {
          key: "getOrCreateAtlas",
          value: /* @__PURE__ */ __name(function getOrCreateAtlas(ele, type3, bb, styleKey) {
            var opts = this.renderTypes.get(type3);
            var atlasCollection = this.collections.get(opts.collection);
            var drawn = false;
            var atlas = atlasCollection.draw(styleKey, bb, function(context) {
              if (opts.drawClipped) {
                context.save();
                context.beginPath();
                context.rect(0, 0, bb.w, bb.h);
                context.clip();
                opts.drawElement(context, ele, bb, true, true);
                context.restore();
              } else {
                opts.drawElement(context, ele, bb, true, true);
              }
              drawn = true;
            });
            if (drawn) {
              var id41 = opts.getID ? opts.getID(ele) : ele.id();
              var mapKey = this._key(type3, id41);
              if (this.typeAndIdToKey.has(mapKey)) {
                this.typeAndIdToKey.get(mapKey).push(styleKey);
              } else {
                this.typeAndIdToKey.set(mapKey, [styleKey]);
              }
            }
            return atlas;
          }, "getOrCreateAtlas")
        }, {
          key: "getAtlasInfo",
          value: /* @__PURE__ */ __name(function getAtlasInfo(ele, type3) {
            var _this4 = this;
            var opts = this.renderTypes.get(type3);
            var key = opts.getKey(ele);
            var keyArray = Array.isArray(key) ? key : [key];
            return keyArray.map(function(styleKey) {
              var bb = opts.getBoundingBox(ele, styleKey);
              var atlas = _this4.getOrCreateAtlas(ele, type3, bb, styleKey);
              var _atlas$getOffsets3 = atlas.getOffsets(styleKey), _atlas$getOffsets4 = _slicedToArray(_atlas$getOffsets3, 2), tex1 = _atlas$getOffsets4[0], tex2 = _atlas$getOffsets4[1];
              return {
                atlas,
                tex: tex1,
                tex1,
                tex2,
                bb
              };
            });
          }, "getAtlasInfo")
        }, {
          key: "getDebugInfo",
          value: /* @__PURE__ */ __name(function getDebugInfo() {
            var debugInfo = [];
            var _iterator6 = _createForOfIteratorHelper(this.collections), _step6;
            try {
              for (_iterator6.s(); !(_step6 = _iterator6.n()).done; ) {
                var _step6$value = _slicedToArray(_step6.value, 2), name = _step6$value[0], collection4 = _step6$value[1];
                var _collection$getCounts = collection4.getCounts(), keyCount = _collection$getCounts.keyCount, atlasCount = _collection$getCounts.atlasCount;
                debugInfo.push({
                  type: name,
                  keyCount,
                  atlasCount
                });
              }
            } catch (err) {
              _iterator6.e(err);
            } finally {
              _iterator6.f();
            }
            return debugInfo;
          }, "getDebugInfo")
        }]);
      })();
      AtlasBatchManager = /* @__PURE__ */ (function() {
        function AtlasBatchManager2(globalOptions) {
          _classCallCheck(this, AtlasBatchManager2);
          this.globalOptions = globalOptions;
          this.atlasSize = globalOptions.webglTexSize;
          this.maxAtlasesPerBatch = globalOptions.webglTexPerBatch;
          this.batchAtlases = [];
        }
        __name(AtlasBatchManager2, "AtlasBatchManager");
        return _createClass(AtlasBatchManager2, [{
          key: "getMaxAtlasesPerBatch",
          value: /* @__PURE__ */ __name(function getMaxAtlasesPerBatch() {
            return this.maxAtlasesPerBatch;
          }, "getMaxAtlasesPerBatch")
        }, {
          key: "getAtlasSize",
          value: /* @__PURE__ */ __name(function getAtlasSize() {
            return this.atlasSize;
          }, "getAtlasSize")
        }, {
          key: "getIndexArray",
          value: /* @__PURE__ */ __name(function getIndexArray() {
            return Array.from({
              length: this.maxAtlasesPerBatch
            }, function(v3, i2) {
              return i2;
            });
          }, "getIndexArray")
        }, {
          key: "startBatch",
          value: /* @__PURE__ */ __name(function startBatch2() {
            this.batchAtlases = [];
          }, "startBatch")
        }, {
          key: "getAtlasCount",
          value: /* @__PURE__ */ __name(function getAtlasCount() {
            return this.batchAtlases.length;
          }, "getAtlasCount")
        }, {
          key: "getAtlases",
          value: /* @__PURE__ */ __name(function getAtlases() {
            return this.batchAtlases;
          }, "getAtlases")
        }, {
          key: "canAddToCurrentBatch",
          value: /* @__PURE__ */ __name(function canAddToCurrentBatch(atlas) {
            if (this.batchAtlases.length === this.maxAtlasesPerBatch) {
              return this.batchAtlases.includes(atlas);
            }
            return true;
          }, "canAddToCurrentBatch")
        }, {
          key: "getAtlasIndexForBatch",
          value: /* @__PURE__ */ __name(function getAtlasIndexForBatch(atlas) {
            var atlasID = this.batchAtlases.indexOf(atlas);
            if (atlasID < 0) {
              if (this.batchAtlases.length === this.maxAtlasesPerBatch) {
                throw new Error("cannot add more atlases to batch");
              }
              this.batchAtlases.push(atlas);
              atlasID = this.batchAtlases.length - 1;
            }
            return atlasID;
          }, "getAtlasIndexForBatch")
        }]);
      })();
      circleSD = "\n  float circleSD(vec2 p, float r) {\n    return distance(vec2(0), p) - r; // signed distance\n  }\n";
      rectangleSD = "\n  float rectangleSD(vec2 p, vec2 b) {\n    vec2 d = abs(p)-b;\n    return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0);\n  }\n";
      roundRectangleSD = "\n  float roundRectangleSD(vec2 p, vec2 b, vec4 cr) {\n    cr.xy = (p.x > 0.0) ? cr.xy : cr.zw;\n    cr.x  = (p.y > 0.0) ? cr.x  : cr.y;\n    vec2 q = abs(p) - b + cr.x;\n    return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x;\n  }\n";
      ellipseSD = "\n  float ellipseSD(vec2 p, vec2 ab) {\n    p = abs( p ); // symmetry\n\n    // find root with Newton solver\n    vec2 q = ab*(p-ab);\n    float w = (q.x<q.y)? 1.570796327 : 0.0;\n    for( int i=0; i<5; i++ ) {\n      vec2 cs = vec2(cos(w),sin(w));\n      vec2 u = ab*vec2( cs.x,cs.y);\n      vec2 v = ab*vec2(-cs.y,cs.x);\n      w = w + dot(p-u,v)/(dot(p-u,u)+dot(v,v));\n    }\n    \n    // compute final point and distance\n    float d = length(p-ab*vec2(cos(w),sin(w)));\n    \n    // return signed distance\n    return (dot(p/ab,p/ab)>1.0) ? d : -d;\n  }\n";
      RENDER_TARGET = {
        SCREEN: {
          name: "screen",
          screen: true
        },
        PICKING: {
          name: "picking",
          picking: true
        }
      };
      TEX_PICKING_MODE = {
        // render the texture just like in RENDER_TARGET.SCREEN mode
        IGNORE: 1,
        // don't render the texture at all
        USE_BB: 2
        // render the bounding box as an opaque rectangle
      };
      TEXTURE = 0;
      EDGE_STRAIGHT = 1;
      EDGE_CURVE_SEGMENT = 2;
      EDGE_ARROW = 3;
      RECTANGLE = 4;
      ROUND_RECTANGLE = 5;
      BOTTOM_ROUND_RECTANGLE = 6;
      ELLIPSE = 7;
      ElementDrawingWebGL = /* @__PURE__ */ (function() {
        function ElementDrawingWebGL2(r2, gl, opts) {
          _classCallCheck(this, ElementDrawingWebGL2);
          this.r = r2;
          this.gl = gl;
          this.maxInstances = opts.webglBatchSize;
          this.atlasSize = opts.webglTexSize;
          this.bgColor = opts.bgColor;
          this.debug = opts.webglDebug;
          this.batchDebugInfo = [];
          opts.enableWrapping = true;
          opts.createTextureCanvas = createTextureCanvas;
          this.atlasManager = new AtlasManager(r2, opts);
          this.batchManager = new AtlasBatchManager(opts);
          this.simpleShapeOptions = /* @__PURE__ */ new Map();
          this.program = this._createShaderProgram(RENDER_TARGET.SCREEN);
          this.pickingProgram = this._createShaderProgram(RENDER_TARGET.PICKING);
          this.vao = this._createVAO();
        }
        __name(ElementDrawingWebGL2, "ElementDrawingWebGL");
        return _createClass(ElementDrawingWebGL2, [{
          key: "addAtlasCollection",
          value: /* @__PURE__ */ __name(function addAtlasCollection(collectionName, opts) {
            this.atlasManager.addAtlasCollection(collectionName, opts);
          }, "addAtlasCollection")
          /**
           * @typedef { Object } TextureRenderTypeOpts
           * @property { string } collection - name of atlas collection to render textures to
           * @property { function } getKey - returns the "style key" for an element, may be a single value or an array for multi-line lables
           * @property { function } drawElement - uses a canvas renderer to draw the element to the texture atlas
           * @property { boolean  } drawClipped - if true the context will be clipped to the bounding box before drawElement() is called, may affect performance
           * @property { function } getBoundingBox - returns the bounding box for an element
           * @property { function } getRotation
           * @property { function } getRotationPoint
           * @property { function } getRotationOffset
           * @property { function } isVisible - an extra check for visibility in addition to ele.visible()
           * @property { function } getTexPickingMode - returns a value from the TEX_PICKING_MODE enum
           */
          /**
           * @param { string } typeName
           * @param { TextureRenderTypeOpts } opts
           */
        }, {
          key: "addTextureAtlasRenderType",
          value: /* @__PURE__ */ __name(function addTextureAtlasRenderType(typeName, opts) {
            this.atlasManager.addRenderType(typeName, opts);
          }, "addTextureAtlasRenderType")
          /**
           * @typedef { Object } SimpleShapeRenderTypeOpts
           * @property { function } getBoundingBox - returns the bounding box for an element
           * @property { function } isVisible - this is an extra check for visibility in addition to ele.visible()
           * @property { function } isSimple - check if element is a simple shape, or if it needs to fall back to texture rendering
           * @property { ShapeVisualProperties } shapeProps
           */
          /**
           * @typedef { Object } ShapeVisualProperties
           * @property { string } shape
           * @property { string } color
           * @property { string } opacity
           * @property { string } padding
           * @property { string } radius
           * @property { boolean } border
          */
          /**
           * @param { string } typeName
           * @param { SimpleShapeRenderTypeOpts } opts
           */
        }, {
          key: "addSimpleShapeRenderType",
          value: /* @__PURE__ */ __name(function addSimpleShapeRenderType(typeName, opts) {
            this.simpleShapeOptions.set(typeName, opts);
          }, "addSimpleShapeRenderType")
          /**
           * Inform the atlasManager when element style keys may have changed.
           * The atlasManager can then mark unused textures for "garbage collection".
           */
        }, {
          key: "invalidate",
          value: /* @__PURE__ */ __name(function invalidate(eles) {
            var _ref = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, type3 = _ref.type;
            var atlasManager = this.atlasManager;
            if (type3) {
              return atlasManager.invalidate(eles, {
                filterType: /* @__PURE__ */ __name(function filterType(t4) {
                  return t4 === type3;
                }, "filterType"),
                forceRedraw: true
              });
            } else {
              return atlasManager.invalidate(eles);
            }
          }, "invalidate")
          /**
           * Run texture garbage collection.
           */
        }, {
          key: "gc",
          value: /* @__PURE__ */ __name(function gc2() {
            this.atlasManager.gc();
          }, "gc")
        }, {
          key: "_createShaderProgram",
          value: /* @__PURE__ */ __name(function _createShaderProgram(renderTarget) {
            var gl = this.gl;
            var vertexShaderSource = "#version 300 es\n      precision highp float;\n\n      uniform mat3 uPanZoomMatrix;\n      uniform int  uAtlasSize;\n      \n      // instanced\n      in vec2 aPosition; // a vertex from the unit square\n      \n      in mat3 aTransform; // used to transform verticies, eg into a bounding box\n      in int aVertType; // the type of thing we are rendering\n\n      // the z-index that is output when using picking mode\n      in vec4 aIndex;\n      \n      // For textures\n      in int aAtlasId; // which shader unit/atlas to use\n      in vec4 aTex; // x/y/w/h of texture in atlas\n\n      // for edges\n      in vec4 aPointAPointB;\n      in vec4 aPointCPointD;\n      in vec2 aLineWidth; // also used for node border width\n\n      // simple shapes\n      in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left]\n      in vec4 aColor; // also used for edges\n      in vec4 aBorderColor; // aLineWidth is used for border width\n\n      // output values passed to the fragment shader\n      out vec2 vTexCoord;\n      out vec4 vColor;\n      out vec2 vPosition;\n      // flat values are not interpolated\n      flat out int vAtlasId; \n      flat out int vVertType;\n      flat out vec2 vTopRight;\n      flat out vec2 vBotLeft;\n      flat out vec4 vCornerRadius;\n      flat out vec4 vBorderColor;\n      flat out vec2 vBorderWidth;\n      flat out vec4 vIndex;\n      \n      void main(void) {\n        int vid = gl_VertexID;\n        vec2 position = aPosition; // TODO make this a vec3, simplifies some code below\n\n        if(aVertType == ".concat(TEXTURE, ") {\n          float texX = aTex.x; // texture coordinates\n          float texY = aTex.y;\n          float texW = aTex.z;\n          float texH = aTex.w;\n\n          if(vid == 1 || vid == 2 || vid == 4) {\n            texX += texW;\n          }\n          if(vid == 2 || vid == 4 || vid == 5) {\n            texY += texH;\n          }\n\n          float d = float(uAtlasSize);\n          vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1\n\n          gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n        }\n        else if(aVertType == ").concat(RECTANGLE, " || aVertType == ").concat(ELLIPSE, " \n             || aVertType == ").concat(ROUND_RECTANGLE, " || aVertType == ").concat(BOTTOM_ROUND_RECTANGLE, ") { // simple shapes\n\n          // the bounding box is needed by the fragment shader\n          vBotLeft  = (aTransform * vec3(0, 0, 1)).xy; // flat\n          vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat\n          vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated\n\n          // calculations are done in the fragment shader, just pass these along\n          vColor = aColor;\n          vCornerRadius = aCornerRadius;\n          vBorderColor = aBorderColor;\n          vBorderWidth = aLineWidth;\n\n          gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n        }\n        else if(aVertType == ").concat(EDGE_STRAIGHT, ") {\n          vec2 source = aPointAPointB.xy;\n          vec2 target = aPointAPointB.zw;\n\n          // adjust the geometry so that the line is centered on the edge\n          position.y = position.y - 0.5;\n\n          // stretch the unit square into a long skinny rectangle\n          vec2 xBasis = target - source;\n          vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n          vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y;\n\n          gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);\n          vColor = aColor;\n        } \n        else if(aVertType == ").concat(EDGE_CURVE_SEGMENT, ") {\n          vec2 pointA = aPointAPointB.xy;\n          vec2 pointB = aPointAPointB.zw;\n          vec2 pointC = aPointCPointD.xy;\n          vec2 pointD = aPointCPointD.zw;\n\n          // adjust the geometry so that the line is centered on the edge\n          position.y = position.y - 0.5;\n\n          vec2 p0, p1, p2, pos;\n          if(position.x == 0.0) { // The left side of the unit square\n            p0 = pointA;\n            p1 = pointB;\n            p2 = pointC;\n            pos = position;\n          } else { // The right side of the unit square, use same approach but flip the geometry upside down\n            p0 = pointD;\n            p1 = pointC;\n            p2 = pointB;\n            pos = vec2(0.0, -position.y);\n          }\n\n          vec2 p01 = p1 - p0;\n          vec2 p12 = p2 - p1;\n          vec2 p21 = p1 - p2;\n\n          // Find the normal vector.\n          vec2 tangent = normalize(normalize(p12) + normalize(p01));\n          vec2 normal = vec2(-tangent.y, tangent.x);\n\n          // Find the vector perpendicular to p0 -> p1.\n          vec2 p01Norm = normalize(vec2(-p01.y, p01.x));\n\n          // Determine the bend direction.\n          float sigma = sign(dot(p01 + p21, normal));\n          float width = aLineWidth[0];\n\n          if(sign(pos.y) == -sigma) {\n            // This is an intersecting vertex. Adjust the position so that there's no overlap.\n            vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);\n            gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n          } else {\n            // This is a non-intersecting vertex. Treat it like a mitre join.\n            vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);\n            gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n          }\n\n          vColor = aColor;\n        } \n        else if(aVertType == ").concat(EDGE_ARROW, " && vid < 3) {\n          // massage the first triangle into an edge arrow\n          if(vid == 0)\n            position = vec2(-0.15, -0.3);\n          if(vid == 1)\n            position = vec2(  0.0,  0.0);\n          if(vid == 2)\n            position = vec2( 0.15, -0.3);\n\n          gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n          vColor = aColor;\n        }\n        else {\n          gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space\n        }\n\n        vAtlasId = aAtlasId;\n        vVertType = aVertType;\n        vIndex = aIndex;\n      }\n    ");
            var idxs = this.batchManager.getIndexArray();
            var fragmentShaderSource = "#version 300 es\n      precision highp float;\n\n      // declare texture unit for each texture atlas in the batch\n      ".concat(idxs.map(function(i3) {
              return "uniform sampler2D uTexture".concat(i3, ";");
            }).join("\n	"), "\n\n      uniform vec4 uBGColor;\n      uniform float uZoom;\n\n      in vec2 vTexCoord;\n      in vec4 vColor;\n      in vec2 vPosition; // model coordinates\n\n      flat in int vAtlasId;\n      flat in vec4 vIndex;\n      flat in int vVertType;\n      flat in vec2 vTopRight;\n      flat in vec2 vBotLeft;\n      flat in vec4 vCornerRadius;\n      flat in vec4 vBorderColor;\n      flat in vec2 vBorderWidth;\n\n      out vec4 outColor;\n\n      ").concat(circleSD, "\n      ").concat(rectangleSD, "\n      ").concat(roundRectangleSD, "\n      ").concat(ellipseSD, "\n\n      vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha\n        return vec4( \n          top.rgb + (bot.rgb * (1.0 - top.a)),\n          top.a   + (bot.a   * (1.0 - top.a)) \n        );\n      }\n\n      vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance\n        // scale to the zoom level so that borders don't look blurry when zoomed in\n        // note 1.5 is an aribitrary value chosen because it looks good\n        return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); \n      }\n\n      void main(void) {\n        if(vVertType == ").concat(TEXTURE, ") {\n          // look up the texel from the texture unit\n          ").concat(idxs.map(function(i3) {
              return "if(vAtlasId == ".concat(i3, ") outColor = texture(uTexture").concat(i3, ", vTexCoord);");
            }).join("\n	else "), "\n        } \n        else if(vVertType == ").concat(EDGE_ARROW, ") {\n          // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out';\n          outColor = blend(vColor, uBGColor);\n          outColor.a = 1.0; // make opaque, masks out line under arrow\n        }\n        else if(vVertType == ").concat(RECTANGLE, " && vBorderWidth == vec2(0.0)) { // simple rectangle with no border\n          outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done\n        }\n        else if(vVertType == ").concat(RECTANGLE, " || vVertType == ").concat(ELLIPSE, " \n          || vVertType == ").concat(ROUND_RECTANGLE, " || vVertType == ").concat(BOTTOM_ROUND_RECTANGLE, ") { // use SDF\n\n          float outerBorder = vBorderWidth[0];\n          float innerBorder = vBorderWidth[1];\n          float borderPadding = outerBorder * 2.0;\n          float w = vTopRight.x - vBotLeft.x - borderPadding;\n          float h = vTopRight.y - vBotLeft.y - borderPadding;\n          vec2 b = vec2(w/2.0, h/2.0); // half width, half height\n          vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center\n\n          float d; // signed distance\n          if(vVertType == ").concat(RECTANGLE, ") {\n            d = rectangleSD(p, b);\n          } else if(vVertType == ").concat(ELLIPSE, " && w == h) {\n            d = circleSD(p, b.x); // faster than ellipse\n          } else if(vVertType == ").concat(ELLIPSE, ") {\n            d = ellipseSD(p, b);\n          } else {\n            d = roundRectangleSD(p, b, vCornerRadius.wzyx);\n          }\n\n          // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling\n          // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box\n          if(d > 0.0) {\n            if(d > outerBorder) {\n              discard;\n            } else {\n              outColor = distInterp(vBorderColor, vec4(0), d - outerBorder);\n            }\n          } else {\n            if(d > innerBorder) {\n              vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor;\n              vec4 innerBorderColor = blend(vBorderColor, vColor);\n              outColor = distInterp(innerBorderColor, outerColor, d);\n            } \n            else {\n              vec4 outerColor;\n              if(innerBorder == 0.0 && outerBorder == 0.0) {\n                outerColor = vec4(0);\n              } else if(innerBorder == 0.0) {\n                outerColor = vBorderColor;\n              } else {\n                outerColor = blend(vBorderColor, vColor);\n              }\n              outColor = distInterp(vColor, outerColor, d - innerBorder);\n            }\n          }\n        }\n        else {\n          outColor = vColor;\n        }\n\n        ").concat(renderTarget.picking ? "if(outColor.a == 0.0) discard;\n             else outColor = vIndex;" : "", "\n      }\n    ");
            var program = createProgram(gl, vertexShaderSource, fragmentShaderSource);
            program.aPosition = gl.getAttribLocation(program, "aPosition");
            program.aIndex = gl.getAttribLocation(program, "aIndex");
            program.aVertType = gl.getAttribLocation(program, "aVertType");
            program.aTransform = gl.getAttribLocation(program, "aTransform");
            program.aAtlasId = gl.getAttribLocation(program, "aAtlasId");
            program.aTex = gl.getAttribLocation(program, "aTex");
            program.aPointAPointB = gl.getAttribLocation(program, "aPointAPointB");
            program.aPointCPointD = gl.getAttribLocation(program, "aPointCPointD");
            program.aLineWidth = gl.getAttribLocation(program, "aLineWidth");
            program.aColor = gl.getAttribLocation(program, "aColor");
            program.aCornerRadius = gl.getAttribLocation(program, "aCornerRadius");
            program.aBorderColor = gl.getAttribLocation(program, "aBorderColor");
            program.uPanZoomMatrix = gl.getUniformLocation(program, "uPanZoomMatrix");
            program.uAtlasSize = gl.getUniformLocation(program, "uAtlasSize");
            program.uBGColor = gl.getUniformLocation(program, "uBGColor");
            program.uZoom = gl.getUniformLocation(program, "uZoom");
            program.uTextures = [];
            for (var i2 = 0; i2 < this.batchManager.getMaxAtlasesPerBatch(); i2++) {
              program.uTextures.push(gl.getUniformLocation(program, "uTexture".concat(i2)));
            }
            return program;
          }, "_createShaderProgram")
        }, {
          key: "_createVAO",
          value: /* @__PURE__ */ __name(function _createVAO() {
            var unitSquare = [0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1];
            this.vertexCount = unitSquare.length / 2;
            var n2 = this.maxInstances;
            var gl = this.gl, program = this.program;
            var vao = gl.createVertexArray();
            gl.bindVertexArray(vao);
            createBufferStaticDraw(gl, "vec2", program.aPosition, unitSquare);
            this.transformBuffer = create3x3MatrixBufferDynamicDraw(gl, n2, program.aTransform);
            this.indexBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aIndex);
            this.vertTypeBuffer = createBufferDynamicDraw(gl, n2, "int", program.aVertType);
            this.atlasIdBuffer = createBufferDynamicDraw(gl, n2, "int", program.aAtlasId);
            this.texBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aTex);
            this.pointAPointBBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aPointAPointB);
            this.pointCPointDBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aPointCPointD);
            this.lineWidthBuffer = createBufferDynamicDraw(gl, n2, "vec2", program.aLineWidth);
            this.colorBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aColor);
            this.cornerRadiusBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aCornerRadius);
            this.borderColorBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aBorderColor);
            gl.bindVertexArray(null);
            return vao;
          }, "_createVAO")
        }, {
          key: "buffers",
          get: /* @__PURE__ */ __name(function get6() {
            var _this = this;
            if (!this._buffers) {
              this._buffers = Object.keys(this).filter(function(k2) {
                return endsWith(k2, "Buffer");
              }).map(function(k2) {
                return _this[k2];
              });
            }
            return this._buffers;
          }, "get")
        }, {
          key: "startFrame",
          value: /* @__PURE__ */ __name(function startFrame(panZoomMatrix) {
            var renderTarget = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : RENDER_TARGET.SCREEN;
            this.panZoomMatrix = panZoomMatrix;
            this.renderTarget = renderTarget;
            this.batchDebugInfo = [];
            this.wrappedCount = 0;
            this.simpleCount = 0;
            this.startBatch();
          }, "startFrame")
        }, {
          key: "startBatch",
          value: /* @__PURE__ */ __name(function startBatch2() {
            this.instanceCount = 0;
            this.batchManager.startBatch();
          }, "startBatch")
        }, {
          key: "endFrame",
          value: /* @__PURE__ */ __name(function endFrame() {
            this.endBatch();
          }, "endFrame")
        }, {
          key: "_isVisible",
          value: /* @__PURE__ */ __name(function _isVisible(ele, opts) {
            if (ele.visible()) {
              if (opts && opts.isVisible) {
                return opts.isVisible(ele);
              }
              return true;
            }
            return false;
          }, "_isVisible")
          /**
           * Draws a texture using the texture atlas.
           */
        }, {
          key: "drawTexture",
          value: /* @__PURE__ */ __name(function drawTexture(ele, eleIndex, type3) {
            var atlasManager = this.atlasManager, batchManager = this.batchManager;
            var opts = atlasManager.getRenderTypeOpts(type3);
            if (!this._isVisible(ele, opts)) {
              return;
            }
            if (ele.isEdge() && !this._isValidEdge(ele)) {
              return;
            }
            if (this.renderTarget.picking && opts.getTexPickingMode) {
              var mode = opts.getTexPickingMode(ele);
              if (mode === TEX_PICKING_MODE.IGNORE) {
                return;
              } else if (mode == TEX_PICKING_MODE.USE_BB) {
                this.drawPickingRectangle(ele, eleIndex, type3);
                return;
              }
            }
            var atlasInfoArray = atlasManager.getAtlasInfo(ele, type3);
            var _iterator = _createForOfIteratorHelper(atlasInfoArray), _step;
            try {
              for (_iterator.s(); !(_step = _iterator.n()).done; ) {
                var atlasInfo = _step.value;
                var atlas = atlasInfo.atlas, tex1 = atlasInfo.tex1, tex2 = atlasInfo.tex2;
                if (!batchManager.canAddToCurrentBatch(atlas)) {
                  this.endBatch();
                }
                var atlasIndex = batchManager.getAtlasIndexForBatch(atlas);
                for (var _i = 0, _arr = [[tex1, true], [tex2, false]]; _i < _arr.length; _i++) {
                  var _arr$_i = _slicedToArray(_arr[_i], 2), tex = _arr$_i[0], first3 = _arr$_i[1];
                  if (tex.w != 0) {
                    var instance2 = this.instanceCount;
                    this.vertTypeBuffer.getView(instance2)[0] = TEXTURE;
                    var indexView = this.indexBuffer.getView(instance2);
                    indexToVec4(eleIndex, indexView);
                    var atlasIdView = this.atlasIdBuffer.getView(instance2);
                    atlasIdView[0] = atlasIndex;
                    var texView = this.texBuffer.getView(instance2);
                    texView[0] = tex.x;
                    texView[1] = tex.y;
                    texView[2] = tex.w;
                    texView[3] = tex.h;
                    var matrixView = this.transformBuffer.getMatrixView(instance2);
                    this.setTransformMatrix(ele, matrixView, opts, atlasInfo, first3);
                    this.instanceCount++;
                    if (!first3) this.wrappedCount++;
                    if (this.instanceCount >= this.maxInstances) {
                      this.endBatch();
                    }
                  }
                }
              }
            } catch (err) {
              _iterator.e(err);
            } finally {
              _iterator.f();
            }
          }, "drawTexture")
          /**
           * matrix is expected to be a 9 element array
           * this function follows same pattern as CRp.drawCachedElementPortion(...)
           */
        }, {
          key: "setTransformMatrix",
          value: /* @__PURE__ */ __name(function setTransformMatrix(ele, matrix, opts, atlasInfo) {
            var first3 = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true;
            var padding = 0;
            if (opts.shapeProps && opts.shapeProps.padding) {
              padding = ele.pstyle(opts.shapeProps.padding).pfValue;
            }
            if (atlasInfo) {
              var bb = atlasInfo.bb, tex1 = atlasInfo.tex1, tex2 = atlasInfo.tex2;
              var ratio = tex1.w / (tex1.w + tex2.w);
              if (!first3) {
                ratio = 1 - ratio;
              }
              var adjBB = this._getAdjustedBB(bb, padding, first3, ratio);
              this._applyTransformMatrix(matrix, adjBB, opts, ele);
            } else {
              var _bb = opts.getBoundingBox(ele);
              var _adjBB = this._getAdjustedBB(_bb, padding, true, 1);
              this._applyTransformMatrix(matrix, _adjBB, opts, ele);
            }
          }, "setTransformMatrix")
        }, {
          key: "_applyTransformMatrix",
          value: /* @__PURE__ */ __name(function _applyTransformMatrix(matrix, adjBB, opts, ele) {
            var x5, y6;
            identity6(matrix);
            var theta = opts.getRotation ? opts.getRotation(ele) : 0;
            if (theta !== 0) {
              var _opts$getRotationPoin = opts.getRotationPoint(ele), sx = _opts$getRotationPoin.x, sy = _opts$getRotationPoin.y;
              translate(matrix, matrix, [sx, sy]);
              rotate(matrix, matrix, theta);
              var offset = opts.getRotationOffset(ele);
              x5 = offset.x + (adjBB.xOffset || 0);
              y6 = offset.y + (adjBB.yOffset || 0);
            } else {
              x5 = adjBB.x1;
              y6 = adjBB.y1;
            }
            translate(matrix, matrix, [x5, y6]);
            scale(matrix, matrix, [adjBB.w, adjBB.h]);
          }, "_applyTransformMatrix")
          /**
           * Adjusts a node or label BB to accomodate padding and split for wrapped textures.
           * @param bb - the original bounding box
           * @param padding - the padding to add to the bounding box
           * @param first - whether this is the first part of a wrapped texture
           * @param ratio - the ratio of the texture width of part of the text to the entire texture
           */
        }, {
          key: "_getAdjustedBB",
          value: /* @__PURE__ */ __name(function _getAdjustedBB(bb, padding, first3, ratio) {
            var x1 = bb.x1, y1 = bb.y1, w4 = bb.w, h3 = bb.h, yOffset = bb.yOffset;
            if (padding) {
              x1 -= padding;
              y1 -= padding;
              w4 += 2 * padding;
              h3 += 2 * padding;
            }
            var xOffset = 0;
            var adjW = w4 * ratio;
            if (first3 && ratio < 1) {
              w4 = adjW;
            } else if (!first3 && ratio < 1) {
              xOffset = w4 - adjW;
              x1 += xOffset;
              w4 = adjW;
            }
            return {
              x1,
              y1,
              w: w4,
              h: h3,
              xOffset,
              yOffset
            };
          }, "_getAdjustedBB")
          /**
           * Draw a solid opaque rectangle matching the element's Bounding Box.
           * Used by the PICKING mode to make the entire BB of a label clickable.
           */
        }, {
          key: "drawPickingRectangle",
          value: /* @__PURE__ */ __name(function drawPickingRectangle(ele, eleIndex, type3) {
            var opts = this.atlasManager.getRenderTypeOpts(type3);
            var instance2 = this.instanceCount;
            this.vertTypeBuffer.getView(instance2)[0] = RECTANGLE;
            var indexView = this.indexBuffer.getView(instance2);
            indexToVec4(eleIndex, indexView);
            var colorView = this.colorBuffer.getView(instance2);
            toWebGLColor([0, 0, 0], 1, colorView);
            var matrixView = this.transformBuffer.getMatrixView(instance2);
            this.setTransformMatrix(ele, matrixView, opts);
            this.simpleCount++;
            this.instanceCount++;
            if (this.instanceCount >= this.maxInstances) {
              this.endBatch();
            }
          }, "drawPickingRectangle")
          /**
           * Draw a node using either a texture or a "simple shape".
           */
        }, {
          key: "drawNode",
          value: /* @__PURE__ */ __name(function drawNode2(node2, eleIndex, type3) {
            var opts = this.simpleShapeOptions.get(type3);
            if (!this._isVisible(node2, opts)) {
              return;
            }
            var props = opts.shapeProps;
            var vertType = this._getVertTypeForShape(node2, props.shape);
            if (vertType === void 0 || opts.isSimple && !opts.isSimple(node2, this.renderTarget)) {
              this.drawTexture(node2, eleIndex, type3);
              return;
            }
            var instance2 = this.instanceCount;
            this.vertTypeBuffer.getView(instance2)[0] = vertType;
            if (vertType === ROUND_RECTANGLE || vertType === BOTTOM_ROUND_RECTANGLE) {
              var bb = opts.getBoundingBox(node2);
              var radius2 = this._getCornerRadius(node2, props.radius, bb);
              var radiusView = this.cornerRadiusBuffer.getView(instance2);
              radiusView[0] = radius2;
              radiusView[1] = radius2;
              radiusView[2] = radius2;
              radiusView[3] = radius2;
              if (vertType === BOTTOM_ROUND_RECTANGLE) {
                radiusView[0] = 0;
                radiusView[2] = 0;
              }
            }
            var indexView = this.indexBuffer.getView(instance2);
            indexToVec4(eleIndex, indexView);
            var opacity = this.renderTarget.picking ? 1 : type3 === "node-body" ? node2.effectiveOpacity() : 1;
            var bgOpacity = this.renderTarget.picking ? 1 : node2.pstyle(props.opacity).value * opacity;
            var color2 = node2.pstyle(props.color).value;
            var colorView = this.colorBuffer.getView(instance2);
            toWebGLColor(color2, bgOpacity, colorView);
            var lineWidthView = this.lineWidthBuffer.getView(instance2);
            lineWidthView[0] = 0;
            lineWidthView[1] = 0;
            if (props.border) {
              var borderWidth = node2.pstyle("border-width").value;
              if (borderWidth > 0) {
                var borderColor = node2.pstyle("border-color").value;
                var borderOpacity = opacity * node2.pstyle("border-opacity").value;
                var borderColorView = this.borderColorBuffer.getView(instance2);
                toWebGLColor(borderColor, borderOpacity, borderColorView);
                var borderPos = node2.pstyle("border-position").value;
                if (borderPos === "inside") {
                  lineWidthView[0] = 0;
                  lineWidthView[1] = -borderWidth;
                } else if (borderPos === "outside") {
                  lineWidthView[0] = borderWidth;
                  lineWidthView[1] = 0;
                } else {
                  var halfWidth = borderWidth / 2;
                  lineWidthView[0] = halfWidth;
                  lineWidthView[1] = -halfWidth;
                }
              }
            }
            var matrixView = this.transformBuffer.getMatrixView(instance2);
            this.setTransformMatrix(node2, matrixView, opts);
            this.simpleCount++;
            this.instanceCount++;
            if (this.instanceCount >= this.maxInstances) {
              this.endBatch();
            }
          }, "drawNode")
        }, {
          key: "_getVertTypeForShape",
          value: /* @__PURE__ */ __name(function _getVertTypeForShape(node2, shapeProp) {
            var shape = node2.pstyle(shapeProp).value;
            switch (shape) {
              case "rectangle":
                return RECTANGLE;
              case "ellipse":
                return ELLIPSE;
              case "roundrectangle":
              case "round-rectangle":
                return ROUND_RECTANGLE;
              case "bottom-round-rectangle":
                return BOTTOM_ROUND_RECTANGLE;
              default:
                return void 0;
            }
          }, "_getVertTypeForShape")
        }, {
          key: "_getCornerRadius",
          value: /* @__PURE__ */ __name(function _getCornerRadius(node2, radiusProp, _ref2) {
            var w4 = _ref2.w, h3 = _ref2.h;
            if (node2.pstyle(radiusProp).value === "auto") {
              return getRoundRectangleRadius(w4, h3);
            } else {
              var radius2 = node2.pstyle(radiusProp).pfValue;
              var halfWidth = w4 / 2;
              var halfHeight = h3 / 2;
              return Math.min(radius2, halfHeight, halfWidth);
            }
          }, "_getCornerRadius")
          /**
           * Only supports drawing triangles at the moment.
           */
        }, {
          key: "drawEdgeArrow",
          value: /* @__PURE__ */ __name(function drawEdgeArrow(edge, eleIndex, prefix) {
            if (!edge.visible()) {
              return;
            }
            var rs = edge._private.rscratch;
            var x5, y6, angle2;
            if (prefix === "source") {
              x5 = rs.arrowStartX;
              y6 = rs.arrowStartY;
              angle2 = rs.srcArrowAngle;
            } else {
              x5 = rs.arrowEndX;
              y6 = rs.arrowEndY;
              angle2 = rs.tgtArrowAngle;
            }
            if (isNaN(x5) || x5 == null || isNaN(y6) || y6 == null || isNaN(angle2) || angle2 == null) {
              return;
            }
            var arrowShape = edge.pstyle(prefix + "-arrow-shape").value;
            if (arrowShape === "none") {
              return;
            }
            var color2 = edge.pstyle(prefix + "-arrow-color").value;
            var baseOpacity = edge.pstyle("opacity").value;
            var lineOpacity = edge.pstyle("line-opacity").value;
            var opacity = baseOpacity * lineOpacity;
            var lineWidth = edge.pstyle("width").pfValue;
            var scale$1 = edge.pstyle("arrow-scale").value;
            var size4 = this.r.getArrowWidth(lineWidth, scale$1);
            var instance2 = this.instanceCount;
            var transform8 = this.transformBuffer.getMatrixView(instance2);
            identity6(transform8);
            translate(transform8, transform8, [x5, y6]);
            scale(transform8, transform8, [size4, size4]);
            rotate(transform8, transform8, angle2);
            this.vertTypeBuffer.getView(instance2)[0] = EDGE_ARROW;
            var indexView = this.indexBuffer.getView(instance2);
            indexToVec4(eleIndex, indexView);
            var colorView = this.colorBuffer.getView(instance2);
            toWebGLColor(color2, opacity, colorView);
            this.instanceCount++;
            if (this.instanceCount >= this.maxInstances) {
              this.endBatch();
            }
          }, "drawEdgeArrow")
          /**
           * Draw straight-line or bezier curve edges.
           */
        }, {
          key: "drawEdgeLine",
          value: /* @__PURE__ */ __name(function drawEdgeLine(edge, eleIndex) {
            if (!edge.visible()) {
              return;
            }
            var points = this._getEdgePoints(edge);
            if (!points) {
              return;
            }
            var baseOpacity = edge.pstyle("opacity").value;
            var lineOpacity = edge.pstyle("line-opacity").value;
            var width3 = edge.pstyle("width").pfValue;
            var color2 = edge.pstyle("line-color").value;
            var opacity = baseOpacity * lineOpacity;
            if (points.length / 2 + this.instanceCount > this.maxInstances) {
              this.endBatch();
            }
            if (points.length == 4) {
              var instance2 = this.instanceCount;
              this.vertTypeBuffer.getView(instance2)[0] = EDGE_STRAIGHT;
              var indexView = this.indexBuffer.getView(instance2);
              indexToVec4(eleIndex, indexView);
              var colorView = this.colorBuffer.getView(instance2);
              toWebGLColor(color2, opacity, colorView);
              var lineWidthBuffer = this.lineWidthBuffer.getView(instance2);
              lineWidthBuffer[0] = width3;
              var sourceTargetView = this.pointAPointBBuffer.getView(instance2);
              sourceTargetView[0] = points[0];
              sourceTargetView[1] = points[1];
              sourceTargetView[2] = points[2];
              sourceTargetView[3] = points[3];
              this.instanceCount++;
              if (this.instanceCount >= this.maxInstances) {
                this.endBatch();
              }
            } else {
              for (var i2 = 0; i2 < points.length - 2; i2 += 2) {
                var _instance = this.instanceCount;
                this.vertTypeBuffer.getView(_instance)[0] = EDGE_CURVE_SEGMENT;
                var _indexView = this.indexBuffer.getView(_instance);
                indexToVec4(eleIndex, _indexView);
                var _colorView = this.colorBuffer.getView(_instance);
                toWebGLColor(color2, opacity, _colorView);
                var _lineWidthBuffer = this.lineWidthBuffer.getView(_instance);
                _lineWidthBuffer[0] = width3;
                var pAx = points[i2 - 2], pAy = points[i2 - 1];
                var pBx = points[i2], pBy = points[i2 + 1];
                var pCx = points[i2 + 2], pCy = points[i2 + 3];
                var pDx = points[i2 + 4], pDy = points[i2 + 5];
                if (i2 == 0) {
                  pAx = 2 * pBx - pCx + 1e-3;
                  pAy = 2 * pBy - pCy + 1e-3;
                }
                if (i2 == points.length - 4) {
                  pDx = 2 * pCx - pBx + 1e-3;
                  pDy = 2 * pCy - pBy + 1e-3;
                }
                var pointABView = this.pointAPointBBuffer.getView(_instance);
                pointABView[0] = pAx;
                pointABView[1] = pAy;
                pointABView[2] = pBx;
                pointABView[3] = pBy;
                var pointCDView = this.pointCPointDBuffer.getView(_instance);
                pointCDView[0] = pCx;
                pointCDView[1] = pCy;
                pointCDView[2] = pDx;
                pointCDView[3] = pDy;
                this.instanceCount++;
                if (this.instanceCount >= this.maxInstances) {
                  this.endBatch();
                }
              }
            }
          }, "drawEdgeLine")
        }, {
          key: "_isValidEdge",
          value: /* @__PURE__ */ __name(function _isValidEdge(edge) {
            var rs = edge._private.rscratch;
            if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) {
              return false;
            }
            return true;
          }, "_isValidEdge")
        }, {
          key: "_getEdgePoints",
          value: /* @__PURE__ */ __name(function _getEdgePoints(edge) {
            var rs = edge._private.rscratch;
            if (!this._isValidEdge(edge)) {
              return;
            }
            var controlPoints4 = rs.allpts;
            if (controlPoints4.length == 4) {
              return controlPoints4;
            }
            var numSegments = this._getNumSegments(edge);
            return this._getCurveSegmentPoints(controlPoints4, numSegments);
          }, "_getEdgePoints")
        }, {
          key: "_getNumSegments",
          value: /* @__PURE__ */ __name(function _getNumSegments(edge) {
            var numSegments = 15;
            return Math.min(Math.max(numSegments, 5), this.maxInstances);
          }, "_getNumSegments")
        }, {
          key: "_getCurveSegmentPoints",
          value: /* @__PURE__ */ __name(function _getCurveSegmentPoints(controlPoints4, segments) {
            if (controlPoints4.length == 4) {
              return controlPoints4;
            }
            var curvePoints = Array((segments + 1) * 2);
            for (var i2 = 0; i2 <= segments; i2++) {
              if (i2 == 0) {
                curvePoints[0] = controlPoints4[0];
                curvePoints[1] = controlPoints4[1];
              } else if (i2 == segments) {
                curvePoints[i2 * 2] = controlPoints4[controlPoints4.length - 2];
                curvePoints[i2 * 2 + 1] = controlPoints4[controlPoints4.length - 1];
              } else {
                var t4 = i2 / segments;
                this._setCurvePoint(controlPoints4, t4, curvePoints, i2 * 2);
              }
            }
            return curvePoints;
          }, "_getCurveSegmentPoints")
        }, {
          key: "_setCurvePoint",
          value: /* @__PURE__ */ __name(function _setCurvePoint(points, t4, curvePoints, cpi) {
            if (points.length <= 2) {
              curvePoints[cpi] = points[0];
              curvePoints[cpi + 1] = points[1];
            } else {
              var newpoints = Array(points.length - 2);
              for (var i2 = 0; i2 < newpoints.length; i2 += 2) {
                var x5 = (1 - t4) * points[i2] + t4 * points[i2 + 2];
                var y6 = (1 - t4) * points[i2 + 1] + t4 * points[i2 + 3];
                newpoints[i2] = x5;
                newpoints[i2 + 1] = y6;
              }
              return this._setCurvePoint(newpoints, t4, curvePoints, cpi);
            }
          }, "_setCurvePoint")
        }, {
          key: "endBatch",
          value: /* @__PURE__ */ __name(function endBatch2() {
            var gl = this.gl, vao = this.vao, vertexCount = this.vertexCount, count2 = this.instanceCount;
            if (count2 === 0) return;
            var program = this.renderTarget.picking ? this.pickingProgram : this.program;
            gl.useProgram(program);
            gl.bindVertexArray(vao);
            var _iterator2 = _createForOfIteratorHelper(this.buffers), _step2;
            try {
              for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
                var buffer = _step2.value;
                buffer.bufferSubData(count2);
              }
            } catch (err) {
              _iterator2.e(err);
            } finally {
              _iterator2.f();
            }
            var atlases = this.batchManager.getAtlases();
            for (var i2 = 0; i2 < atlases.length; i2++) {
              atlases[i2].bufferIfNeeded(gl);
            }
            for (var _i2 = 0; _i2 < atlases.length; _i2++) {
              gl.activeTexture(gl.TEXTURE0 + _i2);
              gl.bindTexture(gl.TEXTURE_2D, atlases[_i2].texture);
              gl.uniform1i(program.uTextures[_i2], _i2);
            }
            gl.uniform1f(program.uZoom, getEffectiveZoom(this.r));
            gl.uniformMatrix3fv(program.uPanZoomMatrix, false, this.panZoomMatrix);
            gl.uniform1i(program.uAtlasSize, this.batchManager.getAtlasSize());
            var webglBgColor = toWebGLColor(this.bgColor, 1);
            gl.uniform4fv(program.uBGColor, webglBgColor);
            gl.drawArraysInstanced(gl.TRIANGLES, 0, vertexCount, count2);
            gl.bindVertexArray(null);
            gl.bindTexture(gl.TEXTURE_2D, null);
            if (this.debug) {
              this.batchDebugInfo.push({
                count: count2,
                // instance count
                atlasCount: atlases.length
              });
            }
            this.startBatch();
          }, "endBatch")
        }, {
          key: "getDebugInfo",
          value: /* @__PURE__ */ __name(function getDebugInfo() {
            var atlasInfo = this.atlasManager.getDebugInfo();
            var totalAtlases = atlasInfo.reduce(function(count2, info2) {
              return count2 + info2.atlasCount;
            }, 0);
            var batchInfo = this.batchDebugInfo;
            var totalInstances = batchInfo.reduce(function(count2, info2) {
              return count2 + info2.count;
            }, 0);
            return {
              atlasInfo,
              totalAtlases,
              wrappedCount: this.wrappedCount,
              simpleCount: this.simpleCount,
              batchCount: batchInfo.length,
              batchInfo,
              totalInstances
            };
          }, "getDebugInfo")
        }]);
      })();
      CRp$4 = {};
      CRp$4.initWebgl = function(opts, fns) {
        var r2 = this;
        var gl = r2.data.contexts[r2.WEBGL];
        opts.bgColor = getBGColor(r2);
        opts.webglTexSize = Math.min(opts.webglTexSize, gl.getParameter(gl.MAX_TEXTURE_SIZE));
        opts.webglTexRows = Math.min(opts.webglTexRows, 54);
        opts.webglTexRowsNodes = Math.min(opts.webglTexRowsNodes, 54);
        opts.webglBatchSize = Math.min(opts.webglBatchSize, 16384);
        opts.webglTexPerBatch = Math.min(opts.webglTexPerBatch, gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS));
        r2.webglDebug = opts.webglDebug;
        r2.webglDebugShowAtlases = opts.webglDebugShowAtlases;
        r2.pickingFrameBuffer = createPickingFrameBuffer(gl);
        r2.pickingFrameBuffer.needsDraw = true;
        r2.drawing = new ElementDrawingWebGL(r2, gl, opts);
        var getLabelRotation3 = /* @__PURE__ */ __name(function getLabelRotation4(prop) {
          return function(ele) {
            return r2.getTextAngle(ele, prop);
          };
        }, "getLabelRotation");
        var isLabelVisible = /* @__PURE__ */ __name(function isLabelVisible2(prop) {
          return function(ele) {
            var label = ele.pstyle(prop);
            return label && label.value;
          };
        }, "isLabelVisible");
        var isLayerVisible = /* @__PURE__ */ __name(function isLayerVisible2(prefix) {
          return function(node2) {
            return node2.pstyle("".concat(prefix, "-opacity")).value > 0;
          };
        }, "isLayerVisible");
        var getTexPickingMode = /* @__PURE__ */ __name(function getTexPickingMode2(ele) {
          var enabled = ele.pstyle("text-events").strValue === "yes";
          return enabled ? TEX_PICKING_MODE.USE_BB : TEX_PICKING_MODE.IGNORE;
        }, "getTexPickingMode");
        var getBBForSimpleShape = /* @__PURE__ */ __name(function getBBForSimpleShape2(node2) {
          var _node$position = node2.position(), x5 = _node$position.x, y6 = _node$position.y;
          var w4 = node2.outerWidth();
          var h3 = node2.outerHeight();
          return {
            w: w4,
            h: h3,
            x1: x5 - w4 / 2,
            y1: y6 - h3 / 2
          };
        }, "getBBForSimpleShape");
        r2.drawing.addAtlasCollection("node", {
          texRows: opts.webglTexRowsNodes
        });
        r2.drawing.addAtlasCollection("label", {
          texRows: opts.webglTexRows
        });
        r2.drawing.addTextureAtlasRenderType("node-body", {
          collection: "node",
          getKey: fns.getStyleKey,
          getBoundingBox: fns.getElementBox,
          drawElement: fns.drawElement
        });
        r2.drawing.addSimpleShapeRenderType("node-body", {
          getBoundingBox: getBBForSimpleShape,
          isSimple: isSimpleShape,
          shapeProps: {
            shape: "shape",
            color: "background-color",
            opacity: "background-opacity",
            radius: "corner-radius",
            border: true
          }
        });
        r2.drawing.addSimpleShapeRenderType("node-overlay", {
          getBoundingBox: getBBForSimpleShape,
          isVisible: isLayerVisible("overlay"),
          shapeProps: {
            shape: "overlay-shape",
            color: "overlay-color",
            opacity: "overlay-opacity",
            padding: "overlay-padding",
            radius: "overlay-corner-radius"
          }
        });
        r2.drawing.addSimpleShapeRenderType("node-underlay", {
          getBoundingBox: getBBForSimpleShape,
          isVisible: isLayerVisible("underlay"),
          shapeProps: {
            shape: "underlay-shape",
            color: "underlay-color",
            opacity: "underlay-opacity",
            padding: "underlay-padding",
            radius: "underlay-corner-radius"
          }
        });
        r2.drawing.addTextureAtlasRenderType("label", {
          // node label or edge mid label
          collection: "label",
          getTexPickingMode,
          getKey: getStyleKeysForLabel(fns.getLabelKey, null),
          getBoundingBox: getBoundingBoxForLabel(fns.getLabelBox, null),
          drawClipped: true,
          drawElement: fns.drawLabel,
          getRotation: getLabelRotation3(null),
          getRotationPoint: fns.getLabelRotationPoint,
          getRotationOffset: fns.getLabelRotationOffset,
          isVisible: isLabelVisible("label")
        });
        r2.drawing.addTextureAtlasRenderType("edge-source-label", {
          collection: "label",
          getTexPickingMode,
          getKey: getStyleKeysForLabel(fns.getSourceLabelKey, "source"),
          getBoundingBox: getBoundingBoxForLabel(fns.getSourceLabelBox, "source"),
          drawClipped: true,
          drawElement: fns.drawSourceLabel,
          getRotation: getLabelRotation3("source"),
          getRotationPoint: fns.getSourceLabelRotationPoint,
          getRotationOffset: fns.getSourceLabelRotationOffset,
          isVisible: isLabelVisible("source-label")
        });
        r2.drawing.addTextureAtlasRenderType("edge-target-label", {
          collection: "label",
          getTexPickingMode,
          getKey: getStyleKeysForLabel(fns.getTargetLabelKey, "target"),
          getBoundingBox: getBoundingBoxForLabel(fns.getTargetLabelBox, "target"),
          drawClipped: true,
          drawElement: fns.drawTargetLabel,
          getRotation: getLabelRotation3("target"),
          getRotationPoint: fns.getTargetLabelRotationPoint,
          getRotationOffset: fns.getTargetLabelRotationOffset,
          isVisible: isLabelVisible("target-label")
        });
        var setGCFlag = debounce(function() {
          console.log("garbage collect flag set");
          r2.data.gc = true;
        }, 1e4);
        r2.onUpdateEleCalcs(function(willDraw, eles) {
          var gcNeeded = false;
          if (eles && eles.length > 0) {
            gcNeeded |= r2.drawing.invalidate(eles);
          }
          if (gcNeeded) {
            setGCFlag();
          }
        });
        overrideCanvasRendererFunctions(r2);
      };
      __name(getBGColor, "getBGColor");
      __name(getLabelLines, "getLabelLines");
      getStyleKeysForLabel = /* @__PURE__ */ __name(function getStyleKeysForLabel2(getKey3, prefix) {
        return function(ele) {
          var key = getKey3(ele);
          var lines = getLabelLines(ele, prefix);
          if (lines.length > 1) {
            return lines.map(function(line2, index) {
              return "".concat(key, "_").concat(index);
            });
          }
          return key;
        };
      }, "getStyleKeysForLabel");
      getBoundingBoxForLabel = /* @__PURE__ */ __name(function getBoundingBoxForLabel2(getBoundingBox2, prefix) {
        return function(ele, styleKey) {
          var bb = getBoundingBox2(ele);
          if (typeof styleKey === "string") {
            var ui = styleKey.indexOf("_");
            if (ui > 0) {
              var lineIndex = Number(styleKey.substring(ui + 1));
              var lines = getLabelLines(ele, prefix);
              var h3 = bb.h / lines.length;
              var yOffset = h3 * lineIndex;
              var y1 = bb.y1 + yOffset;
              return {
                x1: bb.x1,
                w: bb.w,
                y1,
                h: h3,
                yOffset
              };
            }
          }
          return bb;
        };
      }, "getBoundingBoxForLabel");
      __name(overrideCanvasRendererFunctions, "overrideCanvasRendererFunctions");
      __name(clearWebgl, "clearWebgl");
      __name(clearCanvas, "clearCanvas");
      __name(createPanZoomMatrix, "createPanZoomMatrix");
      __name(setContextTransform, "setContextTransform");
      __name(drawSelectionRectangle, "drawSelectionRectangle");
      __name(drawAxes, "drawAxes");
      __name(drawAtlases, "drawAtlases");
      __name(getPickingIndexes, "getPickingIndexes");
      __name(findNearestElementsWebgl, "findNearestElementsWebgl");
      __name(drawEle, "drawEle");
      __name(renderWebgl, "renderWebgl");
      CRp$3 = {};
      CRp$3.drawPolygonPath = function(context, x5, y6, width3, height2, points) {
        var halfW = width3 / 2;
        var halfH = height2 / 2;
        if (context.beginPath) {
          context.beginPath();
        }
        context.moveTo(x5 + halfW * points[0], y6 + halfH * points[1]);
        for (var i2 = 1; i2 < points.length / 2; i2++) {
          context.lineTo(x5 + halfW * points[i2 * 2], y6 + halfH * points[i2 * 2 + 1]);
        }
        context.closePath();
      };
      CRp$3.drawRoundPolygonPath = function(context, x5, y6, width3, height2, points, corners) {
        corners.forEach(function(corner) {
          return drawPreparedRoundCorner(context, corner);
        });
        context.closePath();
      };
      CRp$3.drawRoundRectanglePath = function(context, x5, y6, width3, height2, radius2) {
        var halfWidth = width3 / 2;
        var halfHeight = height2 / 2;
        var cornerRadius = radius2 === "auto" ? getRoundRectangleRadius(width3, height2) : Math.min(radius2, halfHeight, halfWidth);
        if (context.beginPath) {
          context.beginPath();
        }
        context.moveTo(x5, y6 - halfHeight);
        context.arcTo(x5 + halfWidth, y6 - halfHeight, x5 + halfWidth, y6, cornerRadius);
        context.arcTo(x5 + halfWidth, y6 + halfHeight, x5, y6 + halfHeight, cornerRadius);
        context.arcTo(x5 - halfWidth, y6 + halfHeight, x5 - halfWidth, y6, cornerRadius);
        context.arcTo(x5 - halfWidth, y6 - halfHeight, x5, y6 - halfHeight, cornerRadius);
        context.lineTo(x5, y6 - halfHeight);
        context.closePath();
      };
      CRp$3.drawBottomRoundRectanglePath = function(context, x5, y6, width3, height2, radius2) {
        var halfWidth = width3 / 2;
        var halfHeight = height2 / 2;
        var cornerRadius = radius2 === "auto" ? getRoundRectangleRadius(width3, height2) : radius2;
        if (context.beginPath) {
          context.beginPath();
        }
        context.moveTo(x5, y6 - halfHeight);
        context.lineTo(x5 + halfWidth, y6 - halfHeight);
        context.lineTo(x5 + halfWidth, y6);
        context.arcTo(x5 + halfWidth, y6 + halfHeight, x5, y6 + halfHeight, cornerRadius);
        context.arcTo(x5 - halfWidth, y6 + halfHeight, x5 - halfWidth, y6, cornerRadius);
        context.lineTo(x5 - halfWidth, y6 - halfHeight);
        context.lineTo(x5, y6 - halfHeight);
        context.closePath();
      };
      CRp$3.drawCutRectanglePath = function(context, x5, y6, width3, height2, points, corners) {
        var halfWidth = width3 / 2;
        var halfHeight = height2 / 2;
        var cornerLength = corners === "auto" ? getCutRectangleCornerLength() : corners;
        if (context.beginPath) {
          context.beginPath();
        }
        context.moveTo(x5 - halfWidth + cornerLength, y6 - halfHeight);
        context.lineTo(x5 + halfWidth - cornerLength, y6 - halfHeight);
        context.lineTo(x5 + halfWidth, y6 - halfHeight + cornerLength);
        context.lineTo(x5 + halfWidth, y6 + halfHeight - cornerLength);
        context.lineTo(x5 + halfWidth - cornerLength, y6 + halfHeight);
        context.lineTo(x5 - halfWidth + cornerLength, y6 + halfHeight);
        context.lineTo(x5 - halfWidth, y6 + halfHeight - cornerLength);
        context.lineTo(x5 - halfWidth, y6 - halfHeight + cornerLength);
        context.closePath();
      };
      CRp$3.drawBarrelPath = function(context, x5, y6, width3, height2) {
        var halfWidth = width3 / 2;
        var halfHeight = height2 / 2;
        var xBegin = x5 - halfWidth;
        var xEnd = x5 + halfWidth;
        var yBegin = y6 - halfHeight;
        var yEnd = y6 + halfHeight;
        var barrelCurveConstants = getBarrelCurveConstants(width3, height2);
        var wOffset = barrelCurveConstants.widthOffset;
        var hOffset = barrelCurveConstants.heightOffset;
        var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset;
        if (context.beginPath) {
          context.beginPath();
        }
        context.moveTo(xBegin, yBegin + hOffset);
        context.lineTo(xBegin, yEnd - hOffset);
        context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd);
        context.lineTo(xEnd - wOffset, yEnd);
        context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset);
        context.lineTo(xEnd, yBegin + hOffset);
        context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin);
        context.lineTo(xBegin + wOffset, yBegin);
        context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset);
        context.closePath();
      };
      sin0 = Math.sin(0);
      cos0 = Math.cos(0);
      sin2 = {};
      cos2 = {};
      ellipseStepSize = Math.PI / 40;
      for (i2 = 0 * Math.PI; i2 < 2 * Math.PI; i2 += ellipseStepSize) {
        sin2[i2] = Math.sin(i2);
        cos2[i2] = Math.cos(i2);
      }
      CRp$3.drawEllipsePath = function(context, centerX, centerY, width3, height2) {
        if (context.beginPath) {
          context.beginPath();
        }
        if (context.ellipse) {
          context.ellipse(centerX, centerY, width3 / 2, height2 / 2, 0, 0, 2 * Math.PI);
        } else {
          var xPos, yPos;
          var rw = width3 / 2;
          var rh = height2 / 2;
          for (var i2 = 0 * Math.PI; i2 < 2 * Math.PI; i2 += ellipseStepSize) {
            xPos = centerX - rw * sin2[i2] * sin0 + rw * cos2[i2] * cos0;
            yPos = centerY + rh * cos2[i2] * sin0 + rh * sin2[i2] * cos0;
            if (i2 === 0) {
              context.moveTo(xPos, yPos);
            } else {
              context.lineTo(xPos, yPos);
            }
          }
        }
        context.closePath();
      };
      CRp$2 = {};
      CRp$2.createBuffer = function(w4, h3) {
        var buffer = document.createElement("canvas");
        buffer.width = w4;
        buffer.height = h3;
        return [buffer, buffer.getContext("2d")];
      };
      CRp$2.bufferCanvasImage = function(options2) {
        var cy = this.cy;
        var eles = cy.mutableElements();
        var bb = eles.boundingBox();
        var ctrRect = this.findContainerClientCoords();
        var width3 = options2.full ? Math.ceil(bb.w) : ctrRect[2];
        var height2 = options2.full ? Math.ceil(bb.h) : ctrRect[3];
        var specdMaxDims = number$1(options2.maxWidth) || number$1(options2.maxHeight);
        var pxRatio = this.getPixelRatio();
        var scale3 = 1;
        if (options2.scale !== void 0) {
          width3 *= options2.scale;
          height2 *= options2.scale;
          scale3 = options2.scale;
        } else if (specdMaxDims) {
          var maxScaleW = Infinity;
          var maxScaleH = Infinity;
          if (number$1(options2.maxWidth)) {
            maxScaleW = scale3 * options2.maxWidth / width3;
          }
          if (number$1(options2.maxHeight)) {
            maxScaleH = scale3 * options2.maxHeight / height2;
          }
          scale3 = Math.min(maxScaleW, maxScaleH);
          width3 *= scale3;
          height2 *= scale3;
        }
        if (!specdMaxDims) {
          width3 *= pxRatio;
          height2 *= pxRatio;
          scale3 *= pxRatio;
        }
        var buffCanvas = document.createElement("canvas");
        buffCanvas.width = width3;
        buffCanvas.height = height2;
        buffCanvas.style.width = width3 + "px";
        buffCanvas.style.height = height2 + "px";
        var buffCxt = buffCanvas.getContext("2d");
        if (width3 > 0 && height2 > 0) {
          buffCxt.clearRect(0, 0, width3, height2);
          buffCxt.globalCompositeOperation = "source-over";
          var zsortedEles = this.getCachedZSortedEles();
          if (options2.full) {
            buffCxt.translate(-bb.x1 * scale3, -bb.y1 * scale3);
            buffCxt.scale(scale3, scale3);
            this.drawElements(buffCxt, zsortedEles);
            buffCxt.scale(1 / scale3, 1 / scale3);
            buffCxt.translate(bb.x1 * scale3, bb.y1 * scale3);
          } else {
            var pan2 = cy.pan();
            var translation = {
              x: pan2.x * scale3,
              y: pan2.y * scale3
            };
            scale3 *= cy.zoom();
            buffCxt.translate(translation.x, translation.y);
            buffCxt.scale(scale3, scale3);
            this.drawElements(buffCxt, zsortedEles);
            buffCxt.scale(1 / scale3, 1 / scale3);
            buffCxt.translate(-translation.x, -translation.y);
          }
          if (options2.bg) {
            buffCxt.globalCompositeOperation = "destination-over";
            buffCxt.fillStyle = options2.bg;
            buffCxt.rect(0, 0, width3, height2);
            buffCxt.fill();
          }
        }
        return buffCanvas;
      };
      __name(b64ToBlob, "b64ToBlob");
      __name(b64UriToB64, "b64UriToB64");
      __name(output, "output");
      CRp$2.png = function(options2) {
        return output(options2, this.bufferCanvasImage(options2), "image/png");
      };
      CRp$2.jpg = function(options2) {
        return output(options2, this.bufferCanvasImage(options2), "image/jpeg");
      };
      CRp$1 = {};
      CRp$1.nodeShapeImpl = function(name, context, centerX, centerY, width3, height2, points, corners) {
        switch (name) {
          case "ellipse":
            return this.drawEllipsePath(context, centerX, centerY, width3, height2);
          case "polygon":
            return this.drawPolygonPath(context, centerX, centerY, width3, height2, points);
          case "round-polygon":
            return this.drawRoundPolygonPath(context, centerX, centerY, width3, height2, points, corners);
          case "roundrectangle":
          case "round-rectangle":
            return this.drawRoundRectanglePath(context, centerX, centerY, width3, height2, corners);
          case "cutrectangle":
          case "cut-rectangle":
            return this.drawCutRectanglePath(context, centerX, centerY, width3, height2, points, corners);
          case "bottomroundrectangle":
          case "bottom-round-rectangle":
            return this.drawBottomRoundRectanglePath(context, centerX, centerY, width3, height2, corners);
          case "barrel":
            return this.drawBarrelPath(context, centerX, centerY, width3, height2);
        }
      };
      CR = CanvasRenderer;
      CRp = CanvasRenderer.prototype;
      CRp.CANVAS_LAYERS = 3;
      CRp.SELECT_BOX = 0;
      CRp.DRAG = 1;
      CRp.NODE = 2;
      CRp.WEBGL = 3;
      CRp.CANVAS_TYPES = ["2d", "2d", "2d", "webgl2"];
      CRp.BUFFER_COUNT = 3;
      CRp.TEXTURE_BUFFER = 0;
      CRp.MOTIONBLUR_BUFFER_NODE = 1;
      CRp.MOTIONBLUR_BUFFER_DRAG = 2;
      __name(CanvasRenderer, "CanvasRenderer");
      CRp.redrawHint = function(group2, bool2) {
        var r2 = this;
        switch (group2) {
          case "eles":
            r2.data.canvasNeedsRedraw[CRp.NODE] = bool2;
            break;
          case "drag":
            r2.data.canvasNeedsRedraw[CRp.DRAG] = bool2;
            break;
          case "select":
            r2.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool2;
            break;
          case "gc":
            r2.data.gc = true;
            break;
        }
      };
      pathsImpld = typeof Path2D !== "undefined";
      CRp.path2dEnabled = function(on3) {
        if (on3 === void 0) {
          return this.pathsEnabled;
        }
        this.pathsEnabled = on3 ? true : false;
      };
      CRp.usePaths = function() {
        return pathsImpld && this.pathsEnabled;
      };
      CRp.setImgSmoothing = function(context, bool2) {
        if (context.imageSmoothingEnabled != null) {
          context.imageSmoothingEnabled = bool2;
        } else {
          context.webkitImageSmoothingEnabled = bool2;
          context.mozImageSmoothingEnabled = bool2;
          context.msImageSmoothingEnabled = bool2;
        }
      };
      CRp.getImgSmoothing = function(context) {
        if (context.imageSmoothingEnabled != null) {
          return context.imageSmoothingEnabled;
        } else {
          return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled;
        }
      };
      CRp.makeOffscreenCanvas = function(width3, height2) {
        var canvas;
        if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== "undefined") {
          canvas = new OffscreenCanvas(width3, height2);
        } else {
          var containerWindow = this.cy.window();
          var document2 = containerWindow.document;
          canvas = document2.createElement("canvas");
          canvas.width = width3;
          canvas.height = height2;
        }
        return canvas;
      };
      [CRp$b, CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function(props) {
        extend4(CRp, props);
      });
      renderer2 = [{
        name: "null",
        impl: NullRenderer
      }, {
        name: "base",
        impl: BR
      }, {
        name: "canvas",
        impl: CR
      }];
      incExts = [{
        type: "layout",
        extensions: layout4
      }, {
        type: "renderer",
        extensions: renderer2
      }];
      extensions = {};
      modules = {};
      __name(setExtension, "setExtension");
      __name(getExtension, "getExtension");
      __name(setModule, "setModule");
      __name(getModule, "getModule");
      extension2 = /* @__PURE__ */ __name(function extension3() {
        if (arguments.length === 2) {
          return getExtension.apply(null, arguments);
        } else if (arguments.length === 3) {
          return setExtension.apply(null, arguments);
        } else if (arguments.length === 4) {
          return getModule.apply(null, arguments);
        } else if (arguments.length === 5) {
          return setModule.apply(null, arguments);
        } else {
          error("Invalid extension access syntax");
        }
      }, "extension");
      Core.prototype.extension = extension2;
      incExts.forEach(function(group2) {
        group2.extensions.forEach(function(ext) {
          setExtension(group2.type, ext.name, ext.impl);
        });
      });
      _Stylesheet = /* @__PURE__ */ __name(function Stylesheet() {
        if (!(this instanceof _Stylesheet)) {
          return new _Stylesheet();
        }
        this.length = 0;
      }, "Stylesheet");
      sheetfn = _Stylesheet.prototype;
      sheetfn.instanceString = function() {
        return "stylesheet";
      };
      sheetfn.selector = function(selector) {
        var i2 = this.length++;
        this[i2] = {
          selector,
          properties: []
        };
        return this;
      };
      sheetfn.css = function(name, value2) {
        var i2 = this.length - 1;
        if (string(name)) {
          this[i2].properties.push({
            name,
            value: value2
          });
        } else if (plainObject(name)) {
          var map6 = name;
          var propNames = Object.keys(map6);
          for (var j3 = 0; j3 < propNames.length; j3++) {
            var key = propNames[j3];
            var mapVal = map6[key];
            if (mapVal == null) {
              continue;
            }
            var prop = _Style.properties[key] || _Style.properties[dash2camel(key)];
            if (prop == null) {
              continue;
            }
            var _name = prop.name;
            var _value = mapVal;
            this[i2].properties.push({
              name: _name,
              value: _value
            });
          }
        }
        return this;
      };
      sheetfn.style = sheetfn.css;
      sheetfn.generateStyle = function(cy) {
        var style3 = new _Style(cy);
        return this.appendToStyle(style3);
      };
      sheetfn.appendToStyle = function(style3) {
        for (var i2 = 0; i2 < this.length; i2++) {
          var context = this[i2];
          var selector = context.selector;
          var props = context.properties;
          style3.selector(selector);
          for (var j3 = 0; j3 < props.length; j3++) {
            var prop = props[j3];
            style3.css(prop.name, prop.value);
          }
        }
        return style3;
      };
      version2 = "3.33.3";
      cytoscape2 = /* @__PURE__ */ __name(function cytoscape3(options2) {
        if (options2 === void 0) {
          options2 = {};
        }
        if (plainObject(options2)) {
          return new Core(options2);
        } else if (string(options2)) {
          return extension2.apply(extension2, arguments);
        }
      }, "cytoscape");
      cytoscape2.use = function(ext) {
        var args = Array.prototype.slice.call(arguments, 1);
        args.unshift(cytoscape2);
        ext.apply(null, args);
        return this;
      };
      cytoscape2.warnings = function(bool2) {
        return warnings(bool2);
      };
      cytoscape2.version = version2;
      cytoscape2.stylesheet = cytoscape2.Stylesheet = _Stylesheet;
    }
  });

  // ../../node_modules/.pnpm/layout-base@1.0.2/node_modules/layout-base/layout-base.js
  var require_layout_base = __commonJS({
    "../../node_modules/.pnpm/layout-base@1.0.2/node_modules/layout-base/layout-base.js"(exports2, module2) {
      "use strict";
      (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root4, factory) {
        if (typeof exports2 === "object" && typeof module2 === "object")
          module2.exports = factory();
        else if (typeof define === "function" && define.amd)
          define([], factory);
        else if (typeof exports2 === "object")
          exports2["layoutBase"] = factory();
        else
          root4["layoutBase"] = factory();
      }), "webpackUniversalModuleDefinition"))(exports2, function() {
        return (
          /******/
          (function(modules2) {
            var installedModules = {};
            function __webpack_require__(moduleId) {
              if (installedModules[moduleId]) {
                return installedModules[moduleId].exports;
              }
              var module3 = installedModules[moduleId] = {
                /******/
                i: moduleId,
                /******/
                l: false,
                /******/
                exports: {}
                /******/
              };
              modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__);
              module3.l = true;
              return module3.exports;
            }
            __name(__webpack_require__, "__webpack_require__");
            __webpack_require__.m = modules2;
            __webpack_require__.c = installedModules;
            __webpack_require__.i = function(value2) {
              return value2;
            };
            __webpack_require__.d = function(exports3, name, getter) {
              if (!__webpack_require__.o(exports3, name)) {
                Object.defineProperty(exports3, name, {
                  /******/
                  configurable: false,
                  /******/
                  enumerable: true,
                  /******/
                  get: getter
                  /******/
                });
              }
            };
            __webpack_require__.n = function(module3) {
              var getter = module3 && module3.__esModule ? (
                /******/
                /* @__PURE__ */ __name(function getDefault() {
                  return module3["default"];
                }, "getDefault")
              ) : (
                /******/
                /* @__PURE__ */ __name(function getModuleExports() {
                  return module3;
                }, "getModuleExports")
              );
              __webpack_require__.d(getter, "a", getter);
              return getter;
            };
            __webpack_require__.o = function(object3, property3) {
              return Object.prototype.hasOwnProperty.call(object3, property3);
            };
            __webpack_require__.p = "";
            return __webpack_require__(__webpack_require__.s = 26);
          })([
            /* 0 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function LayoutConstants() {
              }
              __name(LayoutConstants, "LayoutConstants");
              LayoutConstants.QUALITY = 1;
              LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;
              LayoutConstants.DEFAULT_INCREMENTAL = false;
              LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;
              LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;
              LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;
              LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;
              LayoutConstants.DEFAULT_GRAPH_MARGIN = 15;
              LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;
              LayoutConstants.SIMPLE_NODE_SIZE = 40;
              LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;
              LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;
              LayoutConstants.MIN_EDGE_LENGTH = 1;
              LayoutConstants.WORLD_BOUNDARY = 1e6;
              LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1e3;
              LayoutConstants.WORLD_CENTER_X = 1200;
              LayoutConstants.WORLD_CENTER_Y = 900;
              module3.exports = LayoutConstants;
            }),
            /* 1 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraphObject = __webpack_require__(2);
              var IGeometry = __webpack_require__(8);
              var IMath = __webpack_require__(9);
              function LEdge(source, target, vEdge) {
                LGraphObject.call(this, vEdge);
                this.isOverlapingSourceAndTarget = false;
                this.vGraphObject = vEdge;
                this.bendpoints = [];
                this.source = source;
                this.target = target;
              }
              __name(LEdge, "LEdge");
              LEdge.prototype = Object.create(LGraphObject.prototype);
              for (var prop in LGraphObject) {
                LEdge[prop] = LGraphObject[prop];
              }
              LEdge.prototype.getSource = function() {
                return this.source;
              };
              LEdge.prototype.getTarget = function() {
                return this.target;
              };
              LEdge.prototype.isInterGraph = function() {
                return this.isInterGraph;
              };
              LEdge.prototype.getLength = function() {
                return this.length;
              };
              LEdge.prototype.isOverlapingSourceAndTarget = function() {
                return this.isOverlapingSourceAndTarget;
              };
              LEdge.prototype.getBendpoints = function() {
                return this.bendpoints;
              };
              LEdge.prototype.getLca = function() {
                return this.lca;
              };
              LEdge.prototype.getSourceInLca = function() {
                return this.sourceInLca;
              };
              LEdge.prototype.getTargetInLca = function() {
                return this.targetInLca;
              };
              LEdge.prototype.getOtherEnd = function(node2) {
                if (this.source === node2) {
                  return this.target;
                } else if (this.target === node2) {
                  return this.source;
                } else {
                  throw "Node is not incident with this edge";
                }
              };
              LEdge.prototype.getOtherEndInGraph = function(node2, graph) {
                var otherEnd = this.getOtherEnd(node2);
                var root4 = graph.getGraphManager().getRoot();
                while (true) {
                  if (otherEnd.getOwner() == graph) {
                    return otherEnd;
                  }
                  if (otherEnd.getOwner() == root4) {
                    break;
                  }
                  otherEnd = otherEnd.getOwner().getParent();
                }
                return null;
              };
              LEdge.prototype.updateLength = function() {
                var clipPointCoordinates = new Array(4);
                this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);
                if (!this.isOverlapingSourceAndTarget) {
                  this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];
                  this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];
                  if (Math.abs(this.lengthX) < 1) {
                    this.lengthX = IMath.sign(this.lengthX);
                  }
                  if (Math.abs(this.lengthY) < 1) {
                    this.lengthY = IMath.sign(this.lengthY);
                  }
                  this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);
                }
              };
              LEdge.prototype.updateLengthSimple = function() {
                this.lengthX = this.target.getCenterX() - this.source.getCenterX();
                this.lengthY = this.target.getCenterY() - this.source.getCenterY();
                if (Math.abs(this.lengthX) < 1) {
                  this.lengthX = IMath.sign(this.lengthX);
                }
                if (Math.abs(this.lengthY) < 1) {
                  this.lengthY = IMath.sign(this.lengthY);
                }
                this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);
              };
              module3.exports = LEdge;
            }),
            /* 2 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function LGraphObject(vGraphObject) {
                this.vGraphObject = vGraphObject;
              }
              __name(LGraphObject, "LGraphObject");
              module3.exports = LGraphObject;
            }),
            /* 3 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraphObject = __webpack_require__(2);
              var Integer = __webpack_require__(10);
              var RectangleD = __webpack_require__(13);
              var LayoutConstants = __webpack_require__(0);
              var RandomSeed = __webpack_require__(16);
              var PointD = __webpack_require__(4);
              function LNode(gm, loc, size4, vNode) {
                if (size4 == null && vNode == null) {
                  vNode = loc;
                }
                LGraphObject.call(this, vNode);
                if (gm.graphManager != null) gm = gm.graphManager;
                this.estimatedSize = Integer.MIN_VALUE;
                this.inclusionTreeDepth = Integer.MAX_VALUE;
                this.vGraphObject = vNode;
                this.edges = [];
                this.graphManager = gm;
                if (size4 != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size4.width, size4.height);
                else this.rect = new RectangleD();
              }
              __name(LNode, "LNode");
              LNode.prototype = Object.create(LGraphObject.prototype);
              for (var prop in LGraphObject) {
                LNode[prop] = LGraphObject[prop];
              }
              LNode.prototype.getEdges = function() {
                return this.edges;
              };
              LNode.prototype.getChild = function() {
                return this.child;
              };
              LNode.prototype.getOwner = function() {
                return this.owner;
              };
              LNode.prototype.getWidth = function() {
                return this.rect.width;
              };
              LNode.prototype.setWidth = function(width3) {
                this.rect.width = width3;
              };
              LNode.prototype.getHeight = function() {
                return this.rect.height;
              };
              LNode.prototype.setHeight = function(height2) {
                this.rect.height = height2;
              };
              LNode.prototype.getCenterX = function() {
                return this.rect.x + this.rect.width / 2;
              };
              LNode.prototype.getCenterY = function() {
                return this.rect.y + this.rect.height / 2;
              };
              LNode.prototype.getCenter = function() {
                return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);
              };
              LNode.prototype.getLocation = function() {
                return new PointD(this.rect.x, this.rect.y);
              };
              LNode.prototype.getRect = function() {
                return this.rect;
              };
              LNode.prototype.getDiagonal = function() {
                return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);
              };
              LNode.prototype.getHalfTheDiagonal = function() {
                return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;
              };
              LNode.prototype.setRect = function(upperLeft, dimension) {
                this.rect.x = upperLeft.x;
                this.rect.y = upperLeft.y;
                this.rect.width = dimension.width;
                this.rect.height = dimension.height;
              };
              LNode.prototype.setCenter = function(cx, cy) {
                this.rect.x = cx - this.rect.width / 2;
                this.rect.y = cy - this.rect.height / 2;
              };
              LNode.prototype.setLocation = function(x5, y6) {
                this.rect.x = x5;
                this.rect.y = y6;
              };
              LNode.prototype.moveBy = function(dx, dy) {
                this.rect.x += dx;
                this.rect.y += dy;
              };
              LNode.prototype.getEdgeListToNode = function(to) {
                var edgeList2 = [];
                var edge;
                var self2 = this;
                self2.edges.forEach(function(edge2) {
                  if (edge2.target == to) {
                    if (edge2.source != self2) throw "Incorrect edge source!";
                    edgeList2.push(edge2);
                  }
                });
                return edgeList2;
              };
              LNode.prototype.getEdgesBetween = function(other) {
                var edgeList2 = [];
                var edge;
                var self2 = this;
                self2.edges.forEach(function(edge2) {
                  if (!(edge2.source == self2 || edge2.target == self2)) throw "Incorrect edge source and/or target";
                  if (edge2.target == other || edge2.source == other) {
                    edgeList2.push(edge2);
                  }
                });
                return edgeList2;
              };
              LNode.prototype.getNeighborsList = function() {
                var neighbors = /* @__PURE__ */ new Set();
                var self2 = this;
                self2.edges.forEach(function(edge) {
                  if (edge.source == self2) {
                    neighbors.add(edge.target);
                  } else {
                    if (edge.target != self2) {
                      throw "Incorrect incidency!";
                    }
                    neighbors.add(edge.source);
                  }
                });
                return neighbors;
              };
              LNode.prototype.withChildren = function() {
                var withNeighborsList = /* @__PURE__ */ new Set();
                var childNode;
                var children2;
                withNeighborsList.add(this);
                if (this.child != null) {
                  var nodes5 = this.child.getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    childNode = nodes5[i2];
                    children2 = childNode.withChildren();
                    children2.forEach(function(node2) {
                      withNeighborsList.add(node2);
                    });
                  }
                }
                return withNeighborsList;
              };
              LNode.prototype.getNoOfChildren = function() {
                var noOfChildren = 0;
                var childNode;
                if (this.child == null) {
                  noOfChildren = 1;
                } else {
                  var nodes5 = this.child.getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    childNode = nodes5[i2];
                    noOfChildren += childNode.getNoOfChildren();
                  }
                }
                if (noOfChildren == 0) {
                  noOfChildren = 1;
                }
                return noOfChildren;
              };
              LNode.prototype.getEstimatedSize = function() {
                if (this.estimatedSize == Integer.MIN_VALUE) {
                  throw "assert failed";
                }
                return this.estimatedSize;
              };
              LNode.prototype.calcEstimatedSize = function() {
                if (this.child == null) {
                  return this.estimatedSize = (this.rect.width + this.rect.height) / 2;
                } else {
                  this.estimatedSize = this.child.calcEstimatedSize();
                  this.rect.width = this.estimatedSize;
                  this.rect.height = this.estimatedSize;
                  return this.estimatedSize;
                }
              };
              LNode.prototype.scatter = function() {
                var randomCenterX;
                var randomCenterY;
                var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;
                var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;
                randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;
                var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;
                var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;
                randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;
                this.rect.x = randomCenterX;
                this.rect.y = randomCenterY;
              };
              LNode.prototype.updateBounds = function() {
                if (this.getChild() == null) {
                  throw "assert failed";
                }
                if (this.getChild().getNodes().length != 0) {
                  var childGraph = this.getChild();
                  childGraph.updateBounds(true);
                  this.rect.x = childGraph.getLeft();
                  this.rect.y = childGraph.getTop();
                  this.setWidth(childGraph.getRight() - childGraph.getLeft());
                  this.setHeight(childGraph.getBottom() - childGraph.getTop());
                  if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {
                    var width3 = childGraph.getRight() - childGraph.getLeft();
                    var height2 = childGraph.getBottom() - childGraph.getTop();
                    if (this.labelWidth > width3) {
                      this.rect.x -= (this.labelWidth - width3) / 2;
                      this.setWidth(this.labelWidth);
                    }
                    if (this.labelHeight > height2) {
                      if (this.labelPos == "center") {
                        this.rect.y -= (this.labelHeight - height2) / 2;
                      } else if (this.labelPos == "top") {
                        this.rect.y -= this.labelHeight - height2;
                      }
                      this.setHeight(this.labelHeight);
                    }
                  }
                }
              };
              LNode.prototype.getInclusionTreeDepth = function() {
                if (this.inclusionTreeDepth == Integer.MAX_VALUE) {
                  throw "assert failed";
                }
                return this.inclusionTreeDepth;
              };
              LNode.prototype.transform = function(trans) {
                var left3 = this.rect.x;
                if (left3 > LayoutConstants.WORLD_BOUNDARY) {
                  left3 = LayoutConstants.WORLD_BOUNDARY;
                } else if (left3 < -LayoutConstants.WORLD_BOUNDARY) {
                  left3 = -LayoutConstants.WORLD_BOUNDARY;
                }
                var top2 = this.rect.y;
                if (top2 > LayoutConstants.WORLD_BOUNDARY) {
                  top2 = LayoutConstants.WORLD_BOUNDARY;
                } else if (top2 < -LayoutConstants.WORLD_BOUNDARY) {
                  top2 = -LayoutConstants.WORLD_BOUNDARY;
                }
                var leftTop = new PointD(left3, top2);
                var vLeftTop = trans.inverseTransformPoint(leftTop);
                this.setLocation(vLeftTop.x, vLeftTop.y);
              };
              LNode.prototype.getLeft = function() {
                return this.rect.x;
              };
              LNode.prototype.getRight = function() {
                return this.rect.x + this.rect.width;
              };
              LNode.prototype.getTop = function() {
                return this.rect.y;
              };
              LNode.prototype.getBottom = function() {
                return this.rect.y + this.rect.height;
              };
              LNode.prototype.getParent = function() {
                if (this.owner == null) {
                  return null;
                }
                return this.owner.getParent();
              };
              module3.exports = LNode;
            }),
            /* 4 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function PointD(x5, y6) {
                if (x5 == null && y6 == null) {
                  this.x = 0;
                  this.y = 0;
                } else {
                  this.x = x5;
                  this.y = y6;
                }
              }
              __name(PointD, "PointD");
              PointD.prototype.getX = function() {
                return this.x;
              };
              PointD.prototype.getY = function() {
                return this.y;
              };
              PointD.prototype.setX = function(x5) {
                this.x = x5;
              };
              PointD.prototype.setY = function(y6) {
                this.y = y6;
              };
              PointD.prototype.getDifference = function(pt) {
                return new DimensionD(this.x - pt.x, this.y - pt.y);
              };
              PointD.prototype.getCopy = function() {
                return new PointD(this.x, this.y);
              };
              PointD.prototype.translate = function(dim) {
                this.x += dim.width;
                this.y += dim.height;
                return this;
              };
              module3.exports = PointD;
            }),
            /* 5 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraphObject = __webpack_require__(2);
              var Integer = __webpack_require__(10);
              var LayoutConstants = __webpack_require__(0);
              var LGraphManager = __webpack_require__(6);
              var LNode = __webpack_require__(3);
              var LEdge = __webpack_require__(1);
              var RectangleD = __webpack_require__(13);
              var Point3 = __webpack_require__(12);
              var LinkedList = __webpack_require__(11);
              function LGraph(parent4, obj2, vGraph) {
                LGraphObject.call(this, vGraph);
                this.estimatedSize = Integer.MIN_VALUE;
                this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;
                this.edges = [];
                this.nodes = [];
                this.isConnected = false;
                this.parent = parent4;
                if (obj2 != null && obj2 instanceof LGraphManager) {
                  this.graphManager = obj2;
                } else if (obj2 != null && obj2 instanceof Layout) {
                  this.graphManager = obj2.graphManager;
                }
              }
              __name(LGraph, "LGraph");
              LGraph.prototype = Object.create(LGraphObject.prototype);
              for (var prop in LGraphObject) {
                LGraph[prop] = LGraphObject[prop];
              }
              LGraph.prototype.getNodes = function() {
                return this.nodes;
              };
              LGraph.prototype.getEdges = function() {
                return this.edges;
              };
              LGraph.prototype.getGraphManager = function() {
                return this.graphManager;
              };
              LGraph.prototype.getParent = function() {
                return this.parent;
              };
              LGraph.prototype.getLeft = function() {
                return this.left;
              };
              LGraph.prototype.getRight = function() {
                return this.right;
              };
              LGraph.prototype.getTop = function() {
                return this.top;
              };
              LGraph.prototype.getBottom = function() {
                return this.bottom;
              };
              LGraph.prototype.isConnected = function() {
                return this.isConnected;
              };
              LGraph.prototype.add = function(obj1, sourceNode, targetNode) {
                if (sourceNode == null && targetNode == null) {
                  var newNode = obj1;
                  if (this.graphManager == null) {
                    throw "Graph has no graph mgr!";
                  }
                  if (this.getNodes().indexOf(newNode) > -1) {
                    throw "Node already in graph!";
                  }
                  newNode.owner = this;
                  this.getNodes().push(newNode);
                  return newNode;
                } else {
                  var newEdge = obj1;
                  if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {
                    throw "Source or target not in graph!";
                  }
                  if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {
                    throw "Both owners must be this graph!";
                  }
                  if (sourceNode.owner != targetNode.owner) {
                    return null;
                  }
                  newEdge.source = sourceNode;
                  newEdge.target = targetNode;
                  newEdge.isInterGraph = false;
                  this.getEdges().push(newEdge);
                  sourceNode.edges.push(newEdge);
                  if (targetNode != sourceNode) {
                    targetNode.edges.push(newEdge);
                  }
                  return newEdge;
                }
              };
              LGraph.prototype.remove = function(obj) {
                var node2 = obj;
                if (obj instanceof LNode) {
                  if (node2 == null) {
                    throw "Node is null!";
                  }
                  if (!(node2.owner != null && node2.owner == this)) {
                    throw "Owner graph is invalid!";
                  }
                  if (this.graphManager == null) {
                    throw "Owner graph manager is invalid!";
                  }
                  var edgesToBeRemoved = node2.edges.slice();
                  var edge;
                  var s2 = edgesToBeRemoved.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    edge = edgesToBeRemoved[i2];
                    if (edge.isInterGraph) {
                      this.graphManager.remove(edge);
                    } else {
                      edge.source.owner.remove(edge);
                    }
                  }
                  var index = this.nodes.indexOf(node2);
                  if (index == -1) {
                    throw "Node not in owner node list!";
                  }
                  this.nodes.splice(index, 1);
                } else if (obj instanceof LEdge) {
                  var edge = obj;
                  if (edge == null) {
                    throw "Edge is null!";
                  }
                  if (!(edge.source != null && edge.target != null)) {
                    throw "Source and/or target is null!";
                  }
                  if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {
                    throw "Source and/or target owner is invalid!";
                  }
                  var sourceIndex = edge.source.edges.indexOf(edge);
                  var targetIndex = edge.target.edges.indexOf(edge);
                  if (!(sourceIndex > -1 && targetIndex > -1)) {
                    throw "Source and/or target doesn't know this edge!";
                  }
                  edge.source.edges.splice(sourceIndex, 1);
                  if (edge.target != edge.source) {
                    edge.target.edges.splice(targetIndex, 1);
                  }
                  var index = edge.source.owner.getEdges().indexOf(edge);
                  if (index == -1) {
                    throw "Not in owner's edge list!";
                  }
                  edge.source.owner.getEdges().splice(index, 1);
                }
              };
              LGraph.prototype.updateLeftTop = function() {
                var top2 = Integer.MAX_VALUE;
                var left3 = Integer.MAX_VALUE;
                var nodeTop;
                var nodeLeft;
                var margin;
                var nodes5 = this.getNodes();
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  nodeTop = lNode.getTop();
                  nodeLeft = lNode.getLeft();
                  if (top2 > nodeTop) {
                    top2 = nodeTop;
                  }
                  if (left3 > nodeLeft) {
                    left3 = nodeLeft;
                  }
                }
                if (top2 == Integer.MAX_VALUE) {
                  return null;
                }
                if (nodes5[0].getParent().paddingLeft != void 0) {
                  margin = nodes5[0].getParent().paddingLeft;
                } else {
                  margin = this.margin;
                }
                this.left = left3 - margin;
                this.top = top2 - margin;
                return new Point3(this.left, this.top);
              };
              LGraph.prototype.updateBounds = function(recursive) {
                var left3 = Integer.MAX_VALUE;
                var right3 = -Integer.MAX_VALUE;
                var top2 = Integer.MAX_VALUE;
                var bottom2 = -Integer.MAX_VALUE;
                var nodeLeft;
                var nodeRight;
                var nodeTop;
                var nodeBottom;
                var margin;
                var nodes5 = this.nodes;
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  if (recursive && lNode.child != null) {
                    lNode.updateBounds();
                  }
                  nodeLeft = lNode.getLeft();
                  nodeRight = lNode.getRight();
                  nodeTop = lNode.getTop();
                  nodeBottom = lNode.getBottom();
                  if (left3 > nodeLeft) {
                    left3 = nodeLeft;
                  }
                  if (right3 < nodeRight) {
                    right3 = nodeRight;
                  }
                  if (top2 > nodeTop) {
                    top2 = nodeTop;
                  }
                  if (bottom2 < nodeBottom) {
                    bottom2 = nodeBottom;
                  }
                }
                var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2);
                if (left3 == Integer.MAX_VALUE) {
                  this.left = this.parent.getLeft();
                  this.right = this.parent.getRight();
                  this.top = this.parent.getTop();
                  this.bottom = this.parent.getBottom();
                }
                if (nodes5[0].getParent().paddingLeft != void 0) {
                  margin = nodes5[0].getParent().paddingLeft;
                } else {
                  margin = this.margin;
                }
                this.left = boundingRect.x - margin;
                this.right = boundingRect.x + boundingRect.width + margin;
                this.top = boundingRect.y - margin;
                this.bottom = boundingRect.y + boundingRect.height + margin;
              };
              LGraph.calculateBounds = function(nodes5) {
                var left3 = Integer.MAX_VALUE;
                var right3 = -Integer.MAX_VALUE;
                var top2 = Integer.MAX_VALUE;
                var bottom2 = -Integer.MAX_VALUE;
                var nodeLeft;
                var nodeRight;
                var nodeTop;
                var nodeBottom;
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  nodeLeft = lNode.getLeft();
                  nodeRight = lNode.getRight();
                  nodeTop = lNode.getTop();
                  nodeBottom = lNode.getBottom();
                  if (left3 > nodeLeft) {
                    left3 = nodeLeft;
                  }
                  if (right3 < nodeRight) {
                    right3 = nodeRight;
                  }
                  if (top2 > nodeTop) {
                    top2 = nodeTop;
                  }
                  if (bottom2 < nodeBottom) {
                    bottom2 = nodeBottom;
                  }
                }
                var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2);
                return boundingRect;
              };
              LGraph.prototype.getInclusionTreeDepth = function() {
                if (this == this.graphManager.getRoot()) {
                  return 1;
                } else {
                  return this.parent.getInclusionTreeDepth();
                }
              };
              LGraph.prototype.getEstimatedSize = function() {
                if (this.estimatedSize == Integer.MIN_VALUE) {
                  throw "assert failed";
                }
                return this.estimatedSize;
              };
              LGraph.prototype.calcEstimatedSize = function() {
                var size4 = 0;
                var nodes5 = this.nodes;
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  size4 += lNode.calcEstimatedSize();
                }
                if (size4 == 0) {
                  this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;
                } else {
                  this.estimatedSize = size4 / Math.sqrt(this.nodes.length);
                }
                return this.estimatedSize;
              };
              LGraph.prototype.updateConnected = function() {
                var self2 = this;
                if (this.nodes.length == 0) {
                  this.isConnected = true;
                  return;
                }
                var queue = new LinkedList();
                var visited = /* @__PURE__ */ new Set();
                var currentNode = this.nodes[0];
                var neighborEdges;
                var currentNeighbor;
                var childrenOfNode = currentNode.withChildren();
                childrenOfNode.forEach(function(node2) {
                  queue.push(node2);
                  visited.add(node2);
                });
                while (queue.length !== 0) {
                  currentNode = queue.shift();
                  neighborEdges = currentNode.getEdges();
                  var size4 = neighborEdges.length;
                  for (var i2 = 0; i2 < size4; i2++) {
                    var neighborEdge = neighborEdges[i2];
                    currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);
                    if (currentNeighbor != null && !visited.has(currentNeighbor)) {
                      var childrenOfNeighbor = currentNeighbor.withChildren();
                      childrenOfNeighbor.forEach(function(node2) {
                        queue.push(node2);
                        visited.add(node2);
                      });
                    }
                  }
                }
                this.isConnected = false;
                if (visited.size >= this.nodes.length) {
                  var noOfVisitedInThisGraph = 0;
                  visited.forEach(function(visitedNode) {
                    if (visitedNode.owner == self2) {
                      noOfVisitedInThisGraph++;
                    }
                  });
                  if (noOfVisitedInThisGraph == this.nodes.length) {
                    this.isConnected = true;
                  }
                }
              };
              module3.exports = LGraph;
            }),
            /* 6 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraph;
              var LEdge = __webpack_require__(1);
              function LGraphManager(layout7) {
                LGraph = __webpack_require__(5);
                this.layout = layout7;
                this.graphs = [];
                this.edges = [];
              }
              __name(LGraphManager, "LGraphManager");
              LGraphManager.prototype.addRoot = function() {
                var ngraph = this.layout.newGraph();
                var nnode = this.layout.newNode(null);
                var root4 = this.add(ngraph, nnode);
                this.setRootGraph(root4);
                return this.rootGraph;
              };
              LGraphManager.prototype.add = function(newGraph, parentNode, newEdge, sourceNode, targetNode) {
                if (newEdge == null && sourceNode == null && targetNode == null) {
                  if (newGraph == null) {
                    throw "Graph is null!";
                  }
                  if (parentNode == null) {
                    throw "Parent node is null!";
                  }
                  if (this.graphs.indexOf(newGraph) > -1) {
                    throw "Graph already in this graph mgr!";
                  }
                  this.graphs.push(newGraph);
                  if (newGraph.parent != null) {
                    throw "Already has a parent!";
                  }
                  if (parentNode.child != null) {
                    throw "Already has a child!";
                  }
                  newGraph.parent = parentNode;
                  parentNode.child = newGraph;
                  return newGraph;
                } else {
                  targetNode = newEdge;
                  sourceNode = parentNode;
                  newEdge = newGraph;
                  var sourceGraph = sourceNode.getOwner();
                  var targetGraph = targetNode.getOwner();
                  if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {
                    throw "Source not in this graph mgr!";
                  }
                  if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {
                    throw "Target not in this graph mgr!";
                  }
                  if (sourceGraph == targetGraph) {
                    newEdge.isInterGraph = false;
                    return sourceGraph.add(newEdge, sourceNode, targetNode);
                  } else {
                    newEdge.isInterGraph = true;
                    newEdge.source = sourceNode;
                    newEdge.target = targetNode;
                    if (this.edges.indexOf(newEdge) > -1) {
                      throw "Edge already in inter-graph edge list!";
                    }
                    this.edges.push(newEdge);
                    if (!(newEdge.source != null && newEdge.target != null)) {
                      throw "Edge source and/or target is null!";
                    }
                    if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {
                      throw "Edge already in source and/or target incidency list!";
                    }
                    newEdge.source.edges.push(newEdge);
                    newEdge.target.edges.push(newEdge);
                    return newEdge;
                  }
                }
              };
              LGraphManager.prototype.remove = function(lObj) {
                if (lObj instanceof LGraph) {
                  var graph = lObj;
                  if (graph.getGraphManager() != this) {
                    throw "Graph not in this graph mgr";
                  }
                  if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {
                    throw "Invalid parent node!";
                  }
                  var edgesToBeRemoved = [];
                  edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());
                  var edge;
                  var s2 = edgesToBeRemoved.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    edge = edgesToBeRemoved[i2];
                    graph.remove(edge);
                  }
                  var nodesToBeRemoved = [];
                  nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());
                  var node2;
                  s2 = nodesToBeRemoved.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    node2 = nodesToBeRemoved[i2];
                    graph.remove(node2);
                  }
                  if (graph == this.rootGraph) {
                    this.setRootGraph(null);
                  }
                  var index = this.graphs.indexOf(graph);
                  this.graphs.splice(index, 1);
                  graph.parent = null;
                } else if (lObj instanceof LEdge) {
                  edge = lObj;
                  if (edge == null) {
                    throw "Edge is null!";
                  }
                  if (!edge.isInterGraph) {
                    throw "Not an inter-graph edge!";
                  }
                  if (!(edge.source != null && edge.target != null)) {
                    throw "Source and/or target is null!";
                  }
                  if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {
                    throw "Source and/or target doesn't know this edge!";
                  }
                  var index = edge.source.edges.indexOf(edge);
                  edge.source.edges.splice(index, 1);
                  index = edge.target.edges.indexOf(edge);
                  edge.target.edges.splice(index, 1);
                  if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {
                    throw "Edge owner graph or owner graph manager is null!";
                  }
                  if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {
                    throw "Not in owner graph manager's edge list!";
                  }
                  var index = edge.source.owner.getGraphManager().edges.indexOf(edge);
                  edge.source.owner.getGraphManager().edges.splice(index, 1);
                }
              };
              LGraphManager.prototype.updateBounds = function() {
                this.rootGraph.updateBounds(true);
              };
              LGraphManager.prototype.getGraphs = function() {
                return this.graphs;
              };
              LGraphManager.prototype.getAllNodes = function() {
                if (this.allNodes == null) {
                  var nodeList = [];
                  var graphs = this.getGraphs();
                  var s2 = graphs.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    nodeList = nodeList.concat(graphs[i2].getNodes());
                  }
                  this.allNodes = nodeList;
                }
                return this.allNodes;
              };
              LGraphManager.prototype.resetAllNodes = function() {
                this.allNodes = null;
              };
              LGraphManager.prototype.resetAllEdges = function() {
                this.allEdges = null;
              };
              LGraphManager.prototype.resetAllNodesToApplyGravitation = function() {
                this.allNodesToApplyGravitation = null;
              };
              LGraphManager.prototype.getAllEdges = function() {
                if (this.allEdges == null) {
                  var edgeList2 = [];
                  var graphs = this.getGraphs();
                  var s2 = graphs.length;
                  for (var i2 = 0; i2 < graphs.length; i2++) {
                    edgeList2 = edgeList2.concat(graphs[i2].getEdges());
                  }
                  edgeList2 = edgeList2.concat(this.edges);
                  this.allEdges = edgeList2;
                }
                return this.allEdges;
              };
              LGraphManager.prototype.getAllNodesToApplyGravitation = function() {
                return this.allNodesToApplyGravitation;
              };
              LGraphManager.prototype.setAllNodesToApplyGravitation = function(nodeList) {
                if (this.allNodesToApplyGravitation != null) {
                  throw "assert failed";
                }
                this.allNodesToApplyGravitation = nodeList;
              };
              LGraphManager.prototype.getRoot = function() {
                return this.rootGraph;
              };
              LGraphManager.prototype.setRootGraph = function(graph) {
                if (graph.getGraphManager() != this) {
                  throw "Root not in this graph mgr!";
                }
                this.rootGraph = graph;
                if (graph.parent == null) {
                  graph.parent = this.layout.newNode("Root node");
                }
              };
              LGraphManager.prototype.getLayout = function() {
                return this.layout;
              };
              LGraphManager.prototype.isOneAncestorOfOther = function(firstNode, secondNode) {
                if (!(firstNode != null && secondNode != null)) {
                  throw "assert failed";
                }
                if (firstNode == secondNode) {
                  return true;
                }
                var ownerGraph = firstNode.getOwner();
                var parentNode;
                do {
                  parentNode = ownerGraph.getParent();
                  if (parentNode == null) {
                    break;
                  }
                  if (parentNode == secondNode) {
                    return true;
                  }
                  ownerGraph = parentNode.getOwner();
                  if (ownerGraph == null) {
                    break;
                  }
                } while (true);
                ownerGraph = secondNode.getOwner();
                do {
                  parentNode = ownerGraph.getParent();
                  if (parentNode == null) {
                    break;
                  }
                  if (parentNode == firstNode) {
                    return true;
                  }
                  ownerGraph = parentNode.getOwner();
                  if (ownerGraph == null) {
                    break;
                  }
                } while (true);
                return false;
              };
              LGraphManager.prototype.calcLowestCommonAncestors = function() {
                var edge;
                var sourceNode;
                var targetNode;
                var sourceAncestorGraph;
                var targetAncestorGraph;
                var edges3 = this.getAllEdges();
                var s2 = edges3.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  edge = edges3[i2];
                  sourceNode = edge.source;
                  targetNode = edge.target;
                  edge.lca = null;
                  edge.sourceInLca = sourceNode;
                  edge.targetInLca = targetNode;
                  if (sourceNode == targetNode) {
                    edge.lca = sourceNode.getOwner();
                    continue;
                  }
                  sourceAncestorGraph = sourceNode.getOwner();
                  while (edge.lca == null) {
                    edge.targetInLca = targetNode;
                    targetAncestorGraph = targetNode.getOwner();
                    while (edge.lca == null) {
                      if (targetAncestorGraph == sourceAncestorGraph) {
                        edge.lca = targetAncestorGraph;
                        break;
                      }
                      if (targetAncestorGraph == this.rootGraph) {
                        break;
                      }
                      if (edge.lca != null) {
                        throw "assert failed";
                      }
                      edge.targetInLca = targetAncestorGraph.getParent();
                      targetAncestorGraph = edge.targetInLca.getOwner();
                    }
                    if (sourceAncestorGraph == this.rootGraph) {
                      break;
                    }
                    if (edge.lca == null) {
                      edge.sourceInLca = sourceAncestorGraph.getParent();
                      sourceAncestorGraph = edge.sourceInLca.getOwner();
                    }
                  }
                  if (edge.lca == null) {
                    throw "assert failed";
                  }
                }
              };
              LGraphManager.prototype.calcLowestCommonAncestor = function(firstNode, secondNode) {
                if (firstNode == secondNode) {
                  return firstNode.getOwner();
                }
                var firstOwnerGraph = firstNode.getOwner();
                do {
                  if (firstOwnerGraph == null) {
                    break;
                  }
                  var secondOwnerGraph = secondNode.getOwner();
                  do {
                    if (secondOwnerGraph == null) {
                      break;
                    }
                    if (secondOwnerGraph == firstOwnerGraph) {
                      return secondOwnerGraph;
                    }
                    secondOwnerGraph = secondOwnerGraph.getParent().getOwner();
                  } while (true);
                  firstOwnerGraph = firstOwnerGraph.getParent().getOwner();
                } while (true);
                return firstOwnerGraph;
              };
              LGraphManager.prototype.calcInclusionTreeDepths = function(graph, depth) {
                if (graph == null && depth == null) {
                  graph = this.rootGraph;
                  depth = 1;
                }
                var node2;
                var nodes5 = graph.getNodes();
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  node2 = nodes5[i2];
                  node2.inclusionTreeDepth = depth;
                  if (node2.child != null) {
                    this.calcInclusionTreeDepths(node2.child, depth + 1);
                  }
                }
              };
              LGraphManager.prototype.includesInvalidEdge = function() {
                var edge;
                var s2 = this.edges.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  edge = this.edges[i2];
                  if (this.isOneAncestorOfOther(edge.source, edge.target)) {
                    return true;
                  }
                }
                return false;
              };
              module3.exports = LGraphManager;
            }),
            /* 7 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LayoutConstants = __webpack_require__(0);
              function FDLayoutConstants() {
              }
              __name(FDLayoutConstants, "FDLayoutConstants");
              for (var prop in LayoutConstants) {
                FDLayoutConstants[prop] = LayoutConstants[prop];
              }
              FDLayoutConstants.MAX_ITERATIONS = 2500;
              FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;
              FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;
              FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500;
              FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;
              FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1;
              FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;
              FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;
              FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;
              FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;
              FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;
              FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;
              FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1e3;
              FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5e3;
              FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100;
              FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;
              FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10;
              FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;
              FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;
              FDLayoutConstants.MIN_EDGE_LENGTH = 1;
              FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;
              module3.exports = FDLayoutConstants;
            }),
            /* 8 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var Point3 = __webpack_require__(12);
              function IGeometry() {
              }
              __name(IGeometry, "IGeometry");
              IGeometry.calcSeparationAmount = function(rectA, rectB, overlapAmount, separationBuffer) {
                if (!rectA.intersects(rectB)) {
                  throw "assert failed";
                }
                var directions = new Array(2);
                this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);
                overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);
                overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);
                if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {
                  overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());
                } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {
                  overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());
                }
                if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {
                  overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());
                } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {
                  overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());
                }
                var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));
                if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {
                  slope = 1;
                }
                var moveByY = slope * overlapAmount[0];
                var moveByX = overlapAmount[1] / slope;
                if (overlapAmount[0] < moveByX) {
                  moveByX = overlapAmount[0];
                } else {
                  moveByY = overlapAmount[1];
                }
                overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);
                overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);
              };
              IGeometry.decideDirectionsForOverlappingNodes = function(rectA, rectB, directions) {
                if (rectA.getCenterX() < rectB.getCenterX()) {
                  directions[0] = -1;
                } else {
                  directions[0] = 1;
                }
                if (rectA.getCenterY() < rectB.getCenterY()) {
                  directions[1] = -1;
                } else {
                  directions[1] = 1;
                }
              };
              IGeometry.getIntersection2 = function(rectA, rectB, result) {
                var p1x = rectA.getCenterX();
                var p1y = rectA.getCenterY();
                var p2x = rectB.getCenterX();
                var p2y = rectB.getCenterY();
                if (rectA.intersects(rectB)) {
                  result[0] = p1x;
                  result[1] = p1y;
                  result[2] = p2x;
                  result[3] = p2y;
                  return true;
                }
                var topLeftAx = rectA.getX();
                var topLeftAy = rectA.getY();
                var topRightAx = rectA.getRight();
                var bottomLeftAx = rectA.getX();
                var bottomLeftAy = rectA.getBottom();
                var bottomRightAx = rectA.getRight();
                var halfWidthA = rectA.getWidthHalf();
                var halfHeightA = rectA.getHeightHalf();
                var topLeftBx = rectB.getX();
                var topLeftBy = rectB.getY();
                var topRightBx = rectB.getRight();
                var bottomLeftBx = rectB.getX();
                var bottomLeftBy = rectB.getBottom();
                var bottomRightBx = rectB.getRight();
                var halfWidthB = rectB.getWidthHalf();
                var halfHeightB = rectB.getHeightHalf();
                var clipPointAFound = false;
                var clipPointBFound = false;
                if (p1x === p2x) {
                  if (p1y > p2y) {
                    result[0] = p1x;
                    result[1] = topLeftAy;
                    result[2] = p2x;
                    result[3] = bottomLeftBy;
                    return false;
                  } else if (p1y < p2y) {
                    result[0] = p1x;
                    result[1] = bottomLeftAy;
                    result[2] = p2x;
                    result[3] = topLeftBy;
                    return false;
                  } else {
                  }
                } else if (p1y === p2y) {
                  if (p1x > p2x) {
                    result[0] = topLeftAx;
                    result[1] = p1y;
                    result[2] = topRightBx;
                    result[3] = p2y;
                    return false;
                  } else if (p1x < p2x) {
                    result[0] = topRightAx;
                    result[1] = p1y;
                    result[2] = topLeftBx;
                    result[3] = p2y;
                    return false;
                  } else {
                  }
                } else {
                  var slopeA = rectA.height / rectA.width;
                  var slopeB = rectB.height / rectB.width;
                  var slopePrime = (p2y - p1y) / (p2x - p1x);
                  var cardinalDirectionA = void 0;
                  var cardinalDirectionB = void 0;
                  var tempPointAx = void 0;
                  var tempPointAy = void 0;
                  var tempPointBx = void 0;
                  var tempPointBy = void 0;
                  if (-slopeA === slopePrime) {
                    if (p1x > p2x) {
                      result[0] = bottomLeftAx;
                      result[1] = bottomLeftAy;
                      clipPointAFound = true;
                    } else {
                      result[0] = topRightAx;
                      result[1] = topLeftAy;
                      clipPointAFound = true;
                    }
                  } else if (slopeA === slopePrime) {
                    if (p1x > p2x) {
                      result[0] = topLeftAx;
                      result[1] = topLeftAy;
                      clipPointAFound = true;
                    } else {
                      result[0] = bottomRightAx;
                      result[1] = bottomLeftAy;
                      clipPointAFound = true;
                    }
                  }
                  if (-slopeB === slopePrime) {
                    if (p2x > p1x) {
                      result[2] = bottomLeftBx;
                      result[3] = bottomLeftBy;
                      clipPointBFound = true;
                    } else {
                      result[2] = topRightBx;
                      result[3] = topLeftBy;
                      clipPointBFound = true;
                    }
                  } else if (slopeB === slopePrime) {
                    if (p2x > p1x) {
                      result[2] = topLeftBx;
                      result[3] = topLeftBy;
                      clipPointBFound = true;
                    } else {
                      result[2] = bottomRightBx;
                      result[3] = bottomLeftBy;
                      clipPointBFound = true;
                    }
                  }
                  if (clipPointAFound && clipPointBFound) {
                    return false;
                  }
                  if (p1x > p2x) {
                    if (p1y > p2y) {
                      cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);
                      cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);
                    } else {
                      cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);
                      cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);
                    }
                  } else {
                    if (p1y > p2y) {
                      cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);
                      cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);
                    } else {
                      cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);
                      cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);
                    }
                  }
                  if (!clipPointAFound) {
                    switch (cardinalDirectionA) {
                      case 1:
                        tempPointAy = topLeftAy;
                        tempPointAx = p1x + -halfHeightA / slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                      case 2:
                        tempPointAx = bottomRightAx;
                        tempPointAy = p1y + halfWidthA * slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                      case 3:
                        tempPointAy = bottomLeftAy;
                        tempPointAx = p1x + halfHeightA / slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                      case 4:
                        tempPointAx = bottomLeftAx;
                        tempPointAy = p1y + -halfWidthA * slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                    }
                  }
                  if (!clipPointBFound) {
                    switch (cardinalDirectionB) {
                      case 1:
                        tempPointBy = topLeftBy;
                        tempPointBx = p2x + -halfHeightB / slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                      case 2:
                        tempPointBx = bottomRightBx;
                        tempPointBy = p2y + halfWidthB * slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                      case 3:
                        tempPointBy = bottomLeftBy;
                        tempPointBx = p2x + halfHeightB / slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                      case 4:
                        tempPointBx = bottomLeftBx;
                        tempPointBy = p2y + -halfWidthB * slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                    }
                  }
                }
                return false;
              };
              IGeometry.getCardinalDirection = function(slope, slopePrime, line2) {
                if (slope > slopePrime) {
                  return line2;
                } else {
                  return 1 + line2 % 4;
                }
              };
              IGeometry.getIntersection = function(s1, s2, f1, f2) {
                if (f2 == null) {
                  return this.getIntersection2(s1, s2, f1);
                }
                var x1 = s1.x;
                var y1 = s1.y;
                var x22 = s2.x;
                var y22 = s2.y;
                var x32 = f1.x;
                var y32 = f1.y;
                var x42 = f2.x;
                var y42 = f2.y;
                var x5 = void 0, y6 = void 0;
                var a1 = void 0, a2 = void 0, b1 = void 0, b22 = void 0, c1 = void 0, c22 = void 0;
                var denom = void 0;
                a1 = y22 - y1;
                b1 = x1 - x22;
                c1 = x22 * y1 - x1 * y22;
                a2 = y42 - y32;
                b22 = x32 - x42;
                c22 = x42 * y32 - x32 * y42;
                denom = a1 * b22 - a2 * b1;
                if (denom === 0) {
                  return null;
                }
                x5 = (b1 * c22 - b22 * c1) / denom;
                y6 = (a2 * c1 - a1 * c22) / denom;
                return new Point3(x5, y6);
              };
              IGeometry.angleOfVector = function(Cx, Cy, Nx, Ny) {
                var C_angle = void 0;
                if (Cx !== Nx) {
                  C_angle = Math.atan((Ny - Cy) / (Nx - Cx));
                  if (Nx < Cx) {
                    C_angle += Math.PI;
                  } else if (Ny < Cy) {
                    C_angle += this.TWO_PI;
                  }
                } else if (Ny < Cy) {
                  C_angle = this.ONE_AND_HALF_PI;
                } else {
                  C_angle = this.HALF_PI;
                }
                return C_angle;
              };
              IGeometry.doIntersect = function(p1, p22, p3, p4) {
                var a2 = p1.x;
                var b3 = p1.y;
                var c3 = p22.x;
                var d3 = p22.y;
                var p5 = p3.x;
                var q3 = p3.y;
                var r2 = p4.x;
                var s2 = p4.y;
                var det = (c3 - a2) * (s2 - q3) - (r2 - p5) * (d3 - b3);
                if (det === 0) {
                  return false;
                } else {
                  var lambda = ((s2 - q3) * (r2 - a2) + (p5 - r2) * (s2 - b3)) / det;
                  var gamma2 = ((b3 - d3) * (r2 - a2) + (c3 - a2) * (s2 - b3)) / det;
                  return 0 < lambda && lambda < 1 && 0 < gamma2 && gamma2 < 1;
                }
              };
              IGeometry.HALF_PI = 0.5 * Math.PI;
              IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;
              IGeometry.TWO_PI = 2 * Math.PI;
              IGeometry.THREE_PI = 3 * Math.PI;
              module3.exports = IGeometry;
            }),
            /* 9 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function IMath() {
              }
              __name(IMath, "IMath");
              IMath.sign = function(value2) {
                if (value2 > 0) {
                  return 1;
                } else if (value2 < 0) {
                  return -1;
                } else {
                  return 0;
                }
              };
              IMath.floor = function(value2) {
                return value2 < 0 ? Math.ceil(value2) : Math.floor(value2);
              };
              IMath.ceil = function(value2) {
                return value2 < 0 ? Math.floor(value2) : Math.ceil(value2);
              };
              module3.exports = IMath;
            }),
            /* 10 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function Integer() {
              }
              __name(Integer, "Integer");
              Integer.MAX_VALUE = 2147483647;
              Integer.MIN_VALUE = -2147483648;
              module3.exports = Integer;
            }),
            /* 11 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _createClass2 = /* @__PURE__ */ (function() {
                function defineProperties(target, props) {
                  for (var i2 = 0; i2 < props.length; i2++) {
                    var descriptor = props[i2];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) descriptor.writable = true;
                    Object.defineProperty(target, descriptor.key, descriptor);
                  }
                }
                __name(defineProperties, "defineProperties");
                return function(Constructor, protoProps, staticProps) {
                  if (protoProps) defineProperties(Constructor.prototype, protoProps);
                  if (staticProps) defineProperties(Constructor, staticProps);
                  return Constructor;
                };
              })();
              function _classCallCheck2(instance2, Constructor) {
                if (!(instance2 instanceof Constructor)) {
                  throw new TypeError("Cannot call a class as a function");
                }
              }
              __name(_classCallCheck2, "_classCallCheck");
              var nodeFrom = /* @__PURE__ */ __name(function nodeFrom2(value2) {
                return { value: value2, next: null, prev: null };
              }, "nodeFrom");
              var add3 = /* @__PURE__ */ __name(function add4(prev2, node2, next3, list) {
                if (prev2 !== null) {
                  prev2.next = node2;
                } else {
                  list.head = node2;
                }
                if (next3 !== null) {
                  next3.prev = node2;
                } else {
                  list.tail = node2;
                }
                node2.prev = prev2;
                node2.next = next3;
                list.length++;
                return node2;
              }, "add");
              var _remove = /* @__PURE__ */ __name(function _remove2(node2, list) {
                var prev2 = node2.prev, next3 = node2.next;
                if (prev2 !== null) {
                  prev2.next = next3;
                } else {
                  list.head = next3;
                }
                if (next3 !== null) {
                  next3.prev = prev2;
                } else {
                  list.tail = prev2;
                }
                node2.prev = node2.next = null;
                list.length--;
                return node2;
              }, "_remove");
              var LinkedList = (function() {
                function LinkedList2(vals) {
                  var _this = this;
                  _classCallCheck2(this, LinkedList2);
                  this.length = 0;
                  this.head = null;
                  this.tail = null;
                  if (vals != null) {
                    vals.forEach(function(v3) {
                      return _this.push(v3);
                    });
                  }
                }
                __name(LinkedList2, "LinkedList");
                _createClass2(LinkedList2, [{
                  key: "size",
                  value: /* @__PURE__ */ __name(function size4() {
                    return this.length;
                  }, "size")
                }, {
                  key: "insertBefore",
                  value: /* @__PURE__ */ __name(function insertBefore(val, otherNode) {
                    return add3(otherNode.prev, nodeFrom(val), otherNode, this);
                  }, "insertBefore")
                }, {
                  key: "insertAfter",
                  value: /* @__PURE__ */ __name(function insertAfter(val, otherNode) {
                    return add3(otherNode, nodeFrom(val), otherNode.next, this);
                  }, "insertAfter")
                }, {
                  key: "insertNodeBefore",
                  value: /* @__PURE__ */ __name(function insertNodeBefore(newNode, otherNode) {
                    return add3(otherNode.prev, newNode, otherNode, this);
                  }, "insertNodeBefore")
                }, {
                  key: "insertNodeAfter",
                  value: /* @__PURE__ */ __name(function insertNodeAfter(newNode, otherNode) {
                    return add3(otherNode, newNode, otherNode.next, this);
                  }, "insertNodeAfter")
                }, {
                  key: "push",
                  value: /* @__PURE__ */ __name(function push3(val) {
                    return add3(this.tail, nodeFrom(val), null, this);
                  }, "push")
                }, {
                  key: "unshift",
                  value: /* @__PURE__ */ __name(function unshift(val) {
                    return add3(null, nodeFrom(val), this.head, this);
                  }, "unshift")
                }, {
                  key: "remove",
                  value: /* @__PURE__ */ __name(function remove3(node2) {
                    return _remove(node2, this);
                  }, "remove")
                }, {
                  key: "pop",
                  value: /* @__PURE__ */ __name(function pop() {
                    return _remove(this.tail, this).value;
                  }, "pop")
                }, {
                  key: "popNode",
                  value: /* @__PURE__ */ __name(function popNode() {
                    return _remove(this.tail, this);
                  }, "popNode")
                }, {
                  key: "shift",
                  value: /* @__PURE__ */ __name(function shift2() {
                    return _remove(this.head, this).value;
                  }, "shift")
                }, {
                  key: "shiftNode",
                  value: /* @__PURE__ */ __name(function shiftNode() {
                    return _remove(this.head, this);
                  }, "shiftNode")
                }, {
                  key: "get_object_at",
                  value: /* @__PURE__ */ __name(function get_object_at(index) {
                    if (index <= this.length()) {
                      var i2 = 1;
                      var current = this.head;
                      while (i2 < index) {
                        current = current.next;
                        i2++;
                      }
                      return current.value;
                    }
                  }, "get_object_at")
                }, {
                  key: "set_object_at",
                  value: /* @__PURE__ */ __name(function set_object_at(index, value2) {
                    if (index <= this.length()) {
                      var i2 = 1;
                      var current = this.head;
                      while (i2 < index) {
                        current = current.next;
                        i2++;
                      }
                      current.value = value2;
                    }
                  }, "set_object_at")
                }]);
                return LinkedList2;
              })();
              module3.exports = LinkedList;
            }),
            /* 12 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function Point3(x5, y6, p3) {
                this.x = null;
                this.y = null;
                if (x5 == null && y6 == null && p3 == null) {
                  this.x = 0;
                  this.y = 0;
                } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) {
                  this.x = x5;
                  this.y = y6;
                } else if (x5.constructor.name == "Point" && y6 == null && p3 == null) {
                  p3 = x5;
                  this.x = p3.x;
                  this.y = p3.y;
                }
              }
              __name(Point3, "Point");
              Point3.prototype.getX = function() {
                return this.x;
              };
              Point3.prototype.getY = function() {
                return this.y;
              };
              Point3.prototype.getLocation = function() {
                return new Point3(this.x, this.y);
              };
              Point3.prototype.setLocation = function(x5, y6, p3) {
                if (x5.constructor.name == "Point" && y6 == null && p3 == null) {
                  p3 = x5;
                  this.setLocation(p3.x, p3.y);
                } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) {
                  if (parseInt(x5) == x5 && parseInt(y6) == y6) {
                    this.move(x5, y6);
                  } else {
                    this.x = Math.floor(x5 + 0.5);
                    this.y = Math.floor(y6 + 0.5);
                  }
                }
              };
              Point3.prototype.move = function(x5, y6) {
                this.x = x5;
                this.y = y6;
              };
              Point3.prototype.translate = function(dx, dy) {
                this.x += dx;
                this.y += dy;
              };
              Point3.prototype.equals = function(obj) {
                if (obj.constructor.name == "Point") {
                  var pt = obj;
                  return this.x == pt.x && this.y == pt.y;
                }
                return this == obj;
              };
              Point3.prototype.toString = function() {
                return new Point3().constructor.name + "[x=" + this.x + ",y=" + this.y + "]";
              };
              module3.exports = Point3;
            }),
            /* 13 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function RectangleD(x5, y6, width3, height2) {
                this.x = 0;
                this.y = 0;
                this.width = 0;
                this.height = 0;
                if (x5 != null && y6 != null && width3 != null && height2 != null) {
                  this.x = x5;
                  this.y = y6;
                  this.width = width3;
                  this.height = height2;
                }
              }
              __name(RectangleD, "RectangleD");
              RectangleD.prototype.getX = function() {
                return this.x;
              };
              RectangleD.prototype.setX = function(x5) {
                this.x = x5;
              };
              RectangleD.prototype.getY = function() {
                return this.y;
              };
              RectangleD.prototype.setY = function(y6) {
                this.y = y6;
              };
              RectangleD.prototype.getWidth = function() {
                return this.width;
              };
              RectangleD.prototype.setWidth = function(width3) {
                this.width = width3;
              };
              RectangleD.prototype.getHeight = function() {
                return this.height;
              };
              RectangleD.prototype.setHeight = function(height2) {
                this.height = height2;
              };
              RectangleD.prototype.getRight = function() {
                return this.x + this.width;
              };
              RectangleD.prototype.getBottom = function() {
                return this.y + this.height;
              };
              RectangleD.prototype.intersects = function(a2) {
                if (this.getRight() < a2.x) {
                  return false;
                }
                if (this.getBottom() < a2.y) {
                  return false;
                }
                if (a2.getRight() < this.x) {
                  return false;
                }
                if (a2.getBottom() < this.y) {
                  return false;
                }
                return true;
              };
              RectangleD.prototype.getCenterX = function() {
                return this.x + this.width / 2;
              };
              RectangleD.prototype.getMinX = function() {
                return this.getX();
              };
              RectangleD.prototype.getMaxX = function() {
                return this.getX() + this.width;
              };
              RectangleD.prototype.getCenterY = function() {
                return this.y + this.height / 2;
              };
              RectangleD.prototype.getMinY = function() {
                return this.getY();
              };
              RectangleD.prototype.getMaxY = function() {
                return this.getY() + this.height;
              };
              RectangleD.prototype.getWidthHalf = function() {
                return this.width / 2;
              };
              RectangleD.prototype.getHeightHalf = function() {
                return this.height / 2;
              };
              module3.exports = RectangleD;
            }),
            /* 14 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) {
                return typeof obj;
              } : function(obj) {
                return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
              };
              function UniqueIDGeneretor() {
              }
              __name(UniqueIDGeneretor, "UniqueIDGeneretor");
              UniqueIDGeneretor.lastID = 0;
              UniqueIDGeneretor.createID = function(obj) {
                if (UniqueIDGeneretor.isPrimitive(obj)) {
                  return obj;
                }
                if (obj.uniqueID != null) {
                  return obj.uniqueID;
                }
                obj.uniqueID = UniqueIDGeneretor.getString();
                UniqueIDGeneretor.lastID++;
                return obj.uniqueID;
              };
              UniqueIDGeneretor.getString = function(id41) {
                if (id41 == null) id41 = UniqueIDGeneretor.lastID;
                return "Object#" + id41;
              };
              UniqueIDGeneretor.isPrimitive = function(arg) {
                var type3 = typeof arg === "undefined" ? "undefined" : _typeof2(arg);
                return arg == null || type3 != "object" && type3 != "function";
              };
              module3.exports = UniqueIDGeneretor;
            }),
            /* 15 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function _toConsumableArray2(arr) {
                if (Array.isArray(arr)) {
                  for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) {
                    arr2[i2] = arr[i2];
                  }
                  return arr2;
                } else {
                  return Array.from(arr);
                }
              }
              __name(_toConsumableArray2, "_toConsumableArray");
              var LayoutConstants = __webpack_require__(0);
              var LGraphManager = __webpack_require__(6);
              var LNode = __webpack_require__(3);
              var LEdge = __webpack_require__(1);
              var LGraph = __webpack_require__(5);
              var PointD = __webpack_require__(4);
              var Transform2 = __webpack_require__(17);
              var Emitter2 = __webpack_require__(27);
              function Layout2(isRemoteUse) {
                Emitter2.call(this);
                this.layoutQuality = LayoutConstants.QUALITY;
                this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;
                this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;
                this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;
                this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;
                this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;
                this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;
                this.edgeToDummyNodes = /* @__PURE__ */ new Map();
                this.graphManager = new LGraphManager(this);
                this.isLayoutFinished = false;
                this.isSubLayout = false;
                this.isRemoteUse = false;
                if (isRemoteUse != null) {
                  this.isRemoteUse = isRemoteUse;
                }
              }
              __name(Layout2, "Layout");
              Layout2.RANDOM_SEED = 1;
              Layout2.prototype = Object.create(Emitter2.prototype);
              Layout2.prototype.getGraphManager = function() {
                return this.graphManager;
              };
              Layout2.prototype.getAllNodes = function() {
                return this.graphManager.getAllNodes();
              };
              Layout2.prototype.getAllEdges = function() {
                return this.graphManager.getAllEdges();
              };
              Layout2.prototype.getAllNodesToApplyGravitation = function() {
                return this.graphManager.getAllNodesToApplyGravitation();
              };
              Layout2.prototype.newGraphManager = function() {
                var gm = new LGraphManager(this);
                this.graphManager = gm;
                return gm;
              };
              Layout2.prototype.newGraph = function(vGraph) {
                return new LGraph(null, this.graphManager, vGraph);
              };
              Layout2.prototype.newNode = function(vNode) {
                return new LNode(this.graphManager, vNode);
              };
              Layout2.prototype.newEdge = function(vEdge) {
                return new LEdge(null, null, vEdge);
              };
              Layout2.prototype.checkLayoutSuccess = function() {
                return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();
              };
              Layout2.prototype.runLayout = function() {
                this.isLayoutFinished = false;
                if (this.tilingPreLayout) {
                  this.tilingPreLayout();
                }
                this.initParameters();
                var isLayoutSuccessfull;
                if (this.checkLayoutSuccess()) {
                  isLayoutSuccessfull = false;
                } else {
                  isLayoutSuccessfull = this.layout();
                }
                if (LayoutConstants.ANIMATE === "during") {
                  return false;
                }
                if (isLayoutSuccessfull) {
                  if (!this.isSubLayout) {
                    this.doPostLayout();
                  }
                }
                if (this.tilingPostLayout) {
                  this.tilingPostLayout();
                }
                this.isLayoutFinished = true;
                return isLayoutSuccessfull;
              };
              Layout2.prototype.doPostLayout = function() {
                if (!this.incremental) {
                  this.transform();
                }
                this.update();
              };
              Layout2.prototype.update2 = function() {
                if (this.createBendsAsNeeded) {
                  this.createBendpointsFromDummyNodes();
                  this.graphManager.resetAllEdges();
                }
                if (!this.isRemoteUse) {
                  var edge;
                  var allEdges = this.graphManager.getAllEdges();
                  for (var i2 = 0; i2 < allEdges.length; i2++) {
                    edge = allEdges[i2];
                  }
                  var node2;
                  var nodes5 = this.graphManager.getRoot().getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    node2 = nodes5[i2];
                  }
                  this.update(this.graphManager.getRoot());
                }
              };
              Layout2.prototype.update = function(obj) {
                if (obj == null) {
                  this.update2();
                } else if (obj instanceof LNode) {
                  var node2 = obj;
                  if (node2.getChild() != null) {
                    var nodes5 = node2.getChild().getNodes();
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      update(nodes5[i2]);
                    }
                  }
                  if (node2.vGraphObject != null) {
                    var vNode = node2.vGraphObject;
                    vNode.update(node2);
                  }
                } else if (obj instanceof LEdge) {
                  var edge = obj;
                  if (edge.vGraphObject != null) {
                    var vEdge = edge.vGraphObject;
                    vEdge.update(edge);
                  }
                } else if (obj instanceof LGraph) {
                  var graph = obj;
                  if (graph.vGraphObject != null) {
                    var vGraph = graph.vGraphObject;
                    vGraph.update(graph);
                  }
                }
              };
              Layout2.prototype.initParameters = function() {
                if (!this.isSubLayout) {
                  this.layoutQuality = LayoutConstants.QUALITY;
                  this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;
                  this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;
                  this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;
                  this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;
                  this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;
                  this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;
                }
                if (this.animationDuringLayout) {
                  this.animationOnLayout = false;
                }
              };
              Layout2.prototype.transform = function(newLeftTop) {
                if (newLeftTop == void 0) {
                  this.transform(new PointD(0, 0));
                } else {
                  var trans = new Transform2();
                  var leftTop = this.graphManager.getRoot().updateLeftTop();
                  if (leftTop != null) {
                    trans.setWorldOrgX(newLeftTop.x);
                    trans.setWorldOrgY(newLeftTop.y);
                    trans.setDeviceOrgX(leftTop.x);
                    trans.setDeviceOrgY(leftTop.y);
                    var nodes5 = this.getAllNodes();
                    var node2;
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      node2 = nodes5[i2];
                      node2.transform(trans);
                    }
                  }
                }
              };
              Layout2.prototype.positionNodesRandomly = function(graph) {
                if (graph == void 0) {
                  this.positionNodesRandomly(this.getGraphManager().getRoot());
                  this.getGraphManager().getRoot().updateBounds(true);
                } else {
                  var lNode;
                  var childGraph;
                  var nodes5 = graph.getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    lNode = nodes5[i2];
                    childGraph = lNode.getChild();
                    if (childGraph == null) {
                      lNode.scatter();
                    } else if (childGraph.getNodes().length == 0) {
                      lNode.scatter();
                    } else {
                      this.positionNodesRandomly(childGraph);
                      lNode.updateBounds();
                    }
                  }
                }
              };
              Layout2.prototype.getFlatForest = function() {
                var flatForest = [];
                var isForest = true;
                var allNodes = this.graphManager.getRoot().getNodes();
                var isFlat = true;
                for (var i2 = 0; i2 < allNodes.length; i2++) {
                  if (allNodes[i2].getChild() != null) {
                    isFlat = false;
                  }
                }
                if (!isFlat) {
                  return flatForest;
                }
                var visited = /* @__PURE__ */ new Set();
                var toBeVisited = [];
                var parents3 = /* @__PURE__ */ new Map();
                var unProcessedNodes = [];
                unProcessedNodes = unProcessedNodes.concat(allNodes);
                while (unProcessedNodes.length > 0 && isForest) {
                  toBeVisited.push(unProcessedNodes[0]);
                  while (toBeVisited.length > 0 && isForest) {
                    var currentNode = toBeVisited[0];
                    toBeVisited.splice(0, 1);
                    visited.add(currentNode);
                    var neighborEdges = currentNode.getEdges();
                    for (var i2 = 0; i2 < neighborEdges.length; i2++) {
                      var currentNeighbor = neighborEdges[i2].getOtherEnd(currentNode);
                      if (parents3.get(currentNode) != currentNeighbor) {
                        if (!visited.has(currentNeighbor)) {
                          toBeVisited.push(currentNeighbor);
                          parents3.set(currentNeighbor, currentNode);
                        } else {
                          isForest = false;
                          break;
                        }
                      }
                    }
                  }
                  if (!isForest) {
                    flatForest = [];
                  } else {
                    var temp = [].concat(_toConsumableArray2(visited));
                    flatForest.push(temp);
                    for (var i2 = 0; i2 < temp.length; i2++) {
                      var value2 = temp[i2];
                      var index = unProcessedNodes.indexOf(value2);
                      if (index > -1) {
                        unProcessedNodes.splice(index, 1);
                      }
                    }
                    visited = /* @__PURE__ */ new Set();
                    parents3 = /* @__PURE__ */ new Map();
                  }
                }
                return flatForest;
              };
              Layout2.prototype.createDummyNodesForBendpoints = function(edge) {
                var dummyNodes = [];
                var prev2 = edge.source;
                var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);
                for (var i2 = 0; i2 < edge.bendpoints.length; i2++) {
                  var dummyNode = this.newNode(null);
                  dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));
                  graph.add(dummyNode);
                  var dummyEdge = this.newEdge(null);
                  this.graphManager.add(dummyEdge, prev2, dummyNode);
                  dummyNodes.add(dummyNode);
                  prev2 = dummyNode;
                }
                var dummyEdge = this.newEdge(null);
                this.graphManager.add(dummyEdge, prev2, edge.target);
                this.edgeToDummyNodes.set(edge, dummyNodes);
                if (edge.isInterGraph()) {
                  this.graphManager.remove(edge);
                } else {
                  graph.remove(edge);
                }
                return dummyNodes;
              };
              Layout2.prototype.createBendpointsFromDummyNodes = function() {
                var edges3 = [];
                edges3 = edges3.concat(this.graphManager.getAllEdges());
                edges3 = [].concat(_toConsumableArray2(this.edgeToDummyNodes.keys())).concat(edges3);
                for (var k2 = 0; k2 < edges3.length; k2++) {
                  var lEdge = edges3[k2];
                  if (lEdge.bendpoints.length > 0) {
                    var path4 = this.edgeToDummyNodes.get(lEdge);
                    for (var i2 = 0; i2 < path4.length; i2++) {
                      var dummyNode = path4[i2];
                      var p3 = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());
                      var ebp = lEdge.bendpoints.get(i2);
                      ebp.x = p3.x;
                      ebp.y = p3.y;
                      dummyNode.getOwner().remove(dummyNode);
                    }
                    this.graphManager.add(lEdge, lEdge.source, lEdge.target);
                  }
                }
              };
              Layout2.transform = function(sliderValue, defaultValue, minDiv, maxMul) {
                if (minDiv != void 0 && maxMul != void 0) {
                  var value2 = defaultValue;
                  if (sliderValue <= 50) {
                    var minValue = defaultValue / minDiv;
                    value2 -= (defaultValue - minValue) / 50 * (50 - sliderValue);
                  } else {
                    var maxValue = defaultValue * maxMul;
                    value2 += (maxValue - defaultValue) / 50 * (sliderValue - 50);
                  }
                  return value2;
                } else {
                  var a2, b3;
                  if (sliderValue <= 50) {
                    a2 = 9 * defaultValue / 500;
                    b3 = defaultValue / 10;
                  } else {
                    a2 = 9 * defaultValue / 50;
                    b3 = -8 * defaultValue;
                  }
                  return a2 * sliderValue + b3;
                }
              };
              Layout2.findCenterOfTree = function(nodes5) {
                var list = [];
                list = list.concat(nodes5);
                var removedNodes = [];
                var remainingDegrees = /* @__PURE__ */ new Map();
                var foundCenter = false;
                var centerNode = null;
                if (list.length == 1 || list.length == 2) {
                  foundCenter = true;
                  centerNode = list[0];
                }
                for (var i2 = 0; i2 < list.length; i2++) {
                  var node2 = list[i2];
                  var degree = node2.getNeighborsList().size;
                  remainingDegrees.set(node2, node2.getNeighborsList().size);
                  if (degree == 1) {
                    removedNodes.push(node2);
                  }
                }
                var tempList = [];
                tempList = tempList.concat(removedNodes);
                while (!foundCenter) {
                  var tempList2 = [];
                  tempList2 = tempList2.concat(tempList);
                  tempList = [];
                  for (var i2 = 0; i2 < list.length; i2++) {
                    var node2 = list[i2];
                    var index = list.indexOf(node2);
                    if (index >= 0) {
                      list.splice(index, 1);
                    }
                    var neighbours = node2.getNeighborsList();
                    neighbours.forEach(function(neighbour) {
                      if (removedNodes.indexOf(neighbour) < 0) {
                        var otherDegree = remainingDegrees.get(neighbour);
                        var newDegree = otherDegree - 1;
                        if (newDegree == 1) {
                          tempList.push(neighbour);
                        }
                        remainingDegrees.set(neighbour, newDegree);
                      }
                    });
                  }
                  removedNodes = removedNodes.concat(tempList);
                  if (list.length == 1 || list.length == 2) {
                    foundCenter = true;
                    centerNode = list[0];
                  }
                }
                return centerNode;
              };
              Layout2.prototype.setGraphManager = function(gm) {
                this.graphManager = gm;
              };
              module3.exports = Layout2;
            }),
            /* 16 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function RandomSeed() {
              }
              __name(RandomSeed, "RandomSeed");
              RandomSeed.seed = 1;
              RandomSeed.x = 0;
              RandomSeed.nextDouble = function() {
                RandomSeed.x = Math.sin(RandomSeed.seed++) * 1e4;
                return RandomSeed.x - Math.floor(RandomSeed.x);
              };
              module3.exports = RandomSeed;
            }),
            /* 17 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var PointD = __webpack_require__(4);
              function Transform2(x5, y6) {
                this.lworldOrgX = 0;
                this.lworldOrgY = 0;
                this.ldeviceOrgX = 0;
                this.ldeviceOrgY = 0;
                this.lworldExtX = 1;
                this.lworldExtY = 1;
                this.ldeviceExtX = 1;
                this.ldeviceExtY = 1;
              }
              __name(Transform2, "Transform");
              Transform2.prototype.getWorldOrgX = function() {
                return this.lworldOrgX;
              };
              Transform2.prototype.setWorldOrgX = function(wox) {
                this.lworldOrgX = wox;
              };
              Transform2.prototype.getWorldOrgY = function() {
                return this.lworldOrgY;
              };
              Transform2.prototype.setWorldOrgY = function(woy) {
                this.lworldOrgY = woy;
              };
              Transform2.prototype.getWorldExtX = function() {
                return this.lworldExtX;
              };
              Transform2.prototype.setWorldExtX = function(wex) {
                this.lworldExtX = wex;
              };
              Transform2.prototype.getWorldExtY = function() {
                return this.lworldExtY;
              };
              Transform2.prototype.setWorldExtY = function(wey) {
                this.lworldExtY = wey;
              };
              Transform2.prototype.getDeviceOrgX = function() {
                return this.ldeviceOrgX;
              };
              Transform2.prototype.setDeviceOrgX = function(dox) {
                this.ldeviceOrgX = dox;
              };
              Transform2.prototype.getDeviceOrgY = function() {
                return this.ldeviceOrgY;
              };
              Transform2.prototype.setDeviceOrgY = function(doy) {
                this.ldeviceOrgY = doy;
              };
              Transform2.prototype.getDeviceExtX = function() {
                return this.ldeviceExtX;
              };
              Transform2.prototype.setDeviceExtX = function(dex) {
                this.ldeviceExtX = dex;
              };
              Transform2.prototype.getDeviceExtY = function() {
                return this.ldeviceExtY;
              };
              Transform2.prototype.setDeviceExtY = function(dey) {
                this.ldeviceExtY = dey;
              };
              Transform2.prototype.transformX = function(x5) {
                var xDevice = 0;
                var worldExtX = this.lworldExtX;
                if (worldExtX != 0) {
                  xDevice = this.ldeviceOrgX + (x5 - this.lworldOrgX) * this.ldeviceExtX / worldExtX;
                }
                return xDevice;
              };
              Transform2.prototype.transformY = function(y6) {
                var yDevice = 0;
                var worldExtY = this.lworldExtY;
                if (worldExtY != 0) {
                  yDevice = this.ldeviceOrgY + (y6 - this.lworldOrgY) * this.ldeviceExtY / worldExtY;
                }
                return yDevice;
              };
              Transform2.prototype.inverseTransformX = function(x5) {
                var xWorld = 0;
                var deviceExtX = this.ldeviceExtX;
                if (deviceExtX != 0) {
                  xWorld = this.lworldOrgX + (x5 - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;
                }
                return xWorld;
              };
              Transform2.prototype.inverseTransformY = function(y6) {
                var yWorld = 0;
                var deviceExtY = this.ldeviceExtY;
                if (deviceExtY != 0) {
                  yWorld = this.lworldOrgY + (y6 - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;
                }
                return yWorld;
              };
              Transform2.prototype.inverseTransformPoint = function(inPoint) {
                var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));
                return outPoint;
              };
              module3.exports = Transform2;
            }),
            /* 18 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function _toConsumableArray2(arr) {
                if (Array.isArray(arr)) {
                  for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) {
                    arr2[i2] = arr[i2];
                  }
                  return arr2;
                } else {
                  return Array.from(arr);
                }
              }
              __name(_toConsumableArray2, "_toConsumableArray");
              var Layout2 = __webpack_require__(15);
              var FDLayoutConstants = __webpack_require__(7);
              var LayoutConstants = __webpack_require__(0);
              var IGeometry = __webpack_require__(8);
              var IMath = __webpack_require__(9);
              function FDLayout() {
                Layout2.call(this);
                this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;
                this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;
                this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;
                this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;
                this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;
                this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;
                this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;
                this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;
                this.displacementThresholdPerNode = 3 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;
                this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;
                this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;
                this.totalDisplacement = 0;
                this.oldTotalDisplacement = 0;
                this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;
              }
              __name(FDLayout, "FDLayout");
              FDLayout.prototype = Object.create(Layout2.prototype);
              for (var prop in Layout2) {
                FDLayout[prop] = Layout2[prop];
              }
              FDLayout.prototype.initParameters = function() {
                Layout2.prototype.initParameters.call(this, arguments);
                this.totalIterations = 0;
                this.notAnimatedIterations = 0;
                this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;
                this.grid = [];
              };
              FDLayout.prototype.calcIdealEdgeLengths = function() {
                var edge;
                var lcaDepth;
                var source;
                var target;
                var sizeOfSourceInLca;
                var sizeOfTargetInLca;
                var allEdges = this.getGraphManager().getAllEdges();
                for (var i2 = 0; i2 < allEdges.length; i2++) {
                  edge = allEdges[i2];
                  edge.idealLength = this.idealEdgeLength;
                  if (edge.isInterGraph) {
                    source = edge.getSource();
                    target = edge.getTarget();
                    sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();
                    sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();
                    if (this.useSmartIdealEdgeLengthCalculation) {
                      edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;
                    }
                    lcaDepth = edge.getLca().getInclusionTreeDepth();
                    edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);
                  }
                }
              };
              FDLayout.prototype.initSpringEmbedder = function() {
                var s2 = this.getAllNodes().length;
                if (this.incremental) {
                  if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {
                    this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));
                  }
                  this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;
                } else {
                  if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {
                    this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1 - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));
                  } else {
                    this.coolingFactor = 1;
                  }
                  this.initialCoolingFactor = this.coolingFactor;
                  this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;
                }
                this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);
                this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;
                this.repulsionRange = this.calcRepulsionRange();
              };
              FDLayout.prototype.calcSpringForces = function() {
                var lEdges = this.getAllEdges();
                var edge;
                for (var i2 = 0; i2 < lEdges.length; i2++) {
                  edge = lEdges[i2];
                  this.calcSpringForce(edge, edge.idealLength);
                }
              };
              FDLayout.prototype.calcRepulsionForces = function() {
                var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
                var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
                var i2, j3;
                var nodeA, nodeB;
                var lNodes = this.getAllNodes();
                var processedNodeSet;
                if (this.useFRGridVariant) {
                  if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {
                    this.updateGrid();
                  }
                  processedNodeSet = /* @__PURE__ */ new Set();
                  for (i2 = 0; i2 < lNodes.length; i2++) {
                    nodeA = lNodes[i2];
                    this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);
                    processedNodeSet.add(nodeA);
                  }
                } else {
                  for (i2 = 0; i2 < lNodes.length; i2++) {
                    nodeA = lNodes[i2];
                    for (j3 = i2 + 1; j3 < lNodes.length; j3++) {
                      nodeB = lNodes[j3];
                      if (nodeA.getOwner() != nodeB.getOwner()) {
                        continue;
                      }
                      this.calcRepulsionForce(nodeA, nodeB);
                    }
                  }
                }
              };
              FDLayout.prototype.calcGravitationalForces = function() {
                var node2;
                var lNodes = this.getAllNodesToApplyGravitation();
                for (var i2 = 0; i2 < lNodes.length; i2++) {
                  node2 = lNodes[i2];
                  this.calcGravitationalForce(node2);
                }
              };
              FDLayout.prototype.moveNodes = function() {
                var lNodes = this.getAllNodes();
                var node2;
                for (var i2 = 0; i2 < lNodes.length; i2++) {
                  node2 = lNodes[i2];
                  node2.move();
                }
              };
              FDLayout.prototype.calcSpringForce = function(edge, idealLength) {
                var sourceNode = edge.getSource();
                var targetNode = edge.getTarget();
                var length2;
                var springForce;
                var springForceX;
                var springForceY;
                if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {
                  edge.updateLengthSimple();
                } else {
                  edge.updateLength();
                  if (edge.isOverlapingSourceAndTarget) {
                    return;
                  }
                }
                length2 = edge.getLength();
                if (length2 == 0) return;
                springForce = this.springConstant * (length2 - idealLength);
                springForceX = springForce * (edge.lengthX / length2);
                springForceY = springForce * (edge.lengthY / length2);
                sourceNode.springForceX += springForceX;
                sourceNode.springForceY += springForceY;
                targetNode.springForceX -= springForceX;
                targetNode.springForceY -= springForceY;
              };
              FDLayout.prototype.calcRepulsionForce = function(nodeA, nodeB) {
                var rectA = nodeA.getRect();
                var rectB = nodeB.getRect();
                var overlapAmount = new Array(2);
                var clipPoints = new Array(4);
                var distanceX;
                var distanceY;
                var distanceSquared;
                var distance3;
                var repulsionForce;
                var repulsionForceX;
                var repulsionForceY;
                if (rectA.intersects(rectB)) {
                  IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2);
                  repulsionForceX = 2 * overlapAmount[0];
                  repulsionForceY = 2 * overlapAmount[1];
                  var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);
                  nodeA.repulsionForceX -= childrenConstant * repulsionForceX;
                  nodeA.repulsionForceY -= childrenConstant * repulsionForceY;
                  nodeB.repulsionForceX += childrenConstant * repulsionForceX;
                  nodeB.repulsionForceY += childrenConstant * repulsionForceY;
                } else {
                  if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) {
                    distanceX = rectB.getCenterX() - rectA.getCenterX();
                    distanceY = rectB.getCenterY() - rectA.getCenterY();
                  } else {
                    IGeometry.getIntersection(rectA, rectB, clipPoints);
                    distanceX = clipPoints[2] - clipPoints[0];
                    distanceY = clipPoints[3] - clipPoints[1];
                  }
                  if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {
                    distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;
                  }
                  if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {
                    distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;
                  }
                  distanceSquared = distanceX * distanceX + distanceY * distanceY;
                  distance3 = Math.sqrt(distanceSquared);
                  repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;
                  repulsionForceX = repulsionForce * distanceX / distance3;
                  repulsionForceY = repulsionForce * distanceY / distance3;
                  nodeA.repulsionForceX -= repulsionForceX;
                  nodeA.repulsionForceY -= repulsionForceY;
                  nodeB.repulsionForceX += repulsionForceX;
                  nodeB.repulsionForceY += repulsionForceY;
                }
              };
              FDLayout.prototype.calcGravitationalForce = function(node2) {
                var ownerGraph;
                var ownerCenterX;
                var ownerCenterY;
                var distanceX;
                var distanceY;
                var absDistanceX;
                var absDistanceY;
                var estimatedSize;
                ownerGraph = node2.getOwner();
                ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;
                ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;
                distanceX = node2.getCenterX() - ownerCenterX;
                distanceY = node2.getCenterY() - ownerCenterY;
                absDistanceX = Math.abs(distanceX) + node2.getWidth() / 2;
                absDistanceY = Math.abs(distanceY) + node2.getHeight() / 2;
                if (node2.getOwner() == this.graphManager.getRoot()) {
                  estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;
                  if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {
                    node2.gravitationForceX = -this.gravityConstant * distanceX;
                    node2.gravitationForceY = -this.gravityConstant * distanceY;
                  }
                } else {
                  estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;
                  if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {
                    node2.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;
                    node2.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;
                  }
                }
              };
              FDLayout.prototype.isConverged = function() {
                var converged;
                var oscilating = false;
                if (this.totalIterations > this.maxIterations / 3) {
                  oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;
                }
                converged = this.totalDisplacement < this.totalDisplacementThreshold;
                this.oldTotalDisplacement = this.totalDisplacement;
                return converged || oscilating;
              };
              FDLayout.prototype.animate = function() {
                if (this.animationDuringLayout && !this.isSubLayout) {
                  if (this.notAnimatedIterations == this.animationPeriod) {
                    this.update();
                    this.notAnimatedIterations = 0;
                  } else {
                    this.notAnimatedIterations++;
                  }
                }
              };
              FDLayout.prototype.calcNoOfChildrenForAllNodes = function() {
                var node2;
                var allNodes = this.graphManager.getAllNodes();
                for (var i2 = 0; i2 < allNodes.length; i2++) {
                  node2 = allNodes[i2];
                  node2.noOfChildren = node2.getNoOfChildren();
                }
              };
              FDLayout.prototype.calcGrid = function(graph) {
                var sizeX = 0;
                var sizeY = 0;
                sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));
                sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));
                var grid = new Array(sizeX);
                for (var i2 = 0; i2 < sizeX; i2++) {
                  grid[i2] = new Array(sizeY);
                }
                for (var i2 = 0; i2 < sizeX; i2++) {
                  for (var j3 = 0; j3 < sizeY; j3++) {
                    grid[i2][j3] = new Array();
                  }
                }
                return grid;
              };
              FDLayout.prototype.addNodeToGrid = function(v3, left3, top2) {
                var startX2 = 0;
                var finishX = 0;
                var startY2 = 0;
                var finishY = 0;
                startX2 = parseInt(Math.floor((v3.getRect().x - left3) / this.repulsionRange));
                finishX = parseInt(Math.floor((v3.getRect().width + v3.getRect().x - left3) / this.repulsionRange));
                startY2 = parseInt(Math.floor((v3.getRect().y - top2) / this.repulsionRange));
                finishY = parseInt(Math.floor((v3.getRect().height + v3.getRect().y - top2) / this.repulsionRange));
                for (var i2 = startX2; i2 <= finishX; i2++) {
                  for (var j3 = startY2; j3 <= finishY; j3++) {
                    this.grid[i2][j3].push(v3);
                    v3.setGridCoordinates(startX2, finishX, startY2, finishY);
                  }
                }
              };
              FDLayout.prototype.updateGrid = function() {
                var i2;
                var nodeA;
                var lNodes = this.getAllNodes();
                this.grid = this.calcGrid(this.graphManager.getRoot());
                for (i2 = 0; i2 < lNodes.length; i2++) {
                  nodeA = lNodes[i2];
                  this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());
                }
              };
              FDLayout.prototype.calculateRepulsionForceOfANode = function(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {
                if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {
                  var surrounding = /* @__PURE__ */ new Set();
                  nodeA.surrounding = new Array();
                  var nodeB;
                  var grid = this.grid;
                  for (var i2 = nodeA.startX - 1; i2 < nodeA.finishX + 2; i2++) {
                    for (var j3 = nodeA.startY - 1; j3 < nodeA.finishY + 2; j3++) {
                      if (!(i2 < 0 || j3 < 0 || i2 >= grid.length || j3 >= grid[0].length)) {
                        for (var k2 = 0; k2 < grid[i2][j3].length; k2++) {
                          nodeB = grid[i2][j3][k2];
                          if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {
                            continue;
                          }
                          if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {
                            var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);
                            var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);
                            if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {
                              surrounding.add(nodeB);
                            }
                          }
                        }
                      }
                    }
                  }
                  nodeA.surrounding = [].concat(_toConsumableArray2(surrounding));
                }
                for (i2 = 0; i2 < nodeA.surrounding.length; i2++) {
                  this.calcRepulsionForce(nodeA, nodeA.surrounding[i2]);
                }
              };
              FDLayout.prototype.calcRepulsionRange = function() {
                return 0;
              };
              module3.exports = FDLayout;
            }),
            /* 19 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LEdge = __webpack_require__(1);
              var FDLayoutConstants = __webpack_require__(7);
              function FDLayoutEdge(source, target, vEdge) {
                LEdge.call(this, source, target, vEdge);
                this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;
              }
              __name(FDLayoutEdge, "FDLayoutEdge");
              FDLayoutEdge.prototype = Object.create(LEdge.prototype);
              for (var prop in LEdge) {
                FDLayoutEdge[prop] = LEdge[prop];
              }
              module3.exports = FDLayoutEdge;
            }),
            /* 20 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LNode = __webpack_require__(3);
              function FDLayoutNode(gm, loc, size4, vNode) {
                LNode.call(this, gm, loc, size4, vNode);
                this.springForceX = 0;
                this.springForceY = 0;
                this.repulsionForceX = 0;
                this.repulsionForceY = 0;
                this.gravitationForceX = 0;
                this.gravitationForceY = 0;
                this.displacementX = 0;
                this.displacementY = 0;
                this.startX = 0;
                this.finishX = 0;
                this.startY = 0;
                this.finishY = 0;
                this.surrounding = [];
              }
              __name(FDLayoutNode, "FDLayoutNode");
              FDLayoutNode.prototype = Object.create(LNode.prototype);
              for (var prop in LNode) {
                FDLayoutNode[prop] = LNode[prop];
              }
              FDLayoutNode.prototype.setGridCoordinates = function(_startX, _finishX, _startY, _finishY) {
                this.startX = _startX;
                this.finishX = _finishX;
                this.startY = _startY;
                this.finishY = _finishY;
              };
              module3.exports = FDLayoutNode;
            }),
            /* 21 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function DimensionD2(width3, height2) {
                this.width = 0;
                this.height = 0;
                if (width3 !== null && height2 !== null) {
                  this.height = height2;
                  this.width = width3;
                }
              }
              __name(DimensionD2, "DimensionD");
              DimensionD2.prototype.getWidth = function() {
                return this.width;
              };
              DimensionD2.prototype.setWidth = function(width3) {
                this.width = width3;
              };
              DimensionD2.prototype.getHeight = function() {
                return this.height;
              };
              DimensionD2.prototype.setHeight = function(height2) {
                this.height = height2;
              };
              module3.exports = DimensionD2;
            }),
            /* 22 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var UniqueIDGeneretor = __webpack_require__(14);
              function HashMap() {
                this.map = {};
                this.keys = [];
              }
              __name(HashMap, "HashMap");
              HashMap.prototype.put = function(key, value2) {
                var theId = UniqueIDGeneretor.createID(key);
                if (!this.contains(theId)) {
                  this.map[theId] = value2;
                  this.keys.push(key);
                }
              };
              HashMap.prototype.contains = function(key) {
                var theId = UniqueIDGeneretor.createID(key);
                return this.map[key] != null;
              };
              HashMap.prototype.get = function(key) {
                var theId = UniqueIDGeneretor.createID(key);
                return this.map[theId];
              };
              HashMap.prototype.keySet = function() {
                return this.keys;
              };
              module3.exports = HashMap;
            }),
            /* 23 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var UniqueIDGeneretor = __webpack_require__(14);
              function HashSet() {
                this.set = {};
              }
              __name(HashSet, "HashSet");
              ;
              HashSet.prototype.add = function(obj) {
                var theId = UniqueIDGeneretor.createID(obj);
                if (!this.contains(theId)) this.set[theId] = obj;
              };
              HashSet.prototype.remove = function(obj) {
                delete this.set[UniqueIDGeneretor.createID(obj)];
              };
              HashSet.prototype.clear = function() {
                this.set = {};
              };
              HashSet.prototype.contains = function(obj) {
                return this.set[UniqueIDGeneretor.createID(obj)] == obj;
              };
              HashSet.prototype.isEmpty = function() {
                return this.size() === 0;
              };
              HashSet.prototype.size = function() {
                return Object.keys(this.set).length;
              };
              HashSet.prototype.addAllTo = function(list) {
                var keys3 = Object.keys(this.set);
                var length2 = keys3.length;
                for (var i2 = 0; i2 < length2; i2++) {
                  list.push(this.set[keys3[i2]]);
                }
              };
              HashSet.prototype.size = function() {
                return Object.keys(this.set).length;
              };
              HashSet.prototype.addAll = function(list) {
                var s2 = list.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var v3 = list[i2];
                  this.add(v3);
                }
              };
              module3.exports = HashSet;
            }),
            /* 24 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _createClass2 = /* @__PURE__ */ (function() {
                function defineProperties(target, props) {
                  for (var i2 = 0; i2 < props.length; i2++) {
                    var descriptor = props[i2];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) descriptor.writable = true;
                    Object.defineProperty(target, descriptor.key, descriptor);
                  }
                }
                __name(defineProperties, "defineProperties");
                return function(Constructor, protoProps, staticProps) {
                  if (protoProps) defineProperties(Constructor.prototype, protoProps);
                  if (staticProps) defineProperties(Constructor, staticProps);
                  return Constructor;
                };
              })();
              function _classCallCheck2(instance2, Constructor) {
                if (!(instance2 instanceof Constructor)) {
                  throw new TypeError("Cannot call a class as a function");
                }
              }
              __name(_classCallCheck2, "_classCallCheck");
              var LinkedList = __webpack_require__(11);
              var Quicksort = (function() {
                function Quicksort2(A2, compareFunction) {
                  _classCallCheck2(this, Quicksort2);
                  if (compareFunction !== null || compareFunction !== void 0) this.compareFunction = this._defaultCompareFunction;
                  var length2 = void 0;
                  if (A2 instanceof LinkedList) length2 = A2.size();
                  else length2 = A2.length;
                  this._quicksort(A2, 0, length2 - 1);
                }
                __name(Quicksort2, "Quicksort");
                _createClass2(Quicksort2, [{
                  key: "_quicksort",
                  value: /* @__PURE__ */ __name(function _quicksort(A2, p3, r2) {
                    if (p3 < r2) {
                      var q3 = this._partition(A2, p3, r2);
                      this._quicksort(A2, p3, q3);
                      this._quicksort(A2, q3 + 1, r2);
                    }
                  }, "_quicksort")
                }, {
                  key: "_partition",
                  value: /* @__PURE__ */ __name(function _partition(A2, p3, r2) {
                    var x5 = this._get(A2, p3);
                    var i2 = p3;
                    var j3 = r2;
                    while (true) {
                      while (this.compareFunction(x5, this._get(A2, j3))) {
                        j3--;
                      }
                      while (this.compareFunction(this._get(A2, i2), x5)) {
                        i2++;
                      }
                      if (i2 < j3) {
                        this._swap(A2, i2, j3);
                        i2++;
                        j3--;
                      } else return j3;
                    }
                  }, "_partition")
                }, {
                  key: "_get",
                  value: /* @__PURE__ */ __name(function _get(object3, index) {
                    if (object3 instanceof LinkedList) return object3.get_object_at(index);
                    else return object3[index];
                  }, "_get")
                }, {
                  key: "_set",
                  value: /* @__PURE__ */ __name(function _set(object3, index, value2) {
                    if (object3 instanceof LinkedList) object3.set_object_at(index, value2);
                    else object3[index] = value2;
                  }, "_set")
                }, {
                  key: "_swap",
                  value: /* @__PURE__ */ __name(function _swap(A2, i2, j3) {
                    var temp = this._get(A2, i2);
                    this._set(A2, i2, this._get(A2, j3));
                    this._set(A2, j3, temp);
                  }, "_swap")
                }, {
                  key: "_defaultCompareFunction",
                  value: /* @__PURE__ */ __name(function _defaultCompareFunction(a2, b3) {
                    return b3 > a2;
                  }, "_defaultCompareFunction")
                }]);
                return Quicksort2;
              })();
              module3.exports = Quicksort;
            }),
            /* 25 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _createClass2 = /* @__PURE__ */ (function() {
                function defineProperties(target, props) {
                  for (var i2 = 0; i2 < props.length; i2++) {
                    var descriptor = props[i2];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) descriptor.writable = true;
                    Object.defineProperty(target, descriptor.key, descriptor);
                  }
                }
                __name(defineProperties, "defineProperties");
                return function(Constructor, protoProps, staticProps) {
                  if (protoProps) defineProperties(Constructor.prototype, protoProps);
                  if (staticProps) defineProperties(Constructor, staticProps);
                  return Constructor;
                };
              })();
              function _classCallCheck2(instance2, Constructor) {
                if (!(instance2 instanceof Constructor)) {
                  throw new TypeError("Cannot call a class as a function");
                }
              }
              __name(_classCallCheck2, "_classCallCheck");
              var NeedlemanWunsch = (function() {
                function NeedlemanWunsch2(sequence1, sequence2) {
                  var match_score = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1;
                  var mismatch_penalty = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : -1;
                  var gap_penalty = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : -1;
                  _classCallCheck2(this, NeedlemanWunsch2);
                  this.sequence1 = sequence1;
                  this.sequence2 = sequence2;
                  this.match_score = match_score;
                  this.mismatch_penalty = mismatch_penalty;
                  this.gap_penalty = gap_penalty;
                  this.iMax = sequence1.length + 1;
                  this.jMax = sequence2.length + 1;
                  this.grid = new Array(this.iMax);
                  for (var i2 = 0; i2 < this.iMax; i2++) {
                    this.grid[i2] = new Array(this.jMax);
                    for (var j3 = 0; j3 < this.jMax; j3++) {
                      this.grid[i2][j3] = 0;
                    }
                  }
                  this.tracebackGrid = new Array(this.iMax);
                  for (var _i = 0; _i < this.iMax; _i++) {
                    this.tracebackGrid[_i] = new Array(this.jMax);
                    for (var _j = 0; _j < this.jMax; _j++) {
                      this.tracebackGrid[_i][_j] = [null, null, null];
                    }
                  }
                  this.alignments = [];
                  this.score = -1;
                  this.computeGrids();
                }
                __name(NeedlemanWunsch2, "NeedlemanWunsch");
                _createClass2(NeedlemanWunsch2, [{
                  key: "getScore",
                  value: /* @__PURE__ */ __name(function getScore() {
                    return this.score;
                  }, "getScore")
                }, {
                  key: "getAlignments",
                  value: /* @__PURE__ */ __name(function getAlignments2() {
                    return this.alignments;
                  }, "getAlignments")
                  // Main dynamic programming procedure
                }, {
                  key: "computeGrids",
                  value: /* @__PURE__ */ __name(function computeGrids() {
                    for (var j3 = 1; j3 < this.jMax; j3++) {
                      this.grid[0][j3] = this.grid[0][j3 - 1] + this.gap_penalty;
                      this.tracebackGrid[0][j3] = [false, false, true];
                    }
                    for (var i2 = 1; i2 < this.iMax; i2++) {
                      this.grid[i2][0] = this.grid[i2 - 1][0] + this.gap_penalty;
                      this.tracebackGrid[i2][0] = [false, true, false];
                    }
                    for (var _i2 = 1; _i2 < this.iMax; _i2++) {
                      for (var _j2 = 1; _j2 < this.jMax; _j2++) {
                        var diag = void 0;
                        if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;
                        else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;
                        var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;
                        var left3 = this.grid[_i2][_j2 - 1] + this.gap_penalty;
                        var maxOf = [diag, up, left3];
                        var indices = this.arrayAllMaxIndexes(maxOf);
                        this.grid[_i2][_j2] = maxOf[indices[0]];
                        this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];
                      }
                    }
                    this.score = this.grid[this.iMax - 1][this.jMax - 1];
                  }, "computeGrids")
                  // Gets all possible valid sequence combinations
                }, {
                  key: "alignmentTraceback",
                  value: /* @__PURE__ */ __name(function alignmentTraceback() {
                    var inProcessAlignments = [];
                    inProcessAlignments.push({
                      pos: [this.sequence1.length, this.sequence2.length],
                      seq1: "",
                      seq2: ""
                    });
                    while (inProcessAlignments[0]) {
                      var current = inProcessAlignments[0];
                      var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];
                      if (directions[0]) {
                        inProcessAlignments.push({
                          pos: [current.pos[0] - 1, current.pos[1] - 1],
                          seq1: this.sequence1[current.pos[0] - 1] + current.seq1,
                          seq2: this.sequence2[current.pos[1] - 1] + current.seq2
                        });
                      }
                      if (directions[1]) {
                        inProcessAlignments.push({
                          pos: [current.pos[0] - 1, current.pos[1]],
                          seq1: this.sequence1[current.pos[0] - 1] + current.seq1,
                          seq2: "-" + current.seq2
                        });
                      }
                      if (directions[2]) {
                        inProcessAlignments.push({
                          pos: [current.pos[0], current.pos[1] - 1],
                          seq1: "-" + current.seq1,
                          seq2: this.sequence2[current.pos[1] - 1] + current.seq2
                        });
                      }
                      if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({
                        sequence1: current.seq1,
                        sequence2: current.seq2
                      });
                      inProcessAlignments.shift();
                    }
                    return this.alignments;
                  }, "alignmentTraceback")
                  // Helper Functions
                }, {
                  key: "getAllIndexes",
                  value: /* @__PURE__ */ __name(function getAllIndexes(arr, val) {
                    var indexes = [], i2 = -1;
                    while ((i2 = arr.indexOf(val, i2 + 1)) !== -1) {
                      indexes.push(i2);
                    }
                    return indexes;
                  }, "getAllIndexes")
                }, {
                  key: "arrayAllMaxIndexes",
                  value: /* @__PURE__ */ __name(function arrayAllMaxIndexes(array4) {
                    return this.getAllIndexes(array4, Math.max.apply(null, array4));
                  }, "arrayAllMaxIndexes")
                }]);
                return NeedlemanWunsch2;
              })();
              module3.exports = NeedlemanWunsch;
            }),
            /* 26 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var layoutBase = /* @__PURE__ */ __name(function layoutBase2() {
                return;
              }, "layoutBase");
              layoutBase.FDLayout = __webpack_require__(18);
              layoutBase.FDLayoutConstants = __webpack_require__(7);
              layoutBase.FDLayoutEdge = __webpack_require__(19);
              layoutBase.FDLayoutNode = __webpack_require__(20);
              layoutBase.DimensionD = __webpack_require__(21);
              layoutBase.HashMap = __webpack_require__(22);
              layoutBase.HashSet = __webpack_require__(23);
              layoutBase.IGeometry = __webpack_require__(8);
              layoutBase.IMath = __webpack_require__(9);
              layoutBase.Integer = __webpack_require__(10);
              layoutBase.Point = __webpack_require__(12);
              layoutBase.PointD = __webpack_require__(4);
              layoutBase.RandomSeed = __webpack_require__(16);
              layoutBase.RectangleD = __webpack_require__(13);
              layoutBase.Transform = __webpack_require__(17);
              layoutBase.UniqueIDGeneretor = __webpack_require__(14);
              layoutBase.Quicksort = __webpack_require__(24);
              layoutBase.LinkedList = __webpack_require__(11);
              layoutBase.LGraphObject = __webpack_require__(2);
              layoutBase.LGraph = __webpack_require__(5);
              layoutBase.LEdge = __webpack_require__(1);
              layoutBase.LGraphManager = __webpack_require__(6);
              layoutBase.LNode = __webpack_require__(3);
              layoutBase.Layout = __webpack_require__(15);
              layoutBase.LayoutConstants = __webpack_require__(0);
              layoutBase.NeedlemanWunsch = __webpack_require__(25);
              module3.exports = layoutBase;
            }),
            /* 27 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function Emitter2() {
                this.listeners = [];
              }
              __name(Emitter2, "Emitter");
              var p3 = Emitter2.prototype;
              p3.addListener = function(event3, callback) {
                this.listeners.push({
                  event: event3,
                  callback
                });
              };
              p3.removeListener = function(event3, callback) {
                for (var i2 = this.listeners.length; i2 >= 0; i2--) {
                  var l4 = this.listeners[i2];
                  if (l4.event === event3 && l4.callback === callback) {
                    this.listeners.splice(i2, 1);
                  }
                }
              };
              p3.emit = function(event3, data6) {
                for (var i2 = 0; i2 < this.listeners.length; i2++) {
                  var l4 = this.listeners[i2];
                  if (event3 === l4.event) {
                    l4.callback(data6);
                  }
                }
              };
              module3.exports = Emitter2;
            })
            /******/
          ])
        );
      });
    }
  });

  // ../../node_modules/.pnpm/cose-base@1.0.3/node_modules/cose-base/cose-base.js
  var require_cose_base = __commonJS({
    "../../node_modules/.pnpm/cose-base@1.0.3/node_modules/cose-base/cose-base.js"(exports2, module2) {
      "use strict";
      (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root4, factory) {
        if (typeof exports2 === "object" && typeof module2 === "object")
          module2.exports = factory(require_layout_base());
        else if (typeof define === "function" && define.amd)
          define(["layout-base"], factory);
        else if (typeof exports2 === "object")
          exports2["coseBase"] = factory(require_layout_base());
        else
          root4["coseBase"] = factory(root4["layoutBase"]);
      }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE_0__) {
        return (
          /******/
          (function(modules2) {
            var installedModules = {};
            function __webpack_require__(moduleId) {
              if (installedModules[moduleId]) {
                return installedModules[moduleId].exports;
              }
              var module3 = installedModules[moduleId] = {
                /******/
                i: moduleId,
                /******/
                l: false,
                /******/
                exports: {}
                /******/
              };
              modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__);
              module3.l = true;
              return module3.exports;
            }
            __name(__webpack_require__, "__webpack_require__");
            __webpack_require__.m = modules2;
            __webpack_require__.c = installedModules;
            __webpack_require__.i = function(value2) {
              return value2;
            };
            __webpack_require__.d = function(exports3, name, getter) {
              if (!__webpack_require__.o(exports3, name)) {
                Object.defineProperty(exports3, name, {
                  /******/
                  configurable: false,
                  /******/
                  enumerable: true,
                  /******/
                  get: getter
                  /******/
                });
              }
            };
            __webpack_require__.n = function(module3) {
              var getter = module3 && module3.__esModule ? (
                /******/
                /* @__PURE__ */ __name(function getDefault() {
                  return module3["default"];
                }, "getDefault")
              ) : (
                /******/
                /* @__PURE__ */ __name(function getModuleExports() {
                  return module3;
                }, "getModuleExports")
              );
              __webpack_require__.d(getter, "a", getter);
              return getter;
            };
            __webpack_require__.o = function(object3, property3) {
              return Object.prototype.hasOwnProperty.call(object3, property3);
            };
            __webpack_require__.p = "";
            return __webpack_require__(__webpack_require__.s = 7);
          })([
            /* 0 */
            /***/
            (function(module3, exports3) {
              module3.exports = __WEBPACK_EXTERNAL_MODULE_0__;
            }),
            /* 1 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;
              function CoSEConstants() {
              }
              __name(CoSEConstants, "CoSEConstants");
              for (var prop in FDLayoutConstants) {
                CoSEConstants[prop] = FDLayoutConstants[prop];
              }
              CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;
              CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;
              CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;
              CoSEConstants.TILE = true;
              CoSEConstants.TILING_PADDING_VERTICAL = 10;
              CoSEConstants.TILING_PADDING_HORIZONTAL = 10;
              CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false;
              module3.exports = CoSEConstants;
            }),
            /* 2 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var FDLayoutEdge = __webpack_require__(0).FDLayoutEdge;
              function CoSEEdge(source, target, vEdge) {
                FDLayoutEdge.call(this, source, target, vEdge);
              }
              __name(CoSEEdge, "CoSEEdge");
              CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);
              for (var prop in FDLayoutEdge) {
                CoSEEdge[prop] = FDLayoutEdge[prop];
              }
              module3.exports = CoSEEdge;
            }),
            /* 3 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraph = __webpack_require__(0).LGraph;
              function CoSEGraph(parent4, graphMgr, vGraph) {
                LGraph.call(this, parent4, graphMgr, vGraph);
              }
              __name(CoSEGraph, "CoSEGraph");
              CoSEGraph.prototype = Object.create(LGraph.prototype);
              for (var prop in LGraph) {
                CoSEGraph[prop] = LGraph[prop];
              }
              module3.exports = CoSEGraph;
            }),
            /* 4 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraphManager = __webpack_require__(0).LGraphManager;
              function CoSEGraphManager(layout7) {
                LGraphManager.call(this, layout7);
              }
              __name(CoSEGraphManager, "CoSEGraphManager");
              CoSEGraphManager.prototype = Object.create(LGraphManager.prototype);
              for (var prop in LGraphManager) {
                CoSEGraphManager[prop] = LGraphManager[prop];
              }
              module3.exports = CoSEGraphManager;
            }),
            /* 5 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var FDLayoutNode = __webpack_require__(0).FDLayoutNode;
              var IMath = __webpack_require__(0).IMath;
              function CoSENode(gm, loc, size4, vNode) {
                FDLayoutNode.call(this, gm, loc, size4, vNode);
              }
              __name(CoSENode, "CoSENode");
              CoSENode.prototype = Object.create(FDLayoutNode.prototype);
              for (var prop in FDLayoutNode) {
                CoSENode[prop] = FDLayoutNode[prop];
              }
              CoSENode.prototype.move = function() {
                var layout7 = this.graphManager.getLayout();
                this.displacementX = layout7.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;
                this.displacementY = layout7.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;
                if (Math.abs(this.displacementX) > layout7.coolingFactor * layout7.maxNodeDisplacement) {
                  this.displacementX = layout7.coolingFactor * layout7.maxNodeDisplacement * IMath.sign(this.displacementX);
                }
                if (Math.abs(this.displacementY) > layout7.coolingFactor * layout7.maxNodeDisplacement) {
                  this.displacementY = layout7.coolingFactor * layout7.maxNodeDisplacement * IMath.sign(this.displacementY);
                }
                if (this.child == null) {
                  this.moveBy(this.displacementX, this.displacementY);
                } else if (this.child.getNodes().length == 0) {
                  this.moveBy(this.displacementX, this.displacementY);
                } else {
                  this.propogateDisplacementToChildren(this.displacementX, this.displacementY);
                }
                layout7.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);
                this.springForceX = 0;
                this.springForceY = 0;
                this.repulsionForceX = 0;
                this.repulsionForceY = 0;
                this.gravitationForceX = 0;
                this.gravitationForceY = 0;
                this.displacementX = 0;
                this.displacementY = 0;
              };
              CoSENode.prototype.propogateDisplacementToChildren = function(dX, dY) {
                var nodes5 = this.getChild().getNodes();
                var node2;
                for (var i2 = 0; i2 < nodes5.length; i2++) {
                  node2 = nodes5[i2];
                  if (node2.getChild() == null) {
                    node2.moveBy(dX, dY);
                    node2.displacementX += dX;
                    node2.displacementY += dY;
                  } else {
                    node2.propogateDisplacementToChildren(dX, dY);
                  }
                }
              };
              CoSENode.prototype.setPred1 = function(pred12) {
                this.pred1 = pred12;
              };
              CoSENode.prototype.getPred1 = function() {
                return pred1;
              };
              CoSENode.prototype.getPred2 = function() {
                return pred2;
              };
              CoSENode.prototype.setNext = function(next3) {
                this.next = next3;
              };
              CoSENode.prototype.getNext = function() {
                return next;
              };
              CoSENode.prototype.setProcessed = function(processed2) {
                this.processed = processed2;
              };
              CoSENode.prototype.isProcessed = function() {
                return processed;
              };
              module3.exports = CoSENode;
            }),
            /* 6 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var FDLayout = __webpack_require__(0).FDLayout;
              var CoSEGraphManager = __webpack_require__(4);
              var CoSEGraph = __webpack_require__(3);
              var CoSENode = __webpack_require__(5);
              var CoSEEdge = __webpack_require__(2);
              var CoSEConstants = __webpack_require__(1);
              var FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;
              var LayoutConstants = __webpack_require__(0).LayoutConstants;
              var Point3 = __webpack_require__(0).Point;
              var PointD = __webpack_require__(0).PointD;
              var Layout2 = __webpack_require__(0).Layout;
              var Integer = __webpack_require__(0).Integer;
              var IGeometry = __webpack_require__(0).IGeometry;
              var LGraph = __webpack_require__(0).LGraph;
              var Transform2 = __webpack_require__(0).Transform;
              function CoSELayout() {
                FDLayout.call(this);
                this.toBeTiled = {};
              }
              __name(CoSELayout, "CoSELayout");
              CoSELayout.prototype = Object.create(FDLayout.prototype);
              for (var prop in FDLayout) {
                CoSELayout[prop] = FDLayout[prop];
              }
              CoSELayout.prototype.newGraphManager = function() {
                var gm = new CoSEGraphManager(this);
                this.graphManager = gm;
                return gm;
              };
              CoSELayout.prototype.newGraph = function(vGraph) {
                return new CoSEGraph(null, this.graphManager, vGraph);
              };
              CoSELayout.prototype.newNode = function(vNode) {
                return new CoSENode(this.graphManager, vNode);
              };
              CoSELayout.prototype.newEdge = function(vEdge) {
                return new CoSEEdge(null, null, vEdge);
              };
              CoSELayout.prototype.initParameters = function() {
                FDLayout.prototype.initParameters.call(this, arguments);
                if (!this.isSubLayout) {
                  if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {
                    this.idealEdgeLength = 10;
                  } else {
                    this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;
                  }
                  this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;
                  this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;
                  this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;
                  this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;
                  this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;
                  this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;
                  this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;
                  this.prunedNodesAll = [];
                  this.growTreeIterations = 0;
                  this.afterGrowthIterations = 0;
                  this.isTreeGrowing = false;
                  this.isGrowthFinished = false;
                  this.coolingCycle = 0;
                  this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;
                  this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations;
                  this.coolingAdjuster = 1;
                }
              };
              CoSELayout.prototype.layout = function() {
                var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;
                if (createBendsAsNeeded) {
                  this.createBendpoints();
                  this.graphManager.resetAllEdges();
                }
                this.level = 0;
                return this.classicLayout();
              };
              CoSELayout.prototype.classicLayout = function() {
                this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();
                this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);
                this.calcNoOfChildrenForAllNodes();
                this.graphManager.calcLowestCommonAncestors();
                this.graphManager.calcInclusionTreeDepths();
                this.graphManager.getRoot().calcEstimatedSize();
                this.calcIdealEdgeLengths();
                if (!this.incremental) {
                  var forest = this.getFlatForest();
                  if (forest.length > 0) {
                    this.positionNodesRadially(forest);
                  } else {
                    this.reduceTrees();
                    this.graphManager.resetAllNodesToApplyGravitation();
                    var allNodes = new Set(this.getAllNodes());
                    var intersection4 = this.nodesWithGravity.filter(function(x5) {
                      return allNodes.has(x5);
                    });
                    this.graphManager.setAllNodesToApplyGravitation(intersection4);
                    this.positionNodesRandomly();
                  }
                } else {
                  if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {
                    this.reduceTrees();
                    this.graphManager.resetAllNodesToApplyGravitation();
                    var allNodes = new Set(this.getAllNodes());
                    var intersection4 = this.nodesWithGravity.filter(function(x5) {
                      return allNodes.has(x5);
                    });
                    this.graphManager.setAllNodesToApplyGravitation(intersection4);
                  }
                }
                this.initSpringEmbedder();
                this.runSpringEmbedder();
                return true;
              };
              CoSELayout.prototype.tick = function() {
                this.totalIterations++;
                if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {
                  if (this.prunedNodesAll.length > 0) {
                    this.isTreeGrowing = true;
                  } else {
                    return true;
                  }
                }
                if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {
                  if (this.isConverged()) {
                    if (this.prunedNodesAll.length > 0) {
                      this.isTreeGrowing = true;
                    } else {
                      return true;
                    }
                  }
                  this.coolingCycle++;
                  if (this.layoutQuality == 0) {
                    this.coolingAdjuster = this.coolingCycle;
                  } else if (this.layoutQuality == 1) {
                    this.coolingAdjuster = this.coolingCycle / 3;
                  }
                  this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);
                  this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));
                }
                if (this.isTreeGrowing) {
                  if (this.growTreeIterations % 10 == 0) {
                    if (this.prunedNodesAll.length > 0) {
                      this.graphManager.updateBounds();
                      this.updateGrid();
                      this.growTree(this.prunedNodesAll);
                      this.graphManager.resetAllNodesToApplyGravitation();
                      var allNodes = new Set(this.getAllNodes());
                      var intersection4 = this.nodesWithGravity.filter(function(x5) {
                        return allNodes.has(x5);
                      });
                      this.graphManager.setAllNodesToApplyGravitation(intersection4);
                      this.graphManager.updateBounds();
                      this.updateGrid();
                      this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;
                    } else {
                      this.isTreeGrowing = false;
                      this.isGrowthFinished = true;
                    }
                  }
                  this.growTreeIterations++;
                }
                if (this.isGrowthFinished) {
                  if (this.isConverged()) {
                    return true;
                  }
                  if (this.afterGrowthIterations % 10 == 0) {
                    this.graphManager.updateBounds();
                    this.updateGrid();
                  }
                  this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);
                  this.afterGrowthIterations++;
                }
                var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;
                var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;
                this.totalDisplacement = 0;
                this.graphManager.updateBounds();
                this.calcSpringForces();
                this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);
                this.calcGravitationalForces();
                this.moveNodes();
                this.animate();
                return false;
              };
              CoSELayout.prototype.getPositionsData = function() {
                var allNodes = this.graphManager.getAllNodes();
                var pData = {};
                for (var i2 = 0; i2 < allNodes.length; i2++) {
                  var rect3 = allNodes[i2].rect;
                  var id41 = allNodes[i2].id;
                  pData[id41] = {
                    id: id41,
                    x: rect3.getCenterX(),
                    y: rect3.getCenterY(),
                    w: rect3.width,
                    h: rect3.height
                  };
                }
                return pData;
              };
              CoSELayout.prototype.runSpringEmbedder = function() {
                this.initialAnimationPeriod = 25;
                this.animationPeriod = this.initialAnimationPeriod;
                var layoutEnded = false;
                if (FDLayoutConstants.ANIMATE === "during") {
                  this.emit("layoutstarted");
                } else {
                  while (!layoutEnded) {
                    layoutEnded = this.tick();
                  }
                  this.graphManager.updateBounds();
                }
              };
              CoSELayout.prototype.calculateNodesToApplyGravitationTo = function() {
                var nodeList = [];
                var graph;
                var graphs = this.graphManager.getGraphs();
                var size4 = graphs.length;
                var i2;
                for (i2 = 0; i2 < size4; i2++) {
                  graph = graphs[i2];
                  graph.updateConnected();
                  if (!graph.isConnected) {
                    nodeList = nodeList.concat(graph.getNodes());
                  }
                }
                return nodeList;
              };
              CoSELayout.prototype.createBendpoints = function() {
                var edges3 = [];
                edges3 = edges3.concat(this.graphManager.getAllEdges());
                var visited = /* @__PURE__ */ new Set();
                var i2;
                for (i2 = 0; i2 < edges3.length; i2++) {
                  var edge = edges3[i2];
                  if (!visited.has(edge)) {
                    var source = edge.getSource();
                    var target = edge.getTarget();
                    if (source == target) {
                      edge.getBendpoints().push(new PointD());
                      edge.getBendpoints().push(new PointD());
                      this.createDummyNodesForBendpoints(edge);
                      visited.add(edge);
                    } else {
                      var edgeList2 = [];
                      edgeList2 = edgeList2.concat(source.getEdgeListToNode(target));
                      edgeList2 = edgeList2.concat(target.getEdgeListToNode(source));
                      if (!visited.has(edgeList2[0])) {
                        if (edgeList2.length > 1) {
                          var k2;
                          for (k2 = 0; k2 < edgeList2.length; k2++) {
                            var multiEdge = edgeList2[k2];
                            multiEdge.getBendpoints().push(new PointD());
                            this.createDummyNodesForBendpoints(multiEdge);
                          }
                        }
                        edgeList2.forEach(function(edge2) {
                          visited.add(edge2);
                        });
                      }
                    }
                  }
                  if (visited.size == edges3.length) {
                    break;
                  }
                }
              };
              CoSELayout.prototype.positionNodesRadially = function(forest) {
                var currentStartingPoint = new Point3(0, 0);
                var numberOfColumns = Math.ceil(Math.sqrt(forest.length));
                var height2 = 0;
                var currentY = 0;
                var currentX = 0;
                var point8 = new PointD(0, 0);
                for (var i2 = 0; i2 < forest.length; i2++) {
                  if (i2 % numberOfColumns == 0) {
                    currentX = 0;
                    currentY = height2;
                    if (i2 != 0) {
                      currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;
                    }
                    height2 = 0;
                  }
                  var tree = forest[i2];
                  var centerNode = Layout2.findCenterOfTree(tree);
                  currentStartingPoint.x = currentX;
                  currentStartingPoint.y = currentY;
                  point8 = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);
                  if (point8.y > height2) {
                    height2 = Math.floor(point8.y);
                  }
                  currentX = Math.floor(point8.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);
                }
                this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point8.x / 2, LayoutConstants.WORLD_CENTER_Y - point8.y / 2));
              };
              CoSELayout.radialLayout = function(tree, centerNode, startingPoint) {
                var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);
                CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);
                var bounds4 = LGraph.calculateBounds(tree);
                var transform8 = new Transform2();
                transform8.setDeviceOrgX(bounds4.getMinX());
                transform8.setDeviceOrgY(bounds4.getMinY());
                transform8.setWorldOrgX(startingPoint.x);
                transform8.setWorldOrgY(startingPoint.y);
                for (var i2 = 0; i2 < tree.length; i2++) {
                  var node2 = tree[i2];
                  node2.transform(transform8);
                }
                var bottomRight = new PointD(bounds4.getMaxX(), bounds4.getMaxY());
                return transform8.inverseTransformPoint(bottomRight);
              };
              CoSELayout.branchRadialLayout = function(node2, parentOfNode, startAngle, endAngle, distance3, radialSeparation) {
                var halfInterval = (endAngle - startAngle + 1) / 2;
                if (halfInterval < 0) {
                  halfInterval += 180;
                }
                var nodeAngle = (halfInterval + startAngle) % 360;
                var teta = nodeAngle * IGeometry.TWO_PI / 360;
                var cos_teta = Math.cos(teta);
                var x_ = distance3 * Math.cos(teta);
                var y_ = distance3 * Math.sin(teta);
                node2.setCenter(x_, y_);
                var neighborEdges = [];
                neighborEdges = neighborEdges.concat(node2.getEdges());
                var childCount = neighborEdges.length;
                if (parentOfNode != null) {
                  childCount--;
                }
                var branchCount = 0;
                var incEdgesCount = neighborEdges.length;
                var startIndex;
                var edges3 = node2.getEdgesBetween(parentOfNode);
                while (edges3.length > 1) {
                  var temp = edges3[0];
                  edges3.splice(0, 1);
                  var index = neighborEdges.indexOf(temp);
                  if (index >= 0) {
                    neighborEdges.splice(index, 1);
                  }
                  incEdgesCount--;
                  childCount--;
                }
                if (parentOfNode != null) {
                  startIndex = (neighborEdges.indexOf(edges3[0]) + 1) % incEdgesCount;
                } else {
                  startIndex = 0;
                }
                var stepAngle = Math.abs(endAngle - startAngle) / childCount;
                for (var i2 = startIndex; branchCount != childCount; i2 = ++i2 % incEdgesCount) {
                  var currentNeighbor = neighborEdges[i2].getOtherEnd(node2);
                  if (currentNeighbor == parentOfNode) {
                    continue;
                  }
                  var childStartAngle = (startAngle + branchCount * stepAngle) % 360;
                  var childEndAngle = (childStartAngle + stepAngle) % 360;
                  CoSELayout.branchRadialLayout(currentNeighbor, node2, childStartAngle, childEndAngle, distance3 + radialSeparation, radialSeparation);
                  branchCount++;
                }
              };
              CoSELayout.maxDiagonalInTree = function(tree) {
                var maxDiagonal = Integer.MIN_VALUE;
                for (var i2 = 0; i2 < tree.length; i2++) {
                  var node2 = tree[i2];
                  var diagonal = node2.getDiagonal();
                  if (diagonal > maxDiagonal) {
                    maxDiagonal = diagonal;
                  }
                }
                return maxDiagonal;
              };
              CoSELayout.prototype.calcRepulsionRange = function() {
                return 2 * (this.level + 1) * this.idealEdgeLength;
              };
              CoSELayout.prototype.groupZeroDegreeMembers = function() {
                var self2 = this;
                var tempMemberGroups = {};
                this.memberGroups = {};
                this.idToDummyNode = {};
                var zeroDegree = [];
                var allNodes = this.graphManager.getAllNodes();
                for (var i2 = 0; i2 < allNodes.length; i2++) {
                  var node2 = allNodes[i2];
                  var parent4 = node2.getParent();
                  if (this.getNodeDegreeWithChildren(node2) === 0 && (parent4.id == void 0 || !this.getToBeTiled(parent4))) {
                    zeroDegree.push(node2);
                  }
                }
                for (var i2 = 0; i2 < zeroDegree.length; i2++) {
                  var node2 = zeroDegree[i2];
                  var p_id = node2.getParent().id;
                  if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = [];
                  tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node2);
                }
                Object.keys(tempMemberGroups).forEach(function(p_id2) {
                  if (tempMemberGroups[p_id2].length > 1) {
                    var dummyCompoundId = "DummyCompound_" + p_id2;
                    self2.memberGroups[dummyCompoundId] = tempMemberGroups[p_id2];
                    var parent5 = tempMemberGroups[p_id2][0].getParent();
                    var dummyCompound = new CoSENode(self2.graphManager);
                    dummyCompound.id = dummyCompoundId;
                    dummyCompound.paddingLeft = parent5.paddingLeft || 0;
                    dummyCompound.paddingRight = parent5.paddingRight || 0;
                    dummyCompound.paddingBottom = parent5.paddingBottom || 0;
                    dummyCompound.paddingTop = parent5.paddingTop || 0;
                    self2.idToDummyNode[dummyCompoundId] = dummyCompound;
                    var dummyParentGraph = self2.getGraphManager().add(self2.newGraph(), dummyCompound);
                    var parentGraph = parent5.getChild();
                    parentGraph.add(dummyCompound);
                    for (var i3 = 0; i3 < tempMemberGroups[p_id2].length; i3++) {
                      var node3 = tempMemberGroups[p_id2][i3];
                      parentGraph.remove(node3);
                      dummyParentGraph.add(node3);
                    }
                  }
                });
              };
              CoSELayout.prototype.clearCompounds = function() {
                var childGraphMap = {};
                var idToNode = {};
                this.performDFSOnCompounds();
                for (var i2 = 0; i2 < this.compoundOrder.length; i2++) {
                  idToNode[this.compoundOrder[i2].id] = this.compoundOrder[i2];
                  childGraphMap[this.compoundOrder[i2].id] = [].concat(this.compoundOrder[i2].getChild().getNodes());
                  this.graphManager.remove(this.compoundOrder[i2].getChild());
                  this.compoundOrder[i2].child = null;
                }
                this.graphManager.resetAllNodes();
                this.tileCompoundMembers(childGraphMap, idToNode);
              };
              CoSELayout.prototype.clearZeroDegreeMembers = function() {
                var self2 = this;
                var tiledZeroDegreePack = this.tiledZeroDegreePack = [];
                Object.keys(this.memberGroups).forEach(function(id41) {
                  var compoundNode = self2.idToDummyNode[id41];
                  tiledZeroDegreePack[id41] = self2.tileNodes(self2.memberGroups[id41], compoundNode.paddingLeft + compoundNode.paddingRight);
                  compoundNode.rect.width = tiledZeroDegreePack[id41].width;
                  compoundNode.rect.height = tiledZeroDegreePack[id41].height;
                });
              };
              CoSELayout.prototype.repopulateCompounds = function() {
                for (var i2 = this.compoundOrder.length - 1; i2 >= 0; i2--) {
                  var lCompoundNode = this.compoundOrder[i2];
                  var id41 = lCompoundNode.id;
                  var horizontalMargin = lCompoundNode.paddingLeft;
                  var verticalMargin = lCompoundNode.paddingTop;
                  this.adjustLocations(this.tiledMemberPack[id41], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin);
                }
              };
              CoSELayout.prototype.repopulateZeroDegreeMembers = function() {
                var self2 = this;
                var tiledPack = this.tiledZeroDegreePack;
                Object.keys(tiledPack).forEach(function(id41) {
                  var compoundNode = self2.idToDummyNode[id41];
                  var horizontalMargin = compoundNode.paddingLeft;
                  var verticalMargin = compoundNode.paddingTop;
                  self2.adjustLocations(tiledPack[id41], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin);
                });
              };
              CoSELayout.prototype.getToBeTiled = function(node2) {
                var id41 = node2.id;
                if (this.toBeTiled[id41] != null) {
                  return this.toBeTiled[id41];
                }
                var childGraph = node2.getChild();
                if (childGraph == null) {
                  this.toBeTiled[id41] = false;
                  return false;
                }
                var children2 = childGraph.getNodes();
                for (var i2 = 0; i2 < children2.length; i2++) {
                  var theChild = children2[i2];
                  if (this.getNodeDegree(theChild) > 0) {
                    this.toBeTiled[id41] = false;
                    return false;
                  }
                  if (theChild.getChild() == null) {
                    this.toBeTiled[theChild.id] = false;
                    continue;
                  }
                  if (!this.getToBeTiled(theChild)) {
                    this.toBeTiled[id41] = false;
                    return false;
                  }
                }
                this.toBeTiled[id41] = true;
                return true;
              };
              CoSELayout.prototype.getNodeDegree = function(node2) {
                var id41 = node2.id;
                var edges3 = node2.getEdges();
                var degree = 0;
                for (var i2 = 0; i2 < edges3.length; i2++) {
                  var edge = edges3[i2];
                  if (edge.getSource().id !== edge.getTarget().id) {
                    degree = degree + 1;
                  }
                }
                return degree;
              };
              CoSELayout.prototype.getNodeDegreeWithChildren = function(node2) {
                var degree = this.getNodeDegree(node2);
                if (node2.getChild() == null) {
                  return degree;
                }
                var children2 = node2.getChild().getNodes();
                for (var i2 = 0; i2 < children2.length; i2++) {
                  var child = children2[i2];
                  degree += this.getNodeDegreeWithChildren(child);
                }
                return degree;
              };
              CoSELayout.prototype.performDFSOnCompounds = function() {
                this.compoundOrder = [];
                this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());
              };
              CoSELayout.prototype.fillCompexOrderByDFS = function(children2) {
                for (var i2 = 0; i2 < children2.length; i2++) {
                  var child = children2[i2];
                  if (child.getChild() != null) {
                    this.fillCompexOrderByDFS(child.getChild().getNodes());
                  }
                  if (this.getToBeTiled(child)) {
                    this.compoundOrder.push(child);
                  }
                }
              };
              CoSELayout.prototype.adjustLocations = function(organization, x5, y6, compoundHorizontalMargin, compoundVerticalMargin) {
                x5 += compoundHorizontalMargin;
                y6 += compoundVerticalMargin;
                var left3 = x5;
                for (var i2 = 0; i2 < organization.rows.length; i2++) {
                  var row = organization.rows[i2];
                  x5 = left3;
                  var maxHeight = 0;
                  for (var j3 = 0; j3 < row.length; j3++) {
                    var lnode = row[j3];
                    lnode.rect.x = x5;
                    lnode.rect.y = y6;
                    x5 += lnode.rect.width + organization.horizontalPadding;
                    if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;
                  }
                  y6 += maxHeight + organization.verticalPadding;
                }
              };
              CoSELayout.prototype.tileCompoundMembers = function(childGraphMap, idToNode) {
                var self2 = this;
                this.tiledMemberPack = [];
                Object.keys(childGraphMap).forEach(function(id41) {
                  var compoundNode = idToNode[id41];
                  self2.tiledMemberPack[id41] = self2.tileNodes(childGraphMap[id41], compoundNode.paddingLeft + compoundNode.paddingRight);
                  compoundNode.rect.width = self2.tiledMemberPack[id41].width;
                  compoundNode.rect.height = self2.tiledMemberPack[id41].height;
                });
              };
              CoSELayout.prototype.tileNodes = function(nodes5, minWidth) {
                var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;
                var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;
                var organization = {
                  rows: [],
                  rowWidth: [],
                  rowHeight: [],
                  width: 0,
                  height: minWidth,
                  // assume minHeight equals to minWidth
                  verticalPadding,
                  horizontalPadding
                };
                nodes5.sort(function(n1, n2) {
                  if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1;
                  if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1;
                  return 0;
                });
                for (var i2 = 0; i2 < nodes5.length; i2++) {
                  var lNode = nodes5[i2];
                  if (organization.rows.length == 0) {
                    this.insertNodeToRow(organization, lNode, 0, minWidth);
                  } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {
                    this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth);
                  } else {
                    this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);
                  }
                  this.shiftToLastRow(organization);
                }
                return organization;
              };
              CoSELayout.prototype.insertNodeToRow = function(organization, node2, rowIndex, minWidth) {
                var minCompoundSize = minWidth;
                if (rowIndex == organization.rows.length) {
                  var secondDimension = [];
                  organization.rows.push(secondDimension);
                  organization.rowWidth.push(minCompoundSize);
                  organization.rowHeight.push(0);
                }
                var w4 = organization.rowWidth[rowIndex] + node2.rect.width;
                if (organization.rows[rowIndex].length > 0) {
                  w4 += organization.horizontalPadding;
                }
                organization.rowWidth[rowIndex] = w4;
                if (organization.width < w4) {
                  organization.width = w4;
                }
                var h3 = node2.rect.height;
                if (rowIndex > 0) h3 += organization.verticalPadding;
                var extraHeight = 0;
                if (h3 > organization.rowHeight[rowIndex]) {
                  extraHeight = organization.rowHeight[rowIndex];
                  organization.rowHeight[rowIndex] = h3;
                  extraHeight = organization.rowHeight[rowIndex] - extraHeight;
                }
                organization.height += extraHeight;
                organization.rows[rowIndex].push(node2);
              };
              CoSELayout.prototype.getShortestRowIndex = function(organization) {
                var r2 = -1;
                var min10 = Number.MAX_VALUE;
                for (var i2 = 0; i2 < organization.rows.length; i2++) {
                  if (organization.rowWidth[i2] < min10) {
                    r2 = i2;
                    min10 = organization.rowWidth[i2];
                  }
                }
                return r2;
              };
              CoSELayout.prototype.getLongestRowIndex = function(organization) {
                var r2 = -1;
                var max10 = Number.MIN_VALUE;
                for (var i2 = 0; i2 < organization.rows.length; i2++) {
                  if (organization.rowWidth[i2] > max10) {
                    r2 = i2;
                    max10 = organization.rowWidth[i2];
                  }
                }
                return r2;
              };
              CoSELayout.prototype.canAddHorizontal = function(organization, extraWidth, extraHeight) {
                var sri = this.getShortestRowIndex(organization);
                if (sri < 0) {
                  return true;
                }
                var min10 = organization.rowWidth[sri];
                if (min10 + organization.horizontalPadding + extraWidth <= organization.width) return true;
                var hDiff = 0;
                if (organization.rowHeight[sri] < extraHeight) {
                  if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];
                }
                var add_to_row_ratio;
                if (organization.width - min10 >= extraWidth + organization.horizontalPadding) {
                  add_to_row_ratio = (organization.height + hDiff) / (min10 + extraWidth + organization.horizontalPadding);
                } else {
                  add_to_row_ratio = (organization.height + hDiff) / organization.width;
                }
                hDiff = extraHeight + organization.verticalPadding;
                var add_new_row_ratio;
                if (organization.width < extraWidth) {
                  add_new_row_ratio = (organization.height + hDiff) / extraWidth;
                } else {
                  add_new_row_ratio = (organization.height + hDiff) / organization.width;
                }
                if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;
                if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;
                return add_to_row_ratio < add_new_row_ratio;
              };
              CoSELayout.prototype.shiftToLastRow = function(organization) {
                var longest = this.getLongestRowIndex(organization);
                var last4 = organization.rowWidth.length - 1;
                var row = organization.rows[longest];
                var node2 = row[row.length - 1];
                var diff2 = node2.width + organization.horizontalPadding;
                if (organization.width - organization.rowWidth[last4] > diff2 && longest != last4) {
                  row.splice(-1, 1);
                  organization.rows[last4].push(node2);
                  organization.rowWidth[longest] = organization.rowWidth[longest] - diff2;
                  organization.rowWidth[last4] = organization.rowWidth[last4] + diff2;
                  organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];
                  var maxHeight = Number.MIN_VALUE;
                  for (var i2 = 0; i2 < row.length; i2++) {
                    if (row[i2].height > maxHeight) maxHeight = row[i2].height;
                  }
                  if (longest > 0) maxHeight += organization.verticalPadding;
                  var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last4];
                  organization.rowHeight[longest] = maxHeight;
                  if (organization.rowHeight[last4] < node2.height + organization.verticalPadding) organization.rowHeight[last4] = node2.height + organization.verticalPadding;
                  var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last4];
                  organization.height += finalTotal - prevTotal;
                  this.shiftToLastRow(organization);
                }
              };
              CoSELayout.prototype.tilingPreLayout = function() {
                if (CoSEConstants.TILE) {
                  this.groupZeroDegreeMembers();
                  this.clearCompounds();
                  this.clearZeroDegreeMembers();
                }
              };
              CoSELayout.prototype.tilingPostLayout = function() {
                if (CoSEConstants.TILE) {
                  this.repopulateZeroDegreeMembers();
                  this.repopulateCompounds();
                }
              };
              CoSELayout.prototype.reduceTrees = function() {
                var prunedNodesAll = [];
                var containsLeaf = true;
                var node2;
                while (containsLeaf) {
                  var allNodes = this.graphManager.getAllNodes();
                  var prunedNodesInStepTemp = [];
                  containsLeaf = false;
                  for (var i2 = 0; i2 < allNodes.length; i2++) {
                    node2 = allNodes[i2];
                    if (node2.getEdges().length == 1 && !node2.getEdges()[0].isInterGraph && node2.getChild() == null) {
                      prunedNodesInStepTemp.push([node2, node2.getEdges()[0], node2.getOwner()]);
                      containsLeaf = true;
                    }
                  }
                  if (containsLeaf == true) {
                    var prunedNodesInStep = [];
                    for (var j3 = 0; j3 < prunedNodesInStepTemp.length; j3++) {
                      if (prunedNodesInStepTemp[j3][0].getEdges().length == 1) {
                        prunedNodesInStep.push(prunedNodesInStepTemp[j3]);
                        prunedNodesInStepTemp[j3][0].getOwner().remove(prunedNodesInStepTemp[j3][0]);
                      }
                    }
                    prunedNodesAll.push(prunedNodesInStep);
                    this.graphManager.resetAllNodes();
                    this.graphManager.resetAllEdges();
                  }
                }
                this.prunedNodesAll = prunedNodesAll;
              };
              CoSELayout.prototype.growTree = function(prunedNodesAll) {
                var lengthOfPrunedNodesInStep = prunedNodesAll.length;
                var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];
                var nodeData2;
                for (var i2 = 0; i2 < prunedNodesInStep.length; i2++) {
                  nodeData2 = prunedNodesInStep[i2];
                  this.findPlaceforPrunedNode(nodeData2);
                  nodeData2[2].add(nodeData2[0]);
                  nodeData2[2].add(nodeData2[1], nodeData2[1].source, nodeData2[1].target);
                }
                prunedNodesAll.splice(prunedNodesAll.length - 1, 1);
                this.graphManager.resetAllNodes();
                this.graphManager.resetAllEdges();
              };
              CoSELayout.prototype.findPlaceforPrunedNode = function(nodeData2) {
                var gridForPrunedNode;
                var nodeToConnect;
                var prunedNode = nodeData2[0];
                if (prunedNode == nodeData2[1].source) {
                  nodeToConnect = nodeData2[1].target;
                } else {
                  nodeToConnect = nodeData2[1].source;
                }
                var startGridX = nodeToConnect.startX;
                var finishGridX = nodeToConnect.finishX;
                var startGridY = nodeToConnect.startY;
                var finishGridY = nodeToConnect.finishY;
                var upNodeCount = 0;
                var downNodeCount = 0;
                var rightNodeCount = 0;
                var leftNodeCount = 0;
                var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];
                if (startGridY > 0) {
                  for (var i2 = startGridX; i2 <= finishGridX; i2++) {
                    controlRegions[0] += this.grid[i2][startGridY - 1].length + this.grid[i2][startGridY].length - 1;
                  }
                }
                if (finishGridX < this.grid.length - 1) {
                  for (var i2 = startGridY; i2 <= finishGridY; i2++) {
                    controlRegions[1] += this.grid[finishGridX + 1][i2].length + this.grid[finishGridX][i2].length - 1;
                  }
                }
                if (finishGridY < this.grid[0].length - 1) {
                  for (var i2 = startGridX; i2 <= finishGridX; i2++) {
                    controlRegions[2] += this.grid[i2][finishGridY + 1].length + this.grid[i2][finishGridY].length - 1;
                  }
                }
                if (startGridX > 0) {
                  for (var i2 = startGridY; i2 <= finishGridY; i2++) {
                    controlRegions[3] += this.grid[startGridX - 1][i2].length + this.grid[startGridX][i2].length - 1;
                  }
                }
                var min10 = Integer.MAX_VALUE;
                var minCount;
                var minIndex;
                for (var j3 = 0; j3 < controlRegions.length; j3++) {
                  if (controlRegions[j3] < min10) {
                    min10 = controlRegions[j3];
                    minCount = 1;
                    minIndex = j3;
                  } else if (controlRegions[j3] == min10) {
                    minCount++;
                  }
                }
                if (minCount == 3 && min10 == 0) {
                  if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {
                    gridForPrunedNode = 1;
                  } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {
                    gridForPrunedNode = 0;
                  } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {
                    gridForPrunedNode = 3;
                  } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {
                    gridForPrunedNode = 2;
                  }
                } else if (minCount == 2 && min10 == 0) {
                  var random2 = Math.floor(Math.random() * 2);
                  if (controlRegions[0] == 0 && controlRegions[1] == 0) {
                    ;
                    if (random2 == 0) {
                      gridForPrunedNode = 0;
                    } else {
                      gridForPrunedNode = 1;
                    }
                  } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {
                    if (random2 == 0) {
                      gridForPrunedNode = 0;
                    } else {
                      gridForPrunedNode = 2;
                    }
                  } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {
                    if (random2 == 0) {
                      gridForPrunedNode = 0;
                    } else {
                      gridForPrunedNode = 3;
                    }
                  } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {
                    if (random2 == 0) {
                      gridForPrunedNode = 1;
                    } else {
                      gridForPrunedNode = 2;
                    }
                  } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {
                    if (random2 == 0) {
                      gridForPrunedNode = 1;
                    } else {
                      gridForPrunedNode = 3;
                    }
                  } else {
                    if (random2 == 0) {
                      gridForPrunedNode = 2;
                    } else {
                      gridForPrunedNode = 3;
                    }
                  }
                } else if (minCount == 4 && min10 == 0) {
                  var random2 = Math.floor(Math.random() * 4);
                  gridForPrunedNode = random2;
                } else {
                  gridForPrunedNode = minIndex;
                }
                if (gridForPrunedNode == 0) {
                  prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);
                } else if (gridForPrunedNode == 1) {
                  prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());
                } else if (gridForPrunedNode == 2) {
                  prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);
                } else {
                  prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());
                }
              };
              module3.exports = CoSELayout;
            }),
            /* 7 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var coseBase = {};
              coseBase.layoutBase = __webpack_require__(0);
              coseBase.CoSEConstants = __webpack_require__(1);
              coseBase.CoSEEdge = __webpack_require__(2);
              coseBase.CoSEGraph = __webpack_require__(3);
              coseBase.CoSEGraphManager = __webpack_require__(4);
              coseBase.CoSELayout = __webpack_require__(6);
              coseBase.CoSENode = __webpack_require__(5);
              module3.exports = coseBase;
            })
            /******/
          ])
        );
      });
    }
  });

  // ../../node_modules/.pnpm/cytoscape-cose-bilkent@4.1.0_cytoscape@3.33.3/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js
  var require_cytoscape_cose_bilkent = __commonJS({
    "../../node_modules/.pnpm/cytoscape-cose-bilkent@4.1.0_cytoscape@3.33.3/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js"(exports2, module2) {
      "use strict";
      (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root4, factory) {
        if (typeof exports2 === "object" && typeof module2 === "object")
          module2.exports = factory(require_cose_base());
        else if (typeof define === "function" && define.amd)
          define(["cose-base"], factory);
        else if (typeof exports2 === "object")
          exports2["cytoscapeCoseBilkent"] = factory(require_cose_base());
        else
          root4["cytoscapeCoseBilkent"] = factory(root4["coseBase"]);
      }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE_0__) {
        return (
          /******/
          (function(modules2) {
            var installedModules = {};
            function __webpack_require__(moduleId) {
              if (installedModules[moduleId]) {
                return installedModules[moduleId].exports;
              }
              var module3 = installedModules[moduleId] = {
                /******/
                i: moduleId,
                /******/
                l: false,
                /******/
                exports: {}
                /******/
              };
              modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__);
              module3.l = true;
              return module3.exports;
            }
            __name(__webpack_require__, "__webpack_require__");
            __webpack_require__.m = modules2;
            __webpack_require__.c = installedModules;
            __webpack_require__.i = function(value2) {
              return value2;
            };
            __webpack_require__.d = function(exports3, name, getter) {
              if (!__webpack_require__.o(exports3, name)) {
                Object.defineProperty(exports3, name, {
                  /******/
                  configurable: false,
                  /******/
                  enumerable: true,
                  /******/
                  get: getter
                  /******/
                });
              }
            };
            __webpack_require__.n = function(module3) {
              var getter = module3 && module3.__esModule ? (
                /******/
                /* @__PURE__ */ __name(function getDefault() {
                  return module3["default"];
                }, "getDefault")
              ) : (
                /******/
                /* @__PURE__ */ __name(function getModuleExports() {
                  return module3;
                }, "getModuleExports")
              );
              __webpack_require__.d(getter, "a", getter);
              return getter;
            };
            __webpack_require__.o = function(object3, property3) {
              return Object.prototype.hasOwnProperty.call(object3, property3);
            };
            __webpack_require__.p = "";
            return __webpack_require__(__webpack_require__.s = 1);
          })([
            /* 0 */
            /***/
            (function(module3, exports3) {
              module3.exports = __WEBPACK_EXTERNAL_MODULE_0__;
            }),
            /* 1 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LayoutConstants = __webpack_require__(0).layoutBase.LayoutConstants;
              var FDLayoutConstants = __webpack_require__(0).layoutBase.FDLayoutConstants;
              var CoSEConstants = __webpack_require__(0).CoSEConstants;
              var CoSELayout = __webpack_require__(0).CoSELayout;
              var CoSENode = __webpack_require__(0).CoSENode;
              var PointD = __webpack_require__(0).layoutBase.PointD;
              var DimensionD2 = __webpack_require__(0).layoutBase.DimensionD;
              var defaults5 = {
                // Called on `layoutready`
                ready: /* @__PURE__ */ __name(function ready4() {
                }, "ready"),
                // Called on `layoutstop`
                stop: /* @__PURE__ */ __name(function stop5() {
                }, "stop"),
                // 'draft', 'default' or 'proof" 
                // - 'draft' fast cooling rate 
                // - 'default' moderate cooling rate 
                // - "proof" slow cooling rate
                quality: "default",
                // include labels in node dimensions
                nodeDimensionsIncludeLabels: false,
                // number of ticks per frame; higher is faster but more jerky
                refresh: 30,
                // Whether to fit the network view after when done
                fit: true,
                // Padding on fit
                padding: 10,
                // Whether to enable incremental mode
                randomize: true,
                // Node repulsion (non overlapping) multiplier
                nodeRepulsion: 4500,
                // Ideal edge (non nested) length
                idealEdgeLength: 50,
                // Divisor to compute edge forces
                edgeElasticity: 0.45,
                // Nesting factor (multiplier) to compute ideal edge length for nested edges
                nestingFactor: 0.1,
                // Gravity force (constant)
                gravity: 0.25,
                // Maximum number of iterations to perform
                numIter: 2500,
                // For enabling tiling
                tile: true,
                // Type of layout animation. The option set is {'during', 'end', false}
                animate: "end",
                // Duration for animate:end
                animationDuration: 500,
                // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)
                tilingPaddingVertical: 10,
                // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)
                tilingPaddingHorizontal: 10,
                // Gravity range (constant) for compounds
                gravityRangeCompound: 1.5,
                // Gravity force (constant) for compounds
                gravityCompound: 1,
                // Gravity range (constant)
                gravityRange: 3.8,
                // Initial cooling factor for incremental layout
                initialEnergyOnIncremental: 0.5
              };
              function extend5(defaults6, options2) {
                var obj = {};
                for (var i2 in defaults6) {
                  obj[i2] = defaults6[i2];
                }
                for (var i2 in options2) {
                  obj[i2] = options2[i2];
                }
                return obj;
              }
              __name(extend5, "extend");
              ;
              function _CoSELayout(_options) {
                this.options = extend5(defaults5, _options);
                getUserOptions(this.options);
              }
              __name(_CoSELayout, "_CoSELayout");
              var getUserOptions = /* @__PURE__ */ __name(function getUserOptions2(options2) {
                if (options2.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options2.nodeRepulsion;
                if (options2.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options2.idealEdgeLength;
                if (options2.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options2.edgeElasticity;
                if (options2.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options2.nestingFactor;
                if (options2.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options2.gravity;
                if (options2.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options2.numIter;
                if (options2.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options2.gravityRange;
                if (options2.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options2.gravityCompound;
                if (options2.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options2.gravityRangeCompound;
                if (options2.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options2.initialEnergyOnIncremental;
                if (options2.quality == "draft") LayoutConstants.QUALITY = 0;
                else if (options2.quality == "proof") LayoutConstants.QUALITY = 2;
                else LayoutConstants.QUALITY = 1;
                CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options2.nodeDimensionsIncludeLabels;
                CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options2.randomize;
                CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options2.animate;
                CoSEConstants.TILE = options2.tile;
                CoSEConstants.TILING_PADDING_VERTICAL = typeof options2.tilingPaddingVertical === "function" ? options2.tilingPaddingVertical.call() : options2.tilingPaddingVertical;
                CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options2.tilingPaddingHorizontal === "function" ? options2.tilingPaddingHorizontal.call() : options2.tilingPaddingHorizontal;
              }, "getUserOptions");
              _CoSELayout.prototype.run = function() {
                var ready4;
                var frameId;
                var options2 = this.options;
                var idToLNode = this.idToLNode = {};
                var layout7 = this.layout = new CoSELayout();
                var self2 = this;
                self2.stopped = false;
                this.cy = this.options.cy;
                this.cy.trigger({ type: "layoutstart", layout: this });
                var gm = layout7.newGraphManager();
                this.gm = gm;
                var nodes5 = this.options.eles.nodes();
                var edges3 = this.options.eles.edges();
                this.root = gm.addRoot();
                this.processChildrenList(this.root, this.getTopMostNodes(nodes5), layout7);
                for (var i2 = 0; i2 < edges3.length; i2++) {
                  var edge = edges3[i2];
                  var sourceNode = this.idToLNode[edge.data("source")];
                  var targetNode = this.idToLNode[edge.data("target")];
                  if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {
                    var e1 = gm.add(layout7.newEdge(), sourceNode, targetNode);
                    e1.id = edge.id();
                  }
                }
                var getPositions = /* @__PURE__ */ __name(function getPositions2(ele, i3) {
                  if (typeof ele === "number") {
                    ele = i3;
                  }
                  var theId = ele.data("id");
                  var lNode = self2.idToLNode[theId];
                  return {
                    x: lNode.getRect().getCenterX(),
                    y: lNode.getRect().getCenterY()
                  };
                }, "getPositions");
                var iterateAnimated = /* @__PURE__ */ __name(function iterateAnimated2() {
                  var afterReposition = /* @__PURE__ */ __name(function afterReposition2() {
                    if (options2.fit) {
                      options2.cy.fit(options2.eles, options2.padding);
                    }
                    if (!ready4) {
                      ready4 = true;
                      self2.cy.one("layoutready", options2.ready);
                      self2.cy.trigger({ type: "layoutready", layout: self2 });
                    }
                  }, "afterReposition");
                  var ticksPerFrame = self2.options.refresh;
                  var isDone;
                  for (var i3 = 0; i3 < ticksPerFrame && !isDone; i3++) {
                    isDone = self2.stopped || self2.layout.tick();
                  }
                  if (isDone) {
                    if (layout7.checkLayoutSuccess() && !layout7.isSubLayout) {
                      layout7.doPostLayout();
                    }
                    if (layout7.tilingPostLayout) {
                      layout7.tilingPostLayout();
                    }
                    layout7.isLayoutFinished = true;
                    self2.options.eles.nodes().positions(getPositions);
                    afterReposition();
                    self2.cy.one("layoutstop", self2.options.stop);
                    self2.cy.trigger({ type: "layoutstop", layout: self2 });
                    if (frameId) {
                      cancelAnimationFrame(frameId);
                    }
                    ready4 = false;
                    return;
                  }
                  var animationData = self2.layout.getPositionsData();
                  options2.eles.nodes().positions(function(ele, i4) {
                    if (typeof ele === "number") {
                      ele = i4;
                    }
                    if (!ele.isParent()) {
                      var theId = ele.id();
                      var pNode = animationData[theId];
                      var temp = ele;
                      while (pNode == null) {
                        pNode = animationData[temp.data("parent")] || animationData["DummyCompound_" + temp.data("parent")];
                        animationData[theId] = pNode;
                        temp = temp.parent()[0];
                        if (temp == void 0) {
                          break;
                        }
                      }
                      if (pNode != null) {
                        return {
                          x: pNode.x,
                          y: pNode.y
                        };
                      } else {
                        return {
                          x: ele.position("x"),
                          y: ele.position("y")
                        };
                      }
                    }
                  });
                  afterReposition();
                  frameId = requestAnimationFrame(iterateAnimated2);
                }, "iterateAnimated");
                layout7.addListener("layoutstarted", function() {
                  if (self2.options.animate === "during") {
                    frameId = requestAnimationFrame(iterateAnimated);
                  }
                });
                layout7.runLayout();
                if (this.options.animate !== "during") {
                  self2.options.eles.nodes().not(":parent").layoutPositions(self2, self2.options, getPositions);
                  ready4 = false;
                }
                return this;
              };
              _CoSELayout.prototype.getTopMostNodes = function(nodes5) {
                var nodesMap2 = {};
                for (var i2 = 0; i2 < nodes5.length; i2++) {
                  nodesMap2[nodes5[i2].id()] = true;
                }
                var roots = nodes5.filter(function(ele, i3) {
                  if (typeof ele === "number") {
                    ele = i3;
                  }
                  var parent4 = ele.parent()[0];
                  while (parent4 != null) {
                    if (nodesMap2[parent4.id()]) {
                      return false;
                    }
                    parent4 = parent4.parent()[0];
                  }
                  return true;
                });
                return roots;
              };
              _CoSELayout.prototype.processChildrenList = function(parent4, children2, layout7) {
                var size4 = children2.length;
                for (var i2 = 0; i2 < size4; i2++) {
                  var theChild = children2[i2];
                  var children_of_children = theChild.children();
                  var theNode;
                  var dimensions2 = theChild.layoutDimensions({
                    nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels
                  });
                  if (theChild.outerWidth() != null && theChild.outerHeight() != null) {
                    theNode = parent4.add(new CoSENode(layout7.graphManager, new PointD(theChild.position("x") - dimensions2.w / 2, theChild.position("y") - dimensions2.h / 2), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h))));
                  } else {
                    theNode = parent4.add(new CoSENode(this.graphManager));
                  }
                  theNode.id = theChild.data("id");
                  theNode.paddingLeft = parseInt(theChild.css("padding"));
                  theNode.paddingTop = parseInt(theChild.css("padding"));
                  theNode.paddingRight = parseInt(theChild.css("padding"));
                  theNode.paddingBottom = parseInt(theChild.css("padding"));
                  if (this.options.nodeDimensionsIncludeLabels) {
                    if (theChild.isParent()) {
                      var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w;
                      var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h;
                      var labelPos = theChild.css("text-halign");
                      theNode.labelWidth = labelWidth;
                      theNode.labelHeight = labelHeight;
                      theNode.labelPos = labelPos;
                    }
                  }
                  this.idToLNode[theChild.data("id")] = theNode;
                  if (isNaN(theNode.rect.x)) {
                    theNode.rect.x = 0;
                  }
                  if (isNaN(theNode.rect.y)) {
                    theNode.rect.y = 0;
                  }
                  if (children_of_children != null && children_of_children.length > 0) {
                    var theNewGraph;
                    theNewGraph = layout7.getGraphManager().add(layout7.newGraph(), theNode);
                    this.processChildrenList(theNewGraph, children_of_children, layout7);
                  }
                }
              };
              _CoSELayout.prototype.stop = function() {
                this.stopped = true;
                return this;
              };
              var register = /* @__PURE__ */ __name(function register2(cytoscape4) {
                cytoscape4("layout", "cose-bilkent", _CoSELayout);
              }, "register");
              if (typeof cytoscape !== "undefined") {
                register(cytoscape);
              }
              module3.exports = register;
            })
            /******/
          ])
        );
      });
    }
  });

  // src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts
  function addNodes(nodes5, cy) {
    nodes5.forEach((node2) => {
      const nodeData2 = {
        id: node2.id,
        labelText: node2.label,
        height: node2.height,
        width: node2.width,
        padding: node2.padding ?? 0
      };
      Object.keys(node2).forEach((key) => {
        if (!["id", "label", "height", "width", "padding", "x", "y"].includes(key)) {
          nodeData2[key] = node2[key];
        }
      });
      cy.add({
        group: "nodes",
        data: nodeData2,
        position: {
          x: node2.x ?? 0,
          y: node2.y ?? 0
        }
      });
    });
  }
  function addEdges(edges3, cy) {
    edges3.forEach((edge) => {
      const edgeData2 = {
        id: edge.id,
        source: edge.start,
        target: edge.end
      };
      Object.keys(edge).forEach((key) => {
        if (!["id", "start", "end"].includes(key)) {
          edgeData2[key] = edge[key];
        }
      });
      cy.add({
        group: "edges",
        data: edgeData2
      });
    });
  }
  function createCytoscapeInstance(data6) {
    return new Promise((resolve2) => {
      const renderEl = select_default2("body").append("div").attr("id", "cy").attr("style", "display:none");
      const cy = cytoscape2({
        container: document.getElementById("cy"),
        // container to render in
        style: [
          {
            selector: "edge",
            style: {
              "curve-style": "bezier"
            }
          }
        ]
      });
      renderEl.remove();
      addNodes(data6.nodes, cy);
      addEdges(data6.edges, cy);
      cy.nodes().forEach(function(n2) {
        n2.layoutDimensions = () => {
          const nodeData2 = n2.data();
          return { w: nodeData2.width, h: nodeData2.height };
        };
      });
      const layoutConfig = {
        name: "cose-bilkent",
        // @ts-ignore Types for cose-bilkent are not correct?
        quality: "proof",
        styleEnabled: false,
        animate: false
      };
      cy.layout(layoutConfig).run();
      cy.ready((e3) => {
        log.info("Cytoscape ready", e3);
        resolve2(cy);
      });
    });
  }
  function extractPositionedNodes(cy) {
    return cy.nodes().map((node2) => {
      const data6 = node2.data();
      const position5 = node2.position();
      const positionedNode = {
        id: data6.id,
        x: position5.x,
        y: position5.y
      };
      Object.keys(data6).forEach((key) => {
        if (key !== "id") {
          positionedNode[key] = data6[key];
        }
      });
      return positionedNode;
    });
  }
  function extractPositionedEdges(cy) {
    return cy.edges().map((edge) => {
      const data6 = edge.data();
      const rscratch = edge._private.rscratch;
      const positionedEdge = {
        id: data6.id,
        source: data6.source,
        target: data6.target,
        startX: rscratch.startX,
        startY: rscratch.startY,
        midX: rscratch.midX,
        midY: rscratch.midY,
        endX: rscratch.endX,
        endY: rscratch.endY
      };
      Object.keys(data6).forEach((key) => {
        if (!["id", "source", "target"].includes(key)) {
          positionedEdge[key] = data6[key];
        }
      });
      return positionedEdge;
    });
  }
  var import_cytoscape_cose_bilkent;
  var init_cytoscape_setup = __esm({
    "src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts"() {
      "use strict";
      init_cytoscape_esm();
      import_cytoscape_cose_bilkent = __toESM(require_cytoscape_cose_bilkent(), 1);
      init_src32();
      init_logger();
      cytoscape2.use(import_cytoscape_cose_bilkent.default);
      __name(addNodes, "addNodes");
      __name(addEdges, "addEdges");
      __name(createCytoscapeInstance, "createCytoscapeInstance");
      __name(extractPositionedNodes, "extractPositionedNodes");
      __name(extractPositionedEdges, "extractPositionedEdges");
    }
  });

  // src/rendering-util/layout-algorithms/cose-bilkent/layout.ts
  async function executeCoseBilkentLayout(data6, _config) {
    log.debug("Starting cose-bilkent layout algorithm");
    try {
      validateLayoutData(data6);
      const cy = await createCytoscapeInstance(data6);
      const positionedNodes = extractPositionedNodes(cy);
      const positionedEdges = extractPositionedEdges(cy);
      log.debug(`Layout completed: ${positionedNodes.length} nodes, ${positionedEdges.length} edges`);
      return {
        nodes: positionedNodes,
        edges: positionedEdges
      };
    } catch (error3) {
      log.error("Error in cose-bilkent layout algorithm:", error3);
      throw error3;
    }
  }
  function validateLayoutData(data6) {
    if (!data6) {
      throw new Error("Layout data is required");
    }
    if (!data6.config) {
      throw new Error("Configuration is required in layout data");
    }
    if (!data6.rootNode) {
      throw new Error("Root node is required");
    }
    if (!data6.nodes || !Array.isArray(data6.nodes)) {
      throw new Error("No nodes found in layout data");
    }
    if (!Array.isArray(data6.edges)) {
      throw new Error("Edges array is required in layout data");
    }
    return true;
  }
  var init_layout2 = __esm({
    "src/rendering-util/layout-algorithms/cose-bilkent/layout.ts"() {
      "use strict";
      init_logger();
      init_cytoscape_setup();
      __name(executeCoseBilkentLayout, "executeCoseBilkentLayout");
      __name(validateLayoutData, "validateLayoutData");
    }
  });

  // src/rendering-util/layout-algorithms/cose-bilkent/render.ts
  var render5;
  var init_render = __esm({
    "src/rendering-util/layout-algorithms/cose-bilkent/render.ts"() {
      "use strict";
      init_layout2();
      render5 = /* @__PURE__ */ __name(async (data4Layout, svg2, {
        insertCluster: insertCluster2,
        insertEdge: insertEdge3,
        insertEdgeLabel: insertEdgeLabel3,
        insertMarkers: insertMarkers4,
        insertNode: insertNode3,
        log: log3,
        positionEdgeLabel: positionEdgeLabel4
      }, { algorithm: _algorithm }) => {
        const nodeDb2 = {};
        const clusterDb2 = {};
        const element3 = svg2.select("g");
        insertMarkers4(element3, data4Layout.markers, data4Layout.type, data4Layout.diagramId);
        const subGraphsEl = element3.insert("g").attr("class", "subgraphs");
        const edgePaths = element3.insert("g").attr("class", "edgePaths");
        const edgeLabels3 = element3.insert("g").attr("class", "edgeLabels");
        const nodes5 = element3.insert("g").attr("class", "nodes");
        log3.debug("Inserting nodes into DOM for dimension calculation");
        await Promise.all(
          data4Layout.nodes.map(async (node2) => {
            if (node2.isGroup) {
              const clusterNode = { ...node2 };
              clusterDb2[node2.id] = clusterNode;
              nodeDb2[node2.id] = clusterNode;
              await insertCluster2(subGraphsEl, node2);
            } else {
              const nodeWithPosition = { ...node2 };
              nodeDb2[node2.id] = nodeWithPosition;
              const nodeEl = await insertNode3(nodes5, node2, {
                config: data4Layout.config,
                dir: data4Layout.direction || "TB"
              });
              const boundingBox3 = nodeEl.node().getBBox();
              nodeWithPosition.width = boundingBox3.width;
              nodeWithPosition.height = boundingBox3.height;
              nodeWithPosition.domId = nodeEl;
              log3.debug(`Node ${node2.id} dimensions: ${boundingBox3.width}x${boundingBox3.height}`);
            }
          })
        );
        log3.debug("Running cose-bilkent layout algorithm");
        const updatedLayoutData = {
          ...data4Layout,
          nodes: data4Layout.nodes.map((node2) => {
            const nodeWithDimensions = nodeDb2[node2.id];
            return {
              ...node2,
              width: nodeWithDimensions.width,
              height: nodeWithDimensions.height
            };
          })
        };
        const layoutResult = await executeCoseBilkentLayout(updatedLayoutData, data4Layout.config);
        log3.debug("Positioning nodes based on layout results");
        layoutResult.nodes.forEach((positionedNode) => {
          const node2 = nodeDb2[positionedNode.id];
          if (node2?.domId) {
            node2.domId.attr(
              "transform",
              `translate(${positionedNode.x}, ${positionedNode.y})`
            );
            node2.x = positionedNode.x;
            node2.y = positionedNode.y;
            log3.debug(`Positioned node ${node2.id} at center (${positionedNode.x}, ${positionedNode.y})`);
          }
        });
        layoutResult.edges.forEach((positionedEdge) => {
          const edge = data4Layout.edges.find((e3) => e3.id === positionedEdge.id);
          if (edge) {
            edge.points = [
              { x: positionedEdge.startX, y: positionedEdge.startY },
              { x: positionedEdge.midX, y: positionedEdge.midY },
              { x: positionedEdge.endX, y: positionedEdge.endY }
            ];
          }
        });
        log3.debug("Inserting and positioning edges");
        await Promise.all(
          data4Layout.edges.map(async (edge) => {
            const _edgeLabel = await insertEdgeLabel3(edgeLabels3, edge);
            const startNode = nodeDb2[edge.start ?? ""];
            const endNode = nodeDb2[edge.end ?? ""];
            if (startNode && endNode) {
              const positionedEdge = layoutResult.edges.find((e3) => e3.id === edge.id);
              if (positionedEdge) {
                log3.debug("APA01 positionedEdge", positionedEdge);
                const edgeWithPath = { ...edge };
                const paths = insertEdge3(
                  edgePaths,
                  edgeWithPath,
                  clusterDb2,
                  data4Layout.type,
                  startNode,
                  endNode,
                  data4Layout.diagramId
                );
                positionEdgeLabel4(edgeWithPath, paths);
              } else {
                const edgeWithPath = {
                  ...edge,
                  points: [
                    { x: startNode.x || 0, y: startNode.y || 0 },
                    { x: endNode.x || 0, y: endNode.y || 0 }
                  ]
                };
                const paths = insertEdge3(
                  edgePaths,
                  edgeWithPath,
                  clusterDb2,
                  data4Layout.type,
                  startNode,
                  endNode,
                  data4Layout.diagramId
                );
                positionEdgeLabel4(edgeWithPath, paths);
              }
            }
          })
        );
        log3.debug("Cose-bilkent rendering completed");
      }, "render");
    }
  });

  // src/rendering-util/layout-algorithms/cose-bilkent/index.ts
  var cose_bilkent_exports = {};
  __export(cose_bilkent_exports, {
    render: () => render6
  });
  var render6;
  var init_cose_bilkent = __esm({
    "src/rendering-util/layout-algorithms/cose-bilkent/index.ts"() {
      "use strict";
      init_render();
      render6 = render5;
    }
  });

  // src/rendering-util/render.ts
  var layoutAlgorithms, registerLayoutLoaders, registerDefaultLayoutLoaders, render7, getRegisteredLayoutAlgorithm;
  var init_render2 = __esm({
    "src/rendering-util/render.ts"() {
      "use strict";
      init_internals();
      init_logger();
      layoutAlgorithms = {};
      registerLayoutLoaders = /* @__PURE__ */ __name((loaders) => {
        for (const loader40 of loaders) {
          layoutAlgorithms[loader40.name] = loader40;
        }
      }, "registerLayoutLoaders");
      registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
        registerLayoutLoaders([
          {
            name: "dagre",
            loader: /* @__PURE__ */ __name(async () => await Promise.resolve().then(() => (init_dagre2(), dagre_exports)), "loader")
          },
          {
            name: "swimlane",
            loader: /* @__PURE__ */ __name(async () => await Promise.resolve().then(() => (init_swimlanes(), swimlanes_exports)), "loader")
          },
          ...true ? [
            {
              name: "cose-bilkent",
              loader: /* @__PURE__ */ __name(async () => await Promise.resolve().then(() => (init_cose_bilkent(), cose_bilkent_exports)), "loader")
            }
          ] : []
        ]);
      }, "registerDefaultLayoutLoaders");
      registerDefaultLayoutLoaders();
      render7 = /* @__PURE__ */ __name(async (data4Layout, svg2, positions2) => {
        if (!(data4Layout.layoutAlgorithm in layoutAlgorithms)) {
          throw new Error(`Unknown layout algorithm: ${data4Layout.layoutAlgorithm}`);
        }
        if (data4Layout.diagramId) {
          for (const node2 of data4Layout.nodes) {
            const originalDomId = node2.domId || node2.id;
            node2.domId = `${data4Layout.diagramId}-${originalDomId}`;
          }
        }
        const layoutDefinition = layoutAlgorithms[data4Layout.layoutAlgorithm];
        const layoutRenderer = await layoutDefinition.loader();
        const { theme, themeVariables } = data4Layout.config;
        const { useGradient, gradientStart, gradientStop } = themeVariables;
        const svgId = svg2.attr("id");
        svg2.append("defs").append("filter").attr("id", `${svgId}-drop-shadow`).attr("height", "130%").attr("width", "130%").append("feDropShadow").attr("dx", "4").attr("dy", "4").attr("stdDeviation", 0).attr("flood-opacity", "0.06").attr("flood-color", `${theme?.includes("dark") ? "#FFFFFF" : "#000000"}`);
        svg2.append("defs").append("filter").attr("id", `${svgId}-drop-shadow-small`).attr("height", "150%").attr("width", "150%").append("feDropShadow").attr("dx", "2").attr("dy", "2").attr("stdDeviation", 0).attr("flood-opacity", "0.06").attr("flood-color", `${theme?.includes("dark") ? "#FFFFFF" : "#000000"}`);
        if (useGradient) {
          const gradient = svg2.append("linearGradient").attr("id", svg2.attr("id") + "-gradient").attr("gradientUnits", "objectBoundingBox").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%");
          gradient.append("svg:stop").attr("offset", "0%").attr("stop-color", gradientStart).attr("stop-opacity", 1);
          gradient.append("svg:stop").attr("offset", "100%").attr("stop-color", gradientStop).attr("stop-opacity", 1);
        }
        return layoutRenderer.render(
          data4Layout,
          svg2,
          internalHelpers,
          {
            algorithm: layoutDefinition.algorithm
          },
          positions2
        );
      }, "render");
      getRegisteredLayoutAlgorithm = /* @__PURE__ */ __name((algorithm = "", { fallback = "dagre" } = {}) => {
        if (algorithm in layoutAlgorithms) {
          return algorithm;
        }
        if (fallback in layoutAlgorithms) {
          log.warn(`Layout algorithm ${algorithm} is not registered. Using ${fallback} as fallback.`);
          return fallback;
        }
        throw new Error(`Both layout algorithms ${algorithm} and ${fallback} are not registered.`);
      }, "getRegisteredLayoutAlgorithm");
    }
  });

  // src/rendering-util/setupViewPortForSVG.ts
  var setupViewPortForSVG, calculateDimensionsWithPadding, createViewBox;
  var init_setupViewPortForSVG = __esm({
    "src/rendering-util/setupViewPortForSVG.ts"() {
      "use strict";
      init_setupGraphViewbox();
      init_logger();
      setupViewPortForSVG = /* @__PURE__ */ __name((svg2, padding, cssDiagram, useMaxWidth) => {
        svg2.attr("class", cssDiagram);
        const { width: width3, height: height2, x: x5, y: y6 } = calculateDimensionsWithPadding(svg2, padding);
        configureSvgSize(svg2, height2, width3, useMaxWidth);
        const viewBox = createViewBox(x5, y6, width3, height2, padding);
        svg2.attr("viewBox", viewBox);
        log.debug(`viewBox configured: ${viewBox} with padding: ${padding}`);
      }, "setupViewPortForSVG");
      calculateDimensionsWithPadding = /* @__PURE__ */ __name((svg2, padding) => {
        const bounds4 = svg2.node()?.getBBox() || { width: 0, height: 0, x: 0, y: 0 };
        return {
          width: bounds4.width + padding * 2,
          height: bounds4.height + padding * 2,
          x: bounds4.x,
          y: bounds4.y
        };
      }, "calculateDimensionsWithPadding");
      createViewBox = /* @__PURE__ */ __name((x5, y6, width3, height2, padding) => {
        return `${x5 - padding} ${y6 - padding} ${width3} ${height2}`;
      }, "createViewBox");
    }
  });

  // src/diagrams/flowchart/flowRenderer-v3-unified.ts
  var getClasses, draw2, flowRenderer_v3_unified_default;
  var init_flowRenderer_v3_unified = __esm({
    "src/diagrams/flowchart/flowRenderer-v3-unified.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_insertElementsForSize();
      init_render2();
      init_setupViewPortForSVG();
      init_utils2();
      getClasses = /* @__PURE__ */ __name(function(text4, diagramObj) {
        return diagramObj.db.getClasses();
      }, "getClasses");
      draw2 = /* @__PURE__ */ __name(async function(text4, id41, _version, diag, positions2) {
        log.info("REF0:");
        log.info("Drawing state diagram (v2)", id41);
        const { securityLevel, flowchart: conf5, layout: layout7 } = getConfig2();
        diag.db.setDiagramId(id41);
        log.debug("Before getData: ");
        const data4Layout = diag.db.getData();
        log.debug("Data: ", data4Layout);
        const svg2 = getDiagramElement(id41, securityLevel);
        const direction2 = diag.db.getDirection();
        data4Layout.type = diag.type;
        data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout7);
        if (data4Layout.layoutAlgorithm === "dagre" && layout7 === "elk") {
          log.warn(
            "flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."
          );
        }
        data4Layout.direction = direction2;
        data4Layout.nodeSpacing = conf5?.nodeSpacing || 50;
        data4Layout.rankSpacing = conf5?.rankSpacing || 50;
        data4Layout.markers = ["point", "circle", "cross"];
        data4Layout.diagramId = id41;
        log.debug("REF1:", data4Layout);
        await render7(data4Layout, svg2, positions2);
        const padding = data4Layout.config.flowchart?.diagramPadding ?? 8;
        utils_default2.insertTitle(
          svg2,
          "flowchartTitleText",
          conf5?.titleTopMargin || 0,
          diag.db.getDiagramTitle()
        );
        setupViewPortForSVG(svg2, padding, "flowchart", conf5?.useMaxWidth || false);
      }, "draw");
      flowRenderer_v3_unified_default = {
        getClasses,
        draw: draw2
      };
    }
  });

  // src/diagrams/flowchart/parser/flow.jison
  var parser2, flow_default;
  var init_flow = __esm({
    "src/diagrams/flowchart/parser/flow.jison"() {
      "use strict";
      parser2 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124, 125], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 50], $Ve = [1, 49], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 45], $Vl = [1, 47], $Vm = [1, 43], $Vn = [1, 48], $Vo = [1, 44], $Vp = [1, 51], $Vq = [1, 46], $Vr = [1, 52], $Vs = [1, 53], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 38], $Vy = [1, 58], $Vz = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124, 125], $VA = [1, 62], $VB = [1, 61], $VC = [1, 63], $VD = [8, 9, 11, 75, 77, 78], $VE = [1, 79], $VF = [1, 92], $VG = [1, 97], $VH = [1, 96], $VI = [1, 93], $VJ = [1, 89], $VK = [1, 95], $VL = [1, 91], $VM = [1, 98], $VN = [1, 94], $VO = [1, 99], $VP = [1, 90], $VQ = [8, 9, 10, 11, 40, 75, 77, 78], $VR = [8, 9, 10, 11, 40, 46, 75, 77, 78], $VS = [8, 9, 10, 11, 29, 40, 44, 46, 48, 50, 52, 54, 56, 58, 60, 63, 65, 67, 68, 70, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VT = [8, 9, 11, 44, 60, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VU = [44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VV = [1, 122], $VW = [1, 123], $VX = [1, 125], $VY = [1, 124], $VZ = [44, 60, 62, 74, 89, 102, 105, 106, 109, 111, 114, 115, 116], $V_ = [1, 134], $V$ = [1, 148], $V01 = [1, 149], $V11 = [1, 150], $V21 = [1, 151], $V31 = [1, 136], $V41 = [1, 138], $V51 = [1, 142], $V61 = [1, 143], $V71 = [1, 144], $V81 = [1, 145], $V91 = [1, 146], $Va1 = [1, 147], $Vb1 = [1, 152], $Vc1 = [1, 153], $Vd1 = [1, 132], $Ve1 = [1, 133], $Vf1 = [1, 140], $Vg1 = [1, 135], $Vh1 = [1, 139], $Vi1 = [1, 137], $Vj1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124, 125], $Vk1 = [1, 155], $Vl1 = [1, 157], $Vm1 = [8, 9, 11], $Vn1 = [8, 9, 10, 11, 14, 44, 60, 89, 105, 106, 109, 111, 114, 115, 116], $Vo1 = [1, 177], $Vp1 = [1, 173], $Vq1 = [1, 174], $Vr1 = [1, 178], $Vs1 = [1, 175], $Vt1 = [1, 176], $Vu1 = [77, 116, 119], $Vv1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 44, 60, 75, 84, 85, 86, 87, 88, 89, 90, 105, 109, 111, 114, 115, 116], $Vw1 = [10, 106], $Vx1 = [31, 49, 51, 53, 55, 57, 62, 64, 66, 67, 69, 71, 116, 117, 118], $Vy1 = [1, 248], $Vz1 = [1, 246], $VA1 = [1, 250], $VB1 = [1, 244], $VC1 = [1, 245], $VD1 = [1, 247], $VE1 = [1, 249], $VF1 = [1, 251], $VG1 = [1, 269], $VH1 = [8, 9, 11, 106], $VI1 = [8, 9, 10, 11, 60, 84, 105, 106, 109, 110, 111, 112];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeparator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "vertexStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "shapeData": 39, "SHAPE_DATA": 40, "link": 41, "node": 42, "styledVertex": 43, "AMP": 44, "vertex": 45, "STYLE_SEPARATOR": 46, "idString": 47, "DOUBLECIRCLESTART": 48, "DOUBLECIRCLEEND": 49, "PS": 50, "PE": 51, "(-": 52, "-)": 53, "STADIUMSTART": 54, "STADIUMEND": 55, "SUBROUTINESTART": 56, "SUBROUTINEEND": 57, "VERTEX_WITH_PROPS_START": 58, "NODE_STRING[field]": 59, "COLON": 60, "NODE_STRING[value]": 61, "PIPE": 62, "CYLINDERSTART": 63, "CYLINDEREND": 64, "DIAMOND_START": 65, "DIAMOND_STOP": 66, "TAGEND": 67, "TRAPSTART": 68, "TRAPEND": 69, "INVTRAPSTART": 70, "INVTRAPEND": 71, "linkStatement": 72, "arrowText": 73, "TESTSTR": 74, "START_LINK": 75, "edgeText": 76, "LINK": 77, "LINK_ID": 78, "edgeTextToken": 79, "STR": 80, "MD_STR": 81, "textToken": 82, "keywords": 83, "STYLE": 84, "LINKSTYLE": 85, "CLASSDEF": 86, "CLASS": 87, "CLICK": 88, "DOWN": 89, "UP": 90, "textNoTagsToken": 91, "stylesOpt": 92, "idString[vertex]": 93, "idString[class]": 94, "CALLBACKNAME": 95, "CALLBACKARGS": 96, "HREF": 97, "LINK_TARGET": 98, "STR[link]": 99, "STR[tooltip]": 100, "alphaNum": 101, "DEFAULT": 102, "numList": 103, "INTERPOLATE": 104, "NUM": 105, "COMMA": 106, "style": 107, "styleComponent": 108, "NODE_STRING": 109, "UNIT": 110, "BRKT": 111, "PCT": 112, "idStringToken": 113, "MINUS": 114, "MULT": 115, "UNICODE_TEXT": 116, "TEXT": 117, "TAGSTART": 118, "EDGE_TEXT": 119, "alphaNumToken": 120, "direction_tb": 121, "direction_bt": 122, "direction_rl": 123, "direction_lr": 124, "direction_td": 125, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 40: "SHAPE_DATA", 44: "AMP", 46: "STYLE_SEPARATOR", 48: "DOUBLECIRCLESTART", 49: "DOUBLECIRCLEEND", 50: "PS", 51: "PE", 52: "(-", 53: "-)", 54: "STADIUMSTART", 55: "STADIUMEND", 56: "SUBROUTINESTART", 57: "SUBROUTINEEND", 58: "VERTEX_WITH_PROPS_START", 59: "NODE_STRING[field]", 60: "COLON", 61: "NODE_STRING[value]", 62: "PIPE", 63: "CYLINDERSTART", 64: "CYLINDEREND", 65: "DIAMOND_START", 66: "DIAMOND_STOP", 67: "TAGEND", 68: "TRAPSTART", 69: "TRAPEND", 70: "INVTRAPSTART", 71: "INVTRAPEND", 74: "TESTSTR", 75: "START_LINK", 77: "LINK", 78: "LINK_ID", 80: "STR", 81: "MD_STR", 84: "STYLE", 85: "LINKSTYLE", 86: "CLASSDEF", 87: "CLASS", 88: "CLICK", 89: "DOWN", 90: "UP", 93: "idString[vertex]", 94: "idString[class]", 95: "CALLBACKNAME", 96: "CALLBACKARGS", 97: "HREF", 98: "LINK_TARGET", 99: "STR[link]", 100: "STR[tooltip]", 102: "DEFAULT", 104: "INTERPOLATE", 105: "NUM", 106: "COMMA", 109: "NODE_STRING", 110: "UNIT", 111: "BRKT", 112: "PCT", 114: "MINUS", 115: "MULT", 116: "UNICODE_TEXT", 117: "TEXT", 118: "TAGSTART", 119: "EDGE_TEXT", 121: "direction_tb", 122: "direction_bt", 123: "direction_rl", 124: "direction_lr", 125: "direction_td" },
          productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [39, 2], [39, 1], [20, 4], [20, 3], [20, 4], [20, 2], [20, 2], [20, 1], [42, 1], [42, 6], [42, 5], [43, 1], [43, 3], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 8], [45, 4], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 4], [45, 4], [45, 1], [41, 2], [41, 3], [41, 3], [41, 1], [41, 3], [41, 4], [76, 1], [76, 2], [76, 1], [76, 1], [72, 1], [72, 2], [73, 3], [30, 1], [30, 2], [30, 1], [30, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [103, 1], [103, 3], [92, 1], [92, 3], [107, 1], [107, 2], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [82, 1], [82, 1], [82, 1], [82, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [79, 1], [79, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [47, 1], [47, 2], [101, 1], [101, 2], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 2:
                this.$ = [];
                break;
              case 3:
                if (!Array.isArray($$[$0]) || $$[$0].length > 0) {
                  $$[$0 - 1].push($$[$0]);
                }
                this.$ = $$[$0 - 1];
                break;
              case 4:
              case 183:
                this.$ = $$[$0];
                break;
              case 11:
                yy.setDirection("TB");
                this.$ = "TB";
                break;
              case 12:
                yy.setDirection($$[$0 - 1]);
                this.$ = $$[$0 - 1];
                break;
              case 27:
                this.$ = $$[$0 - 1].nodes;
                break;
              case 28:
              case 29:
              case 30:
              case 31:
              case 32:
                this.$ = [];
                break;
              case 33:
                this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]);
                break;
              case 34:
                this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]);
                break;
              case 35:
                this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0);
                break;
              case 37:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 38:
              case 39:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 43:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
              case 44:
                this.$ = $$[$0];
                break;
              case 45:
                yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]);
                yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);
                this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };
                break;
              case 46:
                yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]);
                this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) };
                break;
              case 47:
                yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);
                this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };
                break;
              case 48:
                this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] };
                break;
              case 49:
                yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]);
                this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1], shapeData: $$[$0] };
                break;
              case 50:
                this.$ = { stmt: $$[$0], nodes: $$[$0] };
                break;
              case 51:
                this.$ = [$$[$0]];
                break;
              case 52:
                yy.addVertex($$[$0 - 5][$$[$0 - 5].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0 - 4]);
                this.$ = $$[$0 - 5].concat($$[$0]);
                break;
              case 53:
                this.$ = $$[$0 - 4].concat($$[$0]);
                break;
              case 54:
                this.$ = $$[$0];
                break;
              case 55:
                this.$ = $$[$0 - 2];
                yy.setClass($$[$0 - 2], $$[$0]);
                break;
              case 56:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "square");
                break;
              case 57:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle");
                break;
              case 58:
                this.$ = $$[$0 - 5];
                yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle");
                break;
              case 59:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse");
                break;
              case 60:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium");
                break;
              case 61:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine");
                break;
              case 62:
                this.$ = $$[$0 - 7];
                yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]]));
                break;
              case 63:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder");
                break;
              case 64:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "round");
                break;
              case 65:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond");
                break;
              case 66:
                this.$ = $$[$0 - 5];
                yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon");
                break;
              case 67:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd");
                break;
              case 68:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid");
                break;
              case 69:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid");
                break;
              case 70:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right");
                break;
              case 71:
                this.$ = $$[$0 - 3];
                yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left");
                break;
              case 72:
                this.$ = $$[$0];
                yy.addVertex($$[$0]);
                break;
              case 73:
                $$[$0 - 1].text = $$[$0];
                this.$ = $$[$0 - 1];
                break;
              case 74:
              case 75:
                $$[$0 - 2].text = $$[$0 - 1];
                this.$ = $$[$0 - 2];
                break;
              case 76:
                this.$ = $$[$0];
                break;
              case 77:
                var inf = yy.destructLink($$[$0], $$[$0 - 2]);
                this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] };
                break;
              case 78:
                var inf = yy.destructLink($$[$0], $$[$0 - 2]);
                this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1], "id": $$[$0 - 3] };
                break;
              case 79:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 80:
                this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type };
                break;
              case 81:
                this.$ = { text: $$[$0], type: "string" };
                break;
              case 82:
                this.$ = { text: $$[$0], type: "markdown" };
                break;
              case 83:
                var inf = yy.destructLink($$[$0]);
                this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length };
                break;
              case 84:
                var inf = yy.destructLink($$[$0]);
                this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "id": $$[$0 - 1] };
                break;
              case 85:
                this.$ = $$[$0 - 1];
                break;
              case 86:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 87:
                this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type };
                break;
              case 88:
                this.$ = { text: $$[$0], type: "string" };
                break;
              case 89:
              case 104:
                this.$ = { text: $$[$0], type: "markdown" };
                break;
              case 101:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 102:
                this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type };
                break;
              case 103:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 105:
                this.$ = $$[$0 - 4];
                yy.addClass($$[$0 - 2], $$[$0]);
                break;
              case 106:
                this.$ = $$[$0 - 4];
                yy.setClass($$[$0 - 2], $$[$0]);
                break;
              case 107:
              case 115:
                this.$ = $$[$0 - 1];
                yy.setClickEvent($$[$0 - 1], $$[$0]);
                break;
              case 108:
              case 116:
                this.$ = $$[$0 - 3];
                yy.setClickEvent($$[$0 - 3], $$[$0 - 2]);
                yy.setTooltip($$[$0 - 3], $$[$0]);
                break;
              case 109:
                this.$ = $$[$0 - 2];
                yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);
                break;
              case 110:
                this.$ = $$[$0 - 4];
                yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]);
                yy.setTooltip($$[$0 - 4], $$[$0]);
                break;
              case 111:
                this.$ = $$[$0 - 2];
                yy.setLink($$[$0 - 2], $$[$0]);
                break;
              case 112:
                this.$ = $$[$0 - 4];
                yy.setLink($$[$0 - 4], $$[$0 - 2]);
                yy.setTooltip($$[$0 - 4], $$[$0]);
                break;
              case 113:
                this.$ = $$[$0 - 4];
                yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);
                break;
              case 114:
                this.$ = $$[$0 - 6];
                yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]);
                yy.setTooltip($$[$0 - 6], $$[$0 - 2]);
                break;
              case 117:
                this.$ = $$[$0 - 1];
                yy.setLink($$[$0 - 1], $$[$0]);
                break;
              case 118:
                this.$ = $$[$0 - 3];
                yy.setLink($$[$0 - 3], $$[$0 - 2]);
                yy.setTooltip($$[$0 - 3], $$[$0]);
                break;
              case 119:
                this.$ = $$[$0 - 3];
                yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);
                break;
              case 120:
                this.$ = $$[$0 - 5];
                yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]);
                yy.setTooltip($$[$0 - 5], $$[$0 - 2]);
                break;
              case 121:
                this.$ = $$[$0 - 4];
                yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]);
                break;
              case 122:
                this.$ = $$[$0 - 4];
                yy.updateLink([$$[$0 - 2]], $$[$0]);
                break;
              case 123:
                this.$ = $$[$0 - 4];
                yy.updateLink($$[$0 - 2], $$[$0]);
                break;
              case 124:
                this.$ = $$[$0 - 8];
                yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]);
                yy.updateLink([$$[$0 - 6]], $$[$0]);
                break;
              case 125:
                this.$ = $$[$0 - 8];
                yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]);
                yy.updateLink($$[$0 - 6], $$[$0]);
                break;
              case 126:
                this.$ = $$[$0 - 6];
                yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]);
                break;
              case 127:
                this.$ = $$[$0 - 6];
                yy.updateLinkInterpolate($$[$0 - 4], $$[$0]);
                break;
              case 128:
              case 130:
                this.$ = [$$[$0]];
                break;
              case 129:
              case 131:
                $$[$0 - 2].push($$[$0]);
                this.$ = $$[$0 - 2];
                break;
              case 133:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
              case 181:
                this.$ = $$[$0];
                break;
              case 182:
                this.$ = $$[$0 - 1] + "" + $$[$0];
                break;
              case 184:
                this.$ = $$[$0 - 1] + "" + $$[$0];
                break;
              case 185:
                this.$ = { stmt: "dir", value: "TB" };
                break;
              case 186:
                this.$ = { stmt: "dir", value: "BT" };
                break;
              case 187:
                this.$ = { stmt: "dir", value: "RL" };
                break;
              case 188:
                this.$ = { stmt: "dir", value: "LR" };
                break;
              case 189:
                this.$ = { stmt: "dir", value: "TD" };
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o2($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 39, 44: $Vd, 45: 40, 47: 41, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw, 125: $Vx }, o2($V3, [2, 9]), o2($V3, [2, 10]), o2($V3, [2, 11]), { 8: [1, 55], 9: [1, 56], 10: $Vy, 15: 54, 18: 57 }, o2($Vz, [2, 3]), o2($Vz, [2, 4]), o2($Vz, [2, 5]), o2($Vz, [2, 6]), o2($Vz, [2, 7]), o2($Vz, [2, 8]), { 8: $VA, 9: $VB, 11: $VC, 21: 59, 41: 60, 72: 64, 75: [1, 65], 77: [1, 67], 78: [1, 66] }, { 8: $VA, 9: $VB, 11: $VC, 21: 68 }, { 8: $VA, 9: $VB, 11: $VC, 21: 69 }, { 8: $VA, 9: $VB, 11: $VC, 21: 70 }, { 8: $VA, 9: $VB, 11: $VC, 21: 71 }, { 8: $VA, 9: $VB, 11: $VC, 21: 72 }, { 8: $VA, 9: $VB, 10: [1, 73], 11: $VC, 21: 74 }, o2($Vz, [2, 36]), { 35: [1, 75] }, { 37: [1, 76] }, o2($Vz, [2, 39]), o2($VD, [2, 50], { 18: 77, 39: 78, 10: $Vy, 40: $VE }), { 10: [1, 80] }, { 10: [1, 81] }, { 10: [1, 82] }, { 10: [1, 83] }, { 14: $VF, 44: $VG, 60: $VH, 80: [1, 87], 89: $VI, 95: [1, 84], 97: [1, 85], 101: 86, 105: $VJ, 106: $VK, 109: $VL, 111: $VM, 114: $VN, 115: $VO, 116: $VP, 120: 88 }, o2($Vz, [2, 185]), o2($Vz, [2, 186]), o2($Vz, [2, 187]), o2($Vz, [2, 188]), o2($Vz, [2, 189]), o2($VQ, [2, 51]), o2($VQ, [2, 54], { 46: [1, 100] }), o2($VR, [2, 72], { 113: 113, 29: [1, 101], 44: $Vd, 48: [1, 102], 50: [1, 103], 52: [1, 104], 54: [1, 105], 56: [1, 106], 58: [1, 107], 60: $Ve, 63: [1, 108], 65: [1, 109], 67: [1, 110], 68: [1, 111], 70: [1, 112], 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o2($VS, [2, 181]), o2($VS, [2, 142]), o2($VS, [2, 143]), o2($VS, [2, 144]), o2($VS, [2, 145]), o2($VS, [2, 146]), o2($VS, [2, 147]), o2($VS, [2, 148]), o2($VS, [2, 149]), o2($VS, [2, 150]), o2($VS, [2, 151]), o2($VS, [2, 152]), o2($V3, [2, 12]), o2($V3, [2, 18]), o2($V3, [2, 19]), { 9: [1, 114] }, o2($VT, [2, 26], { 18: 115, 10: $Vy }), o2($Vz, [2, 27]), { 42: 116, 43: 39, 44: $Vd, 45: 40, 47: 41, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vz, [2, 40]), o2($Vz, [2, 41]), o2($Vz, [2, 42]), o2($VU, [2, 76], { 73: 117, 62: [1, 119], 74: [1, 118] }), { 76: 120, 79: 121, 80: $VV, 81: $VW, 116: $VX, 119: $VY }, { 75: [1, 126], 77: [1, 127] }, o2($VZ, [2, 83]), o2($Vz, [2, 28]), o2($Vz, [2, 29]), o2($Vz, [2, 30]), o2($Vz, [2, 31]), o2($Vz, [2, 32]), { 10: $V_, 12: $V$, 14: $V01, 27: $V11, 28: 128, 32: $V21, 44: $V31, 60: $V41, 75: $V51, 80: [1, 130], 81: [1, 131], 83: 141, 84: $V61, 85: $V71, 86: $V81, 87: $V91, 88: $Va1, 89: $Vb1, 90: $Vc1, 91: 129, 105: $Vd1, 109: $Ve1, 111: $Vf1, 114: $Vg1, 115: $Vh1, 116: $Vi1 }, o2($Vj1, $V4, { 5: 154 }), o2($Vz, [2, 37]), o2($Vz, [2, 38]), o2($VD, [2, 48], { 44: $Vk1 }), o2($VD, [2, 49], { 18: 156, 10: $Vy, 40: $Vl1 }), o2($VQ, [2, 44]), { 44: $Vd, 47: 158, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, { 102: [1, 159], 103: 160, 105: [1, 161] }, { 44: $Vd, 47: 162, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, { 44: $Vd, 47: 163, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vm1, [2, 107], { 10: [1, 164], 96: [1, 165] }), { 80: [1, 166] }, o2($Vm1, [2, 115], { 120: 168, 10: [1, 167], 14: $VF, 44: $VG, 60: $VH, 89: $VI, 105: $VJ, 106: $VK, 109: $VL, 111: $VM, 114: $VN, 115: $VO, 116: $VP }), o2($Vm1, [2, 117], { 10: [1, 169] }), o2($Vn1, [2, 183]), o2($Vn1, [2, 170]), o2($Vn1, [2, 171]), o2($Vn1, [2, 172]), o2($Vn1, [2, 173]), o2($Vn1, [2, 174]), o2($Vn1, [2, 175]), o2($Vn1, [2, 176]), o2($Vn1, [2, 177]), o2($Vn1, [2, 178]), o2($Vn1, [2, 179]), o2($Vn1, [2, 180]), { 44: $Vd, 47: 170, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, { 30: 171, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 179, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 181, 50: [1, 180], 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 182, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 183, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 184, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 109: [1, 185] }, { 30: 186, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 187, 65: [1, 188], 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 189, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 190, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 191, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($VS, [2, 182]), o2($V3, [2, 20]), o2($VT, [2, 25]), o2($VD, [2, 46], { 39: 192, 18: 193, 10: $Vy, 40: $VE }), o2($VU, [2, 73], { 10: [1, 194] }), { 10: [1, 195] }, { 30: 196, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 77: [1, 197], 79: 198, 116: $VX, 119: $VY }, o2($Vu1, [2, 79]), o2($Vu1, [2, 81]), o2($Vu1, [2, 82]), o2($Vu1, [2, 168]), o2($Vu1, [2, 169]), { 76: 199, 79: 121, 80: $VV, 81: $VW, 116: $VX, 119: $VY }, o2($VZ, [2, 84]), { 8: $VA, 9: $VB, 10: $V_, 11: $VC, 12: $V$, 14: $V01, 21: 201, 27: $V11, 29: [1, 200], 32: $V21, 44: $V31, 60: $V41, 75: $V51, 83: 141, 84: $V61, 85: $V71, 86: $V81, 87: $V91, 88: $Va1, 89: $Vb1, 90: $Vc1, 91: 202, 105: $Vd1, 109: $Ve1, 111: $Vf1, 114: $Vg1, 115: $Vh1, 116: $Vi1 }, o2($Vv1, [2, 101]), o2($Vv1, [2, 103]), o2($Vv1, [2, 104]), o2($Vv1, [2, 157]), o2($Vv1, [2, 158]), o2($Vv1, [2, 159]), o2($Vv1, [2, 160]), o2($Vv1, [2, 161]), o2($Vv1, [2, 162]), o2($Vv1, [2, 163]), o2($Vv1, [2, 164]), o2($Vv1, [2, 165]), o2($Vv1, [2, 166]), o2($Vv1, [2, 167]), o2($Vv1, [2, 90]), o2($Vv1, [2, 91]), o2($Vv1, [2, 92]), o2($Vv1, [2, 93]), o2($Vv1, [2, 94]), o2($Vv1, [2, 95]), o2($Vv1, [2, 96]), o2($Vv1, [2, 97]), o2($Vv1, [2, 98]), o2($Vv1, [2, 99]), o2($Vv1, [2, 100]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 203], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 39, 44: $Vd, 45: 40, 47: 41, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw, 125: $Vx }, { 10: $Vy, 18: 204 }, { 44: [1, 205] }, o2($VQ, [2, 43]), { 10: [1, 206], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 113, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 207] }, { 10: [1, 208], 106: [1, 209] }, o2($Vw1, [2, 128]), { 10: [1, 210], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 113, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 211], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 113, 114: $Vq, 115: $Vr, 116: $Vs }, { 80: [1, 212] }, o2($Vm1, [2, 109], { 10: [1, 213] }), o2($Vm1, [2, 111], { 10: [1, 214] }), { 80: [1, 215] }, o2($Vn1, [2, 184]), { 80: [1, 216], 98: [1, 217] }, o2($VQ, [2, 55], { 113: 113, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), { 31: [1, 218], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($Vx1, [2, 86]), o2($Vx1, [2, 88]), o2($Vx1, [2, 89]), o2($Vx1, [2, 153]), o2($Vx1, [2, 154]), o2($Vx1, [2, 155]), o2($Vx1, [2, 156]), { 49: [1, 220], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 221, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 51: [1, 222], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 53: [1, 223], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 55: [1, 224], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 57: [1, 225], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 60: [1, 226] }, { 64: [1, 227], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 66: [1, 228], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 30: 229, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 31: [1, 230], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 67: $Vo1, 69: [1, 231], 71: [1, 232], 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 67: $Vo1, 69: [1, 234], 71: [1, 233], 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($VD, [2, 45], { 18: 156, 10: $Vy, 40: $Vl1 }), o2($VD, [2, 47], { 44: $Vk1 }), o2($VU, [2, 75]), o2($VU, [2, 74]), { 62: [1, 235], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($VU, [2, 77]), o2($Vu1, [2, 80]), { 77: [1, 236], 79: 198, 116: $VX, 119: $VY }, { 30: 237, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($Vj1, $V4, { 5: 238 }), o2($Vv1, [2, 102]), o2($Vz, [2, 35]), { 43: 239, 44: $Vd, 45: 40, 47: 41, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: $Vy, 18: 240 }, { 10: $Vy1, 60: $Vz1, 84: $VA1, 92: 241, 105: $VB1, 107: 242, 108: 243, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }, { 10: $Vy1, 60: $Vz1, 84: $VA1, 92: 252, 104: [1, 253], 105: $VB1, 107: 242, 108: 243, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }, { 10: $Vy1, 60: $Vz1, 84: $VA1, 92: 254, 104: [1, 255], 105: $VB1, 107: 242, 108: 243, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }, { 105: [1, 256] }, { 10: $Vy1, 60: $Vz1, 84: $VA1, 92: 257, 105: $VB1, 107: 242, 108: 243, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }, { 44: $Vd, 47: 258, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vm1, [2, 108]), { 80: [1, 259] }, { 80: [1, 260], 98: [1, 261] }, o2($Vm1, [2, 116]), o2($Vm1, [2, 118], { 10: [1, 262] }), o2($Vm1, [2, 119]), o2($VR, [2, 56]), o2($Vx1, [2, 87]), o2($VR, [2, 57]), { 51: [1, 263], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($VR, [2, 64]), o2($VR, [2, 59]), o2($VR, [2, 60]), o2($VR, [2, 61]), { 109: [1, 264] }, o2($VR, [2, 63]), o2($VR, [2, 65]), { 66: [1, 265], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($VR, [2, 67]), o2($VR, [2, 68]), o2($VR, [2, 70]), o2($VR, [2, 69]), o2($VR, [2, 71]), o2([10, 44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], [2, 85]), o2($VU, [2, 78]), { 31: [1, 266], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 267], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 39, 44: $Vd, 45: 40, 47: 41, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw, 125: $Vx }, o2($VQ, [2, 53]), { 43: 268, 44: $Vd, 45: 40, 47: 41, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vm1, [2, 121], { 106: $VG1 }), o2($VH1, [2, 130], { 108: 270, 10: $Vy1, 60: $Vz1, 84: $VA1, 105: $VB1, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }), o2($VI1, [2, 132]), o2($VI1, [2, 134]), o2($VI1, [2, 135]), o2($VI1, [2, 136]), o2($VI1, [2, 137]), o2($VI1, [2, 138]), o2($VI1, [2, 139]), o2($VI1, [2, 140]), o2($VI1, [2, 141]), o2($Vm1, [2, 122], { 106: $VG1 }), { 10: [1, 271] }, o2($Vm1, [2, 123], { 106: $VG1 }), { 10: [1, 272] }, o2($Vw1, [2, 129]), o2($Vm1, [2, 105], { 106: $VG1 }), o2($Vm1, [2, 106], { 113: 113, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o2($Vm1, [2, 110]), o2($Vm1, [2, 112], { 10: [1, 273] }), o2($Vm1, [2, 113]), { 98: [1, 274] }, { 51: [1, 275] }, { 62: [1, 276] }, { 66: [1, 277] }, { 8: $VA, 9: $VB, 11: $VC, 21: 278 }, o2($Vz, [2, 34]), o2($VQ, [2, 52]), { 10: $Vy1, 60: $Vz1, 84: $VA1, 105: $VB1, 107: 279, 108: 243, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }, o2($VI1, [2, 133]), { 14: $VF, 44: $VG, 60: $VH, 89: $VI, 101: 280, 105: $VJ, 106: $VK, 109: $VL, 111: $VM, 114: $VN, 115: $VO, 116: $VP, 120: 88 }, { 14: $VF, 44: $VG, 60: $VH, 89: $VI, 101: 281, 105: $VJ, 106: $VK, 109: $VL, 111: $VM, 114: $VN, 115: $VO, 116: $VP, 120: 88 }, { 98: [1, 282] }, o2($Vm1, [2, 120]), o2($VR, [2, 58]), { 30: 283, 67: $Vo1, 80: $Vp1, 81: $Vq1, 82: 172, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, o2($VR, [2, 66]), o2($Vj1, $V4, { 5: 284 }), o2($VH1, [2, 131], { 108: 270, 10: $Vy1, 60: $Vz1, 84: $VA1, 105: $VB1, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }), o2($Vm1, [2, 126], { 120: 168, 10: [1, 285], 14: $VF, 44: $VG, 60: $VH, 89: $VI, 105: $VJ, 106: $VK, 109: $VL, 111: $VM, 114: $VN, 115: $VO, 116: $VP }), o2($Vm1, [2, 127], { 120: 168, 10: [1, 286], 14: $VF, 44: $VG, 60: $VH, 89: $VI, 105: $VJ, 106: $VK, 109: $VL, 111: $VM, 114: $VN, 115: $VO, 116: $VP }), o2($Vm1, [2, 114]), { 31: [1, 287], 67: $Vo1, 82: 219, 116: $Vr1, 117: $Vs1, 118: $Vt1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 288], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 39, 44: $Vd, 45: 40, 47: 41, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 42, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw, 125: $Vx }, { 10: $Vy1, 60: $Vz1, 84: $VA1, 92: 289, 105: $VB1, 107: 242, 108: 243, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }, { 10: $Vy1, 60: $Vz1, 84: $VA1, 92: 290, 105: $VB1, 107: 242, 108: 243, 109: $VC1, 110: $VD1, 111: $VE1, 112: $VF1 }, o2($VR, [2, 62]), o2($Vz, [2, 33]), o2($Vm1, [2, 124], { 106: $VG1 }), o2($Vm1, [2, 125], { 106: $VG1 })],
          defaultActions: {},
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: {},
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  this.begin("acc_title");
                  return 34;
                  break;
                case 1:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 2:
                  this.begin("acc_descr");
                  return 36;
                  break;
                case 3:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 4:
                  this.begin("acc_descr_multiline");
                  break;
                case 5:
                  this.popState();
                  break;
                case 6:
                  return "acc_descr_multiline_value";
                  break;
                case 7:
                  this.pushState("shapeData");
                  yy_.yytext = "";
                  return 40;
                  break;
                case 8:
                  this.pushState("shapeDataStr");
                  return 40;
                  break;
                case 9:
                  this.popState();
                  return 40;
                  break;
                case 10:
                  const re3 = /\n\s*/g;
                  yy_.yytext = yy_.yytext.replace(re3, "<br/>");
                  return 40;
                  break;
                case 11:
                  return 40;
                  break;
                case 12:
                  this.popState();
                  break;
                case 13:
                  this.begin("callbackname");
                  break;
                case 14:
                  this.popState();
                  break;
                case 15:
                  this.popState();
                  this.begin("callbackargs");
                  break;
                case 16:
                  return 95;
                  break;
                case 17:
                  this.popState();
                  break;
                case 18:
                  return 96;
                  break;
                case 19:
                  return "MD_STR";
                  break;
                case 20:
                  this.popState();
                  break;
                case 21:
                  this.begin("md_string");
                  break;
                case 22:
                  return "STR";
                  break;
                case 23:
                  this.popState();
                  break;
                case 24:
                  this.pushState("string");
                  break;
                case 25:
                  return 84;
                  break;
                case 26:
                  return 102;
                  break;
                case 27:
                  return 85;
                  break;
                case 28:
                  return 104;
                  break;
                case 29:
                  return 86;
                  break;
                case 30:
                  return 87;
                  break;
                case 31:
                  return 97;
                  break;
                case 32:
                  this.begin("click");
                  break;
                case 33:
                  this.popState();
                  break;
                case 34:
                  return 88;
                  break;
                case 35:
                  if (yy.lex.firstGraph()) {
                    this.begin("dir");
                  }
                  return 12;
                  break;
                case 36:
                  if (yy.lex.firstGraph()) {
                    this.begin("dir");
                  }
                  return 12;
                  break;
                case 37:
                  if (yy.lex.firstGraph()) {
                    this.begin("dir");
                  }
                  return 12;
                  break;
                case 38:
                  if (yy.lex.firstGraph()) {
                    this.begin("dir");
                  }
                  return 12;
                  break;
                case 39:
                  return 27;
                  break;
                case 40:
                  return 32;
                  break;
                case 41:
                  return 98;
                  break;
                case 42:
                  return 98;
                  break;
                case 43:
                  return 98;
                  break;
                case 44:
                  return 98;
                  break;
                case 45:
                  this.popState();
                  return 13;
                  break;
                case 46:
                  this.popState();
                  return 14;
                  break;
                case 47:
                  this.popState();
                  return 14;
                  break;
                case 48:
                  this.popState();
                  return 14;
                  break;
                case 49:
                  this.popState();
                  return 14;
                  break;
                case 50:
                  this.popState();
                  return 14;
                  break;
                case 51:
                  this.popState();
                  return 14;
                  break;
                case 52:
                  this.popState();
                  return 14;
                  break;
                case 53:
                  this.popState();
                  return 14;
                  break;
                case 54:
                  this.popState();
                  return 14;
                  break;
                case 55:
                  this.popState();
                  return 14;
                  break;
                case 56:
                  return 121;
                  break;
                case 57:
                  return 122;
                  break;
                case 58:
                  return 123;
                  break;
                case 59:
                  return 124;
                  break;
                case 60:
                  return 125;
                  break;
                case 61:
                  return 78;
                  break;
                case 62:
                  return 105;
                  break;
                case 63:
                  return 111;
                  break;
                case 64:
                  return 46;
                  break;
                case 65:
                  return 60;
                  break;
                case 66:
                  return 44;
                  break;
                case 67:
                  return 8;
                  break;
                case 68:
                  return 106;
                  break;
                case 69:
                  return 115;
                  break;
                case 70:
                  this.popState();
                  return 77;
                  break;
                case 71:
                  this.pushState("edgeText");
                  return 75;
                  break;
                case 72:
                  return 119;
                  break;
                case 73:
                  this.popState();
                  return 77;
                  break;
                case 74:
                  this.pushState("thickEdgeText");
                  return 75;
                  break;
                case 75:
                  return 119;
                  break;
                case 76:
                  this.popState();
                  return 77;
                  break;
                case 77:
                  this.pushState("dottedEdgeText");
                  return 75;
                  break;
                case 78:
                  return 119;
                  break;
                case 79:
                  return 77;
                  break;
                case 80:
                  this.popState();
                  return 53;
                  break;
                case 81:
                  return "TEXT";
                  break;
                case 82:
                  this.pushState("ellipseText");
                  return 52;
                  break;
                case 83:
                  this.popState();
                  return 55;
                  break;
                case 84:
                  this.pushState("text");
                  return 54;
                  break;
                case 85:
                  this.popState();
                  return 57;
                  break;
                case 86:
                  this.pushState("text");
                  return 56;
                  break;
                case 87:
                  return 58;
                  break;
                case 88:
                  this.pushState("text");
                  return 67;
                  break;
                case 89:
                  this.popState();
                  return 64;
                  break;
                case 90:
                  this.pushState("text");
                  return 63;
                  break;
                case 91:
                  this.popState();
                  return 49;
                  break;
                case 92:
                  this.pushState("text");
                  return 48;
                  break;
                case 93:
                  this.popState();
                  return 69;
                  break;
                case 94:
                  this.popState();
                  return 71;
                  break;
                case 95:
                  return 117;
                  break;
                case 96:
                  this.pushState("trapText");
                  return 68;
                  break;
                case 97:
                  this.pushState("trapText");
                  return 70;
                  break;
                case 98:
                  return 118;
                  break;
                case 99:
                  return 67;
                  break;
                case 100:
                  return 90;
                  break;
                case 101:
                  return "SEP";
                  break;
                case 102:
                  return 89;
                  break;
                case 103:
                  return 115;
                  break;
                case 104:
                  return 111;
                  break;
                case 105:
                  return 44;
                  break;
                case 106:
                  return 109;
                  break;
                case 107:
                  return 114;
                  break;
                case 108:
                  return 116;
                  break;
                case 109:
                  this.popState();
                  return 62;
                  break;
                case 110:
                  this.pushState("text");
                  return 62;
                  break;
                case 111:
                  this.popState();
                  return 51;
                  break;
                case 112:
                  this.pushState("text");
                  return 50;
                  break;
                case 113:
                  this.popState();
                  return 31;
                  break;
                case 114:
                  this.pushState("text");
                  return 29;
                  break;
                case 115:
                  this.popState();
                  return 66;
                  break;
                case 116:
                  this.pushState("text");
                  return 65;
                  break;
                case 117:
                  return "TEXT";
                  break;
                case 118:
                  return "QUOTE";
                  break;
                case 119:
                  return 9;
                  break;
                case 120:
                  return 10;
                  break;
                case 121:
                  return 11;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:@\{)/, /^(?:["])/, /^(?:["])/, /^(?:[^\"]+)/, /^(?:[^}^"]+)/, /^(?:\})/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:swimlane-beta\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:.*direction\s+TD[^\n]*)/, /^(?:[^\s\"]+@(?=[^\{\"]))/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/],
            conditions: { "shapeDataEndBracket": { "rules": [21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "shapeDataStr": { "rules": [9, 10, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "shapeData": { "rules": [8, 11, 12, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "callbackargs": { "rules": [17, 18, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "callbackname": { "rules": [14, 15, 16, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "href": { "rules": [21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "click": { "rules": [21, 24, 33, 34, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "dottedEdgeText": { "rules": [21, 24, 76, 78, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "thickEdgeText": { "rules": [21, 24, 73, 75, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "edgeText": { "rules": [21, 24, 70, 72, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "trapText": { "rules": [21, 24, 79, 82, 84, 86, 90, 92, 93, 94, 95, 96, 97, 110, 112, 114, 116], "inclusive": false }, "ellipseText": { "rules": [21, 24, 79, 80, 81, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "text": { "rules": [21, 24, 79, 82, 83, 84, 85, 86, 89, 90, 91, 92, 96, 97, 109, 110, 111, 112, 113, 114, 115, 116, 117], "inclusive": false }, "vertex": { "rules": [21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "dir": { "rules": [21, 24, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "acc_descr": { "rules": [3, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "acc_title": { "rules": [1, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "md_string": { "rules": [19, 20, 21, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "string": { "rules": [21, 22, 23, 24, 79, 82, 84, 86, 90, 92, 96, 97, 110, 112, 114, 116], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 13, 21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 76, 77, 79, 82, 84, 86, 87, 88, 90, 92, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 112, 114, 116, 118, 119, 120, 121], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser2.parser = parser2;
      flow_default = parser2;
    }
  });

  // src/diagrams/flowchart/parser/flowParser.ts
  var newParser, flowParser_default;
  var init_flowParser = __esm({
    "src/diagrams/flowchart/parser/flowParser.ts"() {
      "use strict";
      init_flow();
      newParser = Object.assign({}, flow_default);
      newParser.parse = (src) => {
        const newSrc = src.replace(/}\s*\n/g, "}\n");
        return flow_default.parse(newSrc);
      };
      flowParser_default = newParser;
    }
  });

  // src/diagrams/globalStyles.ts
  var getIconStyles;
  var init_globalStyles = __esm({
    "src/diagrams/globalStyles.ts"() {
      "use strict";
      getIconStyles = /* @__PURE__ */ __name(() => `
  /* Font Awesome icon styling - consolidated */
  .label-icon {
    display: inline-block;
    height: 1em;
    overflow: visible;
    vertical-align: -0.125em;
  }
  
  .node .label-icon path {
    fill: currentColor;
    stroke: revert;
    stroke-width: revert;
  }
`, "getIconStyles");
    }
  });

  // src/diagrams/flowchart/styles.ts
  var fade, getStyles3, styles_default3;
  var init_styles3 = __esm({
    "src/diagrams/flowchart/styles.ts"() {
      "use strict";
      init_dist();
      init_globalStyles();
      fade = /* @__PURE__ */ __name((color2, opacity) => {
        const channel2 = channel_default2;
        const r2 = channel2(color2, "r");
        const g2 = channel2(color2, "g");
        const b3 = channel2(color2, "b");
        return rgba_default(r2, g2, b3, opacity);
      }, "fade");
      getStyles3 = /* @__PURE__ */ __name((options2) => `.label {
    font-family: ${options2.fontFamily};
    color: ${options2.nodeTextColor || options2.textColor};
  }
  .cluster-label text {
    fill: ${options2.titleColor};
  }
  .cluster-label span {
    color: ${options2.titleColor};
  }
  .cluster-label span p {
    background-color: transparent;
  }

  .label text,span {
    fill: ${options2.nodeTextColor || options2.textColor};
    color: ${options2.nodeTextColor || options2.textColor};
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${options2.mainBkg};
    stroke: ${options2.nodeBorder};
    stroke-width: ${options2.strokeWidth ?? 1}px;
  }
  .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {
    text-anchor: middle;
  }

  .node .katex path {
    fill: #000;
    stroke: #000;
    stroke-width: 1px;
  }

  .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {
    text-align: center;
  }
  .node.clickable {
    cursor: pointer;
  }


  .root .anchor path {
    fill: ${options2.lineColor} !important;
    stroke-width: 0;
    stroke: ${options2.lineColor};
  }

  .arrowheadPath {
    fill: ${options2.arrowheadColor};
  }

  .edgePath .path {
    stroke: ${options2.lineColor};
    stroke-width: ${options2.strokeWidth ?? 2}px;
  }

  .flowchart-link {
    stroke: ${options2.lineColor};
    fill: none;
  }

  .edgeLabel {
    background-color: ${options2.edgeLabelBackground};
    p {
      background-color: ${options2.edgeLabelBackground};
    }
    rect {
      opacity: 0.5;
      background-color: ${options2.edgeLabelBackground};
      fill: ${options2.edgeLabelBackground};
    }
    text-align: center;
  }

  /* For html labels only */
  .labelBkg {
    background-color: ${fade(options2.edgeLabelBackground, 0.5)};
    // background-color:
  }

  .cluster rect {
    fill: ${options2.clusterBkg};
    stroke: ${options2.clusterBorder};
    stroke-width: 1px;
  }

  .cluster text {
    fill: ${options2.titleColor};
  }

  .cluster span {
    color: ${options2.titleColor};
  }
  /* .cluster div {
    color: ${options2.titleColor};
  } */

  div.mermaidTooltip {
    position: absolute;
    text-align: center;
    max-width: 200px;
    padding: 2px;
    font-family: ${options2.fontFamily};
    font-size: 12px;
    background: ${options2.tertiaryColor};
    border: 1px solid ${options2.border2};
    border-radius: 2px;
    pointer-events: none;
    z-index: 100;
  }

  .flowchartTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${options2.textColor};
  }

  rect.text {
    fill: none;
    stroke-width: 0;
  }

  .icon-shape, .image-shape {
    background-color: ${options2.edgeLabelBackground};
    p {
      background-color: ${options2.edgeLabelBackground};
      padding: 2px;
    }
    .label rect {
      opacity: 0.5;
      background-color: ${options2.edgeLabelBackground};
      fill: ${options2.edgeLabelBackground};
    }
    text-align: center;
  }
  ${getIconStyles()}
`, "getStyles");
      styles_default3 = getStyles3;
    }
  });

  // src/diagrams/flowchart/flowDiagram.ts
  var flowDiagram_exports = {};
  __export(flowDiagram_exports, {
    createFlowDiagram: () => createFlowDiagram,
    diagram: () => diagram2
  });
  var createFlowDiagram, diagram2;
  var init_flowDiagram = __esm({
    "src/diagrams/flowchart/flowDiagram.ts"() {
      "use strict";
      init_config();
      init_diagramAPI();
      init_flowDb();
      init_flowRenderer_v3_unified();
      init_flowParser();
      init_styles3();
      createFlowDiagram = /* @__PURE__ */ __name(({
        defaultLayout,
        styles: styles7 = styles_default3
      } = {}) => ({
        parser: flowParser_default,
        get db() {
          return new FlowDB();
        },
        renderer: flowRenderer_v3_unified_default,
        styles: styles7,
        init: /* @__PURE__ */ __name((cnf) => {
          if (!cnf.flowchart) {
            cnf.flowchart = {};
          }
          const layout7 = getUserDefinedConfig().layout ?? defaultLayout ?? cnf.layout;
          if (layout7) {
            setConfig2({ layout: layout7 });
          }
          cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
          setConfig2({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } });
        }, "init")
      }), "createFlowDiagram");
      diagram2 = createFlowDiagram();
    }
  });

  // src/diagrams/swimlanes/styles.ts
  var getStyles4, styles_default4;
  var init_styles4 = __esm({
    "src/diagrams/swimlanes/styles.ts"() {
      "use strict";
      init_styles3();
      getStyles4 = /* @__PURE__ */ __name((options2) => `${styles_default3(options2)}
  .swimlane.cluster rect {
    stroke: ${options2.clusterBorder} !important;
  }
  [data-look="neo"].cluster rect {
    filter: none;
  }
`, "getStyles");
      styles_default4 = getStyles4;
    }
  });

  // src/diagrams/swimlanes/swimlanesDiagram.ts
  var swimlanesDiagram_exports = {};
  __export(swimlanesDiagram_exports, {
    diagram: () => diagram3
  });
  var diagram3;
  var init_swimlanesDiagram = __esm({
    "src/diagrams/swimlanes/swimlanesDiagram.ts"() {
      "use strict";
      init_flowDiagram();
      init_styles4();
      diagram3 = createFlowDiagram({ defaultLayout: "swimlane", styles: styles_default4 });
    }
  });

  // src/diagrams/er/parser/erDiagram.jison
  var parser3, erDiagram_default;
  var init_erDiagram = __esm({
    "src/diagrams/er/parser/erDiagram.jison"() {
      "use strict";
      parser3 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [6, 8, 10, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 48, 50, 51, 52], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 23], $V6 = [1, 24], $V7 = [1, 25], $V8 = [1, 26], $V9 = [1, 27], $Va = [1, 19], $Vb = [1, 28], $Vc = [1, 29], $Vd = [1, 20], $Ve = [1, 18], $Vf = [1, 21], $Vg = [1, 22], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 38], $Vk = [1, 39], $Vl = [1, 40], $Vm = [6, 8, 10, 13, 15, 17, 20, 21, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 48, 50, 51, 52, 66, 67, 68, 69, 70], $Vn = [1, 45], $Vo = [1, 46], $Vp = [1, 55], $Vq = [40, 48, 50, 51, 52, 71, 72], $Vr = [1, 66], $Vs = [1, 64], $Vt = [1, 61], $Vu = [1, 65], $Vv = [1, 67], $Vw = [6, 8, 10, 13, 17, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 48, 49, 50, 51, 52, 66, 67, 68, 69, 70], $Vx = [66, 67, 68, 69, 70], $Vy = [1, 85], $Vz = [1, 84], $VA = [1, 82], $VB = [1, 83], $VC = [6, 10, 42, 47], $VD = [6, 10, 13, 41, 42, 47, 48, 49], $VE = [1, 93], $VF = [1, 92], $VG = [1, 91], $VH = [19, 58], $VI = [1, 102], $VJ = [1, 101], $VK = [19, 58, 61, 63];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "ER_DIAGRAM": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "entityName": 11, "relSpec": 12, "COLON": 13, "role": 14, "STYLE_SEPARATOR": 15, "idList": 16, "BLOCK_START": 17, "attributes": 18, "BLOCK_STOP": 19, "SQS": 20, "SQE": 21, "title": 22, "title_value": 23, "acc_title": 24, "acc_title_value": 25, "acc_descr": 26, "acc_descr_value": 27, "acc_descr_multiline_value": 28, "direction": 29, "classDefStatement": 30, "classStatement": 31, "styleStatement": 32, "direction_tb": 33, "direction_bt": 34, "direction_rl": 35, "direction_lr": 36, "CLASSDEF": 37, "stylesOpt": 38, "separator": 39, "UNICODE_TEXT": 40, "STYLE_TEXT": 41, "COMMA": 42, "CLASS": 43, "STYLE": 44, "style": 45, "styleComponent": 46, "SEMI": 47, "NUM": 48, "BRKT": 49, "ENTITY_NAME": 50, "DECIMAL_NUM": 51, "ENTITY_ONE": 52, "attribute": 53, "attributeType": 54, "attributeName": 55, "attributeKeyTypeList": 56, "attributeComment": 57, "ATTRIBUTE_WORD": 58, "?": 59, "attributeKeyType": 60, ",": 61, "ATTRIBUTE_KEY": 62, "COMMENT": 63, "cardinality": 64, "relType": 65, "ZERO_OR_ONE": 66, "ZERO_OR_MORE": 67, "ONE_OR_MORE": 68, "ONLY_ONE": 69, "MD_PARENT": 70, "NON_IDENTIFYING": 71, "IDENTIFYING": 72, "WORD": 73, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 13: "COLON", 15: "STYLE_SEPARATOR", 17: "BLOCK_START", 19: "BLOCK_STOP", 20: "SQS", 21: "SQE", 22: "title", 23: "title_value", 24: "acc_title", 25: "acc_title_value", 26: "acc_descr", 27: "acc_descr_value", 28: "acc_descr_multiline_value", 33: "direction_tb", 34: "direction_bt", 35: "direction_rl", 36: "direction_lr", 37: "CLASSDEF", 40: "UNICODE_TEXT", 41: "STYLE_TEXT", 42: "COMMA", 43: "CLASS", 44: "STYLE", 47: "SEMI", 48: "NUM", 49: "BRKT", 50: "ENTITY_NAME", 51: "DECIMAL_NUM", 52: "ENTITY_ONE", 58: "ATTRIBUTE_WORD", 59: "?", 61: ",", 62: "ATTRIBUTE_KEY", 63: "COMMENT", 66: "ZERO_OR_ONE", 67: "ZERO_OR_MORE", 68: "ONE_OR_MORE", 69: "ONLY_ONE", 70: "MD_PARENT", 71: "NON_IDENTIFYING", 72: "IDENTIFYING", 73: "WORD" },
          productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 5], [9, 9], [9, 7], [9, 7], [9, 4], [9, 6], [9, 3], [9, 5], [9, 1], [9, 3], [9, 7], [9, 9], [9, 6], [9, 8], [9, 4], [9, 6], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [29, 1], [29, 1], [29, 1], [29, 1], [30, 4], [16, 1], [16, 1], [16, 3], [16, 3], [31, 3], [32, 4], [38, 1], [38, 3], [45, 1], [45, 2], [39, 1], [39, 1], [39, 1], [46, 1], [46, 1], [46, 1], [46, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [18, 1], [18, 2], [53, 2], [53, 3], [53, 3], [53, 4], [54, 1], [54, 2], [55, 1], [56, 1], [56, 3], [60, 1], [57, 1], [12, 3], [64, 1], [64, 1], [64, 1], [64, 1], [64, 1], [65, 1], [65, 1], [14, 1], [14, 1], [14, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 1:
                break;
              case 2:
                this.$ = [];
                break;
              case 3:
                $$[$0 - 1].push($$[$0]);
                this.$ = $$[$0 - 1];
                break;
              case 4:
              case 5:
                this.$ = $$[$0];
                break;
              case 6:
              case 7:
                this.$ = [];
                break;
              case 8:
                yy.addEntity($$[$0 - 4]);
                yy.addEntity($$[$0 - 2]);
                yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]);
                break;
              case 9:
                yy.addEntity($$[$0 - 8]);
                yy.addEntity($$[$0 - 4]);
                yy.addRelationship($$[$0 - 8], $$[$0], $$[$0 - 4], $$[$0 - 5]);
                yy.setClass([$$[$0 - 8]], $$[$0 - 6]);
                yy.setClass([$$[$0 - 4]], $$[$0 - 2]);
                break;
              case 10:
                yy.addEntity($$[$0 - 6]);
                yy.addEntity($$[$0 - 2]);
                yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 3]);
                yy.setClass([$$[$0 - 6]], $$[$0 - 4]);
                break;
              case 11:
                yy.addEntity($$[$0 - 6]);
                yy.addEntity($$[$0 - 4]);
                yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 5]);
                yy.setClass([$$[$0 - 4]], $$[$0 - 2]);
                break;
              case 12:
                yy.addEntity($$[$0 - 3]);
                yy.addAttributes($$[$0 - 3], $$[$0 - 1]);
                break;
              case 13:
                yy.addEntity($$[$0 - 5]);
                yy.addAttributes($$[$0 - 5], $$[$0 - 1]);
                yy.setClass([$$[$0 - 5]], $$[$0 - 3]);
                break;
              case 14:
                yy.addEntity($$[$0 - 2]);
                break;
              case 15:
                yy.addEntity($$[$0 - 4]);
                yy.setClass([$$[$0 - 4]], $$[$0 - 2]);
                break;
              case 16:
                yy.addEntity($$[$0]);
                break;
              case 17:
                yy.addEntity($$[$0 - 2]);
                yy.setClass([$$[$0 - 2]], $$[$0]);
                break;
              case 18:
                yy.addEntity($$[$0 - 6], $$[$0 - 4]);
                yy.addAttributes($$[$0 - 6], $$[$0 - 1]);
                break;
              case 19:
                yy.addEntity($$[$0 - 8], $$[$0 - 6]);
                yy.addAttributes($$[$0 - 8], $$[$0 - 1]);
                yy.setClass([$$[$0 - 8]], $$[$0 - 3]);
                break;
              case 20:
                yy.addEntity($$[$0 - 5], $$[$0 - 3]);
                break;
              case 21:
                yy.addEntity($$[$0 - 7], $$[$0 - 5]);
                yy.setClass([$$[$0 - 7]], $$[$0 - 2]);
                break;
              case 22:
                yy.addEntity($$[$0 - 3], $$[$0 - 1]);
                break;
              case 23:
                yy.addEntity($$[$0 - 5], $$[$0 - 3]);
                yy.setClass([$$[$0 - 5]], $$[$0]);
                break;
              case 24:
              case 25:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 26:
              case 27:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 32:
                yy.setDirection("TB");
                break;
              case 33:
                yy.setDirection("BT");
                break;
              case 34:
                yy.setDirection("RL");
                break;
              case 35:
                yy.setDirection("LR");
                break;
              case 36:
                this.$ = $$[$0 - 3];
                yy.addClass($$[$0 - 2], $$[$0 - 1]);
                break;
              case 37:
              case 38:
              case 59:
              case 68:
                this.$ = [$$[$0]];
                break;
              case 39:
              case 40:
                this.$ = $$[$0 - 2].concat([$$[$0]]);
                break;
              case 41:
                this.$ = $$[$0 - 2];
                yy.setClass($$[$0 - 1], $$[$0]);
                break;
              case 42:
                ;
                this.$ = $$[$0 - 3];
                yy.addCssStyles($$[$0 - 2], $$[$0 - 1]);
                break;
              case 43:
                this.$ = [$$[$0]];
                break;
              case 44:
                $$[$0 - 2].push($$[$0]);
                this.$ = $$[$0 - 2];
                break;
              case 46:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
              case 54:
              case 80:
              case 81:
                this.$ = $$[$0].replace(/"/g, "");
                break;
              case 55:
              case 56:
              case 57:
              case 58:
              case 82:
                this.$ = $$[$0];
                break;
              case 60:
                $$[$0].push($$[$0 - 1]);
                this.$ = $$[$0];
                break;
              case 61:
                this.$ = { type: $$[$0 - 1], name: $$[$0] };
                break;
              case 62:
                this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], keys: $$[$0] };
                break;
              case 63:
                this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], comment: $$[$0] };
                break;
              case 64:
                this.$ = { type: $$[$0 - 3], name: $$[$0 - 2], keys: $$[$0 - 1], comment: $$[$0] };
                break;
              case 65:
              case 67:
              case 70:
                this.$ = $$[$0];
                break;
              case 66:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
              case 69:
                $$[$0 - 2].push($$[$0]);
                this.$ = $$[$0 - 2];
                break;
              case 71:
                this.$ = $$[$0].replace(/"/g, "");
                break;
              case 72:
                this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] };
                break;
              case 73:
                this.$ = yy.Cardinality.ZERO_OR_ONE;
                break;
              case 74:
                this.$ = yy.Cardinality.ZERO_OR_MORE;
                break;
              case 75:
                this.$ = yy.Cardinality.ONE_OR_MORE;
                break;
              case 76:
                this.$ = yy.Cardinality.ONLY_ONE;
                break;
              case 77:
                this.$ = yy.Cardinality.MD_PARENT;
                break;
              case 78:
                this.$ = yy.Identification.NON_IDENTIFYING;
                break;
              case 79:
                this.$ = yy.Identification.IDENTIFYING;
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o2($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 48: $Vd, 50: $Ve, 51: $Vf, 52: $Vg }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 30, 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 48: $Vd, 50: $Ve, 51: $Vf, 52: $Vg }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 16], { 12: 31, 64: 35, 15: [1, 32], 17: [1, 33], 20: [1, 34], 66: $Vh, 67: $Vi, 68: $Vj, 69: $Vk, 70: $Vl }), { 23: [1, 41] }, { 25: [1, 42] }, { 27: [1, 43] }, o2($V0, [2, 27]), o2($V0, [2, 28]), o2($V0, [2, 29]), o2($V0, [2, 30]), o2($V0, [2, 31]), o2($Vm, [2, 54]), o2($Vm, [2, 55]), o2($Vm, [2, 56]), o2($Vm, [2, 57]), o2($Vm, [2, 58]), o2($V0, [2, 32]), o2($V0, [2, 33]), o2($V0, [2, 34]), o2($V0, [2, 35]), { 16: 44, 40: $Vn, 41: $Vo }, { 16: 47, 40: $Vn, 41: $Vo }, { 16: 48, 40: $Vn, 41: $Vo }, o2($V0, [2, 4]), { 11: 49, 40: $Va, 48: $Vd, 50: $Ve, 51: $Vf, 52: $Vg }, { 16: 50, 40: $Vn, 41: $Vo }, { 18: 51, 19: [1, 52], 53: 53, 54: 54, 58: $Vp }, { 11: 56, 40: $Va, 48: $Vd, 50: $Ve, 51: $Vf, 52: $Vg }, { 65: 57, 71: [1, 58], 72: [1, 59] }, o2($Vq, [2, 73]), o2($Vq, [2, 74]), o2($Vq, [2, 75]), o2($Vq, [2, 76]), o2($Vq, [2, 77]), o2($V0, [2, 24]), o2($V0, [2, 25]), o2($V0, [2, 26]), { 13: $Vr, 38: 60, 41: $Vs, 42: $Vt, 45: 62, 46: 63, 48: $Vu, 49: $Vv }, o2($Vw, [2, 37]), o2($Vw, [2, 38]), { 16: 68, 40: $Vn, 41: $Vo, 42: $Vt }, { 13: $Vr, 38: 69, 41: $Vs, 42: $Vt, 45: 62, 46: 63, 48: $Vu, 49: $Vv }, { 13: [1, 70], 15: [1, 71] }, o2($V0, [2, 17], { 64: 35, 12: 72, 17: [1, 73], 42: $Vt, 66: $Vh, 67: $Vi, 68: $Vj, 69: $Vk, 70: $Vl }), { 19: [1, 74] }, o2($V0, [2, 14]), { 18: 75, 19: [2, 59], 53: 53, 54: 54, 58: $Vp }, { 55: 76, 58: [1, 77] }, { 58: [2, 65], 59: [1, 78] }, { 21: [1, 79] }, { 64: 80, 66: $Vh, 67: $Vi, 68: $Vj, 69: $Vk, 70: $Vl }, o2($Vx, [2, 78]), o2($Vx, [2, 79]), { 6: $Vy, 10: $Vz, 39: 81, 42: $VA, 47: $VB }, { 40: [1, 86], 41: [1, 87] }, o2($VC, [2, 43], { 46: 88, 13: $Vr, 41: $Vs, 48: $Vu, 49: $Vv }), o2($VD, [2, 45]), o2($VD, [2, 50]), o2($VD, [2, 51]), o2($VD, [2, 52]), o2($VD, [2, 53]), o2($V0, [2, 41], { 42: $Vt }), { 6: $Vy, 10: $Vz, 39: 89, 42: $VA, 47: $VB }, { 14: 90, 40: $VE, 50: $VF, 73: $VG }, { 16: 94, 40: $Vn, 41: $Vo }, { 11: 95, 40: $Va, 48: $Vd, 50: $Ve, 51: $Vf, 52: $Vg }, { 18: 96, 19: [1, 97], 53: 53, 54: 54, 58: $Vp }, o2($V0, [2, 12]), { 19: [2, 60] }, o2($VH, [2, 61], { 56: 98, 57: 99, 60: 100, 62: $VI, 63: $VJ }), o2([19, 58, 62, 63], [2, 67]), { 58: [2, 66] }, o2($V0, [2, 22], { 15: [1, 104], 17: [1, 103] }), o2([40, 48, 50, 51, 52], [2, 72]), o2($V0, [2, 36]), { 13: $Vr, 41: $Vs, 45: 105, 46: 63, 48: $Vu, 49: $Vv }, o2($V0, [2, 47]), o2($V0, [2, 48]), o2($V0, [2, 49]), o2($Vw, [2, 39]), o2($Vw, [2, 40]), o2($VD, [2, 46]), o2($V0, [2, 42]), o2($V0, [2, 8]), o2($V0, [2, 80]), o2($V0, [2, 81]), o2($V0, [2, 82]), { 13: [1, 106], 42: $Vt }, { 13: [1, 108], 15: [1, 107] }, { 19: [1, 109] }, o2($V0, [2, 15]), o2($VH, [2, 62], { 57: 110, 61: [1, 111], 63: $VJ }), o2($VH, [2, 63]), o2($VK, [2, 68]), o2($VH, [2, 71]), o2($VK, [2, 70]), { 18: 112, 19: [1, 113], 53: 53, 54: 54, 58: $Vp }, { 16: 114, 40: $Vn, 41: $Vo }, o2($VC, [2, 44], { 46: 88, 13: $Vr, 41: $Vs, 48: $Vu, 49: $Vv }), { 14: 115, 40: $VE, 50: $VF, 73: $VG }, { 16: 116, 40: $Vn, 41: $Vo }, { 14: 117, 40: $VE, 50: $VF, 73: $VG }, o2($V0, [2, 13]), o2($VH, [2, 64]), { 60: 118, 62: $VI }, { 19: [1, 119] }, o2($V0, [2, 20]), o2($V0, [2, 23], { 17: [1, 120], 42: $Vt }), o2($V0, [2, 11]), { 13: [1, 121], 42: $Vt }, o2($V0, [2, 10]), o2($VK, [2, 69]), o2($V0, [2, 18]), { 18: 122, 19: [1, 123], 53: 53, 54: 54, 58: $Vp }, { 14: 124, 40: $VE, 50: $VF, 73: $VG }, { 19: [1, 125] }, o2($V0, [2, 21]), o2($V0, [2, 9]), o2($V0, [2, 19])],
          defaultActions: { 75: [2, 60], 78: [2, 66] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  this.begin("acc_title");
                  return 24;
                  break;
                case 1:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 2:
                  this.begin("acc_descr");
                  return 26;
                  break;
                case 3:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 4:
                  this.begin("acc_descr_multiline");
                  break;
                case 5:
                  this.popState();
                  break;
                case 6:
                  return "acc_descr_multiline_value";
                  break;
                case 7:
                  return 33;
                  break;
                case 8:
                  return 34;
                  break;
                case 9:
                  return 35;
                  break;
                case 10:
                  return 36;
                  break;
                case 11:
                  return 10;
                  break;
                case 12:
                  break;
                case 13:
                  return 8;
                  break;
                case 14:
                  return 50;
                  break;
                case 15:
                  return 73;
                  break;
                case 16:
                  return 4;
                  break;
                case 17:
                  this.begin("block");
                  return 17;
                  break;
                case 18:
                  return 49;
                  break;
                case 19:
                  return 49;
                  break;
                case 20:
                  return 42;
                  break;
                case 21:
                  return 15;
                  break;
                case 22:
                  return 13;
                  break;
                case 23:
                  break;
                case 24:
                  return 62;
                  break;
                case 25:
                  return 58;
                  break;
                case 26:
                  return 58;
                  break;
                case 27:
                  this.begin("block_bq");
                  break;
                case 28:
                  return 58;
                  break;
                case 29:
                  this.popState();
                  break;
                case 30:
                  return 63;
                  break;
                case 31:
                  break;
                case 32:
                  this.popState();
                  return 19;
                  break;
                case 33:
                  return yy_.yytext[0];
                  break;
                case 34:
                  return 20;
                  break;
                case 35:
                  return 21;
                  break;
                case 36:
                  this.begin("style");
                  return 44;
                  break;
                case 37:
                  this.popState();
                  return 10;
                  break;
                case 38:
                  break;
                case 39:
                  return 13;
                  break;
                case 40:
                  return 42;
                  break;
                case 41:
                  return 49;
                  break;
                case 42:
                  this.begin("style");
                  return 37;
                  break;
                case 43:
                  return 43;
                  break;
                case 44:
                  return 66;
                  break;
                case 45:
                  return 68;
                  break;
                case 46:
                  return 68;
                  break;
                case 47:
                  return 68;
                  break;
                case 48:
                  return 66;
                  break;
                case 49:
                  return 66;
                  break;
                case 50:
                  return 67;
                  break;
                case 51:
                  return 67;
                  break;
                case 52:
                  return 67;
                  break;
                case 53:
                  return 67;
                  break;
                case 54:
                  return 67;
                  break;
                case 55:
                  return 68;
                  break;
                case 56:
                  return 67;
                  break;
                case 57:
                  return 68;
                  break;
                case 58:
                  return 69;
                  break;
                case 59:
                  return 69;
                  break;
                case 60:
                  return 51;
                  break;
                case 61:
                  return 69;
                  break;
                case 62:
                  return 69;
                  break;
                case 63:
                  return 69;
                  break;
                case 64:
                  return 52;
                  break;
                case 65:
                  return 48;
                  break;
                case 66:
                  return 69;
                  break;
                case 67:
                  return 66;
                  break;
                case 68:
                  return 67;
                  break;
                case 69:
                  return 68;
                  break;
                case 70:
                  return 70;
                  break;
                case 71:
                  return 71;
                  break;
                case 72:
                  return 72;
                  break;
                case 73:
                  return 72;
                  break;
                case 74:
                  return 71;
                  break;
                case 75:
                  return 71;
                  break;
                case 76:
                  return 71;
                  break;
                case 77:
                  return 41;
                  break;
                case 78:
                  return 47;
                  break;
                case 79:
                  return 40;
                  break;
                case 80:
                  return yy_.yytext[0];
                  break;
                case 81:
                  return 6;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:#)/i, /^(?:#)/i, /^(?:,)/i, /^(?::::)/i, /^(?::)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:([^\s]*)[~].*[~]([^\s]*))/i, /^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\.,\u00C0-\uFFFF\*]*))/i, /^(?:[`])/i, /^(?:[^`]+)/i, /^(?:[`])/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:style\b)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?::)/i, /^(?:,)/i, /^(?:#)/i, /^(?:classDef\b)/i, /^(?:class\b)/i, /^(?:one or zero\b)/i, /^(?:one or more\b)/i, /^(?:one or many\b)/i, /^(?:1\+)/i, /^(?:\|o\b)/i, /^(?:zero or one\b)/i, /^(?:zero or more\b)/i, /^(?:zero or many\b)/i, /^(?:0\+)/i, /^(?:\}o\b)/i, /^(?:many\(0\))/i, /^(?:many\(1\))/i, /^(?:many\b)/i, /^(?:\}\|)/i, /^(?:one\b)/i, /^(?:only one\b)/i, /^(?:[0-9]+\.[0-9]+)/i, /^(?:1(?=\s+[A-Za-z_"']))/i, /^(?:1(?=\s+[0-9]))/i, /^(?:1(?=(--|\.\.|\.-|-\.)))/i, /^(?:1\b)/i, /^(?:[0-9]+)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:u(?=[\.\-\|]))/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:([^\x00-\x7F]|\w|-|\*)+)/i, /^(?:;)/i, /^(?:([^\x00-\x7F]|\w|-|\*|\.)+)/i, /^(?:.)/i, /^(?:$)/i],
            conditions: { "style": { "rules": [37, 38, 39, 40, 41, 77, 78], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "block_bq": { "rules": [28, 29], "inclusive": false }, "block": { "rules": [23, 24, 25, 26, 27, 30, 31, 32, 33], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 34, 35, 36, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 81], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser3.parser = parser3;
      erDiagram_default = parser3;
    }
  });

  // src/diagrams/er/erDb.ts
  var ErDB;
  var init_erDb = __esm({
    "src/diagrams/er/erDb.ts"() {
      "use strict";
      init_logger();
      init_diagramAPI();
      init_commonDb();
      init_utils2();
      ErDB = class {
        constructor() {
          this.entities = /* @__PURE__ */ new Map();
          this.relationships = [];
          this.classes = /* @__PURE__ */ new Map();
          this.direction = "TB";
          this.Cardinality = {
            ZERO_OR_ONE: "ZERO_OR_ONE",
            ZERO_OR_MORE: "ZERO_OR_MORE",
            ONE_OR_MORE: "ONE_OR_MORE",
            ONLY_ONE: "ONLY_ONE",
            MD_PARENT: "MD_PARENT"
          };
          this.Identification = {
            NON_IDENTIFYING: "NON_IDENTIFYING",
            IDENTIFYING: "IDENTIFYING"
          };
          this.setAccTitle = setAccTitle;
          this.getAccTitle = getAccTitle;
          this.setAccDescription = setAccDescription;
          this.getAccDescription = getAccDescription;
          this.setDiagramTitle = setDiagramTitle;
          this.getDiagramTitle = getDiagramTitle;
          this.getConfig = /* @__PURE__ */ __name(() => getConfig2().er, "getConfig");
          this.clear();
          this.addEntity = this.addEntity.bind(this);
          this.addAttributes = this.addAttributes.bind(this);
          this.addRelationship = this.addRelationship.bind(this);
          this.setDirection = this.setDirection.bind(this);
          this.addCssStyles = this.addCssStyles.bind(this);
          this.addClass = this.addClass.bind(this);
          this.setClass = this.setClass.bind(this);
          this.setAccTitle = this.setAccTitle.bind(this);
          this.setAccDescription = this.setAccDescription.bind(this);
        }
        static {
          __name(this, "ErDB");
        }
        /**
         * Add entity
         * @param name - The name of the entity
         * @param alias - The alias of the entity
         */
        addEntity(name, alias = "") {
          if (!this.entities.has(name)) {
            this.entities.set(name, {
              id: `entity-${name}-${this.entities.size}`,
              label: name,
              attributes: [],
              alias,
              shape: "erBox",
              look: getConfig2().look ?? "default",
              cssClasses: "default",
              cssStyles: [],
              labelType: "markdown"
            });
            log.info("Added new entity :", name);
          } else if (!this.entities.get(name)?.alias && alias) {
            this.entities.get(name).alias = alias;
            log.info(`Add alias '${alias}' to entity '${name}'`);
          }
          return this.entities.get(name);
        }
        getEntity(name) {
          return this.entities.get(name);
        }
        getEntities() {
          return this.entities;
        }
        getClasses() {
          return this.classes;
        }
        addAttributes(entityName, attribs) {
          const entity = this.addEntity(entityName);
          let i2;
          for (i2 = attribs.length - 1; i2 >= 0; i2--) {
            if (!attribs[i2].keys) {
              attribs[i2].keys = [];
            }
            if (!attribs[i2].comment) {
              attribs[i2].comment = "";
            }
            entity.attributes.push(attribs[i2]);
            log.debug("Added attribute ", attribs[i2].name);
          }
        }
        /**
         * Add a relationship
         *
         * @param entA - The first entity in the relationship
         * @param rolA - The role played by the first entity in relation to the second
         * @param entB - The second entity in the relationship
         * @param rSpec - The details of the relationship between the two entities
         */
        addRelationship(entA, rolA, entB, rSpec) {
          const entityA = this.entities.get(entA);
          const entityB = this.entities.get(entB);
          if (!entityA || !entityB) {
            return;
          }
          const rel2 = {
            entityA: entityA.id,
            roleA: rolA,
            entityB: entityB.id,
            relSpec: rSpec
          };
          this.relationships.push(rel2);
          log.debug("Added new relationship :", rel2);
        }
        getRelationships() {
          return this.relationships;
        }
        getDirection() {
          return this.direction;
        }
        setDirection(dir2) {
          this.direction = dir2;
        }
        getCompiledStyles(classDefs) {
          let compiledStyles = [];
          for (const customClass of classDefs) {
            const cssClass = this.classes.get(customClass);
            if (cssClass?.styles) {
              compiledStyles = [...compiledStyles, ...cssClass.styles ?? []].map((s2) => s2.trim());
            }
            if (cssClass?.textStyles) {
              compiledStyles = [...compiledStyles, ...cssClass.textStyles ?? []].map((s2) => s2.trim());
            }
          }
          return compiledStyles;
        }
        addCssStyles(ids, styles7) {
          for (const id41 of ids) {
            const entity = this.entities.get(id41);
            if (!styles7 || !entity) {
              return;
            }
            for (const style3 of styles7) {
              entity.cssStyles.push(style3);
            }
          }
        }
        addClass(ids, style3) {
          ids.forEach((id41) => {
            let classNode = this.classes.get(id41);
            if (classNode === void 0) {
              classNode = { id: id41, styles: [], textStyles: [] };
              this.classes.set(id41, classNode);
            }
            if (style3) {
              style3.forEach(function(s2) {
                if (/color/.exec(s2)) {
                  const newStyle = s2.replace("fill", "bgFill");
                  classNode.textStyles.push(newStyle);
                }
                classNode.styles.push(s2);
              });
            }
          });
        }
        setClass(ids, classNames) {
          for (const id41 of ids) {
            const entity = this.entities.get(id41);
            if (entity) {
              for (const className of classNames) {
                entity.cssClasses += " " + className;
              }
            }
          }
        }
        clear() {
          this.entities = /* @__PURE__ */ new Map();
          this.classes = /* @__PURE__ */ new Map();
          this.relationships = [];
          clear();
        }
        getData() {
          const nodes5 = [];
          const edges3 = [];
          const config3 = getConfig2();
          let colorIndex = 0;
          for (const entityKey of this.entities.keys()) {
            const entityNode = this.entities.get(entityKey);
            if (entityNode) {
              entityNode.cssCompiledStyles = this.getCompiledStyles(entityNode.cssClasses.split(" "));
              entityNode.colorIndex = colorIndex++;
              nodes5.push(entityNode);
            }
          }
          let count2 = 0;
          for (const relationship of this.relationships) {
            const edge = {
              id: getEdgeId(relationship.entityA, relationship.entityB, {
                prefix: "id",
                counter: count2++
              }),
              type: "normal",
              curve: "basis",
              start: relationship.entityA,
              end: relationship.entityB,
              label: relationship.roleA,
              labelpos: "c",
              thickness: "normal",
              classes: "relationshipLine",
              arrowTypeStart: relationship.relSpec.cardB.toLowerCase(),
              arrowTypeEnd: relationship.relSpec.cardA.toLowerCase(),
              pattern: relationship.relSpec.relType == "IDENTIFYING" ? "solid" : "dashed",
              look: config3.look,
              labelType: "markdown"
            };
            edges3.push(edge);
          }
          return { nodes: nodes5, edges: edges3, other: {}, config: config3, direction: "TB" };
        }
      };
    }
  });

  // src/diagrams/er/erRenderer-unified.ts
  var erRenderer_unified_exports = {};
  __export(erRenderer_unified_exports, {
    draw: () => draw3
  });
  var draw3;
  var init_erRenderer_unified = __esm({
    "src/diagrams/er/erRenderer-unified.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_insertElementsForSize();
      init_render2();
      init_setupViewPortForSVG();
      init_utils2();
      init_src32();
      draw3 = /* @__PURE__ */ __name(async function(text4, id41, _version, diag) {
        log.info("REF0:");
        log.info("Drawing er diagram (unified)", id41);
        const { securityLevel, er: conf5, layout: layout7 } = getConfig2();
        const data4Layout = diag.db.getData();
        const svg2 = getDiagramElement(id41, securityLevel);
        data4Layout.type = diag.type;
        data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout7);
        data4Layout.config.flowchart.nodeSpacing = conf5?.nodeSpacing || 140;
        data4Layout.config.flowchart.rankSpacing = conf5?.rankSpacing || 80;
        data4Layout.direction = diag.db.getDirection();
        const { config: config3 } = data4Layout;
        const { look } = config3;
        if (look === "neo") {
          data4Layout.markers = [
            "only_one_neo",
            "zero_or_one_neo",
            "one_or_more_neo",
            "zero_or_more_neo"
          ];
        } else {
          data4Layout.markers = ["only_one", "zero_or_one", "one_or_more", "zero_or_more"];
        }
        data4Layout.diagramId = id41;
        await render7(data4Layout, svg2);
        if (data4Layout.layoutAlgorithm === "elk") {
          svg2.select(".edges").lower();
        }
        const backgroundNodes = svg2.selectAll('[id*="-background"]');
        if (Array.from(backgroundNodes).length > 0) {
          backgroundNodes.each(function() {
            const backgroundNode = select_default2(this);
            const backgroundId = backgroundNode.attr("id");
            const nonBackgroundId = backgroundId.replace("-background", "");
            const nonBackgroundNode = svg2.select(`#${CSS.escape(nonBackgroundId)}`);
            if (!nonBackgroundNode.empty()) {
              const transform8 = nonBackgroundNode.attr("transform");
              backgroundNode.attr("transform", transform8);
            }
          });
        }
        const padding = 8;
        utils_default2.insertTitle(
          svg2,
          "erDiagramTitleText",
          conf5?.titleTopMargin ?? 25,
          diag.db.getDiagramTitle()
        );
        setupViewPortForSVG(svg2, padding, "erDiagram", conf5?.useMaxWidth ?? true);
      }, "draw");
    }
  });

  // src/diagrams/er/styles.ts
  var fade2, COLOR_THEMES2, genColor, getStyles5, styles_default5;
  var init_styles5 = __esm({
    "src/diagrams/er/styles.ts"() {
      "use strict";
      init_dist();
      fade2 = /* @__PURE__ */ __name((color2, opacity) => {
        const channel2 = channel_default2;
        const r2 = channel2(color2, "r");
        const g2 = channel2(color2, "g");
        const b3 = channel2(color2, "b");
        return rgba_default(r2, g2, b3, opacity);
      }, "fade");
      COLOR_THEMES2 = /* @__PURE__ */ new Set(["redux-color", "redux-dark-color"]);
      genColor = /* @__PURE__ */ __name((options2) => {
        const { theme, look, bkgColorArray, borderColorArray } = options2;
        if (!COLOR_THEMES2.has(theme)) {
          return "";
        }
        const hasBkgColors = bkgColorArray?.length > 0;
        let sections6 = "";
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          sections6 += `

    [data-look="${look}"][data-color-id="color-${i2}"].node path {
    stroke: ${borderColorArray[i2]};
    ${hasBkgColors ? `fill: ${bkgColorArray[i2]};` : ""}
    }

    [data-look="${look}"][data-color-id="color-${i2}"].node  rect {
    stroke: ${borderColorArray[i2]};
    ${hasBkgColors ? `fill: ${bkgColorArray[i2]};` : ""}
     }
    `;
        }
        return sections6;
      }, "genColor");
      getStyles5 = /* @__PURE__ */ __name((options2) => {
        const { look, theme, erEdgeLabelBackground, strokeWidth } = options2;
        return `
    ${genColor(options2)}
  .entityBox {
    fill: ${options2.mainBkg};
    stroke: ${options2.nodeBorder};
  }

  .relationshipLabelBox {
    fill: ${options2.tertiaryColor};
    opacity: 0.7;
    background-color: ${options2.tertiaryColor};
      rect {
        opacity: 0.5;
      }
  }

  .labelBkg {
    background-color: ${COLOR_THEMES2.has(theme) && erEdgeLabelBackground ? erEdgeLabelBackground : fade2(options2.tertiaryColor, 0.5)};
  }

  .edgeLabel {
    background-color: ${COLOR_THEMES2.has(theme) && erEdgeLabelBackground ? erEdgeLabelBackground : options2.edgeLabelBackground};
  }
  .edgeLabel .label rect {
    fill: ${COLOR_THEMES2.has(theme) && erEdgeLabelBackground ? erEdgeLabelBackground : options2.edgeLabelBackground};
  }
  .edgeLabel .label text {
    fill: ${options2.textColor};
  }

  .edgeLabel .label {
    fill: ${options2.nodeBorder};
    font-size: 14px;
  }

  .label {
    font-family: ${options2.fontFamily};
    color: ${options2.nodeTextColor || options2.textColor};
  }

  .edge-pattern-dashed {
    stroke-dasharray: 8,8;
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon
  {
    fill: ${options2.mainBkg};
    stroke: ${options2.nodeBorder};
    stroke-width: ${look === "neo" ? strokeWidth : "1px"};
  }

  .relationshipLine {
    stroke: ${options2.lineColor};
    stroke-width: ${look === "neo" ? strokeWidth : "1px"};
    fill: none;
  }

  .marker {
    fill: none !important;
    stroke: ${options2.lineColor} !important;
    stroke-width: 1;
  }
  [data-look=neo].labelBkg {
    background-color: ${fade2(options2.tertiaryColor, 0.5)};
  }
`;
      }, "getStyles");
      styles_default5 = getStyles5;
    }
  });

  // src/diagrams/er/erDiagram.ts
  var erDiagram_exports = {};
  __export(erDiagram_exports, {
    diagram: () => diagram4
  });
  var diagram4;
  var init_erDiagram2 = __esm({
    "src/diagrams/er/erDiagram.ts"() {
      "use strict";
      init_erDiagram();
      init_erDb();
      init_erRenderer_unified();
      init_styles5();
      diagram4 = {
        parser: erDiagram_default,
        get db() {
          return new ErDB();
        },
        renderer: erRenderer_unified_exports,
        styles: styles_default5
      };
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-KEIR6QF5.mjs
  function isAstNode(obj) {
    return typeof obj === "object" && obj !== null && typeof obj.$type === "string";
  }
  function isReference(obj) {
    return typeof obj === "object" && obj !== null && typeof obj.$refText === "string" && "ref" in obj;
  }
  function isMultiReference(obj) {
    return typeof obj === "object" && obj !== null && typeof obj.$refText === "string" && "items" in obj;
  }
  function isAstNodeDescription(obj) {
    return typeof obj === "object" && obj !== null && typeof obj.name === "string" && typeof obj.type === "string" && typeof obj.path === "string";
  }
  function isLinkingError(obj) {
    return typeof obj === "object" && obj !== null && typeof obj.info === "object" && typeof obj.message === "string";
  }
  function isCompositeCstNode(node2) {
    return typeof node2 === "object" && node2 !== null && Array.isArray(node2.content);
  }
  function isLeafCstNode(node2) {
    return typeof node2 === "object" && node2 !== null && typeof node2.tokenType === "object";
  }
  function isRootCstNode(node2) {
    return isCompositeCstNode(node2) && typeof node2.fullText === "string";
  }
  function toString5(item) {
    if (typeof item === "string") {
      return item;
    }
    if (typeof item === "undefined") {
      return "undefined";
    }
    if (typeof item.toString === "function") {
      return item.toString();
    }
    return Object.prototype.toString.call(item);
  }
  function isIterable(obj) {
    return !!obj && typeof obj[Symbol.iterator] === "function";
  }
  function stream(...collections) {
    if (collections.length === 1) {
      const collection4 = collections[0];
      if (collection4 instanceof StreamImpl) {
        return collection4;
      }
      if (isIterable(collection4)) {
        return new StreamImpl(() => collection4[Symbol.iterator](), (iterator) => iterator.next());
      }
      if (typeof collection4.length === "number") {
        return new StreamImpl(() => ({ index: 0 }), (state4) => {
          if (state4.index < collection4.length) {
            return { done: false, value: collection4[state4.index++] };
          } else {
            return DONE_RESULT;
          }
        });
      }
    }
    if (collections.length > 1) {
      return new StreamImpl(() => ({ collIndex: 0, arrIndex: 0 }), (state4) => {
        do {
          if (state4.iterator) {
            const next3 = state4.iterator.next();
            if (!next3.done) {
              return next3;
            }
            state4.iterator = void 0;
          }
          if (state4.array) {
            if (state4.arrIndex < state4.array.length) {
              return { done: false, value: state4.array[state4.arrIndex++] };
            }
            state4.array = void 0;
            state4.arrIndex = 0;
          }
          if (state4.collIndex < collections.length) {
            const collection4 = collections[state4.collIndex++];
            if (isIterable(collection4)) {
              state4.iterator = collection4[Symbol.iterator]();
            } else if (collection4 && typeof collection4.length === "number") {
              state4.array = collection4;
            }
          }
        } while (state4.iterator || state4.array || state4.collIndex < collections.length);
        return DONE_RESULT;
      });
    }
    return EMPTY_STREAM;
  }
  function linkContentToContainer(node2, options2 = {}) {
    for (const [name, value2] of Object.entries(node2)) {
      if (!name.startsWith("$")) {
        if (Array.isArray(value2)) {
          value2.forEach((item, index) => {
            if (isAstNode(item)) {
              item.$container = node2;
              item.$containerProperty = name;
              item.$containerIndex = index;
              if (options2.deep) {
                linkContentToContainer(item, options2);
              }
            }
          });
        } else if (isAstNode(value2)) {
          value2.$container = node2;
          value2.$containerProperty = name;
          if (options2.deep) {
            linkContentToContainer(value2, options2);
          }
        }
      }
    }
  }
  function getContainerOfType(node2, typePredicate) {
    let item = node2;
    while (item) {
      if (typePredicate(item)) {
        return item;
      }
      item = item.$container;
    }
    return void 0;
  }
  function hasContainerOfType(node2, predicate) {
    let item = node2;
    while (item) {
      if (predicate(item)) {
        return true;
      }
      item = item.$container;
    }
    return false;
  }
  function getDocument(node2) {
    const rootNode = findRootNode(node2);
    const result = rootNode.$document;
    if (!result) {
      throw new Error("AST node has no document.");
    }
    return result;
  }
  function findRootNode(node2) {
    while (node2.$container) {
      node2 = node2.$container;
    }
    return node2;
  }
  function getReferenceNodes(reference) {
    if (isReference(reference)) {
      return reference.ref ? [reference.ref] : [];
    } else if (isMultiReference(reference)) {
      return reference.items.map((item) => item.ref);
    }
    return [];
  }
  function streamContents(node2, options2) {
    if (!node2) {
      throw new Error("Node must be an AstNode.");
    }
    const range3 = options2?.range;
    return new StreamImpl(() => ({
      keys: Object.keys(node2),
      keyIndex: 0,
      arrayIndex: 0
    }), (state4) => {
      while (state4.keyIndex < state4.keys.length) {
        const property3 = state4.keys[state4.keyIndex];
        if (!property3.startsWith("$")) {
          const value2 = node2[property3];
          if (isAstNode(value2)) {
            state4.keyIndex++;
            if (isAstNodeInRange(value2, range3)) {
              return { done: false, value: value2 };
            }
          } else if (Array.isArray(value2)) {
            while (state4.arrayIndex < value2.length) {
              const index = state4.arrayIndex++;
              const element3 = value2[index];
              if (isAstNode(element3) && isAstNodeInRange(element3, range3)) {
                return { done: false, value: element3 };
              }
            }
            state4.arrayIndex = 0;
          }
        }
        state4.keyIndex++;
      }
      return DONE_RESULT;
    });
  }
  function streamAllContents(root32, options2) {
    if (!root32) {
      throw new Error("Root node must be an AstNode.");
    }
    return new TreeStreamImpl(root32, (node2) => streamContents(node2, options2));
  }
  function streamAst(root32, options2) {
    if (!root32) {
      throw new Error("Root node must be an AstNode.");
    } else if (options2?.range && !isAstNodeInRange(root32, options2.range)) {
      return new TreeStreamImpl(root32, () => []);
    }
    return new TreeStreamImpl(root32, (node2) => streamContents(node2, options2), { includeRoot: true });
  }
  function isAstNodeInRange(astNode, range3) {
    if (!range3) {
      return true;
    }
    const nodeRange = astNode.$cstNode?.range;
    if (!nodeRange) {
      return false;
    }
    return inRange(nodeRange, range3);
  }
  function streamReferences(node2) {
    return new StreamImpl(() => ({
      keys: Object.keys(node2),
      keyIndex: 0,
      arrayIndex: 0
    }), (state4) => {
      while (state4.keyIndex < state4.keys.length) {
        const property3 = state4.keys[state4.keyIndex];
        if (!property3.startsWith("$")) {
          const value2 = node2[property3];
          if (isReference(value2) || isMultiReference(value2)) {
            state4.keyIndex++;
            return { done: false, value: { reference: value2, container: node2, property: property3 } };
          } else if (Array.isArray(value2)) {
            while (state4.arrayIndex < value2.length) {
              const index = state4.arrayIndex++;
              const element3 = value2[index];
              if (isReference(element3) || isMultiReference(value2)) {
                return { done: false, value: { reference: element3, container: node2, property: property3, index } };
              }
            }
            state4.arrayIndex = 0;
          }
        }
        state4.keyIndex++;
      }
      return DONE_RESULT;
    });
  }
  function assignMandatoryProperties(reflection3, node2) {
    const typeMetaData = reflection3.getTypeMetaData(node2.$type);
    const genericNode = node2;
    for (const property3 of Object.values(typeMetaData.properties)) {
      if (property3.defaultValue !== void 0 && genericNode[property3.name] === void 0) {
        genericNode[property3.name] = copyDefaultValue(property3.defaultValue);
      }
    }
  }
  function copyDefaultValue(propertyType) {
    if (Array.isArray(propertyType)) {
      return [...propertyType.map(copyDefaultValue)];
    } else {
      return propertyType;
    }
  }
  function copyAstNode(node2, buildReference, trace) {
    const copy5 = { $type: node2.$type };
    if (trace) {
      trace.set(node2, copy5);
      trace.set(copy5, node2);
    }
    for (const [name, value2] of Object.entries(node2)) {
      if (!name.startsWith("$")) {
        if (isAstNode(value2)) {
          copy5[name] = copyAstNode(value2, buildReference, trace);
        } else if (isReference(value2)) {
          copy5[name] = buildReference(copy5, name, value2.$refNode, value2.$refText, value2);
        } else if (Array.isArray(value2)) {
          const copiedArray = [];
          for (const element3 of value2) {
            if (isAstNode(element3)) {
              copiedArray.push(copyAstNode(element3, buildReference, trace));
            } else if (isReference(element3)) {
              copiedArray.push(buildReference(copy5, name, element3.$refNode, element3.$refText, element3));
            } else {
              copiedArray.push(element3);
            }
          }
          copy5[name] = copiedArray;
        } else {
          copy5[name] = value2;
        }
      }
    }
    linkContentToContainer(copy5, { deep: true });
    return copy5;
  }
  function isAbstractElement(item) {
    return reflection.isInstance(item, AbstractElement.$type);
  }
  function isAbstractParserRule(item) {
    return reflection.isInstance(item, AbstractParserRule.$type);
  }
  function isAbstractRule(item) {
    return reflection.isInstance(item, AbstractRule.$type);
  }
  function isAbstractType(item) {
    return reflection.isInstance(item, AbstractType.$type);
  }
  function isAction(item) {
    return reflection.isInstance(item, Action.$type);
  }
  function isAlternatives(item) {
    return reflection.isInstance(item, Alternatives.$type);
  }
  function isArrayLiteral(item) {
    return reflection.isInstance(item, ArrayLiteral.$type);
  }
  function isArrayType(item) {
    return reflection.isInstance(item, ArrayType.$type);
  }
  function isAssignment(item) {
    return reflection.isInstance(item, Assignment.$type);
  }
  function isBooleanLiteral(item) {
    return reflection.isInstance(item, BooleanLiteral.$type);
  }
  function isCharacterRange(item) {
    return reflection.isInstance(item, CharacterRange.$type);
  }
  function isCondition(item) {
    return reflection.isInstance(item, Condition.$type);
  }
  function isConjunction(item) {
    return reflection.isInstance(item, Conjunction.$type);
  }
  function isCrossReference(item) {
    return reflection.isInstance(item, CrossReference.$type);
  }
  function isDisjunction(item) {
    return reflection.isInstance(item, Disjunction.$type);
  }
  function isEndOfFile(item) {
    return reflection.isInstance(item, EndOfFile.$type);
  }
  function isGrammar(item) {
    return reflection.isInstance(item, Grammar.$type);
  }
  function isGrammarImport(item) {
    return reflection.isInstance(item, GrammarImport.$type);
  }
  function isGroup(item) {
    return reflection.isInstance(item, Group.$type);
  }
  function isInferredType(item) {
    return reflection.isInstance(item, InferredType.$type);
  }
  function isInfixRule(item) {
    return reflection.isInstance(item, InfixRule.$type);
  }
  function isInfixRuleOperatorList(item) {
    return reflection.isInstance(item, InfixRuleOperatorList.$type);
  }
  function isInfixRuleOperators(item) {
    return reflection.isInstance(item, InfixRuleOperators.$type);
  }
  function isInterface(item) {
    return reflection.isInstance(item, Interface.$type);
  }
  function isKeyword(item) {
    return reflection.isInstance(item, Keyword2.$type);
  }
  function isNamedArgument(item) {
    return reflection.isInstance(item, NamedArgument.$type);
  }
  function isNegatedToken(item) {
    return reflection.isInstance(item, NegatedToken.$type);
  }
  function isNegation(item) {
    return reflection.isInstance(item, Negation.$type);
  }
  function isNumberLiteral(item) {
    return reflection.isInstance(item, NumberLiteral.$type);
  }
  function isParameter(item) {
    return reflection.isInstance(item, Parameter.$type);
  }
  function isParameterReference(item) {
    return reflection.isInstance(item, ParameterReference.$type);
  }
  function isParserRule(item) {
    return reflection.isInstance(item, ParserRule.$type);
  }
  function isReferenceType(item) {
    return reflection.isInstance(item, ReferenceType.$type);
  }
  function isRegexToken(item) {
    return reflection.isInstance(item, RegexToken.$type);
  }
  function isReturnType(item) {
    return reflection.isInstance(item, ReturnType.$type);
  }
  function isRuleCall(item) {
    return reflection.isInstance(item, RuleCall.$type);
  }
  function isSimpleType(item) {
    return reflection.isInstance(item, SimpleType.$type);
  }
  function isStringLiteral(item) {
    return reflection.isInstance(item, StringLiteral.$type);
  }
  function isTerminalAlternatives(item) {
    return reflection.isInstance(item, TerminalAlternatives.$type);
  }
  function isTerminalElement(item) {
    return reflection.isInstance(item, TerminalElement.$type);
  }
  function isTerminalGroup(item) {
    return reflection.isInstance(item, TerminalGroup.$type);
  }
  function isTerminalRule(item) {
    return reflection.isInstance(item, TerminalRule.$type);
  }
  function isTerminalRuleCall(item) {
    return reflection.isInstance(item, TerminalRuleCall.$type);
  }
  function isType(item) {
    return reflection.isInstance(item, Type3.$type);
  }
  function isTypeAttribute(item) {
    return reflection.isInstance(item, TypeAttribute.$type);
  }
  function isTypeDefinition(item) {
    return reflection.isInstance(item, TypeDefinition.$type);
  }
  function isUnionType(item) {
    return reflection.isInstance(item, UnionType.$type);
  }
  function isUnorderedGroup(item) {
    return reflection.isInstance(item, UnorderedGroup.$type);
  }
  function isUntilToken(item) {
    return reflection.isInstance(item, UntilToken.$type);
  }
  function isValueLiteral(item) {
    return reflection.isInstance(item, ValueLiteral.$type);
  }
  function isWildcard(item) {
    return reflection.isInstance(item, Wildcard.$type);
  }
  function getDatatypeNode(cstNode) {
    let current = cstNode;
    let found = false;
    while (current) {
      const definingRule = getContainerOfType(current.grammarSource, isParserRule);
      if (definingRule && definingRule.dataType) {
        current = current.container;
        found = true;
      } else if (found) {
        return current;
      } else {
        return void 0;
      }
    }
    return void 0;
  }
  function streamCst(node2) {
    return new TreeStreamImpl(node2, (element3) => {
      if (isCompositeCstNode(element3)) {
        return element3.content;
      } else {
        return [];
      }
    }, { includeRoot: true });
  }
  function flattenCst(node2) {
    return streamCst(node2).filter(isLeafCstNode);
  }
  function isChildNode(child, parent4) {
    while (child.container) {
      child = child.container;
      if (child === parent4) {
        return true;
      }
    }
    return false;
  }
  function tokenToRange(token2) {
    return {
      start: {
        character: token2.startColumn - 1,
        line: token2.startLine - 1
      },
      end: {
        character: token2.endColumn,
        // endColumn uses the correct index
        line: token2.endLine - 1
      }
    };
  }
  function toDocumentSegment(node2) {
    if (!node2) {
      return void 0;
    }
    const { offset, end: end2, range: range3 } = node2;
    return {
      range: range3,
      offset,
      end: end2,
      length: end2 - offset
    };
  }
  function compareRange(range3, to) {
    if (range3.end.line < to.start.line || range3.end.line === to.start.line && range3.end.character <= to.start.character) {
      return RangeComparison.Before;
    } else if (range3.start.line > to.end.line || range3.start.line === to.end.line && range3.start.character >= to.end.character) {
      return RangeComparison.After;
    }
    const startInside = range3.start.line > to.start.line || range3.start.line === to.start.line && range3.start.character >= to.start.character;
    const endInside = range3.end.line < to.end.line || range3.end.line === to.end.line && range3.end.character <= to.end.character;
    if (startInside && endInside) {
      return RangeComparison.Inside;
    } else if (startInside) {
      return RangeComparison.OverlapBack;
    } else if (endInside) {
      return RangeComparison.OverlapFront;
    } else {
      return RangeComparison.Outside;
    }
  }
  function inRange(range3, to) {
    const comparison = compareRange(range3, to);
    return comparison > RangeComparison.After;
  }
  function findDeclarationNodeAtOffset(cstNode, offset, nameRegexp = DefaultNameRegexp) {
    if (cstNode) {
      if (offset > 0) {
        const localOffset = offset - cstNode.offset;
        const textAtOffset = cstNode.text.charAt(localOffset);
        if (!nameRegexp.test(textAtOffset)) {
          offset--;
        }
      }
      return findLeafNodeAtOffset(cstNode, offset);
    }
    return void 0;
  }
  function findCommentNode(cstNode, commentNames) {
    if (cstNode) {
      const previous = getPreviousNode(cstNode, true);
      if (previous && isCommentNode(previous, commentNames)) {
        return previous;
      }
      if (isRootCstNode(cstNode)) {
        const endIndex = cstNode.content.findIndex((e3) => !e3.hidden);
        for (let i2 = endIndex - 1; i2 >= 0; i2--) {
          const child = cstNode.content[i2];
          if (isCommentNode(child, commentNames)) {
            return child;
          }
        }
      }
    }
    return void 0;
  }
  function isCommentNode(cstNode, commentNames) {
    return isLeafCstNode(cstNode) && commentNames.includes(cstNode.tokenType.name);
  }
  function findLeafNodeAtOffset(node2, offset) {
    if (isLeafCstNode(node2)) {
      return node2;
    } else if (isCompositeCstNode(node2)) {
      const searchResult = binarySearch(node2, offset, false);
      if (searchResult) {
        return findLeafNodeAtOffset(searchResult, offset);
      }
    }
    return void 0;
  }
  function findLeafNodeBeforeOffset(node2, offset) {
    if (isLeafCstNode(node2)) {
      return node2;
    } else if (isCompositeCstNode(node2)) {
      const searchResult = binarySearch(node2, offset, true);
      if (searchResult) {
        return findLeafNodeBeforeOffset(searchResult, offset);
      }
    }
    return void 0;
  }
  function binarySearch(node2, offset, closest) {
    let left3 = 0;
    let right3 = node2.content.length - 1;
    let closestNode = void 0;
    while (left3 <= right3) {
      const middle = Math.floor((left3 + right3) / 2);
      const middleNode = node2.content[middle];
      if (middleNode.offset <= offset && middleNode.end > offset) {
        return middleNode;
      }
      if (middleNode.end <= offset) {
        closestNode = closest ? middleNode : void 0;
        left3 = middle + 1;
      } else {
        right3 = middle - 1;
      }
    }
    return closestNode;
  }
  function getPreviousNode(node2, hidden = true) {
    while (node2.container) {
      const parent4 = node2.container;
      let index = parent4.content.indexOf(node2);
      while (index > 0) {
        index--;
        const previous = parent4.content[index];
        if (hidden || !previous.hidden) {
          return previous;
        }
      }
      node2 = parent4;
    }
    return void 0;
  }
  function getNextNode(node2, hidden = true) {
    while (node2.container) {
      const parent4 = node2.container;
      let index = parent4.content.indexOf(node2);
      const last22 = parent4.content.length - 1;
      while (index < last22) {
        index++;
        const next3 = parent4.content[index];
        if (hidden || !next3.hidden) {
          return next3;
        }
      }
      node2 = parent4;
    }
    return void 0;
  }
  function getStartlineNode(node2) {
    if (node2.range.start.character === 0) {
      return node2;
    }
    const line2 = node2.range.start.line;
    let last22 = node2;
    let index;
    while (node2.container) {
      const parent4 = node2.container;
      const selfIndex = index ?? parent4.content.indexOf(node2);
      if (selfIndex === 0) {
        node2 = parent4;
        index = void 0;
      } else {
        index = selfIndex - 1;
        node2 = parent4.content[index];
      }
      if (node2.range.start.line !== line2) {
        break;
      }
      last22 = node2;
    }
    return last22;
  }
  function getInteriorNodes(start3, end2) {
    const commonParent = getCommonParent(start3, end2);
    if (!commonParent) {
      return [];
    }
    return commonParent.parent.content.slice(commonParent.a + 1, commonParent.b);
  }
  function getCommonParent(a2, b3) {
    const aParents = getParentChain(a2);
    const bParents = getParentChain(b3);
    let current;
    for (let i2 = 0; i2 < aParents.length && i2 < bParents.length; i2++) {
      const aParent = aParents[i2];
      const bParent = bParents[i2];
      if (aParent.parent === bParent.parent) {
        current = {
          parent: aParent.parent,
          a: aParent.index,
          b: bParent.index
        };
      } else {
        break;
      }
    }
    return current;
  }
  function getParentChain(node2) {
    const chain = [];
    while (node2.container) {
      const parent4 = node2.container;
      const index = parent4.content.indexOf(node2);
      chain.push({
        parent: parent4,
        index
      });
      node2 = parent4;
    }
    return chain.reverse();
  }
  function assertUnreachable(_3, message = "Error: Got unexpected value.") {
    throw new Error(message);
  }
  function assertCondition(condition, message = "Error: Condition is violated.") {
    if (!condition) {
      throw new Error(message);
    }
  }
  function cc(char2) {
    return char2.charCodeAt(0);
  }
  function insertToSet(item, set5) {
    if (Array.isArray(item)) {
      item.forEach(function(subItem) {
        set5.push(subItem);
      });
    } else {
      set5.push(item);
    }
  }
  function addFlag(flagObj, flagKey) {
    if (flagObj[flagKey] === true) {
      throw "duplicate flag " + flagKey;
    }
    const x5 = flagObj[flagKey];
    flagObj[flagKey] = true;
  }
  function ASSERT_EXISTS(obj) {
    if (obj === void 0) {
      throw Error("Internal Error - Should never get here!");
    }
    return true;
  }
  function ASSERT_NEVER_REACH_HERE() {
    throw Error("Internal Error - Should never get here!");
  }
  function isCharacter(obj) {
    return obj["type"] === "Character";
  }
  function getTerminalParts(regexp) {
    try {
      if (typeof regexp !== "string") {
        regexp = regexp.source;
      }
      regexp = `/${regexp}/`;
      const pattern = regexpParser.pattern(regexp);
      const parts = [];
      for (const alternative of pattern.value.value) {
        visitor.reset(regexp);
        visitor.visit(alternative);
        parts.push({
          start: visitor.startRegexp,
          end: visitor.endRegex
        });
      }
      return parts;
    } catch {
      return [];
    }
  }
  function isMultilineComment(regexp) {
    try {
      if (typeof regexp === "string") {
        regexp = new RegExp(regexp);
      }
      regexp = regexp.toString();
      visitor.reset(regexp);
      visitor.visit(regexpParser.pattern(regexp));
      return visitor.multiline;
    } catch {
      return false;
    }
  }
  function isWhitespace2(value2) {
    const regexp = typeof value2 === "string" ? new RegExp(value2) : value2;
    return whitespaceCharacters.some((ws) => regexp.test(ws));
  }
  function escapeRegExp(value2) {
    return value2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
  }
  function partialMatches(regex2, input) {
    const partial = partialRegExp(regex2);
    const match3 = input.match(partial);
    return !!match3 && match3[0].length > 0;
  }
  function partialRegExp(regex2) {
    if (typeof regex2 === "string") {
      regex2 = new RegExp(regex2);
    }
    const re3 = regex2, source = regex2.source;
    let i2 = 0;
    function process2() {
      let result = "", tmp;
      function appendRaw(nbChars) {
        result += source.substr(i2, nbChars);
        i2 += nbChars;
      }
      __name(appendRaw, "appendRaw");
      __name2(appendRaw, "appendRaw");
      function appendOptional(nbChars) {
        result += "(?:" + source.substr(i2, nbChars) + "|$)";
        i2 += nbChars;
      }
      __name(appendOptional, "appendOptional");
      __name2(appendOptional, "appendOptional");
      while (i2 < source.length) {
        switch (source[i2]) {
          case "\\":
            switch (source[i2 + 1]) {
              case "c":
                appendOptional(3);
                break;
              case "x":
                appendOptional(4);
                break;
              case "u":
                if (re3.unicode) {
                  if (source[i2 + 2] === "{") {
                    appendOptional(source.indexOf("}", i2) - i2 + 1);
                  } else {
                    appendOptional(6);
                  }
                } else {
                  appendOptional(2);
                }
                break;
              case "p":
              case "P":
                if (re3.unicode) {
                  appendOptional(source.indexOf("}", i2) - i2 + 1);
                } else {
                  appendOptional(2);
                }
                break;
              case "k":
                appendOptional(source.indexOf(">", i2) - i2 + 1);
                break;
              default:
                appendOptional(2);
                break;
            }
            break;
          case "[":
            tmp = /\[(?:\\.|.)*?\]/g;
            tmp.lastIndex = i2;
            tmp = tmp.exec(source) || [];
            appendOptional(tmp[0].length);
            break;
          case "|":
          case "^":
          case "$":
          case "*":
          case "+":
          case "?":
            appendRaw(1);
            break;
          case "{":
            tmp = /\{\d+,?\d*\}/g;
            tmp.lastIndex = i2;
            tmp = tmp.exec(source);
            if (tmp) {
              appendRaw(tmp[0].length);
            } else {
              appendOptional(1);
            }
            break;
          case "(":
            if (source[i2 + 1] === "?") {
              switch (source[i2 + 2]) {
                case ":":
                  result += "(?:";
                  i2 += 3;
                  result += process2() + "|$)";
                  break;
                case "=":
                  result += "(?=";
                  i2 += 3;
                  result += process2() + ")";
                  break;
                case "!":
                  tmp = i2;
                  i2 += 3;
                  process2();
                  result += source.substr(tmp, i2 - tmp);
                  break;
                case "<":
                  switch (source[i2 + 3]) {
                    case "=":
                    case "!":
                      tmp = i2;
                      i2 += 4;
                      process2();
                      result += source.substr(tmp, i2 - tmp);
                      break;
                    default:
                      appendRaw(source.indexOf(">", i2) - i2 + 1);
                      result += process2() + "|$)";
                      break;
                  }
                  break;
              }
            } else {
              appendRaw(1);
              result += process2() + "|$)";
            }
            break;
          case ")":
            ++i2;
            return result;
          default:
            appendOptional(1);
            break;
        }
      }
      return result;
    }
    __name(process2, "process2");
    __name2(process2, "process");
    return new RegExp(process2(), regex2.flags);
  }
  function getEntryRule(grammar) {
    return grammar.rules.find((e3) => isParserRule(e3) && e3.entry);
  }
  function getHiddenRules(grammar) {
    return grammar.rules.filter((e3) => isTerminalRule(e3) && e3.hidden);
  }
  function getAllReachableRules(grammar, allTerminals) {
    const ruleNames = /* @__PURE__ */ new Set();
    const entryRule = getEntryRule(grammar);
    if (!entryRule) {
      return new Set(grammar.rules);
    }
    const topMostRules = [entryRule].concat(getHiddenRules(grammar));
    for (const rule of topMostRules) {
      ruleDfs(rule, ruleNames, allTerminals);
    }
    const rules2 = /* @__PURE__ */ new Set();
    for (const rule of grammar.rules) {
      if (ruleNames.has(rule.name) || isTerminalRule(rule) && rule.hidden) {
        rules2.add(rule);
      }
    }
    return rules2;
  }
  function ruleDfs(rule, visitedSet, allTerminals) {
    visitedSet.add(rule.name);
    streamAllContents(rule).forEach((node2) => {
      if (isRuleCall(node2) || allTerminals && isTerminalRuleCall(node2)) {
        const refRule = node2.rule.ref;
        if (refRule && !visitedSet.has(refRule.name)) {
          ruleDfs(refRule, visitedSet, allTerminals);
        }
      }
    });
  }
  function getAllRulesUsedForCrossReferences(grammar) {
    const result = /* @__PURE__ */ new Set();
    streamAllContents(grammar).forEach((node2) => {
      if (isCrossReference(node2)) {
        if (isParserRule(node2.type.ref)) {
          result.add(node2.type.ref);
        }
        if (isInferredType(node2.type.ref) && isParserRule(node2.type.ref.$container)) {
          result.add(node2.type.ref.$container);
        }
      }
    });
    return result;
  }
  function getCrossReferenceTerminal(crossRef) {
    if (crossRef.terminal) {
      return crossRef.terminal;
    } else if (crossRef.type.ref) {
      const nameAssigment = findNameAssignment(crossRef.type.ref);
      return nameAssigment?.terminal;
    }
    return void 0;
  }
  function isCommentTerminal(terminalRule) {
    return terminalRule.hidden && !isWhitespace2(terminalRegex(terminalRule));
  }
  function findNodesForProperty(node2, property3) {
    if (!node2 || !property3) {
      return [];
    }
    return findNodesForPropertyInternal(node2, property3, node2.astNode, true);
  }
  function findNodeForProperty(node2, property3, index) {
    if (!node2 || !property3) {
      return void 0;
    }
    const nodes5 = findNodesForPropertyInternal(node2, property3, node2.astNode, true);
    if (nodes5.length === 0) {
      return void 0;
    }
    if (index !== void 0) {
      index = Math.max(0, Math.min(index, nodes5.length - 1));
    } else {
      index = 0;
    }
    return nodes5[index];
  }
  function findNodesForPropertyInternal(node2, property3, element3, first22) {
    if (!first22) {
      const nodeFeature = getContainerOfType(node2.grammarSource, isAssignment);
      if (nodeFeature && nodeFeature.feature === property3) {
        return [node2];
      }
    }
    if (isCompositeCstNode(node2) && node2.astNode === element3) {
      return node2.content.flatMap((e3) => findNodesForPropertyInternal(e3, property3, element3, false));
    }
    return [];
  }
  function findNodesForKeyword(node2, keyword) {
    if (!node2) {
      return [];
    }
    return findNodesForKeywordInternal(node2, keyword, node2?.astNode);
  }
  function findNodeForKeyword(node2, keyword, index) {
    if (!node2) {
      return void 0;
    }
    const nodes5 = findNodesForKeywordInternal(node2, keyword, node2?.astNode);
    if (nodes5.length === 0) {
      return void 0;
    }
    if (index !== void 0) {
      index = Math.max(0, Math.min(index, nodes5.length - 1));
    } else {
      index = 0;
    }
    return nodes5[index];
  }
  function findNodesForKeywordInternal(node2, keyword, element3) {
    if (node2.astNode !== element3) {
      return [];
    }
    if (isKeyword(node2.grammarSource) && node2.grammarSource.value === keyword) {
      return [node2];
    }
    const treeIterator = streamCst(node2).iterator();
    let result;
    const keywordNodes = [];
    do {
      result = treeIterator.next();
      if (!result.done) {
        const childNode = result.value;
        if (childNode.astNode === element3) {
          if (isKeyword(childNode.grammarSource) && childNode.grammarSource.value === keyword) {
            keywordNodes.push(childNode);
          }
        } else {
          treeIterator.prune();
        }
      }
    } while (!result.done);
    return keywordNodes;
  }
  function findAssignment(cstNode) {
    const astNode = cstNode.astNode;
    while (astNode === cstNode.container?.astNode) {
      const assignment = getContainerOfType(cstNode.grammarSource, isAssignment);
      if (assignment) {
        return assignment;
      }
      cstNode = cstNode.container;
    }
    return void 0;
  }
  function findNameAssignment(type3) {
    let startNode = type3;
    if (isInferredType(startNode)) {
      if (isAction(startNode.$container)) {
        startNode = startNode.$container.$container;
      } else if (isAbstractParserRule(startNode.$container)) {
        startNode = startNode.$container;
      } else {
        assertUnreachable(startNode.$container);
      }
    }
    return findNameAssignmentInternal(type3, startNode, /* @__PURE__ */ new Map());
  }
  function findNameAssignmentInternal(type3, startNode, cache3) {
    function go(node2, refType) {
      let childAssignment = void 0;
      const parentAssignment = getContainerOfType(node2, isAssignment);
      if (!parentAssignment) {
        childAssignment = findNameAssignmentInternal(refType, refType, cache3);
      }
      cache3.set(type3, childAssignment);
      return childAssignment;
    }
    __name(go, "go");
    __name2(go, "go");
    if (cache3.has(type3)) {
      return cache3.get(type3);
    }
    cache3.set(type3, void 0);
    for (const node2 of streamAllContents(startNode)) {
      if (isAssignment(node2) && node2.feature.toLowerCase() === "name") {
        cache3.set(type3, node2);
        return node2;
      } else if (isRuleCall(node2) && isParserRule(node2.rule.ref)) {
        return go(node2, node2.rule.ref);
      } else if (isSimpleType(node2) && node2.typeRef?.ref) {
        return go(node2, node2.typeRef.ref);
      }
    }
    return void 0;
  }
  function getActionAtElement(element3) {
    const parent4 = element3.$container;
    if (isGroup(parent4)) {
      const elements2 = parent4.elements;
      const index = elements2.indexOf(element3);
      for (let i2 = index - 1; i2 >= 0; i2--) {
        const item = elements2[i2];
        if (isAction(item)) {
          return item;
        } else {
          const action = streamAllContents(elements2[i2]).find(isAction);
          if (action) {
            return action;
          }
        }
      }
    }
    if (isAbstractElement(parent4)) {
      return getActionAtElement(parent4);
    } else {
      return void 0;
    }
  }
  function isOptionalCardinality(cardinality, element3) {
    return cardinality === "?" || cardinality === "*" || isGroup(element3) && Boolean(element3.guardCondition);
  }
  function isArrayCardinality(cardinality) {
    return cardinality === "*" || cardinality === "+";
  }
  function isArrayOperator(operator) {
    return operator === "+=";
  }
  function isDataTypeRule(rule) {
    return isDataTypeRuleInternal(rule, /* @__PURE__ */ new Set());
  }
  function isDataTypeRuleInternal(rule, visited) {
    if (visited.has(rule)) {
      return true;
    } else {
      visited.add(rule);
    }
    for (const node2 of streamAllContents(rule)) {
      if (isRuleCall(node2)) {
        if (!node2.rule.ref) {
          return false;
        }
        if (isParserRule(node2.rule.ref) && !isDataTypeRuleInternal(node2.rule.ref, visited)) {
          return false;
        }
        if (isInfixRule(node2.rule.ref)) {
          return false;
        }
      } else if (isAssignment(node2)) {
        return false;
      } else if (isAction(node2)) {
        return false;
      }
    }
    return Boolean(rule.definition);
  }
  function isDataType(type3) {
    return isDataTypeInternal(type3.type, /* @__PURE__ */ new Set());
  }
  function isDataTypeInternal(type3, visited) {
    if (visited.has(type3)) {
      return true;
    } else {
      visited.add(type3);
    }
    if (isArrayType(type3)) {
      return false;
    } else if (isReferenceType(type3)) {
      return false;
    } else if (isUnionType(type3)) {
      return type3.types.every((e3) => isDataTypeInternal(e3, visited));
    } else if (isSimpleType(type3)) {
      if (type3.primitiveType !== void 0) {
        return true;
      } else if (type3.stringType !== void 0) {
        return true;
      } else if (type3.typeRef !== void 0) {
        const ref = type3.typeRef.ref;
        if (isType(ref)) {
          return isDataTypeInternal(ref.type, visited);
        } else {
          return false;
        }
      } else {
        return false;
      }
    } else {
      return false;
    }
  }
  function getExplicitRuleType(rule) {
    if (isTerminalRule(rule)) {
      return void 0;
    }
    if (rule.inferredType) {
      return rule.inferredType.name;
    } else if (rule.dataType) {
      return rule.dataType;
    } else if (rule.returnType) {
      const refType = rule.returnType.ref;
      if (refType) {
        return refType.name;
      }
    }
    return void 0;
  }
  function getTypeName(type3) {
    if (isAbstractParserRule(type3)) {
      return isParserRule(type3) && isDataTypeRule(type3) ? type3.name : getExplicitRuleType(type3) ?? type3.name;
    } else if (isInterface(type3) || isType(type3) || isReturnType(type3)) {
      return type3.name;
    } else if (isAction(type3)) {
      const actionType = getActionType(type3);
      if (actionType) {
        return actionType;
      }
    } else if (isInferredType(type3)) {
      return type3.name;
    }
    throw new Error("Cannot get name of Unknown Type");
  }
  function getActionType(action) {
    if (action.inferredType) {
      return action.inferredType.name;
    } else if (action.type?.ref) {
      return getTypeName(action.type.ref);
    }
    return void 0;
  }
  function getRuleTypeName(rule) {
    if (isTerminalRule(rule)) {
      return rule.type?.name ?? "string";
    } else {
      return isParserRule(rule) && isDataTypeRule(rule) ? rule.name : getExplicitRuleType(rule) ?? rule.name;
    }
  }
  function getRuleType(rule) {
    if (isTerminalRule(rule)) {
      return rule.type?.name ?? "string";
    } else {
      return getExplicitRuleType(rule) ?? rule.name;
    }
  }
  function terminalRegex(terminalRule) {
    const flags = {
      s: false,
      i: false,
      u: false
    };
    const source = abstractElementToRegex(terminalRule.definition, flags);
    const flagText = Object.entries(flags).filter(([, value2]) => value2).map(([name]) => name).join("");
    return new RegExp(source, flagText);
  }
  function abstractElementToRegex(element3, flags) {
    if (isTerminalAlternatives(element3)) {
      return terminalAlternativesToRegex(element3);
    } else if (isTerminalGroup(element3)) {
      return terminalGroupToRegex(element3);
    } else if (isCharacterRange(element3)) {
      return characterRangeToRegex(element3);
    } else if (isTerminalRuleCall(element3)) {
      const rule = element3.rule.ref;
      if (!rule) {
        throw new Error("Missing rule reference.");
      }
      return withCardinality(abstractElementToRegex(rule.definition), {
        cardinality: element3.cardinality,
        lookahead: element3.lookahead,
        parenthesized: element3.parenthesized
      });
    } else if (isNegatedToken(element3)) {
      return negateTokenToRegex(element3);
    } else if (isUntilToken(element3)) {
      return untilTokenToRegex(element3);
    } else if (isRegexToken(element3)) {
      const lastSlash = element3.regex.lastIndexOf("/");
      const source = element3.regex.substring(1, lastSlash);
      const regexFlags = element3.regex.substring(lastSlash + 1);
      if (flags) {
        flags.i = regexFlags.includes("i");
        flags.s = regexFlags.includes("s");
        flags.u = regexFlags.includes("u");
      }
      return withCardinality(source, {
        cardinality: element3.cardinality,
        lookahead: element3.lookahead,
        parenthesized: element3.parenthesized,
        wrap: false
      });
    } else if (isWildcard(element3)) {
      return withCardinality(WILDCARD, {
        cardinality: element3.cardinality,
        lookahead: element3.lookahead,
        parenthesized: element3.parenthesized
      });
    } else {
      throw new Error(`Invalid terminal element: ${element3?.$type}, ${element3?.$cstNode?.text}`);
    }
  }
  function terminalAlternativesToRegex(alternatives) {
    return withCardinality(alternatives.elements.map((e3) => abstractElementToRegex(e3)).join("|"), {
      cardinality: alternatives.cardinality,
      lookahead: alternatives.lookahead,
      parenthesized: alternatives.parenthesized,
      wrap: false
      // wrapping is not required for top level alternatives, and nested alternatives are already parenthesized according to the grammar
    });
  }
  function terminalGroupToRegex(group2) {
    return withCardinality(group2.elements.map((e3) => abstractElementToRegex(e3)).join(""), {
      cardinality: group2.cardinality,
      lookahead: group2.lookahead,
      parenthesized: group2.parenthesized,
      wrap: false
      // wrapping is not required for top level group, and nested group are already parenthesized according to the grammar
    });
  }
  function untilTokenToRegex(until) {
    return withCardinality(`${WILDCARD}*?${abstractElementToRegex(until.terminal)}`, {
      cardinality: until.cardinality,
      lookahead: until.lookahead,
      parenthesized: until.parenthesized
    });
  }
  function negateTokenToRegex(negate2) {
    return withCardinality(`(?!${abstractElementToRegex(negate2.terminal)})${WILDCARD}*?`, {
      cardinality: negate2.cardinality,
      lookahead: negate2.lookahead,
      parenthesized: negate2.parenthesized
    });
  }
  function characterRangeToRegex(range3) {
    if (range3.right) {
      return withCardinality(`[${keywordToRegex(range3.left)}-${keywordToRegex(range3.right)}]`, {
        cardinality: range3.cardinality,
        lookahead: range3.lookahead,
        parenthesized: range3.parenthesized,
        wrap: false
      });
    }
    return withCardinality(keywordToRegex(range3.left), {
      cardinality: range3.cardinality,
      lookahead: range3.lookahead,
      parenthesized: range3.parenthesized,
      wrap: false
    });
  }
  function keywordToRegex(keyword) {
    return escapeRegExp(keyword.value);
  }
  function withCardinality(regex2, options2) {
    if (options2.parenthesized || options2.lookahead || options2.wrap !== false) {
      const groupConfig = options2.lookahead ?? (options2.parenthesized ? "" : "?:");
      regex2 = `(${groupConfig}${regex2})`;
    }
    if (options2.cardinality) {
      return `${regex2}${options2.cardinality}`;
    }
    return regex2;
  }
  function createGrammarConfig(services) {
    const rules2 = [];
    const grammar = services.Grammar;
    for (const rule of grammar.rules) {
      if (isTerminalRule(rule) && isCommentTerminal(rule) && isMultilineComment(terminalRegex(rule))) {
        rules2.push(rule.name);
      }
    }
    return {
      multilineCommentRules: rules2,
      nameRegexp: DefaultNameRegexp
    };
  }
  function getRawTag2(value2) {
    var isOwn = hasOwnProperty17.call(value2, symToStringTag3), tag = value2[symToStringTag3];
    try {
      value2[symToStringTag3] = void 0;
      var unmasked = true;
    } catch (e3) {
    }
    var result = nativeObjectToString3.call(value2);
    if (unmasked) {
      if (isOwn) {
        value2[symToStringTag3] = tag;
      } else {
        delete value2[symToStringTag3];
      }
    }
    return result;
  }
  function objectToString2(value2) {
    return nativeObjectToString22.call(value2);
  }
  function baseGetTag2(value2) {
    if (value2 == null) {
      return value2 === void 0 ? undefinedTag2 : nullTag2;
    }
    return symToStringTag22 && symToStringTag22 in Object(value2) ? getRawTag_default2(value2) : objectToString_default2(value2);
  }
  function isObjectLike3(value2) {
    return value2 != null && typeof value2 == "object";
  }
  function isSymbol2(value2) {
    return typeof value2 == "symbol" || isObjectLike_default2(value2) && baseGetTag_default2(value2) == symbolTag6;
  }
  function arrayMap2(array4, iteratee) {
    var index = -1, length2 = array4 == null ? 0 : array4.length, result = Array(length2);
    while (++index < length2) {
      result[index] = iteratee(array4[index], index, array4);
    }
    return result;
  }
  function baseToString2(value2) {
    if (typeof value2 == "string") {
      return value2;
    }
    if (isArray_default2(value2)) {
      return arrayMap_default2(value2, baseToString2) + "";
    }
    if (isSymbol_default2(value2)) {
      return symbolToString2 ? symbolToString2.call(value2) : "";
    }
    var result = value2 + "";
    return result == "0" && 1 / value2 == -INFINITY5 ? "-0" : result;
  }
  function trimmedEndIndex2(string3) {
    var index = string3.length;
    while (index-- && reWhitespace2.test(string3.charAt(index))) {
    }
    return index;
  }
  function baseTrim2(string3) {
    return string3 ? string3.slice(0, trimmedEndIndex_default2(string3) + 1).replace(reTrimStart2, "") : string3;
  }
  function isObject3(value2) {
    var type3 = typeof value2;
    return value2 != null && (type3 == "object" || type3 == "function");
  }
  function toNumber2(value2) {
    if (typeof value2 == "number") {
      return value2;
    }
    if (isSymbol_default2(value2)) {
      return NAN2;
    }
    if (isObject_default2(value2)) {
      var other = typeof value2.valueOf == "function" ? value2.valueOf() : value2;
      value2 = isObject_default2(other) ? other + "" : other;
    }
    if (typeof value2 != "string") {
      return value2 === 0 ? value2 : +value2;
    }
    value2 = baseTrim_default2(value2);
    var isBinary2 = reIsBinary2.test(value2);
    return isBinary2 || reIsOctal2.test(value2) ? freeParseInt2(value2.slice(2), isBinary2 ? 2 : 8) : reIsBadHex2.test(value2) ? NAN2 : +value2;
  }
  function toFinite2(value2) {
    if (!value2) {
      return value2 === 0 ? value2 : 0;
    }
    value2 = toNumber_default2(value2);
    if (value2 === INFINITY22 || value2 === -INFINITY22) {
      var sign2 = value2 < 0 ? -1 : 1;
      return sign2 * MAX_INTEGER2;
    }
    return value2 === value2 ? value2 : 0;
  }
  function toInteger2(value2) {
    var result = toFinite_default2(value2), remainder = result % 1;
    return result === result ? remainder ? result - remainder : result : 0;
  }
  function identity7(value2) {
    return value2;
  }
  function isFunction2(value2) {
    if (!isObject_default2(value2)) {
      return false;
    }
    var tag = baseGetTag_default2(value2);
    return tag == funcTag4 || tag == genTag3 || tag == asyncTag2 || tag == proxyTag2;
  }
  function isMasked2(func) {
    return !!maskSrcKey2 && maskSrcKey2 in func;
  }
  function toSource2(func) {
    if (func != null) {
      try {
        return funcToString4.call(func);
      } catch (e3) {
      }
      try {
        return func + "";
      } catch (e3) {
      }
    }
    return "";
  }
  function baseIsNative2(value2) {
    if (!isObject_default2(value2) || isMasked_default2(value2)) {
      return false;
    }
    var pattern = isFunction_default2(value2) ? reIsNative2 : reIsHostCtor2;
    return pattern.test(toSource_default2(value2));
  }
  function getValue3(object3, key) {
    return object3 == null ? void 0 : object3[key];
  }
  function getNative2(object3, key) {
    var value2 = getValue_default2(object3, key);
    return baseIsNative_default2(value2) ? value2 : void 0;
  }
  function apply4(func, thisArg, args) {
    switch (args.length) {
      case 0:
        return func.call(thisArg);
      case 1:
        return func.call(thisArg, args[0]);
      case 2:
        return func.call(thisArg, args[0], args[1]);
      case 3:
        return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }
  function noop7() {
  }
  function copyArray4(source, array4) {
    var index = -1, length2 = source.length;
    array4 || (array4 = Array(length2));
    while (++index < length2) {
      array4[index] = source[index];
    }
    return array4;
  }
  function shortOut2(func) {
    var count2 = 0, lastCalled = 0;
    return function() {
      var stamp = nativeNow2(), remaining = HOT_SPAN2 - (stamp - lastCalled);
      lastCalled = stamp;
      if (remaining > 0) {
        if (++count2 >= HOT_COUNT2) {
          return arguments[0];
        }
      } else {
        count2 = 0;
      }
      return func.apply(void 0, arguments);
    };
  }
  function constant2(value2) {
    return function() {
      return value2;
    };
  }
  function arrayEach2(array4, iteratee) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (iteratee(array4[index], index, array4) === false) {
        break;
      }
    }
    return array4;
  }
  function baseFindIndex2(array4, predicate, fromIndex, fromRight) {
    var length2 = array4.length, index = fromIndex + (fromRight ? 1 : -1);
    while (fromRight ? index-- : ++index < length2) {
      if (predicate(array4[index], index, array4)) {
        return index;
      }
    }
    return -1;
  }
  function baseIsNaN2(value2) {
    return value2 !== value2;
  }
  function strictIndexOf2(array4, value2, fromIndex) {
    var index = fromIndex - 1, length2 = array4.length;
    while (++index < length2) {
      if (array4[index] === value2) {
        return index;
      }
    }
    return -1;
  }
  function baseIndexOf2(array4, value2, fromIndex) {
    return value2 === value2 ? strictIndexOf_default2(array4, value2, fromIndex) : baseFindIndex_default2(array4, baseIsNaN_default2, fromIndex);
  }
  function arrayIncludes2(array4, value2) {
    var length2 = array4 == null ? 0 : array4.length;
    return !!length2 && baseIndexOf_default2(array4, value2, 0) > -1;
  }
  function isIndex2(value2, length2) {
    var type3 = typeof value2;
    length2 = length2 == null ? MAX_SAFE_INTEGER3 : length2;
    return !!length2 && (type3 == "number" || type3 != "symbol" && reIsUint2.test(value2)) && (value2 > -1 && value2 % 1 == 0 && value2 < length2);
  }
  function baseAssignValue2(object3, key, value2) {
    if (key == "__proto__" && defineProperty_default2) {
      defineProperty_default2(object3, key, {
        "configurable": true,
        "enumerable": true,
        "value": value2,
        "writable": true
      });
    } else {
      object3[key] = value2;
    }
  }
  function eq3(value2, other) {
    return value2 === other || value2 !== value2 && other !== other;
  }
  function assignValue2(object3, key, value2) {
    var objValue = object3[key];
    if (!(hasOwnProperty32.call(object3, key) && eq_default2(objValue, value2)) || value2 === void 0 && !(key in object3)) {
      baseAssignValue_default2(object3, key, value2);
    }
  }
  function copyObject2(source, props, object3, customizer) {
    var isNew = !object3;
    object3 || (object3 = {});
    var index = -1, length2 = props.length;
    while (++index < length2) {
      var key = props[index];
      var newValue = customizer ? customizer(object3[key], source[key], key, object3, source) : void 0;
      if (newValue === void 0) {
        newValue = source[key];
      }
      if (isNew) {
        baseAssignValue_default2(object3, key, newValue);
      } else {
        assignValue_default2(object3, key, newValue);
      }
    }
    return object3;
  }
  function overRest2(func, start3, transform8) {
    start3 = nativeMax4(start3 === void 0 ? func.length - 1 : start3, 0);
    return function() {
      var args = arguments, index = -1, length2 = nativeMax4(args.length - start3, 0), array4 = Array(length2);
      while (++index < length2) {
        array4[index] = args[start3 + index];
      }
      index = -1;
      var otherArgs = Array(start3 + 1);
      while (++index < start3) {
        otherArgs[index] = args[index];
      }
      otherArgs[start3] = transform8(array4);
      return apply_default2(func, this, otherArgs);
    };
  }
  function baseRest2(func, start3) {
    return setToString_default2(overRest_default2(func, start3, identity_default5), func + "");
  }
  function isLength3(value2) {
    return typeof value2 == "number" && value2 > -1 && value2 % 1 == 0 && value2 <= MAX_SAFE_INTEGER22;
  }
  function isArrayLike3(value2) {
    return value2 != null && isLength_default2(value2.length) && !isFunction_default2(value2);
  }
  function isIterateeCall2(value2, index, object3) {
    if (!isObject_default2(object3)) {
      return false;
    }
    var type3 = typeof index;
    if (type3 == "number" ? isArrayLike_default2(object3) && isIndex_default2(index, object3.length) : type3 == "string" && index in object3) {
      return eq_default2(object3[index], value2);
    }
    return false;
  }
  function createAssigner2(assigner) {
    return baseRest_default2(function(object3, sources) {
      var index = -1, length2 = sources.length, customizer = length2 > 1 ? sources[length2 - 1] : void 0, guard = length2 > 2 ? sources[2] : void 0;
      customizer = assigner.length > 3 && typeof customizer == "function" ? (length2--, customizer) : void 0;
      if (guard && isIterateeCall_default2(sources[0], sources[1], guard)) {
        customizer = length2 < 3 ? void 0 : customizer;
        length2 = 1;
      }
      object3 = Object(object3);
      while (++index < length2) {
        var source = sources[index];
        if (source) {
          assigner(object3, source, index, customizer);
        }
      }
      return object3;
    });
  }
  function isPrototype3(value2) {
    var Ctor = value2 && value2.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto52;
    return value2 === proto;
  }
  function baseTimes2(n2, iteratee) {
    var index = -1, result = Array(n2);
    while (++index < n2) {
      result[index] = iteratee(index);
    }
    return result;
  }
  function baseIsArguments2(value2) {
    return isObjectLike_default2(value2) && baseGetTag_default2(value2) == argsTag5;
  }
  function stubFalse2() {
    return false;
  }
  function baseIsTypedArray2(value2) {
    return isObjectLike_default2(value2) && isLength_default2(value2.length) && !!typedArrayTags2[baseGetTag_default2(value2)];
  }
  function baseUnary2(func) {
    return function(value2) {
      return func(value2);
    };
  }
  function arrayLikeKeys2(value2, inherited) {
    var isArr = isArray_default2(value2), isArg = !isArr && isArguments_default2(value2), isBuff = !isArr && !isArg && isBuffer_default2(value2), isType2 = !isArr && !isArg && !isBuff && isTypedArray_default2(value2), skipIndexes = isArr || isArg || isBuff || isType2, result = skipIndexes ? baseTimes_default2(value2.length, String) : [], length2 = result.length;
    for (var key in value2) {
      if ((inherited || hasOwnProperty52.call(value2, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
      (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
      isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
      isType2 && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
      isIndex_default2(key, length2)))) {
        result.push(key);
      }
    }
    return result;
  }
  function overArg2(func, transform8) {
    return function(arg) {
      return func(transform8(arg));
    };
  }
  function baseKeys2(object3) {
    if (!isPrototype_default2(object3)) {
      return nativeKeys_default2(object3);
    }
    var result = [];
    for (var key in Object(object3)) {
      if (hasOwnProperty62.call(object3, key) && key != "constructor") {
        result.push(key);
      }
    }
    return result;
  }
  function keys2(object3) {
    return isArrayLike_default2(object3) ? arrayLikeKeys_default2(object3) : baseKeys_default2(object3);
  }
  function nativeKeysIn2(object3) {
    var result = [];
    if (object3 != null) {
      for (var key in Object(object3)) {
        result.push(key);
      }
    }
    return result;
  }
  function baseKeysIn2(object3) {
    if (!isObject_default2(object3)) {
      return nativeKeysIn_default2(object3);
    }
    var isProto = isPrototype_default2(object3), result = [];
    for (var key in object3) {
      if (!(key == "constructor" && (isProto || !hasOwnProperty82.call(object3, key)))) {
        result.push(key);
      }
    }
    return result;
  }
  function keysIn2(object3) {
    return isArrayLike_default2(object3) ? arrayLikeKeys_default2(object3, true) : baseKeysIn_default2(object3);
  }
  function isKey2(value2, object3) {
    if (isArray_default2(value2)) {
      return false;
    }
    var type3 = typeof value2;
    if (type3 == "number" || type3 == "symbol" || type3 == "boolean" || value2 == null || isSymbol_default2(value2)) {
      return true;
    }
    return reIsPlainProp2.test(value2) || !reIsDeepProp2.test(value2) || object3 != null && value2 in Object(object3);
  }
  function hashClear2() {
    this.__data__ = nativeCreate_default2 ? nativeCreate_default2(null) : {};
    this.size = 0;
  }
  function hashDelete2(key) {
    var result = this.has(key) && delete this.__data__[key];
    this.size -= result ? 1 : 0;
    return result;
  }
  function hashGet2(key) {
    var data6 = this.__data__;
    if (nativeCreate_default2) {
      var result = data6[key];
      return result === HASH_UNDEFINED4 ? void 0 : result;
    }
    return hasOwnProperty92.call(data6, key) ? data6[key] : void 0;
  }
  function hashHas2(key) {
    var data6 = this.__data__;
    return nativeCreate_default2 ? data6[key] !== void 0 : hasOwnProperty102.call(data6, key);
  }
  function hashSet2(key, value2) {
    var data6 = this.__data__;
    this.size += this.has(key) ? 0 : 1;
    data6[key] = nativeCreate_default2 && value2 === void 0 ? HASH_UNDEFINED22 : value2;
    return this;
  }
  function Hash2(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  function listCacheClear2() {
    this.__data__ = [];
    this.size = 0;
  }
  function assocIndexOf2(array4, key) {
    var length2 = array4.length;
    while (length2--) {
      if (eq_default2(array4[length2][0], key)) {
        return length2;
      }
    }
    return -1;
  }
  function listCacheDelete2(key) {
    var data6 = this.__data__, index = assocIndexOf_default2(data6, key);
    if (index < 0) {
      return false;
    }
    var lastIndex = data6.length - 1;
    if (index == lastIndex) {
      data6.pop();
    } else {
      splice2.call(data6, index, 1);
    }
    --this.size;
    return true;
  }
  function listCacheGet2(key) {
    var data6 = this.__data__, index = assocIndexOf_default2(data6, key);
    return index < 0 ? void 0 : data6[index][1];
  }
  function listCacheHas2(key) {
    return assocIndexOf_default2(this.__data__, key) > -1;
  }
  function listCacheSet2(key, value2) {
    var data6 = this.__data__, index = assocIndexOf_default2(data6, key);
    if (index < 0) {
      ++this.size;
      data6.push([key, value2]);
    } else {
      data6[index][1] = value2;
    }
    return this;
  }
  function ListCache2(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  function mapCacheClear2() {
    this.size = 0;
    this.__data__ = {
      "hash": new Hash_default2(),
      "map": new (Map_default2 || ListCache_default2)(),
      "string": new Hash_default2()
    };
  }
  function isKeyable2(value2) {
    var type3 = typeof value2;
    return type3 == "string" || type3 == "number" || type3 == "symbol" || type3 == "boolean" ? value2 !== "__proto__" : value2 === null;
  }
  function getMapData2(map32, key) {
    var data6 = map32.__data__;
    return isKeyable_default2(key) ? data6[typeof key == "string" ? "string" : "hash"] : data6.map;
  }
  function mapCacheDelete2(key) {
    var result = getMapData_default2(this, key)["delete"](key);
    this.size -= result ? 1 : 0;
    return result;
  }
  function mapCacheGet2(key) {
    return getMapData_default2(this, key).get(key);
  }
  function mapCacheHas2(key) {
    return getMapData_default2(this, key).has(key);
  }
  function mapCacheSet2(key, value2) {
    var data6 = getMapData_default2(this, key), size4 = data6.size;
    data6.set(key, value2);
    this.size += data6.size == size4 ? 0 : 1;
    return this;
  }
  function MapCache2(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  function memoize5(func, resolver3) {
    if (typeof func != "function" || resolver3 != null && typeof resolver3 != "function") {
      throw new TypeError(FUNC_ERROR_TEXT2);
    }
    var memoized = /* @__PURE__ */ __name2(function() {
      var args = arguments, key = resolver3 ? resolver3.apply(this, args) : args[0], cache3 = memoized.cache;
      if (cache3.has(key)) {
        return cache3.get(key);
      }
      var result = func.apply(this, args);
      memoized.cache = cache3.set(key, result) || cache3;
      return result;
    }, "memoized");
    memoized.cache = new (memoize5.Cache || MapCache_default2)();
    return memoized;
  }
  function memoizeCapped2(func) {
    var result = memoize_default2(func, function(key) {
      if (cache3.size === MAX_MEMOIZE_SIZE2) {
        cache3.clear();
      }
      return key;
    });
    var cache3 = result.cache;
    return result;
  }
  function toString22(value2) {
    return value2 == null ? "" : baseToString_default2(value2);
  }
  function castPath2(value2, object3) {
    if (isArray_default2(value2)) {
      return value2;
    }
    return isKey_default2(value2, object3) ? [value2] : stringToPath_default2(toString_default2(value2));
  }
  function toKey2(value2) {
    if (typeof value2 == "string" || isSymbol_default2(value2)) {
      return value2;
    }
    var result = value2 + "";
    return result == "0" && 1 / value2 == -INFINITY32 ? "-0" : result;
  }
  function baseGet2(object3, path4) {
    path4 = castPath_default2(path4, object3);
    var index = 0, length2 = path4.length;
    while (object3 != null && index < length2) {
      object3 = object3[toKey_default2(path4[index++])];
    }
    return index && index == length2 ? object3 : void 0;
  }
  function get5(object3, path4, defaultValue) {
    var result = object3 == null ? void 0 : baseGet_default2(object3, path4);
    return result === void 0 ? defaultValue : result;
  }
  function arrayPush3(array4, values22) {
    var index = -1, length2 = values22.length, offset = array4.length;
    while (++index < length2) {
      array4[offset + index] = values22[index];
    }
    return array4;
  }
  function isFlattenable2(value2) {
    return isArray_default2(value2) || isArguments_default2(value2) || !!(spreadableSymbol2 && value2 && value2[spreadableSymbol2]);
  }
  function baseFlatten2(array4, depth, predicate, isStrict, result) {
    var index = -1, length2 = array4.length;
    predicate || (predicate = isFlattenable_default2);
    result || (result = []);
    while (++index < length2) {
      var value2 = array4[index];
      if (depth > 0 && predicate(value2)) {
        if (depth > 1) {
          baseFlatten2(value2, depth - 1, predicate, isStrict, result);
        } else {
          arrayPush_default2(result, value2);
        }
      } else if (!isStrict) {
        result[result.length] = value2;
      }
    }
    return result;
  }
  function flatten2(array4) {
    var length2 = array4 == null ? 0 : array4.length;
    return length2 ? baseFlatten_default2(array4, 1) : [];
  }
  function baseSlice(array4, start3, end2) {
    var index = -1, length2 = array4.length;
    if (start3 < 0) {
      start3 = -start3 > length2 ? 0 : length2 + start3;
    }
    end2 = end2 > length2 ? length2 : end2;
    if (end2 < 0) {
      end2 += length2;
    }
    length2 = start3 > end2 ? 0 : end2 - start3 >>> 0;
    start3 >>>= 0;
    var result = Array(length2);
    while (++index < length2) {
      result[index] = array4[index + start3];
    }
    return result;
  }
  function arrayReduce2(array4, iteratee, accumulator, initAccum) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    if (initAccum && length2) {
      accumulator = array4[++index];
    }
    while (++index < length2) {
      accumulator = iteratee(accumulator, array4[index], index, array4);
    }
    return accumulator;
  }
  function stackClear2() {
    this.__data__ = new ListCache_default2();
    this.size = 0;
  }
  function stackDelete2(key) {
    var data6 = this.__data__, result = data6["delete"](key);
    this.size = data6.size;
    return result;
  }
  function stackGet2(key) {
    return this.__data__.get(key);
  }
  function stackHas2(key) {
    return this.__data__.has(key);
  }
  function stackSet2(key, value2) {
    var data6 = this.__data__;
    if (data6 instanceof ListCache_default2) {
      var pairs2 = data6.__data__;
      if (!Map_default2 || pairs2.length < LARGE_ARRAY_SIZE3 - 1) {
        pairs2.push([key, value2]);
        this.size = ++data6.size;
        return this;
      }
      data6 = this.__data__ = new MapCache_default2(pairs2);
    }
    data6.set(key, value2);
    this.size = data6.size;
    return this;
  }
  function Stack2(entries2) {
    var data6 = this.__data__ = new ListCache_default2(entries2);
    this.size = data6.size;
  }
  function baseAssign2(object3, source) {
    return object3 && copyObject_default2(source, keys_default2(source), object3);
  }
  function baseAssignIn2(object3, source) {
    return object3 && copyObject_default2(source, keysIn_default2(source), object3);
  }
  function cloneBuffer2(buffer, isDeep) {
    if (isDeep) {
      return buffer.slice();
    }
    var length2 = buffer.length, result = allocUnsafe2 ? allocUnsafe2(length2) : new buffer.constructor(length2);
    buffer.copy(result);
    return result;
  }
  function arrayFilter2(array4, predicate) {
    var index = -1, length2 = array4 == null ? 0 : array4.length, resIndex = 0, result = [];
    while (++index < length2) {
      var value2 = array4[index];
      if (predicate(value2, index, array4)) {
        result[resIndex++] = value2;
      }
    }
    return result;
  }
  function stubArray2() {
    return [];
  }
  function copySymbols2(source, object3) {
    return copyObject_default2(source, getSymbols_default2(source), object3);
  }
  function copySymbolsIn2(source, object3) {
    return copyObject_default2(source, getSymbolsIn_default2(source), object3);
  }
  function baseGetAllKeys2(object3, keysFunc, symbolsFunc) {
    var result = keysFunc(object3);
    return isArray_default2(object3) ? result : arrayPush_default2(result, symbolsFunc(object3));
  }
  function getAllKeys2(object3) {
    return baseGetAllKeys_default2(object3, keys_default2, getSymbols_default2);
  }
  function getAllKeysIn2(object3) {
    return baseGetAllKeys_default2(object3, keysIn_default2, getSymbolsIn_default2);
  }
  function initCloneArray2(array4) {
    var length2 = array4.length, result = new array4.constructor(length2);
    if (length2 && typeof array4[0] == "string" && hasOwnProperty112.call(array4, "index")) {
      result.index = array4.index;
      result.input = array4.input;
    }
    return result;
  }
  function cloneArrayBuffer2(arrayBuffer) {
    var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
    new Uint8Array_default2(result).set(new Uint8Array_default2(arrayBuffer));
    return result;
  }
  function cloneDataView2(dataView, isDeep) {
    var buffer = isDeep ? cloneArrayBuffer_default2(dataView.buffer) : dataView.buffer;
    return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
  }
  function cloneRegExp2(regexp) {
    var result = new regexp.constructor(regexp.source, reFlags2.exec(regexp));
    result.lastIndex = regexp.lastIndex;
    return result;
  }
  function cloneSymbol2(symbol) {
    return symbolValueOf3 ? Object(symbolValueOf3.call(symbol)) : {};
  }
  function cloneTypedArray2(typedArray, isDeep) {
    var buffer = isDeep ? cloneArrayBuffer_default2(typedArray.buffer) : typedArray.buffer;
    return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
  }
  function initCloneByTag2(object3, tag, isDeep) {
    var Ctor = object3.constructor;
    switch (tag) {
      case arrayBufferTag22:
        return cloneArrayBuffer_default2(object3);
      case boolTag22:
      case dateTag22:
        return new Ctor(+object3);
      case dataViewTag32:
        return cloneDataView_default2(object3, isDeep);
      case float32Tag22:
      case float64Tag22:
      case int8Tag22:
      case int16Tag22:
      case int32Tag22:
      case uint8Tag22:
      case uint8ClampedTag22:
      case uint16Tag22:
      case uint32Tag22:
        return cloneTypedArray_default2(object3, isDeep);
      case mapTag32:
        return new Ctor();
      case numberTag22:
      case stringTag22:
        return new Ctor(object3);
      case regexpTag22:
        return cloneRegExp_default2(object3);
      case setTag32:
        return new Ctor();
      case symbolTag22:
        return cloneSymbol_default2(object3);
    }
  }
  function initCloneObject2(object3) {
    return typeof object3.constructor == "function" && !isPrototype_default2(object3) ? baseCreate_default2(getPrototype_default2(object3)) : {};
  }
  function baseIsMap2(value2) {
    return isObjectLike_default2(value2) && getTag_default2(value2) == mapTag42;
  }
  function baseIsSet2(value2) {
    return isObjectLike_default2(value2) && getTag_default2(value2) == setTag42;
  }
  function baseClone2(value2, bitmask, customizer, key, object3, stack) {
    var result, isDeep = bitmask & CLONE_DEEP_FLAG3, isFlat = bitmask & CLONE_FLAT_FLAG2, isFull = bitmask & CLONE_SYMBOLS_FLAG4;
    if (customizer) {
      result = object3 ? customizer(value2, key, object3, stack) : customizer(value2);
    }
    if (result !== void 0) {
      return result;
    }
    if (!isObject_default2(value2)) {
      return value2;
    }
    var isArr = isArray_default2(value2);
    if (isArr) {
      result = initCloneArray_default2(value2);
      if (!isDeep) {
        return copyArray_default2(value2, result);
      }
    } else {
      var tag = getTag_default2(value2), isFunc = tag == funcTag32 || tag == genTag22;
      if (isBuffer_default2(value2)) {
        return cloneBuffer_default2(value2, isDeep);
      }
      if (tag == objectTag32 || tag == argsTag32 || isFunc && !object3) {
        result = isFlat || isFunc ? {} : initCloneObject_default2(value2);
        if (!isDeep) {
          return isFlat ? copySymbolsIn_default2(value2, baseAssignIn_default2(result, value2)) : copySymbols_default2(value2, baseAssign_default2(result, value2));
        }
      } else {
        if (!cloneableTags2[tag]) {
          return object3 ? value2 : {};
        }
        result = initCloneByTag_default2(value2, tag, isDeep);
      }
    }
    stack || (stack = new Stack_default2());
    var stacked = stack.get(value2);
    if (stacked) {
      return stacked;
    }
    stack.set(value2, result);
    if (isSet_default2(value2)) {
      value2.forEach(function(subValue) {
        result.add(baseClone2(subValue, bitmask, customizer, subValue, value2, stack));
      });
    } else if (isMap_default2(value2)) {
      value2.forEach(function(subValue, key2) {
        result.set(key2, baseClone2(subValue, bitmask, customizer, key2, value2, stack));
      });
    }
    var keysFunc = isFull ? isFlat ? getAllKeysIn_default2 : getAllKeys_default2 : isFlat ? keysIn_default2 : keys_default2;
    var props = isArr ? void 0 : keysFunc(value2);
    arrayEach_default2(props || value2, function(subValue, key2) {
      if (props) {
        key2 = subValue;
        subValue = value2[key2];
      }
      assignValue_default2(result, key2, baseClone2(subValue, bitmask, customizer, key2, value2, stack));
    });
    return result;
  }
  function clone7(value2) {
    return baseClone_default2(value2, CLONE_SYMBOLS_FLAG22);
  }
  function compact(array4) {
    var index = -1, length2 = array4 == null ? 0 : array4.length, resIndex = 0, result = [];
    while (++index < length2) {
      var value2 = array4[index];
      if (value2) {
        result[resIndex++] = value2;
      }
    }
    return result;
  }
  function setCacheAdd2(value2) {
    this.__data__.set(value2, HASH_UNDEFINED32);
    return this;
  }
  function setCacheHas2(value2) {
    return this.__data__.has(value2);
  }
  function SetCache2(values22) {
    var index = -1, length2 = values22 == null ? 0 : values22.length;
    this.__data__ = new MapCache_default2();
    while (++index < length2) {
      this.add(values22[index]);
    }
  }
  function arraySome2(array4, predicate) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (predicate(array4[index], index, array4)) {
        return true;
      }
    }
    return false;
  }
  function cacheHas2(cache3, key) {
    return cache3.has(key);
  }
  function equalArrays2(array4, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG7, arrLength = array4.length, othLength = other.length;
    if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
      return false;
    }
    var arrStacked = stack.get(array4);
    var othStacked = stack.get(other);
    if (arrStacked && othStacked) {
      return arrStacked == other && othStacked == array4;
    }
    var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG5 ? new SetCache_default2() : void 0;
    stack.set(array4, other);
    stack.set(other, array4);
    while (++index < arrLength) {
      var arrValue = array4[index], othValue = other[index];
      if (customizer) {
        var compared = isPartial ? customizer(othValue, arrValue, index, other, array4, stack) : customizer(arrValue, othValue, index, array4, other, stack);
      }
      if (compared !== void 0) {
        if (compared) {
          continue;
        }
        result = false;
        break;
      }
      if (seen) {
        if (!arraySome_default2(other, function(othValue2, othIndex) {
          if (!cacheHas_default2(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
            return seen.push(othIndex);
          }
        })) {
          result = false;
          break;
        }
      } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
        result = false;
        break;
      }
    }
    stack["delete"](array4);
    stack["delete"](other);
    return result;
  }
  function mapToArray2(map32) {
    var index = -1, result = Array(map32.size);
    map32.forEach(function(value2, key) {
      result[++index] = [key, value2];
    });
    return result;
  }
  function setToArray2(set5) {
    var index = -1, result = Array(set5.size);
    set5.forEach(function(value2) {
      result[++index] = value2;
    });
    return result;
  }
  function equalByTag2(object3, other, tag, bitmask, customizer, equalFunc, stack) {
    switch (tag) {
      case dataViewTag52:
        if (object3.byteLength != other.byteLength || object3.byteOffset != other.byteOffset) {
          return false;
        }
        object3 = object3.buffer;
        other = other.buffer;
      case arrayBufferTag42:
        if (object3.byteLength != other.byteLength || !equalFunc(new Uint8Array_default2(object3), new Uint8Array_default2(other))) {
          return false;
        }
        return true;
      case boolTag42:
      case dateTag42:
      case numberTag42:
        return eq_default2(+object3, +other);
      case errorTag32:
        return object3.name == other.name && object3.message == other.message;
      case regexpTag42:
      case stringTag42:
        return object3 == other + "";
      case mapTag62:
        var convert = mapToArray_default2;
      case setTag62:
        var isPartial = bitmask & COMPARE_PARTIAL_FLAG22;
        convert || (convert = setToArray_default2);
        if (object3.size != other.size && !isPartial) {
          return false;
        }
        var stacked = stack.get(object3);
        if (stacked) {
          return stacked == other;
        }
        bitmask |= COMPARE_UNORDERED_FLAG22;
        stack.set(object3, other);
        var result = equalArrays_default2(convert(object3), convert(other), bitmask, customizer, equalFunc, stack);
        stack["delete"](object3);
        return result;
      case symbolTag42:
        if (symbolValueOf22) {
          return symbolValueOf22.call(object3) == symbolValueOf22.call(other);
        }
    }
    return false;
  }
  function equalObjects2(object3, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG32, objProps = getAllKeys_default2(object3), objLength = objProps.length, othProps = getAllKeys_default2(other), othLength = othProps.length;
    if (objLength != othLength && !isPartial) {
      return false;
    }
    var index = objLength;
    while (index--) {
      var key = objProps[index];
      if (!(isPartial ? key in other : hasOwnProperty122.call(other, key))) {
        return false;
      }
    }
    var objStacked = stack.get(object3);
    var othStacked = stack.get(other);
    if (objStacked && othStacked) {
      return objStacked == other && othStacked == object3;
    }
    var result = true;
    stack.set(object3, other);
    stack.set(other, object3);
    var skipCtor = isPartial;
    while (++index < objLength) {
      key = objProps[index];
      var objValue = object3[key], othValue = other[key];
      if (customizer) {
        var compared = isPartial ? customizer(othValue, objValue, key, other, object3, stack) : customizer(objValue, othValue, key, object3, other, stack);
      }
      if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
        result = false;
        break;
      }
      skipCtor || (skipCtor = key == "constructor");
    }
    if (result && !skipCtor) {
      var objCtor = object3.constructor, othCtor = other.constructor;
      if (objCtor != othCtor && ("constructor" in object3 && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
        result = false;
      }
    }
    stack["delete"](object3);
    stack["delete"](other);
    return result;
  }
  function baseIsEqualDeep2(object3, other, bitmask, customizer, equalFunc, stack) {
    var objIsArr = isArray_default2(object3), othIsArr = isArray_default2(other), objTag = objIsArr ? arrayTag32 : getTag_default2(object3), othTag = othIsArr ? arrayTag32 : getTag_default2(other);
    objTag = objTag == argsTag42 ? objectTag42 : objTag;
    othTag = othTag == argsTag42 ? objectTag42 : othTag;
    var objIsObj = objTag == objectTag42, othIsObj = othTag == objectTag42, isSameTag = objTag == othTag;
    if (isSameTag && isBuffer_default2(object3)) {
      if (!isBuffer_default2(other)) {
        return false;
      }
      objIsArr = true;
      objIsObj = false;
    }
    if (isSameTag && !objIsObj) {
      stack || (stack = new Stack_default2());
      return objIsArr || isTypedArray_default2(object3) ? equalArrays_default2(object3, other, bitmask, customizer, equalFunc, stack) : equalByTag_default2(object3, other, objTag, bitmask, customizer, equalFunc, stack);
    }
    if (!(bitmask & COMPARE_PARTIAL_FLAG42)) {
      var objIsWrapped = objIsObj && hasOwnProperty132.call(object3, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty132.call(other, "__wrapped__");
      if (objIsWrapped || othIsWrapped) {
        var objUnwrapped = objIsWrapped ? object3.value() : object3, othUnwrapped = othIsWrapped ? other.value() : other;
        stack || (stack = new Stack_default2());
        return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
      }
    }
    if (!isSameTag) {
      return false;
    }
    stack || (stack = new Stack_default2());
    return equalObjects_default2(object3, other, bitmask, customizer, equalFunc, stack);
  }
  function baseIsEqual2(value2, other, bitmask, customizer, stack) {
    if (value2 === other) {
      return true;
    }
    if (value2 == null || other == null || !isObjectLike_default2(value2) && !isObjectLike_default2(other)) {
      return value2 !== value2 && other !== other;
    }
    return baseIsEqualDeep_default2(value2, other, bitmask, customizer, baseIsEqual2, stack);
  }
  function baseIsMatch2(object3, source, matchData, customizer) {
    var index = matchData.length, length2 = index, noCustomizer = !customizer;
    if (object3 == null) {
      return !length2;
    }
    object3 = Object(object3);
    while (index--) {
      var data6 = matchData[index];
      if (noCustomizer && data6[2] ? data6[1] !== object3[data6[0]] : !(data6[0] in object3)) {
        return false;
      }
    }
    while (++index < length2) {
      data6 = matchData[index];
      var key = data6[0], objValue = object3[key], srcValue = data6[1];
      if (noCustomizer && data6[2]) {
        if (objValue === void 0 && !(key in object3)) {
          return false;
        }
      } else {
        var stack = new Stack_default2();
        if (customizer) {
          var result = customizer(objValue, srcValue, key, object3, source, stack);
        }
        if (!(result === void 0 ? baseIsEqual_default2(srcValue, objValue, COMPARE_PARTIAL_FLAG52 | COMPARE_UNORDERED_FLAG32, customizer, stack) : result)) {
          return false;
        }
      }
    }
    return true;
  }
  function isStrictComparable2(value2) {
    return value2 === value2 && !isObject_default2(value2);
  }
  function getMatchData2(object3) {
    var result = keys_default2(object3), length2 = result.length;
    while (length2--) {
      var key = result[length2], value2 = object3[key];
      result[length2] = [key, value2, isStrictComparable_default2(value2)];
    }
    return result;
  }
  function matchesStrictComparable2(key, srcValue) {
    return function(object3) {
      if (object3 == null) {
        return false;
      }
      return object3[key] === srcValue && (srcValue !== void 0 || key in Object(object3));
    };
  }
  function baseMatches2(source) {
    var matchData = getMatchData_default2(source);
    if (matchData.length == 1 && matchData[0][2]) {
      return matchesStrictComparable_default2(matchData[0][0], matchData[0][1]);
    }
    return function(object3) {
      return object3 === source || baseIsMatch_default2(object3, source, matchData);
    };
  }
  function baseHasIn2(object3, key) {
    return object3 != null && key in Object(object3);
  }
  function hasPath2(object3, path4, hasFunc) {
    path4 = castPath_default2(path4, object3);
    var index = -1, length2 = path4.length, result = false;
    while (++index < length2) {
      var key = toKey_default2(path4[index]);
      if (!(result = object3 != null && hasFunc(object3, key))) {
        break;
      }
      object3 = object3[key];
    }
    if (result || ++index != length2) {
      return result;
    }
    length2 = object3 == null ? 0 : object3.length;
    return !!length2 && isLength_default2(length2) && isIndex_default2(key, length2) && (isArray_default2(object3) || isArguments_default2(object3));
  }
  function hasIn2(object3, path4) {
    return object3 != null && hasPath_default2(object3, path4, baseHasIn_default2);
  }
  function baseMatchesProperty2(path4, srcValue) {
    if (isKey_default2(path4) && isStrictComparable_default2(srcValue)) {
      return matchesStrictComparable_default2(toKey_default2(path4), srcValue);
    }
    return function(object3) {
      var objValue = get_default2(object3, path4);
      return objValue === void 0 && objValue === srcValue ? hasIn_default2(object3, path4) : baseIsEqual_default2(srcValue, objValue, COMPARE_PARTIAL_FLAG62 | COMPARE_UNORDERED_FLAG42);
    };
  }
  function baseProperty2(key) {
    return function(object3) {
      return object3 == null ? void 0 : object3[key];
    };
  }
  function basePropertyDeep2(path4) {
    return function(object3) {
      return baseGet_default2(object3, path4);
    };
  }
  function property2(path4) {
    return isKey_default2(path4) ? baseProperty_default2(toKey_default2(path4)) : basePropertyDeep_default2(path4);
  }
  function baseIteratee2(value2) {
    if (typeof value2 == "function") {
      return value2;
    }
    if (value2 == null) {
      return identity_default5;
    }
    if (typeof value2 == "object") {
      return isArray_default2(value2) ? baseMatchesProperty_default2(value2[0], value2[1]) : baseMatches_default2(value2);
    }
    return property_default3(value2);
  }
  function arrayAggregator(array4, setter, iteratee, accumulator) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      var value2 = array4[index];
      setter(accumulator, value2, iteratee(value2), array4);
    }
    return accumulator;
  }
  function createBaseFor2(fromRight) {
    return function(object3, iteratee, keysFunc) {
      var index = -1, iterable = Object(object3), props = keysFunc(object3), length2 = props.length;
      while (length2--) {
        var key = props[fromRight ? length2 : ++index];
        if (iteratee(iterable[key], key, iterable) === false) {
          break;
        }
      }
      return object3;
    };
  }
  function baseForOwn2(object3, iteratee) {
    return object3 && baseFor_default2(object3, iteratee, keys_default2);
  }
  function createBaseEach2(eachFunc, fromRight) {
    return function(collection4, iteratee) {
      if (collection4 == null) {
        return collection4;
      }
      if (!isArrayLike_default2(collection4)) {
        return eachFunc(collection4, iteratee);
      }
      var length2 = collection4.length, index = fromRight ? length2 : -1, iterable = Object(collection4);
      while (fromRight ? index-- : ++index < length2) {
        if (iteratee(iterable[index], index, iterable) === false) {
          break;
        }
      }
      return collection4;
    };
  }
  function baseAggregator(collection4, setter, iteratee, accumulator) {
    baseEach_default2(collection4, function(value2, key, collection22) {
      setter(accumulator, value2, iteratee(value2), collection22);
    });
    return accumulator;
  }
  function createAggregator(setter, initializer) {
    return function(collection4, iteratee) {
      var func = isArray_default2(collection4) ? arrayAggregator_default : baseAggregator_default, accumulator = initializer ? initializer() : {};
      return func(collection4, setter, baseIteratee_default2(iteratee, 2), accumulator);
    };
  }
  function isArrayLikeObject3(value2) {
    return isObjectLike_default2(value2) && isArrayLike_default2(value2);
  }
  function arrayIncludesWith2(array4, value2, comparator) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (comparator(value2, array4[index])) {
        return true;
      }
    }
    return false;
  }
  function baseDifference(array4, values22, iteratee, comparator) {
    var index = -1, includes22 = arrayIncludes_default2, isCommon = true, length2 = array4.length, result = [], valuesLength = values22.length;
    if (!length2) {
      return result;
    }
    if (iteratee) {
      values22 = arrayMap_default2(values22, baseUnary_default2(iteratee));
    }
    if (comparator) {
      includes22 = arrayIncludesWith_default2;
      isCommon = false;
    } else if (values22.length >= LARGE_ARRAY_SIZE22) {
      includes22 = cacheHas_default2;
      isCommon = false;
      values22 = new SetCache_default2(values22);
    }
    outer:
      while (++index < length2) {
        var value2 = array4[index], computed = iteratee == null ? value2 : iteratee(value2);
        value2 = comparator || value2 !== 0 ? value2 : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values22[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value2);
        } else if (!includes22(values22, computed, comparator)) {
          result.push(value2);
        }
      }
    return result;
  }
  function last3(array4) {
    var length2 = array4 == null ? 0 : array4.length;
    return length2 ? array4[length2 - 1] : void 0;
  }
  function drop(array4, n2, guard) {
    var length2 = array4 == null ? 0 : array4.length;
    if (!length2) {
      return [];
    }
    n2 = guard || n2 === void 0 ? 1 : toInteger_default2(n2);
    return baseSlice_default(array4, n2 < 0 ? 0 : n2, length2);
  }
  function dropRight(array4, n2, guard) {
    var length2 = array4 == null ? 0 : array4.length;
    if (!length2) {
      return [];
    }
    n2 = guard || n2 === void 0 ? 1 : toInteger_default2(n2);
    n2 = length2 - n2;
    return baseSlice_default(array4, 0, n2 < 0 ? 0 : n2);
  }
  function castFunction2(value2) {
    return typeof value2 == "function" ? value2 : identity_default5;
  }
  function forEach3(collection4, iteratee) {
    var func = isArray_default2(collection4) ? arrayEach_default2 : baseEach_default2;
    return func(collection4, castFunction_default2(iteratee));
  }
  function arrayEvery(array4, predicate) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (!predicate(array4[index], index, array4)) {
        return false;
      }
    }
    return true;
  }
  function baseEvery(collection4, predicate) {
    var result = true;
    baseEach_default2(collection4, function(value2, index, collection22) {
      result = !!predicate(value2, index, collection22);
      return result;
    });
    return result;
  }
  function every2(collection4, predicate, guard) {
    var func = isArray_default2(collection4) ? arrayEvery_default : baseEvery_default;
    if (guard && isIterateeCall_default2(collection4, predicate, guard)) {
      predicate = void 0;
    }
    return func(collection4, baseIteratee_default2(predicate, 3));
  }
  function baseFilter2(collection4, predicate) {
    var result = [];
    baseEach_default2(collection4, function(value2, index, collection22) {
      if (predicate(value2, index, collection22)) {
        result.push(value2);
      }
    });
    return result;
  }
  function filter6(collection4, predicate) {
    var func = isArray_default2(collection4) ? arrayFilter_default2 : baseFilter_default2;
    return func(collection4, baseIteratee_default2(predicate, 3));
  }
  function createFind2(findIndexFunc) {
    return function(collection4, predicate, fromIndex) {
      var iterable = Object(collection4);
      if (!isArrayLike_default2(collection4)) {
        var iteratee = baseIteratee_default2(predicate, 3);
        collection4 = keys_default2(collection4);
        predicate = /* @__PURE__ */ __name2(function(key) {
          return iteratee(iterable[key], key, iterable);
        }, "predicate");
      }
      var index = findIndexFunc(collection4, predicate, fromIndex);
      return index > -1 ? iterable[iteratee ? collection4[index] : index] : void 0;
    };
  }
  function findIndex2(array4, predicate, fromIndex) {
    var length2 = array4 == null ? 0 : array4.length;
    if (!length2) {
      return -1;
    }
    var index = fromIndex == null ? 0 : toInteger_default2(fromIndex);
    if (index < 0) {
      index = nativeMax22(length2 + index, 0);
    }
    return baseFindIndex_default2(array4, baseIteratee_default2(predicate, 3), index);
  }
  function head(array4) {
    return array4 && array4.length ? array4[0] : void 0;
  }
  function baseMap2(collection4, iteratee) {
    var index = -1, result = isArrayLike_default2(collection4) ? Array(collection4.length) : [];
    baseEach_default2(collection4, function(value2, key, collection22) {
      result[++index] = iteratee(value2, key, collection22);
    });
    return result;
  }
  function map5(collection4, iteratee) {
    var func = isArray_default2(collection4) ? arrayMap_default2 : baseMap_default2;
    return func(collection4, baseIteratee_default2(iteratee, 3));
  }
  function flatMap(collection4, iteratee) {
    return baseFlatten_default2(map_default2(collection4, iteratee), 1);
  }
  function baseHas2(object3, key) {
    return object3 != null && hasOwnProperty162.call(object3, key);
  }
  function has2(object3, path4) {
    return object3 != null && hasPath_default2(object3, path4, baseHas_default2);
  }
  function isString2(value2) {
    return typeof value2 == "string" || !isArray_default2(value2) && isObjectLike_default2(value2) && baseGetTag_default2(value2) == stringTag52;
  }
  function baseValues2(object3, props) {
    return arrayMap_default2(props, function(key) {
      return object3[key];
    });
  }
  function values2(object3) {
    return object3 == null ? [] : baseValues_default2(object3, keys_default2(object3));
  }
  function includes(collection4, value2, fromIndex, guard) {
    collection4 = isArrayLike_default2(collection4) ? collection4 : values_default2(collection4);
    fromIndex = fromIndex && !guard ? toInteger_default2(fromIndex) : 0;
    var length2 = collection4.length;
    if (fromIndex < 0) {
      fromIndex = nativeMax32(length2 + fromIndex, 0);
    }
    return isString_default2(collection4) ? fromIndex <= length2 && collection4.indexOf(value2, fromIndex) > -1 : !!length2 && baseIndexOf_default2(collection4, value2, fromIndex) > -1;
  }
  function indexOf(array4, value2, fromIndex) {
    var length2 = array4 == null ? 0 : array4.length;
    if (!length2) {
      return -1;
    }
    var index = fromIndex == null ? 0 : toInteger_default2(fromIndex);
    if (index < 0) {
      index = nativeMax42(length2 + index, 0);
    }
    return baseIndexOf_default2(array4, value2, index);
  }
  function isEmpty3(value2) {
    if (value2 == null) {
      return true;
    }
    if (isArrayLike_default2(value2) && (isArray_default2(value2) || typeof value2 == "string" || typeof value2.splice == "function" || isBuffer_default2(value2) || isTypedArray_default2(value2) || isArguments_default2(value2))) {
      return !value2.length;
    }
    var tag = getTag_default2(value2);
    if (tag == mapTag72 || tag == setTag72) {
      return !value2.size;
    }
    if (isPrototype_default2(value2)) {
      return !baseKeys_default2(value2).length;
    }
    for (var key in value2) {
      if (hasOwnProperty172.call(value2, key)) {
        return false;
      }
    }
    return true;
  }
  function baseIsRegExp(value2) {
    return isObjectLike_default2(value2) && baseGetTag_default2(value2) == regexpTag52;
  }
  function isUndefined2(value2) {
    return value2 === void 0;
  }
  function negate(predicate) {
    if (typeof predicate != "function") {
      throw new TypeError(FUNC_ERROR_TEXT22);
    }
    return function() {
      var args = arguments;
      switch (args.length) {
        case 0:
          return !predicate.call(this);
        case 1:
          return !predicate.call(this, args[0]);
        case 2:
          return !predicate.call(this, args[0], args[1]);
        case 3:
          return !predicate.call(this, args[0], args[1], args[2]);
      }
      return !predicate.apply(this, args);
    };
  }
  function baseSet2(object3, path4, value2, customizer) {
    if (!isObject_default2(object3)) {
      return object3;
    }
    path4 = castPath_default2(path4, object3);
    var index = -1, length2 = path4.length, lastIndex = length2 - 1, nested = object3;
    while (nested != null && ++index < length2) {
      var key = toKey_default2(path4[index]), newValue = value2;
      if (key === "__proto__" || key === "constructor" || key === "prototype") {
        return object3;
      }
      if (index != lastIndex) {
        var objValue = nested[key];
        newValue = customizer ? customizer(objValue, key, nested) : void 0;
        if (newValue === void 0) {
          newValue = isObject_default2(objValue) ? objValue : isIndex_default2(path4[index + 1]) ? [] : {};
        }
      }
      assignValue_default2(nested, key, newValue);
      nested = nested[key];
    }
    return object3;
  }
  function basePickBy2(object3, paths, predicate) {
    var index = -1, length2 = paths.length, result = {};
    while (++index < length2) {
      var path4 = paths[index], value2 = baseGet_default2(object3, path4);
      if (predicate(value2, path4)) {
        baseSet_default2(result, castPath_default2(path4, object3), value2);
      }
    }
    return result;
  }
  function pickBy(object3, predicate) {
    if (object3 == null) {
      return {};
    }
    var props = arrayMap_default2(getAllKeysIn_default2(object3), function(prop) {
      return [prop];
    });
    predicate = baseIteratee_default2(predicate);
    return basePickBy_default2(object3, props, function(value2, path4) {
      return predicate(value2, path4[0]);
    });
  }
  function baseReduce2(collection4, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection4, function(value2, index, collection22) {
      accumulator = initAccum ? (initAccum = false, value2) : iteratee(accumulator, value2, index, collection22);
    });
    return accumulator;
  }
  function reduce3(collection4, iteratee, accumulator) {
    var func = isArray_default2(collection4) ? arrayReduce_default2 : baseReduce_default2, initAccum = arguments.length < 3;
    return func(collection4, baseIteratee_default2(iteratee, 4), accumulator, initAccum, baseEach_default2);
  }
  function reject2(collection4, predicate) {
    var func = isArray_default2(collection4) ? arrayFilter_default2 : baseFilter_default2;
    return func(collection4, negate_default(baseIteratee_default2(predicate, 3)));
  }
  function baseSome(collection4, predicate) {
    var result;
    baseEach_default2(collection4, function(value2, index, collection22) {
      result = predicate(value2, index, collection22);
      return !result;
    });
    return !!result;
  }
  function some2(collection4, predicate, guard) {
    var func = isArray_default2(collection4) ? arraySome_default2 : baseSome_default;
    if (guard && isIterateeCall_default2(collection4, predicate, guard)) {
      predicate = void 0;
    }
    return func(collection4, baseIteratee_default2(predicate, 3));
  }
  function baseUniq2(array4, iteratee, comparator) {
    var index = -1, includes22 = arrayIncludes_default2, length2 = array4.length, isCommon = true, result = [], seen = result;
    if (comparator) {
      isCommon = false;
      includes22 = arrayIncludesWith_default2;
    } else if (length2 >= LARGE_ARRAY_SIZE32) {
      var set5 = iteratee ? null : createSet_default2(array4);
      if (set5) {
        return setToArray_default2(set5);
      }
      isCommon = false;
      includes22 = cacheHas_default2;
      seen = new SetCache_default2();
    } else {
      seen = iteratee ? [] : result;
    }
    outer:
      while (++index < length2) {
        var value2 = array4[index], computed = iteratee ? iteratee(value2) : value2;
        value2 = comparator || value2 !== 0 ? value2 : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value2);
        } else if (!includes22(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value2);
        }
      }
    return result;
  }
  function uniq(array4) {
    return array4 && array4.length ? baseUniq_default2(array4) : [];
  }
  function PRINT_ERROR(msg) {
    if (console && console.error) {
      console.error(`Error: ${msg}`);
    }
  }
  function PRINT_WARNING(msg) {
    if (console && console.warn) {
      console.warn(`Warning: ${msg}`);
    }
  }
  function timer2(func) {
    const start3 = (/* @__PURE__ */ new Date()).getTime();
    const val = func();
    const end2 = (/* @__PURE__ */ new Date()).getTime();
    const total = end2 - start3;
    return { time: total, value: val };
  }
  function toFastProperties(toBecomeFast) {
    function FakeConstructor() {
    }
    __name(FakeConstructor, "FakeConstructor");
    __name2(FakeConstructor, "FakeConstructor");
    FakeConstructor.prototype = toBecomeFast;
    const fakeInstance = new FakeConstructor();
    function fakeAccess() {
      return typeof fakeInstance.bar;
    }
    __name(fakeAccess, "fakeAccess");
    __name2(fakeAccess, "fakeAccess");
    fakeAccess();
    fakeAccess();
    if (1)
      return toBecomeFast;
    (0, eval)(toBecomeFast);
  }
  function tokenLabel(tokType) {
    if (hasTokenLabel(tokType)) {
      return tokType.LABEL;
    } else {
      return tokType.name;
    }
  }
  function hasTokenLabel(obj) {
    return isString_default2(obj.LABEL) && obj.LABEL !== "";
  }
  function serializeGrammar(topRules) {
    return map_default2(topRules, serializeProduction);
  }
  function serializeProduction(node2) {
    function convertDefinition(definition) {
      return map_default2(definition, serializeProduction);
    }
    __name(convertDefinition, "convertDefinition");
    __name2(convertDefinition, "convertDefinition");
    if (node2 instanceof NonTerminal) {
      const serializedNonTerminal = {
        type: "NonTerminal",
        name: node2.nonTerminalName,
        idx: node2.idx
      };
      if (isString_default2(node2.label)) {
        serializedNonTerminal.label = node2.label;
      }
      return serializedNonTerminal;
    } else if (node2 instanceof Alternative) {
      return {
        type: "Alternative",
        definition: convertDefinition(node2.definition)
      };
    } else if (node2 instanceof Option2) {
      return {
        type: "Option",
        idx: node2.idx,
        definition: convertDefinition(node2.definition)
      };
    } else if (node2 instanceof RepetitionMandatory) {
      return {
        type: "RepetitionMandatory",
        idx: node2.idx,
        definition: convertDefinition(node2.definition)
      };
    } else if (node2 instanceof RepetitionMandatoryWithSeparator) {
      return {
        type: "RepetitionMandatoryWithSeparator",
        idx: node2.idx,
        separator: serializeProduction(new Terminal({ terminalType: node2.separator })),
        definition: convertDefinition(node2.definition)
      };
    } else if (node2 instanceof RepetitionWithSeparator) {
      return {
        type: "RepetitionWithSeparator",
        idx: node2.idx,
        separator: serializeProduction(new Terminal({ terminalType: node2.separator })),
        definition: convertDefinition(node2.definition)
      };
    } else if (node2 instanceof Repetition) {
      return {
        type: "Repetition",
        idx: node2.idx,
        definition: convertDefinition(node2.definition)
      };
    } else if (node2 instanceof Alternation) {
      return {
        type: "Alternation",
        idx: node2.idx,
        definition: convertDefinition(node2.definition)
      };
    } else if (node2 instanceof Terminal) {
      const serializedTerminal = {
        type: "Terminal",
        name: node2.terminalType.name,
        label: tokenLabel(node2.terminalType),
        idx: node2.idx
      };
      if (isString_default2(node2.label)) {
        serializedTerminal.terminalLabel = node2.label;
      }
      const pattern = node2.terminalType.PATTERN;
      if (node2.terminalType.PATTERN) {
        serializedTerminal.pattern = isRegExp_default(pattern) ? pattern.source : pattern;
      }
      return serializedTerminal;
    } else if (node2 instanceof Rule) {
      return {
        type: "Rule",
        name: node2.name,
        orgText: node2.orgText,
        definition: convertDefinition(node2.definition)
      };
    } else {
      throw Error("non exhaustive match");
    }
  }
  function isSequenceProd(prod) {
    return prod instanceof Alternative || prod instanceof Option2 || prod instanceof Repetition || prod instanceof RepetitionMandatory || prod instanceof RepetitionMandatoryWithSeparator || prod instanceof RepetitionWithSeparator || prod instanceof Terminal || prod instanceof Rule;
  }
  function isOptionalProd(prod, alreadyVisited = []) {
    const isDirectlyOptional = prod instanceof Option2 || prod instanceof Repetition || prod instanceof RepetitionWithSeparator;
    if (isDirectlyOptional) {
      return true;
    }
    if (prod instanceof Alternation) {
      return some_default(prod.definition, (subProd) => {
        return isOptionalProd(subProd, alreadyVisited);
      });
    } else if (prod instanceof NonTerminal && includes_default(alreadyVisited, prod)) {
      return false;
    } else if (prod instanceof AbstractProduction) {
      if (prod instanceof NonTerminal) {
        alreadyVisited.push(prod);
      }
      return every_default(prod.definition, (subProd) => {
        return isOptionalProd(subProd, alreadyVisited);
      });
    } else {
      return false;
    }
  }
  function isBranchingProd(prod) {
    return prod instanceof Alternation;
  }
  function getProductionDslName(prod) {
    if (prod instanceof NonTerminal) {
      return "SUBRULE";
    } else if (prod instanceof Option2) {
      return "OPTION";
    } else if (prod instanceof Alternation) {
      return "OR";
    } else if (prod instanceof RepetitionMandatory) {
      return "AT_LEAST_ONE";
    } else if (prod instanceof RepetitionMandatoryWithSeparator) {
      return "AT_LEAST_ONE_SEP";
    } else if (prod instanceof RepetitionWithSeparator) {
      return "MANY_SEP";
    } else if (prod instanceof Repetition) {
      return "MANY";
    } else if (prod instanceof Terminal) {
      return "CONSUME";
    } else {
      throw Error("non exhaustive match");
    }
  }
  function restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {
    const repSepRest = [
      new Option2({
        definition: [
          new Terminal({ terminalType: repSepProd.separator })
        ].concat(repSepProd.definition)
      })
    ];
    const fullRepSepRest = repSepRest.concat(currRest, prevRest);
    return fullRepSepRest;
  }
  function first2(prod) {
    if (prod instanceof NonTerminal) {
      return first2(prod.referencedRule);
    } else if (prod instanceof Terminal) {
      return firstForTerminal(prod);
    } else if (isSequenceProd(prod)) {
      return firstForSequence(prod);
    } else if (isBranchingProd(prod)) {
      return firstForBranching(prod);
    } else {
      throw Error("non exhaustive match");
    }
  }
  function firstForSequence(prod) {
    let firstSet = [];
    const seq2 = prod.definition;
    let nextSubProdIdx = 0;
    let hasInnerProdsRemaining = seq2.length > nextSubProdIdx;
    let currSubProd;
    let isLastInnerProdOptional = true;
    while (hasInnerProdsRemaining && isLastInnerProdOptional) {
      currSubProd = seq2[nextSubProdIdx];
      isLastInnerProdOptional = isOptionalProd(currSubProd);
      firstSet = firstSet.concat(first2(currSubProd));
      nextSubProdIdx = nextSubProdIdx + 1;
      hasInnerProdsRemaining = seq2.length > nextSubProdIdx;
    }
    return uniq_default(firstSet);
  }
  function firstForBranching(prod) {
    const allAlternativesFirsts = map_default2(prod.definition, (innerProd) => {
      return first2(innerProd);
    });
    return uniq_default(flatten_default2(allAlternativesFirsts));
  }
  function firstForTerminal(terminal) {
    return [terminal.terminalType];
  }
  function computeAllProdsFollows(topProductions) {
    const reSyncFollows = {};
    forEach_default2(topProductions, (topProd) => {
      const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking();
      assign_default(reSyncFollows, currRefsFollow);
    });
    return reSyncFollows;
  }
  function buildBetweenProdsFollowPrefix(inner2, occurenceInParent) {
    return inner2.name + occurenceInParent + IN;
  }
  function getRegExpAst(regExp) {
    const regExpStr = regExp.toString();
    if (regExpAstCache.hasOwnProperty(regExpStr)) {
      return regExpAstCache[regExpStr];
    } else {
      const regExpAst = regExpParser.pattern(regExpStr);
      regExpAstCache[regExpStr] = regExpAst;
      return regExpAst;
    }
  }
  function clearRegExpParserCache() {
    regExpAstCache = {};
  }
  function getOptimizedStartCodesIndices(regExp, ensureOptimizations = false) {
    try {
      const ast = getRegExpAst(regExp);
      const firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase);
      return firstChars;
    } catch (e3) {
      if (e3.message === complementErrorMessage) {
        if (ensureOptimizations) {
          PRINT_WARNING(`${failedOptimizationPrefixMsg}	Unable to optimize: < ${regExp.toString()} >
	Complement Sets cannot be automatically optimized.
	This will disable the lexer's first char optimizations.
	See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);
        }
      } else {
        let msgSuffix = "";
        if (ensureOptimizations) {
          msgSuffix = "\n	This will disable the lexer's first char optimizations.\n	See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.";
        }
        PRINT_ERROR(`${failedOptimizationPrefixMsg}
	Failed parsing: < ${regExp.toString()} >
	Using the @chevrotain/regexp-to-ast library
	Please open an issue at: https://github.com/chevrotain/chevrotain/issues` + msgSuffix);
      }
    }
    return [];
  }
  function firstCharOptimizedIndices(ast, result, ignoreCase) {
    switch (ast.type) {
      case "Disjunction":
        for (let i2 = 0; i2 < ast.value.length; i2++) {
          firstCharOptimizedIndices(ast.value[i2], result, ignoreCase);
        }
        break;
      case "Alternative":
        const terms = ast.value;
        for (let i2 = 0; i2 < terms.length; i2++) {
          const term = terms[i2];
          switch (term.type) {
            case "EndAnchor":
            // A group back reference cannot affect potential starting char.
            // because if a back reference is the first production than automatically
            // the group being referenced has had to come BEFORE so its codes have already been added
            case "GroupBackReference":
            // assertions do not affect potential starting codes
            case "Lookahead":
            case "NegativeLookahead":
            case "Lookbehind":
            case "NegativeLookbehind":
            case "StartAnchor":
            case "WordBoundary":
            case "NonWordBoundary":
              continue;
          }
          const atom2 = term;
          switch (atom2.type) {
            case "Character":
              addOptimizedIdxToResult(atom2.value, result, ignoreCase);
              break;
            case "Set":
              if (atom2.complement === true) {
                throw Error(complementErrorMessage);
              }
              forEach_default2(atom2.value, (code) => {
                if (typeof code === "number") {
                  addOptimizedIdxToResult(code, result, ignoreCase);
                } else {
                  const range3 = code;
                  if (ignoreCase === true) {
                    for (let rangeCode = range3.from; rangeCode <= range3.to; rangeCode++) {
                      addOptimizedIdxToResult(rangeCode, result, ignoreCase);
                    }
                  } else {
                    for (let rangeCode = range3.from; rangeCode <= range3.to && rangeCode < minOptimizationVal; rangeCode++) {
                      addOptimizedIdxToResult(rangeCode, result, ignoreCase);
                    }
                    if (range3.to >= minOptimizationVal) {
                      const minUnOptVal = range3.from >= minOptimizationVal ? range3.from : minOptimizationVal;
                      const maxUnOptVal = range3.to;
                      const minOptIdx = charCodeToOptimizedIndex(minUnOptVal);
                      const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal);
                      for (let currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {
                        result[currOptIdx] = currOptIdx;
                      }
                    }
                  }
                }
              });
              break;
            case "Group":
              firstCharOptimizedIndices(atom2.value, result, ignoreCase);
              break;
            /* istanbul ignore next */
            default:
              throw Error("Non Exhaustive Match");
          }
          const isOptionalQuantifier = atom2.quantifier !== void 0 && atom2.quantifier.atLeast === 0;
          if (
            // A group may be optional due to empty contents /(?:)/
            // or if everything inside it is optional /((a)?)/
            atom2.type === "Group" && isWholeOptional(atom2) === false || // If this term is not a group it may only be optional if it has an optional quantifier
            atom2.type !== "Group" && isOptionalQuantifier === false
          ) {
            break;
          }
        }
        break;
      /* istanbul ignore next */
      default:
        throw Error("non exhaustive match!");
    }
    return values_default2(result);
  }
  function addOptimizedIdxToResult(code, result, ignoreCase) {
    const optimizedCharIdx = charCodeToOptimizedIndex(code);
    result[optimizedCharIdx] = optimizedCharIdx;
    if (ignoreCase === true) {
      handleIgnoreCase(code, result);
    }
  }
  function handleIgnoreCase(code, result) {
    const char2 = String.fromCharCode(code);
    const upperChar = char2.toUpperCase();
    if (upperChar !== char2) {
      const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0));
      result[optimizedCharIdx] = optimizedCharIdx;
    } else {
      const lowerChar = char2.toLowerCase();
      if (lowerChar !== char2) {
        const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0));
        result[optimizedCharIdx] = optimizedCharIdx;
      }
    }
  }
  function findCode(setNode, targetCharCodes) {
    return find_default3(setNode.value, (codeOrRange) => {
      if (typeof codeOrRange === "number") {
        return includes_default(targetCharCodes, codeOrRange);
      } else {
        const range3 = codeOrRange;
        return find_default3(targetCharCodes, (targetCode) => range3.from <= targetCode && targetCode <= range3.to) !== void 0;
      }
    });
  }
  function isWholeOptional(ast) {
    const quantifier = ast.quantifier;
    if (quantifier && quantifier.atLeast === 0) {
      return true;
    }
    if (!ast.value) {
      return false;
    }
    return isArray_default2(ast.value) ? every_default(ast.value, isWholeOptional) : isWholeOptional(ast.value);
  }
  function canMatchCharCode(charCodes, pattern) {
    if (pattern instanceof RegExp) {
      const ast = getRegExpAst(pattern);
      const charCodeFinder = new CharCodeFinder(charCodes);
      charCodeFinder.visit(ast);
      return charCodeFinder.found;
    } else {
      return find_default3(pattern, (char2) => {
        return includes_default(charCodes, char2.charCodeAt(0));
      }) !== void 0;
    }
  }
  function analyzeTokenTypes(tokenTypes, options2) {
    options2 = defaults_default2(options2, {
      debug: false,
      safeMode: false,
      positionTracking: "full",
      lineTerminatorCharacters: ["\r", "\n"],
      tracer: /* @__PURE__ */ __name2((msg, action) => action(), "tracer")
    });
    const tracer = options2.tracer;
    tracer("initCharCodeToOptimizedIndexMap", () => {
      initCharCodeToOptimizedIndexMap();
    });
    let onlyRelevantTypes;
    tracer("Reject Lexer.NA", () => {
      onlyRelevantTypes = reject_default(tokenTypes, (currType) => {
        return currType[PATTERN] === Lexer2.NA;
      });
    });
    let hasCustom = false;
    let allTransformedPatterns;
    tracer("Transform Patterns", () => {
      hasCustom = false;
      allTransformedPatterns = map_default2(onlyRelevantTypes, (currType) => {
        const currPattern = currType[PATTERN];
        if (isRegExp_default(currPattern)) {
          const regExpSource = currPattern.source;
          if (regExpSource.length === 1 && // only these regExp meta characters which can appear in a length one regExp
          regExpSource !== "^" && regExpSource !== "$" && regExpSource !== "." && !currPattern.ignoreCase) {
            return regExpSource;
          } else if (regExpSource.length === 2 && regExpSource[0] === "\\" && // not a meta character
          !includes_default([
            "d",
            "D",
            "s",
            "S",
            "t",
            "r",
            "n",
            "t",
            "0",
            "c",
            "b",
            "B",
            "f",
            "v",
            "w",
            "W"
          ], regExpSource[1])) {
            return regExpSource[1];
          } else {
            return addStickyFlag(currPattern);
          }
        } else if (isFunction_default2(currPattern)) {
          hasCustom = true;
          return { exec: currPattern };
        } else if (typeof currPattern === "object") {
          hasCustom = true;
          return currPattern;
        } else if (typeof currPattern === "string") {
          if (currPattern.length === 1) {
            return currPattern;
          } else {
            const escapedRegExpString = currPattern.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
            const wrappedRegExp = new RegExp(escapedRegExpString);
            return addStickyFlag(wrappedRegExp);
          }
        } else {
          throw Error("non exhaustive match");
        }
      });
    });
    let patternIdxToType;
    let patternIdxToGroup;
    let patternIdxToLongerAltIdxArr;
    let patternIdxToPushMode;
    let patternIdxToPopMode;
    tracer("misc mapping", () => {
      patternIdxToType = map_default2(onlyRelevantTypes, (currType) => currType.tokenTypeIdx);
      patternIdxToGroup = map_default2(onlyRelevantTypes, (clazz) => {
        const groupName = clazz.GROUP;
        if (groupName === Lexer2.SKIPPED) {
          return void 0;
        } else if (isString_default2(groupName)) {
          return groupName;
        } else if (isUndefined_default2(groupName)) {
          return false;
        } else {
          throw Error("non exhaustive match");
        }
      });
      patternIdxToLongerAltIdxArr = map_default2(onlyRelevantTypes, (clazz) => {
        const longerAltType = clazz.LONGER_ALT;
        if (longerAltType) {
          const longerAltIdxArr = isArray_default2(longerAltType) ? map_default2(longerAltType, (type3) => indexOf_default(onlyRelevantTypes, type3)) : [indexOf_default(onlyRelevantTypes, longerAltType)];
          return longerAltIdxArr;
        }
      });
      patternIdxToPushMode = map_default2(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE);
      patternIdxToPopMode = map_default2(onlyRelevantTypes, (clazz) => has_default2(clazz, "POP_MODE"));
    });
    let patternIdxToCanLineTerminator;
    tracer("Line Terminator Handling", () => {
      const lineTerminatorCharCodes = getCharCodes(options2.lineTerminatorCharacters);
      patternIdxToCanLineTerminator = map_default2(onlyRelevantTypes, (tokType) => false);
      if (options2.positionTracking !== "onlyOffset") {
        patternIdxToCanLineTerminator = map_default2(onlyRelevantTypes, (tokType) => {
          if (has_default2(tokType, "LINE_BREAKS")) {
            return !!tokType.LINE_BREAKS;
          } else {
            return checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false && canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);
          }
        });
      }
    });
    let patternIdxToIsCustom;
    let patternIdxToShort;
    let emptyGroups;
    let patternIdxToConfig;
    tracer("Misc Mapping #2", () => {
      patternIdxToIsCustom = map_default2(onlyRelevantTypes, isCustomPattern);
      patternIdxToShort = map_default2(allTransformedPatterns, isShortPattern);
      emptyGroups = reduce_default2(onlyRelevantTypes, (acc, clazz) => {
        const groupName = clazz.GROUP;
        if (isString_default2(groupName) && !(groupName === Lexer2.SKIPPED)) {
          acc[groupName] = [];
        }
        return acc;
      }, {});
      patternIdxToConfig = map_default2(allTransformedPatterns, (x5, idx) => {
        return {
          pattern: allTransformedPatterns[idx],
          longerAlt: patternIdxToLongerAltIdxArr[idx],
          canLineTerminator: patternIdxToCanLineTerminator[idx],
          isCustom: patternIdxToIsCustom[idx],
          short: patternIdxToShort[idx],
          group: patternIdxToGroup[idx],
          push: patternIdxToPushMode[idx],
          pop: patternIdxToPopMode[idx],
          tokenTypeIdx: patternIdxToType[idx],
          tokenType: onlyRelevantTypes[idx]
        };
      });
    });
    let canBeOptimized = true;
    let charCodeToPatternIdxToConfig = [];
    if (!options2.safeMode) {
      tracer("First Char Optimization", () => {
        charCodeToPatternIdxToConfig = reduce_default2(onlyRelevantTypes, (result, currTokType, idx) => {
          if (typeof currTokType.PATTERN === "string") {
            const charCode = currTokType.PATTERN.charCodeAt(0);
            const optimizedIdx = charCodeToOptimizedIndex(charCode);
            addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx]);
          } else if (isArray_default2(currTokType.START_CHARS_HINT)) {
            let lastOptimizedIdx;
            forEach_default2(currTokType.START_CHARS_HINT, (charOrInt) => {
              const charCode = typeof charOrInt === "string" ? charOrInt.charCodeAt(0) : charOrInt;
              const currOptimizedIdx = charCodeToOptimizedIndex(charCode);
              if (lastOptimizedIdx !== currOptimizedIdx) {
                lastOptimizedIdx = currOptimizedIdx;
                addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx]);
              }
            });
          } else if (isRegExp_default(currTokType.PATTERN)) {
            if (currTokType.PATTERN.unicode) {
              canBeOptimized = false;
              if (options2.ensureOptimizations) {
                PRINT_ERROR(`${failedOptimizationPrefixMsg}	Unable to analyze < ${currTokType.PATTERN.toString()} > pattern.
	The regexp unicode flag is not currently supported by the regexp-to-ast library.
	This will disable the lexer's first char optimizations.
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);
              }
            } else {
              const optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options2.ensureOptimizations);
              if (isEmpty_default2(optimizedCodes)) {
                canBeOptimized = false;
              }
              forEach_default2(optimizedCodes, (code) => {
                addToMapOfArrays(result, code, patternIdxToConfig[idx]);
              });
            }
          } else {
            if (options2.ensureOptimizations) {
              PRINT_ERROR(`${failedOptimizationPrefixMsg}	TokenType: <${currTokType.name}> is using a custom token pattern without providing <start_chars_hint> parameter.
	This will disable the lexer's first char optimizations.
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`);
            }
            canBeOptimized = false;
          }
          return result;
        }, []);
      });
    }
    return {
      emptyGroups,
      patternIdxToConfig,
      charCodeToPatternIdxToConfig,
      hasCustom,
      canBeOptimized
    };
  }
  function validatePatterns(tokenTypes, validModesNames) {
    let errors = [];
    const missingResult = findMissingPatterns(tokenTypes);
    errors = errors.concat(missingResult.errors);
    const invalidResult = findInvalidPatterns(missingResult.valid);
    const validTokenTypes = invalidResult.valid;
    errors = errors.concat(invalidResult.errors);
    errors = errors.concat(validateRegExpPattern(validTokenTypes));
    errors = errors.concat(findInvalidGroupType(validTokenTypes));
    errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames));
    errors = errors.concat(findUnreachablePatterns(validTokenTypes));
    return errors;
  }
  function validateRegExpPattern(tokenTypes) {
    let errors = [];
    const withRegExpPatterns = filter_default4(tokenTypes, (currTokType) => isRegExp_default(currTokType[PATTERN]));
    errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns));
    errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns));
    errors = errors.concat(findUnsupportedFlags(withRegExpPatterns));
    errors = errors.concat(findDuplicatePatterns(withRegExpPatterns));
    errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns));
    return errors;
  }
  function findMissingPatterns(tokenTypes) {
    const tokenTypesWithMissingPattern = filter_default4(tokenTypes, (currType) => {
      return !has_default2(currType, PATTERN);
    });
    const errors = map_default2(tokenTypesWithMissingPattern, (currType) => {
      return {
        message: "Token Type: ->" + currType.name + "<- missing static 'PATTERN' property",
        type: LexerDefinitionErrorType.MISSING_PATTERN,
        tokenTypes: [currType]
      };
    });
    const valid2 = difference_default(tokenTypes, tokenTypesWithMissingPattern);
    return { errors, valid: valid2 };
  }
  function findInvalidPatterns(tokenTypes) {
    const tokenTypesWithInvalidPattern = filter_default4(tokenTypes, (currType) => {
      const pattern = currType[PATTERN];
      return !isRegExp_default(pattern) && !isFunction_default2(pattern) && !has_default2(pattern, "exec") && !isString_default2(pattern);
    });
    const errors = map_default2(tokenTypesWithInvalidPattern, (currType) => {
      return {
        message: "Token Type: ->" + currType.name + "<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",
        type: LexerDefinitionErrorType.INVALID_PATTERN,
        tokenTypes: [currType]
      };
    });
    const valid2 = difference_default(tokenTypes, tokenTypesWithInvalidPattern);
    return { errors, valid: valid2 };
  }
  function findEndOfInputAnchor(tokenTypes) {
    class EndAnchorFinder extends BaseRegExpVisitor {
      static {
        __name(this, "EndAnchorFinder");
      }
      static {
        __name2(this, "EndAnchorFinder");
      }
      constructor() {
        super(...arguments);
        this.found = false;
      }
      visitEndAnchor(node2) {
        this.found = true;
      }
    }
    const invalidRegex = filter_default4(tokenTypes, (currType) => {
      const pattern = currType.PATTERN;
      try {
        const regexpAst = getRegExpAst(pattern);
        const endAnchorVisitor = new EndAnchorFinder();
        endAnchorVisitor.visit(regexpAst);
        return endAnchorVisitor.found;
      } catch (e3) {
        return end_of_input.test(pattern.source);
      }
    });
    const errors = map_default2(invalidRegex, (currType) => {
      return {
        message: "Unexpected RegExp Anchor Error:\n	Token Type: ->" + currType.name + "<- static 'PATTERN' cannot contain end of input anchor '$'\n	See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS	for details.",
        type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,
        tokenTypes: [currType]
      };
    });
    return errors;
  }
  function findEmptyMatchRegExps(tokenTypes) {
    const matchesEmptyString = filter_default4(tokenTypes, (currType) => {
      const pattern = currType.PATTERN;
      return pattern.test("");
    });
    const errors = map_default2(matchesEmptyString, (currType) => {
      return {
        message: "Token Type: ->" + currType.name + "<- static 'PATTERN' must not match an empty string",
        type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,
        tokenTypes: [currType]
      };
    });
    return errors;
  }
  function findStartOfInputAnchor(tokenTypes) {
    class StartAnchorFinder extends BaseRegExpVisitor {
      static {
        __name(this, "StartAnchorFinder");
      }
      static {
        __name2(this, "StartAnchorFinder");
      }
      constructor() {
        super(...arguments);
        this.found = false;
      }
      visitStartAnchor(node2) {
        this.found = true;
      }
    }
    const invalidRegex = filter_default4(tokenTypes, (currType) => {
      const pattern = currType.PATTERN;
      try {
        const regexpAst = getRegExpAst(pattern);
        const startAnchorVisitor = new StartAnchorFinder();
        startAnchorVisitor.visit(regexpAst);
        return startAnchorVisitor.found;
      } catch (e3) {
        return start_of_input.test(pattern.source);
      }
    });
    const errors = map_default2(invalidRegex, (currType) => {
      return {
        message: "Unexpected RegExp Anchor Error:\n	Token Type: ->" + currType.name + "<- static 'PATTERN' cannot contain start of input anchor '^'\n	See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS	for details.",
        type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,
        tokenTypes: [currType]
      };
    });
    return errors;
  }
  function findUnsupportedFlags(tokenTypes) {
    const invalidFlags = filter_default4(tokenTypes, (currType) => {
      const pattern = currType[PATTERN];
      return pattern instanceof RegExp && (pattern.multiline || pattern.global);
    });
    const errors = map_default2(invalidFlags, (currType) => {
      return {
        message: "Token Type: ->" + currType.name + "<- static 'PATTERN' may NOT contain global('g') or multiline('m')",
        type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,
        tokenTypes: [currType]
      };
    });
    return errors;
  }
  function findDuplicatePatterns(tokenTypes) {
    const found = [];
    let identicalPatterns = map_default2(tokenTypes, (outerType) => {
      return reduce_default2(tokenTypes, (result, innerType) => {
        if (outerType.PATTERN.source === innerType.PATTERN.source && !includes_default(found, innerType) && innerType.PATTERN !== Lexer2.NA) {
          found.push(innerType);
          result.push(innerType);
          return result;
        }
        return result;
      }, []);
    });
    identicalPatterns = compact_default(identicalPatterns);
    const duplicatePatterns = filter_default4(identicalPatterns, (currIdenticalSet) => {
      return currIdenticalSet.length > 1;
    });
    const errors = map_default2(duplicatePatterns, (setOfIdentical) => {
      const tokenTypeNames = map_default2(setOfIdentical, (currType) => {
        return currType.name;
      });
      const dupPatternSrc = head_default(setOfIdentical).PATTERN;
      return {
        message: `The same RegExp pattern ->${dupPatternSrc}<-has been used in all of the following Token Types: ${tokenTypeNames.join(", ")} <-`,
        type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,
        tokenTypes: setOfIdentical
      };
    });
    return errors;
  }
  function findInvalidGroupType(tokenTypes) {
    const invalidTypes = filter_default4(tokenTypes, (clazz) => {
      if (!has_default2(clazz, "GROUP")) {
        return false;
      }
      const group2 = clazz.GROUP;
      return group2 !== Lexer2.SKIPPED && group2 !== Lexer2.NA && !isString_default2(group2);
    });
    const errors = map_default2(invalidTypes, (currType) => {
      return {
        message: "Token Type: ->" + currType.name + "<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",
        type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,
        tokenTypes: [currType]
      };
    });
    return errors;
  }
  function findModesThatDoNotExist(tokenTypes, validModes) {
    const invalidModes = filter_default4(tokenTypes, (clazz) => {
      return clazz.PUSH_MODE !== void 0 && !includes_default(validModes, clazz.PUSH_MODE);
    });
    const errors = map_default2(invalidModes, (tokType) => {
      const msg = `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-which does not exist`;
      return {
        message: msg,
        type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,
        tokenTypes: [tokType]
      };
    });
    return errors;
  }
  function findUnreachablePatterns(tokenTypes) {
    const errors = [];
    const canBeTested = reduce_default2(tokenTypes, (result, tokType, idx) => {
      const pattern = tokType.PATTERN;
      if (pattern === Lexer2.NA) {
        return result;
      }
      if (isString_default2(pattern)) {
        result.push({ str: pattern, idx, tokenType: tokType });
      } else if (isRegExp_default(pattern) && noMetaChar(pattern)) {
        result.push({ str: pattern.source, idx, tokenType: tokType });
      }
      return result;
    }, []);
    forEach_default2(tokenTypes, (aTokType, aIdx) => {
      forEach_default2(canBeTested, ({ str: bStr, idx: bIdx, tokenType: bTokType }) => {
        if (aIdx < bIdx && tryToMatchStrToPattern(bStr, aTokType.PATTERN)) {
          const msg = `Token: ->${bTokType.name}<- can never be matched.
Because it appears AFTER the Token Type ->${aTokType.name}<-in the lexer's definition.
See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;
          errors.push({
            message: msg,
            type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,
            tokenTypes: [aTokType, bTokType]
          });
        }
      });
    });
    return errors;
  }
  function tryToMatchStrToPattern(str2, pattern) {
    if (isRegExp_default(pattern)) {
      if (usesLookAheadOrBehind(pattern)) {
        return false;
      }
      const regExpArray = pattern.exec(str2);
      return regExpArray !== null && regExpArray.index === 0;
    } else if (isFunction_default2(pattern)) {
      return pattern(str2, 0, [], {});
    } else if (has_default2(pattern, "exec")) {
      return pattern.exec(str2, 0, [], {});
    } else if (typeof pattern === "string") {
      return pattern === str2;
    } else {
      throw Error("non exhaustive match");
    }
  }
  function noMetaChar(regExp) {
    const metaChars = [
      ".",
      "\\",
      "[",
      "]",
      "|",
      "^",
      "$",
      "(",
      ")",
      "?",
      "*",
      "+",
      "{"
    ];
    return find_default3(metaChars, (char2) => regExp.source.indexOf(char2) !== -1) === void 0;
  }
  function usesLookAheadOrBehind(regExp) {
    return /(\(\?=)|(\(\?!)|(\(\?<=)|(\(\?<!)/.test(regExp.source);
  }
  function addStickyFlag(pattern) {
    const flags = pattern.ignoreCase ? "iy" : "y";
    return new RegExp(`${pattern.source}`, flags);
  }
  function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {
    const errors = [];
    if (!has_default2(lexerDefinition, DEFAULT_MODE)) {
      errors.push({
        message: "A MultiMode Lexer cannot be initialized without a <" + DEFAULT_MODE + "> property in its definition\n",
        type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE
      });
    }
    if (!has_default2(lexerDefinition, MODES)) {
      errors.push({
        message: "A MultiMode Lexer cannot be initialized without a <" + MODES + "> property in its definition\n",
        type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY
      });
    }
    if (has_default2(lexerDefinition, MODES) && has_default2(lexerDefinition, DEFAULT_MODE) && !has_default2(lexerDefinition.modes, lexerDefinition.defaultMode)) {
      errors.push({
        message: `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>which does not exist
`,
        type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST
      });
    }
    if (has_default2(lexerDefinition, MODES)) {
      forEach_default2(lexerDefinition.modes, (currModeValue, currModeName) => {
        forEach_default2(currModeValue, (currTokType, currIdx) => {
          if (isUndefined_default2(currTokType)) {
            errors.push({
              message: `A Lexer cannot be initialized using an undefined Token Type. Mode:<${currModeName}> at index: <${currIdx}>
`,
              type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED
            });
          } else if (has_default2(currTokType, "LONGER_ALT")) {
            const longerAlt = isArray_default2(currTokType.LONGER_ALT) ? currTokType.LONGER_ALT : [currTokType.LONGER_ALT];
            forEach_default2(longerAlt, (currLongerAlt) => {
              if (!isUndefined_default2(currLongerAlt) && !includes_default(currModeValue, currLongerAlt)) {
                errors.push({
                  message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}>
`,
                  type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE
                });
              }
            });
          }
        });
      });
    }
    return errors;
  }
  function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {
    const warnings3 = [];
    let hasAnyLineBreak = false;
    const allTokenTypes = compact_default(flatten_default2(values_default2(lexerDefinition.modes)));
    const concreteTokenTypes = reject_default(allTokenTypes, (currType) => currType[PATTERN] === Lexer2.NA);
    const terminatorCharCodes = getCharCodes(lineTerminatorCharacters);
    if (trackLines) {
      forEach_default2(concreteTokenTypes, (tokType) => {
        const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes);
        if (currIssue !== false) {
          const message = buildLineBreakIssueMessage(tokType, currIssue);
          const warningDescriptor = {
            message,
            type: currIssue.issue,
            tokenType: tokType
          };
          warnings3.push(warningDescriptor);
        } else {
          if (has_default2(tokType, "LINE_BREAKS")) {
            if (tokType.LINE_BREAKS === true) {
              hasAnyLineBreak = true;
            }
          } else {
            if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {
              hasAnyLineBreak = true;
            }
          }
        }
      });
    }
    if (trackLines && !hasAnyLineBreak) {
      warnings3.push({
        message: "Warning: No LINE_BREAKS Found.\n	This Lexer has been defined to track line and column information,\n	But none of the Token Types can be identified as matching a line terminator.\n	See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n	for details.",
        type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS
      });
    }
    return warnings3;
  }
  function cloneEmptyGroups(emptyGroups) {
    const clonedResult = {};
    const groupKeys = keys_default2(emptyGroups);
    forEach_default2(groupKeys, (currKey) => {
      const currGroupValue = emptyGroups[currKey];
      if (isArray_default2(currGroupValue)) {
        clonedResult[currKey] = [];
      } else {
        throw Error("non exhaustive match");
      }
    });
    return clonedResult;
  }
  function isCustomPattern(tokenType) {
    const pattern = tokenType.PATTERN;
    if (isRegExp_default(pattern)) {
      return false;
    } else if (isFunction_default2(pattern)) {
      return true;
    } else if (has_default2(pattern, "exec")) {
      return true;
    } else if (isString_default2(pattern)) {
      return false;
    } else {
      throw Error("non exhaustive match");
    }
  }
  function isShortPattern(pattern) {
    if (isString_default2(pattern) && pattern.length === 1) {
      return pattern.charCodeAt(0);
    } else {
      return false;
    }
  }
  function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {
    if (has_default2(tokType, "LINE_BREAKS")) {
      return false;
    } else {
      if (isRegExp_default(tokType.PATTERN)) {
        try {
          canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);
        } catch (e3) {
          return {
            issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,
            errMsg: e3.message
          };
        }
        return false;
      } else if (isString_default2(tokType.PATTERN)) {
        return false;
      } else if (isCustomPattern(tokType)) {
        return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK };
      } else {
        throw Error("non exhaustive match");
      }
    }
  }
  function buildLineBreakIssueMessage(tokType, details) {
    if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {
      return `Warning: unable to identify line terminator usage in pattern.
	The problem is in the <${tokType.name}> Token Type
	 Root cause: ${details.errMsg}.
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;
    } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {
      return `Warning: A Custom Token Pattern should specify the <line_breaks> option.
	The problem is in the <${tokType.name}> Token Type
	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;
    } else {
      throw Error("non exhaustive match");
    }
  }
  function getCharCodes(charsOrCodes) {
    const charCodes = map_default2(charsOrCodes, (numOrString) => {
      if (isString_default2(numOrString)) {
        return numOrString.charCodeAt(0);
      } else {
        return numOrString;
      }
    });
    return charCodes;
  }
  function addToMapOfArrays(map32, key, value2) {
    if (map32[key] === void 0) {
      map32[key] = [value2];
    } else {
      map32[key].push(value2);
    }
  }
  function charCodeToOptimizedIndex(charCode) {
    return charCode < minOptimizationVal ? charCode : charCodeToOptimizedIdxMap[charCode];
  }
  function initCharCodeToOptimizedIndexMap() {
    if (isEmpty_default2(charCodeToOptimizedIdxMap)) {
      charCodeToOptimizedIdxMap = new Array(65536);
      for (let i2 = 0; i2 < 65536; i2++) {
        charCodeToOptimizedIdxMap[i2] = i2 > 255 ? 255 + ~~(i2 / 255) : i2;
      }
    }
  }
  function tokenStructuredMatcher(tokInstance, tokConstructor) {
    const instanceType = tokInstance.tokenTypeIdx;
    if (instanceType === tokConstructor.tokenTypeIdx) {
      return true;
    } else {
      return tokConstructor.isParent === true && tokConstructor.categoryMatchesMap[instanceType] === true;
    }
  }
  function tokenStructuredMatcherNoCategories(token2, tokType) {
    return token2.tokenTypeIdx === tokType.tokenTypeIdx;
  }
  function augmentTokenTypes(tokenTypes) {
    const tokenTypesAndParents = expandCategories(tokenTypes);
    assignTokenDefaultProps(tokenTypesAndParents);
    assignCategoriesMapProp(tokenTypesAndParents);
    assignCategoriesTokensProp(tokenTypesAndParents);
    forEach_default2(tokenTypesAndParents, (tokType) => {
      tokType.isParent = tokType.categoryMatches.length > 0;
    });
  }
  function expandCategories(tokenTypes) {
    let result = clone_default3(tokenTypes);
    let categories = tokenTypes;
    let searching = true;
    while (searching) {
      categories = compact_default(flatten_default2(map_default2(categories, (currTokType) => currTokType.CATEGORIES)));
      const newCategories = difference_default(categories, result);
      result = result.concat(newCategories);
      if (isEmpty_default2(newCategories)) {
        searching = false;
      } else {
        categories = newCategories;
      }
    }
    return result;
  }
  function assignTokenDefaultProps(tokenTypes) {
    forEach_default2(tokenTypes, (currTokType) => {
      if (!hasShortKeyProperty(currTokType)) {
        tokenIdxToClass[tokenShortNameIdx] = currTokType;
        currTokType.tokenTypeIdx = tokenShortNameIdx++;
      }
      if (hasCategoriesProperty(currTokType) && !isArray_default2(currTokType.CATEGORIES)) {
        currTokType.CATEGORIES = [currTokType.CATEGORIES];
      }
      if (!hasCategoriesProperty(currTokType)) {
        currTokType.CATEGORIES = [];
      }
      if (!hasExtendingTokensTypesProperty(currTokType)) {
        currTokType.categoryMatches = [];
      }
      if (!hasExtendingTokensTypesMapProperty(currTokType)) {
        currTokType.categoryMatchesMap = {};
      }
    });
  }
  function assignCategoriesTokensProp(tokenTypes) {
    forEach_default2(tokenTypes, (currTokType) => {
      currTokType.categoryMatches = [];
      forEach_default2(currTokType.categoryMatchesMap, (val, key) => {
        currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx);
      });
    });
  }
  function assignCategoriesMapProp(tokenTypes) {
    forEach_default2(tokenTypes, (currTokType) => {
      singleAssignCategoriesToksMap([], currTokType);
    });
  }
  function singleAssignCategoriesToksMap(path4, nextNode) {
    forEach_default2(path4, (pathNode) => {
      nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true;
    });
    forEach_default2(nextNode.CATEGORIES, (nextCategory) => {
      const newPath = path4.concat(nextNode);
      if (!includes_default(newPath, nextCategory)) {
        singleAssignCategoriesToksMap(newPath, nextCategory);
      }
    });
  }
  function hasShortKeyProperty(tokType) {
    return has_default2(tokType, "tokenTypeIdx");
  }
  function hasCategoriesProperty(tokType) {
    return has_default2(tokType, "CATEGORIES");
  }
  function hasExtendingTokensTypesProperty(tokType) {
    return has_default2(tokType, "categoryMatches");
  }
  function hasExtendingTokensTypesMapProperty(tokType) {
    return has_default2(tokType, "categoryMatchesMap");
  }
  function isTokenType(tokType) {
    return has_default2(tokType, "tokenTypeIdx");
  }
  function tokenLabel2(tokType) {
    if (hasTokenLabel2(tokType)) {
      return tokType.LABEL;
    } else {
      return tokType.name;
    }
  }
  function hasTokenLabel2(obj) {
    return isString_default2(obj.LABEL) && obj.LABEL !== "";
  }
  function createToken(config3) {
    return createTokenInternal(config3);
  }
  function createTokenInternal(config3) {
    const pattern = config3.pattern;
    const tokenType = {};
    tokenType.name = config3.name;
    if (!isUndefined_default2(pattern)) {
      tokenType.PATTERN = pattern;
    }
    if (has_default2(config3, PARENT)) {
      throw "The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.";
    }
    if (has_default2(config3, CATEGORIES)) {
      tokenType.CATEGORIES = config3[CATEGORIES];
    }
    augmentTokenTypes([tokenType]);
    if (has_default2(config3, LABEL)) {
      tokenType.LABEL = config3[LABEL];
    }
    if (has_default2(config3, GROUP)) {
      tokenType.GROUP = config3[GROUP];
    }
    if (has_default2(config3, POP_MODE)) {
      tokenType.POP_MODE = config3[POP_MODE];
    }
    if (has_default2(config3, PUSH_MODE)) {
      tokenType.PUSH_MODE = config3[PUSH_MODE];
    }
    if (has_default2(config3, LONGER_ALT)) {
      tokenType.LONGER_ALT = config3[LONGER_ALT];
    }
    if (has_default2(config3, LINE_BREAKS)) {
      tokenType.LINE_BREAKS = config3[LINE_BREAKS];
    }
    if (has_default2(config3, START_CHARS_HINT)) {
      tokenType.START_CHARS_HINT = config3[START_CHARS_HINT];
    }
    return tokenType;
  }
  function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {
    return {
      image,
      startOffset,
      endOffset,
      startLine,
      endLine,
      startColumn,
      endColumn,
      tokenTypeIdx: tokType.tokenTypeIdx,
      tokenType: tokType
    };
  }
  function tokenMatcher(token2, tokType) {
    return tokenStructuredMatcher(token2, tokType);
  }
  function resolveGrammar(topLevels, errMsgProvider) {
    const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider);
    refResolver.resolveRefs();
    return refResolver.errors;
  }
  function possiblePathsFrom(targetDef, maxLength, currPath = []) {
    currPath = clone_default3(currPath);
    let result = [];
    let i2 = 0;
    function remainingPathWith(nextDef) {
      return nextDef.concat(drop_default(targetDef, i2 + 1));
    }
    __name(remainingPathWith, "remainingPathWith");
    __name2(remainingPathWith, "remainingPathWith");
    function getAlternativesForProd(definition) {
      const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath);
      return result.concat(alternatives);
    }
    __name(getAlternativesForProd, "getAlternativesForProd");
    __name2(getAlternativesForProd, "getAlternativesForProd");
    while (currPath.length < maxLength && i2 < targetDef.length) {
      const prod = targetDef[i2];
      if (prod instanceof Alternative) {
        return getAlternativesForProd(prod.definition);
      } else if (prod instanceof NonTerminal) {
        return getAlternativesForProd(prod.definition);
      } else if (prod instanceof Option2) {
        result = getAlternativesForProd(prod.definition);
      } else if (prod instanceof RepetitionMandatory) {
        const newDef = prod.definition.concat([
          new Repetition({
            definition: prod.definition
          })
        ]);
        return getAlternativesForProd(newDef);
      } else if (prod instanceof RepetitionMandatoryWithSeparator) {
        const newDef = [
          new Alternative({ definition: prod.definition }),
          new Repetition({
            definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition)
          })
        ];
        return getAlternativesForProd(newDef);
      } else if (prod instanceof RepetitionWithSeparator) {
        const newDef = prod.definition.concat([
          new Repetition({
            definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition)
          })
        ]);
        result = getAlternativesForProd(newDef);
      } else if (prod instanceof Repetition) {
        const newDef = prod.definition.concat([
          new Repetition({
            definition: prod.definition
          })
        ]);
        result = getAlternativesForProd(newDef);
      } else if (prod instanceof Alternation) {
        forEach_default2(prod.definition, (currAlt) => {
          if (isEmpty_default2(currAlt.definition) === false) {
            result = getAlternativesForProd(currAlt.definition);
          }
        });
        return result;
      } else if (prod instanceof Terminal) {
        currPath.push(prod.terminalType);
      } else {
        throw Error("non exhaustive match");
      }
      i2++;
    }
    result.push({
      partialPath: currPath,
      suffixDef: drop_default(targetDef, i2)
    });
    return result;
  }
  function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {
    const EXIT_NON_TERMINAL = "EXIT_NONE_TERMINAL";
    const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL];
    const EXIT_ALTERNATIVE = "EXIT_ALTERNATIVE";
    let foundCompletePath = false;
    const tokenVectorLength = tokenVector.length;
    const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1;
    const result = [];
    const possiblePaths = [];
    possiblePaths.push({
      idx: -1,
      def: initialDef,
      ruleStack: [],
      occurrenceStack: []
    });
    while (!isEmpty_default2(possiblePaths)) {
      const currPath = possiblePaths.pop();
      if (currPath === EXIT_ALTERNATIVE) {
        if (foundCompletePath && last_default2(possiblePaths).idx <= minimalAlternativesIndex) {
          possiblePaths.pop();
        }
        continue;
      }
      const currDef = currPath.def;
      const currIdx = currPath.idx;
      const currRuleStack = currPath.ruleStack;
      const currOccurrenceStack = currPath.occurrenceStack;
      if (isEmpty_default2(currDef)) {
        continue;
      }
      const prod = currDef[0];
      if (prod === EXIT_NON_TERMINAL) {
        const nextPath = {
          idx: currIdx,
          def: drop_default(currDef),
          ruleStack: dropRight_default(currRuleStack),
          occurrenceStack: dropRight_default(currOccurrenceStack)
        };
        possiblePaths.push(nextPath);
      } else if (prod instanceof Terminal) {
        if (currIdx < tokenVectorLength - 1) {
          const nextIdx = currIdx + 1;
          const actualToken = tokenVector[nextIdx];
          if (tokMatcher(actualToken, prod.terminalType)) {
            const nextPath = {
              idx: nextIdx,
              def: drop_default(currDef),
              ruleStack: currRuleStack,
              occurrenceStack: currOccurrenceStack
            };
            possiblePaths.push(nextPath);
          }
        } else if (currIdx === tokenVectorLength - 1) {
          result.push({
            nextTokenType: prod.terminalType,
            nextTokenOccurrence: prod.idx,
            ruleStack: currRuleStack,
            occurrenceStack: currOccurrenceStack
          });
          foundCompletePath = true;
        } else {
          throw Error("non exhaustive match");
        }
      } else if (prod instanceof NonTerminal) {
        const newRuleStack = clone_default3(currRuleStack);
        newRuleStack.push(prod.nonTerminalName);
        const newOccurrenceStack = clone_default3(currOccurrenceStack);
        newOccurrenceStack.push(prod.idx);
        const nextPath = {
          idx: currIdx,
          def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop_default(currDef)),
          ruleStack: newRuleStack,
          occurrenceStack: newOccurrenceStack
        };
        possiblePaths.push(nextPath);
      } else if (prod instanceof Option2) {
        const nextPathWithout = {
          idx: currIdx,
          def: drop_default(currDef),
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPathWithout);
        possiblePaths.push(EXIT_ALTERNATIVE);
        const nextPathWith = {
          idx: currIdx,
          def: prod.definition.concat(drop_default(currDef)),
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPathWith);
      } else if (prod instanceof RepetitionMandatory) {
        const secondIteration = new Repetition({
          definition: prod.definition,
          idx: prod.idx
        });
        const nextDef = prod.definition.concat([secondIteration], drop_default(currDef));
        const nextPath = {
          idx: currIdx,
          def: nextDef,
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPath);
      } else if (prod instanceof RepetitionMandatoryWithSeparator) {
        const separatorGast = new Terminal({
          terminalType: prod.separator
        });
        const secondIteration = new Repetition({
          definition: [separatorGast].concat(prod.definition),
          idx: prod.idx
        });
        const nextDef = prod.definition.concat([secondIteration], drop_default(currDef));
        const nextPath = {
          idx: currIdx,
          def: nextDef,
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPath);
      } else if (prod instanceof RepetitionWithSeparator) {
        const nextPathWithout = {
          idx: currIdx,
          def: drop_default(currDef),
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPathWithout);
        possiblePaths.push(EXIT_ALTERNATIVE);
        const separatorGast = new Terminal({
          terminalType: prod.separator
        });
        const nthRepetition = new Repetition({
          definition: [separatorGast].concat(prod.definition),
          idx: prod.idx
        });
        const nextDef = prod.definition.concat([nthRepetition], drop_default(currDef));
        const nextPathWith = {
          idx: currIdx,
          def: nextDef,
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPathWith);
      } else if (prod instanceof Repetition) {
        const nextPathWithout = {
          idx: currIdx,
          def: drop_default(currDef),
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPathWithout);
        possiblePaths.push(EXIT_ALTERNATIVE);
        const nthRepetition = new Repetition({
          definition: prod.definition,
          idx: prod.idx
        });
        const nextDef = prod.definition.concat([nthRepetition], drop_default(currDef));
        const nextPathWith = {
          idx: currIdx,
          def: nextDef,
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        };
        possiblePaths.push(nextPathWith);
      } else if (prod instanceof Alternation) {
        for (let i2 = prod.definition.length - 1; i2 >= 0; i2--) {
          const currAlt = prod.definition[i2];
          const currAltPath = {
            idx: currIdx,
            def: currAlt.definition.concat(drop_default(currDef)),
            ruleStack: currRuleStack,
            occurrenceStack: currOccurrenceStack
          };
          possiblePaths.push(currAltPath);
          possiblePaths.push(EXIT_ALTERNATIVE);
        }
      } else if (prod instanceof Alternative) {
        possiblePaths.push({
          idx: currIdx,
          def: prod.definition.concat(drop_default(currDef)),
          ruleStack: currRuleStack,
          occurrenceStack: currOccurrenceStack
        });
      } else if (prod instanceof Rule) {
        possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack));
      } else {
        throw Error("non exhaustive match");
      }
    }
    return result;
  }
  function expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {
    const newRuleStack = clone_default3(currRuleStack);
    newRuleStack.push(topRule.name);
    const newCurrOccurrenceStack = clone_default3(currOccurrenceStack);
    newCurrOccurrenceStack.push(1);
    return {
      idx: currIdx,
      def: topRule.definition,
      ruleStack: newRuleStack,
      occurrenceStack: newCurrOccurrenceStack
    };
  }
  function getProdType(prod) {
    if (prod instanceof Option2 || prod === "Option") {
      return PROD_TYPE.OPTION;
    } else if (prod instanceof Repetition || prod === "Repetition") {
      return PROD_TYPE.REPETITION;
    } else if (prod instanceof RepetitionMandatory || prod === "RepetitionMandatory") {
      return PROD_TYPE.REPETITION_MANDATORY;
    } else if (prod instanceof RepetitionMandatoryWithSeparator || prod === "RepetitionMandatoryWithSeparator") {
      return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR;
    } else if (prod instanceof RepetitionWithSeparator || prod === "RepetitionWithSeparator") {
      return PROD_TYPE.REPETITION_WITH_SEPARATOR;
    } else if (prod instanceof Alternation || prod === "Alternation") {
      return PROD_TYPE.ALTERNATION;
    } else {
      throw Error("non exhaustive match");
    }
  }
  function getLookaheadPaths(options2) {
    const { occurrence, rule, prodType, maxLookahead } = options2;
    const type3 = getProdType(prodType);
    if (type3 === PROD_TYPE.ALTERNATION) {
      return getLookaheadPathsForOr(occurrence, rule, maxLookahead);
    } else {
      return getLookaheadPathsForOptionalProd(occurrence, rule, type3, maxLookahead);
    }
  }
  function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) {
    const lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead);
    const tokenMatcher2 = areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher;
    return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher2, dynamicTokensEnabled);
  }
  function buildLookaheadFuncForOptionalProd(occurrence, ruleGrammar, k2, dynamicTokensEnabled, prodType, lookaheadBuilder) {
    const lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k2);
    const tokenMatcher2 = areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher;
    return lookaheadBuilder(lookAheadPaths[0], tokenMatcher2, dynamicTokensEnabled);
  }
  function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher2, dynamicTokensEnabled) {
    const numOfAlts = alts.length;
    const areAllOneTokenLookahead = every_default(alts, (currAlt) => {
      return every_default(currAlt, (currPath) => {
        return currPath.length === 1;
      });
    });
    if (hasPredicates) {
      return function(orAlts) {
        const predicates = map_default2(orAlts, (currAlt) => currAlt.GATE);
        for (let t4 = 0; t4 < numOfAlts; t4++) {
          const currAlt = alts[t4];
          const currNumOfPaths = currAlt.length;
          const currPredicate = predicates[t4];
          if (currPredicate !== void 0 && currPredicate.call(this) === false) {
            continue;
          }
          nextPath: for (let j3 = 0; j3 < currNumOfPaths; j3++) {
            const currPath = currAlt[j3];
            const currPathLength = currPath.length;
            for (let i2 = 0; i2 < currPathLength; i2++) {
              const nextToken = this.LA(i2 + 1);
              if (tokenMatcher2(nextToken, currPath[i2]) === false) {
                continue nextPath;
              }
            }
            return t4;
          }
        }
        return void 0;
      };
    } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {
      const singleTokenAlts = map_default2(alts, (currAlt) => {
        return flatten_default2(currAlt);
      });
      const choiceToAlt = reduce_default2(singleTokenAlts, (result, currAlt, idx) => {
        forEach_default2(currAlt, (currTokType) => {
          if (!has_default2(result, currTokType.tokenTypeIdx)) {
            result[currTokType.tokenTypeIdx] = idx;
          }
          forEach_default2(currTokType.categoryMatches, (currExtendingType) => {
            if (!has_default2(result, currExtendingType)) {
              result[currExtendingType] = idx;
            }
          });
        });
        return result;
      }, {});
      return function() {
        const nextToken = this.LA(1);
        return choiceToAlt[nextToken.tokenTypeIdx];
      };
    } else {
      return function() {
        for (let t4 = 0; t4 < numOfAlts; t4++) {
          const currAlt = alts[t4];
          const currNumOfPaths = currAlt.length;
          nextPath: for (let j3 = 0; j3 < currNumOfPaths; j3++) {
            const currPath = currAlt[j3];
            const currPathLength = currPath.length;
            for (let i2 = 0; i2 < currPathLength; i2++) {
              const nextToken = this.LA(i2 + 1);
              if (tokenMatcher2(nextToken, currPath[i2]) === false) {
                continue nextPath;
              }
            }
            return t4;
          }
        }
        return void 0;
      };
    }
  }
  function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher2, dynamicTokensEnabled) {
    const areAllOneTokenLookahead = every_default(alt, (currPath) => {
      return currPath.length === 1;
    });
    const numOfPaths = alt.length;
    if (areAllOneTokenLookahead && !dynamicTokensEnabled) {
      const singleTokensTypes = flatten_default2(alt);
      if (singleTokensTypes.length === 1 && isEmpty_default2(singleTokensTypes[0].categoryMatches)) {
        const expectedTokenType = singleTokensTypes[0];
        const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx;
        return function() {
          return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey;
        };
      } else {
        const choiceToAlt = reduce_default2(singleTokensTypes, (result, currTokType, idx) => {
          result[currTokType.tokenTypeIdx] = true;
          forEach_default2(currTokType.categoryMatches, (currExtendingType) => {
            result[currExtendingType] = true;
          });
          return result;
        }, []);
        return function() {
          const nextToken = this.LA(1);
          return choiceToAlt[nextToken.tokenTypeIdx] === true;
        };
      }
    } else {
      return function() {
        nextPath: for (let j3 = 0; j3 < numOfPaths; j3++) {
          const currPath = alt[j3];
          const currPathLength = currPath.length;
          for (let i2 = 0; i2 < currPathLength; i2++) {
            const nextToken = this.LA(i2 + 1);
            if (tokenMatcher2(nextToken, currPath[i2]) === false) {
              continue nextPath;
            }
          }
          return true;
        }
        return false;
      };
    }
  }
  function initializeArrayOfArrays(size4) {
    const result = new Array(size4);
    for (let i2 = 0; i2 < size4; i2++) {
      result[i2] = [];
    }
    return result;
  }
  function pathToHashKeys(path4) {
    let keys3 = [""];
    for (let i2 = 0; i2 < path4.length; i2++) {
      const tokType = path4[i2];
      const longerKeys = [];
      for (let j3 = 0; j3 < keys3.length; j3++) {
        const currShorterKey = keys3[j3];
        longerKeys.push(currShorterKey + "_" + tokType.tokenTypeIdx);
        for (let t4 = 0; t4 < tokType.categoryMatches.length; t4++) {
          const categoriesKeySuffix = "_" + tokType.categoryMatches[t4];
          longerKeys.push(currShorterKey + categoriesKeySuffix);
        }
      }
      keys3 = longerKeys;
    }
    return keys3;
  }
  function isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {
    for (let currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {
      if (currAltIdx === idx) {
        continue;
      }
      const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx];
      for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {
        const searchKey = searchPathKeys[searchIdx];
        if (otherAltKnownPathsKeys[searchKey] === true) {
          return false;
        }
      }
    }
    return true;
  }
  function lookAheadSequenceFromAlternatives(altsDefs, k2) {
    const partialAlts = map_default2(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1));
    const finalResult = initializeArrayOfArrays(partialAlts.length);
    const altsHashes = map_default2(partialAlts, (currAltPaths) => {
      const dict = {};
      forEach_default2(currAltPaths, (item) => {
        const keys3 = pathToHashKeys(item.partialPath);
        forEach_default2(keys3, (currKey) => {
          dict[currKey] = true;
        });
      });
      return dict;
    });
    let newData = partialAlts;
    for (let pathLength = 1; pathLength <= k2; pathLength++) {
      const currDataset = newData;
      newData = initializeArrayOfArrays(currDataset.length);
      for (let altIdx = 0; altIdx < currDataset.length; altIdx++) {
        const currAltPathsAndSuffixes = currDataset[altIdx];
        for (let currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {
          const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath;
          const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef;
          const prefixKeys = pathToHashKeys(currPathPrefix);
          const isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx);
          if (isUnique || isEmpty_default2(suffixDef) || currPathPrefix.length === k2) {
            const currAltResult = finalResult[altIdx];
            if (containsPath(currAltResult, currPathPrefix) === false) {
              currAltResult.push(currPathPrefix);
              for (let j3 = 0; j3 < prefixKeys.length; j3++) {
                const currKey = prefixKeys[j3];
                altsHashes[altIdx][currKey] = true;
              }
            }
          } else {
            const newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix);
            newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes);
            forEach_default2(newPartialPathsAndSuffixes, (item) => {
              const prefixKeys2 = pathToHashKeys(item.partialPath);
              forEach_default2(prefixKeys2, (key) => {
                altsHashes[altIdx][key] = true;
              });
            });
          }
        }
      }
    }
    return finalResult;
  }
  function getLookaheadPathsForOr(occurrence, ruleGrammar, k2, orProd) {
    const visitor2 = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd);
    ruleGrammar.accept(visitor2);
    return lookAheadSequenceFromAlternatives(visitor2.result, k2);
  }
  function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k2) {
    const insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType);
    ruleGrammar.accept(insideDefVisitor);
    const insideDef = insideDefVisitor.result;
    const afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType);
    const afterDef = afterDefWalker.startWalking();
    const insideFlat = new Alternative({ definition: insideDef });
    const afterFlat = new Alternative({ definition: afterDef });
    return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k2);
  }
  function containsPath(alternative, searchPath) {
    compareOtherPath: for (let i2 = 0; i2 < alternative.length; i2++) {
      const otherPath = alternative[i2];
      if (otherPath.length !== searchPath.length) {
        continue;
      }
      for (let j3 = 0; j3 < otherPath.length; j3++) {
        const searchTok = searchPath[j3];
        const otherTok = otherPath[j3];
        const matchingTokens = searchTok === otherTok || otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== void 0;
        if (matchingTokens === false) {
          continue compareOtherPath;
        }
      }
      return true;
    }
    return false;
  }
  function isStrictPrefixOfPath(prefix, other) {
    return prefix.length < other.length && every_default(prefix, (tokType, idx) => {
      const otherTokType = other[idx];
      return tokType === otherTokType || otherTokType.categoryMatchesMap[tokType.tokenTypeIdx];
    });
  }
  function areTokenCategoriesNotUsed(lookAheadPaths) {
    return every_default(lookAheadPaths, (singleAltPaths) => every_default(singleAltPaths, (singlePath) => every_default(singlePath, (token2) => isEmpty_default2(token2.categoryMatches))));
  }
  function validateLookahead(options2) {
    const lookaheadValidationErrorMessages = options2.lookaheadStrategy.validate({
      rules: options2.rules,
      tokenTypes: options2.tokenTypes,
      grammarName: options2.grammarName
    });
    return map_default2(lookaheadValidationErrorMessages, (errorMessage) => Object.assign({ type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage));
  }
  function validateGrammar(topLevels, tokenTypes, errMsgProvider, grammarName) {
    const duplicateErrors = flatMap_default(topLevels, (currTopLevel) => validateDuplicateProductions(currTopLevel, errMsgProvider));
    const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider);
    const tooManyAltsErrors = flatMap_default(topLevels, (curRule) => validateTooManyAlts(curRule, errMsgProvider));
    const duplicateRulesError = flatMap_default(topLevels, (curRule) => validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider));
    return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError);
  }
  function validateDuplicateProductions(topLevelRule, errMsgProvider) {
    const collectorVisitor2 = new OccurrenceValidationCollector();
    topLevelRule.accept(collectorVisitor2);
    const allRuleProductions = collectorVisitor2.allProductions;
    const productionGroups = groupBy_default(allRuleProductions, identifyProductionForDuplicates);
    const duplicates = pickBy_default(productionGroups, (currGroup) => {
      return currGroup.length > 1;
    });
    const errors = map_default2(values_default2(duplicates), (currDuplicates) => {
      const firstProd = head_default(currDuplicates);
      const msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates);
      const dslName = getProductionDslName(firstProd);
      const defError = {
        message: msg,
        type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,
        ruleName: topLevelRule.name,
        dslName,
        occurrence: firstProd.idx
      };
      const param = getExtraProductionArgument(firstProd);
      if (param) {
        defError.parameter = param;
      }
      return defError;
    });
    return errors;
  }
  function identifyProductionForDuplicates(prod) {
    return `${getProductionDslName(prod)}_#_${prod.idx}_#_${getExtraProductionArgument(prod)}`;
  }
  function getExtraProductionArgument(prod) {
    if (prod instanceof Terminal) {
      return prod.terminalType.name;
    } else if (prod instanceof NonTerminal) {
      return prod.nonTerminalName;
    } else {
      return "";
    }
  }
  function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {
    const errors = [];
    const occurrences = reduce_default2(allRules, (result, curRule) => {
      if (curRule.name === rule.name) {
        return result + 1;
      }
      return result;
    }, 0);
    if (occurrences > 1) {
      const errMsg = errMsgProvider.buildDuplicateRuleNameError({
        topLevelRule: rule,
        grammarName: className
      });
      errors.push({
        message: errMsg,
        type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,
        ruleName: rule.name
      });
    }
    return errors;
  }
  function validateRuleIsOverridden(ruleName, definedRulesNames, className) {
    const errors = [];
    let errMsg;
    if (!includes_default(definedRulesNames, ruleName)) {
      errMsg = `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-as it is not defined in any of the super grammars `;
      errors.push({
        message: errMsg,
        type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,
        ruleName
      });
    }
    return errors;
  }
  function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path4 = []) {
    const errors = [];
    const nextNonTerminals = getFirstNoneTerminal(currRule.definition);
    if (isEmpty_default2(nextNonTerminals)) {
      return [];
    } else {
      const ruleName = topRule.name;
      const foundLeftRecursion = includes_default(nextNonTerminals, topRule);
      if (foundLeftRecursion) {
        errors.push({
          message: errMsgProvider.buildLeftRecursionError({
            topLevelRule: topRule,
            leftRecursionPath: path4
          }),
          type: ParserDefinitionErrorType.LEFT_RECURSION,
          ruleName
        });
      }
      const validNextSteps = difference_default(nextNonTerminals, path4.concat([topRule]));
      const errorsFromNextSteps = flatMap_default(validNextSteps, (currRefRule) => {
        const newPath = clone_default3(path4);
        newPath.push(currRefRule);
        return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath);
      });
      return errors.concat(errorsFromNextSteps);
    }
  }
  function getFirstNoneTerminal(definition) {
    let result = [];
    if (isEmpty_default2(definition)) {
      return result;
    }
    const firstProd = head_default(definition);
    if (firstProd instanceof NonTerminal) {
      result.push(firstProd.referencedRule);
    } else if (firstProd instanceof Alternative || firstProd instanceof Option2 || firstProd instanceof RepetitionMandatory || firstProd instanceof RepetitionMandatoryWithSeparator || firstProd instanceof RepetitionWithSeparator || firstProd instanceof Repetition) {
      result = result.concat(getFirstNoneTerminal(firstProd.definition));
    } else if (firstProd instanceof Alternation) {
      result = flatten_default2(map_default2(firstProd.definition, (currSubDef) => getFirstNoneTerminal(currSubDef.definition)));
    } else if (firstProd instanceof Terminal) {
    } else {
      throw Error("non exhaustive match");
    }
    const isFirstOptional = isOptionalProd(firstProd);
    const hasMore = definition.length > 1;
    if (isFirstOptional && hasMore) {
      const rest = drop_default(definition);
      return result.concat(getFirstNoneTerminal(rest));
    } else {
      return result;
    }
  }
  function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {
    const orCollector = new OrCollector();
    topLevelRule.accept(orCollector);
    const ors = orCollector.alternations;
    const errors = flatMap_default(ors, (currOr) => {
      const exceptLast = dropRight_default(currOr.definition);
      return flatMap_default(exceptLast, (currAlternative, currAltIdx) => {
        const possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], tokenStructuredMatcher, 1);
        if (isEmpty_default2(possibleFirstInAlt)) {
          return [
            {
              message: errMsgProvider.buildEmptyAlternationError({
                topLevelRule,
                alternation: currOr,
                emptyChoiceIdx: currAltIdx
              }),
              type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,
              ruleName: topLevelRule.name,
              occurrence: currOr.idx,
              alternative: currAltIdx + 1
            }
          ];
        } else {
          return [];
        }
      });
    });
    return errors;
  }
  function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) {
    const orCollector = new OrCollector();
    topLevelRule.accept(orCollector);
    let ors = orCollector.alternations;
    ors = reject_default(ors, (currOr) => currOr.ignoreAmbiguities === true);
    const errors = flatMap_default(ors, (currOr) => {
      const currOccurrence = currOr.idx;
      const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead;
      const alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr);
      const altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);
      const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);
      return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors);
    });
    return errors;
  }
  function validateTooManyAlts(topLevelRule, errMsgProvider) {
    const orCollector = new OrCollector();
    topLevelRule.accept(orCollector);
    const ors = orCollector.alternations;
    const errors = flatMap_default(ors, (currOr) => {
      if (currOr.definition.length > 255) {
        return [
          {
            message: errMsgProvider.buildTooManyAlternativesError({
              topLevelRule,
              alternation: currOr
            }),
            type: ParserDefinitionErrorType.TOO_MANY_ALTS,
            ruleName: topLevelRule.name,
            occurrence: currOr.idx
          }
        ];
      } else {
        return [];
      }
    });
    return errors;
  }
  function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {
    const errors = [];
    forEach_default2(topLevelRules, (currTopRule) => {
      const collectorVisitor2 = new RepetitionCollector();
      currTopRule.accept(collectorVisitor2);
      const allRuleProductions = collectorVisitor2.allProductions;
      forEach_default2(allRuleProductions, (currProd) => {
        const prodType = getProdType(currProd);
        const actualMaxLookahead = currProd.maxLookahead || maxLookahead;
        const currOccurrence = currProd.idx;
        const paths = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead);
        const pathsInsideProduction = paths[0];
        if (isEmpty_default2(flatten_default2(pathsInsideProduction))) {
          const errMsg = errMsgProvider.buildEmptyRepetitionError({
            topLevelRule: currTopRule,
            repetition: currProd
          });
          errors.push({
            message: errMsg,
            type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,
            ruleName: currTopRule.name
          });
        }
      });
    });
    return errors;
  }
  function checkAlternativesAmbiguities(alternatives, alternation2, rule, errMsgProvider) {
    const foundAmbiguousPaths = [];
    const identicalAmbiguities = reduce_default2(alternatives, (result, currAlt, currAltIdx) => {
      if (alternation2.definition[currAltIdx].ignoreAmbiguities === true) {
        return result;
      }
      forEach_default2(currAlt, (currPath) => {
        const altsCurrPathAppearsIn = [currAltIdx];
        forEach_default2(alternatives, (currOtherAlt, currOtherAltIdx) => {
          if (currAltIdx !== currOtherAltIdx && containsPath(currOtherAlt, currPath) && // ignore (skip) ambiguities with this "other" alternative
          alternation2.definition[currOtherAltIdx].ignoreAmbiguities !== true) {
            altsCurrPathAppearsIn.push(currOtherAltIdx);
          }
        });
        if (altsCurrPathAppearsIn.length > 1 && !containsPath(foundAmbiguousPaths, currPath)) {
          foundAmbiguousPaths.push(currPath);
          result.push({
            alts: altsCurrPathAppearsIn,
            path: currPath
          });
        }
      });
      return result;
    }, []);
    const currErrors = map_default2(identicalAmbiguities, (currAmbDescriptor) => {
      const ambgIndices = map_default2(currAmbDescriptor.alts, (currAltIdx) => currAltIdx + 1);
      const currMessage = errMsgProvider.buildAlternationAmbiguityError({
        topLevelRule: rule,
        alternation: alternation2,
        ambiguityIndices: ambgIndices,
        prefixPath: currAmbDescriptor.path
      });
      return {
        message: currMessage,
        type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,
        ruleName: rule.name,
        occurrence: alternation2.idx,
        alternatives: currAmbDescriptor.alts
      };
    });
    return currErrors;
  }
  function checkPrefixAlternativesAmbiguities(alternatives, alternation2, rule, errMsgProvider) {
    const pathsAndIndices = reduce_default2(alternatives, (result, currAlt, idx) => {
      const currPathsAndIdx = map_default2(currAlt, (currPath) => {
        return { idx, path: currPath };
      });
      return result.concat(currPathsAndIdx);
    }, []);
    const errors = compact_default(flatMap_default(pathsAndIndices, (currPathAndIdx) => {
      const alternativeGast = alternation2.definition[currPathAndIdx.idx];
      if (alternativeGast.ignoreAmbiguities === true) {
        return [];
      }
      const targetIdx = currPathAndIdx.idx;
      const targetPath = currPathAndIdx.path;
      const prefixAmbiguitiesPathsAndIndices = filter_default4(pathsAndIndices, (searchPathAndIdx) => {
        return (
          // ignore (skip) ambiguities with this "other" alternative
          alternation2.definition[searchPathAndIdx.idx].ignoreAmbiguities !== true && searchPathAndIdx.idx < targetIdx && // checking for strict prefix because identical lookaheads
          // will be be detected using a different validation.
          isStrictPrefixOfPath(searchPathAndIdx.path, targetPath)
        );
      });
      const currPathPrefixErrors = map_default2(prefixAmbiguitiesPathsAndIndices, (currAmbPathAndIdx) => {
        const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1];
        const occurrence = alternation2.idx === 0 ? "" : alternation2.idx;
        const message = errMsgProvider.buildAlternationPrefixAmbiguityError({
          topLevelRule: rule,
          alternation: alternation2,
          ambiguityIndices: ambgIndices,
          prefixPath: currAmbPathAndIdx.path
        });
        return {
          message,
          type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,
          ruleName: rule.name,
          occurrence,
          alternatives: ambgIndices
        };
      });
      return currPathPrefixErrors;
    }));
    return errors;
  }
  function checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {
    const errors = [];
    const tokenNames = map_default2(tokenTypes, (currToken) => currToken.name);
    forEach_default2(topLevels, (currRule) => {
      const currRuleName = currRule.name;
      if (includes_default(tokenNames, currRuleName)) {
        const errMsg = errMsgProvider.buildNamespaceConflictError(currRule);
        errors.push({
          message: errMsg,
          type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,
          ruleName: currRuleName
        });
      }
    });
    return errors;
  }
  function resolveGrammar2(options2) {
    const actualOptions = defaults_default2(options2, {
      errMsgProvider: defaultGrammarResolverErrorProvider
    });
    const topRulesTable = {};
    forEach_default2(options2.rules, (rule) => {
      topRulesTable[rule.name] = rule;
    });
    return resolveGrammar(topRulesTable, actualOptions.errMsgProvider);
  }
  function validateGrammar2(options2) {
    options2 = defaults_default2(options2, {
      errMsgProvider: defaultGrammarValidatorErrorProvider
    });
    return validateGrammar(options2.rules, options2.tokenTypes, options2.errMsgProvider, options2.grammarName);
  }
  function isRecognitionException(error3) {
    return includes_default(RECOGNITION_EXCEPTION_NAMES, error3.name);
  }
  function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {
    const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence);
    let firstAfterRepInfo = this.firstAfterRepMap[key];
    if (firstAfterRepInfo === void 0) {
      const currRuleName = this.getCurrRuleFullName();
      const ruleGrammar = this.getGAstProductions()[currRuleName];
      const walker = new nextToksWalker(ruleGrammar, prodOccurrence);
      firstAfterRepInfo = walker.startWalking();
      this.firstAfterRepMap[key] = firstAfterRepInfo;
    }
    let expectTokAfterLastMatch = firstAfterRepInfo.token;
    let nextTokIdx = firstAfterRepInfo.occurrence;
    const isEndOfRule = firstAfterRepInfo.isEndOfRule;
    if (this.RULE_STACK.length === 1 && isEndOfRule && expectTokAfterLastMatch === void 0) {
      expectTokAfterLastMatch = EOF;
      nextTokIdx = 1;
    }
    if (expectTokAfterLastMatch === void 0 || nextTokIdx === void 0) {
      return;
    }
    if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {
      this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch);
    }
  }
  function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {
    return occurrence | dslMethodIdx | ruleIdx;
  }
  function collectMethods(rule) {
    collectorVisitor.reset();
    rule.accept(collectorVisitor);
    const dslMethods = collectorVisitor.dslMethods;
    collectorVisitor.reset();
    return dslMethods;
  }
  function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) {
    if (isNaN(currNodeLocation.startOffset) === true) {
      currNodeLocation.startOffset = newLocationInfo.startOffset;
      currNodeLocation.endOffset = newLocationInfo.endOffset;
    } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {
      currNodeLocation.endOffset = newLocationInfo.endOffset;
    }
  }
  function setNodeLocationFull(currNodeLocation, newLocationInfo) {
    if (isNaN(currNodeLocation.startOffset) === true) {
      currNodeLocation.startOffset = newLocationInfo.startOffset;
      currNodeLocation.startColumn = newLocationInfo.startColumn;
      currNodeLocation.startLine = newLocationInfo.startLine;
      currNodeLocation.endOffset = newLocationInfo.endOffset;
      currNodeLocation.endColumn = newLocationInfo.endColumn;
      currNodeLocation.endLine = newLocationInfo.endLine;
    } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {
      currNodeLocation.endOffset = newLocationInfo.endOffset;
      currNodeLocation.endColumn = newLocationInfo.endColumn;
      currNodeLocation.endLine = newLocationInfo.endLine;
    }
  }
  function addTerminalToCst(node2, token2, tokenTypeName) {
    if (node2.children[tokenTypeName] === void 0) {
      node2.children[tokenTypeName] = [token2];
    } else {
      node2.children[tokenTypeName].push(token2);
    }
  }
  function addNoneTerminalToCst(node2, ruleName, ruleResult) {
    if (node2.children[ruleName] === void 0) {
      node2.children[ruleName] = [ruleResult];
    } else {
      node2.children[ruleName].push(ruleResult);
    }
  }
  function defineNameProp(obj, nameValue) {
    Object.defineProperty(obj, NAME, {
      enumerable: false,
      configurable: true,
      writable: false,
      value: nameValue
    });
  }
  function defaultVisit(ctx, param) {
    const childrenNames = keys_default2(ctx);
    const childrenNamesLength = childrenNames.length;
    for (let i2 = 0; i2 < childrenNamesLength; i2++) {
      const currChildName = childrenNames[i2];
      const currChildArray = ctx[currChildName];
      const currChildArrayLength = currChildArray.length;
      for (let j3 = 0; j3 < currChildArrayLength; j3++) {
        const currChild = currChildArray[j3];
        if (currChild.tokenTypeIdx === void 0) {
          this[currChild.name](currChild.children, param);
        }
      }
    }
  }
  function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {
    const derivedConstructor = /* @__PURE__ */ __name2(function() {
    }, "derivedConstructor");
    defineNameProp(derivedConstructor, grammarName + "BaseSemantics");
    const semanticProto = {
      visit: /* @__PURE__ */ __name2(function(cstNode, param) {
        if (isArray_default2(cstNode)) {
          cstNode = cstNode[0];
        }
        if (isUndefined_default2(cstNode)) {
          return void 0;
        }
        return this[cstNode.name](cstNode.children, param);
      }, "visit"),
      validateVisitor: /* @__PURE__ */ __name2(function() {
        const semanticDefinitionErrors = validateVisitor(this, ruleNames);
        if (!isEmpty_default2(semanticDefinitionErrors)) {
          const errorMessages = map_default2(semanticDefinitionErrors, (currDefError) => currDefError.msg);
          throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>:
	${errorMessages.join("\n\n").replace(/\n/g, "\n	")}`);
        }
      }, "validateVisitor")
    };
    derivedConstructor.prototype = semanticProto;
    derivedConstructor.prototype.constructor = derivedConstructor;
    derivedConstructor._RULE_NAMES = ruleNames;
    return derivedConstructor;
  }
  function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {
    const derivedConstructor = /* @__PURE__ */ __name2(function() {
    }, "derivedConstructor");
    defineNameProp(derivedConstructor, grammarName + "BaseSemanticsWithDefaults");
    const withDefaultsProto = Object.create(baseConstructor.prototype);
    forEach_default2(ruleNames, (ruleName) => {
      withDefaultsProto[ruleName] = defaultVisit;
    });
    derivedConstructor.prototype = withDefaultsProto;
    derivedConstructor.prototype.constructor = derivedConstructor;
    return derivedConstructor;
  }
  function validateVisitor(visitorInstance, ruleNames) {
    const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames);
    return missingErrors;
  }
  function validateMissingCstMethods(visitorInstance, ruleNames) {
    const missingRuleNames = filter_default4(ruleNames, (currRuleName) => {
      return isFunction_default2(visitorInstance[currRuleName]) === false;
    });
    const errors = map_default2(missingRuleNames, (currRuleName) => {
      return {
        msg: `Missing visitor method: <${currRuleName}> on ${visitorInstance.constructor.name} CST Visitor.`,
        type: CstVisitorDefinitionError.MISSING_METHOD,
        methodName: currRuleName
      };
    });
    return compact_default(errors);
  }
  function recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) {
    assertMethodIdxIsValid(occurrence);
    const prevProd = last_default2(this.recordingProdStack);
    const grammarAction = isFunction_default2(mainProdArg) ? mainProdArg : mainProdArg.DEF;
    const newProd = new prodConstructor({ definition: [], idx: occurrence });
    if (handleSep) {
      newProd.separator = mainProdArg.SEP;
    }
    if (has_default2(mainProdArg, "MAX_LOOKAHEAD")) {
      newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;
    }
    this.recordingProdStack.push(newProd);
    grammarAction.call(this);
    prevProd.definition.push(newProd);
    this.recordingProdStack.pop();
    return RECORDING_NULL_OBJECT;
  }
  function recordOrProd(mainProdArg, occurrence) {
    assertMethodIdxIsValid(occurrence);
    const prevProd = last_default2(this.recordingProdStack);
    const hasOptions = isArray_default2(mainProdArg) === false;
    const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF;
    const newOrProd = new Alternation({
      definition: [],
      idx: occurrence,
      ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true
    });
    if (has_default2(mainProdArg, "MAX_LOOKAHEAD")) {
      newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;
    }
    const hasPredicates = some_default(alts, (currAlt) => isFunction_default2(currAlt.GATE));
    newOrProd.hasPredicates = hasPredicates;
    prevProd.definition.push(newOrProd);
    forEach_default2(alts, (currAlt) => {
      const currAltFlat = new Alternative({ definition: [] });
      newOrProd.definition.push(currAltFlat);
      if (has_default2(currAlt, "IGNORE_AMBIGUITIES")) {
        currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES;
      } else if (has_default2(currAlt, "GATE")) {
        currAltFlat.ignoreAmbiguities = true;
      }
      this.recordingProdStack.push(currAltFlat);
      currAlt.ALT.call(this);
      this.recordingProdStack.pop();
    });
    return RECORDING_NULL_OBJECT;
  }
  function getIdxSuffix(idx) {
    return idx === 0 ? "" : `${idx}`;
  }
  function assertMethodIdxIsValid(idx) {
    if (idx < 0 || idx > MAX_METHOD_IDX) {
      const error3 = new Error(
        // The stack trace will contain all the needed details
        `Invalid DSL Method idx value: <${idx}>
	Idx value must be a none negative value smaller than ${MAX_METHOD_IDX + 1}`
      );
      error3.KNOWN_RECORDER_ERROR = true;
      throw error3;
    }
  }
  function applyMixins(derivedCtor, baseCtors) {
    baseCtors.forEach((baseCtor) => {
      const baseProto = baseCtor.prototype;
      Object.getOwnPropertyNames(baseProto).forEach((propName) => {
        if (propName === "constructor") {
          return;
        }
        const basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName);
        if (basePropDescriptor && (basePropDescriptor.get || basePropDescriptor.set)) {
          Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor);
        } else {
          derivedCtor.prototype[propName] = baseCtor.prototype[propName];
        }
      });
    });
  }
  function EMPTY_ALT(value2 = void 0) {
    return function() {
      return value2;
    };
  }
  function arrayMap22(array4, iteratee) {
    var index = -1, length2 = array4 == null ? 0 : array4.length, result = Array(length2);
    while (++index < length2) {
      result[index] = iteratee(array4[index], index, array4);
    }
    return result;
  }
  function listCacheClear22() {
    this.__data__ = [];
    this.size = 0;
  }
  function eq22(value2, other) {
    return value2 === other || value2 !== value2 && other !== other;
  }
  function assocIndexOf22(array4, key) {
    var length2 = array4.length;
    while (length2--) {
      if (eq_default22(array4[length2][0], key)) {
        return length2;
      }
    }
    return -1;
  }
  function listCacheDelete22(key) {
    var data6 = this.__data__, index = assocIndexOf_default22(data6, key);
    if (index < 0) {
      return false;
    }
    var lastIndex = data6.length - 1;
    if (index == lastIndex) {
      data6.pop();
    } else {
      splice22.call(data6, index, 1);
    }
    --this.size;
    return true;
  }
  function listCacheGet22(key) {
    var data6 = this.__data__, index = assocIndexOf_default22(data6, key);
    return index < 0 ? void 0 : data6[index][1];
  }
  function listCacheHas22(key) {
    return assocIndexOf_default22(this.__data__, key) > -1;
  }
  function listCacheSet22(key, value2) {
    var data6 = this.__data__, index = assocIndexOf_default22(data6, key);
    if (index < 0) {
      ++this.size;
      data6.push([key, value2]);
    } else {
      data6[index][1] = value2;
    }
    return this;
  }
  function ListCache22(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  function stackClear22() {
    this.__data__ = new ListCache_default22();
    this.size = 0;
  }
  function stackDelete22(key) {
    var data6 = this.__data__, result = data6["delete"](key);
    this.size = data6.size;
    return result;
  }
  function stackGet22(key) {
    return this.__data__.get(key);
  }
  function stackHas22(key) {
    return this.__data__.has(key);
  }
  function getRawTag22(value2) {
    var isOwn = hasOwnProperty18.call(value2, symToStringTag32), tag = value2[symToStringTag32];
    try {
      value2[symToStringTag32] = void 0;
      var unmasked = true;
    } catch (e3) {
    }
    var result = nativeObjectToString32.call(value2);
    if (unmasked) {
      if (isOwn) {
        value2[symToStringTag32] = tag;
      } else {
        delete value2[symToStringTag32];
      }
    }
    return result;
  }
  function objectToString22(value2) {
    return nativeObjectToString4.call(value2);
  }
  function baseGetTag22(value2) {
    if (value2 == null) {
      return value2 === void 0 ? undefinedTag22 : nullTag22;
    }
    return symToStringTag4 && symToStringTag4 in Object(value2) ? getRawTag_default22(value2) : objectToString_default22(value2);
  }
  function isObject22(value2) {
    var type3 = typeof value2;
    return value2 != null && (type3 == "object" || type3 == "function");
  }
  function isFunction22(value2) {
    if (!isObject_default22(value2)) {
      return false;
    }
    var tag = baseGetTag_default22(value2);
    return tag == funcTag42 || tag == genTag32 || tag == asyncTag22 || tag == proxyTag22;
  }
  function isMasked22(func) {
    return !!maskSrcKey22 && maskSrcKey22 in func;
  }
  function toSource22(func) {
    if (func != null) {
      try {
        return funcToString32.call(func);
      } catch (e3) {
      }
      try {
        return func + "";
      } catch (e3) {
      }
    }
    return "";
  }
  function baseIsNative22(value2) {
    if (!isObject_default22(value2) || isMasked_default22(value2)) {
      return false;
    }
    var pattern = isFunction_default22(value2) ? reIsNative22 : reIsHostCtor22;
    return pattern.test(toSource_default22(value2));
  }
  function getValue22(object3, key) {
    return object3 == null ? void 0 : object3[key];
  }
  function getNative22(object3, key) {
    var value2 = getValue_default22(object3, key);
    return baseIsNative_default22(value2) ? value2 : void 0;
  }
  function hashClear22() {
    this.__data__ = nativeCreate_default22 ? nativeCreate_default22(null) : {};
    this.size = 0;
  }
  function hashDelete22(key) {
    var result = this.has(key) && delete this.__data__[key];
    this.size -= result ? 1 : 0;
    return result;
  }
  function hashGet22(key) {
    var data6 = this.__data__;
    if (nativeCreate_default22) {
      var result = data6[key];
      return result === HASH_UNDEFINED42 ? void 0 : result;
    }
    return hasOwnProperty20.call(data6, key) ? data6[key] : void 0;
  }
  function hashHas22(key) {
    var data6 = this.__data__;
    return nativeCreate_default22 ? data6[key] !== void 0 : hasOwnProperty21.call(data6, key);
  }
  function hashSet22(key, value2) {
    var data6 = this.__data__;
    this.size += this.has(key) ? 0 : 1;
    data6[key] = nativeCreate_default22 && value2 === void 0 ? HASH_UNDEFINED5 : value2;
    return this;
  }
  function Hash22(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  function mapCacheClear22() {
    this.size = 0;
    this.__data__ = {
      "hash": new Hash_default22(),
      "map": new (Map_default22 || ListCache_default22)(),
      "string": new Hash_default22()
    };
  }
  function isKeyable22(value2) {
    var type3 = typeof value2;
    return type3 == "string" || type3 == "number" || type3 == "symbol" || type3 == "boolean" ? value2 !== "__proto__" : value2 === null;
  }
  function getMapData22(map32, key) {
    var data6 = map32.__data__;
    return isKeyable_default22(key) ? data6[typeof key == "string" ? "string" : "hash"] : data6.map;
  }
  function mapCacheDelete22(key) {
    var result = getMapData_default22(this, key)["delete"](key);
    this.size -= result ? 1 : 0;
    return result;
  }
  function mapCacheGet22(key) {
    return getMapData_default22(this, key).get(key);
  }
  function mapCacheHas22(key) {
    return getMapData_default22(this, key).has(key);
  }
  function mapCacheSet22(key, value2) {
    var data6 = getMapData_default22(this, key), size4 = data6.size;
    data6.set(key, value2);
    this.size += data6.size == size4 ? 0 : 1;
    return this;
  }
  function MapCache22(entries2) {
    var index = -1, length2 = entries2 == null ? 0 : entries2.length;
    this.clear();
    while (++index < length2) {
      var entry = entries2[index];
      this.set(entry[0], entry[1]);
    }
  }
  function stackSet22(key, value2) {
    var data6 = this.__data__;
    if (data6 instanceof ListCache_default22) {
      var pairs2 = data6.__data__;
      if (!Map_default22 || pairs2.length < LARGE_ARRAY_SIZE4 - 1) {
        pairs2.push([key, value2]);
        this.size = ++data6.size;
        return this;
      }
      data6 = this.__data__ = new MapCache_default22(pairs2);
    }
    data6.set(key, value2);
    this.size = data6.size;
    return this;
  }
  function Stack22(entries2) {
    var data6 = this.__data__ = new ListCache_default22(entries2);
    this.size = data6.size;
  }
  function setCacheAdd22(value2) {
    this.__data__.set(value2, HASH_UNDEFINED6);
    return this;
  }
  function setCacheHas22(value2) {
    return this.__data__.has(value2);
  }
  function SetCache22(values22) {
    var index = -1, length2 = values22 == null ? 0 : values22.length;
    this.__data__ = new MapCache_default22();
    while (++index < length2) {
      this.add(values22[index]);
    }
  }
  function arraySome22(array4, predicate) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (predicate(array4[index], index, array4)) {
        return true;
      }
    }
    return false;
  }
  function cacheHas22(cache3, key) {
    return cache3.has(key);
  }
  function equalArrays22(array4, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG72, arrLength = array4.length, othLength = other.length;
    if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
      return false;
    }
    var arrStacked = stack.get(array4);
    var othStacked = stack.get(other);
    if (arrStacked && othStacked) {
      return arrStacked == other && othStacked == array4;
    }
    var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG52 ? new SetCache_default22() : void 0;
    stack.set(array4, other);
    stack.set(other, array4);
    while (++index < arrLength) {
      var arrValue = array4[index], othValue = other[index];
      if (customizer) {
        var compared = isPartial ? customizer(othValue, arrValue, index, other, array4, stack) : customizer(arrValue, othValue, index, array4, other, stack);
      }
      if (compared !== void 0) {
        if (compared) {
          continue;
        }
        result = false;
        break;
      }
      if (seen) {
        if (!arraySome_default22(other, function(othValue2, othIndex) {
          if (!cacheHas_default22(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
            return seen.push(othIndex);
          }
        })) {
          result = false;
          break;
        }
      } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
        result = false;
        break;
      }
    }
    stack["delete"](array4);
    stack["delete"](other);
    return result;
  }
  function mapToArray22(map32) {
    var index = -1, result = Array(map32.size);
    map32.forEach(function(value2, key) {
      result[++index] = [key, value2];
    });
    return result;
  }
  function setToArray22(set5) {
    var index = -1, result = Array(set5.size);
    set5.forEach(function(value2) {
      result[++index] = value2;
    });
    return result;
  }
  function equalByTag22(object3, other, tag, bitmask, customizer, equalFunc, stack) {
    switch (tag) {
      case dataViewTag62:
        if (object3.byteLength != other.byteLength || object3.byteOffset != other.byteOffset) {
          return false;
        }
        object3 = object3.buffer;
        other = other.buffer;
      case arrayBufferTag52:
        if (object3.byteLength != other.byteLength || !equalFunc(new Uint8Array_default22(object3), new Uint8Array_default22(other))) {
          return false;
        }
        return true;
      case boolTag52:
      case dateTag52:
      case numberTag52:
        return eq_default22(+object3, +other);
      case errorTag42:
        return object3.name == other.name && object3.message == other.message;
      case regexpTag62:
      case stringTag62:
        return object3 == other + "";
      case mapTag82:
        var convert = mapToArray_default22;
      case setTag82:
        var isPartial = bitmask & COMPARE_PARTIAL_FLAG8;
        convert || (convert = setToArray_default22);
        if (object3.size != other.size && !isPartial) {
          return false;
        }
        var stacked = stack.get(object3);
        if (stacked) {
          return stacked == other;
        }
        bitmask |= COMPARE_UNORDERED_FLAG6;
        stack.set(object3, other);
        var result = equalArrays_default22(convert(object3), convert(other), bitmask, customizer, equalFunc, stack);
        stack["delete"](object3);
        return result;
      case symbolTag52:
        if (symbolValueOf32) {
          return symbolValueOf32.call(object3) == symbolValueOf32.call(other);
        }
    }
    return false;
  }
  function arrayPush22(array4, values22) {
    var index = -1, length2 = values22.length, offset = array4.length;
    while (++index < length2) {
      array4[offset + index] = values22[index];
    }
    return array4;
  }
  function baseGetAllKeys22(object3, keysFunc, symbolsFunc) {
    var result = keysFunc(object3);
    return isArray_default22(object3) ? result : arrayPush_default22(result, symbolsFunc(object3));
  }
  function arrayFilter22(array4, predicate) {
    var index = -1, length2 = array4 == null ? 0 : array4.length, resIndex = 0, result = [];
    while (++index < length2) {
      var value2 = array4[index];
      if (predicate(value2, index, array4)) {
        result[resIndex++] = value2;
      }
    }
    return result;
  }
  function stubArray22() {
    return [];
  }
  function baseTimes22(n2, iteratee) {
    var index = -1, result = Array(n2);
    while (++index < n2) {
      result[index] = iteratee(index);
    }
    return result;
  }
  function isObjectLike22(value2) {
    return value2 != null && typeof value2 == "object";
  }
  function baseIsArguments22(value2) {
    return isObjectLike_default22(value2) && baseGetTag_default22(value2) == argsTag52;
  }
  function stubFalse22() {
    return false;
  }
  function isIndex22(value2, length2) {
    var type3 = typeof value2;
    length2 = length2 == null ? MAX_SAFE_INTEGER32 : length2;
    return !!length2 && (type3 == "number" || type3 != "symbol" && reIsUint22.test(value2)) && (value2 > -1 && value2 % 1 == 0 && value2 < length2);
  }
  function isLength22(value2) {
    return typeof value2 == "number" && value2 > -1 && value2 % 1 == 0 && value2 <= MAX_SAFE_INTEGER4;
  }
  function baseIsTypedArray22(value2) {
    return isObjectLike_default22(value2) && isLength_default22(value2.length) && !!typedArrayTags22[baseGetTag_default22(value2)];
  }
  function baseUnary22(func) {
    return function(value2) {
      return func(value2);
    };
  }
  function arrayLikeKeys22(value2, inherited) {
    var isArr = isArray_default22(value2), isArg = !isArr && isArguments_default22(value2), isBuff = !isArr && !isArg && isBuffer_default22(value2), isType2 = !isArr && !isArg && !isBuff && isTypedArray_default22(value2), skipIndexes = isArr || isArg || isBuff || isType2, result = skipIndexes ? baseTimes_default22(value2.length, String) : [], length2 = result.length;
    for (var key in value2) {
      if ((inherited || hasOwnProperty23.call(value2, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
      (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
      isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
      isType2 && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
      isIndex_default22(key, length2)))) {
        result.push(key);
      }
    }
    return result;
  }
  function isPrototype22(value2) {
    var Ctor = value2 && value2.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto29;
    return value2 === proto;
  }
  function overArg22(func, transform8) {
    return function(arg) {
      return func(transform8(arg));
    };
  }
  function baseKeys22(object3) {
    if (!isPrototype_default22(object3)) {
      return nativeKeys_default22(object3);
    }
    var result = [];
    for (var key in Object(object3)) {
      if (hasOwnProperty24.call(object3, key) && key != "constructor") {
        result.push(key);
      }
    }
    return result;
  }
  function isArrayLike22(value2) {
    return value2 != null && isLength_default22(value2.length) && !isFunction_default22(value2);
  }
  function keys22(object3) {
    return isArrayLike_default22(object3) ? arrayLikeKeys_default22(object3) : baseKeys_default22(object3);
  }
  function getAllKeys22(object3) {
    return baseGetAllKeys_default22(object3, keys_default22, getSymbols_default22);
  }
  function equalObjects22(object3, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG9, objProps = getAllKeys_default22(object3), objLength = objProps.length, othProps = getAllKeys_default22(other), othLength = othProps.length;
    if (objLength != othLength && !isPartial) {
      return false;
    }
    var index = objLength;
    while (index--) {
      var key = objProps[index];
      if (!(isPartial ? key in other : hasOwnProperty25.call(other, key))) {
        return false;
      }
    }
    var objStacked = stack.get(object3);
    var othStacked = stack.get(other);
    if (objStacked && othStacked) {
      return objStacked == other && othStacked == object3;
    }
    var result = true;
    stack.set(object3, other);
    stack.set(other, object3);
    var skipCtor = isPartial;
    while (++index < objLength) {
      key = objProps[index];
      var objValue = object3[key], othValue = other[key];
      if (customizer) {
        var compared = isPartial ? customizer(othValue, objValue, key, other, object3, stack) : customizer(objValue, othValue, key, object3, other, stack);
      }
      if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
        result = false;
        break;
      }
      skipCtor || (skipCtor = key == "constructor");
    }
    if (result && !skipCtor) {
      var objCtor = object3.constructor, othCtor = other.constructor;
      if (objCtor != othCtor && ("constructor" in object3 && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
        result = false;
      }
    }
    stack["delete"](object3);
    stack["delete"](other);
    return result;
  }
  function baseIsEqualDeep22(object3, other, bitmask, customizer, equalFunc, stack) {
    var objIsArr = isArray_default22(object3), othIsArr = isArray_default22(other), objTag = objIsArr ? arrayTag52 : getTag_default22(object3), othTag = othIsArr ? arrayTag52 : getTag_default22(other);
    objTag = objTag == argsTag7 ? objectTag72 : objTag;
    othTag = othTag == argsTag7 ? objectTag72 : othTag;
    var objIsObj = objTag == objectTag72, othIsObj = othTag == objectTag72, isSameTag = objTag == othTag;
    if (isSameTag && isBuffer_default22(object3)) {
      if (!isBuffer_default22(other)) {
        return false;
      }
      objIsArr = true;
      objIsObj = false;
    }
    if (isSameTag && !objIsObj) {
      stack || (stack = new Stack_default22());
      return objIsArr || isTypedArray_default22(object3) ? equalArrays_default22(object3, other, bitmask, customizer, equalFunc, stack) : equalByTag_default22(object3, other, objTag, bitmask, customizer, equalFunc, stack);
    }
    if (!(bitmask & COMPARE_PARTIAL_FLAG10)) {
      var objIsWrapped = objIsObj && hasOwnProperty26.call(object3, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty26.call(other, "__wrapped__");
      if (objIsWrapped || othIsWrapped) {
        var objUnwrapped = objIsWrapped ? object3.value() : object3, othUnwrapped = othIsWrapped ? other.value() : other;
        stack || (stack = new Stack_default22());
        return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
      }
    }
    if (!isSameTag) {
      return false;
    }
    stack || (stack = new Stack_default22());
    return equalObjects_default22(object3, other, bitmask, customizer, equalFunc, stack);
  }
  function baseIsEqual22(value2, other, bitmask, customizer, stack) {
    if (value2 === other) {
      return true;
    }
    if (value2 == null || other == null || !isObjectLike_default22(value2) && !isObjectLike_default22(other)) {
      return value2 !== value2 && other !== other;
    }
    return baseIsEqualDeep_default22(value2, other, bitmask, customizer, baseIsEqual22, stack);
  }
  function baseIsMatch22(object3, source, matchData, customizer) {
    var index = matchData.length, length2 = index, noCustomizer = !customizer;
    if (object3 == null) {
      return !length2;
    }
    object3 = Object(object3);
    while (index--) {
      var data6 = matchData[index];
      if (noCustomizer && data6[2] ? data6[1] !== object3[data6[0]] : !(data6[0] in object3)) {
        return false;
      }
    }
    while (++index < length2) {
      data6 = matchData[index];
      var key = data6[0], objValue = object3[key], srcValue = data6[1];
      if (noCustomizer && data6[2]) {
        if (objValue === void 0 && !(key in object3)) {
          return false;
        }
      } else {
        var stack = new Stack_default22();
        if (customizer) {
          var result = customizer(objValue, srcValue, key, object3, source, stack);
        }
        if (!(result === void 0 ? baseIsEqual_default22(srcValue, objValue, COMPARE_PARTIAL_FLAG11 | COMPARE_UNORDERED_FLAG7, customizer, stack) : result)) {
          return false;
        }
      }
    }
    return true;
  }
  function isStrictComparable22(value2) {
    return value2 === value2 && !isObject_default22(value2);
  }
  function getMatchData22(object3) {
    var result = keys_default22(object3), length2 = result.length;
    while (length2--) {
      var key = result[length2], value2 = object3[key];
      result[length2] = [key, value2, isStrictComparable_default22(value2)];
    }
    return result;
  }
  function matchesStrictComparable22(key, srcValue) {
    return function(object3) {
      if (object3 == null) {
        return false;
      }
      return object3[key] === srcValue && (srcValue !== void 0 || key in Object(object3));
    };
  }
  function baseMatches22(source) {
    var matchData = getMatchData_default22(source);
    if (matchData.length == 1 && matchData[0][2]) {
      return matchesStrictComparable_default22(matchData[0][0], matchData[0][1]);
    }
    return function(object3) {
      return object3 === source || baseIsMatch_default22(object3, source, matchData);
    };
  }
  function isSymbol22(value2) {
    return typeof value2 == "symbol" || isObjectLike_default22(value2) && baseGetTag_default22(value2) == symbolTag62;
  }
  function isKey22(value2, object3) {
    if (isArray_default22(value2)) {
      return false;
    }
    var type3 = typeof value2;
    if (type3 == "number" || type3 == "symbol" || type3 == "boolean" || value2 == null || isSymbol_default22(value2)) {
      return true;
    }
    return reIsPlainProp22.test(value2) || !reIsDeepProp22.test(value2) || object3 != null && value2 in Object(object3);
  }
  function memoize22(func, resolver3) {
    if (typeof func != "function" || resolver3 != null && typeof resolver3 != "function") {
      throw new TypeError(FUNC_ERROR_TEXT3);
    }
    var memoized = /* @__PURE__ */ __name2(function() {
      var args = arguments, key = resolver3 ? resolver3.apply(this, args) : args[0], cache3 = memoized.cache;
      if (cache3.has(key)) {
        return cache3.get(key);
      }
      var result = func.apply(this, args);
      memoized.cache = cache3.set(key, result) || cache3;
      return result;
    }, "memoized");
    memoized.cache = new (memoize22.Cache || MapCache_default22)();
    return memoized;
  }
  function memoizeCapped22(func) {
    var result = memoize_default22(func, function(key) {
      if (cache3.size === MAX_MEMOIZE_SIZE22) {
        cache3.clear();
      }
      return key;
    });
    var cache3 = result.cache;
    return result;
  }
  function baseToString22(value2) {
    if (typeof value2 == "string") {
      return value2;
    }
    if (isArray_default22(value2)) {
      return arrayMap_default22(value2, baseToString22) + "";
    }
    if (isSymbol_default22(value2)) {
      return symbolToString22 ? symbolToString22.call(value2) : "";
    }
    var result = value2 + "";
    return result == "0" && 1 / value2 == -INFINITY52 ? "-0" : result;
  }
  function toString32(value2) {
    return value2 == null ? "" : baseToString_default22(value2);
  }
  function castPath22(value2, object3) {
    if (isArray_default22(value2)) {
      return value2;
    }
    return isKey_default22(value2, object3) ? [value2] : stringToPath_default22(toString_default22(value2));
  }
  function toKey22(value2) {
    if (typeof value2 == "string" || isSymbol_default22(value2)) {
      return value2;
    }
    var result = value2 + "";
    return result == "0" && 1 / value2 == -INFINITY6 ? "-0" : result;
  }
  function baseGet22(object3, path4) {
    path4 = castPath_default22(path4, object3);
    var index = 0, length2 = path4.length;
    while (object3 != null && index < length2) {
      object3 = object3[toKey_default22(path4[index++])];
    }
    return index && index == length2 ? object3 : void 0;
  }
  function get22(object3, path4, defaultValue) {
    var result = object3 == null ? void 0 : baseGet_default22(object3, path4);
    return result === void 0 ? defaultValue : result;
  }
  function baseHasIn22(object3, key) {
    return object3 != null && key in Object(object3);
  }
  function hasPath22(object3, path4, hasFunc) {
    path4 = castPath_default22(path4, object3);
    var index = -1, length2 = path4.length, result = false;
    while (++index < length2) {
      var key = toKey_default22(path4[index]);
      if (!(result = object3 != null && hasFunc(object3, key))) {
        break;
      }
      object3 = object3[key];
    }
    if (result || ++index != length2) {
      return result;
    }
    length2 = object3 == null ? 0 : object3.length;
    return !!length2 && isLength_default22(length2) && isIndex_default22(key, length2) && (isArray_default22(object3) || isArguments_default22(object3));
  }
  function hasIn22(object3, path4) {
    return object3 != null && hasPath_default22(object3, path4, baseHasIn_default22);
  }
  function baseMatchesProperty22(path4, srcValue) {
    if (isKey_default22(path4) && isStrictComparable_default22(srcValue)) {
      return matchesStrictComparable_default22(toKey_default22(path4), srcValue);
    }
    return function(object3) {
      var objValue = get_default22(object3, path4);
      return objValue === void 0 && objValue === srcValue ? hasIn_default22(object3, path4) : baseIsEqual_default22(srcValue, objValue, COMPARE_PARTIAL_FLAG12 | COMPARE_UNORDERED_FLAG8);
    };
  }
  function identity22(value2) {
    return value2;
  }
  function baseProperty22(key) {
    return function(object3) {
      return object3 == null ? void 0 : object3[key];
    };
  }
  function basePropertyDeep22(path4) {
    return function(object3) {
      return baseGet_default22(object3, path4);
    };
  }
  function property22(path4) {
    return isKey_default22(path4) ? baseProperty_default22(toKey_default22(path4)) : basePropertyDeep_default22(path4);
  }
  function baseIteratee22(value2) {
    if (typeof value2 == "function") {
      return value2;
    }
    if (value2 == null) {
      return identity_default22;
    }
    if (typeof value2 == "object") {
      return isArray_default22(value2) ? baseMatchesProperty_default22(value2[0], value2[1]) : baseMatches_default22(value2);
    }
    return property_default22(value2);
  }
  function createBaseFor22(fromRight) {
    return function(object3, iteratee, keysFunc) {
      var index = -1, iterable = Object(object3), props = keysFunc(object3), length2 = props.length;
      while (length2--) {
        var key = props[fromRight ? length2 : ++index];
        if (iteratee(iterable[key], key, iterable) === false) {
          break;
        }
      }
      return object3;
    };
  }
  function baseForOwn22(object3, iteratee) {
    return object3 && baseFor_default22(object3, iteratee, keys_default22);
  }
  function createBaseEach22(eachFunc, fromRight) {
    return function(collection4, iteratee) {
      if (collection4 == null) {
        return collection4;
      }
      if (!isArrayLike_default22(collection4)) {
        return eachFunc(collection4, iteratee);
      }
      var length2 = collection4.length, index = fromRight ? length2 : -1, iterable = Object(collection4);
      while (fromRight ? index-- : ++index < length2) {
        if (iteratee(iterable[index], index, iterable) === false) {
          break;
        }
      }
      return collection4;
    };
  }
  function baseMap22(collection4, iteratee) {
    var index = -1, result = isArrayLike_default22(collection4) ? Array(collection4.length) : [];
    baseEach_default22(collection4, function(value2, key, collection22) {
      result[++index] = iteratee(value2, key, collection22);
    });
    return result;
  }
  function map22(collection4, iteratee) {
    var func = isArray_default22(collection4) ? arrayMap_default22 : baseMap_default22;
    return func(collection4, baseIteratee_default22(iteratee, 3));
  }
  function baseFilter22(collection4, predicate) {
    var result = [];
    baseEach_default22(collection4, function(value2, index, collection22) {
      if (predicate(value2, index, collection22)) {
        result.push(value2);
      }
    });
    return result;
  }
  function filter22(collection4, predicate) {
    var func = isArray_default22(collection4) ? arrayFilter_default22 : baseFilter_default22;
    return func(collection4, baseIteratee_default22(predicate, 3));
  }
  function buildATNKey(rule, type3, occurrence) {
    return `${rule.name}_${type3}_${occurrence}`;
  }
  function createATN(rules2) {
    const atn = {
      decisionMap: {},
      decisionStates: [],
      ruleToStartState: /* @__PURE__ */ new Map(),
      ruleToStopState: /* @__PURE__ */ new Map(),
      states: []
    };
    createRuleStartAndStopATNStates(atn, rules2);
    const ruleLength = rules2.length;
    for (let i2 = 0; i2 < ruleLength; i2++) {
      const rule = rules2[i2];
      const ruleBlock = block(atn, rule, rule);
      if (ruleBlock === void 0) {
        continue;
      }
      buildRuleHandle(atn, rule, ruleBlock);
    }
    return atn;
  }
  function createRuleStartAndStopATNStates(atn, rules2) {
    const ruleLength = rules2.length;
    for (let i2 = 0; i2 < ruleLength; i2++) {
      const rule = rules2[i2];
      const start3 = newState(atn, rule, void 0, {
        type: ATN_RULE_START
      });
      const stop5 = newState(atn, rule, void 0, {
        type: ATN_RULE_STOP
      });
      start3.stop = stop5;
      atn.ruleToStartState.set(rule, start3);
      atn.ruleToStopState.set(rule, stop5);
    }
  }
  function atom(atn, rule, production) {
    if (production instanceof Terminal) {
      return tokenRef(atn, rule, production.terminalType, production);
    } else if (production instanceof NonTerminal) {
      return ruleRef(atn, rule, production);
    } else if (production instanceof Alternation) {
      return alternation(atn, rule, production);
    } else if (production instanceof Option2) {
      return option(atn, rule, production);
    } else if (production instanceof Repetition) {
      return repetition(atn, rule, production);
    } else if (production instanceof RepetitionWithSeparator) {
      return repetitionSep(atn, rule, production);
    } else if (production instanceof RepetitionMandatory) {
      return repetitionMandatory(atn, rule, production);
    } else if (production instanceof RepetitionMandatoryWithSeparator) {
      return repetitionMandatorySep(atn, rule, production);
    } else {
      return block(atn, rule, production);
    }
  }
  function repetition(atn, rule, repetition2) {
    const starState = newState(atn, rule, repetition2, {
      type: ATN_STAR_BLOCK_START
    });
    defineDecisionState(atn, starState);
    const handle = makeAlts(atn, rule, starState, repetition2, block(atn, rule, repetition2));
    return star(atn, rule, repetition2, handle);
  }
  function repetitionSep(atn, rule, repetition2) {
    const starState = newState(atn, rule, repetition2, {
      type: ATN_STAR_BLOCK_START
    });
    defineDecisionState(atn, starState);
    const handle = makeAlts(atn, rule, starState, repetition2, block(atn, rule, repetition2));
    const sep2 = tokenRef(atn, rule, repetition2.separator, repetition2);
    return star(atn, rule, repetition2, handle, sep2);
  }
  function repetitionMandatory(atn, rule, repetition2) {
    const plusState = newState(atn, rule, repetition2, {
      type: ATN_PLUS_BLOCK_START
    });
    defineDecisionState(atn, plusState);
    const handle = makeAlts(atn, rule, plusState, repetition2, block(atn, rule, repetition2));
    return plus(atn, rule, repetition2, handle);
  }
  function repetitionMandatorySep(atn, rule, repetition2) {
    const plusState = newState(atn, rule, repetition2, {
      type: ATN_PLUS_BLOCK_START
    });
    defineDecisionState(atn, plusState);
    const handle = makeAlts(atn, rule, plusState, repetition2, block(atn, rule, repetition2));
    const sep2 = tokenRef(atn, rule, repetition2.separator, repetition2);
    return plus(atn, rule, repetition2, handle, sep2);
  }
  function alternation(atn, rule, alternation2) {
    const start3 = newState(atn, rule, alternation2, {
      type: ATN_BASIC
    });
    defineDecisionState(atn, start3);
    const alts = map_default22(alternation2.definition, (e3) => atom(atn, rule, e3));
    const handle = makeAlts(atn, rule, start3, alternation2, ...alts);
    return handle;
  }
  function option(atn, rule, option2) {
    const start3 = newState(atn, rule, option2, {
      type: ATN_BASIC
    });
    defineDecisionState(atn, start3);
    const handle = makeAlts(atn, rule, start3, option2, block(atn, rule, option2));
    return optional(atn, rule, option2, handle);
  }
  function block(atn, rule, block2) {
    const handles = filter_default22(map_default22(block2.definition, (e3) => atom(atn, rule, e3)), (e3) => e3 !== void 0);
    if (handles.length === 1) {
      return handles[0];
    } else if (handles.length === 0) {
      return void 0;
    } else {
      return makeBlock(atn, handles);
    }
  }
  function plus(atn, rule, plus2, handle, sep2) {
    const blkStart = handle.left;
    const blkEnd = handle.right;
    const loop = newState(atn, rule, plus2, {
      type: ATN_PLUS_LOOP_BACK
    });
    defineDecisionState(atn, loop);
    const end2 = newState(atn, rule, plus2, {
      type: ATN_LOOP_END
    });
    blkStart.loopback = loop;
    end2.loopback = loop;
    atn.decisionMap[buildATNKey(rule, sep2 ? "RepetitionMandatoryWithSeparator" : "RepetitionMandatory", plus2.idx)] = loop;
    epsilon4(blkEnd, loop);
    if (sep2 === void 0) {
      epsilon4(loop, blkStart);
      epsilon4(loop, end2);
    } else {
      epsilon4(loop, end2);
      epsilon4(loop, sep2.left);
      epsilon4(sep2.right, blkStart);
    }
    return {
      left: blkStart,
      right: end2
    };
  }
  function star(atn, rule, star2, handle, sep2) {
    const start3 = handle.left;
    const end2 = handle.right;
    const entry = newState(atn, rule, star2, {
      type: ATN_STAR_LOOP_ENTRY
    });
    defineDecisionState(atn, entry);
    const loopEnd = newState(atn, rule, star2, {
      type: ATN_LOOP_END
    });
    const loop = newState(atn, rule, star2, {
      type: ATN_STAR_LOOP_BACK
    });
    entry.loopback = loop;
    loopEnd.loopback = loop;
    epsilon4(entry, start3);
    epsilon4(entry, loopEnd);
    epsilon4(end2, loop);
    if (sep2 !== void 0) {
      epsilon4(loop, loopEnd);
      epsilon4(loop, sep2.left);
      epsilon4(sep2.right, start3);
    } else {
      epsilon4(loop, entry);
    }
    atn.decisionMap[buildATNKey(rule, sep2 ? "RepetitionWithSeparator" : "Repetition", star2.idx)] = entry;
    return {
      left: entry,
      right: loopEnd
    };
  }
  function optional(atn, rule, optional2, handle) {
    const start3 = handle.left;
    const end2 = handle.right;
    epsilon4(start3, end2);
    atn.decisionMap[buildATNKey(rule, "Option", optional2.idx)] = start3;
    return handle;
  }
  function defineDecisionState(atn, state4) {
    atn.decisionStates.push(state4);
    state4.decision = atn.decisionStates.length - 1;
    return state4.decision;
  }
  function makeAlts(atn, rule, start3, production, ...alts) {
    const end2 = newState(atn, rule, production, {
      type: ATN_BLOCK_END,
      start: start3
    });
    start3.end = end2;
    for (const alt of alts) {
      if (alt !== void 0) {
        epsilon4(start3, alt.left);
        epsilon4(alt.right, end2);
      } else {
        epsilon4(start3, end2);
      }
    }
    const handle = {
      left: start3,
      right: end2
    };
    atn.decisionMap[buildATNKey(rule, getProdType2(production), production.idx)] = start3;
    return handle;
  }
  function getProdType2(production) {
    if (production instanceof Alternation) {
      return "Alternation";
    } else if (production instanceof Option2) {
      return "Option";
    } else if (production instanceof Repetition) {
      return "Repetition";
    } else if (production instanceof RepetitionWithSeparator) {
      return "RepetitionWithSeparator";
    } else if (production instanceof RepetitionMandatory) {
      return "RepetitionMandatory";
    } else if (production instanceof RepetitionMandatoryWithSeparator) {
      return "RepetitionMandatoryWithSeparator";
    } else {
      throw new Error("Invalid production type encountered");
    }
  }
  function makeBlock(atn, alts) {
    const altsLength = alts.length;
    for (let i2 = 0; i2 < altsLength - 1; i2++) {
      const handle = alts[i2];
      let transition2;
      if (handle.left.transitions.length === 1) {
        transition2 = handle.left.transitions[0];
      }
      const isRuleTransition = transition2 instanceof RuleTransition;
      const ruleTransition = transition2;
      const next3 = alts[i2 + 1].left;
      if (handle.left.type === ATN_BASIC && handle.right.type === ATN_BASIC && transition2 !== void 0 && (isRuleTransition && ruleTransition.followState === handle.right || transition2.target === handle.right)) {
        if (isRuleTransition) {
          ruleTransition.followState = next3;
        } else {
          transition2.target = next3;
        }
        removeState(atn, handle.right);
      } else {
        epsilon4(handle.right, next3);
      }
    }
    const first22 = alts[0];
    const last22 = alts[altsLength - 1];
    return {
      left: first22.left,
      right: last22.right
    };
  }
  function tokenRef(atn, rule, tokenType, production) {
    const left3 = newState(atn, rule, production, {
      type: ATN_BASIC
    });
    const right3 = newState(atn, rule, production, {
      type: ATN_BASIC
    });
    addTransition(left3, new AtomTransition(right3, tokenType));
    return {
      left: left3,
      right: right3
    };
  }
  function ruleRef(atn, currentRule, nonTerminal) {
    const rule = nonTerminal.referencedRule;
    const start3 = atn.ruleToStartState.get(rule);
    const left3 = newState(atn, currentRule, nonTerminal, {
      type: ATN_BASIC
    });
    const right3 = newState(atn, currentRule, nonTerminal, {
      type: ATN_BASIC
    });
    const call = new RuleTransition(start3, rule, right3);
    addTransition(left3, call);
    return {
      left: left3,
      right: right3
    };
  }
  function buildRuleHandle(atn, rule, block2) {
    const start3 = atn.ruleToStartState.get(rule);
    epsilon4(start3, block2.left);
    const stop5 = atn.ruleToStopState.get(rule);
    epsilon4(block2.right, stop5);
    const handle = {
      left: start3,
      right: stop5
    };
    return handle;
  }
  function epsilon4(a2, b3) {
    const transition2 = new EpsilonTransition(b3);
    addTransition(a2, transition2);
  }
  function newState(atn, rule, production, partial) {
    const t4 = Object.assign({
      atn,
      production,
      epsilonOnlyTransitions: false,
      rule,
      transitions: [],
      nextTokenWithinRule: [],
      stateNumber: atn.states.length
    }, partial);
    atn.states.push(t4);
    return t4;
  }
  function addTransition(state4, transition2) {
    if (state4.transitions.length === 0) {
      state4.epsilonOnlyTransitions = transition2.isEpsilon();
    }
    state4.transitions.push(transition2);
  }
  function removeState(atn, state4) {
    atn.states.splice(atn.states.indexOf(state4), 1);
  }
  function getATNConfigKey(config3, alt = true) {
    return `${alt ? `a${config3.alt}` : ""}s${config3.state.stateNumber}:${config3.stack.map((e3) => e3.stateNumber.toString()).join("_")}`;
  }
  function baseExtremum2(array4, iteratee, comparator) {
    var index = -1, length2 = array4.length;
    while (++index < length2) {
      var value2 = array4[index], current = iteratee(value2);
      if (current != null && (computed === void 0 ? current === current && !isSymbol_default22(current) : comparator(current, computed))) {
        var computed = current, result = value2;
      }
    }
    return result;
  }
  function baseLt2(value2, other) {
    return value2 < other;
  }
  function min8(array4) {
    return array4 && array4.length ? baseExtremum_default2(array4, identity_default22, baseLt_default2) : void 0;
  }
  function isFlattenable22(value2) {
    return isArray_default22(value2) || isArguments_default22(value2) || !!(spreadableSymbol22 && value2 && value2[spreadableSymbol22]);
  }
  function baseFlatten22(array4, depth, predicate, isStrict, result) {
    var index = -1, length2 = array4.length;
    predicate || (predicate = isFlattenable_default22);
    result || (result = []);
    while (++index < length2) {
      var value2 = array4[index];
      if (depth > 0 && predicate(value2)) {
        if (depth > 1) {
          baseFlatten22(value2, depth - 1, predicate, isStrict, result);
        } else {
          arrayPush_default22(result, value2);
        }
      } else if (!isStrict) {
        result[result.length] = value2;
      }
    }
    return result;
  }
  function flatMap2(collection4, iteratee) {
    return baseFlatten_default22(map_default22(collection4, iteratee), 1);
  }
  function baseFindIndex22(array4, predicate, fromIndex, fromRight) {
    var length2 = array4.length, index = fromIndex + (fromRight ? 1 : -1);
    while (fromRight ? index-- : ++index < length2) {
      if (predicate(array4[index], index, array4)) {
        return index;
      }
    }
    return -1;
  }
  function baseIsNaN22(value2) {
    return value2 !== value2;
  }
  function strictIndexOf22(array4, value2, fromIndex) {
    var index = fromIndex - 1, length2 = array4.length;
    while (++index < length2) {
      if (array4[index] === value2) {
        return index;
      }
    }
    return -1;
  }
  function baseIndexOf22(array4, value2, fromIndex) {
    return value2 === value2 ? strictIndexOf_default22(array4, value2, fromIndex) : baseFindIndex_default22(array4, baseIsNaN_default22, fromIndex);
  }
  function arrayIncludes22(array4, value2) {
    var length2 = array4 == null ? 0 : array4.length;
    return !!length2 && baseIndexOf_default22(array4, value2, 0) > -1;
  }
  function arrayIncludesWith22(array4, value2, comparator) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (comparator(value2, array4[index])) {
        return true;
      }
    }
    return false;
  }
  function noop22() {
  }
  function baseUniq22(array4, iteratee, comparator) {
    var index = -1, includes22 = arrayIncludes_default22, length2 = array4.length, isCommon = true, result = [], seen = result;
    if (comparator) {
      isCommon = false;
      includes22 = arrayIncludesWith_default22;
    } else if (length2 >= LARGE_ARRAY_SIZE5) {
      var set5 = iteratee ? null : createSet_default22(array4);
      if (set5) {
        return setToArray_default22(set5);
      }
      isCommon = false;
      includes22 = cacheHas_default22;
      seen = new SetCache_default22();
    } else {
      seen = iteratee ? [] : result;
    }
    outer:
      while (++index < length2) {
        var value2 = array4[index], computed = iteratee ? iteratee(value2) : value2;
        value2 = comparator || value2 !== 0 ? value2 : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value2);
        } else if (!includes22(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value2);
        }
      }
    return result;
  }
  function uniqBy(array4, iteratee) {
    return array4 && array4.length ? baseUniq_default22(array4, baseIteratee_default22(iteratee, 2)) : [];
  }
  function flatten22(array4) {
    var length2 = array4 == null ? 0 : array4.length;
    return length2 ? baseFlatten_default22(array4, 1) : [];
  }
  function arrayEach22(array4, iteratee) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    while (++index < length2) {
      if (iteratee(array4[index], index, array4) === false) {
        break;
      }
    }
    return array4;
  }
  function castFunction22(value2) {
    return typeof value2 == "function" ? value2 : identity_default22;
  }
  function forEach22(collection4, iteratee) {
    var func = isArray_default22(collection4) ? arrayEach_default22 : baseEach_default22;
    return func(collection4, castFunction_default22(iteratee));
  }
  function isEmpty22(value2) {
    if (value2 == null) {
      return true;
    }
    if (isArrayLike_default22(value2) && (isArray_default22(value2) || typeof value2 == "string" || typeof value2.splice == "function" || isBuffer_default22(value2) || isTypedArray_default22(value2) || isArguments_default22(value2))) {
      return !value2.length;
    }
    var tag = getTag_default22(value2);
    if (tag == mapTag11 || tag == setTag11) {
      return !value2.size;
    }
    if (isPrototype_default22(value2)) {
      return !baseKeys_default22(value2).length;
    }
    for (var key in value2) {
      if (hasOwnProperty27.call(value2, key)) {
        return false;
      }
    }
    return true;
  }
  function arrayReduce22(array4, iteratee, accumulator, initAccum) {
    var index = -1, length2 = array4 == null ? 0 : array4.length;
    if (initAccum && length2) {
      accumulator = array4[++index];
    }
    while (++index < length2) {
      accumulator = iteratee(accumulator, array4[index], index, array4);
    }
    return accumulator;
  }
  function baseReduce22(collection4, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection4, function(value2, index, collection22) {
      accumulator = initAccum ? (initAccum = false, value2) : iteratee(accumulator, value2, index, collection22);
    });
    return accumulator;
  }
  function reduce22(collection4, iteratee, accumulator) {
    var func = isArray_default22(collection4) ? arrayReduce_default22 : baseReduce_default22, initAccum = arguments.length < 3;
    return func(collection4, baseIteratee_default22(iteratee, 4), accumulator, initAccum, baseEach_default22);
  }
  function createDFACache(startState, decision) {
    const map32 = {};
    return (predicateSet) => {
      const key = predicateSet.toString();
      let existing = map32[key];
      if (existing !== void 0) {
        return existing;
      } else {
        existing = {
          atnStartState: startState,
          decision,
          states: {}
        };
        map32[key] = existing;
        return existing;
      }
    };
  }
  function isLL1Sequence(sequences, allowEmpty = true) {
    const fullSet = /* @__PURE__ */ new Set();
    for (const alt of sequences) {
      const altSet = /* @__PURE__ */ new Set();
      for (const tokType of alt) {
        if (tokType === void 0) {
          if (allowEmpty) {
            break;
          } else {
            return false;
          }
        }
        const indices = [tokType.tokenTypeIdx].concat(tokType.categoryMatches);
        for (const index of indices) {
          if (fullSet.has(index)) {
            if (!altSet.has(index)) {
              return false;
            }
          } else {
            fullSet.add(index);
            altSet.add(index);
          }
        }
      }
    }
    return true;
  }
  function initATNSimulator(atn) {
    const decisionLength = atn.decisionStates.length;
    const decisionToDFA = Array(decisionLength);
    for (let i2 = 0; i2 < decisionLength; i2++) {
      decisionToDFA[i2] = createDFACache(atn.decisionStates[i2], i2);
    }
    return decisionToDFA;
  }
  function adaptivePredict(dfaCaches, decision, predicateSet, logging) {
    const dfa = dfaCaches[decision](predicateSet);
    let start3 = dfa.start;
    if (start3 === void 0) {
      const closure2 = computeStartState(dfa.atnStartState);
      start3 = addDFAState(dfa, newDFAState(closure2));
      dfa.start = start3;
    }
    const alt = performLookahead.apply(this, [dfa, start3, predicateSet, logging]);
    return alt;
  }
  function performLookahead(dfa, s0, predicateSet, logging) {
    let previousD = s0;
    let i2 = 1;
    const path4 = [];
    let t4 = this.LA(i2++);
    while (true) {
      let d3 = getExistingTargetState(previousD, t4);
      if (d3 === void 0) {
        d3 = computeLookaheadTarget.apply(this, [dfa, previousD, t4, i2, predicateSet, logging]);
      }
      if (d3 === DFA_ERROR) {
        return buildAdaptivePredictError(path4, previousD, t4);
      }
      if (d3.isAcceptState === true) {
        return d3.prediction;
      }
      previousD = d3;
      path4.push(t4);
      t4 = this.LA(i2++);
    }
  }
  function computeLookaheadTarget(dfa, previousD, token2, lookahead, predicateSet, logging) {
    const reach = computeReachSet(previousD.configs, token2, predicateSet);
    if (reach.size === 0) {
      addDFAEdge(dfa, previousD, token2, DFA_ERROR);
      return DFA_ERROR;
    }
    let newState2 = newDFAState(reach);
    const predictedAlt = getUniqueAlt(reach, predicateSet);
    if (predictedAlt !== void 0) {
      newState2.isAcceptState = true;
      newState2.prediction = predictedAlt;
      newState2.configs.uniqueAlt = predictedAlt;
    } else if (hasConflictTerminatingPrediction(reach)) {
      const prediction = min_default2(reach.alts);
      newState2.isAcceptState = true;
      newState2.prediction = prediction;
      newState2.configs.uniqueAlt = prediction;
      reportLookaheadAmbiguity.apply(this, [dfa, lookahead, reach.alts, logging]);
    }
    newState2 = addDFAEdge(dfa, previousD, token2, newState2);
    return newState2;
  }
  function reportLookaheadAmbiguity(dfa, lookahead, ambiguityIndices, logging) {
    const prefixPath = [];
    for (let i2 = 1; i2 <= lookahead; i2++) {
      prefixPath.push(this.LA(i2).tokenType);
    }
    const atnState = dfa.atnStartState;
    const topLevelRule = atnState.rule;
    const production = atnState.production;
    const message = buildAmbiguityError({
      topLevelRule,
      ambiguityIndices,
      production,
      prefixPath
    });
    logging(message);
  }
  function buildAmbiguityError(options2) {
    const pathMsg = map_default22(options2.prefixPath, (currtok) => tokenLabel2(currtok)).join(", ");
    const occurrence = options2.production.idx === 0 ? "" : options2.production.idx;
    let currMessage = `Ambiguous Alternatives Detected: <${options2.ambiguityIndices.join(", ")}> in <${getProductionDslName2(options2.production)}${occurrence}> inside <${options2.topLevelRule.name}> Rule,
<${pathMsg}> may appears as a prefix path in all these alternatives.
`;
    currMessage = currMessage + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
For Further details.`;
    return currMessage;
  }
  function getProductionDslName2(prod) {
    if (prod instanceof NonTerminal) {
      return "SUBRULE";
    } else if (prod instanceof Option2) {
      return "OPTION";
    } else if (prod instanceof Alternation) {
      return "OR";
    } else if (prod instanceof RepetitionMandatory) {
      return "AT_LEAST_ONE";
    } else if (prod instanceof RepetitionMandatoryWithSeparator) {
      return "AT_LEAST_ONE_SEP";
    } else if (prod instanceof RepetitionWithSeparator) {
      return "MANY_SEP";
    } else if (prod instanceof Repetition) {
      return "MANY";
    } else if (prod instanceof Terminal) {
      return "CONSUME";
    } else {
      throw Error("non exhaustive match");
    }
  }
  function buildAdaptivePredictError(path4, previous, current) {
    const nextTransitions = flatMap_default2(previous.configs.elements, (e3) => e3.state.transitions);
    const nextTokenTypes = uniqBy_default(nextTransitions.filter((e3) => e3 instanceof AtomTransition).map((e3) => e3.tokenType), (e3) => e3.tokenTypeIdx);
    return {
      actualToken: current,
      possibleTokenTypes: nextTokenTypes,
      tokenPath: path4
    };
  }
  function getExistingTargetState(state4, token2) {
    return state4.edges[token2.tokenTypeIdx];
  }
  function computeReachSet(configs, token2, predicateSet) {
    const intermediate = new ATNConfigSet();
    const skippedStopStates = [];
    for (const c3 of configs.elements) {
      if (predicateSet.is(c3.alt) === false) {
        continue;
      }
      if (c3.state.type === ATN_RULE_STOP) {
        skippedStopStates.push(c3);
        continue;
      }
      const transitionLength = c3.state.transitions.length;
      for (let i2 = 0; i2 < transitionLength; i2++) {
        const transition2 = c3.state.transitions[i2];
        const target = getReachableTarget(transition2, token2);
        if (target !== void 0) {
          intermediate.add({
            state: target,
            alt: c3.alt,
            stack: c3.stack
          });
        }
      }
    }
    let reach;
    if (skippedStopStates.length === 0 && intermediate.size === 1) {
      reach = intermediate;
    }
    if (reach === void 0) {
      reach = new ATNConfigSet();
      for (const c3 of intermediate.elements) {
        closure(c3, reach);
      }
    }
    if (skippedStopStates.length > 0 && !hasConfigInRuleStopState(reach)) {
      for (const c3 of skippedStopStates) {
        reach.add(c3);
      }
    }
    return reach;
  }
  function getReachableTarget(transition2, token2) {
    if (transition2 instanceof AtomTransition && tokenMatcher(token2, transition2.tokenType)) {
      return transition2.target;
    }
    return void 0;
  }
  function getUniqueAlt(configs, predicateSet) {
    let alt;
    for (const c3 of configs.elements) {
      if (predicateSet.is(c3.alt) === true) {
        if (alt === void 0) {
          alt = c3.alt;
        } else if (alt !== c3.alt) {
          return void 0;
        }
      }
    }
    return alt;
  }
  function newDFAState(closure2) {
    return {
      configs: closure2,
      edges: {},
      isAcceptState: false,
      prediction: -1
    };
  }
  function addDFAEdge(dfa, from2, token2, to) {
    to = addDFAState(dfa, to);
    from2.edges[token2.tokenTypeIdx] = to;
    return to;
  }
  function addDFAState(dfa, state4) {
    if (state4 === DFA_ERROR) {
      return state4;
    }
    const mapKey = state4.configs.key;
    const existing = dfa.states[mapKey];
    if (existing !== void 0) {
      return existing;
    }
    state4.configs.finalize();
    dfa.states[mapKey] = state4;
    return state4;
  }
  function computeStartState(atnState) {
    const configs = new ATNConfigSet();
    const numberOfTransitions = atnState.transitions.length;
    for (let i2 = 0; i2 < numberOfTransitions; i2++) {
      const target = atnState.transitions[i2].target;
      const config3 = {
        state: target,
        alt: i2,
        stack: []
      };
      closure(config3, configs);
    }
    return configs;
  }
  function closure(config3, configs) {
    const p3 = config3.state;
    if (p3.type === ATN_RULE_STOP) {
      if (config3.stack.length > 0) {
        const atnStack = [...config3.stack];
        const followState = atnStack.pop();
        const followConfig = {
          state: followState,
          alt: config3.alt,
          stack: atnStack
        };
        closure(followConfig, configs);
      } else {
        configs.add(config3);
      }
      return;
    }
    if (!p3.epsilonOnlyTransitions) {
      configs.add(config3);
    }
    const transitionLength = p3.transitions.length;
    for (let i2 = 0; i2 < transitionLength; i2++) {
      const transition2 = p3.transitions[i2];
      const c3 = getEpsilonTarget(config3, transition2);
      if (c3 !== void 0) {
        closure(c3, configs);
      }
    }
  }
  function getEpsilonTarget(config3, transition2) {
    if (transition2 instanceof EpsilonTransition) {
      return {
        state: transition2.target,
        alt: config3.alt,
        stack: config3.stack
      };
    } else if (transition2 instanceof RuleTransition) {
      const stack = [...config3.stack, transition2.followState];
      return {
        state: transition2.target,
        alt: config3.alt,
        stack
      };
    }
    return void 0;
  }
  function hasConfigInRuleStopState(configs) {
    for (const c3 of configs.elements) {
      if (c3.state.type === ATN_RULE_STOP) {
        return true;
      }
    }
    return false;
  }
  function allConfigsInRuleStopStates(configs) {
    for (const c3 of configs.elements) {
      if (c3.state.type !== ATN_RULE_STOP) {
        return false;
      }
    }
    return true;
  }
  function hasConflictTerminatingPrediction(configs) {
    if (allConfigsInRuleStopStates(configs)) {
      return true;
    }
    const altSets = getConflictingAltSets(configs.elements);
    const heuristic2 = hasConflictingAltSet(altSets) && !hasStateAssociatedWithOneAlt(altSets);
    return heuristic2;
  }
  function getConflictingAltSets(configs) {
    const configToAlts = /* @__PURE__ */ new Map();
    for (const c3 of configs) {
      const key = getATNConfigKey(c3, false);
      let alts = configToAlts.get(key);
      if (alts === void 0) {
        alts = {};
        configToAlts.set(key, alts);
      }
      alts[c3.alt] = true;
    }
    return configToAlts;
  }
  function hasConflictingAltSet(altSets) {
    for (const value2 of Array.from(altSets.values())) {
      if (Object.keys(value2).length > 1) {
        return true;
      }
    }
    return false;
  }
  function hasStateAssociatedWithOneAlt(altSets) {
    for (const value2 of Array.from(altSets.values())) {
      if (Object.keys(value2).length === 1) {
        return true;
      }
    }
    return false;
  }
  function isDataTypeNode(node2) {
    return node2.$type === DatatypeSymbol;
  }
  function createParser(grammar, parser34, tokens2) {
    const parserContext = {
      parser: parser34,
      tokens: tokens2,
      ruleNames: /* @__PURE__ */ new Map()
    };
    buildRules(parserContext, grammar);
    return parser34;
  }
  function buildRules(parserContext, grammar) {
    const reachable = getAllReachableRules(grammar, false);
    const parserRules = stream(grammar.rules).filter(isParserRule).filter((rule) => reachable.has(rule));
    for (const rule of parserRules) {
      const ctx = {
        ...parserContext,
        consume: 1,
        optional: 1,
        subrule: 1,
        many: 1,
        or: 1
      };
      parserContext.parser.rule(rule, buildElement(ctx, rule.definition));
    }
    const infixRules = stream(grammar.rules).filter(isInfixRule).filter((rule) => reachable.has(rule));
    for (const rule of infixRules) {
      parserContext.parser.rule(rule, buildInfixRule(parserContext, rule));
    }
  }
  function buildInfixRule(ctx, rule) {
    const expressionRule = rule.call.rule.ref;
    if (!expressionRule) {
      throw new Error("Could not resolve reference to infix operator rule: " + rule.call.rule.$refText);
    }
    if (isTerminalRule(expressionRule)) {
      throw new Error("Cannot use terminal rule in infix expression");
    }
    const allKeywords = rule.operators.precedences.flatMap((e3) => e3.operators);
    const outerGroup = {
      $type: "Group",
      elements: []
    };
    const part1Assignment = {
      $container: outerGroup,
      $type: "Assignment",
      feature: "parts",
      operator: "+=",
      terminal: rule.call
    };
    const innerGroup = {
      $container: outerGroup,
      $type: "Group",
      elements: [],
      cardinality: "*"
    };
    outerGroup.elements.push(part1Assignment, innerGroup);
    const alternatives = {
      $type: "Alternatives",
      elements: allKeywords
    };
    const operatorAssignment = {
      $container: innerGroup,
      $type: "Assignment",
      feature: "operators",
      operator: "+=",
      terminal: alternatives
    };
    const part2Assignment = {
      ...part1Assignment,
      $container: innerGroup
    };
    innerGroup.elements.push(operatorAssignment, part2Assignment);
    const tokens2 = allKeywords.map((e3) => ctx.tokens[e3.value]);
    const orAlts = tokens2.map((token2, index) => ({
      ALT: /* @__PURE__ */ __name2(() => ctx.parser.consume(index, token2, operatorAssignment), "ALT")
    }));
    let subrule;
    return (args) => {
      subrule ?? (subrule = getRule(ctx, expressionRule));
      ctx.parser.subrule(0, subrule, false, part1Assignment, args);
      ctx.parser.many(0, {
        DEF: /* @__PURE__ */ __name2(() => {
          ctx.parser.alternatives(0, orAlts);
          ctx.parser.subrule(1, subrule, false, part2Assignment, args);
        }, "DEF")
      });
    };
  }
  function buildElement(ctx, element3, ignoreGuard = false) {
    let method;
    if (isKeyword(element3)) {
      method = buildKeyword(ctx, element3);
    } else if (isAction(element3)) {
      method = buildAction(ctx, element3);
    } else if (isAssignment(element3)) {
      method = buildElement(ctx, element3.terminal);
    } else if (isCrossReference(element3)) {
      method = buildCrossReference(ctx, element3);
    } else if (isRuleCall(element3)) {
      method = buildRuleCall(ctx, element3);
    } else if (isAlternatives(element3)) {
      method = buildAlternatives(ctx, element3);
    } else if (isUnorderedGroup(element3)) {
      method = buildUnorderedGroup(ctx, element3);
    } else if (isGroup(element3)) {
      method = buildGroup4(ctx, element3);
    } else if (isEndOfFile(element3)) {
      const idx = ctx.consume++;
      method = /* @__PURE__ */ __name2(() => ctx.parser.consume(idx, EOF, element3), "method");
    } else {
      throw new ErrorWithLocation(element3.$cstNode, `Unexpected element type: ${element3.$type}`);
    }
    return wrap(ctx, ignoreGuard ? void 0 : getGuardCondition(element3), method, element3.cardinality);
  }
  function buildAction(ctx, action) {
    const actionType = getTypeName(action);
    return () => ctx.parser.action(actionType, action);
  }
  function buildRuleCall(ctx, ruleCall) {
    const rule = ruleCall.rule.ref;
    if (isAbstractParserRule(rule)) {
      const idx = ctx.subrule++;
      const fragment = isParserRule(rule) && rule.fragment;
      const predicate = ruleCall.arguments.length > 0 ? buildRuleCallPredicate(rule, ruleCall.arguments) : () => ({});
      let subrule;
      return (args) => {
        subrule ?? (subrule = getRule(ctx, rule));
        ctx.parser.subrule(idx, subrule, fragment, ruleCall, predicate(args));
      };
    } else if (isTerminalRule(rule)) {
      const idx = ctx.consume++;
      const method = getToken(ctx, rule.name);
      return () => ctx.parser.consume(idx, method, ruleCall);
    } else if (!rule) {
      throw new ErrorWithLocation(ruleCall.$cstNode, `Undefined rule: ${ruleCall.rule.$refText}`);
    } else {
      assertUnreachable(rule);
    }
  }
  function buildRuleCallPredicate(rule, namedArgs) {
    const hasNamedArguments = namedArgs.some((arg) => arg.calledByName);
    if (hasNamedArguments) {
      const namedPredicates = namedArgs.map((arg) => ({
        parameterName: arg.parameter?.ref?.name,
        predicate: buildPredicate(arg.value)
      }));
      return (args) => {
        const ruleArgs = {};
        for (const { parameterName, predicate } of namedPredicates) {
          if (parameterName) {
            ruleArgs[parameterName] = predicate(args);
          }
        }
        return ruleArgs;
      };
    } else {
      const predicates = namedArgs.map((arg) => buildPredicate(arg.value));
      return (args) => {
        const ruleArgs = {};
        for (let i2 = 0; i2 < predicates.length; i2++) {
          if (i2 < rule.parameters.length) {
            const parameterName = rule.parameters[i2].name;
            const predicate = predicates[i2];
            ruleArgs[parameterName] = predicate(args);
          }
        }
        return ruleArgs;
      };
    }
  }
  function buildPredicate(condition) {
    if (isDisjunction(condition)) {
      const left3 = buildPredicate(condition.left);
      const right3 = buildPredicate(condition.right);
      return (args) => left3(args) || right3(args);
    } else if (isConjunction(condition)) {
      const left3 = buildPredicate(condition.left);
      const right3 = buildPredicate(condition.right);
      return (args) => left3(args) && right3(args);
    } else if (isNegation(condition)) {
      const value2 = buildPredicate(condition.value);
      return (args) => !value2(args);
    } else if (isParameterReference(condition)) {
      const name = condition.parameter.ref.name;
      return (args) => args !== void 0 && args[name] === true;
    } else if (isBooleanLiteral(condition)) {
      const value2 = Boolean(condition.true);
      return () => value2;
    }
    assertUnreachable(condition);
  }
  function buildAlternatives(ctx, alternatives) {
    if (alternatives.elements.length === 1) {
      return buildElement(ctx, alternatives.elements[0]);
    } else {
      const methods = [];
      for (const element3 of alternatives.elements) {
        const predicatedMethod = {
          // Since we handle the guard condition in the alternative already
          // We can ignore the group guard condition inside
          ALT: buildElement(ctx, element3, true)
        };
        const guard = getGuardCondition(element3);
        if (guard) {
          predicatedMethod.GATE = buildPredicate(guard);
        }
        methods.push(predicatedMethod);
      }
      const idx = ctx.or++;
      return (args) => ctx.parser.alternatives(idx, methods.map((method) => {
        const alt = {
          ALT: /* @__PURE__ */ __name2(() => method.ALT(args), "ALT")
        };
        const gate = method.GATE;
        if (gate) {
          alt.GATE = () => gate(args);
        }
        return alt;
      }));
    }
  }
  function buildUnorderedGroup(ctx, group2) {
    if (group2.elements.length === 1) {
      return buildElement(ctx, group2.elements[0]);
    }
    const methods = [];
    for (const element3 of group2.elements) {
      const predicatedMethod = {
        // Since we handle the guard condition in the alternative already
        // We can ignore the group guard condition inside
        ALT: buildElement(ctx, element3, true)
      };
      const guard = getGuardCondition(element3);
      if (guard) {
        predicatedMethod.GATE = buildPredicate(guard);
      }
      methods.push(predicatedMethod);
    }
    const orIdx = ctx.or++;
    const idFunc = /* @__PURE__ */ __name2((groupIdx, lParser) => {
      const stackId = lParser.getRuleStack().join("-");
      return `uGroup_${groupIdx}_${stackId}`;
    }, "idFunc");
    const alternatives = /* @__PURE__ */ __name2((args) => ctx.parser.alternatives(orIdx, methods.map((method, idx) => {
      const alt = { ALT: /* @__PURE__ */ __name2(() => true, "ALT") };
      const parser34 = ctx.parser;
      alt.ALT = () => {
        method.ALT(args);
        if (!parser34.isRecording()) {
          const key = idFunc(orIdx, parser34);
          if (!parser34.unorderedGroups.get(key)) {
            parser34.unorderedGroups.set(key, []);
          }
          const groupState = parser34.unorderedGroups.get(key);
          if (typeof groupState?.[idx] === "undefined") {
            groupState[idx] = true;
          }
        }
      };
      const gate = method.GATE;
      if (gate) {
        alt.GATE = () => gate(args);
      } else {
        alt.GATE = () => {
          const trackedAlternatives = parser34.unorderedGroups.get(idFunc(orIdx, parser34));
          const allow = !trackedAlternatives?.[idx];
          return allow;
        };
      }
      return alt;
    })), "alternatives");
    const wrapped = wrap(ctx, getGuardCondition(group2), alternatives, "*");
    return (args) => {
      wrapped(args);
      if (!ctx.parser.isRecording()) {
        ctx.parser.unorderedGroups.delete(idFunc(orIdx, ctx.parser));
      }
    };
  }
  function buildGroup4(ctx, group2) {
    const methods = group2.elements.map((e3) => buildElement(ctx, e3));
    return (args) => methods.forEach((method) => method(args));
  }
  function getGuardCondition(element3) {
    if (isGroup(element3)) {
      return element3.guardCondition;
    }
    return void 0;
  }
  function buildCrossReference(ctx, crossRef, terminal = crossRef.terminal) {
    if (!terminal) {
      if (!crossRef.type.ref) {
        throw new Error("Could not resolve reference to type: " + crossRef.type.$refText);
      }
      const assignment = findNameAssignment(crossRef.type.ref);
      const assignTerminal = assignment?.terminal;
      if (!assignTerminal) {
        throw new Error("Could not find name assignment for type: " + getTypeName(crossRef.type.ref));
      }
      return buildCrossReference(ctx, crossRef, assignTerminal);
    } else if (isRuleCall(terminal) && isParserRule(terminal.rule.ref)) {
      const rule = terminal.rule.ref;
      const idx = ctx.subrule++;
      let subrule;
      return (args) => {
        subrule ?? (subrule = getRule(ctx, rule));
        ctx.parser.subrule(idx, subrule, false, crossRef, args);
      };
    } else if (isRuleCall(terminal) && isTerminalRule(terminal.rule.ref)) {
      const idx = ctx.consume++;
      const terminalRule = getToken(ctx, terminal.rule.ref.name);
      return () => ctx.parser.consume(idx, terminalRule, crossRef);
    } else if (isKeyword(terminal)) {
      const idx = ctx.consume++;
      const keyword = getToken(ctx, terminal.value);
      return () => ctx.parser.consume(idx, keyword, crossRef);
    } else {
      throw new Error("Could not build cross reference parser");
    }
  }
  function buildKeyword(ctx, keyword) {
    const idx = ctx.consume++;
    const token2 = ctx.tokens[keyword.value];
    if (!token2) {
      throw new Error("Could not find token for keyword: " + keyword.value);
    }
    return () => ctx.parser.consume(idx, token2, keyword);
  }
  function wrap(ctx, guard, method, cardinality) {
    const gate = guard && buildPredicate(guard);
    if (!cardinality) {
      if (gate) {
        const idx = ctx.or++;
        return (args) => ctx.parser.alternatives(idx, [
          {
            ALT: /* @__PURE__ */ __name2(() => method(args), "ALT"),
            GATE: /* @__PURE__ */ __name2(() => gate(args), "GATE")
          },
          {
            ALT: EMPTY_ALT(),
            GATE: /* @__PURE__ */ __name2(() => !gate(args), "GATE")
          }
        ]);
      } else {
        return method;
      }
    }
    if (cardinality === "*") {
      const idx = ctx.many++;
      return (args) => ctx.parser.many(idx, {
        DEF: /* @__PURE__ */ __name2(() => method(args), "DEF"),
        GATE: gate ? () => gate(args) : void 0
      });
    } else if (cardinality === "+") {
      const idx = ctx.many++;
      if (gate) {
        const orIdx = ctx.or++;
        return (args) => ctx.parser.alternatives(orIdx, [
          {
            ALT: /* @__PURE__ */ __name2(() => ctx.parser.atLeastOne(idx, {
              DEF: /* @__PURE__ */ __name2(() => method(args), "DEF")
            }), "ALT"),
            GATE: /* @__PURE__ */ __name2(() => gate(args), "GATE")
          },
          {
            ALT: EMPTY_ALT(),
            GATE: /* @__PURE__ */ __name2(() => !gate(args), "GATE")
          }
        ]);
      } else {
        return (args) => ctx.parser.atLeastOne(idx, {
          DEF: /* @__PURE__ */ __name2(() => method(args), "DEF")
        });
      }
    } else if (cardinality === "?") {
      const idx = ctx.optional++;
      return (args) => ctx.parser.optional(idx, {
        DEF: /* @__PURE__ */ __name2(() => method(args), "DEF"),
        GATE: gate ? () => gate(args) : void 0
      });
    } else {
      assertUnreachable(cardinality);
    }
  }
  function getRule(ctx, element3) {
    const name = getRuleName(ctx, element3);
    const rule = ctx.parser.getRule(name);
    if (!rule)
      throw new Error(`Rule "${name}" not found."`);
    return rule;
  }
  function getRuleName(ctx, element3) {
    if (isAbstractParserRule(element3)) {
      return element3.name;
    } else if (ctx.ruleNames.has(element3)) {
      return ctx.ruleNames.get(element3);
    } else {
      let item = element3;
      let parent4 = item.$container;
      let ruleName = element3.$type;
      while (!isParserRule(parent4)) {
        if (isGroup(parent4) || isAlternatives(parent4) || isUnorderedGroup(parent4)) {
          const index = parent4.elements.indexOf(item);
          ruleName = index.toString() + ":" + ruleName;
        }
        item = parent4;
        parent4 = parent4.$container;
      }
      const rule = parent4;
      ruleName = rule.name + ":" + ruleName;
      ctx.ruleNames.set(element3, ruleName);
      return ruleName;
    }
  }
  function getToken(ctx, name) {
    const token2 = ctx.tokens[name];
    if (!token2)
      throw new Error(`Token "${name}" not found."`);
    return token2;
  }
  function createCompletionParser(services) {
    const grammar = services.Grammar;
    const lexer = services.parser.Lexer;
    const parser34 = new LangiumCompletionParser(services);
    createParser(grammar, parser34, lexer.definition);
    parser34.finalize();
    return parser34;
  }
  function createLangiumParser(services) {
    const parser34 = prepareLangiumParser(services);
    parser34.finalize();
    return parser34;
  }
  function prepareLangiumParser(services) {
    const grammar = services.Grammar;
    const lexer = services.parser.Lexer;
    const parser34 = new LangiumParser(services);
    return createParser(grammar, parser34, lexer.definition);
  }
  function delayNextTick() {
    return new Promise((resolve2) => {
      if (typeof setImmediate === "undefined") {
        setTimeout(resolve2, 0);
      } else {
        setImmediate(resolve2);
      }
    });
  }
  function startCancelableOperation() {
    lastTick = performance.now();
    return new cancellation_exports.CancellationTokenSource();
  }
  function setInterruptionPeriod(period) {
    globalInterruptionPeriod = period;
  }
  function isOperationCancelled(err) {
    return err === OperationCancelled;
  }
  async function interruptAndCheck(token2) {
    if (token2 === cancellation_exports.CancellationToken.None) {
      return;
    }
    const current = performance.now();
    if (current - lastTick >= globalInterruptionPeriod) {
      lastTick = current;
      await delayNextTick();
      lastTick = performance.now();
    }
    if (token2.isCancellationRequested) {
      throw OperationCancelled;
    }
  }
  function mergeSort(data6, compare) {
    if (data6.length <= 1) {
      return data6;
    }
    const p3 = data6.length / 2 | 0;
    const left3 = data6.slice(0, p3);
    const right3 = data6.slice(p3);
    mergeSort(left3, compare);
    mergeSort(right3, compare);
    let leftIdx = 0;
    let rightIdx = 0;
    let i2 = 0;
    while (leftIdx < left3.length && rightIdx < right3.length) {
      const ret = compare(left3[leftIdx], right3[rightIdx]);
      if (ret <= 0) {
        data6[i2++] = left3[leftIdx++];
      } else {
        data6[i2++] = right3[rightIdx++];
      }
    }
    while (leftIdx < left3.length) {
      data6[i2++] = left3[leftIdx++];
    }
    while (rightIdx < right3.length) {
      data6[i2++] = right3[rightIdx++];
    }
    return data6;
  }
  function computeLineOffsets(text4, isAtLineStart, textOffset = 0) {
    const result = isAtLineStart ? [textOffset] : [];
    for (let i2 = 0; i2 < text4.length; i2++) {
      const ch = text4.charCodeAt(i2);
      if (isEOL(ch)) {
        if (ch === 13 && i2 + 1 < text4.length && text4.charCodeAt(i2 + 1) === 10) {
          i2++;
        }
        result.push(textOffset + i2 + 1);
      }
    }
    return result;
  }
  function isEOL(char2) {
    return char2 === 13 || char2 === 10;
  }
  function getWellformedRange(range3) {
    const start3 = range3.start;
    const end2 = range3.end;
    if (start3.line > end2.line || start3.line === end2.line && start3.character > end2.character) {
      return { start: end2, end: start3 };
    }
    return range3;
  }
  function getWellformedEdit(textEdit) {
    const range3 = getWellformedRange(textEdit.range);
    if (range3 !== textEdit.range) {
      return { newText: textEdit.newText, range: range3 };
    }
    return textEdit;
  }
  function isNamed(node2) {
    return typeof node2.name === "string";
  }
  function isAstNodeWithComment(node2) {
    return typeof node2.$comment === "string";
  }
  function isIntermediateReference(obj) {
    return typeof obj === "object" && !!obj && ("$ref" in obj || "$error" in obj);
  }
  function diagnosticData(code) {
    return { code };
  }
  function getDiagnosticRange(info2) {
    if (info2.range) {
      return info2.range;
    }
    let cstNode;
    if (typeof info2.property === "string") {
      cstNode = findNodeForProperty(info2.node.$cstNode, info2.property, info2.index);
    } else if (typeof info2.keyword === "string") {
      cstNode = findNodeForKeyword(info2.node.$cstNode, info2.keyword, info2.index);
    }
    cstNode ?? (cstNode = info2.node.$cstNode);
    if (!cstNode) {
      return {
        start: { line: 0, character: 0 },
        end: { line: 0, character: 0 }
      };
    }
    return cstNode.range;
  }
  function toDiagnosticSeverity(severity) {
    switch (severity) {
      case "error":
        return 1;
      case "warning":
        return 2;
      case "info":
        return 3;
      case "hint":
        return 4;
      default:
        throw new Error("Invalid diagnostic severity: " + severity);
    }
  }
  function toDiagnosticData(severity) {
    switch (severity) {
      case "error":
        return diagnosticData(DocumentValidator.LexingError);
      case "warning":
        return diagnosticData(DocumentValidator.LexingWarning);
      case "info":
        return diagnosticData(DocumentValidator.LexingInfo);
      case "hint":
        return diagnosticData(DocumentValidator.LexingHint);
      default:
        throw new Error("Invalid diagnostic severity: " + severity);
    }
  }
  function isTokenTypeArray(tokenVocabulary) {
    return Array.isArray(tokenVocabulary) && (tokenVocabulary.length === 0 || "name" in tokenVocabulary[0]);
  }
  function isIMultiModeLexerDefinition(tokenVocabulary) {
    return tokenVocabulary && "modes" in tokenVocabulary && "defaultMode" in tokenVocabulary;
  }
  function isTokenTypeDictionary(tokenVocabulary) {
    return !isTokenTypeArray(tokenVocabulary) && !isIMultiModeLexerDefinition(tokenVocabulary);
  }
  function parseJSDoc(node2, start3, options2) {
    let opts;
    let position5;
    if (typeof node2 === "string") {
      position5 = start3;
      opts = options2;
    } else {
      position5 = node2.range.start;
      opts = start3;
    }
    if (!position5) {
      position5 = Position.create(0, 0);
    }
    const lines = getLines(node2);
    const normalizedOptions = normalizeOptions(opts);
    const tokens2 = tokenize({
      lines,
      position: position5,
      options: normalizedOptions
    });
    return parseJSDocComment({
      index: 0,
      tokens: tokens2,
      position: position5
    });
  }
  function isJSDoc(node2, options2) {
    const normalizedOptions = normalizeOptions(options2);
    const lines = getLines(node2);
    if (lines.length === 0) {
      return false;
    }
    const first22 = lines[0];
    const last22 = lines[lines.length - 1];
    const firstRegex = normalizedOptions.start;
    const lastRegex = normalizedOptions.end;
    return Boolean(firstRegex?.exec(first22)) && Boolean(lastRegex?.exec(last22));
  }
  function getLines(node2) {
    let content = "";
    if (typeof node2 === "string") {
      content = node2;
    } else {
      content = node2.text;
    }
    const lines = content.split(NEWLINE_REGEXP);
    return lines;
  }
  function tokenize(context) {
    const tokens2 = [];
    let currentLine = context.position.line;
    let currentCharacter = context.position.character;
    for (let i2 = 0; i2 < context.lines.length; i2++) {
      const first22 = i2 === 0;
      const last22 = i2 === context.lines.length - 1;
      let line2 = context.lines[i2];
      let index = 0;
      if (first22 && context.options.start) {
        const match3 = context.options.start?.exec(line2);
        if (match3) {
          index = match3.index + match3[0].length;
        }
      } else {
        const match3 = context.options.line?.exec(line2);
        if (match3) {
          index = match3.index + match3[0].length;
        }
      }
      if (last22) {
        const match3 = context.options.end?.exec(line2);
        if (match3) {
          line2 = line2.substring(0, match3.index);
        }
      }
      line2 = line2.substring(0, lastCharacter(line2));
      const whitespaceEnd = skipWhitespace(line2, index);
      if (whitespaceEnd >= line2.length) {
        if (tokens2.length > 0) {
          const position5 = Position.create(currentLine, currentCharacter);
          tokens2.push({
            type: "break",
            content: "",
            range: Range.create(position5, position5)
          });
        }
      } else {
        tagRegex.lastIndex = index;
        const tagMatch = tagRegex.exec(line2);
        if (tagMatch) {
          const fullMatch = tagMatch[0];
          const value2 = tagMatch[1];
          const start3 = Position.create(currentLine, currentCharacter + index);
          const end2 = Position.create(currentLine, currentCharacter + index + fullMatch.length);
          tokens2.push({
            type: "tag",
            content: value2,
            range: Range.create(start3, end2)
          });
          index += fullMatch.length;
          index = skipWhitespace(line2, index);
        }
        if (index < line2.length) {
          const rest = line2.substring(index);
          const inlineTagMatches = Array.from(rest.matchAll(inlineTagRegex));
          tokens2.push(...buildInlineTokens(inlineTagMatches, rest, currentLine, currentCharacter + index));
        }
      }
      currentLine++;
      currentCharacter = 0;
    }
    if (tokens2.length > 0 && tokens2[tokens2.length - 1].type === "break") {
      return tokens2.slice(0, -1);
    }
    return tokens2;
  }
  function buildInlineTokens(tags2, line2, lineIndex, characterIndex) {
    const tokens2 = [];
    if (tags2.length === 0) {
      const start3 = Position.create(lineIndex, characterIndex);
      const end2 = Position.create(lineIndex, characterIndex + line2.length);
      tokens2.push({
        type: "text",
        content: line2,
        range: Range.create(start3, end2)
      });
    } else {
      let lastIndex = 0;
      for (const match3 of tags2) {
        const matchIndex = match3.index;
        const startContent = line2.substring(lastIndex, matchIndex);
        if (startContent.length > 0) {
          tokens2.push({
            type: "text",
            content: line2.substring(lastIndex, matchIndex),
            range: Range.create(Position.create(lineIndex, lastIndex + characterIndex), Position.create(lineIndex, matchIndex + characterIndex))
          });
        }
        let offset = startContent.length + 1;
        const tagName = match3[1];
        tokens2.push({
          type: "inline-tag",
          content: tagName,
          range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + tagName.length + characterIndex))
        });
        offset += tagName.length;
        if (match3.length === 4) {
          offset += match3[2].length;
          const value2 = match3[3];
          tokens2.push({
            type: "text",
            content: value2,
            range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + value2.length + characterIndex))
          });
        } else {
          tokens2.push({
            type: "text",
            content: "",
            range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + characterIndex))
          });
        }
        lastIndex = matchIndex + match3[0].length;
      }
      const endContent = line2.substring(lastIndex);
      if (endContent.length > 0) {
        tokens2.push({
          type: "text",
          content: endContent,
          range: Range.create(Position.create(lineIndex, lastIndex + characterIndex), Position.create(lineIndex, lastIndex + characterIndex + endContent.length))
        });
      }
    }
    return tokens2;
  }
  function skipWhitespace(line2, index) {
    const match3 = line2.substring(index).match(nonWhitespaceRegex);
    if (match3) {
      return index + match3.index;
    } else {
      return line2.length;
    }
  }
  function lastCharacter(line2) {
    const match3 = line2.match(whitespaceEndRegex);
    if (match3 && typeof match3.index === "number") {
      return match3.index;
    }
    return void 0;
  }
  function parseJSDocComment(context) {
    const startPosition = Position.create(context.position.line, context.position.character);
    if (context.tokens.length === 0) {
      return new JSDocCommentImpl([], Range.create(startPosition, startPosition));
    }
    const elements2 = [];
    while (context.index < context.tokens.length) {
      const element3 = parseJSDocElement(context, elements2[elements2.length - 1]);
      if (element3) {
        elements2.push(element3);
      }
    }
    const start3 = elements2[0]?.range.start ?? startPosition;
    const end2 = elements2[elements2.length - 1]?.range.end ?? startPosition;
    return new JSDocCommentImpl(elements2, Range.create(start3, end2));
  }
  function parseJSDocElement(context, last22) {
    const next3 = context.tokens[context.index];
    if (next3.type === "tag") {
      return parseJSDocTag(context, false);
    } else if (next3.type === "text" || next3.type === "inline-tag") {
      return parseJSDocText(context);
    } else {
      appendEmptyLine(next3, last22);
      context.index++;
      return void 0;
    }
  }
  function appendEmptyLine(token2, element3) {
    if (element3) {
      const line2 = new JSDocLineImpl("", token2.range);
      if ("inlines" in element3) {
        element3.inlines.push(line2);
      } else {
        element3.content.inlines.push(line2);
      }
    }
  }
  function parseJSDocText(context) {
    let token2 = context.tokens[context.index];
    const firstToken = token2;
    let lastToken = token2;
    const lines = [];
    while (token2 && token2.type !== "break" && token2.type !== "tag") {
      lines.push(parseJSDocInline(context));
      lastToken = token2;
      token2 = context.tokens[context.index];
    }
    return new JSDocTextImpl(lines, Range.create(firstToken.range.start, lastToken.range.end));
  }
  function parseJSDocInline(context) {
    const token2 = context.tokens[context.index];
    if (token2.type === "inline-tag") {
      return parseJSDocTag(context, true);
    } else {
      return parseJSDocLine(context);
    }
  }
  function parseJSDocTag(context, inline) {
    const tagToken = context.tokens[context.index++];
    const name = tagToken.content.substring(1);
    const nextToken = context.tokens[context.index];
    if (nextToken?.type === "text") {
      if (inline) {
        const docLine = parseJSDocLine(context);
        return new JSDocTagImpl(name, new JSDocTextImpl([docLine], docLine.range), inline, Range.create(tagToken.range.start, docLine.range.end));
      } else {
        const textDoc = parseJSDocText(context);
        return new JSDocTagImpl(name, textDoc, inline, Range.create(tagToken.range.start, textDoc.range.end));
      }
    } else {
      const range3 = tagToken.range;
      return new JSDocTagImpl(name, new JSDocTextImpl([], range3), inline, range3);
    }
  }
  function parseJSDocLine(context) {
    const token2 = context.tokens[context.index++];
    return new JSDocLineImpl(token2.content, token2.range);
  }
  function normalizeOptions(options2) {
    if (!options2) {
      return normalizeOptions({
        start: "/**",
        end: "*/",
        line: "*"
      });
    }
    const { start: start3, end: end2, line: line2 } = options2;
    return {
      start: normalizeOption(start3, true),
      end: normalizeOption(end2, false),
      line: normalizeOption(line2, true)
    };
  }
  function normalizeOption(option2, start3) {
    if (typeof option2 === "string" || typeof option2 === "object") {
      const escaped = typeof option2 === "string" ? escapeRegExp(option2) : option2.source;
      if (start3) {
        return new RegExp(`^\\s*${escaped}`);
      } else {
        return new RegExp(`\\s*${escaped}\\s*$`);
      }
    } else {
      return option2;
    }
  }
  function renderInlineTag(tag, content, options2) {
    if (tag === "linkplain" || tag === "linkcode" || tag === "link") {
      const index = content.indexOf(" ");
      let display = content;
      if (index > 0) {
        const displayStart = skipWhitespace(content, index);
        display = content.substring(displayStart);
        content = content.substring(0, index);
      }
      if (tag === "linkcode" || tag === "link" && options2.link === "code") {
        display = `\`${display}\``;
      }
      const renderedLink = options2.renderLink?.(content, display) ?? renderLinkDefault(content, display);
      return renderedLink;
    }
    return void 0;
  }
  function renderLinkDefault(content, display) {
    try {
      URI2.parse(content, true);
      return `[${display}](${content})`;
    } catch {
      return content;
    }
  }
  function fillNewlines(text4) {
    if (text4.endsWith("\n")) {
      return "\n";
    } else {
      return "\n\n";
    }
  }
  function createDefaultCoreModule(context) {
    return {
      documentation: {
        CommentProvider: /* @__PURE__ */ __name2((services) => new DefaultCommentProvider(services), "CommentProvider"),
        DocumentationProvider: /* @__PURE__ */ __name2((services) => new JSDocDocumentationProvider(services), "DocumentationProvider")
      },
      parser: {
        AsyncParser: /* @__PURE__ */ __name2((services) => new DefaultAsyncParser(services), "AsyncParser"),
        GrammarConfig: /* @__PURE__ */ __name2((services) => createGrammarConfig(services), "GrammarConfig"),
        LangiumParser: /* @__PURE__ */ __name2((services) => createLangiumParser(services), "LangiumParser"),
        CompletionParser: /* @__PURE__ */ __name2((services) => createCompletionParser(services), "CompletionParser"),
        ValueConverter: /* @__PURE__ */ __name2(() => new DefaultValueConverter(), "ValueConverter"),
        TokenBuilder: /* @__PURE__ */ __name2(() => new DefaultTokenBuilder(), "TokenBuilder"),
        Lexer: /* @__PURE__ */ __name2((services) => new DefaultLexer(services), "Lexer"),
        ParserErrorMessageProvider: /* @__PURE__ */ __name2(() => new LangiumParserErrorMessageProvider(), "ParserErrorMessageProvider"),
        LexerErrorMessageProvider: /* @__PURE__ */ __name2(() => new DefaultLexerErrorMessageProvider(), "LexerErrorMessageProvider")
      },
      workspace: {
        AstNodeLocator: /* @__PURE__ */ __name2(() => new DefaultAstNodeLocator(), "AstNodeLocator"),
        AstNodeDescriptionProvider: /* @__PURE__ */ __name2((services) => new DefaultAstNodeDescriptionProvider(services), "AstNodeDescriptionProvider"),
        ReferenceDescriptionProvider: /* @__PURE__ */ __name2((services) => new DefaultReferenceDescriptionProvider(services), "ReferenceDescriptionProvider")
      },
      references: {
        Linker: /* @__PURE__ */ __name2((services) => new DefaultLinker(services), "Linker"),
        NameProvider: /* @__PURE__ */ __name2(() => new DefaultNameProvider(), "NameProvider"),
        ScopeProvider: /* @__PURE__ */ __name2((services) => new DefaultScopeProvider(services), "ScopeProvider"),
        ScopeComputation: /* @__PURE__ */ __name2((services) => new DefaultScopeComputation(services), "ScopeComputation"),
        References: /* @__PURE__ */ __name2((services) => new DefaultReferences(services), "References")
      },
      serializer: {
        Hydrator: /* @__PURE__ */ __name2((services) => new DefaultHydrator(services), "Hydrator"),
        JsonSerializer: /* @__PURE__ */ __name2((services) => new DefaultJsonSerializer(services), "JsonSerializer")
      },
      validation: {
        DocumentValidator: /* @__PURE__ */ __name2((services) => new DefaultDocumentValidator(services), "DocumentValidator"),
        ValidationRegistry: /* @__PURE__ */ __name2((services) => new ValidationRegistry(services), "ValidationRegistry")
      },
      shared: /* @__PURE__ */ __name2(() => context.shared, "shared")
    };
  }
  function createDefaultSharedCoreModule(context) {
    return {
      ServiceRegistry: /* @__PURE__ */ __name2((services) => new DefaultServiceRegistry(services), "ServiceRegistry"),
      workspace: {
        LangiumDocuments: /* @__PURE__ */ __name2((services) => new DefaultLangiumDocuments(services), "LangiumDocuments"),
        LangiumDocumentFactory: /* @__PURE__ */ __name2((services) => new DefaultLangiumDocumentFactory(services), "LangiumDocumentFactory"),
        DocumentBuilder: /* @__PURE__ */ __name2((services) => new DefaultDocumentBuilder(services), "DocumentBuilder"),
        IndexManager: /* @__PURE__ */ __name2((services) => new DefaultIndexManager(services), "IndexManager"),
        WorkspaceManager: /* @__PURE__ */ __name2((services) => new DefaultWorkspaceManager(services), "WorkspaceManager"),
        FileSystemProvider: /* @__PURE__ */ __name2((services) => context.fileSystemProvider(services), "FileSystemProvider"),
        WorkspaceLock: /* @__PURE__ */ __name2(() => new DefaultWorkspaceLock(), "WorkspaceLock"),
        ConfigurationProvider: /* @__PURE__ */ __name2((services) => new DefaultConfigurationProvider(services), "ConfigurationProvider")
      },
      profilers: {}
    };
  }
  function inject(module1, module2, module3, module4, module5, module6, module7, module8, module9) {
    const module10 = [module1, module2, module3, module4, module5, module6, module7, module8, module9].reduce(_merge, {});
    return _inject(module10);
  }
  function eagerLoad(item) {
    if (item && item[isProxy]) {
      for (const value2 of Object.values(item)) {
        eagerLoad(value2);
      }
    }
    return item;
  }
  function _inject(module2, injector) {
    const proxy = new Proxy({}, {
      deleteProperty: /* @__PURE__ */ __name2(() => false, "deleteProperty"),
      set: /* @__PURE__ */ __name2(() => {
        throw new Error("Cannot set property on injected service container");
      }, "set"),
      get: /* @__PURE__ */ __name2((obj, prop) => {
        if (prop === isProxy) {
          return true;
        } else {
          return _resolve2(obj, prop, module2, injector || proxy);
        }
      }, "get"),
      getOwnPropertyDescriptor: /* @__PURE__ */ __name2((obj, prop) => (_resolve2(obj, prop, module2, injector || proxy), Object.getOwnPropertyDescriptor(obj, prop)), "getOwnPropertyDescriptor"),
      // used by for..in
      has: /* @__PURE__ */ __name2((_3, prop) => prop in module2, "has"),
      // used by ..in..
      ownKeys: /* @__PURE__ */ __name2(() => [...Object.getOwnPropertyNames(module2)], "ownKeys")
      // used by for..in
    });
    return proxy;
  }
  function _resolve2(obj, prop, module2, injector) {
    if (prop in obj) {
      if (obj[prop] instanceof Error) {
        throw new Error("Construction failure. Please make sure that your dependencies are constructable. Cause: " + obj[prop]);
      }
      if (obj[prop] === __requested__) {
        throw new Error('Cycle detected. Please make "' + String(prop) + '" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');
      }
      return obj[prop];
    } else if (prop in module2) {
      const value2 = module2[prop];
      obj[prop] = __requested__;
      try {
        obj[prop] = typeof value2 === "function" ? value2(injector) : _inject(value2, injector);
      } catch (error3) {
        obj[prop] = error3 instanceof Error ? error3 : void 0;
        throw error3;
      }
      return obj[prop];
    } else {
      return void 0;
    }
  }
  function _merge(target, source) {
    if (source) {
      for (const [key, sourceValue] of Object.entries(source)) {
        if (sourceValue !== void 0 && sourceValue !== null) {
          if (typeof sourceValue === "object") {
            const targetValue = target[key];
            if (typeof targetValue === "object" && targetValue !== null) {
              target[key] = _merge(targetValue, sourceValue);
            } else {
              target[key] = _merge({}, sourceValue);
            }
          } else {
            target[key] = sourceValue;
          }
        }
      }
    }
    return target;
  }
  function createMinimalGrammarServices() {
    const shared = inject(createDefaultSharedCoreModule(EmptyFileSystem), minimalSharedGrammarModule);
    const grammar = inject(createDefaultCoreModule({ shared }), minimalGrammarModule);
    shared.ServiceRegistry.register(grammar);
    return grammar;
  }
  function loadGrammarFromJson(json3) {
    const services = createMinimalGrammarServices();
    const astNode = services.serializer.JsonSerializer.deserialize(json3);
    services.shared.workspace.LangiumDocumentFactory.fromModel(astNode, URI2.parse(`memory:/${astNode.name ?? "grammar"}.langium`));
    return astNode;
  }
  function isArchitecture(item) {
    return reflection2.isInstance(item, Architecture.$type);
  }
  function isBranch(item) {
    return reflection2.isInstance(item, Branch.$type);
  }
  function isCommit(item) {
    return reflection2.isInstance(item, Commit.$type);
  }
  function isCynefin(item) {
    return reflection2.isInstance(item, Cynefin.$type);
  }
  function isDomainBlock(item) {
    return reflection2.isInstance(item, DomainBlock.$type);
  }
  function isDomainItem(item) {
    return reflection2.isInstance(item, DomainItem.$type);
  }
  function isEmModelEntityType(item) {
    return item === "rmo" || item === "readmodel" || item === "ui" || item === "cmd" || item === "command" || item === "evt" || item === "event" || item === "pcr" || item === "processor";
  }
  function isEmResetFrame(item) {
    return reflection2.isInstance(item, EmResetFrame.$type);
  }
  function isGitGraph(item) {
    return reflection2.isInstance(item, GitGraph.$type);
  }
  function isInfo(item) {
    return reflection2.isInstance(item, Info.$type);
  }
  function isMerge(item) {
    return reflection2.isInstance(item, Merge.$type);
  }
  function isPacket(item) {
    return reflection2.isInstance(item, Packet.$type);
  }
  function isPacketBlock(item) {
    return reflection2.isInstance(item, PacketBlock.$type);
  }
  function isPie(item) {
    return reflection2.isInstance(item, Pie.$type);
  }
  function isPieSection(item) {
    return reflection2.isInstance(item, PieSection.$type);
  }
  function isRailroad(item) {
    return reflection2.isInstance(item, Railroad.$type);
  }
  function isRailroadAbnf(item) {
    return reflection2.isInstance(item, RailroadAbnf.$type);
  }
  function isRailroadEbnf(item) {
    return reflection2.isInstance(item, RailroadEbnf.$type);
  }
  function isRailroadPeg(item) {
    return reflection2.isInstance(item, RailroadPeg.$type);
  }
  function isTransition(item) {
    return reflection2.isInstance(item, Transition2.$type);
  }
  function isTreemap(item) {
    return reflection2.isInstance(item, Treemap.$type);
  }
  function isWardley(item) {
    return reflection2.isInstance(item, Wardley.$type);
  }
  var __create2, __defProp2, __getOwnPropDesc2, __getOwnPropNames2, __getProtoOf2, __hasOwnProp2, __name2, __esm2, __commonJS2, __export2, __copyProps2, __reExport, __toESM2, __toCommonJS2, main_exports, DocumentUri, URI, integer3, uinteger, Position, Range, Location, LocationLink, Color3, ColorInformation, ColorPresentation, FoldingRangeKind, FoldingRange, DiagnosticRelatedInformation, DiagnosticSeverity, DiagnosticTag, CodeDescription, Diagnostic, Command, TextEdit, ChangeAnnotation, ChangeAnnotationIdentifier, AnnotatedTextEdit, TextDocumentEdit, CreateFile, RenameFile, DeleteFile, WorkspaceEdit, TextEditChangeImpl, ChangeAnnotations, WorkspaceChange, TextDocumentIdentifier, VersionedTextDocumentIdentifier, OptionalVersionedTextDocumentIdentifier, TextDocumentItem, MarkupKind, MarkupContent, CompletionItemKind, InsertTextFormat, CompletionItemTag, InsertReplaceEdit, InsertTextMode, CompletionItemLabelDetails, CompletionItem, CompletionList, MarkedString, Hover, ParameterInformation, SignatureInformation, DocumentHighlightKind, DocumentHighlight, SymbolKind, SymbolTag, SymbolInformation, WorkspaceSymbol, DocumentSymbol, CodeActionKind, CodeActionTriggerKind, CodeActionContext, CodeAction, CodeLens, FormattingOptions, DocumentLink, SelectionRange, SemanticTokenTypes, SemanticTokenModifiers, SemanticTokens, InlineValueText, InlineValueVariableLookup, InlineValueEvaluatableExpression, InlineValueContext, InlayHintKind, InlayHintLabelPart, InlayHint, StringValue, InlineCompletionItem, InlineCompletionList, InlineCompletionTriggerKind, SelectedCompletionInfo, InlineCompletionContext, WorkspaceFolder, EOL, TextDocument, FullTextDocument, Is, init_main, require_ral, require_is, require_events, require_cancellation, require_messages, require_linkedMap, require_disposable, require_sharedArrayCancellation, require_semaphore, require_messageReader, require_messageWriter, require_messageBuffer, require_connection, require_api, require_ril, require_main, require_browser, require_messages2, require_is2, require_protocol_implementation, require_protocol_typeDefinition, require_protocol_workspaceFolder, require_protocol_configuration, require_protocol_colorProvider, require_protocol_foldingRange, require_protocol_declaration, require_protocol_selectionRange, require_protocol_progress, require_protocol_callHierarchy, require_protocol_semanticTokens, require_protocol_showDocument, require_protocol_linkedEditingRange, require_protocol_fileOperations, require_protocol_moniker, require_protocol_typeHierarchy, require_protocol_inlineValue, require_protocol_inlayHint, require_protocol_diagnostic, require_protocol_notebook, require_protocol_inlineCompletion, require_protocol, require_connection2, require_api2, require_main2, lib_exports, cst_utils_exports, AbstractAstReflection, StreamImpl, EMPTY_STREAM, DONE_RESULT, TreeStreamImpl, Reduction, ast_utils_exports, ast_exports, LangiumGrammarTerminals, AbstractElement, AbstractParserRule, AbstractRule, AbstractType, Action, Alternatives, ArrayLiteral, ArrayType, Assignment, BooleanLiteral, CharacterRange, Condition, Conjunction, CrossReference, Disjunction, EndOfFile, Grammar, GrammarImport, Group, InferredType, InfixRule, InfixRuleOperatorList, InfixRuleOperators, Interface, Keyword2, NamedArgument, NegatedToken, Negation, NumberLiteral, Parameter, ParameterReference, ParserRule, ReferenceType, RegexToken, ReturnType, RuleCall, SimpleType, StringLiteral, TerminalAlternatives, TerminalElement, TerminalGroup, TerminalRule, TerminalRuleCall, Type3, TypeAttribute, TypeDefinition, UnionType, UnorderedGroup, UntilToken, ValueLiteral, Wildcard, LangiumGrammarAstReflection, reflection, RangeComparison, DefaultNameRegexp, grammar_utils_exports, ErrorWithLocation, regexp_utils_exports, digitsCharCodes, wordCharCodes, whitespaceCodes, hexDigitPattern, decimalPattern, decimalPatternNoZero, RegExpParser, BaseRegExpVisitor, NEWLINE_REGEXP, regexpParser, TerminalRegExpVisitor, visitor, whitespaceCharacters, WILDCARD, freeGlobal2, freeGlobal_default2, freeSelf2, root3, root_default2, Symbol22, Symbol_default2, objectProto20, hasOwnProperty17, nativeObjectToString3, symToStringTag3, getRawTag_default2, objectProto22, nativeObjectToString22, objectToString_default2, nullTag2, undefinedTag2, symToStringTag22, baseGetTag_default2, isObjectLike_default2, symbolTag6, isSymbol_default2, arrayMap_default2, isArray3, isArray_default2, INFINITY5, symbolProto4, symbolToString2, baseToString_default2, reWhitespace2, trimmedEndIndex_default2, reTrimStart2, baseTrim_default2, isObject_default2, NAN2, reIsBadHex2, reIsBinary2, reIsOctal2, freeParseInt2, toNumber_default2, INFINITY22, MAX_INTEGER2, toFinite_default2, toInteger_default2, identity_default5, asyncTag2, funcTag4, genTag3, proxyTag2, isFunction_default2, coreJsData2, coreJsData_default2, maskSrcKey2, isMasked_default2, funcProto4, funcToString4, toSource_default2, reRegExpChar2, reIsHostCtor2, funcProto22, objectProto32, funcToString22, hasOwnProperty22, reIsNative2, baseIsNative_default2, getValue_default2, getNative_default2, WeakMap2, WeakMap_default2, objectCreate2, baseCreate2, baseCreate_default2, apply_default2, noop_default3, copyArray_default2, HOT_COUNT2, HOT_SPAN2, nativeNow2, shortOut_default2, constant_default8, defineProperty2, defineProperty_default2, baseSetToString2, baseSetToString_default2, setToString2, setToString_default2, arrayEach_default2, baseFindIndex_default2, baseIsNaN_default2, strictIndexOf_default2, baseIndexOf_default2, arrayIncludes_default2, MAX_SAFE_INTEGER3, reIsUint2, isIndex_default2, baseAssignValue_default2, eq_default2, objectProto42, hasOwnProperty32, assignValue_default2, copyObject_default2, nativeMax4, overRest_default2, baseRest_default2, MAX_SAFE_INTEGER22, isLength_default2, isArrayLike_default2, isIterateeCall_default2, createAssigner_default2, objectProto52, isPrototype_default2, baseTimes_default2, argsTag5, baseIsArguments_default2, objectProto62, hasOwnProperty42, propertyIsEnumerable3, isArguments3, isArguments_default2, stubFalse_default2, freeExports4, freeModule4, moduleExports4, Buffer22, nativeIsBuffer2, isBuffer2, isBuffer_default2, argsTag22, arrayTag5, boolTag5, dateTag6, errorTag4, funcTag22, mapTag10, numberTag6, objectTag7, regexpTag6, setTag10, stringTag7, weakMapTag4, arrayBufferTag6, dataViewTag7, float32Tag4, float64Tag4, int8Tag4, int16Tag4, int32Tag4, uint8Tag4, uint8ClampedTag4, uint16Tag4, uint32Tag4, typedArrayTags2, baseIsTypedArray_default2, baseUnary_default2, freeExports22, freeModule22, moduleExports22, freeProcess2, nodeUtil2, nodeUtil_default2, nodeIsTypedArray2, isTypedArray4, isTypedArray_default2, objectProto72, hasOwnProperty52, arrayLikeKeys_default2, overArg_default2, nativeKeys2, nativeKeys_default2, objectProto82, hasOwnProperty62, baseKeys_default2, keys_default2, objectProto92, hasOwnProperty72, assign5, assign_default, nativeKeysIn_default2, objectProto102, hasOwnProperty82, baseKeysIn_default2, keysIn_default2, reIsDeepProp2, reIsPlainProp2, isKey_default2, nativeCreate2, nativeCreate_default2, hashClear_default2, hashDelete_default2, HASH_UNDEFINED4, objectProto112, hasOwnProperty92, hashGet_default2, objectProto122, hasOwnProperty102, hashHas_default2, HASH_UNDEFINED22, hashSet_default2, Hash_default2, listCacheClear_default2, assocIndexOf_default2, arrayProto2, splice2, listCacheDelete_default2, listCacheGet_default2, listCacheHas_default2, listCacheSet_default2, ListCache_default2, Map22, Map_default2, mapCacheClear_default2, isKeyable_default2, getMapData_default2, mapCacheDelete_default2, mapCacheGet_default2, mapCacheHas_default2, mapCacheSet_default2, MapCache_default2, FUNC_ERROR_TEXT2, memoize_default2, MAX_MEMOIZE_SIZE2, memoizeCapped_default2, rePropName2, reEscapeChar2, stringToPath2, stringToPath_default2, toString_default2, castPath_default2, INFINITY32, toKey_default2, baseGet_default2, get_default2, arrayPush_default2, spreadableSymbol2, isFlattenable_default2, baseFlatten_default2, flatten_default2, getPrototype2, getPrototype_default2, baseSlice_default, arrayReduce_default2, stackClear_default2, stackDelete_default2, stackGet_default2, stackHas_default2, LARGE_ARRAY_SIZE3, stackSet_default2, Stack_default2, baseAssign_default2, baseAssignIn_default2, freeExports32, freeModule32, moduleExports32, Buffer32, allocUnsafe2, cloneBuffer_default2, arrayFilter_default2, stubArray_default2, objectProto132, propertyIsEnumerable22, nativeGetSymbols3, getSymbols3, getSymbols_default2, copySymbols_default2, nativeGetSymbols22, getSymbolsIn2, getSymbolsIn_default2, copySymbolsIn_default2, baseGetAllKeys_default2, getAllKeys_default2, getAllKeysIn_default2, DataView3, DataView_default2, Promise22, Promise_default2, Set22, Set_default2, mapTag22, objectTag22, promiseTag2, setTag22, weakMapTag22, dataViewTag22, dataViewCtorString2, mapCtorString2, promiseCtorString2, setCtorString2, weakMapCtorString2, getTag3, getTag_default2, objectProto142, hasOwnProperty112, initCloneArray_default2, Uint8Array22, Uint8Array_default2, cloneArrayBuffer_default2, cloneDataView_default2, reFlags2, cloneRegExp_default2, symbolProto22, symbolValueOf3, cloneSymbol_default2, cloneTypedArray_default2, boolTag22, dateTag22, mapTag32, numberTag22, regexpTag22, setTag32, stringTag22, symbolTag22, arrayBufferTag22, dataViewTag32, float32Tag22, float64Tag22, int8Tag22, int16Tag22, int32Tag22, uint8Tag22, uint8ClampedTag22, uint16Tag22, uint32Tag22, initCloneByTag_default2, initCloneObject_default2, mapTag42, baseIsMap_default2, nodeIsMap2, isMap2, isMap_default2, setTag42, baseIsSet_default2, nodeIsSet2, isSet2, isSet_default2, CLONE_DEEP_FLAG3, CLONE_FLAT_FLAG2, CLONE_SYMBOLS_FLAG4, argsTag32, arrayTag22, boolTag32, dateTag32, errorTag22, funcTag32, genTag22, mapTag52, numberTag32, objectTag32, regexpTag32, setTag52, stringTag32, symbolTag32, weakMapTag32, arrayBufferTag32, dataViewTag42, float32Tag32, float64Tag32, int8Tag32, int16Tag32, int32Tag32, uint8Tag32, uint8ClampedTag32, uint16Tag32, uint32Tag32, cloneableTags2, baseClone_default2, CLONE_SYMBOLS_FLAG22, clone_default3, compact_default, HASH_UNDEFINED32, setCacheAdd_default2, setCacheHas_default2, SetCache_default2, arraySome_default2, cacheHas_default2, COMPARE_PARTIAL_FLAG7, COMPARE_UNORDERED_FLAG5, equalArrays_default2, mapToArray_default2, setToArray_default2, COMPARE_PARTIAL_FLAG22, COMPARE_UNORDERED_FLAG22, boolTag42, dateTag42, errorTag32, mapTag62, numberTag42, regexpTag42, setTag62, stringTag42, symbolTag42, arrayBufferTag42, dataViewTag52, symbolProto32, symbolValueOf22, equalByTag_default2, COMPARE_PARTIAL_FLAG32, objectProto152, hasOwnProperty122, equalObjects_default2, COMPARE_PARTIAL_FLAG42, argsTag42, arrayTag32, objectTag42, objectProto162, hasOwnProperty132, baseIsEqualDeep_default2, baseIsEqual_default2, COMPARE_PARTIAL_FLAG52, COMPARE_UNORDERED_FLAG32, baseIsMatch_default2, isStrictComparable_default2, getMatchData_default2, matchesStrictComparable_default2, baseMatches_default2, baseHasIn_default2, hasPath_default2, hasIn_default2, COMPARE_PARTIAL_FLAG62, COMPARE_UNORDERED_FLAG42, baseMatchesProperty_default2, baseProperty_default2, basePropertyDeep_default2, property_default3, baseIteratee_default2, arrayAggregator_default, createBaseFor_default2, baseFor2, baseFor_default2, baseForOwn_default2, createBaseEach_default2, baseEach2, baseEach_default2, baseAggregator_default, createAggregator_default, objectProto172, hasOwnProperty142, defaults4, defaults_default2, isArrayLikeObject_default2, arrayIncludesWith_default2, LARGE_ARRAY_SIZE22, baseDifference_default, difference, difference_default, last_default2, drop_default, dropRight_default, castFunction_default2, forEach_default2, arrayEvery_default, baseEvery_default, every_default, baseFilter_default2, filter_default4, createFind_default2, nativeMax22, findIndex_default2, find3, find_default3, head_default, baseMap_default2, map_default2, flatMap_default, objectProto182, hasOwnProperty152, groupBy, groupBy_default, objectProto192, hasOwnProperty162, baseHas_default2, has_default2, stringTag52, isString_default2, baseValues_default2, values_default2, nativeMax32, includes_default, nativeMax42, indexOf_default, mapTag72, setTag72, objectProto202, hasOwnProperty172, isEmpty_default2, regexpTag52, baseIsRegExp_default, nodeIsRegExp, isRegExp, isRegExp_default, isUndefined_default2, FUNC_ERROR_TEXT22, negate_default, baseSet_default2, basePickBy_default2, pickBy_default, baseReduce_default2, reduce_default2, reject_default, baseSome_default, some_default, INFINITY42, createSet2, createSet_default2, LARGE_ARRAY_SIZE32, baseUniq_default2, uniq_default, AbstractProduction, NonTerminal, Rule, Alternative, Option2, RepetitionMandatory, RepetitionMandatoryWithSeparator, Repetition, RepetitionWithSeparator, Alternation, Terminal, GAstVisitor, RestWalker, IN, ResyncFollowsWalker, regExpAstCache, regExpParser, complementErrorMessage, failedOptimizationPrefixMsg, CharCodeFinder, PATTERN, DEFAULT_MODE, MODES, end_of_input, start_of_input, LineTerminatorOptimizedTester, minOptimizationVal, charCodeToOptimizedIdxMap, tokenShortNameIdx, tokenIdxToClass, defaultLexerErrorProvider, LexerDefinitionErrorType, DEFAULT_LEXER_CONFIG, Lexer2, PARENT, CATEGORIES, LABEL, GROUP, PUSH_MODE, POP_MODE, LONGER_ALT, LINE_BREAKS, START_CHARS_HINT, EOF, defaultParserErrorProvider, defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider, GastRefResolverVisitor, AbstractNextPossibleTokensWalker, NextAfterTokenWalker, AbstractNextTerminalAfterProductionWalker, NextTerminalAfterManyWalker, NextTerminalAfterManySepWalker, NextTerminalAfterAtLeastOneWalker, NextTerminalAfterAtLeastOneSepWalker, PROD_TYPE, RestDefinitionFinderWalker, InsideDefinitionFinderVisitor, OccurrenceValidationCollector, OrCollector, RepetitionCollector, MISMATCHED_TOKEN_EXCEPTION, NO_VIABLE_ALT_EXCEPTION, EARLY_EXIT_EXCEPTION, NOT_ALL_INPUT_PARSED_EXCEPTION, RECOGNITION_EXCEPTION_NAMES, RecognitionException, MismatchedTokenException, NoViableAltException, NotAllInputParsedException, EarlyExitException, EOF_FOLLOW_KEY, IN_RULE_RECOVERY_EXCEPTION, InRuleRecoveryException, Recoverable, BITS_FOR_METHOD_TYPE, BITS_FOR_OCCURRENCE_IDX, BITS_FOR_ALT_IDX, OR_IDX, OPTION_IDX, MANY_IDX, AT_LEAST_ONE_IDX, MANY_SEP_IDX, AT_LEAST_ONE_SEP_IDX, BITS_START_FOR_ALT_IDX, LLkLookaheadStrategy, LooksAhead, DslMethodsCollectorVisitor, collectorVisitor, NAME, CstVisitorDefinitionError, TreeBuilder, LexerAdapter, RecognizerApi, RecognizerEngine, ErrorHandler, ContentAssist, RECORDING_NULL_OBJECT, HANDLE_SEPARATOR, MAX_METHOD_IDX, RFT, RECORDING_PHASE_TOKEN, RECORDING_PHASE_CSTNODE, GastRecorder, PerformanceTracer, END_OF_FILE, DEFAULT_PARSER_CONFIG, DEFAULT_RULE_CONFIG, ParserDefinitionErrorType, Parser2, EmbeddedActionsParser, arrayMap_default22, listCacheClear_default22, eq_default22, assocIndexOf_default22, arrayProto22, splice22, listCacheDelete_default22, listCacheGet_default22, listCacheHas_default22, listCacheSet_default22, ListCache_default22, stackClear_default22, stackDelete_default22, stackGet_default22, stackHas_default22, freeGlobal22, freeGlobal_default22, freeSelf22, root22, root_default22, Symbol3, Symbol_default22, objectProto21, hasOwnProperty18, nativeObjectToString32, symToStringTag32, getRawTag_default22, objectProto222, nativeObjectToString4, objectToString_default22, nullTag22, undefinedTag22, symToStringTag4, baseGetTag_default22, isObject_default22, asyncTag22, funcTag42, genTag32, proxyTag22, isFunction_default22, coreJsData22, coreJsData_default22, maskSrcKey22, isMasked_default22, funcProto32, funcToString32, toSource_default22, reRegExpChar22, reIsHostCtor22, funcProto42, objectProto23, funcToString42, hasOwnProperty19, reIsNative22, baseIsNative_default22, getValue_default22, getNative_default22, Map3, Map_default22, nativeCreate22, nativeCreate_default22, hashClear_default22, hashDelete_default22, HASH_UNDEFINED42, objectProto24, hasOwnProperty20, hashGet_default22, objectProto25, hasOwnProperty21, hashHas_default22, HASH_UNDEFINED5, hashSet_default22, Hash_default22, mapCacheClear_default22, isKeyable_default22, getMapData_default22, mapCacheDelete_default22, mapCacheGet_default22, mapCacheHas_default22, mapCacheSet_default22, MapCache_default22, LARGE_ARRAY_SIZE4, stackSet_default22, Stack_default22, HASH_UNDEFINED6, setCacheAdd_default22, setCacheHas_default22, SetCache_default22, arraySome_default22, cacheHas_default22, COMPARE_PARTIAL_FLAG72, COMPARE_UNORDERED_FLAG52, equalArrays_default22, Uint8Array3, Uint8Array_default22, mapToArray_default22, setToArray_default22, COMPARE_PARTIAL_FLAG8, COMPARE_UNORDERED_FLAG6, boolTag52, dateTag52, errorTag42, mapTag82, numberTag52, regexpTag62, setTag82, stringTag62, symbolTag52, arrayBufferTag52, dataViewTag62, symbolProto42, symbolValueOf32, equalByTag_default22, arrayPush_default22, isArray22, isArray_default22, baseGetAllKeys_default22, arrayFilter_default22, stubArray_default22, objectProto26, propertyIsEnumerable32, nativeGetSymbols32, getSymbols22, getSymbols_default22, baseTimes_default22, isObjectLike_default22, argsTag52, baseIsArguments_default22, objectProto27, hasOwnProperty222, propertyIsEnumerable4, isArguments22, isArguments_default22, stubFalse_default22, freeExports42, freeModule42, moduleExports42, Buffer4, nativeIsBuffer22, isBuffer22, isBuffer_default22, MAX_SAFE_INTEGER32, reIsUint22, isIndex_default22, MAX_SAFE_INTEGER4, isLength_default22, argsTag6, arrayTag42, boolTag6, dateTag62, errorTag5, funcTag5, mapTag92, numberTag62, objectTag52, regexpTag7, setTag92, stringTag72, weakMapTag42, arrayBufferTag62, dataViewTag72, float32Tag42, float64Tag42, int8Tag42, int16Tag42, int32Tag42, uint8Tag42, uint8ClampedTag42, uint16Tag42, uint32Tag42, typedArrayTags22, baseIsTypedArray_default22, baseUnary_default22, freeExports5, freeModule5, moduleExports5, freeProcess22, nodeUtil22, nodeUtil_default22, nodeIsTypedArray22, isTypedArray22, isTypedArray_default22, objectProto28, hasOwnProperty23, arrayLikeKeys_default22, objectProto29, isPrototype_default22, overArg_default22, nativeKeys22, nativeKeys_default22, objectProto30, hasOwnProperty24, baseKeys_default22, isArrayLike_default22, keys_default22, getAllKeys_default22, COMPARE_PARTIAL_FLAG9, objectProto31, hasOwnProperty25, equalObjects_default22, DataView22, DataView_default22, Promise3, Promise_default22, Set3, Set_default22, WeakMap22, WeakMap_default22, mapTag102, objectTag62, promiseTag22, setTag102, weakMapTag5, dataViewTag8, dataViewCtorString22, mapCtorString22, promiseCtorString22, setCtorString22, weakMapCtorString22, getTag22, getTag_default22, COMPARE_PARTIAL_FLAG10, argsTag7, arrayTag52, objectTag72, objectProto322, hasOwnProperty26, baseIsEqualDeep_default22, baseIsEqual_default22, COMPARE_PARTIAL_FLAG11, COMPARE_UNORDERED_FLAG7, baseIsMatch_default22, isStrictComparable_default22, getMatchData_default22, matchesStrictComparable_default22, baseMatches_default22, symbolTag62, isSymbol_default22, reIsDeepProp22, reIsPlainProp22, isKey_default22, FUNC_ERROR_TEXT3, memoize_default22, MAX_MEMOIZE_SIZE22, memoizeCapped_default22, rePropName22, reEscapeChar22, stringToPath22, stringToPath_default22, INFINITY52, symbolProto5, symbolToString22, baseToString_default22, toString_default22, castPath_default22, INFINITY6, toKey_default22, baseGet_default22, get_default22, baseHasIn_default22, hasPath_default22, hasIn_default22, COMPARE_PARTIAL_FLAG12, COMPARE_UNORDERED_FLAG8, baseMatchesProperty_default22, identity_default22, baseProperty_default22, basePropertyDeep_default22, property_default22, baseIteratee_default22, createBaseFor_default22, baseFor22, baseFor_default22, baseForOwn_default22, createBaseEach_default22, baseEach22, baseEach_default22, baseMap_default22, map_default22, baseFilter_default22, filter_default22, ATN_BASIC, ATN_RULE_START, ATN_PLUS_BLOCK_START, ATN_STAR_BLOCK_START, ATN_RULE_STOP, ATN_BLOCK_END, ATN_STAR_LOOP_BACK, ATN_STAR_LOOP_ENTRY, ATN_PLUS_LOOP_BACK, ATN_LOOP_END, AbstractTransition, AtomTransition, EpsilonTransition, RuleTransition, DFA_ERROR, ATNConfigSet, baseExtremum_default2, baseLt_default2, min_default2, spreadableSymbol22, isFlattenable_default22, baseFlatten_default22, flatMap_default2, baseFindIndex_default22, baseIsNaN_default22, strictIndexOf_default22, baseIndexOf_default22, arrayIncludes_default22, arrayIncludesWith_default22, noop_default22, INFINITY7, createSet22, createSet_default22, LARGE_ARRAY_SIZE5, baseUniq_default22, uniqBy_default, flatten_default22, arrayEach_default22, castFunction_default22, forEach_default22, mapTag11, setTag11, objectProto33, hasOwnProperty27, isEmpty_default22, arrayReduce_default22, baseReduce_default22, reduce_default22, PredicateSet, EMPTY_PREDICATES, LLStarLookaheadStrategy, CstNodeBuilder, AbstractCstNode, LeafCstNodeImpl, CompositeCstNodeImpl, CstNodeContainer, RootCstNodeImpl, DatatypeSymbol, ruleSuffix, withRuleSuffix, AbstractLangiumParser, LangiumParser, AbstractParserErrorMessageProvider, LangiumParserErrorMessageProvider, LangiumCompletionParser, defaultConfig3, ChevrotainWrapper, ProfilerWrapper, DefaultTokenBuilder, DefaultValueConverter, ValueConverter, cancellation_exports, lastTick, globalInterruptionPeriod, OperationCancelled, Deferred, FullTextDocument2, TextDocument2, LIB, URI2, Utils2, UriUtils, UriTrie, DocumentState, DefaultLangiumDocumentFactory, DefaultLangiumDocuments, RefResolving, DefaultLinker, DefaultNameProvider, DefaultReferences, MultiMap, BiMap, DefaultScopeComputation, StreamScope, MapScope, MultiMapScope, EMPTY_SCOPE, DisposableCache, SimpleCache, ContextCache, DocumentCache, WorkspaceCache, DefaultScopeProvider, DefaultJsonSerializer, DefaultServiceRegistry, ValidationCategory, ValidationRegistry, VALIDATE_EACH_NODE, DefaultDocumentValidator, DocumentValidator, DefaultAstNodeDescriptionProvider, DefaultReferenceDescriptionProvider, DefaultAstNodeLocator, event_exports, DefaultConfigurationProvider, import_vscode_languageserver_protocol, Disposable, DefaultDocumentBuilder, DefaultIndexManager, DefaultWorkspaceManager, DefaultLexerErrorMessageProvider, DEFAULT_TOKENIZE_OPTIONS, DefaultLexer, tagRegex, inlineTagRegex, nonWhitespaceRegex, whitespaceEndRegex, JSDocCommentImpl, JSDocTagImpl, JSDocTextImpl, JSDocLineImpl, JSDocDocumentationProvider, DefaultCommentProvider, DefaultAsyncParser, AbstractThreadedAsyncParser, ParserWorker, DefaultWorkspaceLock, DefaultHydrator, Module, isProxy, __requested__, indentationBuilderDefaultOptions, LexingMode, IndentationAwareTokenBuilder, IndentationAwareLexer, utils_exports, EmptyFileSystemProvider, EmptyFileSystem, minimalGrammarModule, minimalSharedGrammarModule, DefaultLangiumProfiler, ProfilingTask, ArchitectureGrammar, CynefinGrammar, EventModeling, GitGraphGrammar, InfoGrammar, PacketGrammar, PieGrammar, RadarGrammar, RailroadAbnfGrammar, RailroadEbnfGrammar, RailroadGrammar, RailroadPegGrammar, TreemapGrammar, TreeViewGrammar, WardleyGrammar, MermaidTerminals, AbnfAlternation, AbnfConcatenation, AbnfElement, AbnfGroup, AbnfNumVal, AbnfOptionalGroup, AbnfPrimary, AbnfRule, AbnfRuleName, AbnfStringLiteral, Accelerator, Alignment, Anchor2, Annotation, Annotations, Architecture, Axis, Branch, Checkout, CherryPicking, ClassDefStatement, Commit, Common, Component, Curve, Cynefin, Deaccelerator, Decorator, Direction, DomainBlock, DomainItem, EbnfChoice, EbnfExceptionPostfix, EbnfGroup, EbnfNonTerminal, EbnfOneOrMorePostfix, EbnfOptional, EbnfOptionalPostfix, EbnfPostfix, EbnfPrimary, EbnfRepetition, EbnfRule, EbnfSequence, EbnfSpecial, EbnfTerm, EbnfTerminal, EbnfZeroOrMorePostfix, Edge, EmDataEntity, EmFrame, EmGwt, EmGwtStatement, EmModelEntity, EmNoteEntity, EmResetFrame, EmTimeFrame, Entry, EventModel, Evolution, EvolutionStage, Evolve, GitGraph, Group2, Info, Item, Junction, Label, Leaf, Link, Merge, Note, Option22, Packet, PacketBlock, PegAny, PegGroup, PegIdentifier, PegLiteral, PegOrderedChoice, PegPrefix, PegPrimary, PegRule, PegSequence, PegSuffix, Pie, PieSection, Pipeline, PipelineComponent, Radar, Railroad, RailroadAbnf, RailroadChoiceExpr, RailroadEbnf, RailroadExpression, RailroadNonTerminalExpr, RailroadOneOrMoreExpr, RailroadOptionalExpr, RailroadPeg, RailroadRule, RailroadSequenceExpr, RailroadSpecialExpr, RailroadTerminalExpr, RailroadZeroOrMoreExpr, Section, Service, Size, Statement, Transition2, Treemap, TreemapRow, TreeNode, TreeView, Wardley, MermaidAstReflection, reflection2, loadedArchitectureGrammarGrammar, ArchitectureGrammarGrammar, loadedCynefinGrammarGrammar, CynefinGrammarGrammar, loadedEventModelingGrammar, EventModelingGrammar, loadedGitGraphGrammarGrammar, GitGraphGrammarGrammar, loadedInfoGrammarGrammar, InfoGrammarGrammar, loadedPacketGrammarGrammar, PacketGrammarGrammar, loadedPieGrammarGrammar, PieGrammarGrammar, loadedRadarGrammarGrammar, RadarGrammarGrammar, loadedRailroadAbnfGrammarGrammar, RailroadAbnfGrammarGrammar, loadedRailroadEbnfGrammarGrammar, RailroadEbnfGrammarGrammar, loadedRailroadGrammarGrammar, RailroadGrammarGrammar, loadedRailroadPegGrammarGrammar, RailroadPegGrammarGrammar, loadedTreemapGrammarGrammar, TreemapGrammarGrammar, loadedTreeViewGrammarGrammar, TreeViewGrammarGrammar, loadedWardleyGrammarGrammar, WardleyGrammarGrammar, ArchitectureGrammarLanguageMetaData, CynefinGrammarLanguageMetaData, EventModelingLanguageMetaData, GitGraphGrammarLanguageMetaData, InfoGrammarLanguageMetaData, PacketGrammarLanguageMetaData, PieGrammarLanguageMetaData, RadarGrammarLanguageMetaData, RailroadAbnfGrammarLanguageMetaData, RailroadEbnfGrammarLanguageMetaData, RailroadGrammarLanguageMetaData, RailroadPegGrammarLanguageMetaData, TreemapGrammarLanguageMetaData, TreeViewGrammarLanguageMetaData, WardleyGrammarLanguageMetaData, MermaidGeneratedSharedModule, ArchitectureGrammarGeneratedModule, CynefinGrammarGeneratedModule, EventModelingGeneratedModule, GitGraphGrammarGeneratedModule, InfoGrammarGeneratedModule, PacketGrammarGeneratedModule, PieGrammarGeneratedModule, RadarGrammarGeneratedModule, RailroadAbnfGrammarGeneratedModule, RailroadEbnfGrammarGeneratedModule, RailroadGrammarGeneratedModule, RailroadPegGrammarGeneratedModule, TreemapGrammarGeneratedModule, TreeViewGrammarGeneratedModule, WardleyGrammarGeneratedModule, accessibilityDescrRegex, accessibilityTitleRegex, titleRegex, rulesRegexes, AbstractMermaidValueConverter, CommonValueConverter, AbstractMermaidTokenBuilder, CommonTokenBuilder;
  var init_chunk_KEIR6QF5 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-KEIR6QF5.mjs"() {
      "use strict";
      __create2 = Object.create;
      __defProp2 = Object.defineProperty;
      __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
      __getOwnPropNames2 = Object.getOwnPropertyNames;
      __getProtoOf2 = Object.getPrototypeOf;
      __hasOwnProp2 = Object.prototype.hasOwnProperty;
      __name2 = /* @__PURE__ */ __name((target, value2) => __defProp2(target, "name", { value: value2, configurable: true }), "__name");
      __esm2 = /* @__PURE__ */ __name((fn3, res) => /* @__PURE__ */ __name(function __init() {
        return fn3 && (res = (0, fn3[__getOwnPropNames2(fn3)[0]])(fn3 = 0)), res;
      }, "__init"), "__esm");
      __commonJS2 = /* @__PURE__ */ __name((cb, mod) => /* @__PURE__ */ __name(function __require() {
        return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
      }, "__require"), "__commonJS");
      __export2 = /* @__PURE__ */ __name((target, all) => {
        for (var name in all)
          __defProp2(target, name, { get: all[name], enumerable: true });
      }, "__export");
      __copyProps2 = /* @__PURE__ */ __name((to, from2, except, desc) => {
        if (from2 && typeof from2 === "object" || typeof from2 === "function") {
          for (let key of __getOwnPropNames2(from2))
            if (!__hasOwnProp2.call(to, key) && key !== except)
              __defProp2(to, key, { get: /* @__PURE__ */ __name(() => from2[key], "get"), enumerable: !(desc = __getOwnPropDesc2(from2, key)) || desc.enumerable });
        }
        return to;
      }, "__copyProps");
      __reExport = /* @__PURE__ */ __name((target, mod, secondTarget) => (__copyProps2(target, mod, "default"), secondTarget && __copyProps2(secondTarget, mod, "default")), "__reExport");
      __toESM2 = /* @__PURE__ */ __name((mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
        // If the importer is in node compatibility mode or this is not an ESM
        // file that has been converted to a CommonJS file using a Babel-
        // compatible transform (i.e. "__esModule" has not been set), then set
        // "default" to the CommonJS "module.exports" for node compatibility.
        isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
        mod
      )), "__toESM");
      __toCommonJS2 = /* @__PURE__ */ __name((mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod), "__toCommonJS");
      main_exports = {};
      __export2(main_exports, {
        AnnotatedTextEdit: /* @__PURE__ */ __name(() => AnnotatedTextEdit, "AnnotatedTextEdit"),
        ChangeAnnotation: /* @__PURE__ */ __name(() => ChangeAnnotation, "ChangeAnnotation"),
        ChangeAnnotationIdentifier: /* @__PURE__ */ __name(() => ChangeAnnotationIdentifier, "ChangeAnnotationIdentifier"),
        CodeAction: /* @__PURE__ */ __name(() => CodeAction, "CodeAction"),
        CodeActionContext: /* @__PURE__ */ __name(() => CodeActionContext, "CodeActionContext"),
        CodeActionKind: /* @__PURE__ */ __name(() => CodeActionKind, "CodeActionKind"),
        CodeActionTriggerKind: /* @__PURE__ */ __name(() => CodeActionTriggerKind, "CodeActionTriggerKind"),
        CodeDescription: /* @__PURE__ */ __name(() => CodeDescription, "CodeDescription"),
        CodeLens: /* @__PURE__ */ __name(() => CodeLens, "CodeLens"),
        Color: /* @__PURE__ */ __name(() => Color3, "Color"),
        ColorInformation: /* @__PURE__ */ __name(() => ColorInformation, "ColorInformation"),
        ColorPresentation: /* @__PURE__ */ __name(() => ColorPresentation, "ColorPresentation"),
        Command: /* @__PURE__ */ __name(() => Command, "Command"),
        CompletionItem: /* @__PURE__ */ __name(() => CompletionItem, "CompletionItem"),
        CompletionItemKind: /* @__PURE__ */ __name(() => CompletionItemKind, "CompletionItemKind"),
        CompletionItemLabelDetails: /* @__PURE__ */ __name(() => CompletionItemLabelDetails, "CompletionItemLabelDetails"),
        CompletionItemTag: /* @__PURE__ */ __name(() => CompletionItemTag, "CompletionItemTag"),
        CompletionList: /* @__PURE__ */ __name(() => CompletionList, "CompletionList"),
        CreateFile: /* @__PURE__ */ __name(() => CreateFile, "CreateFile"),
        DeleteFile: /* @__PURE__ */ __name(() => DeleteFile, "DeleteFile"),
        Diagnostic: /* @__PURE__ */ __name(() => Diagnostic, "Diagnostic"),
        DiagnosticRelatedInformation: /* @__PURE__ */ __name(() => DiagnosticRelatedInformation, "DiagnosticRelatedInformation"),
        DiagnosticSeverity: /* @__PURE__ */ __name(() => DiagnosticSeverity, "DiagnosticSeverity"),
        DiagnosticTag: /* @__PURE__ */ __name(() => DiagnosticTag, "DiagnosticTag"),
        DocumentHighlight: /* @__PURE__ */ __name(() => DocumentHighlight, "DocumentHighlight"),
        DocumentHighlightKind: /* @__PURE__ */ __name(() => DocumentHighlightKind, "DocumentHighlightKind"),
        DocumentLink: /* @__PURE__ */ __name(() => DocumentLink, "DocumentLink"),
        DocumentSymbol: /* @__PURE__ */ __name(() => DocumentSymbol, "DocumentSymbol"),
        DocumentUri: /* @__PURE__ */ __name(() => DocumentUri, "DocumentUri"),
        EOL: /* @__PURE__ */ __name(() => EOL, "EOL"),
        FoldingRange: /* @__PURE__ */ __name(() => FoldingRange, "FoldingRange"),
        FoldingRangeKind: /* @__PURE__ */ __name(() => FoldingRangeKind, "FoldingRangeKind"),
        FormattingOptions: /* @__PURE__ */ __name(() => FormattingOptions, "FormattingOptions"),
        Hover: /* @__PURE__ */ __name(() => Hover, "Hover"),
        InlayHint: /* @__PURE__ */ __name(() => InlayHint, "InlayHint"),
        InlayHintKind: /* @__PURE__ */ __name(() => InlayHintKind, "InlayHintKind"),
        InlayHintLabelPart: /* @__PURE__ */ __name(() => InlayHintLabelPart, "InlayHintLabelPart"),
        InlineCompletionContext: /* @__PURE__ */ __name(() => InlineCompletionContext, "InlineCompletionContext"),
        InlineCompletionItem: /* @__PURE__ */ __name(() => InlineCompletionItem, "InlineCompletionItem"),
        InlineCompletionList: /* @__PURE__ */ __name(() => InlineCompletionList, "InlineCompletionList"),
        InlineCompletionTriggerKind: /* @__PURE__ */ __name(() => InlineCompletionTriggerKind, "InlineCompletionTriggerKind"),
        InlineValueContext: /* @__PURE__ */ __name(() => InlineValueContext, "InlineValueContext"),
        InlineValueEvaluatableExpression: /* @__PURE__ */ __name(() => InlineValueEvaluatableExpression, "InlineValueEvaluatableExpression"),
        InlineValueText: /* @__PURE__ */ __name(() => InlineValueText, "InlineValueText"),
        InlineValueVariableLookup: /* @__PURE__ */ __name(() => InlineValueVariableLookup, "InlineValueVariableLookup"),
        InsertReplaceEdit: /* @__PURE__ */ __name(() => InsertReplaceEdit, "InsertReplaceEdit"),
        InsertTextFormat: /* @__PURE__ */ __name(() => InsertTextFormat, "InsertTextFormat"),
        InsertTextMode: /* @__PURE__ */ __name(() => InsertTextMode, "InsertTextMode"),
        Location: /* @__PURE__ */ __name(() => Location, "Location"),
        LocationLink: /* @__PURE__ */ __name(() => LocationLink, "LocationLink"),
        MarkedString: /* @__PURE__ */ __name(() => MarkedString, "MarkedString"),
        MarkupContent: /* @__PURE__ */ __name(() => MarkupContent, "MarkupContent"),
        MarkupKind: /* @__PURE__ */ __name(() => MarkupKind, "MarkupKind"),
        OptionalVersionedTextDocumentIdentifier: /* @__PURE__ */ __name(() => OptionalVersionedTextDocumentIdentifier, "OptionalVersionedTextDocumentIdentifier"),
        ParameterInformation: /* @__PURE__ */ __name(() => ParameterInformation, "ParameterInformation"),
        Position: /* @__PURE__ */ __name(() => Position, "Position"),
        Range: /* @__PURE__ */ __name(() => Range, "Range"),
        RenameFile: /* @__PURE__ */ __name(() => RenameFile, "RenameFile"),
        SelectedCompletionInfo: /* @__PURE__ */ __name(() => SelectedCompletionInfo, "SelectedCompletionInfo"),
        SelectionRange: /* @__PURE__ */ __name(() => SelectionRange, "SelectionRange"),
        SemanticTokenModifiers: /* @__PURE__ */ __name(() => SemanticTokenModifiers, "SemanticTokenModifiers"),
        SemanticTokenTypes: /* @__PURE__ */ __name(() => SemanticTokenTypes, "SemanticTokenTypes"),
        SemanticTokens: /* @__PURE__ */ __name(() => SemanticTokens, "SemanticTokens"),
        SignatureInformation: /* @__PURE__ */ __name(() => SignatureInformation, "SignatureInformation"),
        StringValue: /* @__PURE__ */ __name(() => StringValue, "StringValue"),
        SymbolInformation: /* @__PURE__ */ __name(() => SymbolInformation, "SymbolInformation"),
        SymbolKind: /* @__PURE__ */ __name(() => SymbolKind, "SymbolKind"),
        SymbolTag: /* @__PURE__ */ __name(() => SymbolTag, "SymbolTag"),
        TextDocument: /* @__PURE__ */ __name(() => TextDocument, "TextDocument"),
        TextDocumentEdit: /* @__PURE__ */ __name(() => TextDocumentEdit, "TextDocumentEdit"),
        TextDocumentIdentifier: /* @__PURE__ */ __name(() => TextDocumentIdentifier, "TextDocumentIdentifier"),
        TextDocumentItem: /* @__PURE__ */ __name(() => TextDocumentItem, "TextDocumentItem"),
        TextEdit: /* @__PURE__ */ __name(() => TextEdit, "TextEdit"),
        URI: /* @__PURE__ */ __name(() => URI, "URI"),
        VersionedTextDocumentIdentifier: /* @__PURE__ */ __name(() => VersionedTextDocumentIdentifier, "VersionedTextDocumentIdentifier"),
        WorkspaceChange: /* @__PURE__ */ __name(() => WorkspaceChange, "WorkspaceChange"),
        WorkspaceEdit: /* @__PURE__ */ __name(() => WorkspaceEdit, "WorkspaceEdit"),
        WorkspaceFolder: /* @__PURE__ */ __name(() => WorkspaceFolder, "WorkspaceFolder"),
        WorkspaceSymbol: /* @__PURE__ */ __name(() => WorkspaceSymbol, "WorkspaceSymbol"),
        integer: /* @__PURE__ */ __name(() => integer3, "integer"),
        uinteger: /* @__PURE__ */ __name(() => uinteger, "uinteger")
      });
      init_main = __esm2({
        "../../node_modules/.pnpm/vscode-languageserver-types@3.17.5/node_modules/vscode-languageserver-types/lib/esm/main.js"() {
          "use strict";
          (function(DocumentUri2) {
            function is2(value2) {
              return typeof value2 === "string";
            }
            __name(is2, "is");
            __name2(is2, "is");
            DocumentUri2.is = is2;
          })(DocumentUri || (DocumentUri = {}));
          (function(URI3) {
            function is2(value2) {
              return typeof value2 === "string";
            }
            __name(is2, "is");
            __name2(is2, "is");
            URI3.is = is2;
          })(URI || (URI = {}));
          (function(integer22) {
            integer22.MIN_VALUE = -2147483648;
            integer22.MAX_VALUE = 2147483647;
            function is2(value2) {
              return typeof value2 === "number" && integer22.MIN_VALUE <= value2 && value2 <= integer22.MAX_VALUE;
            }
            __name(is2, "is");
            __name2(is2, "is");
            integer22.is = is2;
          })(integer3 || (integer3 = {}));
          (function(uinteger2) {
            uinteger2.MIN_VALUE = 0;
            uinteger2.MAX_VALUE = 2147483647;
            function is2(value2) {
              return typeof value2 === "number" && uinteger2.MIN_VALUE <= value2 && value2 <= uinteger2.MAX_VALUE;
            }
            __name(is2, "is");
            __name2(is2, "is");
            uinteger2.is = is2;
          })(uinteger || (uinteger = {}));
          (function(Position2) {
            function create4(line2, character2) {
              if (line2 === Number.MAX_VALUE) {
                line2 = uinteger.MAX_VALUE;
              }
              if (character2 === Number.MAX_VALUE) {
                character2 = uinteger.MAX_VALUE;
              }
              return { line: line2, character: character2 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            Position2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
            }
            __name(is2, "is");
            __name2(is2, "is");
            Position2.is = is2;
          })(Position || (Position = {}));
          (function(Range2) {
            function create4(one4, two, three, four) {
              if (Is.uinteger(one4) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {
                return { start: Position.create(one4, two), end: Position.create(three, four) };
              } else if (Position.is(one4) && Position.is(two)) {
                return { start: one4, end: two };
              } else {
                throw new Error(`Range#create called with invalid arguments[${one4}, ${two}, ${three}, ${four}]`);
              }
            }
            __name(create4, "create");
            __name2(create4, "create");
            Range2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
            }
            __name(is2, "is");
            __name2(is2, "is");
            Range2.is = is2;
          })(Range || (Range = {}));
          (function(Location2) {
            function create4(uri, range3) {
              return { uri, range: range3 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            Location2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
            }
            __name(is2, "is");
            __name2(is2, "is");
            Location2.is = is2;
          })(Location || (Location = {}));
          (function(LocationLink2) {
            function create4(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
              return { targetUri, targetRange, targetSelectionRange, originSelectionRange };
            }
            __name(create4, "create");
            __name2(create4, "create");
            LocationLink2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && Range.is(candidate.targetSelectionRange) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
            }
            __name(is2, "is");
            __name2(is2, "is");
            LocationLink2.is = is2;
          })(LocationLink || (LocationLink = {}));
          (function(Color22) {
            function create4(red, green, blue, alpha) {
              return {
                red,
                green,
                blue,
                alpha
              };
            }
            __name(create4, "create");
            __name2(create4, "create");
            Color22.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1);
            }
            __name(is2, "is");
            __name2(is2, "is");
            Color22.is = is2;
          })(Color3 || (Color3 = {}));
          (function(ColorInformation2) {
            function create4(range3, color2) {
              return {
                range: range3,
                color: color2
              };
            }
            __name(create4, "create");
            __name2(create4, "create");
            ColorInformation2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color3.is(candidate.color);
            }
            __name(is2, "is");
            __name2(is2, "is");
            ColorInformation2.is = is2;
          })(ColorInformation || (ColorInformation = {}));
          (function(ColorPresentation2) {
            function create4(label, textEdit, additionalTextEdits) {
              return {
                label,
                textEdit,
                additionalTextEdits
              };
            }
            __name(create4, "create");
            __name2(create4, "create");
            ColorPresentation2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
            }
            __name(is2, "is");
            __name2(is2, "is");
            ColorPresentation2.is = is2;
          })(ColorPresentation || (ColorPresentation = {}));
          (function(FoldingRangeKind2) {
            FoldingRangeKind2.Comment = "comment";
            FoldingRangeKind2.Imports = "imports";
            FoldingRangeKind2.Region = "region";
          })(FoldingRangeKind || (FoldingRangeKind = {}));
          (function(FoldingRange2) {
            function create4(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {
              const result = {
                startLine,
                endLine
              };
              if (Is.defined(startCharacter)) {
                result.startCharacter = startCharacter;
              }
              if (Is.defined(endCharacter)) {
                result.endCharacter = endCharacter;
              }
              if (Is.defined(kind)) {
                result.kind = kind;
              }
              if (Is.defined(collapsedText)) {
                result.collapsedText = collapsedText;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            FoldingRange2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
            }
            __name(is2, "is");
            __name2(is2, "is");
            FoldingRange2.is = is2;
          })(FoldingRange || (FoldingRange = {}));
          (function(DiagnosticRelatedInformation2) {
            function create4(location2, message) {
              return {
                location: location2,
                message
              };
            }
            __name(create4, "create");
            __name2(create4, "create");
            DiagnosticRelatedInformation2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
            }
            __name(is2, "is");
            __name2(is2, "is");
            DiagnosticRelatedInformation2.is = is2;
          })(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
          (function(DiagnosticSeverity2) {
            DiagnosticSeverity2.Error = 1;
            DiagnosticSeverity2.Warning = 2;
            DiagnosticSeverity2.Information = 3;
            DiagnosticSeverity2.Hint = 4;
          })(DiagnosticSeverity || (DiagnosticSeverity = {}));
          (function(DiagnosticTag2) {
            DiagnosticTag2.Unnecessary = 1;
            DiagnosticTag2.Deprecated = 2;
          })(DiagnosticTag || (DiagnosticTag = {}));
          (function(CodeDescription2) {
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Is.string(candidate.href);
            }
            __name(is2, "is");
            __name2(is2, "is");
            CodeDescription2.is = is2;
          })(CodeDescription || (CodeDescription = {}));
          (function(Diagnostic2) {
            function create4(range3, message, severity, code, source, relatedInformation) {
              let result = { range: range3, message };
              if (Is.defined(severity)) {
                result.severity = severity;
              }
              if (Is.defined(code)) {
                result.code = code;
              }
              if (Is.defined(source)) {
                result.source = source;
              }
              if (Is.defined(relatedInformation)) {
                result.relatedInformation = relatedInformation;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            Diagnostic2.create = create4;
            function is2(value2) {
              var _a;
              let candidate = value2;
              return Is.defined(candidate) && Range.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
            }
            __name(is2, "is");
            __name2(is2, "is");
            Diagnostic2.is = is2;
          })(Diagnostic || (Diagnostic = {}));
          (function(Command2) {
            function create4(title2, command, ...args) {
              let result = { title: title2, command };
              if (Is.defined(args) && args.length > 0) {
                result.arguments = args;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            Command2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
            }
            __name(is2, "is");
            __name2(is2, "is");
            Command2.is = is2;
          })(Command || (Command = {}));
          (function(TextEdit2) {
            function replace2(range3, newText) {
              return { range: range3, newText };
            }
            __name(replace2, "replace");
            __name2(replace2, "replace");
            TextEdit2.replace = replace2;
            function insert(position5, newText) {
              return { range: { start: position5, end: position5 }, newText };
            }
            __name(insert, "insert");
            __name2(insert, "insert");
            TextEdit2.insert = insert;
            function del(range3) {
              return { range: range3, newText: "" };
            }
            __name(del, "del");
            __name2(del, "del");
            TextEdit2.del = del;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range);
            }
            __name(is2, "is");
            __name2(is2, "is");
            TextEdit2.is = is2;
          })(TextEdit || (TextEdit = {}));
          (function(ChangeAnnotation2) {
            function create4(label, needsConfirmation, description) {
              const result = { label };
              if (needsConfirmation !== void 0) {
                result.needsConfirmation = needsConfirmation;
              }
              if (description !== void 0) {
                result.description = description;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            ChangeAnnotation2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === void 0) && (Is.string(candidate.description) || candidate.description === void 0);
            }
            __name(is2, "is");
            __name2(is2, "is");
            ChangeAnnotation2.is = is2;
          })(ChangeAnnotation || (ChangeAnnotation = {}));
          (function(ChangeAnnotationIdentifier2) {
            function is2(value2) {
              const candidate = value2;
              return Is.string(candidate);
            }
            __name(is2, "is");
            __name2(is2, "is");
            ChangeAnnotationIdentifier2.is = is2;
          })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));
          (function(AnnotatedTextEdit2) {
            function replace2(range3, newText, annotation) {
              return { range: range3, newText, annotationId: annotation };
            }
            __name(replace2, "replace");
            __name2(replace2, "replace");
            AnnotatedTextEdit2.replace = replace2;
            function insert(position5, newText, annotation) {
              return { range: { start: position5, end: position5 }, newText, annotationId: annotation };
            }
            __name(insert, "insert");
            __name2(insert, "insert");
            AnnotatedTextEdit2.insert = insert;
            function del(range3, annotation) {
              return { range: range3, newText: "", annotationId: annotation };
            }
            __name(del, "del");
            __name2(del, "del");
            AnnotatedTextEdit2.del = del;
            function is2(value2) {
              const candidate = value2;
              return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
            }
            __name(is2, "is");
            __name2(is2, "is");
            AnnotatedTextEdit2.is = is2;
          })(AnnotatedTextEdit || (AnnotatedTextEdit = {}));
          (function(TextDocumentEdit2) {
            function create4(textDocument, edits) {
              return { textDocument, edits };
            }
            __name(create4, "create");
            __name2(create4, "create");
            TextDocumentEdit2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);
            }
            __name(is2, "is");
            __name2(is2, "is");
            TextDocumentEdit2.is = is2;
          })(TextDocumentEdit || (TextDocumentEdit = {}));
          (function(CreateFile2) {
            function create4(uri, options2, annotation) {
              let result = {
                kind: "create",
                uri
              };
              if (options2 !== void 0 && (options2.overwrite !== void 0 || options2.ignoreIfExists !== void 0)) {
                result.options = options2;
              }
              if (annotation !== void 0) {
                result.annotationId = annotation;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            CreateFile2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
            }
            __name(is2, "is");
            __name2(is2, "is");
            CreateFile2.is = is2;
          })(CreateFile || (CreateFile = {}));
          (function(RenameFile2) {
            function create4(oldUri, newUri, options2, annotation) {
              let result = {
                kind: "rename",
                oldUri,
                newUri
              };
              if (options2 !== void 0 && (options2.overwrite !== void 0 || options2.ignoreIfExists !== void 0)) {
                result.options = options2;
              }
              if (annotation !== void 0) {
                result.annotationId = annotation;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            RenameFile2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
            }
            __name(is2, "is");
            __name2(is2, "is");
            RenameFile2.is = is2;
          })(RenameFile || (RenameFile = {}));
          (function(DeleteFile2) {
            function create4(uri, options2, annotation) {
              let result = {
                kind: "delete",
                uri
              };
              if (options2 !== void 0 && (options2.recursive !== void 0 || options2.ignoreIfNotExists !== void 0)) {
                result.options = options2;
              }
              if (annotation !== void 0) {
                result.annotationId = annotation;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            DeleteFile2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
            }
            __name(is2, "is");
            __name2(is2, "is");
            DeleteFile2.is = is2;
          })(DeleteFile || (DeleteFile = {}));
          (function(WorkspaceEdit2) {
            function is2(value2) {
              let candidate = value2;
              return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every((change2) => {
                if (Is.string(change2.kind)) {
                  return CreateFile.is(change2) || RenameFile.is(change2) || DeleteFile.is(change2);
                } else {
                  return TextDocumentEdit.is(change2);
                }
              }));
            }
            __name(is2, "is");
            __name2(is2, "is");
            WorkspaceEdit2.is = is2;
          })(WorkspaceEdit || (WorkspaceEdit = {}));
          TextEditChangeImpl = class {
            static {
              __name(this, "TextEditChangeImpl");
            }
            static {
              __name2(this, "TextEditChangeImpl");
            }
            constructor(edits, changeAnnotations) {
              this.edits = edits;
              this.changeAnnotations = changeAnnotations;
            }
            insert(position5, newText, annotation) {
              let edit;
              let id41;
              if (annotation === void 0) {
                edit = TextEdit.insert(position5, newText);
              } else if (ChangeAnnotationIdentifier.is(annotation)) {
                id41 = annotation;
                edit = AnnotatedTextEdit.insert(position5, newText, annotation);
              } else {
                this.assertChangeAnnotations(this.changeAnnotations);
                id41 = this.changeAnnotations.manage(annotation);
                edit = AnnotatedTextEdit.insert(position5, newText, id41);
              }
              this.edits.push(edit);
              if (id41 !== void 0) {
                return id41;
              }
            }
            replace(range3, newText, annotation) {
              let edit;
              let id41;
              if (annotation === void 0) {
                edit = TextEdit.replace(range3, newText);
              } else if (ChangeAnnotationIdentifier.is(annotation)) {
                id41 = annotation;
                edit = AnnotatedTextEdit.replace(range3, newText, annotation);
              } else {
                this.assertChangeAnnotations(this.changeAnnotations);
                id41 = this.changeAnnotations.manage(annotation);
                edit = AnnotatedTextEdit.replace(range3, newText, id41);
              }
              this.edits.push(edit);
              if (id41 !== void 0) {
                return id41;
              }
            }
            delete(range3, annotation) {
              let edit;
              let id41;
              if (annotation === void 0) {
                edit = TextEdit.del(range3);
              } else if (ChangeAnnotationIdentifier.is(annotation)) {
                id41 = annotation;
                edit = AnnotatedTextEdit.del(range3, annotation);
              } else {
                this.assertChangeAnnotations(this.changeAnnotations);
                id41 = this.changeAnnotations.manage(annotation);
                edit = AnnotatedTextEdit.del(range3, id41);
              }
              this.edits.push(edit);
              if (id41 !== void 0) {
                return id41;
              }
            }
            add(edit) {
              this.edits.push(edit);
            }
            all() {
              return this.edits;
            }
            clear() {
              this.edits.splice(0, this.edits.length);
            }
            assertChangeAnnotations(value2) {
              if (value2 === void 0) {
                throw new Error(`Text edit change is not configured to manage change annotations.`);
              }
            }
          };
          ChangeAnnotations = class {
            static {
              __name(this, "ChangeAnnotations");
            }
            static {
              __name2(this, "ChangeAnnotations");
            }
            constructor(annotations) {
              this._annotations = annotations === void 0 ? /* @__PURE__ */ Object.create(null) : annotations;
              this._counter = 0;
              this._size = 0;
            }
            all() {
              return this._annotations;
            }
            get size() {
              return this._size;
            }
            manage(idOrAnnotation, annotation) {
              let id41;
              if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {
                id41 = idOrAnnotation;
              } else {
                id41 = this.nextId();
                annotation = idOrAnnotation;
              }
              if (this._annotations[id41] !== void 0) {
                throw new Error(`Id ${id41} is already in use.`);
              }
              if (annotation === void 0) {
                throw new Error(`No annotation provided for id ${id41}`);
              }
              this._annotations[id41] = annotation;
              this._size++;
              return id41;
            }
            nextId() {
              this._counter++;
              return this._counter.toString();
            }
          };
          WorkspaceChange = class {
            static {
              __name(this, "WorkspaceChange");
            }
            static {
              __name2(this, "WorkspaceChange");
            }
            constructor(workspaceEdit) {
              this._textEditChanges = /* @__PURE__ */ Object.create(null);
              if (workspaceEdit !== void 0) {
                this._workspaceEdit = workspaceEdit;
                if (workspaceEdit.documentChanges) {
                  this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
                  workspaceEdit.changeAnnotations = this._changeAnnotations.all();
                  workspaceEdit.documentChanges.forEach((change2) => {
                    if (TextDocumentEdit.is(change2)) {
                      const textEditChange = new TextEditChangeImpl(change2.edits, this._changeAnnotations);
                      this._textEditChanges[change2.textDocument.uri] = textEditChange;
                    }
                  });
                } else if (workspaceEdit.changes) {
                  Object.keys(workspaceEdit.changes).forEach((key) => {
                    const textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
                    this._textEditChanges[key] = textEditChange;
                  });
                }
              } else {
                this._workspaceEdit = {};
              }
            }
            /**
             * Returns the underlying {@link WorkspaceEdit} literal
             * use to be returned from a workspace edit operation like rename.
             */
            get edit() {
              this.initDocumentChanges();
              if (this._changeAnnotations !== void 0) {
                if (this._changeAnnotations.size === 0) {
                  this._workspaceEdit.changeAnnotations = void 0;
                } else {
                  this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
                }
              }
              return this._workspaceEdit;
            }
            getTextEditChange(key) {
              if (OptionalVersionedTextDocumentIdentifier.is(key)) {
                this.initDocumentChanges();
                if (this._workspaceEdit.documentChanges === void 0) {
                  throw new Error("Workspace edit is not configured for document changes.");
                }
                const textDocument = { uri: key.uri, version: key.version };
                let result = this._textEditChanges[textDocument.uri];
                if (!result) {
                  const edits = [];
                  const textDocumentEdit = {
                    textDocument,
                    edits
                  };
                  this._workspaceEdit.documentChanges.push(textDocumentEdit);
                  result = new TextEditChangeImpl(edits, this._changeAnnotations);
                  this._textEditChanges[textDocument.uri] = result;
                }
                return result;
              } else {
                this.initChanges();
                if (this._workspaceEdit.changes === void 0) {
                  throw new Error("Workspace edit is not configured for normal text edit changes.");
                }
                let result = this._textEditChanges[key];
                if (!result) {
                  let edits = [];
                  this._workspaceEdit.changes[key] = edits;
                  result = new TextEditChangeImpl(edits);
                  this._textEditChanges[key] = result;
                }
                return result;
              }
            }
            initDocumentChanges() {
              if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) {
                this._changeAnnotations = new ChangeAnnotations();
                this._workspaceEdit.documentChanges = [];
                this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
              }
            }
            initChanges() {
              if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) {
                this._workspaceEdit.changes = /* @__PURE__ */ Object.create(null);
              }
            }
            createFile(uri, optionsOrAnnotation, options2) {
              this.initDocumentChanges();
              if (this._workspaceEdit.documentChanges === void 0) {
                throw new Error("Workspace edit is not configured for document changes.");
              }
              let annotation;
              if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
                annotation = optionsOrAnnotation;
              } else {
                options2 = optionsOrAnnotation;
              }
              let operation;
              let id41;
              if (annotation === void 0) {
                operation = CreateFile.create(uri, options2);
              } else {
                id41 = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
                operation = CreateFile.create(uri, options2, id41);
              }
              this._workspaceEdit.documentChanges.push(operation);
              if (id41 !== void 0) {
                return id41;
              }
            }
            renameFile(oldUri, newUri, optionsOrAnnotation, options2) {
              this.initDocumentChanges();
              if (this._workspaceEdit.documentChanges === void 0) {
                throw new Error("Workspace edit is not configured for document changes.");
              }
              let annotation;
              if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
                annotation = optionsOrAnnotation;
              } else {
                options2 = optionsOrAnnotation;
              }
              let operation;
              let id41;
              if (annotation === void 0) {
                operation = RenameFile.create(oldUri, newUri, options2);
              } else {
                id41 = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
                operation = RenameFile.create(oldUri, newUri, options2, id41);
              }
              this._workspaceEdit.documentChanges.push(operation);
              if (id41 !== void 0) {
                return id41;
              }
            }
            deleteFile(uri, optionsOrAnnotation, options2) {
              this.initDocumentChanges();
              if (this._workspaceEdit.documentChanges === void 0) {
                throw new Error("Workspace edit is not configured for document changes.");
              }
              let annotation;
              if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
                annotation = optionsOrAnnotation;
              } else {
                options2 = optionsOrAnnotation;
              }
              let operation;
              let id41;
              if (annotation === void 0) {
                operation = DeleteFile.create(uri, options2);
              } else {
                id41 = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
                operation = DeleteFile.create(uri, options2, id41);
              }
              this._workspaceEdit.documentChanges.push(operation);
              if (id41 !== void 0) {
                return id41;
              }
            }
          };
          (function(TextDocumentIdentifier2) {
            function create4(uri) {
              return { uri };
            }
            __name(create4, "create");
            __name2(create4, "create");
            TextDocumentIdentifier2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.string(candidate.uri);
            }
            __name(is2, "is");
            __name2(is2, "is");
            TextDocumentIdentifier2.is = is2;
          })(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
          (function(VersionedTextDocumentIdentifier2) {
            function create4(uri, version3) {
              return { uri, version: version3 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            VersionedTextDocumentIdentifier2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
            }
            __name(is2, "is");
            __name2(is2, "is");
            VersionedTextDocumentIdentifier2.is = is2;
          })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
          (function(OptionalVersionedTextDocumentIdentifier2) {
            function create4(uri, version3) {
              return { uri, version: version3 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            OptionalVersionedTextDocumentIdentifier2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
            }
            __name(is2, "is");
            __name2(is2, "is");
            OptionalVersionedTextDocumentIdentifier2.is = is2;
          })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));
          (function(TextDocumentItem2) {
            function create4(uri, languageId, version3, text4) {
              return { uri, languageId, version: version3, text: text4 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            TextDocumentItem2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
            }
            __name(is2, "is");
            __name2(is2, "is");
            TextDocumentItem2.is = is2;
          })(TextDocumentItem || (TextDocumentItem = {}));
          (function(MarkupKind2) {
            MarkupKind2.PlainText = "plaintext";
            MarkupKind2.Markdown = "markdown";
            function is2(value2) {
              const candidate = value2;
              return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown;
            }
            __name(is2, "is");
            __name2(is2, "is");
            MarkupKind2.is = is2;
          })(MarkupKind || (MarkupKind = {}));
          (function(MarkupContent2) {
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(value2) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
            }
            __name(is2, "is");
            __name2(is2, "is");
            MarkupContent2.is = is2;
          })(MarkupContent || (MarkupContent = {}));
          (function(CompletionItemKind2) {
            CompletionItemKind2.Text = 1;
            CompletionItemKind2.Method = 2;
            CompletionItemKind2.Function = 3;
            CompletionItemKind2.Constructor = 4;
            CompletionItemKind2.Field = 5;
            CompletionItemKind2.Variable = 6;
            CompletionItemKind2.Class = 7;
            CompletionItemKind2.Interface = 8;
            CompletionItemKind2.Module = 9;
            CompletionItemKind2.Property = 10;
            CompletionItemKind2.Unit = 11;
            CompletionItemKind2.Value = 12;
            CompletionItemKind2.Enum = 13;
            CompletionItemKind2.Keyword = 14;
            CompletionItemKind2.Snippet = 15;
            CompletionItemKind2.Color = 16;
            CompletionItemKind2.File = 17;
            CompletionItemKind2.Reference = 18;
            CompletionItemKind2.Folder = 19;
            CompletionItemKind2.EnumMember = 20;
            CompletionItemKind2.Constant = 21;
            CompletionItemKind2.Struct = 22;
            CompletionItemKind2.Event = 23;
            CompletionItemKind2.Operator = 24;
            CompletionItemKind2.TypeParameter = 25;
          })(CompletionItemKind || (CompletionItemKind = {}));
          (function(InsertTextFormat2) {
            InsertTextFormat2.PlainText = 1;
            InsertTextFormat2.Snippet = 2;
          })(InsertTextFormat || (InsertTextFormat = {}));
          (function(CompletionItemTag2) {
            CompletionItemTag2.Deprecated = 1;
          })(CompletionItemTag || (CompletionItemTag = {}));
          (function(InsertReplaceEdit2) {
            function create4(newText, insert, replace2) {
              return { newText, insert, replace: replace2 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InsertReplaceEdit2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);
            }
            __name(is2, "is");
            __name2(is2, "is");
            InsertReplaceEdit2.is = is2;
          })(InsertReplaceEdit || (InsertReplaceEdit = {}));
          (function(InsertTextMode2) {
            InsertTextMode2.asIs = 1;
            InsertTextMode2.adjustIndentation = 2;
          })(InsertTextMode || (InsertTextMode = {}));
          (function(CompletionItemLabelDetails2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && (Is.string(candidate.detail) || candidate.detail === void 0) && (Is.string(candidate.description) || candidate.description === void 0);
            }
            __name(is2, "is");
            __name2(is2, "is");
            CompletionItemLabelDetails2.is = is2;
          })(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));
          (function(CompletionItem2) {
            function create4(label) {
              return { label };
            }
            __name(create4, "create");
            __name2(create4, "create");
            CompletionItem2.create = create4;
          })(CompletionItem || (CompletionItem = {}));
          (function(CompletionList2) {
            function create4(items, isIncomplete) {
              return { items: items ? items : [], isIncomplete: !!isIncomplete };
            }
            __name(create4, "create");
            __name2(create4, "create");
            CompletionList2.create = create4;
          })(CompletionList || (CompletionList = {}));
          (function(MarkedString2) {
            function fromPlainText(plainText) {
              return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
            }
            __name(fromPlainText, "fromPlainText");
            __name2(fromPlainText, "fromPlainText");
            MarkedString2.fromPlainText = fromPlainText;
            function is2(value2) {
              const candidate = value2;
              return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);
            }
            __name(is2, "is");
            __name2(is2, "is");
            MarkedString2.is = is2;
          })(MarkedString || (MarkedString = {}));
          (function(Hover2) {
            function is2(value2) {
              let candidate = value2;
              return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value2.range === void 0 || Range.is(value2.range));
            }
            __name(is2, "is");
            __name2(is2, "is");
            Hover2.is = is2;
          })(Hover || (Hover = {}));
          (function(ParameterInformation2) {
            function create4(label, documentation) {
              return documentation ? { label, documentation } : { label };
            }
            __name(create4, "create");
            __name2(create4, "create");
            ParameterInformation2.create = create4;
          })(ParameterInformation || (ParameterInformation = {}));
          (function(SignatureInformation2) {
            function create4(label, documentation, ...parameters) {
              let result = { label };
              if (Is.defined(documentation)) {
                result.documentation = documentation;
              }
              if (Is.defined(parameters)) {
                result.parameters = parameters;
              } else {
                result.parameters = [];
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            SignatureInformation2.create = create4;
          })(SignatureInformation || (SignatureInformation = {}));
          (function(DocumentHighlightKind2) {
            DocumentHighlightKind2.Text = 1;
            DocumentHighlightKind2.Read = 2;
            DocumentHighlightKind2.Write = 3;
          })(DocumentHighlightKind || (DocumentHighlightKind = {}));
          (function(DocumentHighlight2) {
            function create4(range3, kind) {
              let result = { range: range3 };
              if (Is.number(kind)) {
                result.kind = kind;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            DocumentHighlight2.create = create4;
          })(DocumentHighlight || (DocumentHighlight = {}));
          (function(SymbolKind2) {
            SymbolKind2.File = 1;
            SymbolKind2.Module = 2;
            SymbolKind2.Namespace = 3;
            SymbolKind2.Package = 4;
            SymbolKind2.Class = 5;
            SymbolKind2.Method = 6;
            SymbolKind2.Property = 7;
            SymbolKind2.Field = 8;
            SymbolKind2.Constructor = 9;
            SymbolKind2.Enum = 10;
            SymbolKind2.Interface = 11;
            SymbolKind2.Function = 12;
            SymbolKind2.Variable = 13;
            SymbolKind2.Constant = 14;
            SymbolKind2.String = 15;
            SymbolKind2.Number = 16;
            SymbolKind2.Boolean = 17;
            SymbolKind2.Array = 18;
            SymbolKind2.Object = 19;
            SymbolKind2.Key = 20;
            SymbolKind2.Null = 21;
            SymbolKind2.EnumMember = 22;
            SymbolKind2.Struct = 23;
            SymbolKind2.Event = 24;
            SymbolKind2.Operator = 25;
            SymbolKind2.TypeParameter = 26;
          })(SymbolKind || (SymbolKind = {}));
          (function(SymbolTag2) {
            SymbolTag2.Deprecated = 1;
          })(SymbolTag || (SymbolTag = {}));
          (function(SymbolInformation2) {
            function create4(name, kind, range3, uri, containerName) {
              let result = {
                name,
                kind,
                location: { uri, range: range3 }
              };
              if (containerName) {
                result.containerName = containerName;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            SymbolInformation2.create = create4;
          })(SymbolInformation || (SymbolInformation = {}));
          (function(WorkspaceSymbol2) {
            function create4(name, kind, uri, range3) {
              return range3 !== void 0 ? { name, kind, location: { uri, range: range3 } } : { name, kind, location: { uri } };
            }
            __name(create4, "create");
            __name2(create4, "create");
            WorkspaceSymbol2.create = create4;
          })(WorkspaceSymbol || (WorkspaceSymbol = {}));
          (function(DocumentSymbol2) {
            function create4(name, detail, kind, range3, selectionRange, children2) {
              let result = {
                name,
                detail,
                kind,
                range: range3,
                selectionRange
              };
              if (children2 !== void 0) {
                result.children = children2;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            DocumentSymbol2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children)) && (candidate.tags === void 0 || Array.isArray(candidate.tags));
            }
            __name(is2, "is");
            __name2(is2, "is");
            DocumentSymbol2.is = is2;
          })(DocumentSymbol || (DocumentSymbol = {}));
          (function(CodeActionKind2) {
            CodeActionKind2.Empty = "";
            CodeActionKind2.QuickFix = "quickfix";
            CodeActionKind2.Refactor = "refactor";
            CodeActionKind2.RefactorExtract = "refactor.extract";
            CodeActionKind2.RefactorInline = "refactor.inline";
            CodeActionKind2.RefactorRewrite = "refactor.rewrite";
            CodeActionKind2.Source = "source";
            CodeActionKind2.SourceOrganizeImports = "source.organizeImports";
            CodeActionKind2.SourceFixAll = "source.fixAll";
          })(CodeActionKind || (CodeActionKind = {}));
          (function(CodeActionTriggerKind2) {
            CodeActionTriggerKind2.Invoked = 1;
            CodeActionTriggerKind2.Automatic = 2;
          })(CodeActionTriggerKind || (CodeActionTriggerKind = {}));
          (function(CodeActionContext2) {
            function create4(diagnostics, only, triggerKind) {
              let result = { diagnostics };
              if (only !== void 0 && only !== null) {
                result.only = only;
              }
              if (triggerKind !== void 0 && triggerKind !== null) {
                result.triggerKind = triggerKind;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            CodeActionContext2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string)) && (candidate.triggerKind === void 0 || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);
            }
            __name(is2, "is");
            __name2(is2, "is");
            CodeActionContext2.is = is2;
          })(CodeActionContext || (CodeActionContext = {}));
          (function(CodeAction2) {
            function create4(title2, kindOrCommandOrEdit, kind) {
              let result = { title: title2 };
              let checkKind = true;
              if (typeof kindOrCommandOrEdit === "string") {
                checkKind = false;
                result.kind = kindOrCommandOrEdit;
              } else if (Command.is(kindOrCommandOrEdit)) {
                result.command = kindOrCommandOrEdit;
              } else {
                result.edit = kindOrCommandOrEdit;
              }
              if (checkKind && kind !== void 0) {
                result.kind = kind;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            CodeAction2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
            }
            __name(is2, "is");
            __name2(is2, "is");
            CodeAction2.is = is2;
          })(CodeAction || (CodeAction = {}));
          (function(CodeLens2) {
            function create4(range3, data6) {
              let result = { range: range3 };
              if (Is.defined(data6)) {
                result.data = data6;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            CodeLens2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
            }
            __name(is2, "is");
            __name2(is2, "is");
            CodeLens2.is = is2;
          })(CodeLens || (CodeLens = {}));
          (function(FormattingOptions2) {
            function create4(tabSize, insertSpaces) {
              return { tabSize, insertSpaces };
            }
            __name(create4, "create");
            __name2(create4, "create");
            FormattingOptions2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
            }
            __name(is2, "is");
            __name2(is2, "is");
            FormattingOptions2.is = is2;
          })(FormattingOptions || (FormattingOptions = {}));
          (function(DocumentLink2) {
            function create4(range3, target, data6) {
              return { range: range3, target, data: data6 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            DocumentLink2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
            }
            __name(is2, "is");
            __name2(is2, "is");
            DocumentLink2.is = is2;
          })(DocumentLink || (DocumentLink = {}));
          (function(SelectionRange2) {
            function create4(range3, parent4) {
              return { range: range3, parent: parent4 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            SelectionRange2.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent));
            }
            __name(is2, "is");
            __name2(is2, "is");
            SelectionRange2.is = is2;
          })(SelectionRange || (SelectionRange = {}));
          (function(SemanticTokenTypes2) {
            SemanticTokenTypes2["namespace"] = "namespace";
            SemanticTokenTypes2["type"] = "type";
            SemanticTokenTypes2["class"] = "class";
            SemanticTokenTypes2["enum"] = "enum";
            SemanticTokenTypes2["interface"] = "interface";
            SemanticTokenTypes2["struct"] = "struct";
            SemanticTokenTypes2["typeParameter"] = "typeParameter";
            SemanticTokenTypes2["parameter"] = "parameter";
            SemanticTokenTypes2["variable"] = "variable";
            SemanticTokenTypes2["property"] = "property";
            SemanticTokenTypes2["enumMember"] = "enumMember";
            SemanticTokenTypes2["event"] = "event";
            SemanticTokenTypes2["function"] = "function";
            SemanticTokenTypes2["method"] = "method";
            SemanticTokenTypes2["macro"] = "macro";
            SemanticTokenTypes2["keyword"] = "keyword";
            SemanticTokenTypes2["modifier"] = "modifier";
            SemanticTokenTypes2["comment"] = "comment";
            SemanticTokenTypes2["string"] = "string";
            SemanticTokenTypes2["number"] = "number";
            SemanticTokenTypes2["regexp"] = "regexp";
            SemanticTokenTypes2["operator"] = "operator";
            SemanticTokenTypes2["decorator"] = "decorator";
          })(SemanticTokenTypes || (SemanticTokenTypes = {}));
          (function(SemanticTokenModifiers2) {
            SemanticTokenModifiers2["declaration"] = "declaration";
            SemanticTokenModifiers2["definition"] = "definition";
            SemanticTokenModifiers2["readonly"] = "readonly";
            SemanticTokenModifiers2["static"] = "static";
            SemanticTokenModifiers2["deprecated"] = "deprecated";
            SemanticTokenModifiers2["abstract"] = "abstract";
            SemanticTokenModifiers2["async"] = "async";
            SemanticTokenModifiers2["modification"] = "modification";
            SemanticTokenModifiers2["documentation"] = "documentation";
            SemanticTokenModifiers2["defaultLibrary"] = "defaultLibrary";
          })(SemanticTokenModifiers || (SemanticTokenModifiers = {}));
          (function(SemanticTokens2) {
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number");
            }
            __name(is2, "is");
            __name2(is2, "is");
            SemanticTokens2.is = is2;
          })(SemanticTokens || (SemanticTokens = {}));
          (function(InlineValueText2) {
            function create4(range3, text4) {
              return { range: range3, text: text4 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlineValueText2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);
            }
            __name(is2, "is");
            __name2(is2, "is");
            InlineValueText2.is = is2;
          })(InlineValueText || (InlineValueText = {}));
          (function(InlineValueVariableLookup2) {
            function create4(range3, variableName, caseSensitiveLookup) {
              return { range: range3, variableName, caseSensitiveLookup };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlineValueVariableLookup2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup) && (Is.string(candidate.variableName) || candidate.variableName === void 0);
            }
            __name(is2, "is");
            __name2(is2, "is");
            InlineValueVariableLookup2.is = is2;
          })(InlineValueVariableLookup || (InlineValueVariableLookup = {}));
          (function(InlineValueEvaluatableExpression2) {
            function create4(range3, expression) {
              return { range: range3, expression };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlineValueEvaluatableExpression2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && (Is.string(candidate.expression) || candidate.expression === void 0);
            }
            __name(is2, "is");
            __name2(is2, "is");
            InlineValueEvaluatableExpression2.is = is2;
          })(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));
          (function(InlineValueContext2) {
            function create4(frameId, stoppedLocation) {
              return { frameId, stoppedLocation };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlineValueContext2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.defined(candidate) && Range.is(value2.stoppedLocation);
            }
            __name(is2, "is");
            __name2(is2, "is");
            InlineValueContext2.is = is2;
          })(InlineValueContext || (InlineValueContext = {}));
          (function(InlayHintKind2) {
            InlayHintKind2.Type = 1;
            InlayHintKind2.Parameter = 2;
            function is2(value2) {
              return value2 === 1 || value2 === 2;
            }
            __name(is2, "is");
            __name2(is2, "is");
            InlayHintKind2.is = is2;
          })(InlayHintKind || (InlayHintKind = {}));
          (function(InlayHintLabelPart2) {
            function create4(value2) {
              return { value: value2 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlayHintLabelPart2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.location === void 0 || Location.is(candidate.location)) && (candidate.command === void 0 || Command.is(candidate.command));
            }
            __name(is2, "is");
            __name2(is2, "is");
            InlayHintLabelPart2.is = is2;
          })(InlayHintLabelPart || (InlayHintLabelPart = {}));
          (function(InlayHint2) {
            function create4(position5, label, kind) {
              const result = { position: position5, label };
              if (kind !== void 0) {
                result.kind = kind;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlayHint2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === void 0 || InlayHintKind.is(candidate.kind)) && candidate.textEdits === void 0 || Is.typedArray(candidate.textEdits, TextEdit.is) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === void 0 || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === void 0 || Is.boolean(candidate.paddingRight));
            }
            __name(is2, "is");
            __name2(is2, "is");
            InlayHint2.is = is2;
          })(InlayHint || (InlayHint = {}));
          (function(StringValue2) {
            function createSnippet(value2) {
              return { kind: "snippet", value: value2 };
            }
            __name(createSnippet, "createSnippet");
            __name2(createSnippet, "createSnippet");
            StringValue2.createSnippet = createSnippet;
          })(StringValue || (StringValue = {}));
          (function(InlineCompletionItem2) {
            function create4(insertText, filterText, range3, command) {
              return { insertText, filterText, range: range3, command };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlineCompletionItem2.create = create4;
          })(InlineCompletionItem || (InlineCompletionItem = {}));
          (function(InlineCompletionList2) {
            function create4(items) {
              return { items };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlineCompletionList2.create = create4;
          })(InlineCompletionList || (InlineCompletionList = {}));
          (function(InlineCompletionTriggerKind2) {
            InlineCompletionTriggerKind2.Invoked = 0;
            InlineCompletionTriggerKind2.Automatic = 1;
          })(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));
          (function(SelectedCompletionInfo2) {
            function create4(range3, text4) {
              return { range: range3, text: text4 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            SelectedCompletionInfo2.create = create4;
          })(SelectedCompletionInfo || (SelectedCompletionInfo = {}));
          (function(InlineCompletionContext2) {
            function create4(triggerKind, selectedCompletionInfo) {
              return { triggerKind, selectedCompletionInfo };
            }
            __name(create4, "create");
            __name2(create4, "create");
            InlineCompletionContext2.create = create4;
          })(InlineCompletionContext || (InlineCompletionContext = {}));
          (function(WorkspaceFolder2) {
            function is2(value2) {
              const candidate = value2;
              return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);
            }
            __name(is2, "is");
            __name2(is2, "is");
            WorkspaceFolder2.is = is2;
          })(WorkspaceFolder || (WorkspaceFolder = {}));
          EOL = ["\n", "\r\n", "\r"];
          (function(TextDocument3) {
            function create4(uri, languageId, version3, content) {
              return new FullTextDocument(uri, languageId, version3, content);
            }
            __name(create4, "create");
            __name2(create4, "create");
            TextDocument3.create = create4;
            function is2(value2) {
              let candidate = value2;
              return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
            }
            __name(is2, "is");
            __name2(is2, "is");
            TextDocument3.is = is2;
            function applyEdits(document2, edits) {
              let text4 = document2.getText();
              let sortedEdits = mergeSort2(edits, (a2, b3) => {
                let diff2 = a2.range.start.line - b3.range.start.line;
                if (diff2 === 0) {
                  return a2.range.start.character - b3.range.start.character;
                }
                return diff2;
              });
              let lastModifiedOffset = text4.length;
              for (let i2 = sortedEdits.length - 1; i2 >= 0; i2--) {
                let e3 = sortedEdits[i2];
                let startOffset = document2.offsetAt(e3.range.start);
                let endOffset = document2.offsetAt(e3.range.end);
                if (endOffset <= lastModifiedOffset) {
                  text4 = text4.substring(0, startOffset) + e3.newText + text4.substring(endOffset, text4.length);
                } else {
                  throw new Error("Overlapping edit");
                }
                lastModifiedOffset = startOffset;
              }
              return text4;
            }
            __name(applyEdits, "applyEdits");
            __name2(applyEdits, "applyEdits");
            TextDocument3.applyEdits = applyEdits;
            function mergeSort2(data6, compare) {
              if (data6.length <= 1) {
                return data6;
              }
              const p3 = data6.length / 2 | 0;
              const left3 = data6.slice(0, p3);
              const right3 = data6.slice(p3);
              mergeSort2(left3, compare);
              mergeSort2(right3, compare);
              let leftIdx = 0;
              let rightIdx = 0;
              let i2 = 0;
              while (leftIdx < left3.length && rightIdx < right3.length) {
                let ret = compare(left3[leftIdx], right3[rightIdx]);
                if (ret <= 0) {
                  data6[i2++] = left3[leftIdx++];
                } else {
                  data6[i2++] = right3[rightIdx++];
                }
              }
              while (leftIdx < left3.length) {
                data6[i2++] = left3[leftIdx++];
              }
              while (rightIdx < right3.length) {
                data6[i2++] = right3[rightIdx++];
              }
              return data6;
            }
            __name(mergeSort2, "mergeSort2");
            __name2(mergeSort2, "mergeSort");
          })(TextDocument || (TextDocument = {}));
          FullTextDocument = class {
            static {
              __name(this, "FullTextDocument");
            }
            static {
              __name2(this, "FullTextDocument");
            }
            constructor(uri, languageId, version3, content) {
              this._uri = uri;
              this._languageId = languageId;
              this._version = version3;
              this._content = content;
              this._lineOffsets = void 0;
            }
            get uri() {
              return this._uri;
            }
            get languageId() {
              return this._languageId;
            }
            get version() {
              return this._version;
            }
            getText(range3) {
              if (range3) {
                let start3 = this.offsetAt(range3.start);
                let end2 = this.offsetAt(range3.end);
                return this._content.substring(start3, end2);
              }
              return this._content;
            }
            update(event3, version3) {
              this._content = event3.text;
              this._version = version3;
              this._lineOffsets = void 0;
            }
            getLineOffsets() {
              if (this._lineOffsets === void 0) {
                let lineOffsets = [];
                let text4 = this._content;
                let isLineStart = true;
                for (let i2 = 0; i2 < text4.length; i2++) {
                  if (isLineStart) {
                    lineOffsets.push(i2);
                    isLineStart = false;
                  }
                  let ch = text4.charAt(i2);
                  isLineStart = ch === "\r" || ch === "\n";
                  if (ch === "\r" && i2 + 1 < text4.length && text4.charAt(i2 + 1) === "\n") {
                    i2++;
                  }
                }
                if (isLineStart && text4.length > 0) {
                  lineOffsets.push(text4.length);
                }
                this._lineOffsets = lineOffsets;
              }
              return this._lineOffsets;
            }
            positionAt(offset) {
              offset = Math.max(Math.min(offset, this._content.length), 0);
              let lineOffsets = this.getLineOffsets();
              let low = 0, high = lineOffsets.length;
              if (high === 0) {
                return Position.create(0, offset);
              }
              while (low < high) {
                let mid = Math.floor((low + high) / 2);
                if (lineOffsets[mid] > offset) {
                  high = mid;
                } else {
                  low = mid + 1;
                }
              }
              let line2 = low - 1;
              return Position.create(line2, offset - lineOffsets[line2]);
            }
            offsetAt(position5) {
              let lineOffsets = this.getLineOffsets();
              if (position5.line >= lineOffsets.length) {
                return this._content.length;
              } else if (position5.line < 0) {
                return 0;
              }
              let lineOffset = lineOffsets[position5.line];
              let nextLineOffset = position5.line + 1 < lineOffsets.length ? lineOffsets[position5.line + 1] : this._content.length;
              return Math.max(Math.min(lineOffset + position5.character, nextLineOffset), lineOffset);
            }
            get lineCount() {
              return this.getLineOffsets().length;
            }
          };
          (function(Is2) {
            const toString42 = Object.prototype.toString;
            function defined(value2) {
              return typeof value2 !== "undefined";
            }
            __name(defined, "defined");
            __name2(defined, "defined");
            Is2.defined = defined;
            function undefined2(value2) {
              return typeof value2 === "undefined";
            }
            __name(undefined2, "undefined2");
            __name2(undefined2, "undefined");
            Is2.undefined = undefined2;
            function boolean(value2) {
              return value2 === true || value2 === false;
            }
            __name(boolean, "boolean");
            __name2(boolean, "boolean");
            Is2.boolean = boolean;
            function string3(value2) {
              return toString42.call(value2) === "[object String]";
            }
            __name(string3, "string");
            __name2(string3, "string");
            Is2.string = string3;
            function number7(value2) {
              return toString42.call(value2) === "[object Number]";
            }
            __name(number7, "number");
            __name2(number7, "number");
            Is2.number = number7;
            function numberRange(value2, min22, max10) {
              return toString42.call(value2) === "[object Number]" && min22 <= value2 && value2 <= max10;
            }
            __name(numberRange, "numberRange");
            __name2(numberRange, "numberRange");
            Is2.numberRange = numberRange;
            function integer22(value2) {
              return toString42.call(value2) === "[object Number]" && -2147483648 <= value2 && value2 <= 2147483647;
            }
            __name(integer22, "integer2");
            __name2(integer22, "integer");
            Is2.integer = integer22;
            function uinteger2(value2) {
              return toString42.call(value2) === "[object Number]" && 0 <= value2 && value2 <= 2147483647;
            }
            __name(uinteger2, "uinteger2");
            __name2(uinteger2, "uinteger");
            Is2.uinteger = uinteger2;
            function func(value2) {
              return toString42.call(value2) === "[object Function]";
            }
            __name(func, "func");
            __name2(func, "func");
            Is2.func = func;
            function objectLiteral(value2) {
              return value2 !== null && typeof value2 === "object";
            }
            __name(objectLiteral, "objectLiteral");
            __name2(objectLiteral, "objectLiteral");
            Is2.objectLiteral = objectLiteral;
            function typedArray(value2, check) {
              return Array.isArray(value2) && value2.every(check);
            }
            __name(typedArray, "typedArray");
            __name2(typedArray, "typedArray");
            Is2.typedArray = typedArray;
          })(Is || (Is = {}));
        }
      });
      require_ral = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/ral.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          var _ral;
          function RAL() {
            if (_ral === void 0) {
              throw new Error(`No runtime abstraction layer installed`);
            }
            return _ral;
          }
          __name(RAL, "RAL");
          __name2(RAL, "RAL");
          (function(RAL2) {
            function install(ral) {
              if (ral === void 0) {
                throw new Error(`No runtime abstraction layer provided`);
              }
              _ral = ral;
            }
            __name(install, "install");
            __name2(install, "install");
            RAL2.install = install;
          })(RAL || (RAL = {}));
          exports2.default = RAL;
        }
      });
      require_is = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/is.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.stringArray = exports2.array = exports2.func = exports2.error = exports2.number = exports2.string = exports2.boolean = void 0;
          function boolean(value2) {
            return value2 === true || value2 === false;
          }
          __name(boolean, "boolean");
          __name2(boolean, "boolean");
          exports2.boolean = boolean;
          function string3(value2) {
            return typeof value2 === "string" || value2 instanceof String;
          }
          __name(string3, "string");
          __name2(string3, "string");
          exports2.string = string3;
          function number7(value2) {
            return typeof value2 === "number" || value2 instanceof Number;
          }
          __name(number7, "number");
          __name2(number7, "number");
          exports2.number = number7;
          function error3(value2) {
            return value2 instanceof Error;
          }
          __name(error3, "error");
          __name2(error3, "error");
          exports2.error = error3;
          function func(value2) {
            return typeof value2 === "function";
          }
          __name(func, "func");
          __name2(func, "func");
          exports2.func = func;
          function array4(value2) {
            return Array.isArray(value2);
          }
          __name(array4, "array");
          __name2(array4, "array");
          exports2.array = array4;
          function stringArray(value2) {
            return array4(value2) && value2.every((elem) => string3(elem));
          }
          __name(stringArray, "stringArray");
          __name2(stringArray, "stringArray");
          exports2.stringArray = stringArray;
        }
      });
      require_events = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/events.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.Emitter = exports2.Event = void 0;
          var ral_1 = require_ral();
          var Event3;
          (function(Event22) {
            const _disposable = { dispose() {
            } };
            Event22.None = function() {
              return _disposable;
            };
          })(Event3 || (exports2.Event = Event3 = {}));
          var CallbackList = class {
            static {
              __name(this, "CallbackList");
            }
            static {
              __name2(this, "CallbackList");
            }
            add(callback, context = null, bucket) {
              if (!this._callbacks) {
                this._callbacks = [];
                this._contexts = [];
              }
              this._callbacks.push(callback);
              this._contexts.push(context);
              if (Array.isArray(bucket)) {
                bucket.push({ dispose: /* @__PURE__ */ __name2(() => this.remove(callback, context), "dispose") });
              }
            }
            remove(callback, context = null) {
              if (!this._callbacks) {
                return;
              }
              let foundCallbackWithDifferentContext = false;
              for (let i2 = 0, len = this._callbacks.length; i2 < len; i2++) {
                if (this._callbacks[i2] === callback) {
                  if (this._contexts[i2] === context) {
                    this._callbacks.splice(i2, 1);
                    this._contexts.splice(i2, 1);
                    return;
                  } else {
                    foundCallbackWithDifferentContext = true;
                  }
                }
              }
              if (foundCallbackWithDifferentContext) {
                throw new Error("When adding a listener with a context, you should remove it with the same context");
              }
            }
            invoke(...args) {
              if (!this._callbacks) {
                return [];
              }
              const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
              for (let i2 = 0, len = callbacks.length; i2 < len; i2++) {
                try {
                  ret.push(callbacks[i2].apply(contexts[i2], args));
                } catch (e3) {
                  (0, ral_1.default)().console.error(e3);
                }
              }
              return ret;
            }
            isEmpty() {
              return !this._callbacks || this._callbacks.length === 0;
            }
            dispose() {
              this._callbacks = void 0;
              this._contexts = void 0;
            }
          };
          var Emitter3 = class _Emitter {
            static {
              __name(this, "_Emitter");
            }
            static {
              __name2(this, "Emitter");
            }
            constructor(_options) {
              this._options = _options;
            }
            /**
             * For the public to allow to subscribe
             * to events from this Emitter
             */
            get event() {
              if (!this._event) {
                this._event = (listener, thisArgs, disposables) => {
                  if (!this._callbacks) {
                    this._callbacks = new CallbackList();
                  }
                  if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
                    this._options.onFirstListenerAdd(this);
                  }
                  this._callbacks.add(listener, thisArgs);
                  const result = {
                    dispose: /* @__PURE__ */ __name2(() => {
                      if (!this._callbacks) {
                        return;
                      }
                      this._callbacks.remove(listener, thisArgs);
                      result.dispose = _Emitter._noop;
                      if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
                        this._options.onLastListenerRemove(this);
                      }
                    }, "dispose")
                  };
                  if (Array.isArray(disposables)) {
                    disposables.push(result);
                  }
                  return result;
                };
              }
              return this._event;
            }
            /**
             * To be kept private to fire an event to
             * subscribers
             */
            fire(event3) {
              if (this._callbacks) {
                this._callbacks.invoke.call(this._callbacks, event3);
              }
            }
            dispose() {
              if (this._callbacks) {
                this._callbacks.dispose();
                this._callbacks = void 0;
              }
            }
          };
          exports2.Emitter = Emitter3;
          Emitter3._noop = function() {
          };
        }
      });
      require_cancellation = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/cancellation.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.CancellationTokenSource = exports2.CancellationToken = void 0;
          var ral_1 = require_ral();
          var Is2 = require_is();
          var events_1 = require_events();
          var CancellationToken11;
          (function(CancellationToken12) {
            CancellationToken12.None = Object.freeze({
              isCancellationRequested: false,
              onCancellationRequested: events_1.Event.None
            });
            CancellationToken12.Cancelled = Object.freeze({
              isCancellationRequested: true,
              onCancellationRequested: events_1.Event.None
            });
            function is2(value2) {
              const candidate = value2;
              return candidate && (candidate === CancellationToken12.None || candidate === CancellationToken12.Cancelled || Is2.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested);
            }
            __name(is2, "is");
            __name2(is2, "is");
            CancellationToken12.is = is2;
          })(CancellationToken11 || (exports2.CancellationToken = CancellationToken11 = {}));
          var shortcutEvent = Object.freeze(function(callback, context) {
            const handle = (0, ral_1.default)().timer.setTimeout(callback.bind(context), 0);
            return { dispose() {
              handle.dispose();
            } };
          });
          var MutableToken = class {
            static {
              __name(this, "MutableToken");
            }
            static {
              __name2(this, "MutableToken");
            }
            constructor() {
              this._isCancelled = false;
            }
            cancel() {
              if (!this._isCancelled) {
                this._isCancelled = true;
                if (this._emitter) {
                  this._emitter.fire(void 0);
                  this.dispose();
                }
              }
            }
            get isCancellationRequested() {
              return this._isCancelled;
            }
            get onCancellationRequested() {
              if (this._isCancelled) {
                return shortcutEvent;
              }
              if (!this._emitter) {
                this._emitter = new events_1.Emitter();
              }
              return this._emitter.event;
            }
            dispose() {
              if (this._emitter) {
                this._emitter.dispose();
                this._emitter = void 0;
              }
            }
          };
          var CancellationTokenSource3 = class {
            static {
              __name(this, "CancellationTokenSource3");
            }
            static {
              __name2(this, "CancellationTokenSource");
            }
            get token() {
              if (!this._token) {
                this._token = new MutableToken();
              }
              return this._token;
            }
            cancel() {
              if (!this._token) {
                this._token = CancellationToken11.Cancelled;
              } else {
                this._token.cancel();
              }
            }
            dispose() {
              if (!this._token) {
                this._token = CancellationToken11.None;
              } else if (this._token instanceof MutableToken) {
                this._token.dispose();
              }
            }
          };
          exports2.CancellationTokenSource = CancellationTokenSource3;
        }
      });
      require_messages = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messages.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.Message = exports2.NotificationType9 = exports2.NotificationType8 = exports2.NotificationType7 = exports2.NotificationType6 = exports2.NotificationType5 = exports2.NotificationType4 = exports2.NotificationType3 = exports2.NotificationType2 = exports2.NotificationType1 = exports2.NotificationType0 = exports2.NotificationType = exports2.RequestType9 = exports2.RequestType8 = exports2.RequestType7 = exports2.RequestType6 = exports2.RequestType5 = exports2.RequestType4 = exports2.RequestType3 = exports2.RequestType2 = exports2.RequestType1 = exports2.RequestType = exports2.RequestType0 = exports2.AbstractMessageSignature = exports2.ParameterStructures = exports2.ResponseError = exports2.ErrorCodes = void 0;
          var is2 = require_is();
          var ErrorCodes;
          (function(ErrorCodes2) {
            ErrorCodes2.ParseError = -32700;
            ErrorCodes2.InvalidRequest = -32600;
            ErrorCodes2.MethodNotFound = -32601;
            ErrorCodes2.InvalidParams = -32602;
            ErrorCodes2.InternalError = -32603;
            ErrorCodes2.jsonrpcReservedErrorRangeStart = -32099;
            ErrorCodes2.serverErrorStart = -32099;
            ErrorCodes2.MessageWriteError = -32099;
            ErrorCodes2.MessageReadError = -32098;
            ErrorCodes2.PendingResponseRejected = -32097;
            ErrorCodes2.ConnectionInactive = -32096;
            ErrorCodes2.ServerNotInitialized = -32002;
            ErrorCodes2.UnknownErrorCode = -32001;
            ErrorCodes2.jsonrpcReservedErrorRangeEnd = -32e3;
            ErrorCodes2.serverErrorEnd = -32e3;
          })(ErrorCodes || (exports2.ErrorCodes = ErrorCodes = {}));
          var ResponseError2 = class _ResponseError extends Error {
            static {
              __name(this, "_ResponseError");
            }
            static {
              __name2(this, "ResponseError");
            }
            constructor(code, message, data6) {
              super(message);
              this.code = is2.number(code) ? code : ErrorCodes.UnknownErrorCode;
              this.data = data6;
              Object.setPrototypeOf(this, _ResponseError.prototype);
            }
            toJson() {
              const result = {
                code: this.code,
                message: this.message
              };
              if (this.data !== void 0) {
                result.data = this.data;
              }
              return result;
            }
          };
          exports2.ResponseError = ResponseError2;
          var ParameterStructures = class _ParameterStructures {
            static {
              __name(this, "_ParameterStructures");
            }
            static {
              __name2(this, "ParameterStructures");
            }
            constructor(kind) {
              this.kind = kind;
            }
            static is(value2) {
              return value2 === _ParameterStructures.auto || value2 === _ParameterStructures.byName || value2 === _ParameterStructures.byPosition;
            }
            toString() {
              return this.kind;
            }
          };
          exports2.ParameterStructures = ParameterStructures;
          ParameterStructures.auto = new ParameterStructures("auto");
          ParameterStructures.byPosition = new ParameterStructures("byPosition");
          ParameterStructures.byName = new ParameterStructures("byName");
          var AbstractMessageSignature = class {
            static {
              __name(this, "AbstractMessageSignature");
            }
            static {
              __name2(this, "AbstractMessageSignature");
            }
            constructor(method, numberOfParams) {
              this.method = method;
              this.numberOfParams = numberOfParams;
            }
            get parameterStructures() {
              return ParameterStructures.auto;
            }
          };
          exports2.AbstractMessageSignature = AbstractMessageSignature;
          var RequestType0 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType0");
            }
            static {
              __name2(this, "RequestType0");
            }
            constructor(method) {
              super(method, 0);
            }
          };
          exports2.RequestType0 = RequestType0;
          var RequestType = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType");
            }
            static {
              __name2(this, "RequestType");
            }
            constructor(method, _parameterStructures = ParameterStructures.auto) {
              super(method, 1);
              this._parameterStructures = _parameterStructures;
            }
            get parameterStructures() {
              return this._parameterStructures;
            }
          };
          exports2.RequestType = RequestType;
          var RequestType1 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType1");
            }
            static {
              __name2(this, "RequestType1");
            }
            constructor(method, _parameterStructures = ParameterStructures.auto) {
              super(method, 1);
              this._parameterStructures = _parameterStructures;
            }
            get parameterStructures() {
              return this._parameterStructures;
            }
          };
          exports2.RequestType1 = RequestType1;
          var RequestType2 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType2");
            }
            static {
              __name2(this, "RequestType2");
            }
            constructor(method) {
              super(method, 2);
            }
          };
          exports2.RequestType2 = RequestType2;
          var RequestType3 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType3");
            }
            static {
              __name2(this, "RequestType3");
            }
            constructor(method) {
              super(method, 3);
            }
          };
          exports2.RequestType3 = RequestType3;
          var RequestType4 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType4");
            }
            static {
              __name2(this, "RequestType4");
            }
            constructor(method) {
              super(method, 4);
            }
          };
          exports2.RequestType4 = RequestType4;
          var RequestType5 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType5");
            }
            static {
              __name2(this, "RequestType5");
            }
            constructor(method) {
              super(method, 5);
            }
          };
          exports2.RequestType5 = RequestType5;
          var RequestType6 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType6");
            }
            static {
              __name2(this, "RequestType6");
            }
            constructor(method) {
              super(method, 6);
            }
          };
          exports2.RequestType6 = RequestType6;
          var RequestType7 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType7");
            }
            static {
              __name2(this, "RequestType7");
            }
            constructor(method) {
              super(method, 7);
            }
          };
          exports2.RequestType7 = RequestType7;
          var RequestType8 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType8");
            }
            static {
              __name2(this, "RequestType8");
            }
            constructor(method) {
              super(method, 8);
            }
          };
          exports2.RequestType8 = RequestType8;
          var RequestType9 = class extends AbstractMessageSignature {
            static {
              __name(this, "RequestType9");
            }
            static {
              __name2(this, "RequestType9");
            }
            constructor(method) {
              super(method, 9);
            }
          };
          exports2.RequestType9 = RequestType9;
          var NotificationType = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType");
            }
            static {
              __name2(this, "NotificationType");
            }
            constructor(method, _parameterStructures = ParameterStructures.auto) {
              super(method, 1);
              this._parameterStructures = _parameterStructures;
            }
            get parameterStructures() {
              return this._parameterStructures;
            }
          };
          exports2.NotificationType = NotificationType;
          var NotificationType0 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType0");
            }
            static {
              __name2(this, "NotificationType0");
            }
            constructor(method) {
              super(method, 0);
            }
          };
          exports2.NotificationType0 = NotificationType0;
          var NotificationType1 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType1");
            }
            static {
              __name2(this, "NotificationType1");
            }
            constructor(method, _parameterStructures = ParameterStructures.auto) {
              super(method, 1);
              this._parameterStructures = _parameterStructures;
            }
            get parameterStructures() {
              return this._parameterStructures;
            }
          };
          exports2.NotificationType1 = NotificationType1;
          var NotificationType2 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType2");
            }
            static {
              __name2(this, "NotificationType2");
            }
            constructor(method) {
              super(method, 2);
            }
          };
          exports2.NotificationType2 = NotificationType2;
          var NotificationType3 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType3");
            }
            static {
              __name2(this, "NotificationType3");
            }
            constructor(method) {
              super(method, 3);
            }
          };
          exports2.NotificationType3 = NotificationType3;
          var NotificationType4 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType4");
            }
            static {
              __name2(this, "NotificationType4");
            }
            constructor(method) {
              super(method, 4);
            }
          };
          exports2.NotificationType4 = NotificationType4;
          var NotificationType5 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType5");
            }
            static {
              __name2(this, "NotificationType5");
            }
            constructor(method) {
              super(method, 5);
            }
          };
          exports2.NotificationType5 = NotificationType5;
          var NotificationType6 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType6");
            }
            static {
              __name2(this, "NotificationType6");
            }
            constructor(method) {
              super(method, 6);
            }
          };
          exports2.NotificationType6 = NotificationType6;
          var NotificationType7 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType7");
            }
            static {
              __name2(this, "NotificationType7");
            }
            constructor(method) {
              super(method, 7);
            }
          };
          exports2.NotificationType7 = NotificationType7;
          var NotificationType8 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType8");
            }
            static {
              __name2(this, "NotificationType8");
            }
            constructor(method) {
              super(method, 8);
            }
          };
          exports2.NotificationType8 = NotificationType8;
          var NotificationType9 = class extends AbstractMessageSignature {
            static {
              __name(this, "NotificationType9");
            }
            static {
              __name2(this, "NotificationType9");
            }
            constructor(method) {
              super(method, 9);
            }
          };
          exports2.NotificationType9 = NotificationType9;
          var Message;
          (function(Message2) {
            function isRequest(message) {
              const candidate = message;
              return candidate && is2.string(candidate.method) && (is2.string(candidate.id) || is2.number(candidate.id));
            }
            __name(isRequest, "isRequest");
            __name2(isRequest, "isRequest");
            Message2.isRequest = isRequest;
            function isNotification(message) {
              const candidate = message;
              return candidate && is2.string(candidate.method) && message.id === void 0;
            }
            __name(isNotification, "isNotification");
            __name2(isNotification, "isNotification");
            Message2.isNotification = isNotification;
            function isResponse(message) {
              const candidate = message;
              return candidate && (candidate.result !== void 0 || !!candidate.error) && (is2.string(candidate.id) || is2.number(candidate.id) || candidate.id === null);
            }
            __name(isResponse, "isResponse");
            __name2(isResponse, "isResponse");
            Message2.isResponse = isResponse;
          })(Message || (exports2.Message = Message = {}));
        }
      });
      require_linkedMap = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/linkedMap.js"(exports2) {
          "use strict";
          var _a;
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.LRUCache = exports2.LinkedMap = exports2.Touch = void 0;
          var Touch;
          (function(Touch2) {
            Touch2.None = 0;
            Touch2.First = 1;
            Touch2.AsOld = Touch2.First;
            Touch2.Last = 2;
            Touch2.AsNew = Touch2.Last;
          })(Touch || (exports2.Touch = Touch = {}));
          var LinkedMap = class {
            static {
              __name(this, "LinkedMap");
            }
            static {
              __name2(this, "LinkedMap");
            }
            constructor() {
              this[_a] = "LinkedMap";
              this._map = /* @__PURE__ */ new Map();
              this._head = void 0;
              this._tail = void 0;
              this._size = 0;
              this._state = 0;
            }
            clear() {
              this._map.clear();
              this._head = void 0;
              this._tail = void 0;
              this._size = 0;
              this._state++;
            }
            isEmpty() {
              return !this._head && !this._tail;
            }
            get size() {
              return this._size;
            }
            get first() {
              return this._head?.value;
            }
            get last() {
              return this._tail?.value;
            }
            has(key) {
              return this._map.has(key);
            }
            get(key, touch = Touch.None) {
              const item = this._map.get(key);
              if (!item) {
                return void 0;
              }
              if (touch !== Touch.None) {
                this.touch(item, touch);
              }
              return item.value;
            }
            set(key, value2, touch = Touch.None) {
              let item = this._map.get(key);
              if (item) {
                item.value = value2;
                if (touch !== Touch.None) {
                  this.touch(item, touch);
                }
              } else {
                item = { key, value: value2, next: void 0, previous: void 0 };
                switch (touch) {
                  case Touch.None:
                    this.addItemLast(item);
                    break;
                  case Touch.First:
                    this.addItemFirst(item);
                    break;
                  case Touch.Last:
                    this.addItemLast(item);
                    break;
                  default:
                    this.addItemLast(item);
                    break;
                }
                this._map.set(key, item);
                this._size++;
              }
              return this;
            }
            delete(key) {
              return !!this.remove(key);
            }
            remove(key) {
              const item = this._map.get(key);
              if (!item) {
                return void 0;
              }
              this._map.delete(key);
              this.removeItem(item);
              this._size--;
              return item.value;
            }
            shift() {
              if (!this._head && !this._tail) {
                return void 0;
              }
              if (!this._head || !this._tail) {
                throw new Error("Invalid list");
              }
              const item = this._head;
              this._map.delete(item.key);
              this.removeItem(item);
              this._size--;
              return item.value;
            }
            forEach(callbackfn, thisArg) {
              const state4 = this._state;
              let current = this._head;
              while (current) {
                if (thisArg) {
                  callbackfn.bind(thisArg)(current.value, current.key, this);
                } else {
                  callbackfn(current.value, current.key, this);
                }
                if (this._state !== state4) {
                  throw new Error(`LinkedMap got modified during iteration.`);
                }
                current = current.next;
              }
            }
            keys() {
              const state4 = this._state;
              let current = this._head;
              const iterator = {
                [Symbol.iterator]: () => {
                  return iterator;
                },
                next: /* @__PURE__ */ __name2(() => {
                  if (this._state !== state4) {
                    throw new Error(`LinkedMap got modified during iteration.`);
                  }
                  if (current) {
                    const result = { value: current.key, done: false };
                    current = current.next;
                    return result;
                  } else {
                    return { value: void 0, done: true };
                  }
                }, "next")
              };
              return iterator;
            }
            values() {
              const state4 = this._state;
              let current = this._head;
              const iterator = {
                [Symbol.iterator]: () => {
                  return iterator;
                },
                next: /* @__PURE__ */ __name2(() => {
                  if (this._state !== state4) {
                    throw new Error(`LinkedMap got modified during iteration.`);
                  }
                  if (current) {
                    const result = { value: current.value, done: false };
                    current = current.next;
                    return result;
                  } else {
                    return { value: void 0, done: true };
                  }
                }, "next")
              };
              return iterator;
            }
            entries() {
              const state4 = this._state;
              let current = this._head;
              const iterator = {
                [Symbol.iterator]: () => {
                  return iterator;
                },
                next: /* @__PURE__ */ __name2(() => {
                  if (this._state !== state4) {
                    throw new Error(`LinkedMap got modified during iteration.`);
                  }
                  if (current) {
                    const result = { value: [current.key, current.value], done: false };
                    current = current.next;
                    return result;
                  } else {
                    return { value: void 0, done: true };
                  }
                }, "next")
              };
              return iterator;
            }
            [(_a = Symbol.toStringTag, Symbol.iterator)]() {
              return this.entries();
            }
            trimOld(newSize) {
              if (newSize >= this.size) {
                return;
              }
              if (newSize === 0) {
                this.clear();
                return;
              }
              let current = this._head;
              let currentSize = this.size;
              while (current && currentSize > newSize) {
                this._map.delete(current.key);
                current = current.next;
                currentSize--;
              }
              this._head = current;
              this._size = currentSize;
              if (current) {
                current.previous = void 0;
              }
              this._state++;
            }
            addItemFirst(item) {
              if (!this._head && !this._tail) {
                this._tail = item;
              } else if (!this._head) {
                throw new Error("Invalid list");
              } else {
                item.next = this._head;
                this._head.previous = item;
              }
              this._head = item;
              this._state++;
            }
            addItemLast(item) {
              if (!this._head && !this._tail) {
                this._head = item;
              } else if (!this._tail) {
                throw new Error("Invalid list");
              } else {
                item.previous = this._tail;
                this._tail.next = item;
              }
              this._tail = item;
              this._state++;
            }
            removeItem(item) {
              if (item === this._head && item === this._tail) {
                this._head = void 0;
                this._tail = void 0;
              } else if (item === this._head) {
                if (!item.next) {
                  throw new Error("Invalid list");
                }
                item.next.previous = void 0;
                this._head = item.next;
              } else if (item === this._tail) {
                if (!item.previous) {
                  throw new Error("Invalid list");
                }
                item.previous.next = void 0;
                this._tail = item.previous;
              } else {
                const next3 = item.next;
                const previous = item.previous;
                if (!next3 || !previous) {
                  throw new Error("Invalid list");
                }
                next3.previous = previous;
                previous.next = next3;
              }
              item.next = void 0;
              item.previous = void 0;
              this._state++;
            }
            touch(item, touch) {
              if (!this._head || !this._tail) {
                throw new Error("Invalid list");
              }
              if (touch !== Touch.First && touch !== Touch.Last) {
                return;
              }
              if (touch === Touch.First) {
                if (item === this._head) {
                  return;
                }
                const next3 = item.next;
                const previous = item.previous;
                if (item === this._tail) {
                  previous.next = void 0;
                  this._tail = previous;
                } else {
                  next3.previous = previous;
                  previous.next = next3;
                }
                item.previous = void 0;
                item.next = this._head;
                this._head.previous = item;
                this._head = item;
                this._state++;
              } else if (touch === Touch.Last) {
                if (item === this._tail) {
                  return;
                }
                const next3 = item.next;
                const previous = item.previous;
                if (item === this._head) {
                  next3.previous = void 0;
                  this._head = next3;
                } else {
                  next3.previous = previous;
                  previous.next = next3;
                }
                item.next = void 0;
                item.previous = this._tail;
                this._tail.next = item;
                this._tail = item;
                this._state++;
              }
            }
            toJSON() {
              const data6 = [];
              this.forEach((value2, key) => {
                data6.push([key, value2]);
              });
              return data6;
            }
            fromJSON(data6) {
              this.clear();
              for (const [key, value2] of data6) {
                this.set(key, value2);
              }
            }
          };
          exports2.LinkedMap = LinkedMap;
          var LRUCache = class extends LinkedMap {
            static {
              __name(this, "LRUCache");
            }
            static {
              __name2(this, "LRUCache");
            }
            constructor(limit2, ratio = 1) {
              super();
              this._limit = limit2;
              this._ratio = Math.min(Math.max(0, ratio), 1);
            }
            get limit() {
              return this._limit;
            }
            set limit(limit2) {
              this._limit = limit2;
              this.checkTrim();
            }
            get ratio() {
              return this._ratio;
            }
            set ratio(ratio) {
              this._ratio = Math.min(Math.max(0, ratio), 1);
              this.checkTrim();
            }
            get(key, touch = Touch.AsNew) {
              return super.get(key, touch);
            }
            peek(key) {
              return super.get(key, Touch.None);
            }
            set(key, value2) {
              super.set(key, value2, Touch.Last);
              this.checkTrim();
              return this;
            }
            checkTrim() {
              if (this.size > this._limit) {
                this.trimOld(Math.round(this._limit * this._ratio));
              }
            }
          };
          exports2.LRUCache = LRUCache;
        }
      });
      require_disposable = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/disposable.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.Disposable = void 0;
          var Disposable2;
          (function(Disposable3) {
            function create4(func) {
              return {
                dispose: func
              };
            }
            __name(create4, "create");
            __name2(create4, "create");
            Disposable3.create = create4;
          })(Disposable2 || (exports2.Disposable = Disposable2 = {}));
        }
      });
      require_sharedArrayCancellation = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.SharedArrayReceiverStrategy = exports2.SharedArraySenderStrategy = void 0;
          var cancellation_1 = require_cancellation();
          var CancellationState;
          (function(CancellationState2) {
            CancellationState2.Continue = 0;
            CancellationState2.Cancelled = 1;
          })(CancellationState || (CancellationState = {}));
          var SharedArraySenderStrategy = class {
            static {
              __name(this, "SharedArraySenderStrategy");
            }
            static {
              __name2(this, "SharedArraySenderStrategy");
            }
            constructor() {
              this.buffers = /* @__PURE__ */ new Map();
            }
            enableCancellation(request) {
              if (request.id === null) {
                return;
              }
              const buffer = new SharedArrayBuffer(4);
              const data6 = new Int32Array(buffer, 0, 1);
              data6[0] = CancellationState.Continue;
              this.buffers.set(request.id, buffer);
              request.$cancellationData = buffer;
            }
            async sendCancellation(_conn, id41) {
              const buffer = this.buffers.get(id41);
              if (buffer === void 0) {
                return;
              }
              const data6 = new Int32Array(buffer, 0, 1);
              Atomics.store(data6, 0, CancellationState.Cancelled);
            }
            cleanup(id41) {
              this.buffers.delete(id41);
            }
            dispose() {
              this.buffers.clear();
            }
          };
          exports2.SharedArraySenderStrategy = SharedArraySenderStrategy;
          var SharedArrayBufferCancellationToken = class {
            static {
              __name(this, "SharedArrayBufferCancellationToken");
            }
            static {
              __name2(this, "SharedArrayBufferCancellationToken");
            }
            constructor(buffer) {
              this.data = new Int32Array(buffer, 0, 1);
            }
            get isCancellationRequested() {
              return Atomics.load(this.data, 0) === CancellationState.Cancelled;
            }
            get onCancellationRequested() {
              throw new Error(`Cancellation over SharedArrayBuffer doesn't support cancellation events`);
            }
          };
          var SharedArrayBufferCancellationTokenSource = class {
            static {
              __name(this, "SharedArrayBufferCancellationTokenSource");
            }
            static {
              __name2(this, "SharedArrayBufferCancellationTokenSource");
            }
            constructor(buffer) {
              this.token = new SharedArrayBufferCancellationToken(buffer);
            }
            cancel() {
            }
            dispose() {
            }
          };
          var SharedArrayReceiverStrategy = class {
            static {
              __name(this, "SharedArrayReceiverStrategy");
            }
            static {
              __name2(this, "SharedArrayReceiverStrategy");
            }
            constructor() {
              this.kind = "request";
            }
            createCancellationTokenSource(request) {
              const buffer = request.$cancellationData;
              if (buffer === void 0) {
                return new cancellation_1.CancellationTokenSource();
              }
              return new SharedArrayBufferCancellationTokenSource(buffer);
            }
          };
          exports2.SharedArrayReceiverStrategy = SharedArrayReceiverStrategy;
        }
      });
      require_semaphore = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/semaphore.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.Semaphore = void 0;
          var ral_1 = require_ral();
          var Semaphore = class {
            static {
              __name(this, "Semaphore");
            }
            static {
              __name2(this, "Semaphore");
            }
            constructor(capacity = 1) {
              if (capacity <= 0) {
                throw new Error("Capacity must be greater than 0");
              }
              this._capacity = capacity;
              this._active = 0;
              this._waiting = [];
            }
            lock(thunk) {
              return new Promise((resolve2, reject22) => {
                this._waiting.push({ thunk, resolve: resolve2, reject: reject22 });
                this.runNext();
              });
            }
            get active() {
              return this._active;
            }
            runNext() {
              if (this._waiting.length === 0 || this._active === this._capacity) {
                return;
              }
              (0, ral_1.default)().timer.setImmediate(() => this.doRunNext());
            }
            doRunNext() {
              if (this._waiting.length === 0 || this._active === this._capacity) {
                return;
              }
              const next3 = this._waiting.shift();
              this._active++;
              if (this._active > this._capacity) {
                throw new Error(`To many thunks active`);
              }
              try {
                const result = next3.thunk();
                if (result instanceof Promise) {
                  result.then((value2) => {
                    this._active--;
                    next3.resolve(value2);
                    this.runNext();
                  }, (err) => {
                    this._active--;
                    next3.reject(err);
                    this.runNext();
                  });
                } else {
                  this._active--;
                  next3.resolve(result);
                  this.runNext();
                }
              } catch (err) {
                this._active--;
                next3.reject(err);
                this.runNext();
              }
            }
          };
          exports2.Semaphore = Semaphore;
        }
      });
      require_messageReader = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageReader.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.ReadableStreamMessageReader = exports2.AbstractMessageReader = exports2.MessageReader = void 0;
          var ral_1 = require_ral();
          var Is2 = require_is();
          var events_1 = require_events();
          var semaphore_1 = require_semaphore();
          var MessageReader;
          (function(MessageReader2) {
            function is2(value2) {
              let candidate = value2;
              return candidate && Is2.func(candidate.listen) && Is2.func(candidate.dispose) && Is2.func(candidate.onError) && Is2.func(candidate.onClose) && Is2.func(candidate.onPartialMessage);
            }
            __name(is2, "is");
            __name2(is2, "is");
            MessageReader2.is = is2;
          })(MessageReader || (exports2.MessageReader = MessageReader = {}));
          var AbstractMessageReader = class {
            static {
              __name(this, "AbstractMessageReader");
            }
            static {
              __name2(this, "AbstractMessageReader");
            }
            constructor() {
              this.errorEmitter = new events_1.Emitter();
              this.closeEmitter = new events_1.Emitter();
              this.partialMessageEmitter = new events_1.Emitter();
            }
            dispose() {
              this.errorEmitter.dispose();
              this.closeEmitter.dispose();
            }
            get onError() {
              return this.errorEmitter.event;
            }
            fireError(error3) {
              this.errorEmitter.fire(this.asError(error3));
            }
            get onClose() {
              return this.closeEmitter.event;
            }
            fireClose() {
              this.closeEmitter.fire(void 0);
            }
            get onPartialMessage() {
              return this.partialMessageEmitter.event;
            }
            firePartialMessage(info2) {
              this.partialMessageEmitter.fire(info2);
            }
            asError(error3) {
              if (error3 instanceof Error) {
                return error3;
              } else {
                return new Error(`Reader received error. Reason: ${Is2.string(error3.message) ? error3.message : "unknown"}`);
              }
            }
          };
          exports2.AbstractMessageReader = AbstractMessageReader;
          var ResolvedMessageReaderOptions;
          (function(ResolvedMessageReaderOptions2) {
            function fromOptions(options2) {
              let charset;
              let result;
              let contentDecoder;
              const contentDecoders = /* @__PURE__ */ new Map();
              let contentTypeDecoder;
              const contentTypeDecoders = /* @__PURE__ */ new Map();
              if (options2 === void 0 || typeof options2 === "string") {
                charset = options2 ?? "utf-8";
              } else {
                charset = options2.charset ?? "utf-8";
                if (options2.contentDecoder !== void 0) {
                  contentDecoder = options2.contentDecoder;
                  contentDecoders.set(contentDecoder.name, contentDecoder);
                }
                if (options2.contentDecoders !== void 0) {
                  for (const decoder2 of options2.contentDecoders) {
                    contentDecoders.set(decoder2.name, decoder2);
                  }
                }
                if (options2.contentTypeDecoder !== void 0) {
                  contentTypeDecoder = options2.contentTypeDecoder;
                  contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
                }
                if (options2.contentTypeDecoders !== void 0) {
                  for (const decoder2 of options2.contentTypeDecoders) {
                    contentTypeDecoders.set(decoder2.name, decoder2);
                  }
                }
              }
              if (contentTypeDecoder === void 0) {
                contentTypeDecoder = (0, ral_1.default)().applicationJson.decoder;
                contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
              }
              return { charset, contentDecoder, contentDecoders, contentTypeDecoder, contentTypeDecoders };
            }
            __name(fromOptions, "fromOptions");
            __name2(fromOptions, "fromOptions");
            ResolvedMessageReaderOptions2.fromOptions = fromOptions;
          })(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {}));
          var ReadableStreamMessageReader = class extends AbstractMessageReader {
            static {
              __name(this, "ReadableStreamMessageReader");
            }
            static {
              __name2(this, "ReadableStreamMessageReader");
            }
            constructor(readable, options2) {
              super();
              this.readable = readable;
              this.options = ResolvedMessageReaderOptions.fromOptions(options2);
              this.buffer = (0, ral_1.default)().messageBuffer.create(this.options.charset);
              this._partialMessageTimeout = 1e4;
              this.nextMessageLength = -1;
              this.messageToken = 0;
              this.readSemaphore = new semaphore_1.Semaphore(1);
            }
            set partialMessageTimeout(timeout2) {
              this._partialMessageTimeout = timeout2;
            }
            get partialMessageTimeout() {
              return this._partialMessageTimeout;
            }
            listen(callback) {
              this.nextMessageLength = -1;
              this.messageToken = 0;
              this.partialMessageTimer = void 0;
              this.callback = callback;
              const result = this.readable.onData((data6) => {
                this.onData(data6);
              });
              this.readable.onError((error3) => this.fireError(error3));
              this.readable.onClose(() => this.fireClose());
              return result;
            }
            onData(data6) {
              try {
                this.buffer.append(data6);
                while (true) {
                  if (this.nextMessageLength === -1) {
                    const headers = this.buffer.tryReadHeaders(true);
                    if (!headers) {
                      return;
                    }
                    const contentLength = headers.get("content-length");
                    if (!contentLength) {
                      this.fireError(new Error(`Header must provide a Content-Length property.
${JSON.stringify(Object.fromEntries(headers))}`));
                      return;
                    }
                    const length2 = parseInt(contentLength);
                    if (isNaN(length2)) {
                      this.fireError(new Error(`Content-Length value must be a number. Got ${contentLength}`));
                      return;
                    }
                    this.nextMessageLength = length2;
                  }
                  const body = this.buffer.tryReadBody(this.nextMessageLength);
                  if (body === void 0) {
                    this.setPartialMessageTimer();
                    return;
                  }
                  this.clearPartialMessageTimer();
                  this.nextMessageLength = -1;
                  this.readSemaphore.lock(async () => {
                    const bytes = this.options.contentDecoder !== void 0 ? await this.options.contentDecoder.decode(body) : body;
                    const message = await this.options.contentTypeDecoder.decode(bytes, this.options);
                    this.callback(message);
                  }).catch((error3) => {
                    this.fireError(error3);
                  });
                }
              } catch (error3) {
                this.fireError(error3);
              }
            }
            clearPartialMessageTimer() {
              if (this.partialMessageTimer) {
                this.partialMessageTimer.dispose();
                this.partialMessageTimer = void 0;
              }
            }
            setPartialMessageTimer() {
              this.clearPartialMessageTimer();
              if (this._partialMessageTimeout <= 0) {
                return;
              }
              this.partialMessageTimer = (0, ral_1.default)().timer.setTimeout((token2, timeout2) => {
                this.partialMessageTimer = void 0;
                if (token2 === this.messageToken) {
                  this.firePartialMessage({ messageToken: token2, waitingTime: timeout2 });
                  this.setPartialMessageTimer();
                }
              }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
            }
          };
          exports2.ReadableStreamMessageReader = ReadableStreamMessageReader;
        }
      });
      require_messageWriter = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageWriter.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.WriteableStreamMessageWriter = exports2.AbstractMessageWriter = exports2.MessageWriter = void 0;
          var ral_1 = require_ral();
          var Is2 = require_is();
          var semaphore_1 = require_semaphore();
          var events_1 = require_events();
          var ContentLength = "Content-Length: ";
          var CRLF = "\r\n";
          var MessageWriter;
          (function(MessageWriter2) {
            function is2(value2) {
              let candidate = value2;
              return candidate && Is2.func(candidate.dispose) && Is2.func(candidate.onClose) && Is2.func(candidate.onError) && Is2.func(candidate.write);
            }
            __name(is2, "is");
            __name2(is2, "is");
            MessageWriter2.is = is2;
          })(MessageWriter || (exports2.MessageWriter = MessageWriter = {}));
          var AbstractMessageWriter = class {
            static {
              __name(this, "AbstractMessageWriter");
            }
            static {
              __name2(this, "AbstractMessageWriter");
            }
            constructor() {
              this.errorEmitter = new events_1.Emitter();
              this.closeEmitter = new events_1.Emitter();
            }
            dispose() {
              this.errorEmitter.dispose();
              this.closeEmitter.dispose();
            }
            get onError() {
              return this.errorEmitter.event;
            }
            fireError(error3, message, count2) {
              this.errorEmitter.fire([this.asError(error3), message, count2]);
            }
            get onClose() {
              return this.closeEmitter.event;
            }
            fireClose() {
              this.closeEmitter.fire(void 0);
            }
            asError(error3) {
              if (error3 instanceof Error) {
                return error3;
              } else {
                return new Error(`Writer received error. Reason: ${Is2.string(error3.message) ? error3.message : "unknown"}`);
              }
            }
          };
          exports2.AbstractMessageWriter = AbstractMessageWriter;
          var ResolvedMessageWriterOptions;
          (function(ResolvedMessageWriterOptions2) {
            function fromOptions(options2) {
              if (options2 === void 0 || typeof options2 === "string") {
                return { charset: options2 ?? "utf-8", contentTypeEncoder: (0, ral_1.default)().applicationJson.encoder };
              } else {
                return { charset: options2.charset ?? "utf-8", contentEncoder: options2.contentEncoder, contentTypeEncoder: options2.contentTypeEncoder ?? (0, ral_1.default)().applicationJson.encoder };
              }
            }
            __name(fromOptions, "fromOptions");
            __name2(fromOptions, "fromOptions");
            ResolvedMessageWriterOptions2.fromOptions = fromOptions;
          })(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {}));
          var WriteableStreamMessageWriter = class extends AbstractMessageWriter {
            static {
              __name(this, "WriteableStreamMessageWriter");
            }
            static {
              __name2(this, "WriteableStreamMessageWriter");
            }
            constructor(writable, options2) {
              super();
              this.writable = writable;
              this.options = ResolvedMessageWriterOptions.fromOptions(options2);
              this.errorCount = 0;
              this.writeSemaphore = new semaphore_1.Semaphore(1);
              this.writable.onError((error3) => this.fireError(error3));
              this.writable.onClose(() => this.fireClose());
            }
            async write(msg) {
              return this.writeSemaphore.lock(async () => {
                const payload = this.options.contentTypeEncoder.encode(msg, this.options).then((buffer) => {
                  if (this.options.contentEncoder !== void 0) {
                    return this.options.contentEncoder.encode(buffer);
                  } else {
                    return buffer;
                  }
                });
                return payload.then((buffer) => {
                  const headers = [];
                  headers.push(ContentLength, buffer.byteLength.toString(), CRLF);
                  headers.push(CRLF);
                  return this.doWrite(msg, headers, buffer);
                }, (error3) => {
                  this.fireError(error3);
                  throw error3;
                });
              });
            }
            async doWrite(msg, headers, data6) {
              try {
                await this.writable.write(headers.join(""), "ascii");
                return this.writable.write(data6);
              } catch (error3) {
                this.handleError(error3, msg);
                return Promise.reject(error3);
              }
            }
            handleError(error3, msg) {
              this.errorCount++;
              this.fireError(error3, msg, this.errorCount);
            }
            end() {
              this.writable.end();
            }
          };
          exports2.WriteableStreamMessageWriter = WriteableStreamMessageWriter;
        }
      });
      require_messageBuffer = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.AbstractMessageBuffer = void 0;
          var CR2 = 13;
          var LF = 10;
          var CRLF = "\r\n";
          var AbstractMessageBuffer = class {
            static {
              __name(this, "AbstractMessageBuffer");
            }
            static {
              __name2(this, "AbstractMessageBuffer");
            }
            constructor(encoding = "utf-8") {
              this._encoding = encoding;
              this._chunks = [];
              this._totalLength = 0;
            }
            get encoding() {
              return this._encoding;
            }
            append(chunk) {
              const toAppend = typeof chunk === "string" ? this.fromString(chunk, this._encoding) : chunk;
              this._chunks.push(toAppend);
              this._totalLength += toAppend.byteLength;
            }
            tryReadHeaders(lowerCaseKeys = false) {
              if (this._chunks.length === 0) {
                return void 0;
              }
              let state4 = 0;
              let chunkIndex = 0;
              let offset = 0;
              let chunkBytesRead = 0;
              row: while (chunkIndex < this._chunks.length) {
                const chunk = this._chunks[chunkIndex];
                offset = 0;
                column: while (offset < chunk.length) {
                  const value2 = chunk[offset];
                  switch (value2) {
                    case CR2:
                      switch (state4) {
                        case 0:
                          state4 = 1;
                          break;
                        case 2:
                          state4 = 3;
                          break;
                        default:
                          state4 = 0;
                      }
                      break;
                    case LF:
                      switch (state4) {
                        case 1:
                          state4 = 2;
                          break;
                        case 3:
                          state4 = 4;
                          offset++;
                          break row;
                        default:
                          state4 = 0;
                      }
                      break;
                    default:
                      state4 = 0;
                  }
                  offset++;
                }
                chunkBytesRead += chunk.byteLength;
                chunkIndex++;
              }
              if (state4 !== 4) {
                return void 0;
              }
              const buffer = this._read(chunkBytesRead + offset);
              const result = /* @__PURE__ */ new Map();
              const headers = this.toString(buffer, "ascii").split(CRLF);
              if (headers.length < 2) {
                return result;
              }
              for (let i2 = 0; i2 < headers.length - 2; i2++) {
                const header = headers[i2];
                const index = header.indexOf(":");
                if (index === -1) {
                  throw new Error(`Message header must separate key and value using ':'
${header}`);
                }
                const key = header.substr(0, index);
                const value2 = header.substr(index + 1).trim();
                result.set(lowerCaseKeys ? key.toLowerCase() : key, value2);
              }
              return result;
            }
            tryReadBody(length2) {
              if (this._totalLength < length2) {
                return void 0;
              }
              return this._read(length2);
            }
            get numberOfBytes() {
              return this._totalLength;
            }
            _read(byteCount) {
              if (byteCount === 0) {
                return this.emptyBuffer();
              }
              if (byteCount > this._totalLength) {
                throw new Error(`Cannot read so many bytes!`);
              }
              if (this._chunks[0].byteLength === byteCount) {
                const chunk = this._chunks[0];
                this._chunks.shift();
                this._totalLength -= byteCount;
                return this.asNative(chunk);
              }
              if (this._chunks[0].byteLength > byteCount) {
                const chunk = this._chunks[0];
                const result2 = this.asNative(chunk, byteCount);
                this._chunks[0] = chunk.slice(byteCount);
                this._totalLength -= byteCount;
                return result2;
              }
              const result = this.allocNative(byteCount);
              let resultOffset = 0;
              let chunkIndex = 0;
              while (byteCount > 0) {
                const chunk = this._chunks[chunkIndex];
                if (chunk.byteLength > byteCount) {
                  const chunkPart = chunk.slice(0, byteCount);
                  result.set(chunkPart, resultOffset);
                  resultOffset += byteCount;
                  this._chunks[chunkIndex] = chunk.slice(byteCount);
                  this._totalLength -= byteCount;
                  byteCount -= byteCount;
                } else {
                  result.set(chunk, resultOffset);
                  resultOffset += chunk.byteLength;
                  this._chunks.shift();
                  this._totalLength -= chunk.byteLength;
                  byteCount -= chunk.byteLength;
                }
              }
              return result;
            }
          };
          exports2.AbstractMessageBuffer = AbstractMessageBuffer;
        }
      });
      require_connection = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/connection.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.createMessageConnection = exports2.ConnectionOptions = exports2.MessageStrategy = exports2.CancellationStrategy = exports2.CancellationSenderStrategy = exports2.CancellationReceiverStrategy = exports2.RequestCancellationReceiverStrategy = exports2.IdCancellationReceiverStrategy = exports2.ConnectionStrategy = exports2.ConnectionError = exports2.ConnectionErrors = exports2.LogTraceNotification = exports2.SetTraceNotification = exports2.TraceFormat = exports2.TraceValues = exports2.Trace = exports2.NullLogger = exports2.ProgressType = exports2.ProgressToken = void 0;
          var ral_1 = require_ral();
          var Is2 = require_is();
          var messages_1 = require_messages();
          var linkedMap_1 = require_linkedMap();
          var events_1 = require_events();
          var cancellation_1 = require_cancellation();
          var CancelNotification;
          (function(CancelNotification2) {
            CancelNotification2.type = new messages_1.NotificationType("$/cancelRequest");
          })(CancelNotification || (CancelNotification = {}));
          var ProgressToken;
          (function(ProgressToken2) {
            function is2(value2) {
              return typeof value2 === "string" || typeof value2 === "number";
            }
            __name(is2, "is");
            __name2(is2, "is");
            ProgressToken2.is = is2;
          })(ProgressToken || (exports2.ProgressToken = ProgressToken = {}));
          var ProgressNotification;
          (function(ProgressNotification2) {
            ProgressNotification2.type = new messages_1.NotificationType("$/progress");
          })(ProgressNotification || (ProgressNotification = {}));
          var ProgressType = class {
            static {
              __name(this, "ProgressType");
            }
            static {
              __name2(this, "ProgressType");
            }
            constructor() {
            }
          };
          exports2.ProgressType = ProgressType;
          var StarRequestHandler;
          (function(StarRequestHandler2) {
            function is2(value2) {
              return Is2.func(value2);
            }
            __name(is2, "is");
            __name2(is2, "is");
            StarRequestHandler2.is = is2;
          })(StarRequestHandler || (StarRequestHandler = {}));
          exports2.NullLogger = Object.freeze({
            error: /* @__PURE__ */ __name2(() => {
            }, "error"),
            warn: /* @__PURE__ */ __name2(() => {
            }, "warn"),
            info: /* @__PURE__ */ __name2(() => {
            }, "info"),
            log: /* @__PURE__ */ __name2(() => {
            }, "log")
          });
          var Trace;
          (function(Trace2) {
            Trace2[Trace2["Off"] = 0] = "Off";
            Trace2[Trace2["Messages"] = 1] = "Messages";
            Trace2[Trace2["Compact"] = 2] = "Compact";
            Trace2[Trace2["Verbose"] = 3] = "Verbose";
          })(Trace || (exports2.Trace = Trace = {}));
          var TraceValues;
          (function(TraceValues2) {
            TraceValues2.Off = "off";
            TraceValues2.Messages = "messages";
            TraceValues2.Compact = "compact";
            TraceValues2.Verbose = "verbose";
          })(TraceValues || (exports2.TraceValues = TraceValues = {}));
          (function(Trace2) {
            function fromString(value2) {
              if (!Is2.string(value2)) {
                return Trace2.Off;
              }
              value2 = value2.toLowerCase();
              switch (value2) {
                case "off":
                  return Trace2.Off;
                case "messages":
                  return Trace2.Messages;
                case "compact":
                  return Trace2.Compact;
                case "verbose":
                  return Trace2.Verbose;
                default:
                  return Trace2.Off;
              }
            }
            __name(fromString, "fromString");
            __name2(fromString, "fromString");
            Trace2.fromString = fromString;
            function toString42(value2) {
              switch (value2) {
                case Trace2.Off:
                  return "off";
                case Trace2.Messages:
                  return "messages";
                case Trace2.Compact:
                  return "compact";
                case Trace2.Verbose:
                  return "verbose";
                default:
                  return "off";
              }
            }
            __name(toString42, "toString4");
            __name2(toString42, "toString");
            Trace2.toString = toString42;
          })(Trace || (exports2.Trace = Trace = {}));
          var TraceFormat;
          (function(TraceFormat2) {
            TraceFormat2["Text"] = "text";
            TraceFormat2["JSON"] = "json";
          })(TraceFormat || (exports2.TraceFormat = TraceFormat = {}));
          (function(TraceFormat2) {
            function fromString(value2) {
              if (!Is2.string(value2)) {
                return TraceFormat2.Text;
              }
              value2 = value2.toLowerCase();
              if (value2 === "json") {
                return TraceFormat2.JSON;
              } else {
                return TraceFormat2.Text;
              }
            }
            __name(fromString, "fromString");
            __name2(fromString, "fromString");
            TraceFormat2.fromString = fromString;
          })(TraceFormat || (exports2.TraceFormat = TraceFormat = {}));
          var SetTraceNotification;
          (function(SetTraceNotification2) {
            SetTraceNotification2.type = new messages_1.NotificationType("$/setTrace");
          })(SetTraceNotification || (exports2.SetTraceNotification = SetTraceNotification = {}));
          var LogTraceNotification;
          (function(LogTraceNotification2) {
            LogTraceNotification2.type = new messages_1.NotificationType("$/logTrace");
          })(LogTraceNotification || (exports2.LogTraceNotification = LogTraceNotification = {}));
          var ConnectionErrors;
          (function(ConnectionErrors2) {
            ConnectionErrors2[ConnectionErrors2["Closed"] = 1] = "Closed";
            ConnectionErrors2[ConnectionErrors2["Disposed"] = 2] = "Disposed";
            ConnectionErrors2[ConnectionErrors2["AlreadyListening"] = 3] = "AlreadyListening";
          })(ConnectionErrors || (exports2.ConnectionErrors = ConnectionErrors = {}));
          var ConnectionError = class _ConnectionError extends Error {
            static {
              __name(this, "_ConnectionError");
            }
            static {
              __name2(this, "ConnectionError");
            }
            constructor(code, message) {
              super(message);
              this.code = code;
              Object.setPrototypeOf(this, _ConnectionError.prototype);
            }
          };
          exports2.ConnectionError = ConnectionError;
          var ConnectionStrategy;
          (function(ConnectionStrategy2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && Is2.func(candidate.cancelUndispatched);
            }
            __name(is2, "is");
            __name2(is2, "is");
            ConnectionStrategy2.is = is2;
          })(ConnectionStrategy || (exports2.ConnectionStrategy = ConnectionStrategy = {}));
          var IdCancellationReceiverStrategy;
          (function(IdCancellationReceiverStrategy2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && (candidate.kind === void 0 || candidate.kind === "id") && Is2.func(candidate.createCancellationTokenSource) && (candidate.dispose === void 0 || Is2.func(candidate.dispose));
            }
            __name(is2, "is");
            __name2(is2, "is");
            IdCancellationReceiverStrategy2.is = is2;
          })(IdCancellationReceiverStrategy || (exports2.IdCancellationReceiverStrategy = IdCancellationReceiverStrategy = {}));
          var RequestCancellationReceiverStrategy;
          (function(RequestCancellationReceiverStrategy2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && candidate.kind === "request" && Is2.func(candidate.createCancellationTokenSource) && (candidate.dispose === void 0 || Is2.func(candidate.dispose));
            }
            __name(is2, "is");
            __name2(is2, "is");
            RequestCancellationReceiverStrategy2.is = is2;
          })(RequestCancellationReceiverStrategy || (exports2.RequestCancellationReceiverStrategy = RequestCancellationReceiverStrategy = {}));
          var CancellationReceiverStrategy;
          (function(CancellationReceiverStrategy2) {
            CancellationReceiverStrategy2.Message = Object.freeze({
              createCancellationTokenSource(_3) {
                return new cancellation_1.CancellationTokenSource();
              }
            });
            function is2(value2) {
              return IdCancellationReceiverStrategy.is(value2) || RequestCancellationReceiverStrategy.is(value2);
            }
            __name(is2, "is");
            __name2(is2, "is");
            CancellationReceiverStrategy2.is = is2;
          })(CancellationReceiverStrategy || (exports2.CancellationReceiverStrategy = CancellationReceiverStrategy = {}));
          var CancellationSenderStrategy;
          (function(CancellationSenderStrategy2) {
            CancellationSenderStrategy2.Message = Object.freeze({
              sendCancellation(conn, id41) {
                return conn.sendNotification(CancelNotification.type, { id: id41 });
              },
              cleanup(_3) {
              }
            });
            function is2(value2) {
              const candidate = value2;
              return candidate && Is2.func(candidate.sendCancellation) && Is2.func(candidate.cleanup);
            }
            __name(is2, "is");
            __name2(is2, "is");
            CancellationSenderStrategy2.is = is2;
          })(CancellationSenderStrategy || (exports2.CancellationSenderStrategy = CancellationSenderStrategy = {}));
          var CancellationStrategy;
          (function(CancellationStrategy2) {
            CancellationStrategy2.Message = Object.freeze({
              receiver: CancellationReceiverStrategy.Message,
              sender: CancellationSenderStrategy.Message
            });
            function is2(value2) {
              const candidate = value2;
              return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);
            }
            __name(is2, "is");
            __name2(is2, "is");
            CancellationStrategy2.is = is2;
          })(CancellationStrategy || (exports2.CancellationStrategy = CancellationStrategy = {}));
          var MessageStrategy;
          (function(MessageStrategy2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && Is2.func(candidate.handleMessage);
            }
            __name(is2, "is");
            __name2(is2, "is");
            MessageStrategy2.is = is2;
          })(MessageStrategy || (exports2.MessageStrategy = MessageStrategy = {}));
          var ConnectionOptions;
          (function(ConnectionOptions2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy) || MessageStrategy.is(candidate.messageStrategy));
            }
            __name(is2, "is");
            __name2(is2, "is");
            ConnectionOptions2.is = is2;
          })(ConnectionOptions || (exports2.ConnectionOptions = ConnectionOptions = {}));
          var ConnectionState;
          (function(ConnectionState2) {
            ConnectionState2[ConnectionState2["New"] = 1] = "New";
            ConnectionState2[ConnectionState2["Listening"] = 2] = "Listening";
            ConnectionState2[ConnectionState2["Closed"] = 3] = "Closed";
            ConnectionState2[ConnectionState2["Disposed"] = 4] = "Disposed";
          })(ConnectionState || (ConnectionState = {}));
          function createMessageConnection(messageReader, messageWriter, _logger, options2) {
            const logger = _logger !== void 0 ? _logger : exports2.NullLogger;
            let sequenceNumber = 0;
            let notificationSequenceNumber = 0;
            let unknownResponseSequenceNumber = 0;
            const version3 = "2.0";
            let starRequestHandler = void 0;
            const requestHandlers = /* @__PURE__ */ new Map();
            let starNotificationHandler = void 0;
            const notificationHandlers = /* @__PURE__ */ new Map();
            const progressHandlers = /* @__PURE__ */ new Map();
            let timer22;
            let messageQueue = new linkedMap_1.LinkedMap();
            let responsePromises = /* @__PURE__ */ new Map();
            let knownCanceledRequests = /* @__PURE__ */ new Set();
            let requestTokens = /* @__PURE__ */ new Map();
            let trace = Trace.Off;
            let traceFormat = TraceFormat.Text;
            let tracer;
            let state4 = ConnectionState.New;
            const errorEmitter = new events_1.Emitter();
            const closeEmitter = new events_1.Emitter();
            const unhandledNotificationEmitter = new events_1.Emitter();
            const unhandledProgressEmitter = new events_1.Emitter();
            const disposeEmitter = new events_1.Emitter();
            const cancellationStrategy = options2 && options2.cancellationStrategy ? options2.cancellationStrategy : CancellationStrategy.Message;
            function createRequestQueueKey(id41) {
              if (id41 === null) {
                throw new Error(`Can't send requests with id null since the response can't be correlated.`);
              }
              return "req-" + id41.toString();
            }
            __name(createRequestQueueKey, "createRequestQueueKey");
            __name2(createRequestQueueKey, "createRequestQueueKey");
            function createResponseQueueKey(id41) {
              if (id41 === null) {
                return "res-unknown-" + (++unknownResponseSequenceNumber).toString();
              } else {
                return "res-" + id41.toString();
              }
            }
            __name(createResponseQueueKey, "createResponseQueueKey");
            __name2(createResponseQueueKey, "createResponseQueueKey");
            function createNotificationQueueKey() {
              return "not-" + (++notificationSequenceNumber).toString();
            }
            __name(createNotificationQueueKey, "createNotificationQueueKey");
            __name2(createNotificationQueueKey, "createNotificationQueueKey");
            function addMessageToQueue(queue, message) {
              if (messages_1.Message.isRequest(message)) {
                queue.set(createRequestQueueKey(message.id), message);
              } else if (messages_1.Message.isResponse(message)) {
                queue.set(createResponseQueueKey(message.id), message);
              } else {
                queue.set(createNotificationQueueKey(), message);
              }
            }
            __name(addMessageToQueue, "addMessageToQueue");
            __name2(addMessageToQueue, "addMessageToQueue");
            function cancelUndispatched(_message) {
              return void 0;
            }
            __name(cancelUndispatched, "cancelUndispatched");
            __name2(cancelUndispatched, "cancelUndispatched");
            function isListening() {
              return state4 === ConnectionState.Listening;
            }
            __name(isListening, "isListening");
            __name2(isListening, "isListening");
            function isClosed() {
              return state4 === ConnectionState.Closed;
            }
            __name(isClosed, "isClosed");
            __name2(isClosed, "isClosed");
            function isDisposed() {
              return state4 === ConnectionState.Disposed;
            }
            __name(isDisposed, "isDisposed");
            __name2(isDisposed, "isDisposed");
            function closeHandler() {
              if (state4 === ConnectionState.New || state4 === ConnectionState.Listening) {
                state4 = ConnectionState.Closed;
                closeEmitter.fire(void 0);
              }
            }
            __name(closeHandler, "closeHandler");
            __name2(closeHandler, "closeHandler");
            function readErrorHandler(error3) {
              errorEmitter.fire([error3, void 0, void 0]);
            }
            __name(readErrorHandler, "readErrorHandler");
            __name2(readErrorHandler, "readErrorHandler");
            function writeErrorHandler(data6) {
              errorEmitter.fire(data6);
            }
            __name(writeErrorHandler, "writeErrorHandler");
            __name2(writeErrorHandler, "writeErrorHandler");
            messageReader.onClose(closeHandler);
            messageReader.onError(readErrorHandler);
            messageWriter.onClose(closeHandler);
            messageWriter.onError(writeErrorHandler);
            function triggerMessageQueue() {
              if (timer22 || messageQueue.size === 0) {
                return;
              }
              timer22 = (0, ral_1.default)().timer.setImmediate(() => {
                timer22 = void 0;
                processMessageQueue();
              });
            }
            __name(triggerMessageQueue, "triggerMessageQueue");
            __name2(triggerMessageQueue, "triggerMessageQueue");
            function handleMessage(message) {
              if (messages_1.Message.isRequest(message)) {
                handleRequest(message);
              } else if (messages_1.Message.isNotification(message)) {
                handleNotification(message);
              } else if (messages_1.Message.isResponse(message)) {
                handleResponse(message);
              } else {
                handleInvalidMessage(message);
              }
            }
            __name(handleMessage, "handleMessage");
            __name2(handleMessage, "handleMessage");
            function processMessageQueue() {
              if (messageQueue.size === 0) {
                return;
              }
              const message = messageQueue.shift();
              try {
                const messageStrategy = options2?.messageStrategy;
                if (MessageStrategy.is(messageStrategy)) {
                  messageStrategy.handleMessage(message, handleMessage);
                } else {
                  handleMessage(message);
                }
              } finally {
                triggerMessageQueue();
              }
            }
            __name(processMessageQueue, "processMessageQueue");
            __name2(processMessageQueue, "processMessageQueue");
            const callback = /* @__PURE__ */ __name2((message) => {
              try {
                if (messages_1.Message.isNotification(message) && message.method === CancelNotification.type.method) {
                  const cancelId = message.params.id;
                  const key = createRequestQueueKey(cancelId);
                  const toCancel = messageQueue.get(key);
                  if (messages_1.Message.isRequest(toCancel)) {
                    const strategy = options2?.connectionStrategy;
                    const response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
                    if (response && (response.error !== void 0 || response.result !== void 0)) {
                      messageQueue.delete(key);
                      requestTokens.delete(cancelId);
                      response.id = toCancel.id;
                      traceSendingResponse(response, message.method, Date.now());
                      messageWriter.write(response).catch(() => logger.error(`Sending response for canceled message failed.`));
                      return;
                    }
                  }
                  const cancellationToken = requestTokens.get(cancelId);
                  if (cancellationToken !== void 0) {
                    cancellationToken.cancel();
                    traceReceivedNotification(message);
                    return;
                  } else {
                    knownCanceledRequests.add(cancelId);
                  }
                }
                addMessageToQueue(messageQueue, message);
              } finally {
                triggerMessageQueue();
              }
            }, "callback");
            function handleRequest(requestMessage) {
              if (isDisposed()) {
                return;
              }
              function reply(resultOrError, method, startTime2) {
                const message = {
                  jsonrpc: version3,
                  id: requestMessage.id
                };
                if (resultOrError instanceof messages_1.ResponseError) {
                  message.error = resultOrError.toJson();
                } else {
                  message.result = resultOrError === void 0 ? null : resultOrError;
                }
                traceSendingResponse(message, method, startTime2);
                messageWriter.write(message).catch(() => logger.error(`Sending response failed.`));
              }
              __name(reply, "reply");
              __name2(reply, "reply");
              function replyError(error3, method, startTime2) {
                const message = {
                  jsonrpc: version3,
                  id: requestMessage.id,
                  error: error3.toJson()
                };
                traceSendingResponse(message, method, startTime2);
                messageWriter.write(message).catch(() => logger.error(`Sending response failed.`));
              }
              __name(replyError, "replyError");
              __name2(replyError, "replyError");
              function replySuccess(result, method, startTime2) {
                if (result === void 0) {
                  result = null;
                }
                const message = {
                  jsonrpc: version3,
                  id: requestMessage.id,
                  result
                };
                traceSendingResponse(message, method, startTime2);
                messageWriter.write(message).catch(() => logger.error(`Sending response failed.`));
              }
              __name(replySuccess, "replySuccess");
              __name2(replySuccess, "replySuccess");
              traceReceivedRequest(requestMessage);
              const element3 = requestHandlers.get(requestMessage.method);
              let type3;
              let requestHandler;
              if (element3) {
                type3 = element3.type;
                requestHandler = element3.handler;
              }
              const startTime = Date.now();
              if (requestHandler || starRequestHandler) {
                const tokenKey = requestMessage.id ?? String(Date.now());
                const cancellationSource = IdCancellationReceiverStrategy.is(cancellationStrategy.receiver) ? cancellationStrategy.receiver.createCancellationTokenSource(tokenKey) : cancellationStrategy.receiver.createCancellationTokenSource(requestMessage);
                if (requestMessage.id !== null && knownCanceledRequests.has(requestMessage.id)) {
                  cancellationSource.cancel();
                }
                if (requestMessage.id !== null) {
                  requestTokens.set(tokenKey, cancellationSource);
                }
                try {
                  let handlerResult;
                  if (requestHandler) {
                    if (requestMessage.params === void 0) {
                      if (type3 !== void 0 && type3.numberOfParams !== 0) {
                        replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type3.numberOfParams} params but received none.`), requestMessage.method, startTime);
                        return;
                      }
                      handlerResult = requestHandler(cancellationSource.token);
                    } else if (Array.isArray(requestMessage.params)) {
                      if (type3 !== void 0 && type3.parameterStructures === messages_1.ParameterStructures.byName) {
                        replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
                        return;
                      }
                      handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
                    } else {
                      if (type3 !== void 0 && type3.parameterStructures === messages_1.ParameterStructures.byPosition) {
                        replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
                        return;
                      }
                      handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
                    }
                  } else if (starRequestHandler) {
                    handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
                  }
                  const promise4 = handlerResult;
                  if (!handlerResult) {
                    requestTokens.delete(tokenKey);
                    replySuccess(handlerResult, requestMessage.method, startTime);
                  } else if (promise4.then) {
                    promise4.then((resultOrError) => {
                      requestTokens.delete(tokenKey);
                      reply(resultOrError, requestMessage.method, startTime);
                    }, (error3) => {
                      requestTokens.delete(tokenKey);
                      if (error3 instanceof messages_1.ResponseError) {
                        replyError(error3, requestMessage.method, startTime);
                      } else if (error3 && Is2.string(error3.message)) {
                        replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error3.message}`), requestMessage.method, startTime);
                      } else {
                        replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
                      }
                    });
                  } else {
                    requestTokens.delete(tokenKey);
                    reply(handlerResult, requestMessage.method, startTime);
                  }
                } catch (error3) {
                  requestTokens.delete(tokenKey);
                  if (error3 instanceof messages_1.ResponseError) {
                    reply(error3, requestMessage.method, startTime);
                  } else if (error3 && Is2.string(error3.message)) {
                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error3.message}`), requestMessage.method, startTime);
                  } else {
                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
                  }
                }
              } else {
                replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
              }
            }
            __name(handleRequest, "handleRequest");
            __name2(handleRequest, "handleRequest");
            function handleResponse(responseMessage) {
              if (isDisposed()) {
                return;
              }
              if (responseMessage.id === null) {
                if (responseMessage.error) {
                  logger.error(`Received response message without id: Error is: 
${JSON.stringify(responseMessage.error, void 0, 4)}`);
                } else {
                  logger.error(`Received response message without id. No further error information provided.`);
                }
              } else {
                const key = responseMessage.id;
                const responsePromise = responsePromises.get(key);
                traceReceivedResponse(responseMessage, responsePromise);
                if (responsePromise !== void 0) {
                  responsePromises.delete(key);
                  try {
                    if (responseMessage.error) {
                      const error3 = responseMessage.error;
                      responsePromise.reject(new messages_1.ResponseError(error3.code, error3.message, error3.data));
                    } else if (responseMessage.result !== void 0) {
                      responsePromise.resolve(responseMessage.result);
                    } else {
                      throw new Error("Should never happen.");
                    }
                  } catch (error3) {
                    if (error3.message) {
                      logger.error(`Response handler '${responsePromise.method}' failed with message: ${error3.message}`);
                    } else {
                      logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
                    }
                  }
                }
              }
            }
            __name(handleResponse, "handleResponse");
            __name2(handleResponse, "handleResponse");
            function handleNotification(message) {
              if (isDisposed()) {
                return;
              }
              let type3 = void 0;
              let notificationHandler;
              if (message.method === CancelNotification.type.method) {
                const cancelId = message.params.id;
                knownCanceledRequests.delete(cancelId);
                traceReceivedNotification(message);
                return;
              } else {
                const element3 = notificationHandlers.get(message.method);
                if (element3) {
                  notificationHandler = element3.handler;
                  type3 = element3.type;
                }
              }
              if (notificationHandler || starNotificationHandler) {
                try {
                  traceReceivedNotification(message);
                  if (notificationHandler) {
                    if (message.params === void 0) {
                      if (type3 !== void 0) {
                        if (type3.numberOfParams !== 0 && type3.parameterStructures !== messages_1.ParameterStructures.byName) {
                          logger.error(`Notification ${message.method} defines ${type3.numberOfParams} params but received none.`);
                        }
                      }
                      notificationHandler();
                    } else if (Array.isArray(message.params)) {
                      const params = message.params;
                      if (message.method === ProgressNotification.type.method && params.length === 2 && ProgressToken.is(params[0])) {
                        notificationHandler({ token: params[0], value: params[1] });
                      } else {
                        if (type3 !== void 0) {
                          if (type3.parameterStructures === messages_1.ParameterStructures.byName) {
                            logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);
                          }
                          if (type3.numberOfParams !== message.params.length) {
                            logger.error(`Notification ${message.method} defines ${type3.numberOfParams} params but received ${params.length} arguments`);
                          }
                        }
                        notificationHandler(...params);
                      }
                    } else {
                      if (type3 !== void 0 && type3.parameterStructures === messages_1.ParameterStructures.byPosition) {
                        logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
                      }
                      notificationHandler(message.params);
                    }
                  } else if (starNotificationHandler) {
                    starNotificationHandler(message.method, message.params);
                  }
                } catch (error3) {
                  if (error3.message) {
                    logger.error(`Notification handler '${message.method}' failed with message: ${error3.message}`);
                  } else {
                    logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
                  }
                }
              } else {
                unhandledNotificationEmitter.fire(message);
              }
            }
            __name(handleNotification, "handleNotification");
            __name2(handleNotification, "handleNotification");
            function handleInvalidMessage(message) {
              if (!message) {
                logger.error("Received empty message.");
                return;
              }
              logger.error(`Received message which is neither a response nor a notification message:
${JSON.stringify(message, null, 4)}`);
              const responseMessage = message;
              if (Is2.string(responseMessage.id) || Is2.number(responseMessage.id)) {
                const key = responseMessage.id;
                const responseHandler = responsePromises.get(key);
                if (responseHandler) {
                  responseHandler.reject(new Error("The received response has neither a result nor an error property."));
                }
              }
            }
            __name(handleInvalidMessage, "handleInvalidMessage");
            __name2(handleInvalidMessage, "handleInvalidMessage");
            function stringifyTrace(params) {
              if (params === void 0 || params === null) {
                return void 0;
              }
              switch (trace) {
                case Trace.Verbose:
                  return JSON.stringify(params, null, 4);
                case Trace.Compact:
                  return JSON.stringify(params);
                default:
                  return void 0;
              }
            }
            __name(stringifyTrace, "stringifyTrace");
            __name2(stringifyTrace, "stringifyTrace");
            function traceSendingRequest(message) {
              if (trace === Trace.Off || !tracer) {
                return;
              }
              if (traceFormat === TraceFormat.Text) {
                let data6 = void 0;
                if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
                  data6 = `Params: ${stringifyTrace(message.params)}

`;
                }
                tracer.log(`Sending request '${message.method} - (${message.id})'.`, data6);
              } else {
                logLSPMessage("send-request", message);
              }
            }
            __name(traceSendingRequest, "traceSendingRequest");
            __name2(traceSendingRequest, "traceSendingRequest");
            function traceSendingNotification(message) {
              if (trace === Trace.Off || !tracer) {
                return;
              }
              if (traceFormat === TraceFormat.Text) {
                let data6 = void 0;
                if (trace === Trace.Verbose || trace === Trace.Compact) {
                  if (message.params) {
                    data6 = `Params: ${stringifyTrace(message.params)}

`;
                  } else {
                    data6 = "No parameters provided.\n\n";
                  }
                }
                tracer.log(`Sending notification '${message.method}'.`, data6);
              } else {
                logLSPMessage("send-notification", message);
              }
            }
            __name(traceSendingNotification, "traceSendingNotification");
            __name2(traceSendingNotification, "traceSendingNotification");
            function traceSendingResponse(message, method, startTime) {
              if (trace === Trace.Off || !tracer) {
                return;
              }
              if (traceFormat === TraceFormat.Text) {
                let data6 = void 0;
                if (trace === Trace.Verbose || trace === Trace.Compact) {
                  if (message.error && message.error.data) {
                    data6 = `Error data: ${stringifyTrace(message.error.data)}

`;
                  } else {
                    if (message.result) {
                      data6 = `Result: ${stringifyTrace(message.result)}

`;
                    } else if (message.error === void 0) {
                      data6 = "No result returned.\n\n";
                    }
                  }
                }
                tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data6);
              } else {
                logLSPMessage("send-response", message);
              }
            }
            __name(traceSendingResponse, "traceSendingResponse");
            __name2(traceSendingResponse, "traceSendingResponse");
            function traceReceivedRequest(message) {
              if (trace === Trace.Off || !tracer) {
                return;
              }
              if (traceFormat === TraceFormat.Text) {
                let data6 = void 0;
                if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
                  data6 = `Params: ${stringifyTrace(message.params)}

`;
                }
                tracer.log(`Received request '${message.method} - (${message.id})'.`, data6);
              } else {
                logLSPMessage("receive-request", message);
              }
            }
            __name(traceReceivedRequest, "traceReceivedRequest");
            __name2(traceReceivedRequest, "traceReceivedRequest");
            function traceReceivedNotification(message) {
              if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
                return;
              }
              if (traceFormat === TraceFormat.Text) {
                let data6 = void 0;
                if (trace === Trace.Verbose || trace === Trace.Compact) {
                  if (message.params) {
                    data6 = `Params: ${stringifyTrace(message.params)}

`;
                  } else {
                    data6 = "No parameters provided.\n\n";
                  }
                }
                tracer.log(`Received notification '${message.method}'.`, data6);
              } else {
                logLSPMessage("receive-notification", message);
              }
            }
            __name(traceReceivedNotification, "traceReceivedNotification");
            __name2(traceReceivedNotification, "traceReceivedNotification");
            function traceReceivedResponse(message, responsePromise) {
              if (trace === Trace.Off || !tracer) {
                return;
              }
              if (traceFormat === TraceFormat.Text) {
                let data6 = void 0;
                if (trace === Trace.Verbose || trace === Trace.Compact) {
                  if (message.error && message.error.data) {
                    data6 = `Error data: ${stringifyTrace(message.error.data)}

`;
                  } else {
                    if (message.result) {
                      data6 = `Result: ${stringifyTrace(message.result)}

`;
                    } else if (message.error === void 0) {
                      data6 = "No result returned.\n\n";
                    }
                  }
                }
                if (responsePromise) {
                  const error3 = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : "";
                  tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error3}`, data6);
                } else {
                  tracer.log(`Received response ${message.id} without active response promise.`, data6);
                }
              } else {
                logLSPMessage("receive-response", message);
              }
            }
            __name(traceReceivedResponse, "traceReceivedResponse");
            __name2(traceReceivedResponse, "traceReceivedResponse");
            function logLSPMessage(type3, message) {
              if (!tracer || trace === Trace.Off) {
                return;
              }
              const lspMessage = {
                isLSPMessage: true,
                type: type3,
                message,
                timestamp: Date.now()
              };
              tracer.log(lspMessage);
            }
            __name(logLSPMessage, "logLSPMessage");
            __name2(logLSPMessage, "logLSPMessage");
            function throwIfClosedOrDisposed() {
              if (isClosed()) {
                throw new ConnectionError(ConnectionErrors.Closed, "Connection is closed.");
              }
              if (isDisposed()) {
                throw new ConnectionError(ConnectionErrors.Disposed, "Connection is disposed.");
              }
            }
            __name(throwIfClosedOrDisposed, "throwIfClosedOrDisposed");
            __name2(throwIfClosedOrDisposed, "throwIfClosedOrDisposed");
            function throwIfListening() {
              if (isListening()) {
                throw new ConnectionError(ConnectionErrors.AlreadyListening, "Connection is already listening");
              }
            }
            __name(throwIfListening, "throwIfListening");
            __name2(throwIfListening, "throwIfListening");
            function throwIfNotListening() {
              if (!isListening()) {
                throw new Error("Call listen() first.");
              }
            }
            __name(throwIfNotListening, "throwIfNotListening");
            __name2(throwIfNotListening, "throwIfNotListening");
            function undefinedToNull(param) {
              if (param === void 0) {
                return null;
              } else {
                return param;
              }
            }
            __name(undefinedToNull, "undefinedToNull");
            __name2(undefinedToNull, "undefinedToNull");
            function nullToUndefined(param) {
              if (param === null) {
                return void 0;
              } else {
                return param;
              }
            }
            __name(nullToUndefined, "nullToUndefined");
            __name2(nullToUndefined, "nullToUndefined");
            function isNamedParam(param) {
              return param !== void 0 && param !== null && !Array.isArray(param) && typeof param === "object";
            }
            __name(isNamedParam, "isNamedParam");
            __name2(isNamedParam, "isNamedParam");
            function computeSingleParam(parameterStructures, param) {
              switch (parameterStructures) {
                case messages_1.ParameterStructures.auto:
                  if (isNamedParam(param)) {
                    return nullToUndefined(param);
                  } else {
                    return [undefinedToNull(param)];
                  }
                case messages_1.ParameterStructures.byName:
                  if (!isNamedParam(param)) {
                    throw new Error(`Received parameters by name but param is not an object literal.`);
                  }
                  return nullToUndefined(param);
                case messages_1.ParameterStructures.byPosition:
                  return [undefinedToNull(param)];
                default:
                  throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);
              }
            }
            __name(computeSingleParam, "computeSingleParam");
            __name2(computeSingleParam, "computeSingleParam");
            function computeMessageParams(type3, params) {
              let result;
              const numberOfParams = type3.numberOfParams;
              switch (numberOfParams) {
                case 0:
                  result = void 0;
                  break;
                case 1:
                  result = computeSingleParam(type3.parameterStructures, params[0]);
                  break;
                default:
                  result = [];
                  for (let i2 = 0; i2 < params.length && i2 < numberOfParams; i2++) {
                    result.push(undefinedToNull(params[i2]));
                  }
                  if (params.length < numberOfParams) {
                    for (let i2 = params.length; i2 < numberOfParams; i2++) {
                      result.push(null);
                    }
                  }
                  break;
              }
              return result;
            }
            __name(computeMessageParams, "computeMessageParams");
            __name2(computeMessageParams, "computeMessageParams");
            const connection = {
              sendNotification: /* @__PURE__ */ __name2((type3, ...args) => {
                throwIfClosedOrDisposed();
                let method;
                let messageParams;
                if (Is2.string(type3)) {
                  method = type3;
                  const first22 = args[0];
                  let paramStart = 0;
                  let parameterStructures = messages_1.ParameterStructures.auto;
                  if (messages_1.ParameterStructures.is(first22)) {
                    paramStart = 1;
                    parameterStructures = first22;
                  }
                  let paramEnd = args.length;
                  const numberOfParams = paramEnd - paramStart;
                  switch (numberOfParams) {
                    case 0:
                      messageParams = void 0;
                      break;
                    case 1:
                      messageParams = computeSingleParam(parameterStructures, args[paramStart]);
                      break;
                    default:
                      if (parameterStructures === messages_1.ParameterStructures.byName) {
                        throw new Error(`Received ${numberOfParams} parameters for 'by Name' notification parameter structure.`);
                      }
                      messageParams = args.slice(paramStart, paramEnd).map((value2) => undefinedToNull(value2));
                      break;
                  }
                } else {
                  const params = args;
                  method = type3.method;
                  messageParams = computeMessageParams(type3, params);
                }
                const notificationMessage = {
                  jsonrpc: version3,
                  method,
                  params: messageParams
                };
                traceSendingNotification(notificationMessage);
                return messageWriter.write(notificationMessage).catch((error3) => {
                  logger.error(`Sending notification failed.`);
                  throw error3;
                });
              }, "sendNotification"),
              onNotification: /* @__PURE__ */ __name2((type3, handler) => {
                throwIfClosedOrDisposed();
                let method;
                if (Is2.func(type3)) {
                  starNotificationHandler = type3;
                } else if (handler) {
                  if (Is2.string(type3)) {
                    method = type3;
                    notificationHandlers.set(type3, { type: void 0, handler });
                  } else {
                    method = type3.method;
                    notificationHandlers.set(type3.method, { type: type3, handler });
                  }
                }
                return {
                  dispose: /* @__PURE__ */ __name2(() => {
                    if (method !== void 0) {
                      notificationHandlers.delete(method);
                    } else {
                      starNotificationHandler = void 0;
                    }
                  }, "dispose")
                };
              }, "onNotification"),
              onProgress: /* @__PURE__ */ __name2((_type, token2, handler) => {
                if (progressHandlers.has(token2)) {
                  throw new Error(`Progress handler for token ${token2} already registered`);
                }
                progressHandlers.set(token2, handler);
                return {
                  dispose: /* @__PURE__ */ __name2(() => {
                    progressHandlers.delete(token2);
                  }, "dispose")
                };
              }, "onProgress"),
              sendProgress: /* @__PURE__ */ __name2((_type, token2, value2) => {
                return connection.sendNotification(ProgressNotification.type, { token: token2, value: value2 });
              }, "sendProgress"),
              onUnhandledProgress: unhandledProgressEmitter.event,
              sendRequest: /* @__PURE__ */ __name2((type3, ...args) => {
                throwIfClosedOrDisposed();
                throwIfNotListening();
                let method;
                let messageParams;
                let token2 = void 0;
                if (Is2.string(type3)) {
                  method = type3;
                  const first22 = args[0];
                  const last22 = args[args.length - 1];
                  let paramStart = 0;
                  let parameterStructures = messages_1.ParameterStructures.auto;
                  if (messages_1.ParameterStructures.is(first22)) {
                    paramStart = 1;
                    parameterStructures = first22;
                  }
                  let paramEnd = args.length;
                  if (cancellation_1.CancellationToken.is(last22)) {
                    paramEnd = paramEnd - 1;
                    token2 = last22;
                  }
                  const numberOfParams = paramEnd - paramStart;
                  switch (numberOfParams) {
                    case 0:
                      messageParams = void 0;
                      break;
                    case 1:
                      messageParams = computeSingleParam(parameterStructures, args[paramStart]);
                      break;
                    default:
                      if (parameterStructures === messages_1.ParameterStructures.byName) {
                        throw new Error(`Received ${numberOfParams} parameters for 'by Name' request parameter structure.`);
                      }
                      messageParams = args.slice(paramStart, paramEnd).map((value2) => undefinedToNull(value2));
                      break;
                  }
                } else {
                  const params = args;
                  method = type3.method;
                  messageParams = computeMessageParams(type3, params);
                  const numberOfParams = type3.numberOfParams;
                  token2 = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : void 0;
                }
                const id41 = sequenceNumber++;
                let disposable;
                if (token2) {
                  disposable = token2.onCancellationRequested(() => {
                    const p3 = cancellationStrategy.sender.sendCancellation(connection, id41);
                    if (p3 === void 0) {
                      logger.log(`Received no promise from cancellation strategy when cancelling id ${id41}`);
                      return Promise.resolve();
                    } else {
                      return p3.catch(() => {
                        logger.log(`Sending cancellation messages for id ${id41} failed`);
                      });
                    }
                  });
                }
                const requestMessage = {
                  jsonrpc: version3,
                  id: id41,
                  method,
                  params: messageParams
                };
                traceSendingRequest(requestMessage);
                if (typeof cancellationStrategy.sender.enableCancellation === "function") {
                  cancellationStrategy.sender.enableCancellation(requestMessage);
                }
                return new Promise(async (resolve2, reject22) => {
                  const resolveWithCleanup = /* @__PURE__ */ __name2((r2) => {
                    resolve2(r2);
                    cancellationStrategy.sender.cleanup(id41);
                    disposable?.dispose();
                  }, "resolveWithCleanup");
                  const rejectWithCleanup = /* @__PURE__ */ __name2((r2) => {
                    reject22(r2);
                    cancellationStrategy.sender.cleanup(id41);
                    disposable?.dispose();
                  }, "rejectWithCleanup");
                  const responsePromise = { method, timerStart: Date.now(), resolve: resolveWithCleanup, reject: rejectWithCleanup };
                  try {
                    await messageWriter.write(requestMessage);
                    responsePromises.set(id41, responsePromise);
                  } catch (error3) {
                    logger.error(`Sending request failed.`);
                    responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, error3.message ? error3.message : "Unknown reason"));
                    throw error3;
                  }
                });
              }, "sendRequest"),
              onRequest: /* @__PURE__ */ __name2((type3, handler) => {
                throwIfClosedOrDisposed();
                let method = null;
                if (StarRequestHandler.is(type3)) {
                  method = void 0;
                  starRequestHandler = type3;
                } else if (Is2.string(type3)) {
                  method = null;
                  if (handler !== void 0) {
                    method = type3;
                    requestHandlers.set(type3, { handler, type: void 0 });
                  }
                } else {
                  if (handler !== void 0) {
                    method = type3.method;
                    requestHandlers.set(type3.method, { type: type3, handler });
                  }
                }
                return {
                  dispose: /* @__PURE__ */ __name2(() => {
                    if (method === null) {
                      return;
                    }
                    if (method !== void 0) {
                      requestHandlers.delete(method);
                    } else {
                      starRequestHandler = void 0;
                    }
                  }, "dispose")
                };
              }, "onRequest"),
              hasPendingResponse: /* @__PURE__ */ __name2(() => {
                return responsePromises.size > 0;
              }, "hasPendingResponse"),
              trace: /* @__PURE__ */ __name2(async (_value, _tracer, sendNotificationOrTraceOptions) => {
                let _sendNotification = false;
                let _traceFormat = TraceFormat.Text;
                if (sendNotificationOrTraceOptions !== void 0) {
                  if (Is2.boolean(sendNotificationOrTraceOptions)) {
                    _sendNotification = sendNotificationOrTraceOptions;
                  } else {
                    _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
                    _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
                  }
                }
                trace = _value;
                traceFormat = _traceFormat;
                if (trace === Trace.Off) {
                  tracer = void 0;
                } else {
                  tracer = _tracer;
                }
                if (_sendNotification && !isClosed() && !isDisposed()) {
                  await connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
                }
              }, "trace"),
              onError: errorEmitter.event,
              onClose: closeEmitter.event,
              onUnhandledNotification: unhandledNotificationEmitter.event,
              onDispose: disposeEmitter.event,
              end: /* @__PURE__ */ __name2(() => {
                messageWriter.end();
              }, "end"),
              dispose: /* @__PURE__ */ __name2(() => {
                if (isDisposed()) {
                  return;
                }
                state4 = ConnectionState.Disposed;
                disposeEmitter.fire(void 0);
                const error3 = new messages_1.ResponseError(messages_1.ErrorCodes.PendingResponseRejected, "Pending response rejected since connection got disposed");
                for (const promise4 of responsePromises.values()) {
                  promise4.reject(error3);
                }
                responsePromises = /* @__PURE__ */ new Map();
                requestTokens = /* @__PURE__ */ new Map();
                knownCanceledRequests = /* @__PURE__ */ new Set();
                messageQueue = new linkedMap_1.LinkedMap();
                if (Is2.func(messageWriter.dispose)) {
                  messageWriter.dispose();
                }
                if (Is2.func(messageReader.dispose)) {
                  messageReader.dispose();
                }
              }, "dispose"),
              listen: /* @__PURE__ */ __name2(() => {
                throwIfClosedOrDisposed();
                throwIfListening();
                state4 = ConnectionState.Listening;
                messageReader.listen(callback);
              }, "listen"),
              inspect: /* @__PURE__ */ __name2(() => {
                (0, ral_1.default)().console.log("inspect");
              }, "inspect")
            };
            connection.onNotification(LogTraceNotification.type, (params) => {
              if (trace === Trace.Off || !tracer) {
                return;
              }
              const verbose = trace === Trace.Verbose || trace === Trace.Compact;
              tracer.log(params.message, verbose ? params.verbose : void 0);
            });
            connection.onNotification(ProgressNotification.type, (params) => {
              const handler = progressHandlers.get(params.token);
              if (handler) {
                handler(params.value);
              } else {
                unhandledProgressEmitter.fire(params);
              }
            });
            return connection;
          }
          __name(createMessageConnection, "createMessageConnection");
          __name2(createMessageConnection, "createMessageConnection");
          exports2.createMessageConnection = createMessageConnection;
        }
      });
      require_api = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/api.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.ProgressType = exports2.ProgressToken = exports2.createMessageConnection = exports2.NullLogger = exports2.ConnectionOptions = exports2.ConnectionStrategy = exports2.AbstractMessageBuffer = exports2.WriteableStreamMessageWriter = exports2.AbstractMessageWriter = exports2.MessageWriter = exports2.ReadableStreamMessageReader = exports2.AbstractMessageReader = exports2.MessageReader = exports2.SharedArrayReceiverStrategy = exports2.SharedArraySenderStrategy = exports2.CancellationToken = exports2.CancellationTokenSource = exports2.Emitter = exports2.Event = exports2.Disposable = exports2.LRUCache = exports2.Touch = exports2.LinkedMap = exports2.ParameterStructures = exports2.NotificationType9 = exports2.NotificationType8 = exports2.NotificationType7 = exports2.NotificationType6 = exports2.NotificationType5 = exports2.NotificationType4 = exports2.NotificationType3 = exports2.NotificationType2 = exports2.NotificationType1 = exports2.NotificationType0 = exports2.NotificationType = exports2.ErrorCodes = exports2.ResponseError = exports2.RequestType9 = exports2.RequestType8 = exports2.RequestType7 = exports2.RequestType6 = exports2.RequestType5 = exports2.RequestType4 = exports2.RequestType3 = exports2.RequestType2 = exports2.RequestType1 = exports2.RequestType0 = exports2.RequestType = exports2.Message = exports2.RAL = void 0;
          exports2.MessageStrategy = exports2.CancellationStrategy = exports2.CancellationSenderStrategy = exports2.CancellationReceiverStrategy = exports2.ConnectionError = exports2.ConnectionErrors = exports2.LogTraceNotification = exports2.SetTraceNotification = exports2.TraceFormat = exports2.TraceValues = exports2.Trace = void 0;
          var messages_1 = require_messages();
          Object.defineProperty(exports2, "Message", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.Message;
          }, "get") });
          Object.defineProperty(exports2, "RequestType", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType;
          }, "get") });
          Object.defineProperty(exports2, "RequestType0", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType0;
          }, "get") });
          Object.defineProperty(exports2, "RequestType1", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType1;
          }, "get") });
          Object.defineProperty(exports2, "RequestType2", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType2;
          }, "get") });
          Object.defineProperty(exports2, "RequestType3", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType3;
          }, "get") });
          Object.defineProperty(exports2, "RequestType4", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType4;
          }, "get") });
          Object.defineProperty(exports2, "RequestType5", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType5;
          }, "get") });
          Object.defineProperty(exports2, "RequestType6", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType6;
          }, "get") });
          Object.defineProperty(exports2, "RequestType7", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType7;
          }, "get") });
          Object.defineProperty(exports2, "RequestType8", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType8;
          }, "get") });
          Object.defineProperty(exports2, "RequestType9", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.RequestType9;
          }, "get") });
          Object.defineProperty(exports2, "ResponseError", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.ResponseError;
          }, "get") });
          Object.defineProperty(exports2, "ErrorCodes", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.ErrorCodes;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType0", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType0;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType1", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType1;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType2", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType2;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType3", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType3;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType4", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType4;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType5", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType5;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType6", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType6;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType7", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType7;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType8", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType8;
          }, "get") });
          Object.defineProperty(exports2, "NotificationType9", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.NotificationType9;
          }, "get") });
          Object.defineProperty(exports2, "ParameterStructures", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messages_1.ParameterStructures;
          }, "get") });
          var linkedMap_1 = require_linkedMap();
          Object.defineProperty(exports2, "LinkedMap", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return linkedMap_1.LinkedMap;
          }, "get") });
          Object.defineProperty(exports2, "LRUCache", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return linkedMap_1.LRUCache;
          }, "get") });
          Object.defineProperty(exports2, "Touch", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return linkedMap_1.Touch;
          }, "get") });
          var disposable_1 = require_disposable();
          Object.defineProperty(exports2, "Disposable", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return disposable_1.Disposable;
          }, "get") });
          var events_1 = require_events();
          Object.defineProperty(exports2, "Event", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return events_1.Event;
          }, "get") });
          Object.defineProperty(exports2, "Emitter", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return events_1.Emitter;
          }, "get") });
          var cancellation_1 = require_cancellation();
          Object.defineProperty(exports2, "CancellationTokenSource", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return cancellation_1.CancellationTokenSource;
          }, "get") });
          Object.defineProperty(exports2, "CancellationToken", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return cancellation_1.CancellationToken;
          }, "get") });
          var sharedArrayCancellation_1 = require_sharedArrayCancellation();
          Object.defineProperty(exports2, "SharedArraySenderStrategy", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return sharedArrayCancellation_1.SharedArraySenderStrategy;
          }, "get") });
          Object.defineProperty(exports2, "SharedArrayReceiverStrategy", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return sharedArrayCancellation_1.SharedArrayReceiverStrategy;
          }, "get") });
          var messageReader_1 = require_messageReader();
          Object.defineProperty(exports2, "MessageReader", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messageReader_1.MessageReader;
          }, "get") });
          Object.defineProperty(exports2, "AbstractMessageReader", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messageReader_1.AbstractMessageReader;
          }, "get") });
          Object.defineProperty(exports2, "ReadableStreamMessageReader", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messageReader_1.ReadableStreamMessageReader;
          }, "get") });
          var messageWriter_1 = require_messageWriter();
          Object.defineProperty(exports2, "MessageWriter", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messageWriter_1.MessageWriter;
          }, "get") });
          Object.defineProperty(exports2, "AbstractMessageWriter", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messageWriter_1.AbstractMessageWriter;
          }, "get") });
          Object.defineProperty(exports2, "WriteableStreamMessageWriter", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messageWriter_1.WriteableStreamMessageWriter;
          }, "get") });
          var messageBuffer_1 = require_messageBuffer();
          Object.defineProperty(exports2, "AbstractMessageBuffer", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return messageBuffer_1.AbstractMessageBuffer;
          }, "get") });
          var connection_1 = require_connection();
          Object.defineProperty(exports2, "ConnectionStrategy", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.ConnectionStrategy;
          }, "get") });
          Object.defineProperty(exports2, "ConnectionOptions", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.ConnectionOptions;
          }, "get") });
          Object.defineProperty(exports2, "NullLogger", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.NullLogger;
          }, "get") });
          Object.defineProperty(exports2, "createMessageConnection", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.createMessageConnection;
          }, "get") });
          Object.defineProperty(exports2, "ProgressToken", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.ProgressToken;
          }, "get") });
          Object.defineProperty(exports2, "ProgressType", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.ProgressType;
          }, "get") });
          Object.defineProperty(exports2, "Trace", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.Trace;
          }, "get") });
          Object.defineProperty(exports2, "TraceValues", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.TraceValues;
          }, "get") });
          Object.defineProperty(exports2, "TraceFormat", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.TraceFormat;
          }, "get") });
          Object.defineProperty(exports2, "SetTraceNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.SetTraceNotification;
          }, "get") });
          Object.defineProperty(exports2, "LogTraceNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.LogTraceNotification;
          }, "get") });
          Object.defineProperty(exports2, "ConnectionErrors", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.ConnectionErrors;
          }, "get") });
          Object.defineProperty(exports2, "ConnectionError", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.ConnectionError;
          }, "get") });
          Object.defineProperty(exports2, "CancellationReceiverStrategy", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.CancellationReceiverStrategy;
          }, "get") });
          Object.defineProperty(exports2, "CancellationSenderStrategy", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.CancellationSenderStrategy;
          }, "get") });
          Object.defineProperty(exports2, "CancellationStrategy", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.CancellationStrategy;
          }, "get") });
          Object.defineProperty(exports2, "MessageStrategy", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.MessageStrategy;
          }, "get") });
          var ral_1 = require_ral();
          exports2.RAL = ral_1.default;
        }
      });
      require_ril = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/browser/ril.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          var api_1 = require_api();
          var MessageBuffer = class _MessageBuffer extends api_1.AbstractMessageBuffer {
            static {
              __name(this, "_MessageBuffer");
            }
            static {
              __name2(this, "MessageBuffer");
            }
            constructor(encoding = "utf-8") {
              super(encoding);
              this.asciiDecoder = new TextDecoder("ascii");
            }
            emptyBuffer() {
              return _MessageBuffer.emptyBuffer;
            }
            fromString(value2, _encoding) {
              return new TextEncoder().encode(value2);
            }
            toString(value2, encoding) {
              if (encoding === "ascii") {
                return this.asciiDecoder.decode(value2);
              } else {
                return new TextDecoder(encoding).decode(value2);
              }
            }
            asNative(buffer, length2) {
              if (length2 === void 0) {
                return buffer;
              } else {
                return buffer.slice(0, length2);
              }
            }
            allocNative(length2) {
              return new Uint8Array(length2);
            }
          };
          MessageBuffer.emptyBuffer = new Uint8Array(0);
          var ReadableStreamWrapper = class {
            static {
              __name(this, "ReadableStreamWrapper");
            }
            static {
              __name2(this, "ReadableStreamWrapper");
            }
            constructor(socket) {
              this.socket = socket;
              this._onData = new api_1.Emitter();
              this._messageListener = (event3) => {
                const blob = event3.data;
                blob.arrayBuffer().then((buffer) => {
                  this._onData.fire(new Uint8Array(buffer));
                }, () => {
                  (0, api_1.RAL)().console.error(`Converting blob to array buffer failed.`);
                });
              };
              this.socket.addEventListener("message", this._messageListener);
            }
            onClose(listener) {
              this.socket.addEventListener("close", listener);
              return api_1.Disposable.create(() => this.socket.removeEventListener("close", listener));
            }
            onError(listener) {
              this.socket.addEventListener("error", listener);
              return api_1.Disposable.create(() => this.socket.removeEventListener("error", listener));
            }
            onEnd(listener) {
              this.socket.addEventListener("end", listener);
              return api_1.Disposable.create(() => this.socket.removeEventListener("end", listener));
            }
            onData(listener) {
              return this._onData.event(listener);
            }
          };
          var WritableStreamWrapper = class {
            static {
              __name(this, "WritableStreamWrapper");
            }
            static {
              __name2(this, "WritableStreamWrapper");
            }
            constructor(socket) {
              this.socket = socket;
            }
            onClose(listener) {
              this.socket.addEventListener("close", listener);
              return api_1.Disposable.create(() => this.socket.removeEventListener("close", listener));
            }
            onError(listener) {
              this.socket.addEventListener("error", listener);
              return api_1.Disposable.create(() => this.socket.removeEventListener("error", listener));
            }
            onEnd(listener) {
              this.socket.addEventListener("end", listener);
              return api_1.Disposable.create(() => this.socket.removeEventListener("end", listener));
            }
            write(data6, encoding) {
              if (typeof data6 === "string") {
                if (encoding !== void 0 && encoding !== "utf-8") {
                  throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${encoding}`);
                }
                this.socket.send(data6);
              } else {
                this.socket.send(data6);
              }
              return Promise.resolve();
            }
            end() {
              this.socket.close();
            }
          };
          var _textEncoder = new TextEncoder();
          var _ril = Object.freeze({
            messageBuffer: Object.freeze({
              create: /* @__PURE__ */ __name2((encoding) => new MessageBuffer(encoding), "create")
            }),
            applicationJson: Object.freeze({
              encoder: Object.freeze({
                name: "application/json",
                encode: /* @__PURE__ */ __name2((msg, options2) => {
                  if (options2.charset !== "utf-8") {
                    throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${options2.charset}`);
                  }
                  return Promise.resolve(_textEncoder.encode(JSON.stringify(msg, void 0, 0)));
                }, "encode")
              }),
              decoder: Object.freeze({
                name: "application/json",
                decode: /* @__PURE__ */ __name2((buffer, options2) => {
                  if (!(buffer instanceof Uint8Array)) {
                    throw new Error(`In a Browser environments only Uint8Arrays are supported.`);
                  }
                  return Promise.resolve(JSON.parse(new TextDecoder(options2.charset).decode(buffer)));
                }, "decode")
              })
            }),
            stream: Object.freeze({
              asReadableStream: /* @__PURE__ */ __name2((socket) => new ReadableStreamWrapper(socket), "asReadableStream"),
              asWritableStream: /* @__PURE__ */ __name2((socket) => new WritableStreamWrapper(socket), "asWritableStream")
            }),
            console,
            timer: Object.freeze({
              setTimeout(callback, ms3, ...args) {
                const handle = setTimeout(callback, ms3, ...args);
                return { dispose: /* @__PURE__ */ __name2(() => clearTimeout(handle), "dispose") };
              },
              setImmediate(callback, ...args) {
                const handle = setTimeout(callback, 0, ...args);
                return { dispose: /* @__PURE__ */ __name2(() => clearTimeout(handle), "dispose") };
              },
              setInterval(callback, ms3, ...args) {
                const handle = setInterval(callback, ms3, ...args);
                return { dispose: /* @__PURE__ */ __name2(() => clearInterval(handle), "dispose") };
              }
            })
          });
          function RIL() {
            return _ril;
          }
          __name(RIL, "RIL");
          __name2(RIL, "RIL");
          (function(RIL2) {
            function install() {
              api_1.RAL.install(_ril);
            }
            __name(install, "install");
            __name2(install, "install");
            RIL2.install = install;
          })(RIL || (RIL = {}));
          exports2.default = RIL;
        }
      });
      require_main = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/browser/main.js"(exports2) {
          "use strict";
          var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o2, m3, k2, k22) {
            if (k22 === void 0) k22 = k2;
            var desc = Object.getOwnPropertyDescriptor(m3, k2);
            if (!desc || ("get" in desc ? !m3.__esModule : desc.writable || desc.configurable)) {
              desc = { enumerable: true, get: /* @__PURE__ */ __name2(function() {
                return m3[k2];
              }, "get") };
            }
            Object.defineProperty(o2, k22, desc);
          }) : (function(o2, m3, k2, k22) {
            if (k22 === void 0) k22 = k2;
            o2[k22] = m3[k2];
          }));
          var __exportStar = exports2 && exports2.__exportStar || function(m3, exports3) {
            for (var p3 in m3) if (p3 !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p3)) __createBinding(exports3, m3, p3);
          };
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.createMessageConnection = exports2.BrowserMessageWriter = exports2.BrowserMessageReader = void 0;
          var ril_1 = require_ril();
          ril_1.default.install();
          var api_1 = require_api();
          __exportStar(require_api(), exports2);
          var BrowserMessageReader = class extends api_1.AbstractMessageReader {
            static {
              __name(this, "BrowserMessageReader");
            }
            static {
              __name2(this, "BrowserMessageReader");
            }
            constructor(port) {
              super();
              this._onData = new api_1.Emitter();
              this._messageListener = (event3) => {
                this._onData.fire(event3.data);
              };
              port.addEventListener("error", (event3) => this.fireError(event3));
              port.onmessage = this._messageListener;
            }
            listen(callback) {
              return this._onData.event(callback);
            }
          };
          exports2.BrowserMessageReader = BrowserMessageReader;
          var BrowserMessageWriter = class extends api_1.AbstractMessageWriter {
            static {
              __name(this, "BrowserMessageWriter");
            }
            static {
              __name2(this, "BrowserMessageWriter");
            }
            constructor(port) {
              super();
              this.port = port;
              this.errorCount = 0;
              port.addEventListener("error", (event3) => this.fireError(event3));
            }
            write(msg) {
              try {
                this.port.postMessage(msg);
                return Promise.resolve();
              } catch (error3) {
                this.handleError(error3, msg);
                return Promise.reject(error3);
              }
            }
            handleError(error3, msg) {
              this.errorCount++;
              this.fireError(error3, msg, this.errorCount);
            }
            end() {
            }
          };
          exports2.BrowserMessageWriter = BrowserMessageWriter;
          function createMessageConnection(reader, writer, logger, options2) {
            if (logger === void 0) {
              logger = api_1.NullLogger;
            }
            if (api_1.ConnectionStrategy.is(options2)) {
              options2 = { connectionStrategy: options2 };
            }
            return (0, api_1.createMessageConnection)(reader, writer, logger, options2);
          }
          __name(createMessageConnection, "createMessageConnection");
          __name2(createMessageConnection, "createMessageConnection");
          exports2.createMessageConnection = createMessageConnection;
        }
      });
      require_browser = __commonJS2({
        "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/browser.js"(exports2, module2) {
          "use strict";
          module2.exports = require_main();
        }
      });
      require_messages2 = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/messages.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.ProtocolNotificationType = exports2.ProtocolNotificationType0 = exports2.ProtocolRequestType = exports2.ProtocolRequestType0 = exports2.RegistrationType = exports2.MessageDirection = void 0;
          var vscode_jsonrpc_1 = require_main();
          var MessageDirection;
          (function(MessageDirection2) {
            MessageDirection2["clientToServer"] = "clientToServer";
            MessageDirection2["serverToClient"] = "serverToClient";
            MessageDirection2["both"] = "both";
          })(MessageDirection || (exports2.MessageDirection = MessageDirection = {}));
          var RegistrationType = class {
            static {
              __name(this, "RegistrationType");
            }
            static {
              __name2(this, "RegistrationType");
            }
            constructor(method) {
              this.method = method;
            }
          };
          exports2.RegistrationType = RegistrationType;
          var ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 {
            static {
              __name(this, "ProtocolRequestType0");
            }
            static {
              __name2(this, "ProtocolRequestType0");
            }
            constructor(method) {
              super(method);
            }
          };
          exports2.ProtocolRequestType0 = ProtocolRequestType0;
          var ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType {
            static {
              __name(this, "ProtocolRequestType");
            }
            static {
              __name2(this, "ProtocolRequestType");
            }
            constructor(method) {
              super(method, vscode_jsonrpc_1.ParameterStructures.byName);
            }
          };
          exports2.ProtocolRequestType = ProtocolRequestType;
          var ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 {
            static {
              __name(this, "ProtocolNotificationType0");
            }
            static {
              __name2(this, "ProtocolNotificationType0");
            }
            constructor(method) {
              super(method);
            }
          };
          exports2.ProtocolNotificationType0 = ProtocolNotificationType0;
          var ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType {
            static {
              __name(this, "ProtocolNotificationType");
            }
            static {
              __name2(this, "ProtocolNotificationType");
            }
            constructor(method) {
              super(method, vscode_jsonrpc_1.ParameterStructures.byName);
            }
          };
          exports2.ProtocolNotificationType = ProtocolNotificationType;
        }
      });
      require_is2 = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.objectLiteral = exports2.typedArray = exports2.stringArray = exports2.array = exports2.func = exports2.error = exports2.number = exports2.string = exports2.boolean = void 0;
          function boolean(value2) {
            return value2 === true || value2 === false;
          }
          __name(boolean, "boolean");
          __name2(boolean, "boolean");
          exports2.boolean = boolean;
          function string3(value2) {
            return typeof value2 === "string" || value2 instanceof String;
          }
          __name(string3, "string");
          __name2(string3, "string");
          exports2.string = string3;
          function number7(value2) {
            return typeof value2 === "number" || value2 instanceof Number;
          }
          __name(number7, "number");
          __name2(number7, "number");
          exports2.number = number7;
          function error3(value2) {
            return value2 instanceof Error;
          }
          __name(error3, "error");
          __name2(error3, "error");
          exports2.error = error3;
          function func(value2) {
            return typeof value2 === "function";
          }
          __name(func, "func");
          __name2(func, "func");
          exports2.func = func;
          function array4(value2) {
            return Array.isArray(value2);
          }
          __name(array4, "array");
          __name2(array4, "array");
          exports2.array = array4;
          function stringArray(value2) {
            return array4(value2) && value2.every((elem) => string3(elem));
          }
          __name(stringArray, "stringArray");
          __name2(stringArray, "stringArray");
          exports2.stringArray = stringArray;
          function typedArray(value2, check) {
            return Array.isArray(value2) && value2.every(check);
          }
          __name(typedArray, "typedArray");
          __name2(typedArray, "typedArray");
          exports2.typedArray = typedArray;
          function objectLiteral(value2) {
            return value2 !== null && typeof value2 === "object";
          }
          __name(objectLiteral, "objectLiteral");
          __name2(objectLiteral, "objectLiteral");
          exports2.objectLiteral = objectLiteral;
        }
      });
      require_protocol_implementation = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.ImplementationRequest = void 0;
          var messages_1 = require_messages2();
          var ImplementationRequest;
          (function(ImplementationRequest2) {
            ImplementationRequest2.method = "textDocument/implementation";
            ImplementationRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            ImplementationRequest2.type = new messages_1.ProtocolRequestType(ImplementationRequest2.method);
          })(ImplementationRequest || (exports2.ImplementationRequest = ImplementationRequest = {}));
        }
      });
      require_protocol_typeDefinition = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.TypeDefinitionRequest = void 0;
          var messages_1 = require_messages2();
          var TypeDefinitionRequest;
          (function(TypeDefinitionRequest2) {
            TypeDefinitionRequest2.method = "textDocument/typeDefinition";
            TypeDefinitionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest2.method);
          })(TypeDefinitionRequest || (exports2.TypeDefinitionRequest = TypeDefinitionRequest = {}));
        }
      });
      require_protocol_workspaceFolder = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.DidChangeWorkspaceFoldersNotification = exports2.WorkspaceFoldersRequest = void 0;
          var messages_1 = require_messages2();
          var WorkspaceFoldersRequest;
          (function(WorkspaceFoldersRequest2) {
            WorkspaceFoldersRequest2.method = "workspace/workspaceFolders";
            WorkspaceFoldersRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0(WorkspaceFoldersRequest2.method);
          })(WorkspaceFoldersRequest || (exports2.WorkspaceFoldersRequest = WorkspaceFoldersRequest = {}));
          var DidChangeWorkspaceFoldersNotification;
          (function(DidChangeWorkspaceFoldersNotification2) {
            DidChangeWorkspaceFoldersNotification2.method = "workspace/didChangeWorkspaceFolders";
            DidChangeWorkspaceFoldersNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType(DidChangeWorkspaceFoldersNotification2.method);
          })(DidChangeWorkspaceFoldersNotification || (exports2.DidChangeWorkspaceFoldersNotification = DidChangeWorkspaceFoldersNotification = {}));
        }
      });
      require_protocol_configuration = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.ConfigurationRequest = void 0;
          var messages_1 = require_messages2();
          var ConfigurationRequest;
          (function(ConfigurationRequest2) {
            ConfigurationRequest2.method = "workspace/configuration";
            ConfigurationRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            ConfigurationRequest2.type = new messages_1.ProtocolRequestType(ConfigurationRequest2.method);
          })(ConfigurationRequest || (exports2.ConfigurationRequest = ConfigurationRequest = {}));
        }
      });
      require_protocol_colorProvider = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.ColorPresentationRequest = exports2.DocumentColorRequest = void 0;
          var messages_1 = require_messages2();
          var DocumentColorRequest;
          (function(DocumentColorRequest2) {
            DocumentColorRequest2.method = "textDocument/documentColor";
            DocumentColorRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentColorRequest2.type = new messages_1.ProtocolRequestType(DocumentColorRequest2.method);
          })(DocumentColorRequest || (exports2.DocumentColorRequest = DocumentColorRequest = {}));
          var ColorPresentationRequest;
          (function(ColorPresentationRequest2) {
            ColorPresentationRequest2.method = "textDocument/colorPresentation";
            ColorPresentationRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            ColorPresentationRequest2.type = new messages_1.ProtocolRequestType(ColorPresentationRequest2.method);
          })(ColorPresentationRequest || (exports2.ColorPresentationRequest = ColorPresentationRequest = {}));
        }
      });
      require_protocol_foldingRange = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.FoldingRangeRefreshRequest = exports2.FoldingRangeRequest = void 0;
          var messages_1 = require_messages2();
          var FoldingRangeRequest;
          (function(FoldingRangeRequest2) {
            FoldingRangeRequest2.method = "textDocument/foldingRange";
            FoldingRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            FoldingRangeRequest2.type = new messages_1.ProtocolRequestType(FoldingRangeRequest2.method);
          })(FoldingRangeRequest || (exports2.FoldingRangeRequest = FoldingRangeRequest = {}));
          var FoldingRangeRefreshRequest;
          (function(FoldingRangeRefreshRequest2) {
            FoldingRangeRefreshRequest2.method = `workspace/foldingRange/refresh`;
            FoldingRangeRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            FoldingRangeRefreshRequest2.type = new messages_1.ProtocolRequestType0(FoldingRangeRefreshRequest2.method);
          })(FoldingRangeRefreshRequest || (exports2.FoldingRangeRefreshRequest = FoldingRangeRefreshRequest = {}));
        }
      });
      require_protocol_declaration = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.DeclarationRequest = void 0;
          var messages_1 = require_messages2();
          var DeclarationRequest;
          (function(DeclarationRequest2) {
            DeclarationRequest2.method = "textDocument/declaration";
            DeclarationRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DeclarationRequest2.type = new messages_1.ProtocolRequestType(DeclarationRequest2.method);
          })(DeclarationRequest || (exports2.DeclarationRequest = DeclarationRequest = {}));
        }
      });
      require_protocol_selectionRange = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.SelectionRangeRequest = void 0;
          var messages_1 = require_messages2();
          var SelectionRangeRequest;
          (function(SelectionRangeRequest2) {
            SelectionRangeRequest2.method = "textDocument/selectionRange";
            SelectionRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            SelectionRangeRequest2.type = new messages_1.ProtocolRequestType(SelectionRangeRequest2.method);
          })(SelectionRangeRequest || (exports2.SelectionRangeRequest = SelectionRangeRequest = {}));
        }
      });
      require_protocol_progress = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCreateRequest = exports2.WorkDoneProgress = void 0;
          var vscode_jsonrpc_1 = require_main();
          var messages_1 = require_messages2();
          var WorkDoneProgress;
          (function(WorkDoneProgress2) {
            WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType();
            function is2(value2) {
              return value2 === WorkDoneProgress2.type;
            }
            __name(is2, "is");
            __name2(is2, "is");
            WorkDoneProgress2.is = is2;
          })(WorkDoneProgress || (exports2.WorkDoneProgress = WorkDoneProgress = {}));
          var WorkDoneProgressCreateRequest;
          (function(WorkDoneProgressCreateRequest2) {
            WorkDoneProgressCreateRequest2.method = "window/workDoneProgress/create";
            WorkDoneProgressCreateRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType(WorkDoneProgressCreateRequest2.method);
          })(WorkDoneProgressCreateRequest || (exports2.WorkDoneProgressCreateRequest = WorkDoneProgressCreateRequest = {}));
          var WorkDoneProgressCancelNotification;
          (function(WorkDoneProgressCancelNotification2) {
            WorkDoneProgressCancelNotification2.method = "window/workDoneProgress/cancel";
            WorkDoneProgressCancelNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType(WorkDoneProgressCancelNotification2.method);
          })(WorkDoneProgressCancelNotification || (exports2.WorkDoneProgressCancelNotification = WorkDoneProgressCancelNotification = {}));
        }
      });
      require_protocol_callHierarchy = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyIncomingCallsRequest = exports2.CallHierarchyPrepareRequest = void 0;
          var messages_1 = require_messages2();
          var CallHierarchyPrepareRequest;
          (function(CallHierarchyPrepareRequest2) {
            CallHierarchyPrepareRequest2.method = "textDocument/prepareCallHierarchy";
            CallHierarchyPrepareRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest2.method);
          })(CallHierarchyPrepareRequest || (exports2.CallHierarchyPrepareRequest = CallHierarchyPrepareRequest = {}));
          var CallHierarchyIncomingCallsRequest;
          (function(CallHierarchyIncomingCallsRequest2) {
            CallHierarchyIncomingCallsRequest2.method = "callHierarchy/incomingCalls";
            CallHierarchyIncomingCallsRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest2.method);
          })(CallHierarchyIncomingCallsRequest || (exports2.CallHierarchyIncomingCallsRequest = CallHierarchyIncomingCallsRequest = {}));
          var CallHierarchyOutgoingCallsRequest;
          (function(CallHierarchyOutgoingCallsRequest2) {
            CallHierarchyOutgoingCallsRequest2.method = "callHierarchy/outgoingCalls";
            CallHierarchyOutgoingCallsRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest2.method);
          })(CallHierarchyOutgoingCallsRequest || (exports2.CallHierarchyOutgoingCallsRequest = CallHierarchyOutgoingCallsRequest = {}));
        }
      });
      require_protocol_semanticTokens = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.SemanticTokensRefreshRequest = exports2.SemanticTokensRangeRequest = exports2.SemanticTokensDeltaRequest = exports2.SemanticTokensRequest = exports2.SemanticTokensRegistrationType = exports2.TokenFormat = void 0;
          var messages_1 = require_messages2();
          var TokenFormat;
          (function(TokenFormat2) {
            TokenFormat2.Relative = "relative";
          })(TokenFormat || (exports2.TokenFormat = TokenFormat = {}));
          var SemanticTokensRegistrationType;
          (function(SemanticTokensRegistrationType2) {
            SemanticTokensRegistrationType2.method = "textDocument/semanticTokens";
            SemanticTokensRegistrationType2.type = new messages_1.RegistrationType(SemanticTokensRegistrationType2.method);
          })(SemanticTokensRegistrationType || (exports2.SemanticTokensRegistrationType = SemanticTokensRegistrationType = {}));
          var SemanticTokensRequest;
          (function(SemanticTokensRequest2) {
            SemanticTokensRequest2.method = "textDocument/semanticTokens/full";
            SemanticTokensRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            SemanticTokensRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRequest2.method);
            SemanticTokensRequest2.registrationMethod = SemanticTokensRegistrationType.method;
          })(SemanticTokensRequest || (exports2.SemanticTokensRequest = SemanticTokensRequest = {}));
          var SemanticTokensDeltaRequest;
          (function(SemanticTokensDeltaRequest2) {
            SemanticTokensDeltaRequest2.method = "textDocument/semanticTokens/full/delta";
            SemanticTokensDeltaRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            SemanticTokensDeltaRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensDeltaRequest2.method);
            SemanticTokensDeltaRequest2.registrationMethod = SemanticTokensRegistrationType.method;
          })(SemanticTokensDeltaRequest || (exports2.SemanticTokensDeltaRequest = SemanticTokensDeltaRequest = {}));
          var SemanticTokensRangeRequest;
          (function(SemanticTokensRangeRequest2) {
            SemanticTokensRangeRequest2.method = "textDocument/semanticTokens/range";
            SemanticTokensRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest2.method);
            SemanticTokensRangeRequest2.registrationMethod = SemanticTokensRegistrationType.method;
          })(SemanticTokensRangeRequest || (exports2.SemanticTokensRangeRequest = SemanticTokensRangeRequest = {}));
          var SemanticTokensRefreshRequest;
          (function(SemanticTokensRefreshRequest2) {
            SemanticTokensRefreshRequest2.method = `workspace/semanticTokens/refresh`;
            SemanticTokensRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            SemanticTokensRefreshRequest2.type = new messages_1.ProtocolRequestType0(SemanticTokensRefreshRequest2.method);
          })(SemanticTokensRefreshRequest || (exports2.SemanticTokensRefreshRequest = SemanticTokensRefreshRequest = {}));
        }
      });
      require_protocol_showDocument = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.ShowDocumentRequest = void 0;
          var messages_1 = require_messages2();
          var ShowDocumentRequest;
          (function(ShowDocumentRequest2) {
            ShowDocumentRequest2.method = "window/showDocument";
            ShowDocumentRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            ShowDocumentRequest2.type = new messages_1.ProtocolRequestType(ShowDocumentRequest2.method);
          })(ShowDocumentRequest || (exports2.ShowDocumentRequest = ShowDocumentRequest = {}));
        }
      });
      require_protocol_linkedEditingRange = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.LinkedEditingRangeRequest = void 0;
          var messages_1 = require_messages2();
          var LinkedEditingRangeRequest;
          (function(LinkedEditingRangeRequest2) {
            LinkedEditingRangeRequest2.method = "textDocument/linkedEditingRange";
            LinkedEditingRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            LinkedEditingRangeRequest2.type = new messages_1.ProtocolRequestType(LinkedEditingRangeRequest2.method);
          })(LinkedEditingRangeRequest || (exports2.LinkedEditingRangeRequest = LinkedEditingRangeRequest = {}));
        }
      });
      require_protocol_fileOperations = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.WillDeleteFilesRequest = exports2.DidDeleteFilesNotification = exports2.DidRenameFilesNotification = exports2.WillRenameFilesRequest = exports2.DidCreateFilesNotification = exports2.WillCreateFilesRequest = exports2.FileOperationPatternKind = void 0;
          var messages_1 = require_messages2();
          var FileOperationPatternKind;
          (function(FileOperationPatternKind2) {
            FileOperationPatternKind2.file = "file";
            FileOperationPatternKind2.folder = "folder";
          })(FileOperationPatternKind || (exports2.FileOperationPatternKind = FileOperationPatternKind = {}));
          var WillCreateFilesRequest;
          (function(WillCreateFilesRequest2) {
            WillCreateFilesRequest2.method = "workspace/willCreateFiles";
            WillCreateFilesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            WillCreateFilesRequest2.type = new messages_1.ProtocolRequestType(WillCreateFilesRequest2.method);
          })(WillCreateFilesRequest || (exports2.WillCreateFilesRequest = WillCreateFilesRequest = {}));
          var DidCreateFilesNotification;
          (function(DidCreateFilesNotification2) {
            DidCreateFilesNotification2.method = "workspace/didCreateFiles";
            DidCreateFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidCreateFilesNotification2.type = new messages_1.ProtocolNotificationType(DidCreateFilesNotification2.method);
          })(DidCreateFilesNotification || (exports2.DidCreateFilesNotification = DidCreateFilesNotification = {}));
          var WillRenameFilesRequest;
          (function(WillRenameFilesRequest2) {
            WillRenameFilesRequest2.method = "workspace/willRenameFiles";
            WillRenameFilesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            WillRenameFilesRequest2.type = new messages_1.ProtocolRequestType(WillRenameFilesRequest2.method);
          })(WillRenameFilesRequest || (exports2.WillRenameFilesRequest = WillRenameFilesRequest = {}));
          var DidRenameFilesNotification;
          (function(DidRenameFilesNotification2) {
            DidRenameFilesNotification2.method = "workspace/didRenameFiles";
            DidRenameFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidRenameFilesNotification2.type = new messages_1.ProtocolNotificationType(DidRenameFilesNotification2.method);
          })(DidRenameFilesNotification || (exports2.DidRenameFilesNotification = DidRenameFilesNotification = {}));
          var DidDeleteFilesNotification;
          (function(DidDeleteFilesNotification2) {
            DidDeleteFilesNotification2.method = "workspace/didDeleteFiles";
            DidDeleteFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidDeleteFilesNotification2.type = new messages_1.ProtocolNotificationType(DidDeleteFilesNotification2.method);
          })(DidDeleteFilesNotification || (exports2.DidDeleteFilesNotification = DidDeleteFilesNotification = {}));
          var WillDeleteFilesRequest;
          (function(WillDeleteFilesRequest2) {
            WillDeleteFilesRequest2.method = "workspace/willDeleteFiles";
            WillDeleteFilesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            WillDeleteFilesRequest2.type = new messages_1.ProtocolRequestType(WillDeleteFilesRequest2.method);
          })(WillDeleteFilesRequest || (exports2.WillDeleteFilesRequest = WillDeleteFilesRequest = {}));
        }
      });
      require_protocol_moniker = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.MonikerRequest = exports2.MonikerKind = exports2.UniquenessLevel = void 0;
          var messages_1 = require_messages2();
          var UniquenessLevel;
          (function(UniquenessLevel2) {
            UniquenessLevel2.document = "document";
            UniquenessLevel2.project = "project";
            UniquenessLevel2.group = "group";
            UniquenessLevel2.scheme = "scheme";
            UniquenessLevel2.global = "global";
          })(UniquenessLevel || (exports2.UniquenessLevel = UniquenessLevel = {}));
          var MonikerKind;
          (function(MonikerKind2) {
            MonikerKind2.$import = "import";
            MonikerKind2.$export = "export";
            MonikerKind2.local = "local";
          })(MonikerKind || (exports2.MonikerKind = MonikerKind = {}));
          var MonikerRequest;
          (function(MonikerRequest2) {
            MonikerRequest2.method = "textDocument/moniker";
            MonikerRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            MonikerRequest2.type = new messages_1.ProtocolRequestType(MonikerRequest2.method);
          })(MonikerRequest || (exports2.MonikerRequest = MonikerRequest = {}));
        }
      });
      require_protocol_typeHierarchy = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.TypeHierarchySubtypesRequest = exports2.TypeHierarchySupertypesRequest = exports2.TypeHierarchyPrepareRequest = void 0;
          var messages_1 = require_messages2();
          var TypeHierarchyPrepareRequest;
          (function(TypeHierarchyPrepareRequest2) {
            TypeHierarchyPrepareRequest2.method = "textDocument/prepareTypeHierarchy";
            TypeHierarchyPrepareRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            TypeHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(TypeHierarchyPrepareRequest2.method);
          })(TypeHierarchyPrepareRequest || (exports2.TypeHierarchyPrepareRequest = TypeHierarchyPrepareRequest = {}));
          var TypeHierarchySupertypesRequest;
          (function(TypeHierarchySupertypesRequest2) {
            TypeHierarchySupertypesRequest2.method = "typeHierarchy/supertypes";
            TypeHierarchySupertypesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            TypeHierarchySupertypesRequest2.type = new messages_1.ProtocolRequestType(TypeHierarchySupertypesRequest2.method);
          })(TypeHierarchySupertypesRequest || (exports2.TypeHierarchySupertypesRequest = TypeHierarchySupertypesRequest = {}));
          var TypeHierarchySubtypesRequest;
          (function(TypeHierarchySubtypesRequest2) {
            TypeHierarchySubtypesRequest2.method = "typeHierarchy/subtypes";
            TypeHierarchySubtypesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            TypeHierarchySubtypesRequest2.type = new messages_1.ProtocolRequestType(TypeHierarchySubtypesRequest2.method);
          })(TypeHierarchySubtypesRequest || (exports2.TypeHierarchySubtypesRequest = TypeHierarchySubtypesRequest = {}));
        }
      });
      require_protocol_inlineValue = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.InlineValueRefreshRequest = exports2.InlineValueRequest = void 0;
          var messages_1 = require_messages2();
          var InlineValueRequest;
          (function(InlineValueRequest2) {
            InlineValueRequest2.method = "textDocument/inlineValue";
            InlineValueRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            InlineValueRequest2.type = new messages_1.ProtocolRequestType(InlineValueRequest2.method);
          })(InlineValueRequest || (exports2.InlineValueRequest = InlineValueRequest = {}));
          var InlineValueRefreshRequest;
          (function(InlineValueRefreshRequest2) {
            InlineValueRefreshRequest2.method = `workspace/inlineValue/refresh`;
            InlineValueRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            InlineValueRefreshRequest2.type = new messages_1.ProtocolRequestType0(InlineValueRefreshRequest2.method);
          })(InlineValueRefreshRequest || (exports2.InlineValueRefreshRequest = InlineValueRefreshRequest = {}));
        }
      });
      require_protocol_inlayHint = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.InlayHintRefreshRequest = exports2.InlayHintResolveRequest = exports2.InlayHintRequest = void 0;
          var messages_1 = require_messages2();
          var InlayHintRequest;
          (function(InlayHintRequest2) {
            InlayHintRequest2.method = "textDocument/inlayHint";
            InlayHintRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            InlayHintRequest2.type = new messages_1.ProtocolRequestType(InlayHintRequest2.method);
          })(InlayHintRequest || (exports2.InlayHintRequest = InlayHintRequest = {}));
          var InlayHintResolveRequest;
          (function(InlayHintResolveRequest2) {
            InlayHintResolveRequest2.method = "inlayHint/resolve";
            InlayHintResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            InlayHintResolveRequest2.type = new messages_1.ProtocolRequestType(InlayHintResolveRequest2.method);
          })(InlayHintResolveRequest || (exports2.InlayHintResolveRequest = InlayHintResolveRequest = {}));
          var InlayHintRefreshRequest;
          (function(InlayHintRefreshRequest2) {
            InlayHintRefreshRequest2.method = `workspace/inlayHint/refresh`;
            InlayHintRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            InlayHintRefreshRequest2.type = new messages_1.ProtocolRequestType0(InlayHintRefreshRequest2.method);
          })(InlayHintRefreshRequest || (exports2.InlayHintRefreshRequest = InlayHintRefreshRequest = {}));
        }
      });
      require_protocol_diagnostic = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.DiagnosticRefreshRequest = exports2.WorkspaceDiagnosticRequest = exports2.DocumentDiagnosticRequest = exports2.DocumentDiagnosticReportKind = exports2.DiagnosticServerCancellationData = void 0;
          var vscode_jsonrpc_1 = require_main();
          var Is2 = require_is2();
          var messages_1 = require_messages2();
          var DiagnosticServerCancellationData;
          (function(DiagnosticServerCancellationData2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && Is2.boolean(candidate.retriggerRequest);
            }
            __name(is2, "is");
            __name2(is2, "is");
            DiagnosticServerCancellationData2.is = is2;
          })(DiagnosticServerCancellationData || (exports2.DiagnosticServerCancellationData = DiagnosticServerCancellationData = {}));
          var DocumentDiagnosticReportKind;
          (function(DocumentDiagnosticReportKind2) {
            DocumentDiagnosticReportKind2.Full = "full";
            DocumentDiagnosticReportKind2.Unchanged = "unchanged";
          })(DocumentDiagnosticReportKind || (exports2.DocumentDiagnosticReportKind = DocumentDiagnosticReportKind = {}));
          var DocumentDiagnosticRequest;
          (function(DocumentDiagnosticRequest2) {
            DocumentDiagnosticRequest2.method = "textDocument/diagnostic";
            DocumentDiagnosticRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentDiagnosticRequest2.type = new messages_1.ProtocolRequestType(DocumentDiagnosticRequest2.method);
            DocumentDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType();
          })(DocumentDiagnosticRequest || (exports2.DocumentDiagnosticRequest = DocumentDiagnosticRequest = {}));
          var WorkspaceDiagnosticRequest;
          (function(WorkspaceDiagnosticRequest2) {
            WorkspaceDiagnosticRequest2.method = "workspace/diagnostic";
            WorkspaceDiagnosticRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            WorkspaceDiagnosticRequest2.type = new messages_1.ProtocolRequestType(WorkspaceDiagnosticRequest2.method);
            WorkspaceDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType();
          })(WorkspaceDiagnosticRequest || (exports2.WorkspaceDiagnosticRequest = WorkspaceDiagnosticRequest = {}));
          var DiagnosticRefreshRequest;
          (function(DiagnosticRefreshRequest2) {
            DiagnosticRefreshRequest2.method = `workspace/diagnostic/refresh`;
            DiagnosticRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            DiagnosticRefreshRequest2.type = new messages_1.ProtocolRequestType0(DiagnosticRefreshRequest2.method);
          })(DiagnosticRefreshRequest || (exports2.DiagnosticRefreshRequest = DiagnosticRefreshRequest = {}));
        }
      });
      require_protocol_notebook = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.DidCloseNotebookDocumentNotification = exports2.DidSaveNotebookDocumentNotification = exports2.DidChangeNotebookDocumentNotification = exports2.NotebookCellArrayChange = exports2.DidOpenNotebookDocumentNotification = exports2.NotebookDocumentSyncRegistrationType = exports2.NotebookDocument = exports2.NotebookCell = exports2.ExecutionSummary = exports2.NotebookCellKind = void 0;
          var vscode_languageserver_types_1 = (init_main(), __toCommonJS2(main_exports));
          var Is2 = require_is2();
          var messages_1 = require_messages2();
          var NotebookCellKind;
          (function(NotebookCellKind2) {
            NotebookCellKind2.Markup = 1;
            NotebookCellKind2.Code = 2;
            function is2(value2) {
              return value2 === 1 || value2 === 2;
            }
            __name(is2, "is");
            __name2(is2, "is");
            NotebookCellKind2.is = is2;
          })(NotebookCellKind || (exports2.NotebookCellKind = NotebookCellKind = {}));
          var ExecutionSummary;
          (function(ExecutionSummary2) {
            function create4(executionOrder, success) {
              const result = { executionOrder };
              if (success === true || success === false) {
                result.success = success;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            ExecutionSummary2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.executionOrder) && (candidate.success === void 0 || Is2.boolean(candidate.success));
            }
            __name(is2, "is");
            __name2(is2, "is");
            ExecutionSummary2.is = is2;
            function equals(one4, other) {
              if (one4 === other) {
                return true;
              }
              if (one4 === null || one4 === void 0 || other === null || other === void 0) {
                return false;
              }
              return one4.executionOrder === other.executionOrder && one4.success === other.success;
            }
            __name(equals, "equals");
            __name2(equals, "equals");
            ExecutionSummary2.equals = equals;
          })(ExecutionSummary || (exports2.ExecutionSummary = ExecutionSummary = {}));
          var NotebookCell;
          (function(NotebookCell2) {
            function create4(kind, document2) {
              return { kind, document: document2 };
            }
            __name(create4, "create");
            __name2(create4, "create");
            NotebookCell2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && NotebookCellKind.is(candidate.kind) && vscode_languageserver_types_1.DocumentUri.is(candidate.document) && (candidate.metadata === void 0 || Is2.objectLiteral(candidate.metadata));
            }
            __name(is2, "is");
            __name2(is2, "is");
            NotebookCell2.is = is2;
            function diff2(one4, two) {
              const result = /* @__PURE__ */ new Set();
              if (one4.document !== two.document) {
                result.add("document");
              }
              if (one4.kind !== two.kind) {
                result.add("kind");
              }
              if (one4.executionSummary !== two.executionSummary) {
                result.add("executionSummary");
              }
              if ((one4.metadata !== void 0 || two.metadata !== void 0) && !equalsMetadata(one4.metadata, two.metadata)) {
                result.add("metadata");
              }
              if ((one4.executionSummary !== void 0 || two.executionSummary !== void 0) && !ExecutionSummary.equals(one4.executionSummary, two.executionSummary)) {
                result.add("executionSummary");
              }
              return result;
            }
            __name(diff2, "diff");
            __name2(diff2, "diff");
            NotebookCell2.diff = diff2;
            function equalsMetadata(one4, other) {
              if (one4 === other) {
                return true;
              }
              if (one4 === null || one4 === void 0 || other === null || other === void 0) {
                return false;
              }
              if (typeof one4 !== typeof other) {
                return false;
              }
              if (typeof one4 !== "object") {
                return false;
              }
              const oneArray = Array.isArray(one4);
              const otherArray = Array.isArray(other);
              if (oneArray !== otherArray) {
                return false;
              }
              if (oneArray && otherArray) {
                if (one4.length !== other.length) {
                  return false;
                }
                for (let i2 = 0; i2 < one4.length; i2++) {
                  if (!equalsMetadata(one4[i2], other[i2])) {
                    return false;
                  }
                }
              }
              if (Is2.objectLiteral(one4) && Is2.objectLiteral(other)) {
                const oneKeys = Object.keys(one4);
                const otherKeys = Object.keys(other);
                if (oneKeys.length !== otherKeys.length) {
                  return false;
                }
                oneKeys.sort();
                otherKeys.sort();
                if (!equalsMetadata(oneKeys, otherKeys)) {
                  return false;
                }
                for (let i2 = 0; i2 < oneKeys.length; i2++) {
                  const prop = oneKeys[i2];
                  if (!equalsMetadata(one4[prop], other[prop])) {
                    return false;
                  }
                }
              }
              return true;
            }
            __name(equalsMetadata, "equalsMetadata");
            __name2(equalsMetadata, "equalsMetadata");
          })(NotebookCell || (exports2.NotebookCell = NotebookCell = {}));
          var NotebookDocument;
          (function(NotebookDocument2) {
            function create4(uri, notebookType, version3, cells) {
              return { uri, notebookType, version: version3, cells };
            }
            __name(create4, "create");
            __name2(create4, "create");
            NotebookDocument2.create = create4;
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && Is2.string(candidate.uri) && vscode_languageserver_types_1.integer.is(candidate.version) && Is2.typedArray(candidate.cells, NotebookCell.is);
            }
            __name(is2, "is");
            __name2(is2, "is");
            NotebookDocument2.is = is2;
          })(NotebookDocument || (exports2.NotebookDocument = NotebookDocument = {}));
          var NotebookDocumentSyncRegistrationType;
          (function(NotebookDocumentSyncRegistrationType2) {
            NotebookDocumentSyncRegistrationType2.method = "notebookDocument/sync";
            NotebookDocumentSyncRegistrationType2.messageDirection = messages_1.MessageDirection.clientToServer;
            NotebookDocumentSyncRegistrationType2.type = new messages_1.RegistrationType(NotebookDocumentSyncRegistrationType2.method);
          })(NotebookDocumentSyncRegistrationType || (exports2.NotebookDocumentSyncRegistrationType = NotebookDocumentSyncRegistrationType = {}));
          var DidOpenNotebookDocumentNotification;
          (function(DidOpenNotebookDocumentNotification2) {
            DidOpenNotebookDocumentNotification2.method = "notebookDocument/didOpen";
            DidOpenNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidOpenNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidOpenNotebookDocumentNotification2.method);
            DidOpenNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
          })(DidOpenNotebookDocumentNotification || (exports2.DidOpenNotebookDocumentNotification = DidOpenNotebookDocumentNotification = {}));
          var NotebookCellArrayChange;
          (function(NotebookCellArrayChange2) {
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.start) && vscode_languageserver_types_1.uinteger.is(candidate.deleteCount) && (candidate.cells === void 0 || Is2.typedArray(candidate.cells, NotebookCell.is));
            }
            __name(is2, "is");
            __name2(is2, "is");
            NotebookCellArrayChange2.is = is2;
            function create4(start3, deleteCount, cells) {
              const result = { start: start3, deleteCount };
              if (cells !== void 0) {
                result.cells = cells;
              }
              return result;
            }
            __name(create4, "create");
            __name2(create4, "create");
            NotebookCellArrayChange2.create = create4;
          })(NotebookCellArrayChange || (exports2.NotebookCellArrayChange = NotebookCellArrayChange = {}));
          var DidChangeNotebookDocumentNotification;
          (function(DidChangeNotebookDocumentNotification2) {
            DidChangeNotebookDocumentNotification2.method = "notebookDocument/didChange";
            DidChangeNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidChangeNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeNotebookDocumentNotification2.method);
            DidChangeNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
          })(DidChangeNotebookDocumentNotification || (exports2.DidChangeNotebookDocumentNotification = DidChangeNotebookDocumentNotification = {}));
          var DidSaveNotebookDocumentNotification;
          (function(DidSaveNotebookDocumentNotification2) {
            DidSaveNotebookDocumentNotification2.method = "notebookDocument/didSave";
            DidSaveNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidSaveNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveNotebookDocumentNotification2.method);
            DidSaveNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
          })(DidSaveNotebookDocumentNotification || (exports2.DidSaveNotebookDocumentNotification = DidSaveNotebookDocumentNotification = {}));
          var DidCloseNotebookDocumentNotification;
          (function(DidCloseNotebookDocumentNotification2) {
            DidCloseNotebookDocumentNotification2.method = "notebookDocument/didClose";
            DidCloseNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidCloseNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidCloseNotebookDocumentNotification2.method);
            DidCloseNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
          })(DidCloseNotebookDocumentNotification || (exports2.DidCloseNotebookDocumentNotification = DidCloseNotebookDocumentNotification = {}));
        }
      });
      require_protocol_inlineCompletion = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.InlineCompletionRequest = void 0;
          var messages_1 = require_messages2();
          var InlineCompletionRequest;
          (function(InlineCompletionRequest2) {
            InlineCompletionRequest2.method = "textDocument/inlineCompletion";
            InlineCompletionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            InlineCompletionRequest2.type = new messages_1.ProtocolRequestType(InlineCompletionRequest2.method);
          })(InlineCompletionRequest || (exports2.InlineCompletionRequest = InlineCompletionRequest = {}));
        }
      });
      require_protocol = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.WorkspaceSymbolRequest = exports2.CodeActionResolveRequest = exports2.CodeActionRequest = exports2.DocumentSymbolRequest = exports2.DocumentHighlightRequest = exports2.ReferencesRequest = exports2.DefinitionRequest = exports2.SignatureHelpRequest = exports2.SignatureHelpTriggerKind = exports2.HoverRequest = exports2.CompletionResolveRequest = exports2.CompletionRequest = exports2.CompletionTriggerKind = exports2.PublishDiagnosticsNotification = exports2.WatchKind = exports2.RelativePattern = exports2.FileChangeType = exports2.DidChangeWatchedFilesNotification = exports2.WillSaveTextDocumentWaitUntilRequest = exports2.WillSaveTextDocumentNotification = exports2.TextDocumentSaveReason = exports2.DidSaveTextDocumentNotification = exports2.DidCloseTextDocumentNotification = exports2.DidChangeTextDocumentNotification = exports2.TextDocumentContentChangeEvent = exports2.DidOpenTextDocumentNotification = exports2.TextDocumentSyncKind = exports2.TelemetryEventNotification = exports2.LogMessageNotification = exports2.ShowMessageRequest = exports2.ShowMessageNotification = exports2.MessageType = exports2.DidChangeConfigurationNotification = exports2.ExitNotification = exports2.ShutdownRequest = exports2.InitializedNotification = exports2.InitializeErrorCodes = exports2.InitializeRequest = exports2.WorkDoneProgressOptions = exports2.TextDocumentRegistrationOptions = exports2.StaticRegistrationOptions = exports2.PositionEncodingKind = exports2.FailureHandlingKind = exports2.ResourceOperationKind = exports2.UnregistrationRequest = exports2.RegistrationRequest = exports2.DocumentSelector = exports2.NotebookCellTextDocumentFilter = exports2.NotebookDocumentFilter = exports2.TextDocumentFilter = void 0;
          exports2.MonikerRequest = exports2.MonikerKind = exports2.UniquenessLevel = exports2.WillDeleteFilesRequest = exports2.DidDeleteFilesNotification = exports2.WillRenameFilesRequest = exports2.DidRenameFilesNotification = exports2.WillCreateFilesRequest = exports2.DidCreateFilesNotification = exports2.FileOperationPatternKind = exports2.LinkedEditingRangeRequest = exports2.ShowDocumentRequest = exports2.SemanticTokensRegistrationType = exports2.SemanticTokensRefreshRequest = exports2.SemanticTokensRangeRequest = exports2.SemanticTokensDeltaRequest = exports2.SemanticTokensRequest = exports2.TokenFormat = exports2.CallHierarchyPrepareRequest = exports2.CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyIncomingCallsRequest = exports2.WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCreateRequest = exports2.WorkDoneProgress = exports2.SelectionRangeRequest = exports2.DeclarationRequest = exports2.FoldingRangeRefreshRequest = exports2.FoldingRangeRequest = exports2.ColorPresentationRequest = exports2.DocumentColorRequest = exports2.ConfigurationRequest = exports2.DidChangeWorkspaceFoldersNotification = exports2.WorkspaceFoldersRequest = exports2.TypeDefinitionRequest = exports2.ImplementationRequest = exports2.ApplyWorkspaceEditRequest = exports2.ExecuteCommandRequest = exports2.PrepareRenameRequest = exports2.RenameRequest = exports2.PrepareSupportDefaultBehavior = exports2.DocumentOnTypeFormattingRequest = exports2.DocumentRangesFormattingRequest = exports2.DocumentRangeFormattingRequest = exports2.DocumentFormattingRequest = exports2.DocumentLinkResolveRequest = exports2.DocumentLinkRequest = exports2.CodeLensRefreshRequest = exports2.CodeLensResolveRequest = exports2.CodeLensRequest = exports2.WorkspaceSymbolResolveRequest = void 0;
          exports2.InlineCompletionRequest = exports2.DidCloseNotebookDocumentNotification = exports2.DidSaveNotebookDocumentNotification = exports2.DidChangeNotebookDocumentNotification = exports2.NotebookCellArrayChange = exports2.DidOpenNotebookDocumentNotification = exports2.NotebookDocumentSyncRegistrationType = exports2.NotebookDocument = exports2.NotebookCell = exports2.ExecutionSummary = exports2.NotebookCellKind = exports2.DiagnosticRefreshRequest = exports2.WorkspaceDiagnosticRequest = exports2.DocumentDiagnosticRequest = exports2.DocumentDiagnosticReportKind = exports2.DiagnosticServerCancellationData = exports2.InlayHintRefreshRequest = exports2.InlayHintResolveRequest = exports2.InlayHintRequest = exports2.InlineValueRefreshRequest = exports2.InlineValueRequest = exports2.TypeHierarchySupertypesRequest = exports2.TypeHierarchySubtypesRequest = exports2.TypeHierarchyPrepareRequest = void 0;
          var messages_1 = require_messages2();
          var vscode_languageserver_types_1 = (init_main(), __toCommonJS2(main_exports));
          var Is2 = require_is2();
          var protocol_implementation_1 = require_protocol_implementation();
          Object.defineProperty(exports2, "ImplementationRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_implementation_1.ImplementationRequest;
          }, "get") });
          var protocol_typeDefinition_1 = require_protocol_typeDefinition();
          Object.defineProperty(exports2, "TypeDefinitionRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_typeDefinition_1.TypeDefinitionRequest;
          }, "get") });
          var protocol_workspaceFolder_1 = require_protocol_workspaceFolder();
          Object.defineProperty(exports2, "WorkspaceFoldersRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_workspaceFolder_1.WorkspaceFoldersRequest;
          }, "get") });
          Object.defineProperty(exports2, "DidChangeWorkspaceFoldersNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_workspaceFolder_1.DidChangeWorkspaceFoldersNotification;
          }, "get") });
          var protocol_configuration_1 = require_protocol_configuration();
          Object.defineProperty(exports2, "ConfigurationRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_configuration_1.ConfigurationRequest;
          }, "get") });
          var protocol_colorProvider_1 = require_protocol_colorProvider();
          Object.defineProperty(exports2, "DocumentColorRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_colorProvider_1.DocumentColorRequest;
          }, "get") });
          Object.defineProperty(exports2, "ColorPresentationRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_colorProvider_1.ColorPresentationRequest;
          }, "get") });
          var protocol_foldingRange_1 = require_protocol_foldingRange();
          Object.defineProperty(exports2, "FoldingRangeRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_foldingRange_1.FoldingRangeRequest;
          }, "get") });
          Object.defineProperty(exports2, "FoldingRangeRefreshRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_foldingRange_1.FoldingRangeRefreshRequest;
          }, "get") });
          var protocol_declaration_1 = require_protocol_declaration();
          Object.defineProperty(exports2, "DeclarationRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_declaration_1.DeclarationRequest;
          }, "get") });
          var protocol_selectionRange_1 = require_protocol_selectionRange();
          Object.defineProperty(exports2, "SelectionRangeRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_selectionRange_1.SelectionRangeRequest;
          }, "get") });
          var protocol_progress_1 = require_protocol_progress();
          Object.defineProperty(exports2, "WorkDoneProgress", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_progress_1.WorkDoneProgress;
          }, "get") });
          Object.defineProperty(exports2, "WorkDoneProgressCreateRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_progress_1.WorkDoneProgressCreateRequest;
          }, "get") });
          Object.defineProperty(exports2, "WorkDoneProgressCancelNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_progress_1.WorkDoneProgressCancelNotification;
          }, "get") });
          var protocol_callHierarchy_1 = require_protocol_callHierarchy();
          Object.defineProperty(exports2, "CallHierarchyIncomingCallsRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest;
          }, "get") });
          Object.defineProperty(exports2, "CallHierarchyOutgoingCallsRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest;
          }, "get") });
          Object.defineProperty(exports2, "CallHierarchyPrepareRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_callHierarchy_1.CallHierarchyPrepareRequest;
          }, "get") });
          var protocol_semanticTokens_1 = require_protocol_semanticTokens();
          Object.defineProperty(exports2, "TokenFormat", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_semanticTokens_1.TokenFormat;
          }, "get") });
          Object.defineProperty(exports2, "SemanticTokensRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_semanticTokens_1.SemanticTokensRequest;
          }, "get") });
          Object.defineProperty(exports2, "SemanticTokensDeltaRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_semanticTokens_1.SemanticTokensDeltaRequest;
          }, "get") });
          Object.defineProperty(exports2, "SemanticTokensRangeRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_semanticTokens_1.SemanticTokensRangeRequest;
          }, "get") });
          Object.defineProperty(exports2, "SemanticTokensRefreshRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_semanticTokens_1.SemanticTokensRefreshRequest;
          }, "get") });
          Object.defineProperty(exports2, "SemanticTokensRegistrationType", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_semanticTokens_1.SemanticTokensRegistrationType;
          }, "get") });
          var protocol_showDocument_1 = require_protocol_showDocument();
          Object.defineProperty(exports2, "ShowDocumentRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_showDocument_1.ShowDocumentRequest;
          }, "get") });
          var protocol_linkedEditingRange_1 = require_protocol_linkedEditingRange();
          Object.defineProperty(exports2, "LinkedEditingRangeRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_linkedEditingRange_1.LinkedEditingRangeRequest;
          }, "get") });
          var protocol_fileOperations_1 = require_protocol_fileOperations();
          Object.defineProperty(exports2, "FileOperationPatternKind", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_fileOperations_1.FileOperationPatternKind;
          }, "get") });
          Object.defineProperty(exports2, "DidCreateFilesNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_fileOperations_1.DidCreateFilesNotification;
          }, "get") });
          Object.defineProperty(exports2, "WillCreateFilesRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_fileOperations_1.WillCreateFilesRequest;
          }, "get") });
          Object.defineProperty(exports2, "DidRenameFilesNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_fileOperations_1.DidRenameFilesNotification;
          }, "get") });
          Object.defineProperty(exports2, "WillRenameFilesRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_fileOperations_1.WillRenameFilesRequest;
          }, "get") });
          Object.defineProperty(exports2, "DidDeleteFilesNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_fileOperations_1.DidDeleteFilesNotification;
          }, "get") });
          Object.defineProperty(exports2, "WillDeleteFilesRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_fileOperations_1.WillDeleteFilesRequest;
          }, "get") });
          var protocol_moniker_1 = require_protocol_moniker();
          Object.defineProperty(exports2, "UniquenessLevel", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_moniker_1.UniquenessLevel;
          }, "get") });
          Object.defineProperty(exports2, "MonikerKind", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_moniker_1.MonikerKind;
          }, "get") });
          Object.defineProperty(exports2, "MonikerRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_moniker_1.MonikerRequest;
          }, "get") });
          var protocol_typeHierarchy_1 = require_protocol_typeHierarchy();
          Object.defineProperty(exports2, "TypeHierarchyPrepareRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_typeHierarchy_1.TypeHierarchyPrepareRequest;
          }, "get") });
          Object.defineProperty(exports2, "TypeHierarchySubtypesRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_typeHierarchy_1.TypeHierarchySubtypesRequest;
          }, "get") });
          Object.defineProperty(exports2, "TypeHierarchySupertypesRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_typeHierarchy_1.TypeHierarchySupertypesRequest;
          }, "get") });
          var protocol_inlineValue_1 = require_protocol_inlineValue();
          Object.defineProperty(exports2, "InlineValueRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_inlineValue_1.InlineValueRequest;
          }, "get") });
          Object.defineProperty(exports2, "InlineValueRefreshRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_inlineValue_1.InlineValueRefreshRequest;
          }, "get") });
          var protocol_inlayHint_1 = require_protocol_inlayHint();
          Object.defineProperty(exports2, "InlayHintRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_inlayHint_1.InlayHintRequest;
          }, "get") });
          Object.defineProperty(exports2, "InlayHintResolveRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_inlayHint_1.InlayHintResolveRequest;
          }, "get") });
          Object.defineProperty(exports2, "InlayHintRefreshRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_inlayHint_1.InlayHintRefreshRequest;
          }, "get") });
          var protocol_diagnostic_1 = require_protocol_diagnostic();
          Object.defineProperty(exports2, "DiagnosticServerCancellationData", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_diagnostic_1.DiagnosticServerCancellationData;
          }, "get") });
          Object.defineProperty(exports2, "DocumentDiagnosticReportKind", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_diagnostic_1.DocumentDiagnosticReportKind;
          }, "get") });
          Object.defineProperty(exports2, "DocumentDiagnosticRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_diagnostic_1.DocumentDiagnosticRequest;
          }, "get") });
          Object.defineProperty(exports2, "WorkspaceDiagnosticRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_diagnostic_1.WorkspaceDiagnosticRequest;
          }, "get") });
          Object.defineProperty(exports2, "DiagnosticRefreshRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_diagnostic_1.DiagnosticRefreshRequest;
          }, "get") });
          var protocol_notebook_1 = require_protocol_notebook();
          Object.defineProperty(exports2, "NotebookCellKind", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.NotebookCellKind;
          }, "get") });
          Object.defineProperty(exports2, "ExecutionSummary", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.ExecutionSummary;
          }, "get") });
          Object.defineProperty(exports2, "NotebookCell", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.NotebookCell;
          }, "get") });
          Object.defineProperty(exports2, "NotebookDocument", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.NotebookDocument;
          }, "get") });
          Object.defineProperty(exports2, "NotebookDocumentSyncRegistrationType", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.NotebookDocumentSyncRegistrationType;
          }, "get") });
          Object.defineProperty(exports2, "DidOpenNotebookDocumentNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.DidOpenNotebookDocumentNotification;
          }, "get") });
          Object.defineProperty(exports2, "NotebookCellArrayChange", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.NotebookCellArrayChange;
          }, "get") });
          Object.defineProperty(exports2, "DidChangeNotebookDocumentNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.DidChangeNotebookDocumentNotification;
          }, "get") });
          Object.defineProperty(exports2, "DidSaveNotebookDocumentNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.DidSaveNotebookDocumentNotification;
          }, "get") });
          Object.defineProperty(exports2, "DidCloseNotebookDocumentNotification", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_notebook_1.DidCloseNotebookDocumentNotification;
          }, "get") });
          var protocol_inlineCompletion_1 = require_protocol_inlineCompletion();
          Object.defineProperty(exports2, "InlineCompletionRequest", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return protocol_inlineCompletion_1.InlineCompletionRequest;
          }, "get") });
          var TextDocumentFilter;
          (function(TextDocumentFilter2) {
            function is2(value2) {
              const candidate = value2;
              return Is2.string(candidate) || (Is2.string(candidate.language) || Is2.string(candidate.scheme) || Is2.string(candidate.pattern));
            }
            __name(is2, "is");
            __name2(is2, "is");
            TextDocumentFilter2.is = is2;
          })(TextDocumentFilter || (exports2.TextDocumentFilter = TextDocumentFilter = {}));
          var NotebookDocumentFilter;
          (function(NotebookDocumentFilter2) {
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && (Is2.string(candidate.notebookType) || Is2.string(candidate.scheme) || Is2.string(candidate.pattern));
            }
            __name(is2, "is");
            __name2(is2, "is");
            NotebookDocumentFilter2.is = is2;
          })(NotebookDocumentFilter || (exports2.NotebookDocumentFilter = NotebookDocumentFilter = {}));
          var NotebookCellTextDocumentFilter;
          (function(NotebookCellTextDocumentFilter2) {
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && (Is2.string(candidate.notebook) || NotebookDocumentFilter.is(candidate.notebook)) && (candidate.language === void 0 || Is2.string(candidate.language));
            }
            __name(is2, "is");
            __name2(is2, "is");
            NotebookCellTextDocumentFilter2.is = is2;
          })(NotebookCellTextDocumentFilter || (exports2.NotebookCellTextDocumentFilter = NotebookCellTextDocumentFilter = {}));
          var DocumentSelector;
          (function(DocumentSelector2) {
            function is2(value2) {
              if (!Array.isArray(value2)) {
                return false;
              }
              for (let elem of value2) {
                if (!Is2.string(elem) && !TextDocumentFilter.is(elem) && !NotebookCellTextDocumentFilter.is(elem)) {
                  return false;
                }
              }
              return true;
            }
            __name(is2, "is");
            __name2(is2, "is");
            DocumentSelector2.is = is2;
          })(DocumentSelector || (exports2.DocumentSelector = DocumentSelector = {}));
          var RegistrationRequest;
          (function(RegistrationRequest2) {
            RegistrationRequest2.method = "client/registerCapability";
            RegistrationRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            RegistrationRequest2.type = new messages_1.ProtocolRequestType(RegistrationRequest2.method);
          })(RegistrationRequest || (exports2.RegistrationRequest = RegistrationRequest = {}));
          var UnregistrationRequest;
          (function(UnregistrationRequest2) {
            UnregistrationRequest2.method = "client/unregisterCapability";
            UnregistrationRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            UnregistrationRequest2.type = new messages_1.ProtocolRequestType(UnregistrationRequest2.method);
          })(UnregistrationRequest || (exports2.UnregistrationRequest = UnregistrationRequest = {}));
          var ResourceOperationKind;
          (function(ResourceOperationKind2) {
            ResourceOperationKind2.Create = "create";
            ResourceOperationKind2.Rename = "rename";
            ResourceOperationKind2.Delete = "delete";
          })(ResourceOperationKind || (exports2.ResourceOperationKind = ResourceOperationKind = {}));
          var FailureHandlingKind;
          (function(FailureHandlingKind2) {
            FailureHandlingKind2.Abort = "abort";
            FailureHandlingKind2.Transactional = "transactional";
            FailureHandlingKind2.TextOnlyTransactional = "textOnlyTransactional";
            FailureHandlingKind2.Undo = "undo";
          })(FailureHandlingKind || (exports2.FailureHandlingKind = FailureHandlingKind = {}));
          var PositionEncodingKind;
          (function(PositionEncodingKind2) {
            PositionEncodingKind2.UTF8 = "utf-8";
            PositionEncodingKind2.UTF16 = "utf-16";
            PositionEncodingKind2.UTF32 = "utf-32";
          })(PositionEncodingKind || (exports2.PositionEncodingKind = PositionEncodingKind = {}));
          var StaticRegistrationOptions;
          (function(StaticRegistrationOptions2) {
            function hasId(value2) {
              const candidate = value2;
              return candidate && Is2.string(candidate.id) && candidate.id.length > 0;
            }
            __name(hasId, "hasId");
            __name2(hasId, "hasId");
            StaticRegistrationOptions2.hasId = hasId;
          })(StaticRegistrationOptions || (exports2.StaticRegistrationOptions = StaticRegistrationOptions = {}));
          var TextDocumentRegistrationOptions;
          (function(TextDocumentRegistrationOptions2) {
            function is2(value2) {
              const candidate = value2;
              return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
            }
            __name(is2, "is");
            __name2(is2, "is");
            TextDocumentRegistrationOptions2.is = is2;
          })(TextDocumentRegistrationOptions || (exports2.TextDocumentRegistrationOptions = TextDocumentRegistrationOptions = {}));
          var WorkDoneProgressOptions;
          (function(WorkDoneProgressOptions2) {
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && (candidate.workDoneProgress === void 0 || Is2.boolean(candidate.workDoneProgress));
            }
            __name(is2, "is");
            __name2(is2, "is");
            WorkDoneProgressOptions2.is = is2;
            function hasWorkDoneProgress(value2) {
              const candidate = value2;
              return candidate && Is2.boolean(candidate.workDoneProgress);
            }
            __name(hasWorkDoneProgress, "hasWorkDoneProgress");
            __name2(hasWorkDoneProgress, "hasWorkDoneProgress");
            WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress;
          })(WorkDoneProgressOptions || (exports2.WorkDoneProgressOptions = WorkDoneProgressOptions = {}));
          var InitializeRequest;
          (function(InitializeRequest2) {
            InitializeRequest2.method = "initialize";
            InitializeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            InitializeRequest2.type = new messages_1.ProtocolRequestType(InitializeRequest2.method);
          })(InitializeRequest || (exports2.InitializeRequest = InitializeRequest = {}));
          var InitializeErrorCodes;
          (function(InitializeErrorCodes2) {
            InitializeErrorCodes2.unknownProtocolVersion = 1;
          })(InitializeErrorCodes || (exports2.InitializeErrorCodes = InitializeErrorCodes = {}));
          var InitializedNotification;
          (function(InitializedNotification2) {
            InitializedNotification2.method = "initialized";
            InitializedNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            InitializedNotification2.type = new messages_1.ProtocolNotificationType(InitializedNotification2.method);
          })(InitializedNotification || (exports2.InitializedNotification = InitializedNotification = {}));
          var ShutdownRequest;
          (function(ShutdownRequest2) {
            ShutdownRequest2.method = "shutdown";
            ShutdownRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            ShutdownRequest2.type = new messages_1.ProtocolRequestType0(ShutdownRequest2.method);
          })(ShutdownRequest || (exports2.ShutdownRequest = ShutdownRequest = {}));
          var ExitNotification;
          (function(ExitNotification2) {
            ExitNotification2.method = "exit";
            ExitNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            ExitNotification2.type = new messages_1.ProtocolNotificationType0(ExitNotification2.method);
          })(ExitNotification || (exports2.ExitNotification = ExitNotification = {}));
          var DidChangeConfigurationNotification;
          (function(DidChangeConfigurationNotification2) {
            DidChangeConfigurationNotification2.method = "workspace/didChangeConfiguration";
            DidChangeConfigurationNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidChangeConfigurationNotification2.type = new messages_1.ProtocolNotificationType(DidChangeConfigurationNotification2.method);
          })(DidChangeConfigurationNotification || (exports2.DidChangeConfigurationNotification = DidChangeConfigurationNotification = {}));
          var MessageType;
          (function(MessageType2) {
            MessageType2.Error = 1;
            MessageType2.Warning = 2;
            MessageType2.Info = 3;
            MessageType2.Log = 4;
            MessageType2.Debug = 5;
          })(MessageType || (exports2.MessageType = MessageType = {}));
          var ShowMessageNotification;
          (function(ShowMessageNotification2) {
            ShowMessageNotification2.method = "window/showMessage";
            ShowMessageNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
            ShowMessageNotification2.type = new messages_1.ProtocolNotificationType(ShowMessageNotification2.method);
          })(ShowMessageNotification || (exports2.ShowMessageNotification = ShowMessageNotification = {}));
          var ShowMessageRequest;
          (function(ShowMessageRequest2) {
            ShowMessageRequest2.method = "window/showMessageRequest";
            ShowMessageRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            ShowMessageRequest2.type = new messages_1.ProtocolRequestType(ShowMessageRequest2.method);
          })(ShowMessageRequest || (exports2.ShowMessageRequest = ShowMessageRequest = {}));
          var LogMessageNotification;
          (function(LogMessageNotification2) {
            LogMessageNotification2.method = "window/logMessage";
            LogMessageNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
            LogMessageNotification2.type = new messages_1.ProtocolNotificationType(LogMessageNotification2.method);
          })(LogMessageNotification || (exports2.LogMessageNotification = LogMessageNotification = {}));
          var TelemetryEventNotification;
          (function(TelemetryEventNotification2) {
            TelemetryEventNotification2.method = "telemetry/event";
            TelemetryEventNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
            TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType(TelemetryEventNotification2.method);
          })(TelemetryEventNotification || (exports2.TelemetryEventNotification = TelemetryEventNotification = {}));
          var TextDocumentSyncKind;
          (function(TextDocumentSyncKind2) {
            TextDocumentSyncKind2.None = 0;
            TextDocumentSyncKind2.Full = 1;
            TextDocumentSyncKind2.Incremental = 2;
          })(TextDocumentSyncKind || (exports2.TextDocumentSyncKind = TextDocumentSyncKind = {}));
          var DidOpenTextDocumentNotification;
          (function(DidOpenTextDocumentNotification2) {
            DidOpenTextDocumentNotification2.method = "textDocument/didOpen";
            DidOpenTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidOpenTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification2.method);
          })(DidOpenTextDocumentNotification || (exports2.DidOpenTextDocumentNotification = DidOpenTextDocumentNotification = {}));
          var TextDocumentContentChangeEvent;
          (function(TextDocumentContentChangeEvent2) {
            function isIncremental(event3) {
              let candidate = event3;
              return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === "number");
            }
            __name(isIncremental, "isIncremental");
            __name2(isIncremental, "isIncremental");
            TextDocumentContentChangeEvent2.isIncremental = isIncremental;
            function isFull(event3) {
              let candidate = event3;
              return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range === void 0 && candidate.rangeLength === void 0;
            }
            __name(isFull, "isFull");
            __name2(isFull, "isFull");
            TextDocumentContentChangeEvent2.isFull = isFull;
          })(TextDocumentContentChangeEvent || (exports2.TextDocumentContentChangeEvent = TextDocumentContentChangeEvent = {}));
          var DidChangeTextDocumentNotification;
          (function(DidChangeTextDocumentNotification2) {
            DidChangeTextDocumentNotification2.method = "textDocument/didChange";
            DidChangeTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification2.method);
          })(DidChangeTextDocumentNotification || (exports2.DidChangeTextDocumentNotification = DidChangeTextDocumentNotification = {}));
          var DidCloseTextDocumentNotification;
          (function(DidCloseTextDocumentNotification2) {
            DidCloseTextDocumentNotification2.method = "textDocument/didClose";
            DidCloseTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidCloseTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification2.method);
          })(DidCloseTextDocumentNotification || (exports2.DidCloseTextDocumentNotification = DidCloseTextDocumentNotification = {}));
          var DidSaveTextDocumentNotification;
          (function(DidSaveTextDocumentNotification2) {
            DidSaveTextDocumentNotification2.method = "textDocument/didSave";
            DidSaveTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification2.method);
          })(DidSaveTextDocumentNotification || (exports2.DidSaveTextDocumentNotification = DidSaveTextDocumentNotification = {}));
          var TextDocumentSaveReason;
          (function(TextDocumentSaveReason2) {
            TextDocumentSaveReason2.Manual = 1;
            TextDocumentSaveReason2.AfterDelay = 2;
            TextDocumentSaveReason2.FocusOut = 3;
          })(TextDocumentSaveReason || (exports2.TextDocumentSaveReason = TextDocumentSaveReason = {}));
          var WillSaveTextDocumentNotification;
          (function(WillSaveTextDocumentNotification2) {
            WillSaveTextDocumentNotification2.method = "textDocument/willSave";
            WillSaveTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification2.method);
          })(WillSaveTextDocumentNotification || (exports2.WillSaveTextDocumentNotification = WillSaveTextDocumentNotification = {}));
          var WillSaveTextDocumentWaitUntilRequest;
          (function(WillSaveTextDocumentWaitUntilRequest2) {
            WillSaveTextDocumentWaitUntilRequest2.method = "textDocument/willSaveWaitUntil";
            WillSaveTextDocumentWaitUntilRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest2.method);
          })(WillSaveTextDocumentWaitUntilRequest || (exports2.WillSaveTextDocumentWaitUntilRequest = WillSaveTextDocumentWaitUntilRequest = {}));
          var DidChangeWatchedFilesNotification;
          (function(DidChangeWatchedFilesNotification2) {
            DidChangeWatchedFilesNotification2.method = "workspace/didChangeWatchedFiles";
            DidChangeWatchedFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
            DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType(DidChangeWatchedFilesNotification2.method);
          })(DidChangeWatchedFilesNotification || (exports2.DidChangeWatchedFilesNotification = DidChangeWatchedFilesNotification = {}));
          var FileChangeType;
          (function(FileChangeType2) {
            FileChangeType2.Created = 1;
            FileChangeType2.Changed = 2;
            FileChangeType2.Deleted = 3;
          })(FileChangeType || (exports2.FileChangeType = FileChangeType = {}));
          var RelativePattern;
          (function(RelativePattern2) {
            function is2(value2) {
              const candidate = value2;
              return Is2.objectLiteral(candidate) && (vscode_languageserver_types_1.URI.is(candidate.baseUri) || vscode_languageserver_types_1.WorkspaceFolder.is(candidate.baseUri)) && Is2.string(candidate.pattern);
            }
            __name(is2, "is");
            __name2(is2, "is");
            RelativePattern2.is = is2;
          })(RelativePattern || (exports2.RelativePattern = RelativePattern = {}));
          var WatchKind;
          (function(WatchKind2) {
            WatchKind2.Create = 1;
            WatchKind2.Change = 2;
            WatchKind2.Delete = 4;
          })(WatchKind || (exports2.WatchKind = WatchKind = {}));
          var PublishDiagnosticsNotification;
          (function(PublishDiagnosticsNotification2) {
            PublishDiagnosticsNotification2.method = "textDocument/publishDiagnostics";
            PublishDiagnosticsNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
            PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType(PublishDiagnosticsNotification2.method);
          })(PublishDiagnosticsNotification || (exports2.PublishDiagnosticsNotification = PublishDiagnosticsNotification = {}));
          var CompletionTriggerKind;
          (function(CompletionTriggerKind2) {
            CompletionTriggerKind2.Invoked = 1;
            CompletionTriggerKind2.TriggerCharacter = 2;
            CompletionTriggerKind2.TriggerForIncompleteCompletions = 3;
          })(CompletionTriggerKind || (exports2.CompletionTriggerKind = CompletionTriggerKind = {}));
          var CompletionRequest;
          (function(CompletionRequest2) {
            CompletionRequest2.method = "textDocument/completion";
            CompletionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CompletionRequest2.type = new messages_1.ProtocolRequestType(CompletionRequest2.method);
          })(CompletionRequest || (exports2.CompletionRequest = CompletionRequest = {}));
          var CompletionResolveRequest;
          (function(CompletionResolveRequest2) {
            CompletionResolveRequest2.method = "completionItem/resolve";
            CompletionResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CompletionResolveRequest2.type = new messages_1.ProtocolRequestType(CompletionResolveRequest2.method);
          })(CompletionResolveRequest || (exports2.CompletionResolveRequest = CompletionResolveRequest = {}));
          var HoverRequest;
          (function(HoverRequest2) {
            HoverRequest2.method = "textDocument/hover";
            HoverRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            HoverRequest2.type = new messages_1.ProtocolRequestType(HoverRequest2.method);
          })(HoverRequest || (exports2.HoverRequest = HoverRequest = {}));
          var SignatureHelpTriggerKind;
          (function(SignatureHelpTriggerKind2) {
            SignatureHelpTriggerKind2.Invoked = 1;
            SignatureHelpTriggerKind2.TriggerCharacter = 2;
            SignatureHelpTriggerKind2.ContentChange = 3;
          })(SignatureHelpTriggerKind || (exports2.SignatureHelpTriggerKind = SignatureHelpTriggerKind = {}));
          var SignatureHelpRequest;
          (function(SignatureHelpRequest2) {
            SignatureHelpRequest2.method = "textDocument/signatureHelp";
            SignatureHelpRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            SignatureHelpRequest2.type = new messages_1.ProtocolRequestType(SignatureHelpRequest2.method);
          })(SignatureHelpRequest || (exports2.SignatureHelpRequest = SignatureHelpRequest = {}));
          var DefinitionRequest;
          (function(DefinitionRequest2) {
            DefinitionRequest2.method = "textDocument/definition";
            DefinitionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DefinitionRequest2.type = new messages_1.ProtocolRequestType(DefinitionRequest2.method);
          })(DefinitionRequest || (exports2.DefinitionRequest = DefinitionRequest = {}));
          var ReferencesRequest;
          (function(ReferencesRequest2) {
            ReferencesRequest2.method = "textDocument/references";
            ReferencesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            ReferencesRequest2.type = new messages_1.ProtocolRequestType(ReferencesRequest2.method);
          })(ReferencesRequest || (exports2.ReferencesRequest = ReferencesRequest = {}));
          var DocumentHighlightRequest;
          (function(DocumentHighlightRequest2) {
            DocumentHighlightRequest2.method = "textDocument/documentHighlight";
            DocumentHighlightRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentHighlightRequest2.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest2.method);
          })(DocumentHighlightRequest || (exports2.DocumentHighlightRequest = DocumentHighlightRequest = {}));
          var DocumentSymbolRequest;
          (function(DocumentSymbolRequest2) {
            DocumentSymbolRequest2.method = "textDocument/documentSymbol";
            DocumentSymbolRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentSymbolRequest2.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest2.method);
          })(DocumentSymbolRequest || (exports2.DocumentSymbolRequest = DocumentSymbolRequest = {}));
          var CodeActionRequest;
          (function(CodeActionRequest2) {
            CodeActionRequest2.method = "textDocument/codeAction";
            CodeActionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CodeActionRequest2.type = new messages_1.ProtocolRequestType(CodeActionRequest2.method);
          })(CodeActionRequest || (exports2.CodeActionRequest = CodeActionRequest = {}));
          var CodeActionResolveRequest;
          (function(CodeActionResolveRequest2) {
            CodeActionResolveRequest2.method = "codeAction/resolve";
            CodeActionResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CodeActionResolveRequest2.type = new messages_1.ProtocolRequestType(CodeActionResolveRequest2.method);
          })(CodeActionResolveRequest || (exports2.CodeActionResolveRequest = CodeActionResolveRequest = {}));
          var WorkspaceSymbolRequest;
          (function(WorkspaceSymbolRequest2) {
            WorkspaceSymbolRequest2.method = "workspace/symbol";
            WorkspaceSymbolRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            WorkspaceSymbolRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest2.method);
          })(WorkspaceSymbolRequest || (exports2.WorkspaceSymbolRequest = WorkspaceSymbolRequest = {}));
          var WorkspaceSymbolResolveRequest;
          (function(WorkspaceSymbolResolveRequest2) {
            WorkspaceSymbolResolveRequest2.method = "workspaceSymbol/resolve";
            WorkspaceSymbolResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            WorkspaceSymbolResolveRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolResolveRequest2.method);
          })(WorkspaceSymbolResolveRequest || (exports2.WorkspaceSymbolResolveRequest = WorkspaceSymbolResolveRequest = {}));
          var CodeLensRequest;
          (function(CodeLensRequest2) {
            CodeLensRequest2.method = "textDocument/codeLens";
            CodeLensRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CodeLensRequest2.type = new messages_1.ProtocolRequestType(CodeLensRequest2.method);
          })(CodeLensRequest || (exports2.CodeLensRequest = CodeLensRequest = {}));
          var CodeLensResolveRequest;
          (function(CodeLensResolveRequest2) {
            CodeLensResolveRequest2.method = "codeLens/resolve";
            CodeLensResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType(CodeLensResolveRequest2.method);
          })(CodeLensResolveRequest || (exports2.CodeLensResolveRequest = CodeLensResolveRequest = {}));
          var CodeLensRefreshRequest;
          (function(CodeLensRefreshRequest2) {
            CodeLensRefreshRequest2.method = `workspace/codeLens/refresh`;
            CodeLensRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            CodeLensRefreshRequest2.type = new messages_1.ProtocolRequestType0(CodeLensRefreshRequest2.method);
          })(CodeLensRefreshRequest || (exports2.CodeLensRefreshRequest = CodeLensRefreshRequest = {}));
          var DocumentLinkRequest;
          (function(DocumentLinkRequest2) {
            DocumentLinkRequest2.method = "textDocument/documentLink";
            DocumentLinkRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentLinkRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkRequest2.method);
          })(DocumentLinkRequest || (exports2.DocumentLinkRequest = DocumentLinkRequest = {}));
          var DocumentLinkResolveRequest;
          (function(DocumentLinkResolveRequest2) {
            DocumentLinkResolveRequest2.method = "documentLink/resolve";
            DocumentLinkResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkResolveRequest2.method);
          })(DocumentLinkResolveRequest || (exports2.DocumentLinkResolveRequest = DocumentLinkResolveRequest = {}));
          var DocumentFormattingRequest;
          (function(DocumentFormattingRequest2) {
            DocumentFormattingRequest2.method = "textDocument/formatting";
            DocumentFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest2.method);
          })(DocumentFormattingRequest || (exports2.DocumentFormattingRequest = DocumentFormattingRequest = {}));
          var DocumentRangeFormattingRequest;
          (function(DocumentRangeFormattingRequest2) {
            DocumentRangeFormattingRequest2.method = "textDocument/rangeFormatting";
            DocumentRangeFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest2.method);
          })(DocumentRangeFormattingRequest || (exports2.DocumentRangeFormattingRequest = DocumentRangeFormattingRequest = {}));
          var DocumentRangesFormattingRequest;
          (function(DocumentRangesFormattingRequest2) {
            DocumentRangesFormattingRequest2.method = "textDocument/rangesFormatting";
            DocumentRangesFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentRangesFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangesFormattingRequest2.method);
          })(DocumentRangesFormattingRequest || (exports2.DocumentRangesFormattingRequest = DocumentRangesFormattingRequest = {}));
          var DocumentOnTypeFormattingRequest;
          (function(DocumentOnTypeFormattingRequest2) {
            DocumentOnTypeFormattingRequest2.method = "textDocument/onTypeFormatting";
            DocumentOnTypeFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest2.method);
          })(DocumentOnTypeFormattingRequest || (exports2.DocumentOnTypeFormattingRequest = DocumentOnTypeFormattingRequest = {}));
          var PrepareSupportDefaultBehavior;
          (function(PrepareSupportDefaultBehavior2) {
            PrepareSupportDefaultBehavior2.Identifier = 1;
          })(PrepareSupportDefaultBehavior || (exports2.PrepareSupportDefaultBehavior = PrepareSupportDefaultBehavior = {}));
          var RenameRequest;
          (function(RenameRequest2) {
            RenameRequest2.method = "textDocument/rename";
            RenameRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            RenameRequest2.type = new messages_1.ProtocolRequestType(RenameRequest2.method);
          })(RenameRequest || (exports2.RenameRequest = RenameRequest = {}));
          var PrepareRenameRequest;
          (function(PrepareRenameRequest2) {
            PrepareRenameRequest2.method = "textDocument/prepareRename";
            PrepareRenameRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            PrepareRenameRequest2.type = new messages_1.ProtocolRequestType(PrepareRenameRequest2.method);
          })(PrepareRenameRequest || (exports2.PrepareRenameRequest = PrepareRenameRequest = {}));
          var ExecuteCommandRequest;
          (function(ExecuteCommandRequest2) {
            ExecuteCommandRequest2.method = "workspace/executeCommand";
            ExecuteCommandRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
            ExecuteCommandRequest2.type = new messages_1.ProtocolRequestType(ExecuteCommandRequest2.method);
          })(ExecuteCommandRequest || (exports2.ExecuteCommandRequest = ExecuteCommandRequest = {}));
          var ApplyWorkspaceEditRequest;
          (function(ApplyWorkspaceEditRequest2) {
            ApplyWorkspaceEditRequest2.method = "workspace/applyEdit";
            ApplyWorkspaceEditRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
            ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType("workspace/applyEdit");
          })(ApplyWorkspaceEditRequest || (exports2.ApplyWorkspaceEditRequest = ApplyWorkspaceEditRequest = {}));
        }
      });
      require_connection2 = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/connection.js"(exports2) {
          "use strict";
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.createProtocolConnection = void 0;
          var vscode_jsonrpc_1 = require_main();
          function createProtocolConnection(input, output2, logger, options2) {
            if (vscode_jsonrpc_1.ConnectionStrategy.is(options2)) {
              options2 = { connectionStrategy: options2 };
            }
            return (0, vscode_jsonrpc_1.createMessageConnection)(input, output2, logger, options2);
          }
          __name(createProtocolConnection, "createProtocolConnection");
          __name2(createProtocolConnection, "createProtocolConnection");
          exports2.createProtocolConnection = createProtocolConnection;
        }
      });
      require_api2 = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/api.js"(exports2) {
          "use strict";
          var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o2, m3, k2, k22) {
            if (k22 === void 0) k22 = k2;
            var desc = Object.getOwnPropertyDescriptor(m3, k2);
            if (!desc || ("get" in desc ? !m3.__esModule : desc.writable || desc.configurable)) {
              desc = { enumerable: true, get: /* @__PURE__ */ __name2(function() {
                return m3[k2];
              }, "get") };
            }
            Object.defineProperty(o2, k22, desc);
          }) : (function(o2, m3, k2, k22) {
            if (k22 === void 0) k22 = k2;
            o2[k22] = m3[k2];
          }));
          var __exportStar = exports2 && exports2.__exportStar || function(m3, exports3) {
            for (var p3 in m3) if (p3 !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p3)) __createBinding(exports3, m3, p3);
          };
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.LSPErrorCodes = exports2.createProtocolConnection = void 0;
          __exportStar(require_main(), exports2);
          __exportStar((init_main(), __toCommonJS2(main_exports)), exports2);
          __exportStar(require_messages2(), exports2);
          __exportStar(require_protocol(), exports2);
          var connection_1 = require_connection2();
          Object.defineProperty(exports2, "createProtocolConnection", { enumerable: true, get: /* @__PURE__ */ __name2(function() {
            return connection_1.createProtocolConnection;
          }, "get") });
          var LSPErrorCodes2;
          (function(LSPErrorCodes3) {
            LSPErrorCodes3.lspReservedErrorRangeStart = -32899;
            LSPErrorCodes3.RequestFailed = -32803;
            LSPErrorCodes3.ServerCancelled = -32802;
            LSPErrorCodes3.ContentModified = -32801;
            LSPErrorCodes3.RequestCancelled = -32800;
            LSPErrorCodes3.lspReservedErrorRangeEnd = -32800;
          })(LSPErrorCodes2 || (exports2.LSPErrorCodes = LSPErrorCodes2 = {}));
        }
      });
      require_main2 = __commonJS2({
        "../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/browser/main.js"(exports2) {
          "use strict";
          var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o2, m3, k2, k22) {
            if (k22 === void 0) k22 = k2;
            var desc = Object.getOwnPropertyDescriptor(m3, k2);
            if (!desc || ("get" in desc ? !m3.__esModule : desc.writable || desc.configurable)) {
              desc = { enumerable: true, get: /* @__PURE__ */ __name2(function() {
                return m3[k2];
              }, "get") };
            }
            Object.defineProperty(o2, k22, desc);
          }) : (function(o2, m3, k2, k22) {
            if (k22 === void 0) k22 = k2;
            o2[k22] = m3[k2];
          }));
          var __exportStar = exports2 && exports2.__exportStar || function(m3, exports3) {
            for (var p3 in m3) if (p3 !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p3)) __createBinding(exports3, m3, p3);
          };
          Object.defineProperty(exports2, "__esModule", { value: true });
          exports2.createProtocolConnection = void 0;
          var browser_1 = require_browser();
          __exportStar(require_browser(), exports2);
          __exportStar(require_api2(), exports2);
          function createProtocolConnection(reader, writer, logger, options2) {
            return (0, browser_1.createMessageConnection)(reader, writer, logger, options2);
          }
          __name(createProtocolConnection, "createProtocolConnection");
          __name2(createProtocolConnection, "createProtocolConnection");
          exports2.createProtocolConnection = createProtocolConnection;
        }
      });
      lib_exports = {};
      __export2(lib_exports, {
        AbstractAstReflection: /* @__PURE__ */ __name(() => AbstractAstReflection, "AbstractAstReflection"),
        AbstractCstNode: /* @__PURE__ */ __name(() => AbstractCstNode, "AbstractCstNode"),
        AbstractLangiumParser: /* @__PURE__ */ __name(() => AbstractLangiumParser, "AbstractLangiumParser"),
        AbstractParserErrorMessageProvider: /* @__PURE__ */ __name(() => AbstractParserErrorMessageProvider, "AbstractParserErrorMessageProvider"),
        AbstractThreadedAsyncParser: /* @__PURE__ */ __name(() => AbstractThreadedAsyncParser, "AbstractThreadedAsyncParser"),
        AstUtils: /* @__PURE__ */ __name(() => ast_utils_exports, "AstUtils"),
        BiMap: /* @__PURE__ */ __name(() => BiMap, "BiMap"),
        Cancellation: /* @__PURE__ */ __name(() => cancellation_exports, "Cancellation"),
        CompositeCstNodeImpl: /* @__PURE__ */ __name(() => CompositeCstNodeImpl, "CompositeCstNodeImpl"),
        ContextCache: /* @__PURE__ */ __name(() => ContextCache, "ContextCache"),
        CstNodeBuilder: /* @__PURE__ */ __name(() => CstNodeBuilder, "CstNodeBuilder"),
        CstUtils: /* @__PURE__ */ __name(() => cst_utils_exports, "CstUtils"),
        DEFAULT_TOKENIZE_OPTIONS: /* @__PURE__ */ __name(() => DEFAULT_TOKENIZE_OPTIONS, "DEFAULT_TOKENIZE_OPTIONS"),
        DONE_RESULT: /* @__PURE__ */ __name(() => DONE_RESULT, "DONE_RESULT"),
        DatatypeSymbol: /* @__PURE__ */ __name(() => DatatypeSymbol, "DatatypeSymbol"),
        DefaultAstNodeDescriptionProvider: /* @__PURE__ */ __name(() => DefaultAstNodeDescriptionProvider, "DefaultAstNodeDescriptionProvider"),
        DefaultAstNodeLocator: /* @__PURE__ */ __name(() => DefaultAstNodeLocator, "DefaultAstNodeLocator"),
        DefaultAsyncParser: /* @__PURE__ */ __name(() => DefaultAsyncParser, "DefaultAsyncParser"),
        DefaultCommentProvider: /* @__PURE__ */ __name(() => DefaultCommentProvider, "DefaultCommentProvider"),
        DefaultConfigurationProvider: /* @__PURE__ */ __name(() => DefaultConfigurationProvider, "DefaultConfigurationProvider"),
        DefaultDocumentBuilder: /* @__PURE__ */ __name(() => DefaultDocumentBuilder, "DefaultDocumentBuilder"),
        DefaultDocumentValidator: /* @__PURE__ */ __name(() => DefaultDocumentValidator, "DefaultDocumentValidator"),
        DefaultHydrator: /* @__PURE__ */ __name(() => DefaultHydrator, "DefaultHydrator"),
        DefaultIndexManager: /* @__PURE__ */ __name(() => DefaultIndexManager, "DefaultIndexManager"),
        DefaultJsonSerializer: /* @__PURE__ */ __name(() => DefaultJsonSerializer, "DefaultJsonSerializer"),
        DefaultLangiumDocumentFactory: /* @__PURE__ */ __name(() => DefaultLangiumDocumentFactory, "DefaultLangiumDocumentFactory"),
        DefaultLangiumDocuments: /* @__PURE__ */ __name(() => DefaultLangiumDocuments, "DefaultLangiumDocuments"),
        DefaultLangiumProfiler: /* @__PURE__ */ __name(() => DefaultLangiumProfiler, "DefaultLangiumProfiler"),
        DefaultLexer: /* @__PURE__ */ __name(() => DefaultLexer, "DefaultLexer"),
        DefaultLexerErrorMessageProvider: /* @__PURE__ */ __name(() => DefaultLexerErrorMessageProvider, "DefaultLexerErrorMessageProvider"),
        DefaultLinker: /* @__PURE__ */ __name(() => DefaultLinker, "DefaultLinker"),
        DefaultNameProvider: /* @__PURE__ */ __name(() => DefaultNameProvider, "DefaultNameProvider"),
        DefaultReferenceDescriptionProvider: /* @__PURE__ */ __name(() => DefaultReferenceDescriptionProvider, "DefaultReferenceDescriptionProvider"),
        DefaultReferences: /* @__PURE__ */ __name(() => DefaultReferences, "DefaultReferences"),
        DefaultScopeComputation: /* @__PURE__ */ __name(() => DefaultScopeComputation, "DefaultScopeComputation"),
        DefaultScopeProvider: /* @__PURE__ */ __name(() => DefaultScopeProvider, "DefaultScopeProvider"),
        DefaultServiceRegistry: /* @__PURE__ */ __name(() => DefaultServiceRegistry, "DefaultServiceRegistry"),
        DefaultTokenBuilder: /* @__PURE__ */ __name(() => DefaultTokenBuilder, "DefaultTokenBuilder"),
        DefaultValueConverter: /* @__PURE__ */ __name(() => DefaultValueConverter, "DefaultValueConverter"),
        DefaultWorkspaceLock: /* @__PURE__ */ __name(() => DefaultWorkspaceLock, "DefaultWorkspaceLock"),
        DefaultWorkspaceManager: /* @__PURE__ */ __name(() => DefaultWorkspaceManager, "DefaultWorkspaceManager"),
        Deferred: /* @__PURE__ */ __name(() => Deferred, "Deferred"),
        Disposable: /* @__PURE__ */ __name(() => Disposable, "Disposable"),
        DisposableCache: /* @__PURE__ */ __name(() => DisposableCache, "DisposableCache"),
        DocumentCache: /* @__PURE__ */ __name(() => DocumentCache, "DocumentCache"),
        DocumentState: /* @__PURE__ */ __name(() => DocumentState, "DocumentState"),
        DocumentValidator: /* @__PURE__ */ __name(() => DocumentValidator, "DocumentValidator"),
        EMPTY_SCOPE: /* @__PURE__ */ __name(() => EMPTY_SCOPE, "EMPTY_SCOPE"),
        EMPTY_STREAM: /* @__PURE__ */ __name(() => EMPTY_STREAM, "EMPTY_STREAM"),
        EmptyFileSystem: /* @__PURE__ */ __name(() => EmptyFileSystem, "EmptyFileSystem"),
        EmptyFileSystemProvider: /* @__PURE__ */ __name(() => EmptyFileSystemProvider, "EmptyFileSystemProvider"),
        ErrorWithLocation: /* @__PURE__ */ __name(() => ErrorWithLocation, "ErrorWithLocation"),
        GrammarAST: /* @__PURE__ */ __name(() => ast_exports, "GrammarAST"),
        GrammarUtils: /* @__PURE__ */ __name(() => grammar_utils_exports, "GrammarUtils"),
        IndentationAwareLexer: /* @__PURE__ */ __name(() => IndentationAwareLexer, "IndentationAwareLexer"),
        IndentationAwareTokenBuilder: /* @__PURE__ */ __name(() => IndentationAwareTokenBuilder, "IndentationAwareTokenBuilder"),
        JSDocDocumentationProvider: /* @__PURE__ */ __name(() => JSDocDocumentationProvider, "JSDocDocumentationProvider"),
        LangiumCompletionParser: /* @__PURE__ */ __name(() => LangiumCompletionParser, "LangiumCompletionParser"),
        LangiumParser: /* @__PURE__ */ __name(() => LangiumParser, "LangiumParser"),
        LangiumParserErrorMessageProvider: /* @__PURE__ */ __name(() => LangiumParserErrorMessageProvider, "LangiumParserErrorMessageProvider"),
        LeafCstNodeImpl: /* @__PURE__ */ __name(() => LeafCstNodeImpl, "LeafCstNodeImpl"),
        LexingMode: /* @__PURE__ */ __name(() => LexingMode, "LexingMode"),
        MapScope: /* @__PURE__ */ __name(() => MapScope, "MapScope"),
        Module: /* @__PURE__ */ __name(() => Module, "Module"),
        MultiMap: /* @__PURE__ */ __name(() => MultiMap, "MultiMap"),
        MultiMapScope: /* @__PURE__ */ __name(() => MultiMapScope, "MultiMapScope"),
        OperationCancelled: /* @__PURE__ */ __name(() => OperationCancelled, "OperationCancelled"),
        ParserWorker: /* @__PURE__ */ __name(() => ParserWorker, "ParserWorker"),
        ProfilingTask: /* @__PURE__ */ __name(() => ProfilingTask, "ProfilingTask"),
        Reduction: /* @__PURE__ */ __name(() => Reduction, "Reduction"),
        RefResolving: /* @__PURE__ */ __name(() => RefResolving, "RefResolving"),
        RegExpUtils: /* @__PURE__ */ __name(() => regexp_utils_exports, "RegExpUtils"),
        RootCstNodeImpl: /* @__PURE__ */ __name(() => RootCstNodeImpl, "RootCstNodeImpl"),
        SimpleCache: /* @__PURE__ */ __name(() => SimpleCache, "SimpleCache"),
        StreamImpl: /* @__PURE__ */ __name(() => StreamImpl, "StreamImpl"),
        StreamScope: /* @__PURE__ */ __name(() => StreamScope, "StreamScope"),
        TextDocument: /* @__PURE__ */ __name(() => TextDocument2, "TextDocument"),
        TreeStreamImpl: /* @__PURE__ */ __name(() => TreeStreamImpl, "TreeStreamImpl"),
        URI: /* @__PURE__ */ __name(() => URI2, "URI"),
        UriTrie: /* @__PURE__ */ __name(() => UriTrie, "UriTrie"),
        UriUtils: /* @__PURE__ */ __name(() => UriUtils, "UriUtils"),
        VALIDATE_EACH_NODE: /* @__PURE__ */ __name(() => VALIDATE_EACH_NODE, "VALIDATE_EACH_NODE"),
        ValidationCategory: /* @__PURE__ */ __name(() => ValidationCategory, "ValidationCategory"),
        ValidationRegistry: /* @__PURE__ */ __name(() => ValidationRegistry, "ValidationRegistry"),
        ValueConverter: /* @__PURE__ */ __name(() => ValueConverter, "ValueConverter"),
        WorkspaceCache: /* @__PURE__ */ __name(() => WorkspaceCache, "WorkspaceCache"),
        assertCondition: /* @__PURE__ */ __name(() => assertCondition, "assertCondition"),
        assertUnreachable: /* @__PURE__ */ __name(() => assertUnreachable, "assertUnreachable"),
        createCompletionParser: /* @__PURE__ */ __name(() => createCompletionParser, "createCompletionParser"),
        createDefaultCoreModule: /* @__PURE__ */ __name(() => createDefaultCoreModule, "createDefaultCoreModule"),
        createDefaultSharedCoreModule: /* @__PURE__ */ __name(() => createDefaultSharedCoreModule, "createDefaultSharedCoreModule"),
        createGrammarConfig: /* @__PURE__ */ __name(() => createGrammarConfig, "createGrammarConfig"),
        createLangiumParser: /* @__PURE__ */ __name(() => createLangiumParser, "createLangiumParser"),
        createParser: /* @__PURE__ */ __name(() => createParser, "createParser"),
        delayNextTick: /* @__PURE__ */ __name(() => delayNextTick, "delayNextTick"),
        diagnosticData: /* @__PURE__ */ __name(() => diagnosticData, "diagnosticData"),
        eagerLoad: /* @__PURE__ */ __name(() => eagerLoad, "eagerLoad"),
        getDiagnosticRange: /* @__PURE__ */ __name(() => getDiagnosticRange, "getDiagnosticRange"),
        indentationBuilderDefaultOptions: /* @__PURE__ */ __name(() => indentationBuilderDefaultOptions, "indentationBuilderDefaultOptions"),
        inject: /* @__PURE__ */ __name(() => inject, "inject"),
        interruptAndCheck: /* @__PURE__ */ __name(() => interruptAndCheck, "interruptAndCheck"),
        isAstNode: /* @__PURE__ */ __name(() => isAstNode, "isAstNode"),
        isAstNodeDescription: /* @__PURE__ */ __name(() => isAstNodeDescription, "isAstNodeDescription"),
        isAstNodeWithComment: /* @__PURE__ */ __name(() => isAstNodeWithComment, "isAstNodeWithComment"),
        isCompositeCstNode: /* @__PURE__ */ __name(() => isCompositeCstNode, "isCompositeCstNode"),
        isIMultiModeLexerDefinition: /* @__PURE__ */ __name(() => isIMultiModeLexerDefinition, "isIMultiModeLexerDefinition"),
        isJSDoc: /* @__PURE__ */ __name(() => isJSDoc, "isJSDoc"),
        isLeafCstNode: /* @__PURE__ */ __name(() => isLeafCstNode, "isLeafCstNode"),
        isLinkingError: /* @__PURE__ */ __name(() => isLinkingError, "isLinkingError"),
        isMultiReference: /* @__PURE__ */ __name(() => isMultiReference, "isMultiReference"),
        isNamed: /* @__PURE__ */ __name(() => isNamed, "isNamed"),
        isOperationCancelled: /* @__PURE__ */ __name(() => isOperationCancelled, "isOperationCancelled"),
        isReference: /* @__PURE__ */ __name(() => isReference, "isReference"),
        isRootCstNode: /* @__PURE__ */ __name(() => isRootCstNode, "isRootCstNode"),
        isTokenTypeArray: /* @__PURE__ */ __name(() => isTokenTypeArray, "isTokenTypeArray"),
        isTokenTypeDictionary: /* @__PURE__ */ __name(() => isTokenTypeDictionary, "isTokenTypeDictionary"),
        loadGrammarFromJson: /* @__PURE__ */ __name(() => loadGrammarFromJson, "loadGrammarFromJson"),
        parseJSDoc: /* @__PURE__ */ __name(() => parseJSDoc, "parseJSDoc"),
        prepareLangiumParser: /* @__PURE__ */ __name(() => prepareLangiumParser, "prepareLangiumParser"),
        setInterruptionPeriod: /* @__PURE__ */ __name(() => setInterruptionPeriod, "setInterruptionPeriod"),
        startCancelableOperation: /* @__PURE__ */ __name(() => startCancelableOperation, "startCancelableOperation"),
        stream: /* @__PURE__ */ __name(() => stream, "stream"),
        toDiagnosticData: /* @__PURE__ */ __name(() => toDiagnosticData, "toDiagnosticData"),
        toDiagnosticSeverity: /* @__PURE__ */ __name(() => toDiagnosticSeverity, "toDiagnosticSeverity")
      });
      cst_utils_exports = {};
      __export2(cst_utils_exports, {
        DefaultNameRegexp: /* @__PURE__ */ __name(() => DefaultNameRegexp, "DefaultNameRegexp"),
        RangeComparison: /* @__PURE__ */ __name(() => RangeComparison, "RangeComparison"),
        compareRange: /* @__PURE__ */ __name(() => compareRange, "compareRange"),
        findCommentNode: /* @__PURE__ */ __name(() => findCommentNode, "findCommentNode"),
        findDeclarationNodeAtOffset: /* @__PURE__ */ __name(() => findDeclarationNodeAtOffset, "findDeclarationNodeAtOffset"),
        findLeafNodeAtOffset: /* @__PURE__ */ __name(() => findLeafNodeAtOffset, "findLeafNodeAtOffset"),
        findLeafNodeBeforeOffset: /* @__PURE__ */ __name(() => findLeafNodeBeforeOffset, "findLeafNodeBeforeOffset"),
        flattenCst: /* @__PURE__ */ __name(() => flattenCst, "flattenCst"),
        getDatatypeNode: /* @__PURE__ */ __name(() => getDatatypeNode, "getDatatypeNode"),
        getInteriorNodes: /* @__PURE__ */ __name(() => getInteriorNodes, "getInteriorNodes"),
        getNextNode: /* @__PURE__ */ __name(() => getNextNode, "getNextNode"),
        getPreviousNode: /* @__PURE__ */ __name(() => getPreviousNode, "getPreviousNode"),
        getStartlineNode: /* @__PURE__ */ __name(() => getStartlineNode, "getStartlineNode"),
        inRange: /* @__PURE__ */ __name(() => inRange, "inRange"),
        isChildNode: /* @__PURE__ */ __name(() => isChildNode, "isChildNode"),
        isCommentNode: /* @__PURE__ */ __name(() => isCommentNode, "isCommentNode"),
        streamCst: /* @__PURE__ */ __name(() => streamCst, "streamCst"),
        toDocumentSegment: /* @__PURE__ */ __name(() => toDocumentSegment, "toDocumentSegment"),
        tokenToRange: /* @__PURE__ */ __name(() => tokenToRange, "tokenToRange")
      });
      __name(isAstNode, "isAstNode");
      __name2(isAstNode, "isAstNode");
      __name(isReference, "isReference");
      __name2(isReference, "isReference");
      __name(isMultiReference, "isMultiReference");
      __name2(isMultiReference, "isMultiReference");
      __name(isAstNodeDescription, "isAstNodeDescription");
      __name2(isAstNodeDescription, "isAstNodeDescription");
      __name(isLinkingError, "isLinkingError");
      __name2(isLinkingError, "isLinkingError");
      AbstractAstReflection = class {
        static {
          __name(this, "AbstractAstReflection");
        }
        static {
          __name2(this, "AbstractAstReflection");
        }
        constructor() {
          this.subtypes = {};
          this.allSubtypes = {};
        }
        getAllTypes() {
          return Object.keys(this.types);
        }
        getReferenceType(refInfo) {
          const metaData = this.types[refInfo.container.$type];
          if (!metaData) {
            throw new Error(`Type ${refInfo.container.$type || "undefined"} not found.`);
          }
          const referenceType = metaData.properties[refInfo.property]?.referenceType;
          if (!referenceType) {
            throw new Error(`Property ${refInfo.property || "undefined"} of type ${refInfo.container.$type} is not a reference.`);
          }
          return referenceType;
        }
        getTypeMetaData(type3) {
          const result = this.types[type3];
          if (!result) {
            return {
              name: type3,
              properties: {},
              superTypes: []
            };
          }
          return result;
        }
        isInstance(node2, type3) {
          return isAstNode(node2) && this.isSubtype(node2.$type, type3);
        }
        isSubtype(subtype, supertype) {
          if (subtype === supertype) {
            return true;
          }
          let nested = this.subtypes[subtype];
          if (!nested) {
            nested = this.subtypes[subtype] = {};
          }
          const existing = nested[supertype];
          if (existing !== void 0) {
            return existing;
          } else {
            const metaData = this.types[subtype];
            const result = metaData ? metaData.superTypes.some((s2) => this.isSubtype(s2, supertype)) : false;
            nested[supertype] = result;
            return result;
          }
        }
        getAllSubTypes(type3) {
          const existing = this.allSubtypes[type3];
          if (existing) {
            return existing;
          } else {
            const allTypes = this.getAllTypes();
            const types = [];
            for (const possibleSubType of allTypes) {
              if (this.isSubtype(possibleSubType, type3)) {
                types.push(possibleSubType);
              }
            }
            this.allSubtypes[type3] = types;
            return types;
          }
        }
      };
      __name(isCompositeCstNode, "isCompositeCstNode");
      __name2(isCompositeCstNode, "isCompositeCstNode");
      __name(isLeafCstNode, "isLeafCstNode");
      __name2(isLeafCstNode, "isLeafCstNode");
      __name(isRootCstNode, "isRootCstNode");
      __name2(isRootCstNode, "isRootCstNode");
      StreamImpl = class _StreamImpl {
        static {
          __name(this, "_StreamImpl");
        }
        static {
          __name2(this, "StreamImpl");
        }
        constructor(startFn, nextFn) {
          this.startFn = startFn;
          this.nextFn = nextFn;
        }
        iterator() {
          const iterator = {
            state: this.startFn(),
            next: /* @__PURE__ */ __name2(() => this.nextFn(iterator.state), "next"),
            [Symbol.iterator]: () => iterator
          };
          return iterator;
        }
        [Symbol.iterator]() {
          return this.iterator();
        }
        isEmpty() {
          const iterator = this.iterator();
          return Boolean(iterator.next().done);
        }
        count() {
          const iterator = this.iterator();
          let count2 = 0;
          let next3 = iterator.next();
          while (!next3.done) {
            count2++;
            next3 = iterator.next();
          }
          return count2;
        }
        toArray() {
          const result = [];
          const iterator = this.iterator();
          let next3;
          do {
            next3 = iterator.next();
            if (next3.value !== void 0) {
              result.push(next3.value);
            }
          } while (!next3.done);
          return result;
        }
        toSet() {
          return new Set(this);
        }
        toMap(keyFn, valueFn) {
          const entryStream = this.map((element3) => [
            keyFn ? keyFn(element3) : element3,
            valueFn ? valueFn(element3) : element3
          ]);
          return new Map(entryStream);
        }
        toString() {
          return this.join();
        }
        concat(other) {
          return new _StreamImpl(() => ({ first: this.startFn(), firstDone: false, iterator: other[Symbol.iterator]() }), (state4) => {
            let result;
            if (!state4.firstDone) {
              do {
                result = this.nextFn(state4.first);
                if (!result.done) {
                  return result;
                }
              } while (!result.done);
              state4.firstDone = true;
            }
            do {
              result = state4.iterator.next();
              if (!result.done) {
                return result;
              }
            } while (!result.done);
            return DONE_RESULT;
          });
        }
        join(separator = ",") {
          const iterator = this.iterator();
          let value2 = "";
          let result;
          let addSeparator = false;
          do {
            result = iterator.next();
            if (!result.done) {
              if (addSeparator) {
                value2 += separator;
              }
              value2 += toString5(result.value);
            }
            addSeparator = true;
          } while (!result.done);
          return value2;
        }
        indexOf(searchElement, fromIndex = 0) {
          const iterator = this.iterator();
          let index = 0;
          let next3 = iterator.next();
          while (!next3.done) {
            if (index >= fromIndex && next3.value === searchElement) {
              return index;
            }
            next3 = iterator.next();
            index++;
          }
          return -1;
        }
        every(predicate) {
          const iterator = this.iterator();
          let next3 = iterator.next();
          while (!next3.done) {
            if (!predicate(next3.value)) {
              return false;
            }
            next3 = iterator.next();
          }
          return true;
        }
        some(predicate) {
          const iterator = this.iterator();
          let next3 = iterator.next();
          while (!next3.done) {
            if (predicate(next3.value)) {
              return true;
            }
            next3 = iterator.next();
          }
          return false;
        }
        forEach(callbackfn) {
          const iterator = this.iterator();
          let index = 0;
          let next3 = iterator.next();
          while (!next3.done) {
            callbackfn(next3.value, index);
            next3 = iterator.next();
            index++;
          }
        }
        map(callbackfn) {
          return new _StreamImpl(this.startFn, (state4) => {
            const { done, value: value2 } = this.nextFn(state4);
            if (done) {
              return DONE_RESULT;
            } else {
              return { done: false, value: callbackfn(value2) };
            }
          });
        }
        filter(predicate) {
          return new _StreamImpl(this.startFn, (state4) => {
            let result;
            do {
              result = this.nextFn(state4);
              if (!result.done && predicate(result.value)) {
                return result;
              }
            } while (!result.done);
            return DONE_RESULT;
          });
        }
        nonNullable() {
          return this.filter((e3) => e3 !== void 0 && e3 !== null);
        }
        reduce(callbackfn, initialValue) {
          const iterator = this.iterator();
          let previousValue = initialValue;
          let next3 = iterator.next();
          while (!next3.done) {
            if (previousValue === void 0) {
              previousValue = next3.value;
            } else {
              previousValue = callbackfn(previousValue, next3.value);
            }
            next3 = iterator.next();
          }
          return previousValue;
        }
        reduceRight(callbackfn, initialValue) {
          return this.recursiveReduce(this.iterator(), callbackfn, initialValue);
        }
        recursiveReduce(iterator, callbackfn, initialValue) {
          const next3 = iterator.next();
          if (next3.done) {
            return initialValue;
          }
          const previousValue = this.recursiveReduce(iterator, callbackfn, initialValue);
          if (previousValue === void 0) {
            return next3.value;
          }
          return callbackfn(previousValue, next3.value);
        }
        find(predicate) {
          const iterator = this.iterator();
          let next3 = iterator.next();
          while (!next3.done) {
            if (predicate(next3.value)) {
              return next3.value;
            }
            next3 = iterator.next();
          }
          return void 0;
        }
        findIndex(predicate) {
          const iterator = this.iterator();
          let index = 0;
          let next3 = iterator.next();
          while (!next3.done) {
            if (predicate(next3.value)) {
              return index;
            }
            next3 = iterator.next();
            index++;
          }
          return -1;
        }
        includes(searchElement) {
          const iterator = this.iterator();
          let next3 = iterator.next();
          while (!next3.done) {
            if (next3.value === searchElement) {
              return true;
            }
            next3 = iterator.next();
          }
          return false;
        }
        flatMap(callbackfn) {
          return new _StreamImpl(() => ({ this: this.startFn() }), (state4) => {
            do {
              if (state4.iterator) {
                const next3 = state4.iterator.next();
                if (next3.done) {
                  state4.iterator = void 0;
                } else {
                  return next3;
                }
              }
              const { done, value: value2 } = this.nextFn(state4.this);
              if (!done) {
                const mapped = callbackfn(value2);
                if (isIterable(mapped)) {
                  state4.iterator = mapped[Symbol.iterator]();
                } else {
                  return { done: false, value: mapped };
                }
              }
            } while (state4.iterator);
            return DONE_RESULT;
          });
        }
        flat(depth) {
          if (depth === void 0) {
            depth = 1;
          }
          if (depth <= 0) {
            return this;
          }
          const stream2 = depth > 1 ? this.flat(depth - 1) : this;
          return new _StreamImpl(() => ({ this: stream2.startFn() }), (state4) => {
            do {
              if (state4.iterator) {
                const next3 = state4.iterator.next();
                if (next3.done) {
                  state4.iterator = void 0;
                } else {
                  return next3;
                }
              }
              const { done, value: value2 } = stream2.nextFn(state4.this);
              if (!done) {
                if (isIterable(value2)) {
                  state4.iterator = value2[Symbol.iterator]();
                } else {
                  return { done: false, value: value2 };
                }
              }
            } while (state4.iterator);
            return DONE_RESULT;
          });
        }
        head() {
          const iterator = this.iterator();
          const result = iterator.next();
          if (result.done) {
            return void 0;
          }
          return result.value;
        }
        tail(skipCount = 1) {
          return new _StreamImpl(() => {
            const state4 = this.startFn();
            for (let i2 = 0; i2 < skipCount; i2++) {
              const next3 = this.nextFn(state4);
              if (next3.done) {
                return state4;
              }
            }
            return state4;
          }, this.nextFn);
        }
        limit(maxSize) {
          return new _StreamImpl(() => ({ size: 0, state: this.startFn() }), (state4) => {
            state4.size++;
            if (state4.size > maxSize) {
              return DONE_RESULT;
            }
            return this.nextFn(state4.state);
          });
        }
        distinct(by) {
          return new _StreamImpl(() => ({ set: /* @__PURE__ */ new Set(), internalState: this.startFn() }), (state4) => {
            let result;
            do {
              result = this.nextFn(state4.internalState);
              if (!result.done) {
                const value2 = by ? by(result.value) : result.value;
                if (!state4.set.has(value2)) {
                  state4.set.add(value2);
                  return result;
                }
              }
            } while (!result.done);
            return DONE_RESULT;
          });
        }
        exclude(other, key) {
          const otherKeySet = /* @__PURE__ */ new Set();
          for (const item of other) {
            const value2 = key ? key(item) : item;
            otherKeySet.add(value2);
          }
          return this.filter((e3) => {
            const ownKey = key ? key(e3) : e3;
            return !otherKeySet.has(ownKey);
          });
        }
      };
      __name(toString5, "toString");
      __name2(toString5, "toString");
      __name(isIterable, "isIterable");
      __name2(isIterable, "isIterable");
      EMPTY_STREAM = new StreamImpl(() => void 0, () => DONE_RESULT);
      DONE_RESULT = Object.freeze({ done: true, value: void 0 });
      __name(stream, "stream");
      __name2(stream, "stream");
      TreeStreamImpl = class extends StreamImpl {
        static {
          __name(this, "TreeStreamImpl");
        }
        static {
          __name2(this, "TreeStreamImpl");
        }
        constructor(root32, children2, options2) {
          super(() => ({
            iterators: options2?.includeRoot ? [[root32][Symbol.iterator]()] : [children2(root32)[Symbol.iterator]()],
            pruned: false
          }), (state4) => {
            if (state4.pruned) {
              state4.iterators.pop();
              state4.pruned = false;
            }
            while (state4.iterators.length > 0) {
              const iterator = state4.iterators[state4.iterators.length - 1];
              const next3 = iterator.next();
              if (next3.done) {
                state4.iterators.pop();
              } else {
                state4.iterators.push(children2(next3.value)[Symbol.iterator]());
                return next3;
              }
            }
            return DONE_RESULT;
          });
        }
        iterator() {
          const iterator = {
            state: this.startFn(),
            next: /* @__PURE__ */ __name2(() => this.nextFn(iterator.state), "next"),
            prune: /* @__PURE__ */ __name2(() => {
              iterator.state.pruned = true;
            }, "prune"),
            [Symbol.iterator]: () => iterator
          };
          return iterator;
        }
      };
      (function(Reduction2) {
        function sum2(stream2) {
          return stream2.reduce((a2, b3) => a2 + b3, 0);
        }
        __name(sum2, "sum");
        __name2(sum2, "sum");
        Reduction2.sum = sum2;
        function product(stream2) {
          return stream2.reduce((a2, b3) => a2 * b3, 0);
        }
        __name(product, "product");
        __name2(product, "product");
        Reduction2.product = product;
        function min22(stream2) {
          return stream2.reduce((a2, b3) => Math.min(a2, b3));
        }
        __name(min22, "min2");
        __name2(min22, "min");
        Reduction2.min = min22;
        function max10(stream2) {
          return stream2.reduce((a2, b3) => Math.max(a2, b3));
        }
        __name(max10, "max");
        __name2(max10, "max");
        Reduction2.max = max10;
      })(Reduction || (Reduction = {}));
      ast_utils_exports = {};
      __export2(ast_utils_exports, {
        assignMandatoryProperties: /* @__PURE__ */ __name(() => assignMandatoryProperties, "assignMandatoryProperties"),
        copyAstNode: /* @__PURE__ */ __name(() => copyAstNode, "copyAstNode"),
        findRootNode: /* @__PURE__ */ __name(() => findRootNode, "findRootNode"),
        getContainerOfType: /* @__PURE__ */ __name(() => getContainerOfType, "getContainerOfType"),
        getDocument: /* @__PURE__ */ __name(() => getDocument, "getDocument"),
        getReferenceNodes: /* @__PURE__ */ __name(() => getReferenceNodes, "getReferenceNodes"),
        hasContainerOfType: /* @__PURE__ */ __name(() => hasContainerOfType, "hasContainerOfType"),
        linkContentToContainer: /* @__PURE__ */ __name(() => linkContentToContainer, "linkContentToContainer"),
        streamAllContents: /* @__PURE__ */ __name(() => streamAllContents, "streamAllContents"),
        streamAst: /* @__PURE__ */ __name(() => streamAst, "streamAst"),
        streamContents: /* @__PURE__ */ __name(() => streamContents, "streamContents"),
        streamReferences: /* @__PURE__ */ __name(() => streamReferences, "streamReferences")
      });
      __name(linkContentToContainer, "linkContentToContainer");
      __name2(linkContentToContainer, "linkContentToContainer");
      __name(getContainerOfType, "getContainerOfType");
      __name2(getContainerOfType, "getContainerOfType");
      __name(hasContainerOfType, "hasContainerOfType");
      __name2(hasContainerOfType, "hasContainerOfType");
      __name(getDocument, "getDocument");
      __name2(getDocument, "getDocument");
      __name(findRootNode, "findRootNode");
      __name2(findRootNode, "findRootNode");
      __name(getReferenceNodes, "getReferenceNodes");
      __name2(getReferenceNodes, "getReferenceNodes");
      __name(streamContents, "streamContents");
      __name2(streamContents, "streamContents");
      __name(streamAllContents, "streamAllContents");
      __name2(streamAllContents, "streamAllContents");
      __name(streamAst, "streamAst");
      __name2(streamAst, "streamAst");
      __name(isAstNodeInRange, "isAstNodeInRange");
      __name2(isAstNodeInRange, "isAstNodeInRange");
      __name(streamReferences, "streamReferences");
      __name2(streamReferences, "streamReferences");
      __name(assignMandatoryProperties, "assignMandatoryProperties");
      __name2(assignMandatoryProperties, "assignMandatoryProperties");
      __name(copyDefaultValue, "copyDefaultValue");
      __name2(copyDefaultValue, "copyDefaultValue");
      __name(copyAstNode, "copyAstNode");
      __name2(copyAstNode, "copyAstNode");
      ast_exports = {};
      __export2(ast_exports, {
        AbstractElement: /* @__PURE__ */ __name(() => AbstractElement, "AbstractElement"),
        AbstractParserRule: /* @__PURE__ */ __name(() => AbstractParserRule, "AbstractParserRule"),
        AbstractRule: /* @__PURE__ */ __name(() => AbstractRule, "AbstractRule"),
        AbstractType: /* @__PURE__ */ __name(() => AbstractType, "AbstractType"),
        Action: /* @__PURE__ */ __name(() => Action, "Action"),
        Alternatives: /* @__PURE__ */ __name(() => Alternatives, "Alternatives"),
        ArrayLiteral: /* @__PURE__ */ __name(() => ArrayLiteral, "ArrayLiteral"),
        ArrayType: /* @__PURE__ */ __name(() => ArrayType, "ArrayType"),
        Assignment: /* @__PURE__ */ __name(() => Assignment, "Assignment"),
        BooleanLiteral: /* @__PURE__ */ __name(() => BooleanLiteral, "BooleanLiteral"),
        CharacterRange: /* @__PURE__ */ __name(() => CharacterRange, "CharacterRange"),
        Condition: /* @__PURE__ */ __name(() => Condition, "Condition"),
        Conjunction: /* @__PURE__ */ __name(() => Conjunction, "Conjunction"),
        CrossReference: /* @__PURE__ */ __name(() => CrossReference, "CrossReference"),
        Disjunction: /* @__PURE__ */ __name(() => Disjunction, "Disjunction"),
        EndOfFile: /* @__PURE__ */ __name(() => EndOfFile, "EndOfFile"),
        Grammar: /* @__PURE__ */ __name(() => Grammar, "Grammar"),
        GrammarImport: /* @__PURE__ */ __name(() => GrammarImport, "GrammarImport"),
        Group: /* @__PURE__ */ __name(() => Group, "Group"),
        InferredType: /* @__PURE__ */ __name(() => InferredType, "InferredType"),
        InfixRule: /* @__PURE__ */ __name(() => InfixRule, "InfixRule"),
        InfixRuleOperatorList: /* @__PURE__ */ __name(() => InfixRuleOperatorList, "InfixRuleOperatorList"),
        InfixRuleOperators: /* @__PURE__ */ __name(() => InfixRuleOperators, "InfixRuleOperators"),
        Interface: /* @__PURE__ */ __name(() => Interface, "Interface"),
        Keyword: /* @__PURE__ */ __name(() => Keyword2, "Keyword"),
        LangiumGrammarAstReflection: /* @__PURE__ */ __name(() => LangiumGrammarAstReflection, "LangiumGrammarAstReflection"),
        LangiumGrammarTerminals: /* @__PURE__ */ __name(() => LangiumGrammarTerminals, "LangiumGrammarTerminals"),
        NamedArgument: /* @__PURE__ */ __name(() => NamedArgument, "NamedArgument"),
        NegatedToken: /* @__PURE__ */ __name(() => NegatedToken, "NegatedToken"),
        Negation: /* @__PURE__ */ __name(() => Negation, "Negation"),
        NumberLiteral: /* @__PURE__ */ __name(() => NumberLiteral, "NumberLiteral"),
        Parameter: /* @__PURE__ */ __name(() => Parameter, "Parameter"),
        ParameterReference: /* @__PURE__ */ __name(() => ParameterReference, "ParameterReference"),
        ParserRule: /* @__PURE__ */ __name(() => ParserRule, "ParserRule"),
        ReferenceType: /* @__PURE__ */ __name(() => ReferenceType, "ReferenceType"),
        RegexToken: /* @__PURE__ */ __name(() => RegexToken, "RegexToken"),
        ReturnType: /* @__PURE__ */ __name(() => ReturnType, "ReturnType"),
        RuleCall: /* @__PURE__ */ __name(() => RuleCall, "RuleCall"),
        SimpleType: /* @__PURE__ */ __name(() => SimpleType, "SimpleType"),
        StringLiteral: /* @__PURE__ */ __name(() => StringLiteral, "StringLiteral"),
        TerminalAlternatives: /* @__PURE__ */ __name(() => TerminalAlternatives, "TerminalAlternatives"),
        TerminalElement: /* @__PURE__ */ __name(() => TerminalElement, "TerminalElement"),
        TerminalGroup: /* @__PURE__ */ __name(() => TerminalGroup, "TerminalGroup"),
        TerminalRule: /* @__PURE__ */ __name(() => TerminalRule, "TerminalRule"),
        TerminalRuleCall: /* @__PURE__ */ __name(() => TerminalRuleCall, "TerminalRuleCall"),
        Type: /* @__PURE__ */ __name(() => Type3, "Type"),
        TypeAttribute: /* @__PURE__ */ __name(() => TypeAttribute, "TypeAttribute"),
        TypeDefinition: /* @__PURE__ */ __name(() => TypeDefinition, "TypeDefinition"),
        UnionType: /* @__PURE__ */ __name(() => UnionType, "UnionType"),
        UnorderedGroup: /* @__PURE__ */ __name(() => UnorderedGroup, "UnorderedGroup"),
        UntilToken: /* @__PURE__ */ __name(() => UntilToken, "UntilToken"),
        ValueLiteral: /* @__PURE__ */ __name(() => ValueLiteral, "ValueLiteral"),
        Wildcard: /* @__PURE__ */ __name(() => Wildcard, "Wildcard"),
        isAbstractElement: /* @__PURE__ */ __name(() => isAbstractElement, "isAbstractElement"),
        isAbstractParserRule: /* @__PURE__ */ __name(() => isAbstractParserRule, "isAbstractParserRule"),
        isAbstractRule: /* @__PURE__ */ __name(() => isAbstractRule, "isAbstractRule"),
        isAbstractType: /* @__PURE__ */ __name(() => isAbstractType, "isAbstractType"),
        isAction: /* @__PURE__ */ __name(() => isAction, "isAction"),
        isAlternatives: /* @__PURE__ */ __name(() => isAlternatives, "isAlternatives"),
        isArrayLiteral: /* @__PURE__ */ __name(() => isArrayLiteral, "isArrayLiteral"),
        isArrayType: /* @__PURE__ */ __name(() => isArrayType, "isArrayType"),
        isAssignment: /* @__PURE__ */ __name(() => isAssignment, "isAssignment"),
        isBooleanLiteral: /* @__PURE__ */ __name(() => isBooleanLiteral, "isBooleanLiteral"),
        isCharacterRange: /* @__PURE__ */ __name(() => isCharacterRange, "isCharacterRange"),
        isCondition: /* @__PURE__ */ __name(() => isCondition, "isCondition"),
        isConjunction: /* @__PURE__ */ __name(() => isConjunction, "isConjunction"),
        isCrossReference: /* @__PURE__ */ __name(() => isCrossReference, "isCrossReference"),
        isDisjunction: /* @__PURE__ */ __name(() => isDisjunction, "isDisjunction"),
        isEndOfFile: /* @__PURE__ */ __name(() => isEndOfFile, "isEndOfFile"),
        isGrammar: /* @__PURE__ */ __name(() => isGrammar, "isGrammar"),
        isGrammarImport: /* @__PURE__ */ __name(() => isGrammarImport, "isGrammarImport"),
        isGroup: /* @__PURE__ */ __name(() => isGroup, "isGroup"),
        isInferredType: /* @__PURE__ */ __name(() => isInferredType, "isInferredType"),
        isInfixRule: /* @__PURE__ */ __name(() => isInfixRule, "isInfixRule"),
        isInfixRuleOperatorList: /* @__PURE__ */ __name(() => isInfixRuleOperatorList, "isInfixRuleOperatorList"),
        isInfixRuleOperators: /* @__PURE__ */ __name(() => isInfixRuleOperators, "isInfixRuleOperators"),
        isInterface: /* @__PURE__ */ __name(() => isInterface, "isInterface"),
        isKeyword: /* @__PURE__ */ __name(() => isKeyword, "isKeyword"),
        isNamedArgument: /* @__PURE__ */ __name(() => isNamedArgument, "isNamedArgument"),
        isNegatedToken: /* @__PURE__ */ __name(() => isNegatedToken, "isNegatedToken"),
        isNegation: /* @__PURE__ */ __name(() => isNegation, "isNegation"),
        isNumberLiteral: /* @__PURE__ */ __name(() => isNumberLiteral, "isNumberLiteral"),
        isParameter: /* @__PURE__ */ __name(() => isParameter, "isParameter"),
        isParameterReference: /* @__PURE__ */ __name(() => isParameterReference, "isParameterReference"),
        isParserRule: /* @__PURE__ */ __name(() => isParserRule, "isParserRule"),
        isReferenceType: /* @__PURE__ */ __name(() => isReferenceType, "isReferenceType"),
        isRegexToken: /* @__PURE__ */ __name(() => isRegexToken, "isRegexToken"),
        isReturnType: /* @__PURE__ */ __name(() => isReturnType, "isReturnType"),
        isRuleCall: /* @__PURE__ */ __name(() => isRuleCall, "isRuleCall"),
        isSimpleType: /* @__PURE__ */ __name(() => isSimpleType, "isSimpleType"),
        isStringLiteral: /* @__PURE__ */ __name(() => isStringLiteral, "isStringLiteral"),
        isTerminalAlternatives: /* @__PURE__ */ __name(() => isTerminalAlternatives, "isTerminalAlternatives"),
        isTerminalElement: /* @__PURE__ */ __name(() => isTerminalElement, "isTerminalElement"),
        isTerminalGroup: /* @__PURE__ */ __name(() => isTerminalGroup, "isTerminalGroup"),
        isTerminalRule: /* @__PURE__ */ __name(() => isTerminalRule, "isTerminalRule"),
        isTerminalRuleCall: /* @__PURE__ */ __name(() => isTerminalRuleCall, "isTerminalRuleCall"),
        isType: /* @__PURE__ */ __name(() => isType, "isType"),
        isTypeAttribute: /* @__PURE__ */ __name(() => isTypeAttribute, "isTypeAttribute"),
        isTypeDefinition: /* @__PURE__ */ __name(() => isTypeDefinition, "isTypeDefinition"),
        isUnionType: /* @__PURE__ */ __name(() => isUnionType, "isUnionType"),
        isUnorderedGroup: /* @__PURE__ */ __name(() => isUnorderedGroup, "isUnorderedGroup"),
        isUntilToken: /* @__PURE__ */ __name(() => isUntilToken, "isUntilToken"),
        isValueLiteral: /* @__PURE__ */ __name(() => isValueLiteral, "isValueLiteral"),
        isWildcard: /* @__PURE__ */ __name(() => isWildcard, "isWildcard"),
        reflection: /* @__PURE__ */ __name(() => reflection, "reflection")
      });
      LangiumGrammarTerminals = {
        ID: /\^?[_a-zA-Z][\w_]*/,
        STRING: /"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,
        NUMBER: /NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,
        RegexLiteral: /\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,
        WS: /\s+/,
        ML_COMMENT: /\/\*[\s\S]*?\*\//,
        SL_COMMENT: /\/\/[^\n\r]*/
      };
      AbstractElement = {
        $type: "AbstractElement",
        cardinality: "cardinality"
      };
      __name(isAbstractElement, "isAbstractElement");
      __name2(isAbstractElement, "isAbstractElement");
      AbstractParserRule = {
        $type: "AbstractParserRule"
      };
      __name(isAbstractParserRule, "isAbstractParserRule");
      __name2(isAbstractParserRule, "isAbstractParserRule");
      AbstractRule = {
        $type: "AbstractRule"
      };
      __name(isAbstractRule, "isAbstractRule");
      __name2(isAbstractRule, "isAbstractRule");
      AbstractType = {
        $type: "AbstractType"
      };
      __name(isAbstractType, "isAbstractType");
      __name2(isAbstractType, "isAbstractType");
      Action = {
        $type: "Action",
        cardinality: "cardinality",
        feature: "feature",
        inferredType: "inferredType",
        operator: "operator",
        type: "type"
      };
      __name(isAction, "isAction");
      __name2(isAction, "isAction");
      Alternatives = {
        $type: "Alternatives",
        cardinality: "cardinality",
        elements: "elements"
      };
      __name(isAlternatives, "isAlternatives");
      __name2(isAlternatives, "isAlternatives");
      ArrayLiteral = {
        $type: "ArrayLiteral",
        elements: "elements"
      };
      __name(isArrayLiteral, "isArrayLiteral");
      __name2(isArrayLiteral, "isArrayLiteral");
      ArrayType = {
        $type: "ArrayType",
        elementType: "elementType"
      };
      __name(isArrayType, "isArrayType");
      __name2(isArrayType, "isArrayType");
      Assignment = {
        $type: "Assignment",
        cardinality: "cardinality",
        feature: "feature",
        operator: "operator",
        predicate: "predicate",
        terminal: "terminal"
      };
      __name(isAssignment, "isAssignment");
      __name2(isAssignment, "isAssignment");
      BooleanLiteral = {
        $type: "BooleanLiteral",
        true: "true"
      };
      __name(isBooleanLiteral, "isBooleanLiteral");
      __name2(isBooleanLiteral, "isBooleanLiteral");
      CharacterRange = {
        $type: "CharacterRange",
        cardinality: "cardinality",
        left: "left",
        lookahead: "lookahead",
        parenthesized: "parenthesized",
        right: "right"
      };
      __name(isCharacterRange, "isCharacterRange");
      __name2(isCharacterRange, "isCharacterRange");
      Condition = {
        $type: "Condition"
      };
      __name(isCondition, "isCondition");
      __name2(isCondition, "isCondition");
      Conjunction = {
        $type: "Conjunction",
        left: "left",
        right: "right"
      };
      __name(isConjunction, "isConjunction");
      __name2(isConjunction, "isConjunction");
      CrossReference = {
        $type: "CrossReference",
        cardinality: "cardinality",
        deprecatedSyntax: "deprecatedSyntax",
        isMulti: "isMulti",
        terminal: "terminal",
        type: "type"
      };
      __name(isCrossReference, "isCrossReference");
      __name2(isCrossReference, "isCrossReference");
      Disjunction = {
        $type: "Disjunction",
        left: "left",
        right: "right"
      };
      __name(isDisjunction, "isDisjunction");
      __name2(isDisjunction, "isDisjunction");
      EndOfFile = {
        $type: "EndOfFile",
        cardinality: "cardinality"
      };
      __name(isEndOfFile, "isEndOfFile");
      __name2(isEndOfFile, "isEndOfFile");
      Grammar = {
        $type: "Grammar",
        imports: "imports",
        interfaces: "interfaces",
        isDeclared: "isDeclared",
        name: "name",
        rules: "rules",
        types: "types"
      };
      __name(isGrammar, "isGrammar");
      __name2(isGrammar, "isGrammar");
      GrammarImport = {
        $type: "GrammarImport",
        path: "path"
      };
      __name(isGrammarImport, "isGrammarImport");
      __name2(isGrammarImport, "isGrammarImport");
      Group = {
        $type: "Group",
        cardinality: "cardinality",
        elements: "elements",
        guardCondition: "guardCondition",
        predicate: "predicate"
      };
      __name(isGroup, "isGroup");
      __name2(isGroup, "isGroup");
      InferredType = {
        $type: "InferredType",
        name: "name"
      };
      __name(isInferredType, "isInferredType");
      __name2(isInferredType, "isInferredType");
      InfixRule = {
        $type: "InfixRule",
        call: "call",
        dataType: "dataType",
        inferredType: "inferredType",
        name: "name",
        operators: "operators",
        parameters: "parameters",
        returnType: "returnType"
      };
      __name(isInfixRule, "isInfixRule");
      __name2(isInfixRule, "isInfixRule");
      InfixRuleOperatorList = {
        $type: "InfixRuleOperatorList",
        associativity: "associativity",
        operators: "operators"
      };
      __name(isInfixRuleOperatorList, "isInfixRuleOperatorList");
      __name2(isInfixRuleOperatorList, "isInfixRuleOperatorList");
      InfixRuleOperators = {
        $type: "InfixRuleOperators",
        precedences: "precedences"
      };
      __name(isInfixRuleOperators, "isInfixRuleOperators");
      __name2(isInfixRuleOperators, "isInfixRuleOperators");
      Interface = {
        $type: "Interface",
        attributes: "attributes",
        name: "name",
        superTypes: "superTypes"
      };
      __name(isInterface, "isInterface");
      __name2(isInterface, "isInterface");
      Keyword2 = {
        $type: "Keyword",
        cardinality: "cardinality",
        predicate: "predicate",
        value: "value"
      };
      __name(isKeyword, "isKeyword");
      __name2(isKeyword, "isKeyword");
      NamedArgument = {
        $type: "NamedArgument",
        calledByName: "calledByName",
        parameter: "parameter",
        value: "value"
      };
      __name(isNamedArgument, "isNamedArgument");
      __name2(isNamedArgument, "isNamedArgument");
      NegatedToken = {
        $type: "NegatedToken",
        cardinality: "cardinality",
        lookahead: "lookahead",
        parenthesized: "parenthesized",
        terminal: "terminal"
      };
      __name(isNegatedToken, "isNegatedToken");
      __name2(isNegatedToken, "isNegatedToken");
      Negation = {
        $type: "Negation",
        value: "value"
      };
      __name(isNegation, "isNegation");
      __name2(isNegation, "isNegation");
      NumberLiteral = {
        $type: "NumberLiteral",
        value: "value"
      };
      __name(isNumberLiteral, "isNumberLiteral");
      __name2(isNumberLiteral, "isNumberLiteral");
      Parameter = {
        $type: "Parameter",
        name: "name"
      };
      __name(isParameter, "isParameter");
      __name2(isParameter, "isParameter");
      ParameterReference = {
        $type: "ParameterReference",
        parameter: "parameter"
      };
      __name(isParameterReference, "isParameterReference");
      __name2(isParameterReference, "isParameterReference");
      ParserRule = {
        $type: "ParserRule",
        dataType: "dataType",
        definition: "definition",
        entry: "entry",
        fragment: "fragment",
        inferredType: "inferredType",
        name: "name",
        parameters: "parameters",
        returnType: "returnType"
      };
      __name(isParserRule, "isParserRule");
      __name2(isParserRule, "isParserRule");
      ReferenceType = {
        $type: "ReferenceType",
        isMulti: "isMulti",
        referenceType: "referenceType"
      };
      __name(isReferenceType, "isReferenceType");
      __name2(isReferenceType, "isReferenceType");
      RegexToken = {
        $type: "RegexToken",
        cardinality: "cardinality",
        lookahead: "lookahead",
        parenthesized: "parenthesized",
        regex: "regex"
      };
      __name(isRegexToken, "isRegexToken");
      __name2(isRegexToken, "isRegexToken");
      ReturnType = {
        $type: "ReturnType",
        name: "name"
      };
      __name(isReturnType, "isReturnType");
      __name2(isReturnType, "isReturnType");
      RuleCall = {
        $type: "RuleCall",
        arguments: "arguments",
        cardinality: "cardinality",
        predicate: "predicate",
        rule: "rule"
      };
      __name(isRuleCall, "isRuleCall");
      __name2(isRuleCall, "isRuleCall");
      SimpleType = {
        $type: "SimpleType",
        primitiveType: "primitiveType",
        stringType: "stringType",
        typeRef: "typeRef"
      };
      __name(isSimpleType, "isSimpleType");
      __name2(isSimpleType, "isSimpleType");
      StringLiteral = {
        $type: "StringLiteral",
        value: "value"
      };
      __name(isStringLiteral, "isStringLiteral");
      __name2(isStringLiteral, "isStringLiteral");
      TerminalAlternatives = {
        $type: "TerminalAlternatives",
        cardinality: "cardinality",
        elements: "elements",
        lookahead: "lookahead",
        parenthesized: "parenthesized"
      };
      __name(isTerminalAlternatives, "isTerminalAlternatives");
      __name2(isTerminalAlternatives, "isTerminalAlternatives");
      TerminalElement = {
        $type: "TerminalElement",
        cardinality: "cardinality",
        lookahead: "lookahead",
        parenthesized: "parenthesized"
      };
      __name(isTerminalElement, "isTerminalElement");
      __name2(isTerminalElement, "isTerminalElement");
      TerminalGroup = {
        $type: "TerminalGroup",
        cardinality: "cardinality",
        elements: "elements",
        lookahead: "lookahead",
        parenthesized: "parenthesized"
      };
      __name(isTerminalGroup, "isTerminalGroup");
      __name2(isTerminalGroup, "isTerminalGroup");
      TerminalRule = {
        $type: "TerminalRule",
        definition: "definition",
        fragment: "fragment",
        hidden: "hidden",
        name: "name",
        type: "type"
      };
      __name(isTerminalRule, "isTerminalRule");
      __name2(isTerminalRule, "isTerminalRule");
      TerminalRuleCall = {
        $type: "TerminalRuleCall",
        cardinality: "cardinality",
        lookahead: "lookahead",
        parenthesized: "parenthesized",
        rule: "rule"
      };
      __name(isTerminalRuleCall, "isTerminalRuleCall");
      __name2(isTerminalRuleCall, "isTerminalRuleCall");
      Type3 = {
        $type: "Type",
        name: "name",
        type: "type"
      };
      __name(isType, "isType");
      __name2(isType, "isType");
      TypeAttribute = {
        $type: "TypeAttribute",
        defaultValue: "defaultValue",
        isOptional: "isOptional",
        name: "name",
        type: "type"
      };
      __name(isTypeAttribute, "isTypeAttribute");
      __name2(isTypeAttribute, "isTypeAttribute");
      TypeDefinition = {
        $type: "TypeDefinition"
      };
      __name(isTypeDefinition, "isTypeDefinition");
      __name2(isTypeDefinition, "isTypeDefinition");
      UnionType = {
        $type: "UnionType",
        types: "types"
      };
      __name(isUnionType, "isUnionType");
      __name2(isUnionType, "isUnionType");
      UnorderedGroup = {
        $type: "UnorderedGroup",
        cardinality: "cardinality",
        elements: "elements"
      };
      __name(isUnorderedGroup, "isUnorderedGroup");
      __name2(isUnorderedGroup, "isUnorderedGroup");
      UntilToken = {
        $type: "UntilToken",
        cardinality: "cardinality",
        lookahead: "lookahead",
        parenthesized: "parenthesized",
        terminal: "terminal"
      };
      __name(isUntilToken, "isUntilToken");
      __name2(isUntilToken, "isUntilToken");
      ValueLiteral = {
        $type: "ValueLiteral"
      };
      __name(isValueLiteral, "isValueLiteral");
      __name2(isValueLiteral, "isValueLiteral");
      Wildcard = {
        $type: "Wildcard",
        cardinality: "cardinality",
        lookahead: "lookahead",
        parenthesized: "parenthesized"
      };
      __name(isWildcard, "isWildcard");
      __name2(isWildcard, "isWildcard");
      LangiumGrammarAstReflection = class extends AbstractAstReflection {
        static {
          __name(this, "LangiumGrammarAstReflection");
        }
        static {
          __name2(this, "LangiumGrammarAstReflection");
        }
        constructor() {
          super(...arguments);
          this.types = {
            AbstractElement: {
              name: AbstractElement.$type,
              properties: {
                cardinality: {
                  name: AbstractElement.cardinality
                }
              },
              superTypes: []
            },
            AbstractParserRule: {
              name: AbstractParserRule.$type,
              properties: {},
              superTypes: [AbstractRule.$type, AbstractType.$type]
            },
            AbstractRule: {
              name: AbstractRule.$type,
              properties: {},
              superTypes: []
            },
            AbstractType: {
              name: AbstractType.$type,
              properties: {},
              superTypes: []
            },
            Action: {
              name: Action.$type,
              properties: {
                cardinality: {
                  name: Action.cardinality
                },
                feature: {
                  name: Action.feature
                },
                inferredType: {
                  name: Action.inferredType
                },
                operator: {
                  name: Action.operator
                },
                type: {
                  name: Action.type,
                  referenceType: AbstractType.$type
                }
              },
              superTypes: [AbstractElement.$type]
            },
            Alternatives: {
              name: Alternatives.$type,
              properties: {
                cardinality: {
                  name: Alternatives.cardinality
                },
                elements: {
                  name: Alternatives.elements,
                  defaultValue: []
                }
              },
              superTypes: [AbstractElement.$type]
            },
            ArrayLiteral: {
              name: ArrayLiteral.$type,
              properties: {
                elements: {
                  name: ArrayLiteral.elements,
                  defaultValue: []
                }
              },
              superTypes: [ValueLiteral.$type]
            },
            ArrayType: {
              name: ArrayType.$type,
              properties: {
                elementType: {
                  name: ArrayType.elementType
                }
              },
              superTypes: [TypeDefinition.$type]
            },
            Assignment: {
              name: Assignment.$type,
              properties: {
                cardinality: {
                  name: Assignment.cardinality
                },
                feature: {
                  name: Assignment.feature
                },
                operator: {
                  name: Assignment.operator
                },
                predicate: {
                  name: Assignment.predicate
                },
                terminal: {
                  name: Assignment.terminal
                }
              },
              superTypes: [AbstractElement.$type]
            },
            BooleanLiteral: {
              name: BooleanLiteral.$type,
              properties: {
                true: {
                  name: BooleanLiteral.true,
                  defaultValue: false
                }
              },
              superTypes: [Condition.$type, ValueLiteral.$type]
            },
            CharacterRange: {
              name: CharacterRange.$type,
              properties: {
                cardinality: {
                  name: CharacterRange.cardinality
                },
                left: {
                  name: CharacterRange.left
                },
                lookahead: {
                  name: CharacterRange.lookahead
                },
                parenthesized: {
                  name: CharacterRange.parenthesized,
                  defaultValue: false
                },
                right: {
                  name: CharacterRange.right
                }
              },
              superTypes: [TerminalElement.$type]
            },
            Condition: {
              name: Condition.$type,
              properties: {},
              superTypes: []
            },
            Conjunction: {
              name: Conjunction.$type,
              properties: {
                left: {
                  name: Conjunction.left
                },
                right: {
                  name: Conjunction.right
                }
              },
              superTypes: [Condition.$type]
            },
            CrossReference: {
              name: CrossReference.$type,
              properties: {
                cardinality: {
                  name: CrossReference.cardinality
                },
                deprecatedSyntax: {
                  name: CrossReference.deprecatedSyntax,
                  defaultValue: false
                },
                isMulti: {
                  name: CrossReference.isMulti,
                  defaultValue: false
                },
                terminal: {
                  name: CrossReference.terminal
                },
                type: {
                  name: CrossReference.type,
                  referenceType: AbstractType.$type
                }
              },
              superTypes: [AbstractElement.$type]
            },
            Disjunction: {
              name: Disjunction.$type,
              properties: {
                left: {
                  name: Disjunction.left
                },
                right: {
                  name: Disjunction.right
                }
              },
              superTypes: [Condition.$type]
            },
            EndOfFile: {
              name: EndOfFile.$type,
              properties: {
                cardinality: {
                  name: EndOfFile.cardinality
                }
              },
              superTypes: [AbstractElement.$type]
            },
            Grammar: {
              name: Grammar.$type,
              properties: {
                imports: {
                  name: Grammar.imports,
                  defaultValue: []
                },
                interfaces: {
                  name: Grammar.interfaces,
                  defaultValue: []
                },
                isDeclared: {
                  name: Grammar.isDeclared,
                  defaultValue: false
                },
                name: {
                  name: Grammar.name
                },
                rules: {
                  name: Grammar.rules,
                  defaultValue: []
                },
                types: {
                  name: Grammar.types,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            GrammarImport: {
              name: GrammarImport.$type,
              properties: {
                path: {
                  name: GrammarImport.path
                }
              },
              superTypes: []
            },
            Group: {
              name: Group.$type,
              properties: {
                cardinality: {
                  name: Group.cardinality
                },
                elements: {
                  name: Group.elements,
                  defaultValue: []
                },
                guardCondition: {
                  name: Group.guardCondition
                },
                predicate: {
                  name: Group.predicate
                }
              },
              superTypes: [AbstractElement.$type]
            },
            InferredType: {
              name: InferredType.$type,
              properties: {
                name: {
                  name: InferredType.name
                }
              },
              superTypes: [AbstractType.$type]
            },
            InfixRule: {
              name: InfixRule.$type,
              properties: {
                call: {
                  name: InfixRule.call
                },
                dataType: {
                  name: InfixRule.dataType
                },
                inferredType: {
                  name: InfixRule.inferredType
                },
                name: {
                  name: InfixRule.name
                },
                operators: {
                  name: InfixRule.operators
                },
                parameters: {
                  name: InfixRule.parameters,
                  defaultValue: []
                },
                returnType: {
                  name: InfixRule.returnType,
                  referenceType: AbstractType.$type
                }
              },
              superTypes: [AbstractParserRule.$type]
            },
            InfixRuleOperatorList: {
              name: InfixRuleOperatorList.$type,
              properties: {
                associativity: {
                  name: InfixRuleOperatorList.associativity
                },
                operators: {
                  name: InfixRuleOperatorList.operators,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            InfixRuleOperators: {
              name: InfixRuleOperators.$type,
              properties: {
                precedences: {
                  name: InfixRuleOperators.precedences,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            Interface: {
              name: Interface.$type,
              properties: {
                attributes: {
                  name: Interface.attributes,
                  defaultValue: []
                },
                name: {
                  name: Interface.name
                },
                superTypes: {
                  name: Interface.superTypes,
                  defaultValue: [],
                  referenceType: AbstractType.$type
                }
              },
              superTypes: [AbstractType.$type]
            },
            Keyword: {
              name: Keyword2.$type,
              properties: {
                cardinality: {
                  name: Keyword2.cardinality
                },
                predicate: {
                  name: Keyword2.predicate
                },
                value: {
                  name: Keyword2.value
                }
              },
              superTypes: [AbstractElement.$type]
            },
            NamedArgument: {
              name: NamedArgument.$type,
              properties: {
                calledByName: {
                  name: NamedArgument.calledByName,
                  defaultValue: false
                },
                parameter: {
                  name: NamedArgument.parameter,
                  referenceType: Parameter.$type
                },
                value: {
                  name: NamedArgument.value
                }
              },
              superTypes: []
            },
            NegatedToken: {
              name: NegatedToken.$type,
              properties: {
                cardinality: {
                  name: NegatedToken.cardinality
                },
                lookahead: {
                  name: NegatedToken.lookahead
                },
                parenthesized: {
                  name: NegatedToken.parenthesized,
                  defaultValue: false
                },
                terminal: {
                  name: NegatedToken.terminal
                }
              },
              superTypes: [TerminalElement.$type]
            },
            Negation: {
              name: Negation.$type,
              properties: {
                value: {
                  name: Negation.value
                }
              },
              superTypes: [Condition.$type]
            },
            NumberLiteral: {
              name: NumberLiteral.$type,
              properties: {
                value: {
                  name: NumberLiteral.value
                }
              },
              superTypes: [ValueLiteral.$type]
            },
            Parameter: {
              name: Parameter.$type,
              properties: {
                name: {
                  name: Parameter.name
                }
              },
              superTypes: []
            },
            ParameterReference: {
              name: ParameterReference.$type,
              properties: {
                parameter: {
                  name: ParameterReference.parameter,
                  referenceType: Parameter.$type
                }
              },
              superTypes: [Condition.$type]
            },
            ParserRule: {
              name: ParserRule.$type,
              properties: {
                dataType: {
                  name: ParserRule.dataType
                },
                definition: {
                  name: ParserRule.definition
                },
                entry: {
                  name: ParserRule.entry,
                  defaultValue: false
                },
                fragment: {
                  name: ParserRule.fragment,
                  defaultValue: false
                },
                inferredType: {
                  name: ParserRule.inferredType
                },
                name: {
                  name: ParserRule.name
                },
                parameters: {
                  name: ParserRule.parameters,
                  defaultValue: []
                },
                returnType: {
                  name: ParserRule.returnType,
                  referenceType: AbstractType.$type
                }
              },
              superTypes: [AbstractParserRule.$type]
            },
            ReferenceType: {
              name: ReferenceType.$type,
              properties: {
                isMulti: {
                  name: ReferenceType.isMulti,
                  defaultValue: false
                },
                referenceType: {
                  name: ReferenceType.referenceType
                }
              },
              superTypes: [TypeDefinition.$type]
            },
            RegexToken: {
              name: RegexToken.$type,
              properties: {
                cardinality: {
                  name: RegexToken.cardinality
                },
                lookahead: {
                  name: RegexToken.lookahead
                },
                parenthesized: {
                  name: RegexToken.parenthesized,
                  defaultValue: false
                },
                regex: {
                  name: RegexToken.regex
                }
              },
              superTypes: [TerminalElement.$type]
            },
            ReturnType: {
              name: ReturnType.$type,
              properties: {
                name: {
                  name: ReturnType.name
                }
              },
              superTypes: []
            },
            RuleCall: {
              name: RuleCall.$type,
              properties: {
                arguments: {
                  name: RuleCall.arguments,
                  defaultValue: []
                },
                cardinality: {
                  name: RuleCall.cardinality
                },
                predicate: {
                  name: RuleCall.predicate
                },
                rule: {
                  name: RuleCall.rule,
                  referenceType: AbstractRule.$type
                }
              },
              superTypes: [AbstractElement.$type]
            },
            SimpleType: {
              name: SimpleType.$type,
              properties: {
                primitiveType: {
                  name: SimpleType.primitiveType
                },
                stringType: {
                  name: SimpleType.stringType
                },
                typeRef: {
                  name: SimpleType.typeRef,
                  referenceType: AbstractType.$type
                }
              },
              superTypes: [TypeDefinition.$type]
            },
            StringLiteral: {
              name: StringLiteral.$type,
              properties: {
                value: {
                  name: StringLiteral.value
                }
              },
              superTypes: [ValueLiteral.$type]
            },
            TerminalAlternatives: {
              name: TerminalAlternatives.$type,
              properties: {
                cardinality: {
                  name: TerminalAlternatives.cardinality
                },
                elements: {
                  name: TerminalAlternatives.elements,
                  defaultValue: []
                },
                lookahead: {
                  name: TerminalAlternatives.lookahead
                },
                parenthesized: {
                  name: TerminalAlternatives.parenthesized,
                  defaultValue: false
                }
              },
              superTypes: [TerminalElement.$type]
            },
            TerminalElement: {
              name: TerminalElement.$type,
              properties: {
                cardinality: {
                  name: TerminalElement.cardinality
                },
                lookahead: {
                  name: TerminalElement.lookahead
                },
                parenthesized: {
                  name: TerminalElement.parenthesized,
                  defaultValue: false
                }
              },
              superTypes: [AbstractElement.$type]
            },
            TerminalGroup: {
              name: TerminalGroup.$type,
              properties: {
                cardinality: {
                  name: TerminalGroup.cardinality
                },
                elements: {
                  name: TerminalGroup.elements,
                  defaultValue: []
                },
                lookahead: {
                  name: TerminalGroup.lookahead
                },
                parenthesized: {
                  name: TerminalGroup.parenthesized,
                  defaultValue: false
                }
              },
              superTypes: [TerminalElement.$type]
            },
            TerminalRule: {
              name: TerminalRule.$type,
              properties: {
                definition: {
                  name: TerminalRule.definition
                },
                fragment: {
                  name: TerminalRule.fragment,
                  defaultValue: false
                },
                hidden: {
                  name: TerminalRule.hidden,
                  defaultValue: false
                },
                name: {
                  name: TerminalRule.name
                },
                type: {
                  name: TerminalRule.type
                }
              },
              superTypes: [AbstractRule.$type]
            },
            TerminalRuleCall: {
              name: TerminalRuleCall.$type,
              properties: {
                cardinality: {
                  name: TerminalRuleCall.cardinality
                },
                lookahead: {
                  name: TerminalRuleCall.lookahead
                },
                parenthesized: {
                  name: TerminalRuleCall.parenthesized,
                  defaultValue: false
                },
                rule: {
                  name: TerminalRuleCall.rule,
                  referenceType: TerminalRule.$type
                }
              },
              superTypes: [TerminalElement.$type]
            },
            Type: {
              name: Type3.$type,
              properties: {
                name: {
                  name: Type3.name
                },
                type: {
                  name: Type3.type
                }
              },
              superTypes: [AbstractType.$type]
            },
            TypeAttribute: {
              name: TypeAttribute.$type,
              properties: {
                defaultValue: {
                  name: TypeAttribute.defaultValue
                },
                isOptional: {
                  name: TypeAttribute.isOptional,
                  defaultValue: false
                },
                name: {
                  name: TypeAttribute.name
                },
                type: {
                  name: TypeAttribute.type
                }
              },
              superTypes: []
            },
            TypeDefinition: {
              name: TypeDefinition.$type,
              properties: {},
              superTypes: []
            },
            UnionType: {
              name: UnionType.$type,
              properties: {
                types: {
                  name: UnionType.types,
                  defaultValue: []
                }
              },
              superTypes: [TypeDefinition.$type]
            },
            UnorderedGroup: {
              name: UnorderedGroup.$type,
              properties: {
                cardinality: {
                  name: UnorderedGroup.cardinality
                },
                elements: {
                  name: UnorderedGroup.elements,
                  defaultValue: []
                }
              },
              superTypes: [AbstractElement.$type]
            },
            UntilToken: {
              name: UntilToken.$type,
              properties: {
                cardinality: {
                  name: UntilToken.cardinality
                },
                lookahead: {
                  name: UntilToken.lookahead
                },
                parenthesized: {
                  name: UntilToken.parenthesized,
                  defaultValue: false
                },
                terminal: {
                  name: UntilToken.terminal
                }
              },
              superTypes: [TerminalElement.$type]
            },
            ValueLiteral: {
              name: ValueLiteral.$type,
              properties: {},
              superTypes: []
            },
            Wildcard: {
              name: Wildcard.$type,
              properties: {
                cardinality: {
                  name: Wildcard.cardinality
                },
                lookahead: {
                  name: Wildcard.lookahead
                },
                parenthesized: {
                  name: Wildcard.parenthesized,
                  defaultValue: false
                }
              },
              superTypes: [TerminalElement.$type]
            }
          };
        }
      };
      reflection = new LangiumGrammarAstReflection();
      __name(getDatatypeNode, "getDatatypeNode");
      __name2(getDatatypeNode, "getDatatypeNode");
      __name(streamCst, "streamCst");
      __name2(streamCst, "streamCst");
      __name(flattenCst, "flattenCst");
      __name2(flattenCst, "flattenCst");
      __name(isChildNode, "isChildNode");
      __name2(isChildNode, "isChildNode");
      __name(tokenToRange, "tokenToRange");
      __name2(tokenToRange, "tokenToRange");
      __name(toDocumentSegment, "toDocumentSegment");
      __name2(toDocumentSegment, "toDocumentSegment");
      (function(RangeComparison2) {
        RangeComparison2[RangeComparison2["Before"] = 0] = "Before";
        RangeComparison2[RangeComparison2["After"] = 1] = "After";
        RangeComparison2[RangeComparison2["OverlapFront"] = 2] = "OverlapFront";
        RangeComparison2[RangeComparison2["OverlapBack"] = 3] = "OverlapBack";
        RangeComparison2[RangeComparison2["Inside"] = 4] = "Inside";
        RangeComparison2[RangeComparison2["Outside"] = 5] = "Outside";
      })(RangeComparison || (RangeComparison = {}));
      __name(compareRange, "compareRange");
      __name2(compareRange, "compareRange");
      __name(inRange, "inRange");
      __name2(inRange, "inRange");
      DefaultNameRegexp = /^[\w\p{L}]$/u;
      __name(findDeclarationNodeAtOffset, "findDeclarationNodeAtOffset");
      __name2(findDeclarationNodeAtOffset, "findDeclarationNodeAtOffset");
      __name(findCommentNode, "findCommentNode");
      __name2(findCommentNode, "findCommentNode");
      __name(isCommentNode, "isCommentNode");
      __name2(isCommentNode, "isCommentNode");
      __name(findLeafNodeAtOffset, "findLeafNodeAtOffset");
      __name2(findLeafNodeAtOffset, "findLeafNodeAtOffset");
      __name(findLeafNodeBeforeOffset, "findLeafNodeBeforeOffset");
      __name2(findLeafNodeBeforeOffset, "findLeafNodeBeforeOffset");
      __name(binarySearch, "binarySearch");
      __name2(binarySearch, "binarySearch");
      __name(getPreviousNode, "getPreviousNode");
      __name2(getPreviousNode, "getPreviousNode");
      __name(getNextNode, "getNextNode");
      __name2(getNextNode, "getNextNode");
      __name(getStartlineNode, "getStartlineNode");
      __name2(getStartlineNode, "getStartlineNode");
      __name(getInteriorNodes, "getInteriorNodes");
      __name2(getInteriorNodes, "getInteriorNodes");
      __name(getCommonParent, "getCommonParent");
      __name2(getCommonParent, "getCommonParent");
      __name(getParentChain, "getParentChain");
      __name2(getParentChain, "getParentChain");
      grammar_utils_exports = {};
      __export2(grammar_utils_exports, {
        findAssignment: /* @__PURE__ */ __name(() => findAssignment, "findAssignment"),
        findNameAssignment: /* @__PURE__ */ __name(() => findNameAssignment, "findNameAssignment"),
        findNodeForKeyword: /* @__PURE__ */ __name(() => findNodeForKeyword, "findNodeForKeyword"),
        findNodeForProperty: /* @__PURE__ */ __name(() => findNodeForProperty, "findNodeForProperty"),
        findNodesForKeyword: /* @__PURE__ */ __name(() => findNodesForKeyword, "findNodesForKeyword"),
        findNodesForKeywordInternal: /* @__PURE__ */ __name(() => findNodesForKeywordInternal, "findNodesForKeywordInternal"),
        findNodesForProperty: /* @__PURE__ */ __name(() => findNodesForProperty, "findNodesForProperty"),
        getActionAtElement: /* @__PURE__ */ __name(() => getActionAtElement, "getActionAtElement"),
        getActionType: /* @__PURE__ */ __name(() => getActionType, "getActionType"),
        getAllReachableRules: /* @__PURE__ */ __name(() => getAllReachableRules, "getAllReachableRules"),
        getAllRulesUsedForCrossReferences: /* @__PURE__ */ __name(() => getAllRulesUsedForCrossReferences, "getAllRulesUsedForCrossReferences"),
        getCrossReferenceTerminal: /* @__PURE__ */ __name(() => getCrossReferenceTerminal, "getCrossReferenceTerminal"),
        getEntryRule: /* @__PURE__ */ __name(() => getEntryRule, "getEntryRule"),
        getExplicitRuleType: /* @__PURE__ */ __name(() => getExplicitRuleType, "getExplicitRuleType"),
        getHiddenRules: /* @__PURE__ */ __name(() => getHiddenRules, "getHiddenRules"),
        getRuleType: /* @__PURE__ */ __name(() => getRuleType, "getRuleType"),
        getRuleTypeName: /* @__PURE__ */ __name(() => getRuleTypeName, "getRuleTypeName"),
        getTypeName: /* @__PURE__ */ __name(() => getTypeName, "getTypeName"),
        isArrayCardinality: /* @__PURE__ */ __name(() => isArrayCardinality, "isArrayCardinality"),
        isArrayOperator: /* @__PURE__ */ __name(() => isArrayOperator, "isArrayOperator"),
        isCommentTerminal: /* @__PURE__ */ __name(() => isCommentTerminal, "isCommentTerminal"),
        isDataType: /* @__PURE__ */ __name(() => isDataType, "isDataType"),
        isDataTypeRule: /* @__PURE__ */ __name(() => isDataTypeRule, "isDataTypeRule"),
        isOptionalCardinality: /* @__PURE__ */ __name(() => isOptionalCardinality, "isOptionalCardinality"),
        terminalRegex: /* @__PURE__ */ __name(() => terminalRegex, "terminalRegex")
      });
      ErrorWithLocation = class extends Error {
        static {
          __name(this, "ErrorWithLocation");
        }
        static {
          __name2(this, "ErrorWithLocation");
        }
        constructor(node2, message) {
          super(node2 ? `${message} at ${node2.range.start.line}:${node2.range.start.character}` : message);
        }
      };
      __name(assertUnreachable, "assertUnreachable");
      __name2(assertUnreachable, "assertUnreachable");
      __name(assertCondition, "assertCondition");
      __name2(assertCondition, "assertCondition");
      regexp_utils_exports = {};
      __export2(regexp_utils_exports, {
        NEWLINE_REGEXP: /* @__PURE__ */ __name(() => NEWLINE_REGEXP, "NEWLINE_REGEXP"),
        escapeRegExp: /* @__PURE__ */ __name(() => escapeRegExp, "escapeRegExp"),
        getTerminalParts: /* @__PURE__ */ __name(() => getTerminalParts, "getTerminalParts"),
        isMultilineComment: /* @__PURE__ */ __name(() => isMultilineComment, "isMultilineComment"),
        isWhitespace: /* @__PURE__ */ __name(() => isWhitespace2, "isWhitespace"),
        partialMatches: /* @__PURE__ */ __name(() => partialMatches, "partialMatches"),
        partialRegExp: /* @__PURE__ */ __name(() => partialRegExp, "partialRegExp"),
        whitespaceCharacters: /* @__PURE__ */ __name(() => whitespaceCharacters, "whitespaceCharacters")
      });
      __name(cc, "cc");
      __name2(cc, "cc");
      __name(insertToSet, "insertToSet");
      __name2(insertToSet, "insertToSet");
      __name(addFlag, "addFlag");
      __name2(addFlag, "addFlag");
      __name(ASSERT_EXISTS, "ASSERT_EXISTS");
      __name2(ASSERT_EXISTS, "ASSERT_EXISTS");
      __name(ASSERT_NEVER_REACH_HERE, "ASSERT_NEVER_REACH_HERE");
      __name2(ASSERT_NEVER_REACH_HERE, "ASSERT_NEVER_REACH_HERE");
      __name(isCharacter, "isCharacter");
      __name2(isCharacter, "isCharacter");
      digitsCharCodes = [];
      for (let i2 = cc("0"); i2 <= cc("9"); i2++) {
        digitsCharCodes.push(i2);
      }
      wordCharCodes = [cc("_")].concat(digitsCharCodes);
      for (let i2 = cc("a"); i2 <= cc("z"); i2++) {
        wordCharCodes.push(i2);
      }
      for (let i2 = cc("A"); i2 <= cc("Z"); i2++) {
        wordCharCodes.push(i2);
      }
      whitespaceCodes = [
        cc(" "),
        cc("\f"),
        cc("\n"),
        cc("\r"),
        cc("	"),
        cc("\v"),
        cc("	"),
        cc("\xA0"),
        cc("\u1680"),
        cc("\u2000"),
        cc("\u2001"),
        cc("\u2002"),
        cc("\u2003"),
        cc("\u2004"),
        cc("\u2005"),
        cc("\u2006"),
        cc("\u2007"),
        cc("\u2008"),
        cc("\u2009"),
        cc("\u200A"),
        cc("\u2028"),
        cc("\u2029"),
        cc("\u202F"),
        cc("\u205F"),
        cc("\u3000"),
        cc("\uFEFF")
      ];
      hexDigitPattern = /[0-9a-fA-F]/;
      decimalPattern = /[0-9]/;
      decimalPatternNoZero = /[1-9]/;
      RegExpParser = class {
        static {
          __name(this, "RegExpParser");
        }
        static {
          __name2(this, "RegExpParser");
        }
        constructor() {
          this.idx = 0;
          this.input = "";
          this.groupIdx = 0;
        }
        saveState() {
          return {
            idx: this.idx,
            input: this.input,
            groupIdx: this.groupIdx
          };
        }
        restoreState(newState2) {
          this.idx = newState2.idx;
          this.input = newState2.input;
          this.groupIdx = newState2.groupIdx;
        }
        pattern(input) {
          this.idx = 0;
          this.input = input;
          this.groupIdx = 0;
          this.consumeChar("/");
          const value2 = this.disjunction();
          this.consumeChar("/");
          const flags = {
            type: "Flags",
            loc: { begin: this.idx, end: input.length },
            global: false,
            ignoreCase: false,
            multiLine: false,
            unicode: false,
            sticky: false
          };
          while (this.isRegExpFlag()) {
            switch (this.popChar()) {
              case "g":
                addFlag(flags, "global");
                break;
              case "i":
                addFlag(flags, "ignoreCase");
                break;
              case "m":
                addFlag(flags, "multiLine");
                break;
              case "u":
                addFlag(flags, "unicode");
                break;
              case "y":
                addFlag(flags, "sticky");
                break;
            }
          }
          if (this.idx !== this.input.length) {
            throw Error("Redundant input: " + this.input.substring(this.idx));
          }
          return {
            type: "Pattern",
            flags,
            value: value2,
            loc: this.loc(0)
          };
        }
        disjunction() {
          const alts = [];
          const begin = this.idx;
          alts.push(this.alternative());
          while (this.peekChar() === "|") {
            this.consumeChar("|");
            alts.push(this.alternative());
          }
          return { type: "Disjunction", value: alts, loc: this.loc(begin) };
        }
        alternative() {
          const terms = [];
          const begin = this.idx;
          while (this.isTerm()) {
            terms.push(this.term());
          }
          return { type: "Alternative", value: terms, loc: this.loc(begin) };
        }
        term() {
          if (this.isAssertion()) {
            return this.assertion();
          } else {
            return this.atom();
          }
        }
        assertion() {
          const begin = this.idx;
          switch (this.popChar()) {
            case "^":
              return {
                type: "StartAnchor",
                loc: this.loc(begin)
              };
            case "$":
              return { type: "EndAnchor", loc: this.loc(begin) };
            // '\b' or '\B'
            case "\\":
              switch (this.popChar()) {
                case "b":
                  return {
                    type: "WordBoundary",
                    loc: this.loc(begin)
                  };
                case "B":
                  return {
                    type: "NonWordBoundary",
                    loc: this.loc(begin)
                  };
              }
              throw Error("Invalid Assertion Escape");
            // '(?=' or '(?!'
            case "(":
              this.consumeChar("?");
              let type3;
              switch (this.popChar()) {
                case "=":
                  type3 = "Lookahead";
                  break;
                case "!":
                  type3 = "NegativeLookahead";
                  break;
                case "<": {
                  switch (this.popChar()) {
                    case "=":
                      type3 = "Lookbehind";
                      break;
                    case "!":
                      type3 = "NegativeLookbehind";
                  }
                  break;
                }
              }
              ASSERT_EXISTS(type3);
              const disjunction = this.disjunction();
              this.consumeChar(")");
              return {
                type: type3,
                value: disjunction,
                loc: this.loc(begin)
              };
          }
          return ASSERT_NEVER_REACH_HERE();
        }
        quantifier(isBacktracking = false) {
          let range3 = void 0;
          const begin = this.idx;
          switch (this.popChar()) {
            case "*":
              range3 = {
                atLeast: 0,
                atMost: Infinity
              };
              break;
            case "+":
              range3 = {
                atLeast: 1,
                atMost: Infinity
              };
              break;
            case "?":
              range3 = {
                atLeast: 0,
                atMost: 1
              };
              break;
            case "{":
              const atLeast = this.integerIncludingZero();
              switch (this.popChar()) {
                case "}":
                  range3 = {
                    atLeast,
                    atMost: atLeast
                  };
                  break;
                case ",":
                  let atMost;
                  if (this.isDigit()) {
                    atMost = this.integerIncludingZero();
                    range3 = {
                      atLeast,
                      atMost
                    };
                  } else {
                    range3 = {
                      atLeast,
                      atMost: Infinity
                    };
                  }
                  this.consumeChar("}");
                  break;
              }
              if (isBacktracking === true && range3 === void 0) {
                return void 0;
              }
              ASSERT_EXISTS(range3);
              break;
          }
          if (isBacktracking === true && range3 === void 0) {
            return void 0;
          }
          if (ASSERT_EXISTS(range3)) {
            if (this.peekChar(0) === "?") {
              this.consumeChar("?");
              range3.greedy = false;
            } else {
              range3.greedy = true;
            }
            range3.type = "Quantifier";
            range3.loc = this.loc(begin);
            return range3;
          }
        }
        atom() {
          let atom2;
          const begin = this.idx;
          switch (this.peekChar()) {
            case ".":
              atom2 = this.dotAll();
              break;
            case "\\":
              atom2 = this.atomEscape();
              break;
            case "[":
              atom2 = this.characterClass();
              break;
            case "(":
              atom2 = this.group();
              break;
          }
          if (atom2 === void 0 && this.isPatternCharacter()) {
            atom2 = this.patternCharacter();
          }
          if (ASSERT_EXISTS(atom2)) {
            atom2.loc = this.loc(begin);
            if (this.isQuantifier()) {
              atom2.quantifier = this.quantifier();
            }
            return atom2;
          }
          return ASSERT_NEVER_REACH_HERE();
        }
        dotAll() {
          this.consumeChar(".");
          return {
            type: "Set",
            complement: true,
            value: [cc("\n"), cc("\r"), cc("\u2028"), cc("\u2029")]
          };
        }
        atomEscape() {
          this.consumeChar("\\");
          switch (this.peekChar()) {
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
              return this.decimalEscapeAtom();
            case "d":
            case "D":
            case "s":
            case "S":
            case "w":
            case "W":
              return this.characterClassEscape();
            case "f":
            case "n":
            case "r":
            case "t":
            case "v":
              return this.controlEscapeAtom();
            case "c":
              return this.controlLetterEscapeAtom();
            case "0":
              return this.nulCharacterAtom();
            case "x":
              return this.hexEscapeSequenceAtom();
            case "u":
              return this.regExpUnicodeEscapeSequenceAtom();
            default:
              return this.identityEscapeAtom();
          }
        }
        decimalEscapeAtom() {
          const value2 = this.positiveInteger();
          return { type: "GroupBackReference", value: value2 };
        }
        characterClassEscape() {
          let set5;
          let complement = false;
          switch (this.popChar()) {
            case "d":
              set5 = digitsCharCodes;
              break;
            case "D":
              set5 = digitsCharCodes;
              complement = true;
              break;
            case "s":
              set5 = whitespaceCodes;
              break;
            case "S":
              set5 = whitespaceCodes;
              complement = true;
              break;
            case "w":
              set5 = wordCharCodes;
              break;
            case "W":
              set5 = wordCharCodes;
              complement = true;
              break;
          }
          if (ASSERT_EXISTS(set5)) {
            return { type: "Set", value: set5, complement };
          }
          return ASSERT_NEVER_REACH_HERE();
        }
        controlEscapeAtom() {
          let escapeCode;
          switch (this.popChar()) {
            case "f":
              escapeCode = cc("\f");
              break;
            case "n":
              escapeCode = cc("\n");
              break;
            case "r":
              escapeCode = cc("\r");
              break;
            case "t":
              escapeCode = cc("	");
              break;
            case "v":
              escapeCode = cc("\v");
              break;
          }
          if (ASSERT_EXISTS(escapeCode)) {
            return { type: "Character", value: escapeCode };
          }
          return ASSERT_NEVER_REACH_HERE();
        }
        controlLetterEscapeAtom() {
          this.consumeChar("c");
          const letter = this.popChar();
          if (/[a-zA-Z]/.test(letter) === false) {
            throw Error("Invalid ");
          }
          const letterCode = letter.toUpperCase().charCodeAt(0) - 64;
          return { type: "Character", value: letterCode };
        }
        nulCharacterAtom() {
          this.consumeChar("0");
          return { type: "Character", value: cc("\0") };
        }
        hexEscapeSequenceAtom() {
          this.consumeChar("x");
          return this.parseHexDigits(2);
        }
        regExpUnicodeEscapeSequenceAtom() {
          this.consumeChar("u");
          return this.parseHexDigits(4);
        }
        identityEscapeAtom() {
          const escapedChar = this.popChar();
          return { type: "Character", value: cc(escapedChar) };
        }
        classPatternCharacterAtom() {
          switch (this.peekChar()) {
            // istanbul ignore next
            case "\n":
            // istanbul ignore next
            case "\r":
            // istanbul ignore next
            case "\u2028":
            // istanbul ignore next
            case "\u2029":
            // istanbul ignore next
            case "\\":
            // istanbul ignore next
            case "]":
              throw Error("TBD");
            default:
              const nextChar = this.popChar();
              return { type: "Character", value: cc(nextChar) };
          }
        }
        characterClass() {
          const set5 = [];
          let complement = false;
          this.consumeChar("[");
          if (this.peekChar(0) === "^") {
            this.consumeChar("^");
            complement = true;
          }
          while (this.isClassAtom()) {
            const from2 = this.classAtom();
            const isFromSingleChar = from2.type === "Character";
            if (isCharacter(from2) && this.isRangeDash()) {
              this.consumeChar("-");
              const to = this.classAtom();
              const isToSingleChar = to.type === "Character";
              if (isCharacter(to)) {
                if (to.value < from2.value) {
                  throw Error("Range out of order in character class");
                }
                set5.push({ from: from2.value, to: to.value });
              } else {
                insertToSet(from2.value, set5);
                set5.push(cc("-"));
                insertToSet(to.value, set5);
              }
            } else {
              insertToSet(from2.value, set5);
            }
          }
          this.consumeChar("]");
          return { type: "Set", complement, value: set5 };
        }
        classAtom() {
          switch (this.peekChar()) {
            // istanbul ignore next
            case "]":
            // istanbul ignore next
            case "\n":
            // istanbul ignore next
            case "\r":
            // istanbul ignore next
            case "\u2028":
            // istanbul ignore next
            case "\u2029":
              throw Error("TBD");
            case "\\":
              return this.classEscape();
            default:
              return this.classPatternCharacterAtom();
          }
        }
        classEscape() {
          this.consumeChar("\\");
          switch (this.peekChar()) {
            // Matches a backspace.
            // (Not to be confused with \b word boundary outside characterClass)
            case "b":
              this.consumeChar("b");
              return { type: "Character", value: cc("\b") };
            case "d":
            case "D":
            case "s":
            case "S":
            case "w":
            case "W":
              return this.characterClassEscape();
            case "f":
            case "n":
            case "r":
            case "t":
            case "v":
              return this.controlEscapeAtom();
            case "c":
              return this.controlLetterEscapeAtom();
            case "0":
              return this.nulCharacterAtom();
            case "x":
              return this.hexEscapeSequenceAtom();
            case "u":
              return this.regExpUnicodeEscapeSequenceAtom();
            default:
              return this.identityEscapeAtom();
          }
        }
        group() {
          let capturing = true;
          this.consumeChar("(");
          switch (this.peekChar(0)) {
            case "?":
              this.consumeChar("?");
              this.consumeChar(":");
              capturing = false;
              break;
            default:
              this.groupIdx++;
              break;
          }
          const value2 = this.disjunction();
          this.consumeChar(")");
          const groupAst = {
            type: "Group",
            capturing,
            value: value2
          };
          if (capturing) {
            groupAst["idx"] = this.groupIdx;
          }
          return groupAst;
        }
        positiveInteger() {
          let number7 = this.popChar();
          if (decimalPatternNoZero.test(number7) === false) {
            throw Error("Expecting a positive integer");
          }
          while (decimalPattern.test(this.peekChar(0))) {
            number7 += this.popChar();
          }
          return parseInt(number7, 10);
        }
        integerIncludingZero() {
          let number7 = this.popChar();
          if (decimalPattern.test(number7) === false) {
            throw Error("Expecting an integer");
          }
          while (decimalPattern.test(this.peekChar(0))) {
            number7 += this.popChar();
          }
          return parseInt(number7, 10);
        }
        patternCharacter() {
          const nextChar = this.popChar();
          switch (nextChar) {
            // istanbul ignore next
            case "\n":
            // istanbul ignore next
            case "\r":
            // istanbul ignore next
            case "\u2028":
            // istanbul ignore next
            case "\u2029":
            // istanbul ignore next
            case "^":
            // istanbul ignore next
            case "$":
            // istanbul ignore next
            case "\\":
            // istanbul ignore next
            case ".":
            // istanbul ignore next
            case "*":
            // istanbul ignore next
            case "+":
            // istanbul ignore next
            case "?":
            // istanbul ignore next
            case "(":
            // istanbul ignore next
            case ")":
            // istanbul ignore next
            case "[":
            // istanbul ignore next
            case "|":
              throw Error("TBD");
            default:
              return { type: "Character", value: cc(nextChar) };
          }
        }
        isRegExpFlag() {
          switch (this.peekChar(0)) {
            case "g":
            case "i":
            case "m":
            case "u":
            case "y":
              return true;
            default:
              return false;
          }
        }
        isRangeDash() {
          return this.peekChar() === "-" && this.isClassAtom(1);
        }
        isDigit() {
          return decimalPattern.test(this.peekChar(0));
        }
        isClassAtom(howMuch = 0) {
          switch (this.peekChar(howMuch)) {
            case "]":
            case "\n":
            case "\r":
            case "\u2028":
            case "\u2029":
              return false;
            default:
              return true;
          }
        }
        isTerm() {
          return this.isAtom() || this.isAssertion();
        }
        isAtom() {
          if (this.isPatternCharacter()) {
            return true;
          }
          switch (this.peekChar(0)) {
            case ".":
            case "\\":
            // atomEscape
            case "[":
            // characterClass
            // TODO: isAtom must be called before isAssertion - disambiguate
            case "(":
              return true;
            default:
              return false;
          }
        }
        isAssertion() {
          switch (this.peekChar(0)) {
            case "^":
            case "$":
              return true;
            // '\b' or '\B'
            case "\\":
              switch (this.peekChar(1)) {
                case "b":
                case "B":
                  return true;
                default:
                  return false;
              }
            // '(?=' or '(?!' or `(?<=` or `(?<!`
            case "(":
              return this.peekChar(1) === "?" && (this.peekChar(2) === "=" || this.peekChar(2) === "!" || this.peekChar(2) === "<" && (this.peekChar(3) === "=" || this.peekChar(3) === "!"));
            default:
              return false;
          }
        }
        isQuantifier() {
          const prevState = this.saveState();
          try {
            return this.quantifier(true) !== void 0;
          } catch (e3) {
            return false;
          } finally {
            this.restoreState(prevState);
          }
        }
        isPatternCharacter() {
          switch (this.peekChar()) {
            case "^":
            case "$":
            case "\\":
            case ".":
            case "*":
            case "+":
            case "?":
            case "(":
            case ")":
            case "[":
            case "|":
            case "/":
            case "\n":
            case "\r":
            case "\u2028":
            case "\u2029":
              return false;
            default:
              return true;
          }
        }
        parseHexDigits(howMany) {
          let hexString = "";
          for (let i2 = 0; i2 < howMany; i2++) {
            const hexChar = this.popChar();
            if (hexDigitPattern.test(hexChar) === false) {
              throw Error("Expecting a HexDecimal digits");
            }
            hexString += hexChar;
          }
          const charCode = parseInt(hexString, 16);
          return { type: "Character", value: charCode };
        }
        peekChar(howMuch = 0) {
          return this.input[this.idx + howMuch];
        }
        popChar() {
          const nextChar = this.peekChar(0);
          this.consumeChar(void 0);
          return nextChar;
        }
        consumeChar(char2) {
          if (char2 !== void 0 && this.input[this.idx] !== char2) {
            throw Error("Expected: '" + char2 + "' but found: '" + this.input[this.idx] + "' at offset: " + this.idx);
          }
          if (this.idx >= this.input.length) {
            throw Error("Unexpected end of input");
          }
          this.idx++;
        }
        loc(begin) {
          return { begin, end: this.idx };
        }
      };
      BaseRegExpVisitor = class {
        static {
          __name(this, "BaseRegExpVisitor");
        }
        static {
          __name2(this, "BaseRegExpVisitor");
        }
        visitChildren(node2) {
          for (const key in node2) {
            const child = node2[key];
            if (node2.hasOwnProperty(key)) {
              if (child.type !== void 0) {
                this.visit(child);
              } else if (Array.isArray(child)) {
                child.forEach((subChild) => {
                  this.visit(subChild);
                }, this);
              }
            }
          }
        }
        visit(node2) {
          switch (node2.type) {
            case "Pattern":
              this.visitPattern(node2);
              break;
            case "Flags":
              this.visitFlags(node2);
              break;
            case "Disjunction":
              this.visitDisjunction(node2);
              break;
            case "Alternative":
              this.visitAlternative(node2);
              break;
            case "StartAnchor":
              this.visitStartAnchor(node2);
              break;
            case "EndAnchor":
              this.visitEndAnchor(node2);
              break;
            case "WordBoundary":
              this.visitWordBoundary(node2);
              break;
            case "NonWordBoundary":
              this.visitNonWordBoundary(node2);
              break;
            case "Lookahead":
              this.visitLookahead(node2);
              break;
            case "NegativeLookahead":
              this.visitNegativeLookahead(node2);
              break;
            case "Lookbehind":
              this.visitLookbehind(node2);
              break;
            case "NegativeLookbehind":
              this.visitNegativeLookbehind(node2);
              break;
            case "Character":
              this.visitCharacter(node2);
              break;
            case "Set":
              this.visitSet(node2);
              break;
            case "Group":
              this.visitGroup(node2);
              break;
            case "GroupBackReference":
              this.visitGroupBackReference(node2);
              break;
            case "Quantifier":
              this.visitQuantifier(node2);
              break;
          }
          this.visitChildren(node2);
        }
        visitPattern(node2) {
        }
        visitFlags(node2) {
        }
        visitDisjunction(node2) {
        }
        visitAlternative(node2) {
        }
        // Assertion
        visitStartAnchor(node2) {
        }
        visitEndAnchor(node2) {
        }
        visitWordBoundary(node2) {
        }
        visitNonWordBoundary(node2) {
        }
        visitLookahead(node2) {
        }
        visitNegativeLookahead(node2) {
        }
        visitLookbehind(node2) {
        }
        visitNegativeLookbehind(node2) {
        }
        // atoms
        visitCharacter(node2) {
        }
        visitSet(node2) {
        }
        visitGroup(node2) {
        }
        visitGroupBackReference(node2) {
        }
        visitQuantifier(node2) {
        }
      };
      NEWLINE_REGEXP = /\r?\n/gm;
      regexpParser = new RegExpParser();
      TerminalRegExpVisitor = class extends BaseRegExpVisitor {
        static {
          __name(this, "TerminalRegExpVisitor");
        }
        static {
          __name2(this, "TerminalRegExpVisitor");
        }
        constructor() {
          super(...arguments);
          this.isStarting = true;
          this.endRegexpStack = [];
          this.multiline = false;
        }
        get endRegex() {
          return this.endRegexpStack.join("");
        }
        reset(regex2) {
          this.multiline = false;
          this.regex = regex2;
          this.startRegexp = "";
          this.isStarting = true;
          this.endRegexpStack = [];
        }
        visitGroup(node2) {
          if (node2.quantifier) {
            this.isStarting = false;
            this.endRegexpStack = [];
          }
        }
        visitCharacter(node2) {
          const char2 = String.fromCharCode(node2.value);
          if (!this.multiline && char2 === "\n") {
            this.multiline = true;
          }
          if (node2.quantifier) {
            this.isStarting = false;
            this.endRegexpStack = [];
          } else {
            const escapedChar = escapeRegExp(char2);
            this.endRegexpStack.push(escapedChar);
            if (this.isStarting) {
              this.startRegexp += escapedChar;
            }
          }
        }
        visitSet(node2) {
          if (!this.multiline) {
            const set5 = this.regex.substring(node2.loc.begin, node2.loc.end);
            const regex2 = new RegExp(set5);
            this.multiline = Boolean("\n".match(regex2));
          }
          if (node2.quantifier) {
            this.isStarting = false;
            this.endRegexpStack = [];
          } else {
            const set5 = this.regex.substring(node2.loc.begin, node2.loc.end);
            this.endRegexpStack.push(set5);
            if (this.isStarting) {
              this.startRegexp += set5;
            }
          }
        }
        visitChildren(node2) {
          if (node2.type === "Group") {
            const group2 = node2;
            if (group2.quantifier) {
              return;
            }
          }
          super.visitChildren(node2);
        }
      };
      visitor = new TerminalRegExpVisitor();
      __name(getTerminalParts, "getTerminalParts");
      __name2(getTerminalParts, "getTerminalParts");
      __name(isMultilineComment, "isMultilineComment");
      __name2(isMultilineComment, "isMultilineComment");
      whitespaceCharacters = "\f\n\r	\v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF".split("");
      __name(isWhitespace2, "isWhitespace");
      __name2(isWhitespace2, "isWhitespace");
      __name(escapeRegExp, "escapeRegExp");
      __name2(escapeRegExp, "escapeRegExp");
      __name(partialMatches, "partialMatches");
      __name2(partialMatches, "partialMatches");
      __name(partialRegExp, "partialRegExp");
      __name2(partialRegExp, "partialRegExp");
      __name(getEntryRule, "getEntryRule");
      __name2(getEntryRule, "getEntryRule");
      __name(getHiddenRules, "getHiddenRules");
      __name2(getHiddenRules, "getHiddenRules");
      __name(getAllReachableRules, "getAllReachableRules");
      __name2(getAllReachableRules, "getAllReachableRules");
      __name(ruleDfs, "ruleDfs");
      __name2(ruleDfs, "ruleDfs");
      __name(getAllRulesUsedForCrossReferences, "getAllRulesUsedForCrossReferences");
      __name2(getAllRulesUsedForCrossReferences, "getAllRulesUsedForCrossReferences");
      __name(getCrossReferenceTerminal, "getCrossReferenceTerminal");
      __name2(getCrossReferenceTerminal, "getCrossReferenceTerminal");
      __name(isCommentTerminal, "isCommentTerminal");
      __name2(isCommentTerminal, "isCommentTerminal");
      __name(findNodesForProperty, "findNodesForProperty");
      __name2(findNodesForProperty, "findNodesForProperty");
      __name(findNodeForProperty, "findNodeForProperty");
      __name2(findNodeForProperty, "findNodeForProperty");
      __name(findNodesForPropertyInternal, "findNodesForPropertyInternal");
      __name2(findNodesForPropertyInternal, "findNodesForPropertyInternal");
      __name(findNodesForKeyword, "findNodesForKeyword");
      __name2(findNodesForKeyword, "findNodesForKeyword");
      __name(findNodeForKeyword, "findNodeForKeyword");
      __name2(findNodeForKeyword, "findNodeForKeyword");
      __name(findNodesForKeywordInternal, "findNodesForKeywordInternal");
      __name2(findNodesForKeywordInternal, "findNodesForKeywordInternal");
      __name(findAssignment, "findAssignment");
      __name2(findAssignment, "findAssignment");
      __name(findNameAssignment, "findNameAssignment");
      __name2(findNameAssignment, "findNameAssignment");
      __name(findNameAssignmentInternal, "findNameAssignmentInternal");
      __name2(findNameAssignmentInternal, "findNameAssignmentInternal");
      __name(getActionAtElement, "getActionAtElement");
      __name2(getActionAtElement, "getActionAtElement");
      __name(isOptionalCardinality, "isOptionalCardinality");
      __name2(isOptionalCardinality, "isOptionalCardinality");
      __name(isArrayCardinality, "isArrayCardinality");
      __name2(isArrayCardinality, "isArrayCardinality");
      __name(isArrayOperator, "isArrayOperator");
      __name2(isArrayOperator, "isArrayOperator");
      __name(isDataTypeRule, "isDataTypeRule");
      __name2(isDataTypeRule, "isDataTypeRule");
      __name(isDataTypeRuleInternal, "isDataTypeRuleInternal");
      __name2(isDataTypeRuleInternal, "isDataTypeRuleInternal");
      __name(isDataType, "isDataType");
      __name2(isDataType, "isDataType");
      __name(isDataTypeInternal, "isDataTypeInternal");
      __name2(isDataTypeInternal, "isDataTypeInternal");
      __name(getExplicitRuleType, "getExplicitRuleType");
      __name2(getExplicitRuleType, "getExplicitRuleType");
      __name(getTypeName, "getTypeName");
      __name2(getTypeName, "getTypeName");
      __name(getActionType, "getActionType");
      __name2(getActionType, "getActionType");
      __name(getRuleTypeName, "getRuleTypeName");
      __name2(getRuleTypeName, "getRuleTypeName");
      __name(getRuleType, "getRuleType");
      __name2(getRuleType, "getRuleType");
      __name(terminalRegex, "terminalRegex");
      __name2(terminalRegex, "terminalRegex");
      WILDCARD = /[\s\S]/.source;
      __name(abstractElementToRegex, "abstractElementToRegex");
      __name2(abstractElementToRegex, "abstractElementToRegex");
      __name(terminalAlternativesToRegex, "terminalAlternativesToRegex");
      __name2(terminalAlternativesToRegex, "terminalAlternativesToRegex");
      __name(terminalGroupToRegex, "terminalGroupToRegex");
      __name2(terminalGroupToRegex, "terminalGroupToRegex");
      __name(untilTokenToRegex, "untilTokenToRegex");
      __name2(untilTokenToRegex, "untilTokenToRegex");
      __name(negateTokenToRegex, "negateTokenToRegex");
      __name2(negateTokenToRegex, "negateTokenToRegex");
      __name(characterRangeToRegex, "characterRangeToRegex");
      __name2(characterRangeToRegex, "characterRangeToRegex");
      __name(keywordToRegex, "keywordToRegex");
      __name2(keywordToRegex, "keywordToRegex");
      __name(withCardinality, "withCardinality");
      __name2(withCardinality, "withCardinality");
      __name(createGrammarConfig, "createGrammarConfig");
      __name2(createGrammarConfig, "createGrammarConfig");
      freeGlobal2 = typeof global == "object" && global && global.Object === Object && global;
      freeGlobal_default2 = freeGlobal2;
      freeSelf2 = typeof self == "object" && self && self.Object === Object && self;
      root3 = freeGlobal_default2 || freeSelf2 || Function("return this")();
      root_default2 = root3;
      Symbol22 = root_default2.Symbol;
      Symbol_default2 = Symbol22;
      objectProto20 = Object.prototype;
      hasOwnProperty17 = objectProto20.hasOwnProperty;
      nativeObjectToString3 = objectProto20.toString;
      symToStringTag3 = Symbol_default2 ? Symbol_default2.toStringTag : void 0;
      __name(getRawTag2, "getRawTag");
      __name2(getRawTag2, "getRawTag");
      getRawTag_default2 = getRawTag2;
      objectProto22 = Object.prototype;
      nativeObjectToString22 = objectProto22.toString;
      __name(objectToString2, "objectToString");
      __name2(objectToString2, "objectToString");
      objectToString_default2 = objectToString2;
      nullTag2 = "[object Null]";
      undefinedTag2 = "[object Undefined]";
      symToStringTag22 = Symbol_default2 ? Symbol_default2.toStringTag : void 0;
      __name(baseGetTag2, "baseGetTag");
      __name2(baseGetTag2, "baseGetTag");
      baseGetTag_default2 = baseGetTag2;
      __name(isObjectLike3, "isObjectLike");
      __name2(isObjectLike3, "isObjectLike");
      isObjectLike_default2 = isObjectLike3;
      symbolTag6 = "[object Symbol]";
      __name(isSymbol2, "isSymbol");
      __name2(isSymbol2, "isSymbol");
      isSymbol_default2 = isSymbol2;
      __name(arrayMap2, "arrayMap");
      __name2(arrayMap2, "arrayMap");
      arrayMap_default2 = arrayMap2;
      isArray3 = Array.isArray;
      isArray_default2 = isArray3;
      INFINITY5 = 1 / 0;
      symbolProto4 = Symbol_default2 ? Symbol_default2.prototype : void 0;
      symbolToString2 = symbolProto4 ? symbolProto4.toString : void 0;
      __name(baseToString2, "baseToString");
      __name2(baseToString2, "baseToString");
      baseToString_default2 = baseToString2;
      reWhitespace2 = /\s/;
      __name(trimmedEndIndex2, "trimmedEndIndex");
      __name2(trimmedEndIndex2, "trimmedEndIndex");
      trimmedEndIndex_default2 = trimmedEndIndex2;
      reTrimStart2 = /^\s+/;
      __name(baseTrim2, "baseTrim");
      __name2(baseTrim2, "baseTrim");
      baseTrim_default2 = baseTrim2;
      __name(isObject3, "isObject");
      __name2(isObject3, "isObject");
      isObject_default2 = isObject3;
      NAN2 = 0 / 0;
      reIsBadHex2 = /^[-+]0x[0-9a-f]+$/i;
      reIsBinary2 = /^0b[01]+$/i;
      reIsOctal2 = /^0o[0-7]+$/i;
      freeParseInt2 = parseInt;
      __name(toNumber2, "toNumber");
      __name2(toNumber2, "toNumber");
      toNumber_default2 = toNumber2;
      INFINITY22 = 1 / 0;
      MAX_INTEGER2 = 17976931348623157e292;
      __name(toFinite2, "toFinite");
      __name2(toFinite2, "toFinite");
      toFinite_default2 = toFinite2;
      __name(toInteger2, "toInteger");
      __name2(toInteger2, "toInteger");
      toInteger_default2 = toInteger2;
      __name(identity7, "identity");
      __name2(identity7, "identity");
      identity_default5 = identity7;
      asyncTag2 = "[object AsyncFunction]";
      funcTag4 = "[object Function]";
      genTag3 = "[object GeneratorFunction]";
      proxyTag2 = "[object Proxy]";
      __name(isFunction2, "isFunction");
      __name2(isFunction2, "isFunction");
      isFunction_default2 = isFunction2;
      coreJsData2 = root_default2["__core-js_shared__"];
      coreJsData_default2 = coreJsData2;
      maskSrcKey2 = (function() {
        var uid = /[^.]+$/.exec(coreJsData_default2 && coreJsData_default2.keys && coreJsData_default2.keys.IE_PROTO || "");
        return uid ? "Symbol(src)_1." + uid : "";
      })();
      __name(isMasked2, "isMasked");
      __name2(isMasked2, "isMasked");
      isMasked_default2 = isMasked2;
      funcProto4 = Function.prototype;
      funcToString4 = funcProto4.toString;
      __name(toSource2, "toSource");
      __name2(toSource2, "toSource");
      toSource_default2 = toSource2;
      reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g;
      reIsHostCtor2 = /^\[object .+?Constructor\]$/;
      funcProto22 = Function.prototype;
      objectProto32 = Object.prototype;
      funcToString22 = funcProto22.toString;
      hasOwnProperty22 = objectProto32.hasOwnProperty;
      reIsNative2 = RegExp(
        "^" + funcToString22.call(hasOwnProperty22).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
      );
      __name(baseIsNative2, "baseIsNative");
      __name2(baseIsNative2, "baseIsNative");
      baseIsNative_default2 = baseIsNative2;
      __name(getValue3, "getValue");
      __name2(getValue3, "getValue");
      getValue_default2 = getValue3;
      __name(getNative2, "getNative");
      __name2(getNative2, "getNative");
      getNative_default2 = getNative2;
      WeakMap2 = getNative_default2(root_default2, "WeakMap");
      WeakMap_default2 = WeakMap2;
      objectCreate2 = Object.create;
      baseCreate2 = /* @__PURE__ */ (function() {
        function object3() {
        }
        __name(object3, "object");
        __name2(object3, "object");
        return function(proto) {
          if (!isObject_default2(proto)) {
            return {};
          }
          if (objectCreate2) {
            return objectCreate2(proto);
          }
          object3.prototype = proto;
          var result = new object3();
          object3.prototype = void 0;
          return result;
        };
      })();
      baseCreate_default2 = baseCreate2;
      __name(apply4, "apply");
      __name2(apply4, "apply");
      apply_default2 = apply4;
      __name(noop7, "noop");
      __name2(noop7, "noop");
      noop_default3 = noop7;
      __name(copyArray4, "copyArray");
      __name2(copyArray4, "copyArray");
      copyArray_default2 = copyArray4;
      HOT_COUNT2 = 800;
      HOT_SPAN2 = 16;
      nativeNow2 = Date.now;
      __name(shortOut2, "shortOut");
      __name2(shortOut2, "shortOut");
      shortOut_default2 = shortOut2;
      __name(constant2, "constant");
      __name2(constant2, "constant");
      constant_default8 = constant2;
      defineProperty2 = (function() {
        try {
          var func = getNative_default2(Object, "defineProperty");
          func({}, "", {});
          return func;
        } catch (e3) {
        }
      })();
      defineProperty_default2 = defineProperty2;
      baseSetToString2 = !defineProperty_default2 ? identity_default5 : function(func, string3) {
        return defineProperty_default2(func, "toString", {
          "configurable": true,
          "enumerable": false,
          "value": constant_default8(string3),
          "writable": true
        });
      };
      baseSetToString_default2 = baseSetToString2;
      setToString2 = shortOut_default2(baseSetToString_default2);
      setToString_default2 = setToString2;
      __name(arrayEach2, "arrayEach");
      __name2(arrayEach2, "arrayEach");
      arrayEach_default2 = arrayEach2;
      __name(baseFindIndex2, "baseFindIndex");
      __name2(baseFindIndex2, "baseFindIndex");
      baseFindIndex_default2 = baseFindIndex2;
      __name(baseIsNaN2, "baseIsNaN");
      __name2(baseIsNaN2, "baseIsNaN");
      baseIsNaN_default2 = baseIsNaN2;
      __name(strictIndexOf2, "strictIndexOf");
      __name2(strictIndexOf2, "strictIndexOf");
      strictIndexOf_default2 = strictIndexOf2;
      __name(baseIndexOf2, "baseIndexOf");
      __name2(baseIndexOf2, "baseIndexOf");
      baseIndexOf_default2 = baseIndexOf2;
      __name(arrayIncludes2, "arrayIncludes");
      __name2(arrayIncludes2, "arrayIncludes");
      arrayIncludes_default2 = arrayIncludes2;
      MAX_SAFE_INTEGER3 = 9007199254740991;
      reIsUint2 = /^(?:0|[1-9]\d*)$/;
      __name(isIndex2, "isIndex");
      __name2(isIndex2, "isIndex");
      isIndex_default2 = isIndex2;
      __name(baseAssignValue2, "baseAssignValue");
      __name2(baseAssignValue2, "baseAssignValue");
      baseAssignValue_default2 = baseAssignValue2;
      __name(eq3, "eq");
      __name2(eq3, "eq");
      eq_default2 = eq3;
      objectProto42 = Object.prototype;
      hasOwnProperty32 = objectProto42.hasOwnProperty;
      __name(assignValue2, "assignValue");
      __name2(assignValue2, "assignValue");
      assignValue_default2 = assignValue2;
      __name(copyObject2, "copyObject");
      __name2(copyObject2, "copyObject");
      copyObject_default2 = copyObject2;
      nativeMax4 = Math.max;
      __name(overRest2, "overRest");
      __name2(overRest2, "overRest");
      overRest_default2 = overRest2;
      __name(baseRest2, "baseRest");
      __name2(baseRest2, "baseRest");
      baseRest_default2 = baseRest2;
      MAX_SAFE_INTEGER22 = 9007199254740991;
      __name(isLength3, "isLength");
      __name2(isLength3, "isLength");
      isLength_default2 = isLength3;
      __name(isArrayLike3, "isArrayLike");
      __name2(isArrayLike3, "isArrayLike");
      isArrayLike_default2 = isArrayLike3;
      __name(isIterateeCall2, "isIterateeCall");
      __name2(isIterateeCall2, "isIterateeCall");
      isIterateeCall_default2 = isIterateeCall2;
      __name(createAssigner2, "createAssigner");
      __name2(createAssigner2, "createAssigner");
      createAssigner_default2 = createAssigner2;
      objectProto52 = Object.prototype;
      __name(isPrototype3, "isPrototype");
      __name2(isPrototype3, "isPrototype");
      isPrototype_default2 = isPrototype3;
      __name(baseTimes2, "baseTimes");
      __name2(baseTimes2, "baseTimes");
      baseTimes_default2 = baseTimes2;
      argsTag5 = "[object Arguments]";
      __name(baseIsArguments2, "baseIsArguments");
      __name2(baseIsArguments2, "baseIsArguments");
      baseIsArguments_default2 = baseIsArguments2;
      objectProto62 = Object.prototype;
      hasOwnProperty42 = objectProto62.hasOwnProperty;
      propertyIsEnumerable3 = objectProto62.propertyIsEnumerable;
      isArguments3 = baseIsArguments_default2(/* @__PURE__ */ (function() {
        return arguments;
      })()) ? baseIsArguments_default2 : function(value2) {
        return isObjectLike_default2(value2) && hasOwnProperty42.call(value2, "callee") && !propertyIsEnumerable3.call(value2, "callee");
      };
      isArguments_default2 = isArguments3;
      __name(stubFalse2, "stubFalse");
      __name2(stubFalse2, "stubFalse");
      stubFalse_default2 = stubFalse2;
      freeExports4 = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule4 = freeExports4 && typeof module == "object" && module && !module.nodeType && module;
      moduleExports4 = freeModule4 && freeModule4.exports === freeExports4;
      Buffer22 = moduleExports4 ? root_default2.Buffer : void 0;
      nativeIsBuffer2 = Buffer22 ? Buffer22.isBuffer : void 0;
      isBuffer2 = nativeIsBuffer2 || stubFalse_default2;
      isBuffer_default2 = isBuffer2;
      argsTag22 = "[object Arguments]";
      arrayTag5 = "[object Array]";
      boolTag5 = "[object Boolean]";
      dateTag6 = "[object Date]";
      errorTag4 = "[object Error]";
      funcTag22 = "[object Function]";
      mapTag10 = "[object Map]";
      numberTag6 = "[object Number]";
      objectTag7 = "[object Object]";
      regexpTag6 = "[object RegExp]";
      setTag10 = "[object Set]";
      stringTag7 = "[object String]";
      weakMapTag4 = "[object WeakMap]";
      arrayBufferTag6 = "[object ArrayBuffer]";
      dataViewTag7 = "[object DataView]";
      float32Tag4 = "[object Float32Array]";
      float64Tag4 = "[object Float64Array]";
      int8Tag4 = "[object Int8Array]";
      int16Tag4 = "[object Int16Array]";
      int32Tag4 = "[object Int32Array]";
      uint8Tag4 = "[object Uint8Array]";
      uint8ClampedTag4 = "[object Uint8ClampedArray]";
      uint16Tag4 = "[object Uint16Array]";
      uint32Tag4 = "[object Uint32Array]";
      typedArrayTags2 = {};
      typedArrayTags2[float32Tag4] = typedArrayTags2[float64Tag4] = typedArrayTags2[int8Tag4] = typedArrayTags2[int16Tag4] = typedArrayTags2[int32Tag4] = typedArrayTags2[uint8Tag4] = typedArrayTags2[uint8ClampedTag4] = typedArrayTags2[uint16Tag4] = typedArrayTags2[uint32Tag4] = true;
      typedArrayTags2[argsTag22] = typedArrayTags2[arrayTag5] = typedArrayTags2[arrayBufferTag6] = typedArrayTags2[boolTag5] = typedArrayTags2[dataViewTag7] = typedArrayTags2[dateTag6] = typedArrayTags2[errorTag4] = typedArrayTags2[funcTag22] = typedArrayTags2[mapTag10] = typedArrayTags2[numberTag6] = typedArrayTags2[objectTag7] = typedArrayTags2[regexpTag6] = typedArrayTags2[setTag10] = typedArrayTags2[stringTag7] = typedArrayTags2[weakMapTag4] = false;
      __name(baseIsTypedArray2, "baseIsTypedArray");
      __name2(baseIsTypedArray2, "baseIsTypedArray");
      baseIsTypedArray_default2 = baseIsTypedArray2;
      __name(baseUnary2, "baseUnary");
      __name2(baseUnary2, "baseUnary");
      baseUnary_default2 = baseUnary2;
      freeExports22 = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule22 = freeExports22 && typeof module == "object" && module && !module.nodeType && module;
      moduleExports22 = freeModule22 && freeModule22.exports === freeExports22;
      freeProcess2 = moduleExports22 && freeGlobal_default2.process;
      nodeUtil2 = (function() {
        try {
          var types = freeModule22 && freeModule22.require && freeModule22.require("util").types;
          if (types) {
            return types;
          }
          return freeProcess2 && freeProcess2.binding && freeProcess2.binding("util");
        } catch (e3) {
        }
      })();
      nodeUtil_default2 = nodeUtil2;
      nodeIsTypedArray2 = nodeUtil_default2 && nodeUtil_default2.isTypedArray;
      isTypedArray4 = nodeIsTypedArray2 ? baseUnary_default2(nodeIsTypedArray2) : baseIsTypedArray_default2;
      isTypedArray_default2 = isTypedArray4;
      objectProto72 = Object.prototype;
      hasOwnProperty52 = objectProto72.hasOwnProperty;
      __name(arrayLikeKeys2, "arrayLikeKeys");
      __name2(arrayLikeKeys2, "arrayLikeKeys");
      arrayLikeKeys_default2 = arrayLikeKeys2;
      __name(overArg2, "overArg");
      __name2(overArg2, "overArg");
      overArg_default2 = overArg2;
      nativeKeys2 = overArg_default2(Object.keys, Object);
      nativeKeys_default2 = nativeKeys2;
      objectProto82 = Object.prototype;
      hasOwnProperty62 = objectProto82.hasOwnProperty;
      __name(baseKeys2, "baseKeys");
      __name2(baseKeys2, "baseKeys");
      baseKeys_default2 = baseKeys2;
      __name(keys2, "keys");
      __name2(keys2, "keys");
      keys_default2 = keys2;
      objectProto92 = Object.prototype;
      hasOwnProperty72 = objectProto92.hasOwnProperty;
      assign5 = createAssigner_default2(function(object3, source) {
        if (isPrototype_default2(source) || isArrayLike_default2(source)) {
          copyObject_default2(source, keys_default2(source), object3);
          return;
        }
        for (var key in source) {
          if (hasOwnProperty72.call(source, key)) {
            assignValue_default2(object3, key, source[key]);
          }
        }
      });
      assign_default = assign5;
      __name(nativeKeysIn2, "nativeKeysIn");
      __name2(nativeKeysIn2, "nativeKeysIn");
      nativeKeysIn_default2 = nativeKeysIn2;
      objectProto102 = Object.prototype;
      hasOwnProperty82 = objectProto102.hasOwnProperty;
      __name(baseKeysIn2, "baseKeysIn");
      __name2(baseKeysIn2, "baseKeysIn");
      baseKeysIn_default2 = baseKeysIn2;
      __name(keysIn2, "keysIn");
      __name2(keysIn2, "keysIn");
      keysIn_default2 = keysIn2;
      reIsDeepProp2 = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
      reIsPlainProp2 = /^\w*$/;
      __name(isKey2, "isKey");
      __name2(isKey2, "isKey");
      isKey_default2 = isKey2;
      nativeCreate2 = getNative_default2(Object, "create");
      nativeCreate_default2 = nativeCreate2;
      __name(hashClear2, "hashClear");
      __name2(hashClear2, "hashClear");
      hashClear_default2 = hashClear2;
      __name(hashDelete2, "hashDelete");
      __name2(hashDelete2, "hashDelete");
      hashDelete_default2 = hashDelete2;
      HASH_UNDEFINED4 = "__lodash_hash_undefined__";
      objectProto112 = Object.prototype;
      hasOwnProperty92 = objectProto112.hasOwnProperty;
      __name(hashGet2, "hashGet");
      __name2(hashGet2, "hashGet");
      hashGet_default2 = hashGet2;
      objectProto122 = Object.prototype;
      hasOwnProperty102 = objectProto122.hasOwnProperty;
      __name(hashHas2, "hashHas");
      __name2(hashHas2, "hashHas");
      hashHas_default2 = hashHas2;
      HASH_UNDEFINED22 = "__lodash_hash_undefined__";
      __name(hashSet2, "hashSet");
      __name2(hashSet2, "hashSet");
      hashSet_default2 = hashSet2;
      __name(Hash2, "Hash");
      __name2(Hash2, "Hash");
      Hash2.prototype.clear = hashClear_default2;
      Hash2.prototype["delete"] = hashDelete_default2;
      Hash2.prototype.get = hashGet_default2;
      Hash2.prototype.has = hashHas_default2;
      Hash2.prototype.set = hashSet_default2;
      Hash_default2 = Hash2;
      __name(listCacheClear2, "listCacheClear");
      __name2(listCacheClear2, "listCacheClear");
      listCacheClear_default2 = listCacheClear2;
      __name(assocIndexOf2, "assocIndexOf");
      __name2(assocIndexOf2, "assocIndexOf");
      assocIndexOf_default2 = assocIndexOf2;
      arrayProto2 = Array.prototype;
      splice2 = arrayProto2.splice;
      __name(listCacheDelete2, "listCacheDelete");
      __name2(listCacheDelete2, "listCacheDelete");
      listCacheDelete_default2 = listCacheDelete2;
      __name(listCacheGet2, "listCacheGet");
      __name2(listCacheGet2, "listCacheGet");
      listCacheGet_default2 = listCacheGet2;
      __name(listCacheHas2, "listCacheHas");
      __name2(listCacheHas2, "listCacheHas");
      listCacheHas_default2 = listCacheHas2;
      __name(listCacheSet2, "listCacheSet");
      __name2(listCacheSet2, "listCacheSet");
      listCacheSet_default2 = listCacheSet2;
      __name(ListCache2, "ListCache");
      __name2(ListCache2, "ListCache");
      ListCache2.prototype.clear = listCacheClear_default2;
      ListCache2.prototype["delete"] = listCacheDelete_default2;
      ListCache2.prototype.get = listCacheGet_default2;
      ListCache2.prototype.has = listCacheHas_default2;
      ListCache2.prototype.set = listCacheSet_default2;
      ListCache_default2 = ListCache2;
      Map22 = getNative_default2(root_default2, "Map");
      Map_default2 = Map22;
      __name(mapCacheClear2, "mapCacheClear");
      __name2(mapCacheClear2, "mapCacheClear");
      mapCacheClear_default2 = mapCacheClear2;
      __name(isKeyable2, "isKeyable");
      __name2(isKeyable2, "isKeyable");
      isKeyable_default2 = isKeyable2;
      __name(getMapData2, "getMapData");
      __name2(getMapData2, "getMapData");
      getMapData_default2 = getMapData2;
      __name(mapCacheDelete2, "mapCacheDelete");
      __name2(mapCacheDelete2, "mapCacheDelete");
      mapCacheDelete_default2 = mapCacheDelete2;
      __name(mapCacheGet2, "mapCacheGet");
      __name2(mapCacheGet2, "mapCacheGet");
      mapCacheGet_default2 = mapCacheGet2;
      __name(mapCacheHas2, "mapCacheHas");
      __name2(mapCacheHas2, "mapCacheHas");
      mapCacheHas_default2 = mapCacheHas2;
      __name(mapCacheSet2, "mapCacheSet");
      __name2(mapCacheSet2, "mapCacheSet");
      mapCacheSet_default2 = mapCacheSet2;
      __name(MapCache2, "MapCache");
      __name2(MapCache2, "MapCache");
      MapCache2.prototype.clear = mapCacheClear_default2;
      MapCache2.prototype["delete"] = mapCacheDelete_default2;
      MapCache2.prototype.get = mapCacheGet_default2;
      MapCache2.prototype.has = mapCacheHas_default2;
      MapCache2.prototype.set = mapCacheSet_default2;
      MapCache_default2 = MapCache2;
      FUNC_ERROR_TEXT2 = "Expected a function";
      __name(memoize5, "memoize");
      __name2(memoize5, "memoize");
      memoize5.Cache = MapCache_default2;
      memoize_default2 = memoize5;
      MAX_MEMOIZE_SIZE2 = 500;
      __name(memoizeCapped2, "memoizeCapped");
      __name2(memoizeCapped2, "memoizeCapped");
      memoizeCapped_default2 = memoizeCapped2;
      rePropName2 = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
      reEscapeChar2 = /\\(\\)?/g;
      stringToPath2 = memoizeCapped_default2(function(string3) {
        var result = [];
        if (string3.charCodeAt(0) === 46) {
          result.push("");
        }
        string3.replace(rePropName2, function(match3, number7, quote, subString) {
          result.push(quote ? subString.replace(reEscapeChar2, "$1") : number7 || match3);
        });
        return result;
      });
      stringToPath_default2 = stringToPath2;
      __name(toString22, "toString2");
      __name2(toString22, "toString");
      toString_default2 = toString22;
      __name(castPath2, "castPath");
      __name2(castPath2, "castPath");
      castPath_default2 = castPath2;
      INFINITY32 = 1 / 0;
      __name(toKey2, "toKey");
      __name2(toKey2, "toKey");
      toKey_default2 = toKey2;
      __name(baseGet2, "baseGet");
      __name2(baseGet2, "baseGet");
      baseGet_default2 = baseGet2;
      __name(get5, "get");
      __name2(get5, "get");
      get_default2 = get5;
      __name(arrayPush3, "arrayPush");
      __name2(arrayPush3, "arrayPush");
      arrayPush_default2 = arrayPush3;
      spreadableSymbol2 = Symbol_default2 ? Symbol_default2.isConcatSpreadable : void 0;
      __name(isFlattenable2, "isFlattenable");
      __name2(isFlattenable2, "isFlattenable");
      isFlattenable_default2 = isFlattenable2;
      __name(baseFlatten2, "baseFlatten");
      __name2(baseFlatten2, "baseFlatten");
      baseFlatten_default2 = baseFlatten2;
      __name(flatten2, "flatten");
      __name2(flatten2, "flatten");
      flatten_default2 = flatten2;
      getPrototype2 = overArg_default2(Object.getPrototypeOf, Object);
      getPrototype_default2 = getPrototype2;
      __name(baseSlice, "baseSlice");
      __name2(baseSlice, "baseSlice");
      baseSlice_default = baseSlice;
      __name(arrayReduce2, "arrayReduce");
      __name2(arrayReduce2, "arrayReduce");
      arrayReduce_default2 = arrayReduce2;
      __name(stackClear2, "stackClear");
      __name2(stackClear2, "stackClear");
      stackClear_default2 = stackClear2;
      __name(stackDelete2, "stackDelete");
      __name2(stackDelete2, "stackDelete");
      stackDelete_default2 = stackDelete2;
      __name(stackGet2, "stackGet");
      __name2(stackGet2, "stackGet");
      stackGet_default2 = stackGet2;
      __name(stackHas2, "stackHas");
      __name2(stackHas2, "stackHas");
      stackHas_default2 = stackHas2;
      LARGE_ARRAY_SIZE3 = 200;
      __name(stackSet2, "stackSet");
      __name2(stackSet2, "stackSet");
      stackSet_default2 = stackSet2;
      __name(Stack2, "Stack");
      __name2(Stack2, "Stack");
      Stack2.prototype.clear = stackClear_default2;
      Stack2.prototype["delete"] = stackDelete_default2;
      Stack2.prototype.get = stackGet_default2;
      Stack2.prototype.has = stackHas_default2;
      Stack2.prototype.set = stackSet_default2;
      Stack_default2 = Stack2;
      __name(baseAssign2, "baseAssign");
      __name2(baseAssign2, "baseAssign");
      baseAssign_default2 = baseAssign2;
      __name(baseAssignIn2, "baseAssignIn");
      __name2(baseAssignIn2, "baseAssignIn");
      baseAssignIn_default2 = baseAssignIn2;
      freeExports32 = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule32 = freeExports32 && typeof module == "object" && module && !module.nodeType && module;
      moduleExports32 = freeModule32 && freeModule32.exports === freeExports32;
      Buffer32 = moduleExports32 ? root_default2.Buffer : void 0;
      allocUnsafe2 = Buffer32 ? Buffer32.allocUnsafe : void 0;
      __name(cloneBuffer2, "cloneBuffer");
      __name2(cloneBuffer2, "cloneBuffer");
      cloneBuffer_default2 = cloneBuffer2;
      __name(arrayFilter2, "arrayFilter");
      __name2(arrayFilter2, "arrayFilter");
      arrayFilter_default2 = arrayFilter2;
      __name(stubArray2, "stubArray");
      __name2(stubArray2, "stubArray");
      stubArray_default2 = stubArray2;
      objectProto132 = Object.prototype;
      propertyIsEnumerable22 = objectProto132.propertyIsEnumerable;
      nativeGetSymbols3 = Object.getOwnPropertySymbols;
      getSymbols3 = !nativeGetSymbols3 ? stubArray_default2 : function(object3) {
        if (object3 == null) {
          return [];
        }
        object3 = Object(object3);
        return arrayFilter_default2(nativeGetSymbols3(object3), function(symbol) {
          return propertyIsEnumerable22.call(object3, symbol);
        });
      };
      getSymbols_default2 = getSymbols3;
      __name(copySymbols2, "copySymbols");
      __name2(copySymbols2, "copySymbols");
      copySymbols_default2 = copySymbols2;
      nativeGetSymbols22 = Object.getOwnPropertySymbols;
      getSymbolsIn2 = !nativeGetSymbols22 ? stubArray_default2 : function(object3) {
        var result = [];
        while (object3) {
          arrayPush_default2(result, getSymbols_default2(object3));
          object3 = getPrototype_default2(object3);
        }
        return result;
      };
      getSymbolsIn_default2 = getSymbolsIn2;
      __name(copySymbolsIn2, "copySymbolsIn");
      __name2(copySymbolsIn2, "copySymbolsIn");
      copySymbolsIn_default2 = copySymbolsIn2;
      __name(baseGetAllKeys2, "baseGetAllKeys");
      __name2(baseGetAllKeys2, "baseGetAllKeys");
      baseGetAllKeys_default2 = baseGetAllKeys2;
      __name(getAllKeys2, "getAllKeys");
      __name2(getAllKeys2, "getAllKeys");
      getAllKeys_default2 = getAllKeys2;
      __name(getAllKeysIn2, "getAllKeysIn");
      __name2(getAllKeysIn2, "getAllKeysIn");
      getAllKeysIn_default2 = getAllKeysIn2;
      DataView3 = getNative_default2(root_default2, "DataView");
      DataView_default2 = DataView3;
      Promise22 = getNative_default2(root_default2, "Promise");
      Promise_default2 = Promise22;
      Set22 = getNative_default2(root_default2, "Set");
      Set_default2 = Set22;
      mapTag22 = "[object Map]";
      objectTag22 = "[object Object]";
      promiseTag2 = "[object Promise]";
      setTag22 = "[object Set]";
      weakMapTag22 = "[object WeakMap]";
      dataViewTag22 = "[object DataView]";
      dataViewCtorString2 = toSource_default2(DataView_default2);
      mapCtorString2 = toSource_default2(Map_default2);
      promiseCtorString2 = toSource_default2(Promise_default2);
      setCtorString2 = toSource_default2(Set_default2);
      weakMapCtorString2 = toSource_default2(WeakMap_default2);
      getTag3 = baseGetTag_default2;
      if (DataView_default2 && getTag3(new DataView_default2(new ArrayBuffer(1))) != dataViewTag22 || Map_default2 && getTag3(new Map_default2()) != mapTag22 || Promise_default2 && getTag3(Promise_default2.resolve()) != promiseTag2 || Set_default2 && getTag3(new Set_default2()) != setTag22 || WeakMap_default2 && getTag3(new WeakMap_default2()) != weakMapTag22) {
        getTag3 = /* @__PURE__ */ __name2(function(value2) {
          var result = baseGetTag_default2(value2), Ctor = result == objectTag22 ? value2.constructor : void 0, ctorString = Ctor ? toSource_default2(Ctor) : "";
          if (ctorString) {
            switch (ctorString) {
              case dataViewCtorString2:
                return dataViewTag22;
              case mapCtorString2:
                return mapTag22;
              case promiseCtorString2:
                return promiseTag2;
              case setCtorString2:
                return setTag22;
              case weakMapCtorString2:
                return weakMapTag22;
            }
          }
          return result;
        }, "getTag");
      }
      getTag_default2 = getTag3;
      objectProto142 = Object.prototype;
      hasOwnProperty112 = objectProto142.hasOwnProperty;
      __name(initCloneArray2, "initCloneArray");
      __name2(initCloneArray2, "initCloneArray");
      initCloneArray_default2 = initCloneArray2;
      Uint8Array22 = root_default2.Uint8Array;
      Uint8Array_default2 = Uint8Array22;
      __name(cloneArrayBuffer2, "cloneArrayBuffer");
      __name2(cloneArrayBuffer2, "cloneArrayBuffer");
      cloneArrayBuffer_default2 = cloneArrayBuffer2;
      __name(cloneDataView2, "cloneDataView");
      __name2(cloneDataView2, "cloneDataView");
      cloneDataView_default2 = cloneDataView2;
      reFlags2 = /\w*$/;
      __name(cloneRegExp2, "cloneRegExp");
      __name2(cloneRegExp2, "cloneRegExp");
      cloneRegExp_default2 = cloneRegExp2;
      symbolProto22 = Symbol_default2 ? Symbol_default2.prototype : void 0;
      symbolValueOf3 = symbolProto22 ? symbolProto22.valueOf : void 0;
      __name(cloneSymbol2, "cloneSymbol");
      __name2(cloneSymbol2, "cloneSymbol");
      cloneSymbol_default2 = cloneSymbol2;
      __name(cloneTypedArray2, "cloneTypedArray");
      __name2(cloneTypedArray2, "cloneTypedArray");
      cloneTypedArray_default2 = cloneTypedArray2;
      boolTag22 = "[object Boolean]";
      dateTag22 = "[object Date]";
      mapTag32 = "[object Map]";
      numberTag22 = "[object Number]";
      regexpTag22 = "[object RegExp]";
      setTag32 = "[object Set]";
      stringTag22 = "[object String]";
      symbolTag22 = "[object Symbol]";
      arrayBufferTag22 = "[object ArrayBuffer]";
      dataViewTag32 = "[object DataView]";
      float32Tag22 = "[object Float32Array]";
      float64Tag22 = "[object Float64Array]";
      int8Tag22 = "[object Int8Array]";
      int16Tag22 = "[object Int16Array]";
      int32Tag22 = "[object Int32Array]";
      uint8Tag22 = "[object Uint8Array]";
      uint8ClampedTag22 = "[object Uint8ClampedArray]";
      uint16Tag22 = "[object Uint16Array]";
      uint32Tag22 = "[object Uint32Array]";
      __name(initCloneByTag2, "initCloneByTag");
      __name2(initCloneByTag2, "initCloneByTag");
      initCloneByTag_default2 = initCloneByTag2;
      __name(initCloneObject2, "initCloneObject");
      __name2(initCloneObject2, "initCloneObject");
      initCloneObject_default2 = initCloneObject2;
      mapTag42 = "[object Map]";
      __name(baseIsMap2, "baseIsMap");
      __name2(baseIsMap2, "baseIsMap");
      baseIsMap_default2 = baseIsMap2;
      nodeIsMap2 = nodeUtil_default2 && nodeUtil_default2.isMap;
      isMap2 = nodeIsMap2 ? baseUnary_default2(nodeIsMap2) : baseIsMap_default2;
      isMap_default2 = isMap2;
      setTag42 = "[object Set]";
      __name(baseIsSet2, "baseIsSet");
      __name2(baseIsSet2, "baseIsSet");
      baseIsSet_default2 = baseIsSet2;
      nodeIsSet2 = nodeUtil_default2 && nodeUtil_default2.isSet;
      isSet2 = nodeIsSet2 ? baseUnary_default2(nodeIsSet2) : baseIsSet_default2;
      isSet_default2 = isSet2;
      CLONE_DEEP_FLAG3 = 1;
      CLONE_FLAT_FLAG2 = 2;
      CLONE_SYMBOLS_FLAG4 = 4;
      argsTag32 = "[object Arguments]";
      arrayTag22 = "[object Array]";
      boolTag32 = "[object Boolean]";
      dateTag32 = "[object Date]";
      errorTag22 = "[object Error]";
      funcTag32 = "[object Function]";
      genTag22 = "[object GeneratorFunction]";
      mapTag52 = "[object Map]";
      numberTag32 = "[object Number]";
      objectTag32 = "[object Object]";
      regexpTag32 = "[object RegExp]";
      setTag52 = "[object Set]";
      stringTag32 = "[object String]";
      symbolTag32 = "[object Symbol]";
      weakMapTag32 = "[object WeakMap]";
      arrayBufferTag32 = "[object ArrayBuffer]";
      dataViewTag42 = "[object DataView]";
      float32Tag32 = "[object Float32Array]";
      float64Tag32 = "[object Float64Array]";
      int8Tag32 = "[object Int8Array]";
      int16Tag32 = "[object Int16Array]";
      int32Tag32 = "[object Int32Array]";
      uint8Tag32 = "[object Uint8Array]";
      uint8ClampedTag32 = "[object Uint8ClampedArray]";
      uint16Tag32 = "[object Uint16Array]";
      uint32Tag32 = "[object Uint32Array]";
      cloneableTags2 = {};
      cloneableTags2[argsTag32] = cloneableTags2[arrayTag22] = cloneableTags2[arrayBufferTag32] = cloneableTags2[dataViewTag42] = cloneableTags2[boolTag32] = cloneableTags2[dateTag32] = cloneableTags2[float32Tag32] = cloneableTags2[float64Tag32] = cloneableTags2[int8Tag32] = cloneableTags2[int16Tag32] = cloneableTags2[int32Tag32] = cloneableTags2[mapTag52] = cloneableTags2[numberTag32] = cloneableTags2[objectTag32] = cloneableTags2[regexpTag32] = cloneableTags2[setTag52] = cloneableTags2[stringTag32] = cloneableTags2[symbolTag32] = cloneableTags2[uint8Tag32] = cloneableTags2[uint8ClampedTag32] = cloneableTags2[uint16Tag32] = cloneableTags2[uint32Tag32] = true;
      cloneableTags2[errorTag22] = cloneableTags2[funcTag32] = cloneableTags2[weakMapTag32] = false;
      __name(baseClone2, "baseClone");
      __name2(baseClone2, "baseClone");
      baseClone_default2 = baseClone2;
      CLONE_SYMBOLS_FLAG22 = 4;
      __name(clone7, "clone");
      __name2(clone7, "clone");
      clone_default3 = clone7;
      __name(compact, "compact");
      __name2(compact, "compact");
      compact_default = compact;
      HASH_UNDEFINED32 = "__lodash_hash_undefined__";
      __name(setCacheAdd2, "setCacheAdd");
      __name2(setCacheAdd2, "setCacheAdd");
      setCacheAdd_default2 = setCacheAdd2;
      __name(setCacheHas2, "setCacheHas");
      __name2(setCacheHas2, "setCacheHas");
      setCacheHas_default2 = setCacheHas2;
      __name(SetCache2, "SetCache");
      __name2(SetCache2, "SetCache");
      SetCache2.prototype.add = SetCache2.prototype.push = setCacheAdd_default2;
      SetCache2.prototype.has = setCacheHas_default2;
      SetCache_default2 = SetCache2;
      __name(arraySome2, "arraySome");
      __name2(arraySome2, "arraySome");
      arraySome_default2 = arraySome2;
      __name(cacheHas2, "cacheHas");
      __name2(cacheHas2, "cacheHas");
      cacheHas_default2 = cacheHas2;
      COMPARE_PARTIAL_FLAG7 = 1;
      COMPARE_UNORDERED_FLAG5 = 2;
      __name(equalArrays2, "equalArrays");
      __name2(equalArrays2, "equalArrays");
      equalArrays_default2 = equalArrays2;
      __name(mapToArray2, "mapToArray");
      __name2(mapToArray2, "mapToArray");
      mapToArray_default2 = mapToArray2;
      __name(setToArray2, "setToArray");
      __name2(setToArray2, "setToArray");
      setToArray_default2 = setToArray2;
      COMPARE_PARTIAL_FLAG22 = 1;
      COMPARE_UNORDERED_FLAG22 = 2;
      boolTag42 = "[object Boolean]";
      dateTag42 = "[object Date]";
      errorTag32 = "[object Error]";
      mapTag62 = "[object Map]";
      numberTag42 = "[object Number]";
      regexpTag42 = "[object RegExp]";
      setTag62 = "[object Set]";
      stringTag42 = "[object String]";
      symbolTag42 = "[object Symbol]";
      arrayBufferTag42 = "[object ArrayBuffer]";
      dataViewTag52 = "[object DataView]";
      symbolProto32 = Symbol_default2 ? Symbol_default2.prototype : void 0;
      symbolValueOf22 = symbolProto32 ? symbolProto32.valueOf : void 0;
      __name(equalByTag2, "equalByTag");
      __name2(equalByTag2, "equalByTag");
      equalByTag_default2 = equalByTag2;
      COMPARE_PARTIAL_FLAG32 = 1;
      objectProto152 = Object.prototype;
      hasOwnProperty122 = objectProto152.hasOwnProperty;
      __name(equalObjects2, "equalObjects");
      __name2(equalObjects2, "equalObjects");
      equalObjects_default2 = equalObjects2;
      COMPARE_PARTIAL_FLAG42 = 1;
      argsTag42 = "[object Arguments]";
      arrayTag32 = "[object Array]";
      objectTag42 = "[object Object]";
      objectProto162 = Object.prototype;
      hasOwnProperty132 = objectProto162.hasOwnProperty;
      __name(baseIsEqualDeep2, "baseIsEqualDeep");
      __name2(baseIsEqualDeep2, "baseIsEqualDeep");
      baseIsEqualDeep_default2 = baseIsEqualDeep2;
      __name(baseIsEqual2, "baseIsEqual");
      __name2(baseIsEqual2, "baseIsEqual");
      baseIsEqual_default2 = baseIsEqual2;
      COMPARE_PARTIAL_FLAG52 = 1;
      COMPARE_UNORDERED_FLAG32 = 2;
      __name(baseIsMatch2, "baseIsMatch");
      __name2(baseIsMatch2, "baseIsMatch");
      baseIsMatch_default2 = baseIsMatch2;
      __name(isStrictComparable2, "isStrictComparable");
      __name2(isStrictComparable2, "isStrictComparable");
      isStrictComparable_default2 = isStrictComparable2;
      __name(getMatchData2, "getMatchData");
      __name2(getMatchData2, "getMatchData");
      getMatchData_default2 = getMatchData2;
      __name(matchesStrictComparable2, "matchesStrictComparable");
      __name2(matchesStrictComparable2, "matchesStrictComparable");
      matchesStrictComparable_default2 = matchesStrictComparable2;
      __name(baseMatches2, "baseMatches");
      __name2(baseMatches2, "baseMatches");
      baseMatches_default2 = baseMatches2;
      __name(baseHasIn2, "baseHasIn");
      __name2(baseHasIn2, "baseHasIn");
      baseHasIn_default2 = baseHasIn2;
      __name(hasPath2, "hasPath");
      __name2(hasPath2, "hasPath");
      hasPath_default2 = hasPath2;
      __name(hasIn2, "hasIn");
      __name2(hasIn2, "hasIn");
      hasIn_default2 = hasIn2;
      COMPARE_PARTIAL_FLAG62 = 1;
      COMPARE_UNORDERED_FLAG42 = 2;
      __name(baseMatchesProperty2, "baseMatchesProperty");
      __name2(baseMatchesProperty2, "baseMatchesProperty");
      baseMatchesProperty_default2 = baseMatchesProperty2;
      __name(baseProperty2, "baseProperty");
      __name2(baseProperty2, "baseProperty");
      baseProperty_default2 = baseProperty2;
      __name(basePropertyDeep2, "basePropertyDeep");
      __name2(basePropertyDeep2, "basePropertyDeep");
      basePropertyDeep_default2 = basePropertyDeep2;
      __name(property2, "property");
      __name2(property2, "property");
      property_default3 = property2;
      __name(baseIteratee2, "baseIteratee");
      __name2(baseIteratee2, "baseIteratee");
      baseIteratee_default2 = baseIteratee2;
      __name(arrayAggregator, "arrayAggregator");
      __name2(arrayAggregator, "arrayAggregator");
      arrayAggregator_default = arrayAggregator;
      __name(createBaseFor2, "createBaseFor");
      __name2(createBaseFor2, "createBaseFor");
      createBaseFor_default2 = createBaseFor2;
      baseFor2 = createBaseFor_default2();
      baseFor_default2 = baseFor2;
      __name(baseForOwn2, "baseForOwn");
      __name2(baseForOwn2, "baseForOwn");
      baseForOwn_default2 = baseForOwn2;
      __name(createBaseEach2, "createBaseEach");
      __name2(createBaseEach2, "createBaseEach");
      createBaseEach_default2 = createBaseEach2;
      baseEach2 = createBaseEach_default2(baseForOwn_default2);
      baseEach_default2 = baseEach2;
      __name(baseAggregator, "baseAggregator");
      __name2(baseAggregator, "baseAggregator");
      baseAggregator_default = baseAggregator;
      __name(createAggregator, "createAggregator");
      __name2(createAggregator, "createAggregator");
      createAggregator_default = createAggregator;
      objectProto172 = Object.prototype;
      hasOwnProperty142 = objectProto172.hasOwnProperty;
      defaults4 = baseRest_default2(function(object3, sources) {
        object3 = Object(object3);
        var index = -1;
        var length2 = sources.length;
        var guard = length2 > 2 ? sources[2] : void 0;
        if (guard && isIterateeCall_default2(sources[0], sources[1], guard)) {
          length2 = 1;
        }
        while (++index < length2) {
          var source = sources[index];
          var props = keysIn_default2(source);
          var propsIndex = -1;
          var propsLength = props.length;
          while (++propsIndex < propsLength) {
            var key = props[propsIndex];
            var value2 = object3[key];
            if (value2 === void 0 || eq_default2(value2, objectProto172[key]) && !hasOwnProperty142.call(object3, key)) {
              object3[key] = source[key];
            }
          }
        }
        return object3;
      });
      defaults_default2 = defaults4;
      __name(isArrayLikeObject3, "isArrayLikeObject");
      __name2(isArrayLikeObject3, "isArrayLikeObject");
      isArrayLikeObject_default2 = isArrayLikeObject3;
      __name(arrayIncludesWith2, "arrayIncludesWith");
      __name2(arrayIncludesWith2, "arrayIncludesWith");
      arrayIncludesWith_default2 = arrayIncludesWith2;
      LARGE_ARRAY_SIZE22 = 200;
      __name(baseDifference, "baseDifference");
      __name2(baseDifference, "baseDifference");
      baseDifference_default = baseDifference;
      difference = baseRest_default2(function(array4, values22) {
        return isArrayLikeObject_default2(array4) ? baseDifference_default(array4, baseFlatten_default2(values22, 1, isArrayLikeObject_default2, true)) : [];
      });
      difference_default = difference;
      __name(last3, "last");
      __name2(last3, "last");
      last_default2 = last3;
      __name(drop, "drop");
      __name2(drop, "drop");
      drop_default = drop;
      __name(dropRight, "dropRight");
      __name2(dropRight, "dropRight");
      dropRight_default = dropRight;
      __name(castFunction2, "castFunction");
      __name2(castFunction2, "castFunction");
      castFunction_default2 = castFunction2;
      __name(forEach3, "forEach");
      __name2(forEach3, "forEach");
      forEach_default2 = forEach3;
      __name(arrayEvery, "arrayEvery");
      __name2(arrayEvery, "arrayEvery");
      arrayEvery_default = arrayEvery;
      __name(baseEvery, "baseEvery");
      __name2(baseEvery, "baseEvery");
      baseEvery_default = baseEvery;
      __name(every2, "every");
      __name2(every2, "every");
      every_default = every2;
      __name(baseFilter2, "baseFilter");
      __name2(baseFilter2, "baseFilter");
      baseFilter_default2 = baseFilter2;
      __name(filter6, "filter");
      __name2(filter6, "filter");
      filter_default4 = filter6;
      __name(createFind2, "createFind");
      __name2(createFind2, "createFind");
      createFind_default2 = createFind2;
      nativeMax22 = Math.max;
      __name(findIndex2, "findIndex");
      __name2(findIndex2, "findIndex");
      findIndex_default2 = findIndex2;
      find3 = createFind_default2(findIndex_default2);
      find_default3 = find3;
      __name(head, "head");
      __name2(head, "head");
      head_default = head;
      __name(baseMap2, "baseMap");
      __name2(baseMap2, "baseMap");
      baseMap_default2 = baseMap2;
      __name(map5, "map");
      __name2(map5, "map");
      map_default2 = map5;
      __name(flatMap, "flatMap");
      __name2(flatMap, "flatMap");
      flatMap_default = flatMap;
      objectProto182 = Object.prototype;
      hasOwnProperty152 = objectProto182.hasOwnProperty;
      groupBy = createAggregator_default(function(result, value2, key) {
        if (hasOwnProperty152.call(result, key)) {
          result[key].push(value2);
        } else {
          baseAssignValue_default2(result, key, [value2]);
        }
      });
      groupBy_default = groupBy;
      objectProto192 = Object.prototype;
      hasOwnProperty162 = objectProto192.hasOwnProperty;
      __name(baseHas2, "baseHas");
      __name2(baseHas2, "baseHas");
      baseHas_default2 = baseHas2;
      __name(has2, "has");
      __name2(has2, "has");
      has_default2 = has2;
      stringTag52 = "[object String]";
      __name(isString2, "isString");
      __name2(isString2, "isString");
      isString_default2 = isString2;
      __name(baseValues2, "baseValues");
      __name2(baseValues2, "baseValues");
      baseValues_default2 = baseValues2;
      __name(values2, "values");
      __name2(values2, "values");
      values_default2 = values2;
      nativeMax32 = Math.max;
      __name(includes, "includes");
      __name2(includes, "includes");
      includes_default = includes;
      nativeMax42 = Math.max;
      __name(indexOf, "indexOf");
      __name2(indexOf, "indexOf");
      indexOf_default = indexOf;
      mapTag72 = "[object Map]";
      setTag72 = "[object Set]";
      objectProto202 = Object.prototype;
      hasOwnProperty172 = objectProto202.hasOwnProperty;
      __name(isEmpty3, "isEmpty");
      __name2(isEmpty3, "isEmpty");
      isEmpty_default2 = isEmpty3;
      regexpTag52 = "[object RegExp]";
      __name(baseIsRegExp, "baseIsRegExp");
      __name2(baseIsRegExp, "baseIsRegExp");
      baseIsRegExp_default = baseIsRegExp;
      nodeIsRegExp = nodeUtil_default2 && nodeUtil_default2.isRegExp;
      isRegExp = nodeIsRegExp ? baseUnary_default2(nodeIsRegExp) : baseIsRegExp_default;
      isRegExp_default = isRegExp;
      __name(isUndefined2, "isUndefined");
      __name2(isUndefined2, "isUndefined");
      isUndefined_default2 = isUndefined2;
      FUNC_ERROR_TEXT22 = "Expected a function";
      __name(negate, "negate");
      __name2(negate, "negate");
      negate_default = negate;
      __name(baseSet2, "baseSet");
      __name2(baseSet2, "baseSet");
      baseSet_default2 = baseSet2;
      __name(basePickBy2, "basePickBy");
      __name2(basePickBy2, "basePickBy");
      basePickBy_default2 = basePickBy2;
      __name(pickBy, "pickBy");
      __name2(pickBy, "pickBy");
      pickBy_default = pickBy;
      __name(baseReduce2, "baseReduce");
      __name2(baseReduce2, "baseReduce");
      baseReduce_default2 = baseReduce2;
      __name(reduce3, "reduce");
      __name2(reduce3, "reduce");
      reduce_default2 = reduce3;
      __name(reject2, "reject");
      __name2(reject2, "reject");
      reject_default = reject2;
      __name(baseSome, "baseSome");
      __name2(baseSome, "baseSome");
      baseSome_default = baseSome;
      __name(some2, "some");
      __name2(some2, "some");
      some_default = some2;
      INFINITY42 = 1 / 0;
      createSet2 = !(Set_default2 && 1 / setToArray_default2(new Set_default2([, -0]))[1] == INFINITY42) ? noop_default3 : function(values22) {
        return new Set_default2(values22);
      };
      createSet_default2 = createSet2;
      LARGE_ARRAY_SIZE32 = 200;
      __name(baseUniq2, "baseUniq");
      __name2(baseUniq2, "baseUniq");
      baseUniq_default2 = baseUniq2;
      __name(uniq, "uniq");
      __name2(uniq, "uniq");
      uniq_default = uniq;
      __name(PRINT_ERROR, "PRINT_ERROR");
      __name2(PRINT_ERROR, "PRINT_ERROR");
      __name(PRINT_WARNING, "PRINT_WARNING");
      __name2(PRINT_WARNING, "PRINT_WARNING");
      __name(timer2, "timer");
      __name2(timer2, "timer");
      __name(toFastProperties, "toFastProperties");
      __name2(toFastProperties, "toFastProperties");
      __name(tokenLabel, "tokenLabel");
      __name2(tokenLabel, "tokenLabel");
      __name(hasTokenLabel, "hasTokenLabel");
      __name2(hasTokenLabel, "hasTokenLabel");
      AbstractProduction = class {
        static {
          __name(this, "AbstractProduction");
        }
        static {
          __name2(this, "AbstractProduction");
        }
        get definition() {
          return this._definition;
        }
        set definition(value2) {
          this._definition = value2;
        }
        constructor(_definition) {
          this._definition = _definition;
        }
        accept(visitor2) {
          visitor2.visit(this);
          forEach_default2(this.definition, (prod) => {
            prod.accept(visitor2);
          });
        }
      };
      NonTerminal = class extends AbstractProduction {
        static {
          __name(this, "NonTerminal");
        }
        static {
          __name2(this, "NonTerminal");
        }
        constructor(options2) {
          super([]);
          this.idx = 1;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
        set definition(definition) {
        }
        get definition() {
          if (this.referencedRule !== void 0) {
            return this.referencedRule.definition;
          }
          return [];
        }
        accept(visitor2) {
          visitor2.visit(this);
        }
      };
      Rule = class extends AbstractProduction {
        static {
          __name(this, "Rule");
        }
        static {
          __name2(this, "Rule");
        }
        constructor(options2) {
          super(options2.definition);
          this.orgText = "";
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      Alternative = class extends AbstractProduction {
        static {
          __name(this, "Alternative");
        }
        static {
          __name2(this, "Alternative");
        }
        constructor(options2) {
          super(options2.definition);
          this.ignoreAmbiguities = false;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      Option2 = class extends AbstractProduction {
        static {
          __name(this, "Option");
        }
        static {
          __name2(this, "Option");
        }
        constructor(options2) {
          super(options2.definition);
          this.idx = 1;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      RepetitionMandatory = class extends AbstractProduction {
        static {
          __name(this, "RepetitionMandatory");
        }
        static {
          __name2(this, "RepetitionMandatory");
        }
        constructor(options2) {
          super(options2.definition);
          this.idx = 1;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      RepetitionMandatoryWithSeparator = class extends AbstractProduction {
        static {
          __name(this, "RepetitionMandatoryWithSeparator");
        }
        static {
          __name2(this, "RepetitionMandatoryWithSeparator");
        }
        constructor(options2) {
          super(options2.definition);
          this.idx = 1;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      Repetition = class extends AbstractProduction {
        static {
          __name(this, "Repetition");
        }
        static {
          __name2(this, "Repetition");
        }
        constructor(options2) {
          super(options2.definition);
          this.idx = 1;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      RepetitionWithSeparator = class extends AbstractProduction {
        static {
          __name(this, "RepetitionWithSeparator");
        }
        static {
          __name2(this, "RepetitionWithSeparator");
        }
        constructor(options2) {
          super(options2.definition);
          this.idx = 1;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      Alternation = class extends AbstractProduction {
        static {
          __name(this, "Alternation");
        }
        static {
          __name2(this, "Alternation");
        }
        get definition() {
          return this._definition;
        }
        set definition(value2) {
          this._definition = value2;
        }
        constructor(options2) {
          super(options2.definition);
          this.idx = 1;
          this.ignoreAmbiguities = false;
          this.hasPredicates = false;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
      };
      Terminal = class {
        static {
          __name(this, "Terminal");
        }
        static {
          __name2(this, "Terminal");
        }
        constructor(options2) {
          this.idx = 1;
          assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0));
        }
        accept(visitor2) {
          visitor2.visit(this);
        }
      };
      __name(serializeGrammar, "serializeGrammar");
      __name2(serializeGrammar, "serializeGrammar");
      __name(serializeProduction, "serializeProduction");
      __name2(serializeProduction, "serializeProduction");
      GAstVisitor = class {
        static {
          __name(this, "GAstVisitor");
        }
        static {
          __name2(this, "GAstVisitor");
        }
        visit(node2) {
          const nodeAny = node2;
          switch (nodeAny.constructor) {
            case NonTerminal:
              return this.visitNonTerminal(nodeAny);
            case Alternative:
              return this.visitAlternative(nodeAny);
            case Option2:
              return this.visitOption(nodeAny);
            case RepetitionMandatory:
              return this.visitRepetitionMandatory(nodeAny);
            case RepetitionMandatoryWithSeparator:
              return this.visitRepetitionMandatoryWithSeparator(nodeAny);
            case RepetitionWithSeparator:
              return this.visitRepetitionWithSeparator(nodeAny);
            case Repetition:
              return this.visitRepetition(nodeAny);
            case Alternation:
              return this.visitAlternation(nodeAny);
            case Terminal:
              return this.visitTerminal(nodeAny);
            case Rule:
              return this.visitRule(nodeAny);
            /* c8 ignore next 2 */
            default:
              throw Error("non exhaustive match");
          }
        }
        /* c8 ignore next */
        visitNonTerminal(node2) {
        }
        /* c8 ignore next */
        visitAlternative(node2) {
        }
        /* c8 ignore next */
        visitOption(node2) {
        }
        /* c8 ignore next */
        visitRepetition(node2) {
        }
        /* c8 ignore next */
        visitRepetitionMandatory(node2) {
        }
        /* c8 ignore next 3 */
        visitRepetitionMandatoryWithSeparator(node2) {
        }
        /* c8 ignore next */
        visitRepetitionWithSeparator(node2) {
        }
        /* c8 ignore next */
        visitAlternation(node2) {
        }
        /* c8 ignore next */
        visitTerminal(node2) {
        }
        /* c8 ignore next */
        visitRule(node2) {
        }
      };
      __name(isSequenceProd, "isSequenceProd");
      __name2(isSequenceProd, "isSequenceProd");
      __name(isOptionalProd, "isOptionalProd");
      __name2(isOptionalProd, "isOptionalProd");
      __name(isBranchingProd, "isBranchingProd");
      __name2(isBranchingProd, "isBranchingProd");
      __name(getProductionDslName, "getProductionDslName");
      __name2(getProductionDslName, "getProductionDslName");
      RestWalker = class {
        static {
          __name(this, "RestWalker");
        }
        static {
          __name2(this, "RestWalker");
        }
        walk(prod, prevRest = []) {
          forEach_default2(prod.definition, (subProd, index) => {
            const currRest = drop_default(prod.definition, index + 1);
            if (subProd instanceof NonTerminal) {
              this.walkProdRef(subProd, currRest, prevRest);
            } else if (subProd instanceof Terminal) {
              this.walkTerminal(subProd, currRest, prevRest);
            } else if (subProd instanceof Alternative) {
              this.walkFlat(subProd, currRest, prevRest);
            } else if (subProd instanceof Option2) {
              this.walkOption(subProd, currRest, prevRest);
            } else if (subProd instanceof RepetitionMandatory) {
              this.walkAtLeastOne(subProd, currRest, prevRest);
            } else if (subProd instanceof RepetitionMandatoryWithSeparator) {
              this.walkAtLeastOneSep(subProd, currRest, prevRest);
            } else if (subProd instanceof RepetitionWithSeparator) {
              this.walkManySep(subProd, currRest, prevRest);
            } else if (subProd instanceof Repetition) {
              this.walkMany(subProd, currRest, prevRest);
            } else if (subProd instanceof Alternation) {
              this.walkOr(subProd, currRest, prevRest);
            } else {
              throw Error("non exhaustive match");
            }
          });
        }
        walkTerminal(terminal, currRest, prevRest) {
        }
        walkProdRef(refProd, currRest, prevRest) {
        }
        walkFlat(flatProd, currRest, prevRest) {
          const fullOrRest = currRest.concat(prevRest);
          this.walk(flatProd, fullOrRest);
        }
        walkOption(optionProd, currRest, prevRest) {
          const fullOrRest = currRest.concat(prevRest);
          this.walk(optionProd, fullOrRest);
        }
        walkAtLeastOne(atLeastOneProd, currRest, prevRest) {
          const fullAtLeastOneRest = [
            new Option2({ definition: atLeastOneProd.definition })
          ].concat(currRest, prevRest);
          this.walk(atLeastOneProd, fullAtLeastOneRest);
        }
        walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {
          const fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest);
          this.walk(atLeastOneSepProd, fullAtLeastOneSepRest);
        }
        walkMany(manyProd, currRest, prevRest) {
          const fullManyRest = [
            new Option2({ definition: manyProd.definition })
          ].concat(currRest, prevRest);
          this.walk(manyProd, fullManyRest);
        }
        walkManySep(manySepProd, currRest, prevRest) {
          const fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest);
          this.walk(manySepProd, fullManySepRest);
        }
        walkOr(orProd, currRest, prevRest) {
          const fullOrRest = currRest.concat(prevRest);
          forEach_default2(orProd.definition, (alt) => {
            const prodWrapper = new Alternative({ definition: [alt] });
            this.walk(prodWrapper, fullOrRest);
          });
        }
      };
      __name(restForRepetitionWithSeparator, "restForRepetitionWithSeparator");
      __name2(restForRepetitionWithSeparator, "restForRepetitionWithSeparator");
      __name(first2, "first");
      __name2(first2, "first");
      __name(firstForSequence, "firstForSequence");
      __name2(firstForSequence, "firstForSequence");
      __name(firstForBranching, "firstForBranching");
      __name2(firstForBranching, "firstForBranching");
      __name(firstForTerminal, "firstForTerminal");
      __name2(firstForTerminal, "firstForTerminal");
      IN = "_~IN~_";
      ResyncFollowsWalker = class extends RestWalker {
        static {
          __name(this, "ResyncFollowsWalker");
        }
        static {
          __name2(this, "ResyncFollowsWalker");
        }
        constructor(topProd) {
          super();
          this.topProd = topProd;
          this.follows = {};
        }
        startWalking() {
          this.walk(this.topProd);
          return this.follows;
        }
        walkTerminal(terminal, currRest, prevRest) {
        }
        walkProdRef(refProd, currRest, prevRest) {
          const followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) + this.topProd.name;
          const fullRest = currRest.concat(prevRest);
          const restProd = new Alternative({ definition: fullRest });
          const t_in_topProd_follows = first2(restProd);
          this.follows[followName] = t_in_topProd_follows;
        }
      };
      __name(computeAllProdsFollows, "computeAllProdsFollows");
      __name2(computeAllProdsFollows, "computeAllProdsFollows");
      __name(buildBetweenProdsFollowPrefix, "buildBetweenProdsFollowPrefix");
      __name2(buildBetweenProdsFollowPrefix, "buildBetweenProdsFollowPrefix");
      regExpAstCache = {};
      regExpParser = new RegExpParser();
      __name(getRegExpAst, "getRegExpAst");
      __name2(getRegExpAst, "getRegExpAst");
      __name(clearRegExpParserCache, "clearRegExpParserCache");
      __name2(clearRegExpParserCache, "clearRegExpParserCache");
      complementErrorMessage = "Complement Sets are not supported for first char optimization";
      failedOptimizationPrefixMsg = 'Unable to use "first char" lexer optimizations:\n';
      __name(getOptimizedStartCodesIndices, "getOptimizedStartCodesIndices");
      __name2(getOptimizedStartCodesIndices, "getOptimizedStartCodesIndices");
      __name(firstCharOptimizedIndices, "firstCharOptimizedIndices");
      __name2(firstCharOptimizedIndices, "firstCharOptimizedIndices");
      __name(addOptimizedIdxToResult, "addOptimizedIdxToResult");
      __name2(addOptimizedIdxToResult, "addOptimizedIdxToResult");
      __name(handleIgnoreCase, "handleIgnoreCase");
      __name2(handleIgnoreCase, "handleIgnoreCase");
      __name(findCode, "findCode");
      __name2(findCode, "findCode");
      __name(isWholeOptional, "isWholeOptional");
      __name2(isWholeOptional, "isWholeOptional");
      CharCodeFinder = class extends BaseRegExpVisitor {
        static {
          __name(this, "CharCodeFinder");
        }
        static {
          __name2(this, "CharCodeFinder");
        }
        constructor(targetCharCodes) {
          super();
          this.targetCharCodes = targetCharCodes;
          this.found = false;
        }
        visitChildren(node2) {
          if (this.found === true) {
            return;
          }
          switch (node2.type) {
            case "Lookahead":
              this.visitLookahead(node2);
              return;
            case "NegativeLookahead":
              this.visitNegativeLookahead(node2);
              return;
            case "Lookbehind":
              this.visitLookbehind(node2);
              return;
            case "NegativeLookbehind":
              this.visitNegativeLookbehind(node2);
              return;
          }
          super.visitChildren(node2);
        }
        visitCharacter(node2) {
          if (includes_default(this.targetCharCodes, node2.value)) {
            this.found = true;
          }
        }
        visitSet(node2) {
          if (node2.complement) {
            if (findCode(node2, this.targetCharCodes) === void 0) {
              this.found = true;
            }
          } else {
            if (findCode(node2, this.targetCharCodes) !== void 0) {
              this.found = true;
            }
          }
        }
      };
      __name(canMatchCharCode, "canMatchCharCode");
      __name2(canMatchCharCode, "canMatchCharCode");
      PATTERN = "PATTERN";
      DEFAULT_MODE = "defaultMode";
      MODES = "modes";
      __name(analyzeTokenTypes, "analyzeTokenTypes");
      __name2(analyzeTokenTypes, "analyzeTokenTypes");
      __name(validatePatterns, "validatePatterns");
      __name2(validatePatterns, "validatePatterns");
      __name(validateRegExpPattern, "validateRegExpPattern");
      __name2(validateRegExpPattern, "validateRegExpPattern");
      __name(findMissingPatterns, "findMissingPatterns");
      __name2(findMissingPatterns, "findMissingPatterns");
      __name(findInvalidPatterns, "findInvalidPatterns");
      __name2(findInvalidPatterns, "findInvalidPatterns");
      end_of_input = /[^\\][$]/;
      __name(findEndOfInputAnchor, "findEndOfInputAnchor");
      __name2(findEndOfInputAnchor, "findEndOfInputAnchor");
      __name(findEmptyMatchRegExps, "findEmptyMatchRegExps");
      __name2(findEmptyMatchRegExps, "findEmptyMatchRegExps");
      start_of_input = /[^\\[][\^]|^\^/;
      __name(findStartOfInputAnchor, "findStartOfInputAnchor");
      __name2(findStartOfInputAnchor, "findStartOfInputAnchor");
      __name(findUnsupportedFlags, "findUnsupportedFlags");
      __name2(findUnsupportedFlags, "findUnsupportedFlags");
      __name(findDuplicatePatterns, "findDuplicatePatterns");
      __name2(findDuplicatePatterns, "findDuplicatePatterns");
      __name(findInvalidGroupType, "findInvalidGroupType");
      __name2(findInvalidGroupType, "findInvalidGroupType");
      __name(findModesThatDoNotExist, "findModesThatDoNotExist");
      __name2(findModesThatDoNotExist, "findModesThatDoNotExist");
      __name(findUnreachablePatterns, "findUnreachablePatterns");
      __name2(findUnreachablePatterns, "findUnreachablePatterns");
      __name(tryToMatchStrToPattern, "tryToMatchStrToPattern");
      __name2(tryToMatchStrToPattern, "tryToMatchStrToPattern");
      __name(noMetaChar, "noMetaChar");
      __name2(noMetaChar, "noMetaChar");
      __name(usesLookAheadOrBehind, "usesLookAheadOrBehind");
      __name2(usesLookAheadOrBehind, "usesLookAheadOrBehind");
      __name(addStickyFlag, "addStickyFlag");
      __name2(addStickyFlag, "addStickyFlag");
      __name(performRuntimeChecks, "performRuntimeChecks");
      __name2(performRuntimeChecks, "performRuntimeChecks");
      __name(performWarningRuntimeChecks, "performWarningRuntimeChecks");
      __name2(performWarningRuntimeChecks, "performWarningRuntimeChecks");
      __name(cloneEmptyGroups, "cloneEmptyGroups");
      __name2(cloneEmptyGroups, "cloneEmptyGroups");
      __name(isCustomPattern, "isCustomPattern");
      __name2(isCustomPattern, "isCustomPattern");
      __name(isShortPattern, "isShortPattern");
      __name2(isShortPattern, "isShortPattern");
      LineTerminatorOptimizedTester = {
        // implements /\n|\r\n?/g.test
        test: /* @__PURE__ */ __name2(function(text4) {
          const len = text4.length;
          for (let i2 = this.lastIndex; i2 < len; i2++) {
            const c3 = text4.charCodeAt(i2);
            if (c3 === 10) {
              this.lastIndex = i2 + 1;
              return true;
            } else if (c3 === 13) {
              if (text4.charCodeAt(i2 + 1) === 10) {
                this.lastIndex = i2 + 2;
              } else {
                this.lastIndex = i2 + 1;
              }
              return true;
            }
          }
          return false;
        }, "test"),
        lastIndex: 0
      };
      __name(checkLineBreaksIssues, "checkLineBreaksIssues");
      __name2(checkLineBreaksIssues, "checkLineBreaksIssues");
      __name(buildLineBreakIssueMessage, "buildLineBreakIssueMessage");
      __name2(buildLineBreakIssueMessage, "buildLineBreakIssueMessage");
      __name(getCharCodes, "getCharCodes");
      __name2(getCharCodes, "getCharCodes");
      __name(addToMapOfArrays, "addToMapOfArrays");
      __name2(addToMapOfArrays, "addToMapOfArrays");
      minOptimizationVal = 256;
      charCodeToOptimizedIdxMap = [];
      __name(charCodeToOptimizedIndex, "charCodeToOptimizedIndex");
      __name2(charCodeToOptimizedIndex, "charCodeToOptimizedIndex");
      __name(initCharCodeToOptimizedIndexMap, "initCharCodeToOptimizedIndexMap");
      __name2(initCharCodeToOptimizedIndexMap, "initCharCodeToOptimizedIndexMap");
      __name(tokenStructuredMatcher, "tokenStructuredMatcher");
      __name2(tokenStructuredMatcher, "tokenStructuredMatcher");
      __name(tokenStructuredMatcherNoCategories, "tokenStructuredMatcherNoCategories");
      __name2(tokenStructuredMatcherNoCategories, "tokenStructuredMatcherNoCategories");
      tokenShortNameIdx = 1;
      tokenIdxToClass = {};
      __name(augmentTokenTypes, "augmentTokenTypes");
      __name2(augmentTokenTypes, "augmentTokenTypes");
      __name(expandCategories, "expandCategories");
      __name2(expandCategories, "expandCategories");
      __name(assignTokenDefaultProps, "assignTokenDefaultProps");
      __name2(assignTokenDefaultProps, "assignTokenDefaultProps");
      __name(assignCategoriesTokensProp, "assignCategoriesTokensProp");
      __name2(assignCategoriesTokensProp, "assignCategoriesTokensProp");
      __name(assignCategoriesMapProp, "assignCategoriesMapProp");
      __name2(assignCategoriesMapProp, "assignCategoriesMapProp");
      __name(singleAssignCategoriesToksMap, "singleAssignCategoriesToksMap");
      __name2(singleAssignCategoriesToksMap, "singleAssignCategoriesToksMap");
      __name(hasShortKeyProperty, "hasShortKeyProperty");
      __name2(hasShortKeyProperty, "hasShortKeyProperty");
      __name(hasCategoriesProperty, "hasCategoriesProperty");
      __name2(hasCategoriesProperty, "hasCategoriesProperty");
      __name(hasExtendingTokensTypesProperty, "hasExtendingTokensTypesProperty");
      __name2(hasExtendingTokensTypesProperty, "hasExtendingTokensTypesProperty");
      __name(hasExtendingTokensTypesMapProperty, "hasExtendingTokensTypesMapProperty");
      __name2(hasExtendingTokensTypesMapProperty, "hasExtendingTokensTypesMapProperty");
      __name(isTokenType, "isTokenType");
      __name2(isTokenType, "isTokenType");
      defaultLexerErrorProvider = {
        buildUnableToPopLexerModeMessage(token2) {
          return `Unable to pop Lexer Mode after encountering Token ->${token2.image}<- The Mode Stack is empty`;
        },
        buildUnexpectedCharactersMessage(fullText, startOffset, length2, line2, column2, mode) {
          return `unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset}, skipped ${length2} characters.`;
        }
      };
      (function(LexerDefinitionErrorType2) {
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["MISSING_PATTERN"] = 0] = "MISSING_PATTERN";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["INVALID_PATTERN"] = 1] = "INVALID_PATTERN";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["EOI_ANCHOR_FOUND"] = 2] = "EOI_ANCHOR_FOUND";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["UNSUPPORTED_FLAGS_FOUND"] = 3] = "UNSUPPORTED_FLAGS_FOUND";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["DUPLICATE_PATTERNS_FOUND"] = 4] = "DUPLICATE_PATTERNS_FOUND";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["INVALID_GROUP_TYPE_FOUND"] = 5] = "INVALID_GROUP_TYPE_FOUND";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["PUSH_MODE_DOES_NOT_EXIST"] = 6] = "PUSH_MODE_DOES_NOT_EXIST";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE"] = 7] = "MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY"] = 8] = "MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST"] = 9] = "MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED"] = 10] = "LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["SOI_ANCHOR_FOUND"] = 11] = "SOI_ANCHOR_FOUND";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["EMPTY_MATCH_PATTERN"] = 12] = "EMPTY_MATCH_PATTERN";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["NO_LINE_BREAKS_FLAGS"] = 13] = "NO_LINE_BREAKS_FLAGS";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["UNREACHABLE_PATTERN"] = 14] = "UNREACHABLE_PATTERN";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["IDENTIFY_TERMINATOR"] = 15] = "IDENTIFY_TERMINATOR";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["CUSTOM_LINE_BREAK"] = 16] = "CUSTOM_LINE_BREAK";
        LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"] = 17] = "MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE";
      })(LexerDefinitionErrorType || (LexerDefinitionErrorType = {}));
      DEFAULT_LEXER_CONFIG = {
        deferDefinitionErrorsHandling: false,
        positionTracking: "full",
        lineTerminatorsPattern: /\n|\r\n?/g,
        lineTerminatorCharacters: ["\n", "\r"],
        ensureOptimizations: false,
        safeMode: false,
        errorMessageProvider: defaultLexerErrorProvider,
        traceInitPerf: false,
        skipValidations: false,
        recoveryEnabled: true
      };
      Object.freeze(DEFAULT_LEXER_CONFIG);
      Lexer2 = class {
        static {
          __name(this, "Lexer");
        }
        static {
          __name2(this, "Lexer");
        }
        constructor(lexerDefinition, config3 = DEFAULT_LEXER_CONFIG) {
          this.lexerDefinition = lexerDefinition;
          this.lexerDefinitionErrors = [];
          this.lexerDefinitionWarning = [];
          this.patternIdxToConfig = {};
          this.charCodeToPatternIdxToConfig = {};
          this.modes = [];
          this.emptyGroups = {};
          this.trackStartLines = true;
          this.trackEndLines = true;
          this.hasCustom = false;
          this.canModeBeOptimized = {};
          this.TRACE_INIT = (phaseDesc, phaseImpl) => {
            if (this.traceInitPerf === true) {
              this.traceInitIndent++;
              const indent = new Array(this.traceInitIndent + 1).join("	");
              if (this.traceInitIndent < this.traceInitMaxIdent) {
                console.log(`${indent}--> <${phaseDesc}>`);
              }
              const { time: time4, value: value2 } = timer2(phaseImpl);
              const traceMethod = time4 > 10 ? console.warn : console.log;
              if (this.traceInitIndent < this.traceInitMaxIdent) {
                traceMethod(`${indent}<-- <${phaseDesc}> time: ${time4}ms`);
              }
              this.traceInitIndent--;
              return value2;
            } else {
              return phaseImpl();
            }
          };
          if (typeof config3 === "boolean") {
            throw Error("The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported");
          }
          this.config = assign_default({}, DEFAULT_LEXER_CONFIG, config3);
          const traceInitVal = this.config.traceInitPerf;
          if (traceInitVal === true) {
            this.traceInitMaxIdent = Infinity;
            this.traceInitPerf = true;
          } else if (typeof traceInitVal === "number") {
            this.traceInitMaxIdent = traceInitVal;
            this.traceInitPerf = true;
          }
          this.traceInitIndent = -1;
          this.TRACE_INIT("Lexer Constructor", () => {
            let actualDefinition;
            let hasOnlySingleMode = true;
            this.TRACE_INIT("Lexer Config handling", () => {
              if (this.config.lineTerminatorsPattern === DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {
                this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester;
              } else {
                if (this.config.lineTerminatorCharacters === DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {
                  throw Error("Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n	For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS");
                }
              }
              if (config3.safeMode && config3.ensureOptimizations) {
                throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');
              }
              this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking);
              this.trackEndLines = /full/i.test(this.config.positionTracking);
              if (isArray_default2(lexerDefinition)) {
                actualDefinition = {
                  modes: { defaultMode: clone_default3(lexerDefinition) },
                  defaultMode: DEFAULT_MODE
                };
              } else {
                hasOnlySingleMode = false;
                actualDefinition = clone_default3(lexerDefinition);
              }
            });
            if (this.config.skipValidations === false) {
              this.TRACE_INIT("performRuntimeChecks", () => {
                this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(performRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters));
              });
              this.TRACE_INIT("performWarningRuntimeChecks", () => {
                this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(performWarningRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters));
              });
            }
            actualDefinition.modes = actualDefinition.modes ? actualDefinition.modes : {};
            forEach_default2(actualDefinition.modes, (currModeValue, currModeName) => {
              actualDefinition.modes[currModeName] = reject_default(currModeValue, (currTokType) => isUndefined_default2(currTokType));
            });
            const allModeNames = keys_default2(actualDefinition.modes);
            forEach_default2(actualDefinition.modes, (currModDef, currModName) => {
              this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {
                this.modes.push(currModName);
                if (this.config.skipValidations === false) {
                  this.TRACE_INIT(`validatePatterns`, () => {
                    this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(validatePatterns(currModDef, allModeNames));
                  });
                }
                if (isEmpty_default2(this.lexerDefinitionErrors)) {
                  augmentTokenTypes(currModDef);
                  let currAnalyzeResult;
                  this.TRACE_INIT(`analyzeTokenTypes`, () => {
                    currAnalyzeResult = analyzeTokenTypes(currModDef, {
                      lineTerminatorCharacters: this.config.lineTerminatorCharacters,
                      positionTracking: config3.positionTracking,
                      ensureOptimizations: config3.ensureOptimizations,
                      safeMode: config3.safeMode,
                      tracer: this.TRACE_INIT
                    });
                  });
                  this.patternIdxToConfig[currModName] = currAnalyzeResult.patternIdxToConfig;
                  this.charCodeToPatternIdxToConfig[currModName] = currAnalyzeResult.charCodeToPatternIdxToConfig;
                  this.emptyGroups = assign_default({}, this.emptyGroups, currAnalyzeResult.emptyGroups);
                  this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom;
                  this.canModeBeOptimized[currModName] = currAnalyzeResult.canBeOptimized;
                }
              });
            });
            this.defaultMode = actualDefinition.defaultMode;
            if (!isEmpty_default2(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) {
              const allErrMessages = map_default2(this.lexerDefinitionErrors, (error3) => {
                return error3.message;
              });
              const allErrMessagesString = allErrMessages.join("-----------------------\n");
              throw new Error("Errors detected in definition of Lexer:\n" + allErrMessagesString);
            }
            forEach_default2(this.lexerDefinitionWarning, (warningDescriptor) => {
              PRINT_WARNING(warningDescriptor.message);
            });
            this.TRACE_INIT("Choosing sub-methods implementations", () => {
              if (hasOnlySingleMode) {
                this.handleModes = noop_default3;
              }
              if (this.trackStartLines === false) {
                this.computeNewColumn = identity_default5;
              }
              if (this.trackEndLines === false) {
                this.updateTokenEndLineColumnLocation = noop_default3;
              }
              if (/full/i.test(this.config.positionTracking)) {
                this.createTokenInstance = this.createFullToken;
              } else if (/onlyStart/i.test(this.config.positionTracking)) {
                this.createTokenInstance = this.createStartOnlyToken;
              } else if (/onlyOffset/i.test(this.config.positionTracking)) {
                this.createTokenInstance = this.createOffsetOnlyToken;
              } else {
                throw Error(`Invalid <positionTracking> config option: "${this.config.positionTracking}"`);
              }
              if (this.hasCustom) {
                this.addToken = this.addTokenUsingPush;
                this.handlePayload = this.handlePayloadWithCustom;
              } else {
                this.addToken = this.addTokenUsingMemberAccess;
                this.handlePayload = this.handlePayloadNoCustom;
              }
            });
            this.TRACE_INIT("Failed Optimization Warnings", () => {
              const unOptimizedModes = reduce_default2(this.canModeBeOptimized, (cannotBeOptimized, canBeOptimized, modeName) => {
                if (canBeOptimized === false) {
                  cannotBeOptimized.push(modeName);
                }
                return cannotBeOptimized;
              }, []);
              if (config3.ensureOptimizations && !isEmpty_default2(unOptimizedModes)) {
                throw Error(`Lexer Modes: < ${unOptimizedModes.join(", ")} > cannot be optimized.
	 Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.
	 Or inspect the console log for details on how to resolve these issues.`);
              }
            });
            this.TRACE_INIT("clearRegExpParserCache", () => {
              clearRegExpParserCache();
            });
            this.TRACE_INIT("toFastProperties", () => {
              toFastProperties(this);
            });
          });
        }
        tokenize(text4, initialMode = this.defaultMode) {
          if (!isEmpty_default2(this.lexerDefinitionErrors)) {
            const allErrMessages = map_default2(this.lexerDefinitionErrors, (error3) => {
              return error3.message;
            });
            const allErrMessagesString = allErrMessages.join("-----------------------\n");
            throw new Error("Unable to Tokenize because Errors detected in definition of Lexer:\n" + allErrMessagesString);
          }
          return this.tokenizeInternal(text4, initialMode);
        }
        // There is quite a bit of duplication between this and "tokenizeInternalLazy"
        // This is intentional due to performance considerations.
        // this method also used quite a bit of `!` none null assertions because it is too optimized
        // for `tsc` to always understand it is "safe"
        tokenizeInternal(text4, initialMode) {
          let i2, j3, k2, matchAltImage, longerAlt, matchedImage, payload, altPayload, imageLength, group2, tokType, newToken, errLength, msg, match3;
          const orgText = text4;
          const orgLength = orgText.length;
          let offset = 0;
          let matchedTokensIndex = 0;
          const guessedNumberOfTokens = this.hasCustom ? 0 : Math.floor(text4.length / 10);
          const matchedTokens = new Array(guessedNumberOfTokens);
          const errors = [];
          let line2 = this.trackStartLines ? 1 : void 0;
          let column2 = this.trackStartLines ? 1 : void 0;
          const groups = cloneEmptyGroups(this.emptyGroups);
          const trackLines = this.trackStartLines;
          const lineTerminatorPattern = this.config.lineTerminatorsPattern;
          let currModePatternsLength = 0;
          let patternIdxToConfig = [];
          let currCharCodeToPatternIdxToConfig = [];
          const modeStack = [];
          const emptyArray = [];
          Object.freeze(emptyArray);
          let isOptimizedMode = false;
          const pop_mode = /* @__PURE__ */ __name2((popToken) => {
            if (modeStack.length === 1 && // if we have both a POP_MODE and a PUSH_MODE this is in-fact a "transition"
            // So no error should occur.
            popToken.tokenType.PUSH_MODE === void 0) {
              const msg2 = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken);
              errors.push({
                offset: popToken.startOffset,
                line: popToken.startLine,
                column: popToken.startColumn,
                length: popToken.image.length,
                message: msg2
              });
            } else {
              modeStack.pop();
              const newMode = last_default2(modeStack);
              patternIdxToConfig = this.patternIdxToConfig[newMode];
              currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode];
              currModePatternsLength = patternIdxToConfig.length;
              const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false;
              if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {
                isOptimizedMode = true;
              } else {
                isOptimizedMode = false;
              }
            }
          }, "pop_mode");
          function push_mode(newMode) {
            modeStack.push(newMode);
            currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode];
            patternIdxToConfig = this.patternIdxToConfig[newMode];
            currModePatternsLength = patternIdxToConfig.length;
            currModePatternsLength = patternIdxToConfig.length;
            const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false;
            if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {
              isOptimizedMode = true;
            } else {
              isOptimizedMode = false;
            }
          }
          __name(push_mode, "push_mode");
          __name2(push_mode, "push_mode");
          push_mode.call(this, initialMode);
          let currConfig;
          const recoveryEnabled = this.config.recoveryEnabled;
          while (offset < orgLength) {
            matchedImage = null;
            imageLength = -1;
            const nextCharCode = orgText.charCodeAt(offset);
            let chosenPatternIdxToConfig;
            if (isOptimizedMode) {
              const optimizedCharIdx = charCodeToOptimizedIndex(nextCharCode);
              const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx];
              chosenPatternIdxToConfig = possiblePatterns !== void 0 ? possiblePatterns : emptyArray;
            } else {
              chosenPatternIdxToConfig = patternIdxToConfig;
            }
            const chosenPatternsLength = chosenPatternIdxToConfig.length;
            for (i2 = 0; i2 < chosenPatternsLength; i2++) {
              currConfig = chosenPatternIdxToConfig[i2];
              const currPattern = currConfig.pattern;
              payload = null;
              const singleCharCode = currConfig.short;
              if (singleCharCode !== false) {
                if (nextCharCode === singleCharCode) {
                  imageLength = 1;
                  matchedImage = currPattern;
                }
              } else if (currConfig.isCustom === true) {
                match3 = currPattern.exec(orgText, offset, matchedTokens, groups);
                if (match3 !== null) {
                  matchedImage = match3[0];
                  imageLength = matchedImage.length;
                  if (match3.payload !== void 0) {
                    payload = match3.payload;
                  }
                } else {
                  matchedImage = null;
                }
              } else {
                currPattern.lastIndex = offset;
                imageLength = this.matchLength(currPattern, text4, offset);
              }
              if (imageLength !== -1) {
                longerAlt = currConfig.longerAlt;
                if (longerAlt !== void 0) {
                  matchedImage = text4.substring(offset, offset + imageLength);
                  const longerAltLength = longerAlt.length;
                  for (k2 = 0; k2 < longerAltLength; k2++) {
                    const longerAltConfig = patternIdxToConfig[longerAlt[k2]];
                    const longerAltPattern = longerAltConfig.pattern;
                    altPayload = null;
                    if (longerAltConfig.isCustom === true) {
                      match3 = longerAltPattern.exec(orgText, offset, matchedTokens, groups);
                      if (match3 !== null) {
                        matchAltImage = match3[0];
                        if (match3.payload !== void 0) {
                          altPayload = match3.payload;
                        }
                      } else {
                        matchAltImage = null;
                      }
                    } else {
                      longerAltPattern.lastIndex = offset;
                      matchAltImage = this.match(longerAltPattern, text4, offset);
                    }
                    if (matchAltImage && matchAltImage.length > matchedImage.length) {
                      matchedImage = matchAltImage;
                      imageLength = matchAltImage.length;
                      payload = altPayload;
                      currConfig = longerAltConfig;
                      break;
                    }
                  }
                }
                break;
              }
            }
            if (imageLength !== -1) {
              group2 = currConfig.group;
              if (group2 !== void 0) {
                matchedImage = matchedImage !== null ? matchedImage : text4.substring(offset, offset + imageLength);
                tokType = currConfig.tokenTypeIdx;
                newToken = this.createTokenInstance(matchedImage, offset, tokType, currConfig.tokenType, line2, column2, imageLength);
                this.handlePayload(newToken, payload);
                if (group2 === false) {
                  matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken);
                } else {
                  groups[group2].push(newToken);
                }
              }
              if (trackLines === true && currConfig.canLineTerminator === true) {
                let numOfLTsInMatch = 0;
                let foundTerminator;
                let lastLTEndOffset;
                lineTerminatorPattern.lastIndex = 0;
                do {
                  matchedImage = matchedImage !== null ? matchedImage : text4.substring(offset, offset + imageLength);
                  foundTerminator = lineTerminatorPattern.test(matchedImage);
                  if (foundTerminator === true) {
                    lastLTEndOffset = lineTerminatorPattern.lastIndex - 1;
                    numOfLTsInMatch++;
                  }
                } while (foundTerminator === true);
                if (numOfLTsInMatch !== 0) {
                  line2 = line2 + numOfLTsInMatch;
                  column2 = imageLength - lastLTEndOffset;
                  this.updateTokenEndLineColumnLocation(newToken, group2, lastLTEndOffset, numOfLTsInMatch, line2, column2, imageLength);
                } else {
                  column2 = this.computeNewColumn(column2, imageLength);
                }
              } else {
                column2 = this.computeNewColumn(column2, imageLength);
              }
              offset = offset + imageLength;
              this.handleModes(currConfig, pop_mode, push_mode, newToken);
            } else {
              const errorStartOffset = offset;
              const errorLine = line2;
              const errorColumn = column2;
              let foundResyncPoint = recoveryEnabled === false;
              while (foundResyncPoint === false && offset < orgLength) {
                offset++;
                for (j3 = 0; j3 < currModePatternsLength; j3++) {
                  const currConfig2 = patternIdxToConfig[j3];
                  const currPattern = currConfig2.pattern;
                  const singleCharCode = currConfig2.short;
                  if (singleCharCode !== false) {
                    if (orgText.charCodeAt(offset) === singleCharCode) {
                      foundResyncPoint = true;
                    }
                  } else if (currConfig2.isCustom === true) {
                    foundResyncPoint = currPattern.exec(orgText, offset, matchedTokens, groups) !== null;
                  } else {
                    currPattern.lastIndex = offset;
                    foundResyncPoint = currPattern.exec(text4) !== null;
                  }
                  if (foundResyncPoint === true) {
                    break;
                  }
                }
              }
              errLength = offset - errorStartOffset;
              column2 = this.computeNewColumn(column2, errLength);
              msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn, last_default2(modeStack));
              errors.push({
                offset: errorStartOffset,
                line: errorLine,
                column: errorColumn,
                length: errLength,
                message: msg
              });
              if (recoveryEnabled === false) {
                break;
              }
            }
          }
          if (!this.hasCustom) {
            matchedTokens.length = matchedTokensIndex;
          }
          return {
            tokens: matchedTokens,
            groups,
            errors
          };
        }
        handleModes(config3, pop_mode, push_mode, newToken) {
          if (config3.pop === true) {
            const pushMode = config3.push;
            pop_mode(newToken);
            if (pushMode !== void 0) {
              push_mode.call(this, pushMode);
            }
          } else if (config3.push !== void 0) {
            push_mode.call(this, config3.push);
          }
        }
        // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler
        updateTokenEndLineColumnLocation(newToken, group2, lastLTIdx, numOfLTsInMatch, line2, column2, imageLength) {
          let lastCharIsLT, fixForEndingInLT;
          if (group2 !== void 0) {
            lastCharIsLT = lastLTIdx === imageLength - 1;
            fixForEndingInLT = lastCharIsLT ? -1 : 0;
            if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {
              newToken.endLine = line2 + fixForEndingInLT;
              newToken.endColumn = column2 - 1 + -fixForEndingInLT;
            }
          }
        }
        computeNewColumn(oldColumn, imageLength) {
          return oldColumn + imageLength;
        }
        createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) {
          return {
            image,
            startOffset,
            tokenTypeIdx,
            tokenType
          };
        }
        createStartOnlyToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {
          return {
            image,
            startOffset,
            startLine,
            startColumn,
            tokenTypeIdx,
            tokenType
          };
        }
        createFullToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {
          return {
            image,
            startOffset,
            endOffset: startOffset + imageLength - 1,
            startLine,
            endLine: startLine,
            startColumn,
            endColumn: startColumn + imageLength - 1,
            tokenTypeIdx,
            tokenType
          };
        }
        addTokenUsingPush(tokenVector, index, tokenToAdd) {
          tokenVector.push(tokenToAdd);
          return index;
        }
        addTokenUsingMemberAccess(tokenVector, index, tokenToAdd) {
          tokenVector[index] = tokenToAdd;
          index++;
          return index;
        }
        handlePayloadNoCustom(token2, payload) {
        }
        handlePayloadWithCustom(token2, payload) {
          if (payload !== null) {
            token2.payload = payload;
          }
        }
        match(pattern, text4, offset) {
          const found = pattern.test(text4);
          if (found === true) {
            return text4.substring(offset, pattern.lastIndex);
          }
          return null;
        }
        matchLength(pattern, text4, offset) {
          const found = pattern.test(text4);
          if (found === true) {
            return pattern.lastIndex - offset;
          }
          return -1;
        }
      };
      Lexer2.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it will be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.";
      Lexer2.NA = /NOT_APPLICABLE/;
      __name(tokenLabel2, "tokenLabel2");
      __name2(tokenLabel2, "tokenLabel");
      __name(hasTokenLabel2, "hasTokenLabel2");
      __name2(hasTokenLabel2, "hasTokenLabel");
      PARENT = "parent";
      CATEGORIES = "categories";
      LABEL = "label";
      GROUP = "group";
      PUSH_MODE = "push_mode";
      POP_MODE = "pop_mode";
      LONGER_ALT = "longer_alt";
      LINE_BREAKS = "line_breaks";
      START_CHARS_HINT = "start_chars_hint";
      __name(createToken, "createToken");
      __name2(createToken, "createToken");
      __name(createTokenInternal, "createTokenInternal");
      __name2(createTokenInternal, "createTokenInternal");
      EOF = createToken({ name: "EOF", pattern: Lexer2.NA });
      augmentTokenTypes([EOF]);
      __name(createTokenInstance, "createTokenInstance");
      __name2(createTokenInstance, "createTokenInstance");
      __name(tokenMatcher, "tokenMatcher");
      __name2(tokenMatcher, "tokenMatcher");
      defaultParserErrorProvider = {
        buildMismatchTokenMessage({ expected, actual, previous, ruleName }) {
          const hasLabel = hasTokenLabel2(expected);
          const expectedMsg = hasLabel ? `--> ${tokenLabel2(expected)} <--` : `token of type --> ${expected.name} <--`;
          const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`;
          return msg;
        },
        buildNotAllInputParsedMessage({ firstRedundant, ruleName }) {
          return "Redundant input, expecting EOF but found: " + firstRedundant.image;
        },
        buildNoViableAltMessage({ expectedPathsPerAlt, actual, previous, customUserDescription, ruleName }) {
          const errPrefix = "Expecting: ";
          const actualText = head_default(actual).image;
          const errSuffix = "\nbut found: '" + actualText + "'";
          if (customUserDescription) {
            return errPrefix + customUserDescription + errSuffix;
          } else {
            const allLookAheadPaths = reduce_default2(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), []);
            const nextValidTokenSequences = map_default2(allLookAheadPaths, (currPath) => `[${map_default2(currPath, (currTokenType) => tokenLabel2(currTokenType)).join(", ")}]`);
            const nextValidSequenceItems = map_default2(nextValidTokenSequences, (itemMsg, idx) => `  ${idx + 1}. ${itemMsg}`);
            const calculatedDescription = `one of these possible Token sequences:
${nextValidSequenceItems.join("\n")}`;
            return errPrefix + calculatedDescription + errSuffix;
          }
        },
        buildEarlyExitMessage({ expectedIterationPaths, actual, customUserDescription, ruleName }) {
          const errPrefix = "Expecting: ";
          const actualText = head_default(actual).image;
          const errSuffix = "\nbut found: '" + actualText + "'";
          if (customUserDescription) {
            return errPrefix + customUserDescription + errSuffix;
          } else {
            const nextValidTokenSequences = map_default2(expectedIterationPaths, (currPath) => `[${map_default2(currPath, (currTokenType) => tokenLabel2(currTokenType)).join(",")}]`);
            const calculatedDescription = `expecting at least one iteration which starts with one of these possible Token sequences::
  <${nextValidTokenSequences.join(" ,")}>`;
            return errPrefix + calculatedDescription + errSuffix;
          }
        }
      };
      Object.freeze(defaultParserErrorProvider);
      defaultGrammarResolverErrorProvider = {
        buildRuleNotFoundError(topLevelRule, undefinedRule) {
          const msg = "Invalid grammar, reference to a rule which is not defined: ->" + undefinedRule.nonTerminalName + "<-\ninside top level rule: ->" + topLevelRule.name + "<-";
          return msg;
        }
      };
      defaultGrammarValidatorErrorProvider = {
        buildDuplicateFoundError(topLevelRule, duplicateProds) {
          function getExtraProductionArgument2(prod) {
            if (prod instanceof Terminal) {
              return prod.terminalType.name;
            } else if (prod instanceof NonTerminal) {
              return prod.nonTerminalName;
            } else {
              return "";
            }
          }
          __name(getExtraProductionArgument2, "getExtraProductionArgument2");
          __name2(getExtraProductionArgument2, "getExtraProductionArgument");
          const topLevelName = topLevelRule.name;
          const duplicateProd = head_default(duplicateProds);
          const index = duplicateProd.idx;
          const dslName = getProductionDslName(duplicateProd);
          const extraArgument = getExtraProductionArgument2(duplicateProd);
          const hasExplicitIndex = index > 0;
          let msg = `->${dslName}${hasExplicitIndex ? index : ""}<- ${extraArgument ? `with argument: ->${extraArgument}<-` : ""}
                  appears more than once (${duplicateProds.length} times) in the top level rule: ->${topLevelName}<-.                  
                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES 
                  `;
          msg = msg.replace(/[ \t]+/g, " ");
          msg = msg.replace(/\s\s+/g, "\n");
          return msg;
        },
        buildNamespaceConflictError(rule) {
          const errMsg = `Namespace conflict found in grammar.
The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>.
To resolve this make sure each Terminal and Non-Terminal names are unique
This is easy to accomplish by using the convention that Terminal names start with an uppercase letter
and Non-Terminal names start with a lower case letter.`;
          return errMsg;
        },
        buildAlternationPrefixAmbiguityError(options2) {
          const pathMsg = map_default2(options2.prefixPath, (currTok) => tokenLabel2(currTok)).join(", ");
          const occurrence = options2.alternation.idx === 0 ? "" : options2.alternation.idx;
          const errMsg = `Ambiguous alternatives: <${options2.ambiguityIndices.join(" ,")}> due to common lookahead prefix
in <OR${occurrence}> inside <${options2.topLevelRule.name}> Rule,
<${pathMsg}> may appears as a prefix path in all these alternatives.
See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX
For Further details.`;
          return errMsg;
        },
        buildAlternationAmbiguityError(options2) {
          const occurrence = options2.alternation.idx === 0 ? "" : options2.alternation.idx;
          const isEmptyPath = options2.prefixPath.length === 0;
          let currMessage = `Ambiguous Alternatives Detected: <${options2.ambiguityIndices.join(" ,")}> in <OR${occurrence}> inside <${options2.topLevelRule.name}> Rule,
`;
          if (isEmptyPath) {
            currMessage += `These alternatives are all empty (match no tokens), making them indistinguishable.
Only the last alternative may be empty.
`;
          } else {
            const pathMsg = map_default2(options2.prefixPath, (currtok) => tokenLabel2(currtok)).join(", ");
            currMessage += `<${pathMsg}> may appears as a prefix path in all these alternatives.
`;
          }
          currMessage += `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
For Further details.`;
          return currMessage;
        },
        buildEmptyRepetitionError(options2) {
          let dslName = getProductionDslName(options2.repetition);
          if (options2.repetition.idx !== 0) {
            dslName += options2.repetition.idx;
          }
          const errMsg = `The repetition <${dslName}> within Rule <${options2.topLevelRule.name}> can never consume any tokens.
This could lead to an infinite loop.`;
          return errMsg;
        },
        // TODO: remove - `errors_public` from nyc.config.js exclude
        //       once this method is fully removed from this file
        buildTokenNameError(options2) {
          return "deprecated";
        },
        buildEmptyAlternationError(options2) {
          const errMsg = `Ambiguous empty alternative: <${options2.emptyChoiceIdx + 1}> in <OR${options2.alternation.idx}> inside <${options2.topLevelRule.name}> Rule.
Only the last alternative may be an empty alternative.`;
          return errMsg;
        },
        buildTooManyAlternativesError(options2) {
          const errMsg = `An Alternation cannot have more than 256 alternatives:
<OR${options2.alternation.idx}> inside <${options2.topLevelRule.name}> Rule.
 has ${options2.alternation.definition.length + 1} alternatives.`;
          return errMsg;
        },
        buildLeftRecursionError(options2) {
          const ruleName = options2.topLevelRule.name;
          const pathNames = map_default2(options2.leftRecursionPath, (currRule) => currRule.name);
          const leftRecursivePath = `${ruleName} --> ${pathNames.concat([ruleName]).join(" --> ")}`;
          const errMsg = `Left Recursion found in grammar.
rule: <${ruleName}> can be invoked from itself (directly or indirectly)
without consuming any Tokens. The grammar path that causes this is: 
 ${leftRecursivePath}
 To fix this refactor your grammar to remove the left recursion.
see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`;
          return errMsg;
        },
        // TODO: remove - `errors_public` from nyc.config.js exclude
        //       once this method is fully removed from this file
        buildInvalidRuleNameError(options2) {
          return "deprecated";
        },
        buildDuplicateRuleNameError(options2) {
          let ruleName;
          if (options2.topLevelRule instanceof Rule) {
            ruleName = options2.topLevelRule.name;
          } else {
            ruleName = options2.topLevelRule;
          }
          const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options2.grammarName}<-`;
          return errMsg;
        }
      };
      __name(resolveGrammar, "resolveGrammar");
      __name2(resolveGrammar, "resolveGrammar");
      GastRefResolverVisitor = class extends GAstVisitor {
        static {
          __name(this, "GastRefResolverVisitor");
        }
        static {
          __name2(this, "GastRefResolverVisitor");
        }
        constructor(nameToTopRule, errMsgProvider) {
          super();
          this.nameToTopRule = nameToTopRule;
          this.errMsgProvider = errMsgProvider;
          this.errors = [];
        }
        resolveRefs() {
          forEach_default2(values_default2(this.nameToTopRule), (prod) => {
            this.currTopLevel = prod;
            prod.accept(this);
          });
        }
        visitNonTerminal(node2) {
          const ref = this.nameToTopRule[node2.nonTerminalName];
          if (!ref) {
            const msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node2);
            this.errors.push({
              message: msg,
              type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,
              ruleName: this.currTopLevel.name,
              unresolvedRefName: node2.nonTerminalName
            });
          } else {
            node2.referencedRule = ref;
          }
        }
      };
      AbstractNextPossibleTokensWalker = class extends RestWalker {
        static {
          __name(this, "AbstractNextPossibleTokensWalker");
        }
        static {
          __name2(this, "AbstractNextPossibleTokensWalker");
        }
        constructor(topProd, path4) {
          super();
          this.topProd = topProd;
          this.path = path4;
          this.possibleTokTypes = [];
          this.nextProductionName = "";
          this.nextProductionOccurrence = 0;
          this.found = false;
          this.isAtEndOfPath = false;
        }
        startWalking() {
          this.found = false;
          if (this.path.ruleStack[0] !== this.topProd.name) {
            throw Error("The path does not start with the walker's top Rule!");
          }
          this.ruleStack = clone_default3(this.path.ruleStack).reverse();
          this.occurrenceStack = clone_default3(this.path.occurrenceStack).reverse();
          this.ruleStack.pop();
          this.occurrenceStack.pop();
          this.updateExpectedNext();
          this.walk(this.topProd);
          return this.possibleTokTypes;
        }
        walk(prod, prevRest = []) {
          if (!this.found) {
            super.walk(prod, prevRest);
          }
        }
        walkProdRef(refProd, currRest, prevRest) {
          if (refProd.referencedRule.name === this.nextProductionName && refProd.idx === this.nextProductionOccurrence) {
            const fullRest = currRest.concat(prevRest);
            this.updateExpectedNext();
            this.walk(refProd.referencedRule, fullRest);
          }
        }
        updateExpectedNext() {
          if (isEmpty_default2(this.ruleStack)) {
            this.nextProductionName = "";
            this.nextProductionOccurrence = 0;
            this.isAtEndOfPath = true;
          } else {
            this.nextProductionName = this.ruleStack.pop();
            this.nextProductionOccurrence = this.occurrenceStack.pop();
          }
        }
      };
      NextAfterTokenWalker = class extends AbstractNextPossibleTokensWalker {
        static {
          __name(this, "NextAfterTokenWalker");
        }
        static {
          __name2(this, "NextAfterTokenWalker");
        }
        constructor(topProd, path4) {
          super(topProd, path4);
          this.path = path4;
          this.nextTerminalName = "";
          this.nextTerminalOccurrence = 0;
          this.nextTerminalName = this.path.lastTok.name;
          this.nextTerminalOccurrence = this.path.lastTokOccurrence;
        }
        walkTerminal(terminal, currRest, prevRest) {
          if (this.isAtEndOfPath && terminal.terminalType.name === this.nextTerminalName && terminal.idx === this.nextTerminalOccurrence && !this.found) {
            const fullRest = currRest.concat(prevRest);
            const restProd = new Alternative({ definition: fullRest });
            this.possibleTokTypes = first2(restProd);
            this.found = true;
          }
        }
      };
      AbstractNextTerminalAfterProductionWalker = class extends RestWalker {
        static {
          __name(this, "AbstractNextTerminalAfterProductionWalker");
        }
        static {
          __name2(this, "AbstractNextTerminalAfterProductionWalker");
        }
        constructor(topRule, occurrence) {
          super();
          this.topRule = topRule;
          this.occurrence = occurrence;
          this.result = {
            token: void 0,
            occurrence: void 0,
            isEndOfRule: void 0
          };
        }
        startWalking() {
          this.walk(this.topRule);
          return this.result;
        }
      };
      NextTerminalAfterManyWalker = class extends AbstractNextTerminalAfterProductionWalker {
        static {
          __name(this, "NextTerminalAfterManyWalker");
        }
        static {
          __name2(this, "NextTerminalAfterManyWalker");
        }
        walkMany(manyProd, currRest, prevRest) {
          if (manyProd.idx === this.occurrence) {
            const firstAfterMany = head_default(currRest.concat(prevRest));
            this.result.isEndOfRule = firstAfterMany === void 0;
            if (firstAfterMany instanceof Terminal) {
              this.result.token = firstAfterMany.terminalType;
              this.result.occurrence = firstAfterMany.idx;
            }
          } else {
            super.walkMany(manyProd, currRest, prevRest);
          }
        }
      };
      NextTerminalAfterManySepWalker = class extends AbstractNextTerminalAfterProductionWalker {
        static {
          __name(this, "NextTerminalAfterManySepWalker");
        }
        static {
          __name2(this, "NextTerminalAfterManySepWalker");
        }
        walkManySep(manySepProd, currRest, prevRest) {
          if (manySepProd.idx === this.occurrence) {
            const firstAfterManySep = head_default(currRest.concat(prevRest));
            this.result.isEndOfRule = firstAfterManySep === void 0;
            if (firstAfterManySep instanceof Terminal) {
              this.result.token = firstAfterManySep.terminalType;
              this.result.occurrence = firstAfterManySep.idx;
            }
          } else {
            super.walkManySep(manySepProd, currRest, prevRest);
          }
        }
      };
      NextTerminalAfterAtLeastOneWalker = class extends AbstractNextTerminalAfterProductionWalker {
        static {
          __name(this, "NextTerminalAfterAtLeastOneWalker");
        }
        static {
          __name2(this, "NextTerminalAfterAtLeastOneWalker");
        }
        walkAtLeastOne(atLeastOneProd, currRest, prevRest) {
          if (atLeastOneProd.idx === this.occurrence) {
            const firstAfterAtLeastOne = head_default(currRest.concat(prevRest));
            this.result.isEndOfRule = firstAfterAtLeastOne === void 0;
            if (firstAfterAtLeastOne instanceof Terminal) {
              this.result.token = firstAfterAtLeastOne.terminalType;
              this.result.occurrence = firstAfterAtLeastOne.idx;
            }
          } else {
            super.walkAtLeastOne(atLeastOneProd, currRest, prevRest);
          }
        }
      };
      NextTerminalAfterAtLeastOneSepWalker = class extends AbstractNextTerminalAfterProductionWalker {
        static {
          __name(this, "NextTerminalAfterAtLeastOneSepWalker");
        }
        static {
          __name2(this, "NextTerminalAfterAtLeastOneSepWalker");
        }
        walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest) {
          if (atleastOneSepProd.idx === this.occurrence) {
            const firstAfterfirstAfterAtLeastOneSep = head_default(currRest.concat(prevRest));
            this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === void 0;
            if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {
              this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType;
              this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx;
            }
          } else {
            super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest);
          }
        }
      };
      __name(possiblePathsFrom, "possiblePathsFrom");
      __name2(possiblePathsFrom, "possiblePathsFrom");
      __name(nextPossibleTokensAfter, "nextPossibleTokensAfter");
      __name2(nextPossibleTokensAfter, "nextPossibleTokensAfter");
      __name(expandTopLevelRule, "expandTopLevelRule");
      __name2(expandTopLevelRule, "expandTopLevelRule");
      (function(PROD_TYPE2) {
        PROD_TYPE2[PROD_TYPE2["OPTION"] = 0] = "OPTION";
        PROD_TYPE2[PROD_TYPE2["REPETITION"] = 1] = "REPETITION";
        PROD_TYPE2[PROD_TYPE2["REPETITION_MANDATORY"] = 2] = "REPETITION_MANDATORY";
        PROD_TYPE2[PROD_TYPE2["REPETITION_MANDATORY_WITH_SEPARATOR"] = 3] = "REPETITION_MANDATORY_WITH_SEPARATOR";
        PROD_TYPE2[PROD_TYPE2["REPETITION_WITH_SEPARATOR"] = 4] = "REPETITION_WITH_SEPARATOR";
        PROD_TYPE2[PROD_TYPE2["ALTERNATION"] = 5] = "ALTERNATION";
      })(PROD_TYPE || (PROD_TYPE = {}));
      __name(getProdType, "getProdType");
      __name2(getProdType, "getProdType");
      __name(getLookaheadPaths, "getLookaheadPaths");
      __name2(getLookaheadPaths, "getLookaheadPaths");
      __name(buildLookaheadFuncForOr, "buildLookaheadFuncForOr");
      __name2(buildLookaheadFuncForOr, "buildLookaheadFuncForOr");
      __name(buildLookaheadFuncForOptionalProd, "buildLookaheadFuncForOptionalProd");
      __name2(buildLookaheadFuncForOptionalProd, "buildLookaheadFuncForOptionalProd");
      __name(buildAlternativesLookAheadFunc, "buildAlternativesLookAheadFunc");
      __name2(buildAlternativesLookAheadFunc, "buildAlternativesLookAheadFunc");
      __name(buildSingleAlternativeLookaheadFunction, "buildSingleAlternativeLookaheadFunction");
      __name2(buildSingleAlternativeLookaheadFunction, "buildSingleAlternativeLookaheadFunction");
      RestDefinitionFinderWalker = class extends RestWalker {
        static {
          __name(this, "RestDefinitionFinderWalker");
        }
        static {
          __name2(this, "RestDefinitionFinderWalker");
        }
        constructor(topProd, targetOccurrence, targetProdType) {
          super();
          this.topProd = topProd;
          this.targetOccurrence = targetOccurrence;
          this.targetProdType = targetProdType;
        }
        startWalking() {
          this.walk(this.topProd);
          return this.restDef;
        }
        checkIsTarget(node2, expectedProdType, currRest, prevRest) {
          if (node2.idx === this.targetOccurrence && this.targetProdType === expectedProdType) {
            this.restDef = currRest.concat(prevRest);
            return true;
          }
          return false;
        }
        walkOption(optionProd, currRest, prevRest) {
          if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {
            super.walkOption(optionProd, currRest, prevRest);
          }
        }
        walkAtLeastOne(atLeastOneProd, currRest, prevRest) {
          if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {
            super.walkOption(atLeastOneProd, currRest, prevRest);
          }
        }
        walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {
          if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {
            super.walkOption(atLeastOneSepProd, currRest, prevRest);
          }
        }
        walkMany(manyProd, currRest, prevRest) {
          if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {
            super.walkOption(manyProd, currRest, prevRest);
          }
        }
        walkManySep(manySepProd, currRest, prevRest) {
          if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {
            super.walkOption(manySepProd, currRest, prevRest);
          }
        }
      };
      InsideDefinitionFinderVisitor = class extends GAstVisitor {
        static {
          __name(this, "InsideDefinitionFinderVisitor");
        }
        static {
          __name2(this, "InsideDefinitionFinderVisitor");
        }
        constructor(targetOccurrence, targetProdType, targetRef) {
          super();
          this.targetOccurrence = targetOccurrence;
          this.targetProdType = targetProdType;
          this.targetRef = targetRef;
          this.result = [];
        }
        checkIsTarget(node2, expectedProdName) {
          if (node2.idx === this.targetOccurrence && this.targetProdType === expectedProdName && (this.targetRef === void 0 || node2 === this.targetRef)) {
            this.result = node2.definition;
          }
        }
        visitOption(node2) {
          this.checkIsTarget(node2, PROD_TYPE.OPTION);
        }
        visitRepetition(node2) {
          this.checkIsTarget(node2, PROD_TYPE.REPETITION);
        }
        visitRepetitionMandatory(node2) {
          this.checkIsTarget(node2, PROD_TYPE.REPETITION_MANDATORY);
        }
        visitRepetitionMandatoryWithSeparator(node2) {
          this.checkIsTarget(node2, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR);
        }
        visitRepetitionWithSeparator(node2) {
          this.checkIsTarget(node2, PROD_TYPE.REPETITION_WITH_SEPARATOR);
        }
        visitAlternation(node2) {
          this.checkIsTarget(node2, PROD_TYPE.ALTERNATION);
        }
      };
      __name(initializeArrayOfArrays, "initializeArrayOfArrays");
      __name2(initializeArrayOfArrays, "initializeArrayOfArrays");
      __name(pathToHashKeys, "pathToHashKeys");
      __name2(pathToHashKeys, "pathToHashKeys");
      __name(isUniquePrefixHash, "isUniquePrefixHash");
      __name2(isUniquePrefixHash, "isUniquePrefixHash");
      __name(lookAheadSequenceFromAlternatives, "lookAheadSequenceFromAlternatives");
      __name2(lookAheadSequenceFromAlternatives, "lookAheadSequenceFromAlternatives");
      __name(getLookaheadPathsForOr, "getLookaheadPathsForOr");
      __name2(getLookaheadPathsForOr, "getLookaheadPathsForOr");
      __name(getLookaheadPathsForOptionalProd, "getLookaheadPathsForOptionalProd");
      __name2(getLookaheadPathsForOptionalProd, "getLookaheadPathsForOptionalProd");
      __name(containsPath, "containsPath");
      __name2(containsPath, "containsPath");
      __name(isStrictPrefixOfPath, "isStrictPrefixOfPath");
      __name2(isStrictPrefixOfPath, "isStrictPrefixOfPath");
      __name(areTokenCategoriesNotUsed, "areTokenCategoriesNotUsed");
      __name2(areTokenCategoriesNotUsed, "areTokenCategoriesNotUsed");
      __name(validateLookahead, "validateLookahead");
      __name2(validateLookahead, "validateLookahead");
      __name(validateGrammar, "validateGrammar");
      __name2(validateGrammar, "validateGrammar");
      __name(validateDuplicateProductions, "validateDuplicateProductions");
      __name2(validateDuplicateProductions, "validateDuplicateProductions");
      __name(identifyProductionForDuplicates, "identifyProductionForDuplicates");
      __name2(identifyProductionForDuplicates, "identifyProductionForDuplicates");
      __name(getExtraProductionArgument, "getExtraProductionArgument");
      __name2(getExtraProductionArgument, "getExtraProductionArgument");
      OccurrenceValidationCollector = class extends GAstVisitor {
        static {
          __name(this, "OccurrenceValidationCollector");
        }
        static {
          __name2(this, "OccurrenceValidationCollector");
        }
        constructor() {
          super(...arguments);
          this.allProductions = [];
        }
        visitNonTerminal(subrule) {
          this.allProductions.push(subrule);
        }
        visitOption(option2) {
          this.allProductions.push(option2);
        }
        visitRepetitionWithSeparator(manySep) {
          this.allProductions.push(manySep);
        }
        visitRepetitionMandatory(atLeastOne) {
          this.allProductions.push(atLeastOne);
        }
        visitRepetitionMandatoryWithSeparator(atLeastOneSep) {
          this.allProductions.push(atLeastOneSep);
        }
        visitRepetition(many) {
          this.allProductions.push(many);
        }
        visitAlternation(or) {
          this.allProductions.push(or);
        }
        visitTerminal(terminal) {
          this.allProductions.push(terminal);
        }
      };
      __name(validateRuleDoesNotAlreadyExist, "validateRuleDoesNotAlreadyExist");
      __name2(validateRuleDoesNotAlreadyExist, "validateRuleDoesNotAlreadyExist");
      __name(validateRuleIsOverridden, "validateRuleIsOverridden");
      __name2(validateRuleIsOverridden, "validateRuleIsOverridden");
      __name(validateNoLeftRecursion, "validateNoLeftRecursion");
      __name2(validateNoLeftRecursion, "validateNoLeftRecursion");
      __name(getFirstNoneTerminal, "getFirstNoneTerminal");
      __name2(getFirstNoneTerminal, "getFirstNoneTerminal");
      OrCollector = class extends GAstVisitor {
        static {
          __name(this, "OrCollector");
        }
        static {
          __name2(this, "OrCollector");
        }
        constructor() {
          super(...arguments);
          this.alternations = [];
        }
        visitAlternation(node2) {
          this.alternations.push(node2);
        }
      };
      __name(validateEmptyOrAlternative, "validateEmptyOrAlternative");
      __name2(validateEmptyOrAlternative, "validateEmptyOrAlternative");
      __name(validateAmbiguousAlternationAlternatives, "validateAmbiguousAlternationAlternatives");
      __name2(validateAmbiguousAlternationAlternatives, "validateAmbiguousAlternationAlternatives");
      RepetitionCollector = class extends GAstVisitor {
        static {
          __name(this, "RepetitionCollector");
        }
        static {
          __name2(this, "RepetitionCollector");
        }
        constructor() {
          super(...arguments);
          this.allProductions = [];
        }
        visitRepetitionWithSeparator(manySep) {
          this.allProductions.push(manySep);
        }
        visitRepetitionMandatory(atLeastOne) {
          this.allProductions.push(atLeastOne);
        }
        visitRepetitionMandatoryWithSeparator(atLeastOneSep) {
          this.allProductions.push(atLeastOneSep);
        }
        visitRepetition(many) {
          this.allProductions.push(many);
        }
      };
      __name(validateTooManyAlts, "validateTooManyAlts");
      __name2(validateTooManyAlts, "validateTooManyAlts");
      __name(validateSomeNonEmptyLookaheadPath, "validateSomeNonEmptyLookaheadPath");
      __name2(validateSomeNonEmptyLookaheadPath, "validateSomeNonEmptyLookaheadPath");
      __name(checkAlternativesAmbiguities, "checkAlternativesAmbiguities");
      __name2(checkAlternativesAmbiguities, "checkAlternativesAmbiguities");
      __name(checkPrefixAlternativesAmbiguities, "checkPrefixAlternativesAmbiguities");
      __name2(checkPrefixAlternativesAmbiguities, "checkPrefixAlternativesAmbiguities");
      __name(checkTerminalAndNoneTerminalsNameSpace, "checkTerminalAndNoneTerminalsNameSpace");
      __name2(checkTerminalAndNoneTerminalsNameSpace, "checkTerminalAndNoneTerminalsNameSpace");
      __name(resolveGrammar2, "resolveGrammar2");
      __name2(resolveGrammar2, "resolveGrammar");
      __name(validateGrammar2, "validateGrammar2");
      __name2(validateGrammar2, "validateGrammar");
      MISMATCHED_TOKEN_EXCEPTION = "MismatchedTokenException";
      NO_VIABLE_ALT_EXCEPTION = "NoViableAltException";
      EARLY_EXIT_EXCEPTION = "EarlyExitException";
      NOT_ALL_INPUT_PARSED_EXCEPTION = "NotAllInputParsedException";
      RECOGNITION_EXCEPTION_NAMES = [
        MISMATCHED_TOKEN_EXCEPTION,
        NO_VIABLE_ALT_EXCEPTION,
        EARLY_EXIT_EXCEPTION,
        NOT_ALL_INPUT_PARSED_EXCEPTION
      ];
      Object.freeze(RECOGNITION_EXCEPTION_NAMES);
      __name(isRecognitionException, "isRecognitionException");
      __name2(isRecognitionException, "isRecognitionException");
      RecognitionException = class extends Error {
        static {
          __name(this, "RecognitionException");
        }
        static {
          __name2(this, "RecognitionException");
        }
        constructor(message, token2) {
          super(message);
          this.token = token2;
          this.resyncedTokens = [];
          Object.setPrototypeOf(this, new.target.prototype);
          if (Error.captureStackTrace) {
            Error.captureStackTrace(this, this.constructor);
          }
        }
      };
      MismatchedTokenException = class extends RecognitionException {
        static {
          __name(this, "MismatchedTokenException");
        }
        static {
          __name2(this, "MismatchedTokenException");
        }
        constructor(message, token2, previousToken) {
          super(message, token2);
          this.previousToken = previousToken;
          this.name = MISMATCHED_TOKEN_EXCEPTION;
        }
      };
      NoViableAltException = class extends RecognitionException {
        static {
          __name(this, "NoViableAltException");
        }
        static {
          __name2(this, "NoViableAltException");
        }
        constructor(message, token2, previousToken) {
          super(message, token2);
          this.previousToken = previousToken;
          this.name = NO_VIABLE_ALT_EXCEPTION;
        }
      };
      NotAllInputParsedException = class extends RecognitionException {
        static {
          __name(this, "NotAllInputParsedException");
        }
        static {
          __name2(this, "NotAllInputParsedException");
        }
        constructor(message, token2) {
          super(message, token2);
          this.name = NOT_ALL_INPUT_PARSED_EXCEPTION;
        }
      };
      EarlyExitException = class extends RecognitionException {
        static {
          __name(this, "EarlyExitException");
        }
        static {
          __name2(this, "EarlyExitException");
        }
        constructor(message, token2, previousToken) {
          super(message, token2);
          this.previousToken = previousToken;
          this.name = EARLY_EXIT_EXCEPTION;
        }
      };
      EOF_FOLLOW_KEY = {};
      IN_RULE_RECOVERY_EXCEPTION = "InRuleRecoveryException";
      InRuleRecoveryException = class extends Error {
        static {
          __name(this, "InRuleRecoveryException");
        }
        static {
          __name2(this, "InRuleRecoveryException");
        }
        constructor(message) {
          super(message);
          this.name = IN_RULE_RECOVERY_EXCEPTION;
        }
      };
      Recoverable = class {
        static {
          __name(this, "Recoverable");
        }
        static {
          __name2(this, "Recoverable");
        }
        initRecoverable(config3) {
          this.firstAfterRepMap = {};
          this.resyncFollows = {};
          this.recoveryEnabled = has_default2(config3, "recoveryEnabled") ? config3.recoveryEnabled : DEFAULT_PARSER_CONFIG.recoveryEnabled;
          if (this.recoveryEnabled) {
            this.attemptInRepetitionRecovery = attemptInRepetitionRecovery;
          }
        }
        getTokenToInsert(tokType) {
          const tokToInsert = createTokenInstance(tokType, "", NaN, NaN, NaN, NaN, NaN, NaN);
          tokToInsert.isInsertedInRecovery = true;
          return tokToInsert;
        }
        canTokenTypeBeInsertedInRecovery(tokType) {
          return true;
        }
        canTokenTypeBeDeletedInRecovery(tokType) {
          return true;
        }
        tryInRepetitionRecovery(grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {
          const reSyncTokType = this.findReSyncTokenType();
          const savedLexerState = this.exportLexerState();
          const resyncedTokens = [];
          let passedResyncPoint = false;
          const nextTokenWithoutResync = this.LA(1);
          let currToken = this.LA(1);
          const generateErrorMessage = /* @__PURE__ */ __name2(() => {
            const previousToken = this.LA(0);
            const msg = this.errorMessageProvider.buildMismatchTokenMessage({
              expected: expectedTokType,
              actual: nextTokenWithoutResync,
              previous: previousToken,
              ruleName: this.getCurrRuleFullName()
            });
            const error3 = new MismatchedTokenException(msg, nextTokenWithoutResync, this.LA(0));
            error3.resyncedTokens = dropRight_default(resyncedTokens);
            this.SAVE_ERROR(error3);
          }, "generateErrorMessage");
          while (!passedResyncPoint) {
            if (this.tokenMatcher(currToken, expectedTokType)) {
              generateErrorMessage();
              return;
            } else if (lookAheadFunc.call(this)) {
              generateErrorMessage();
              grammarRule.apply(this, grammarRuleArgs);
              return;
            } else if (this.tokenMatcher(currToken, reSyncTokType)) {
              passedResyncPoint = true;
            } else {
              currToken = this.SKIP_TOKEN();
              this.addToResyncTokens(currToken, resyncedTokens);
            }
          }
          this.importLexerState(savedLexerState);
        }
        shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck) {
          if (notStuck === false) {
            return false;
          }
          if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {
            return false;
          }
          if (this.isBackTracking()) {
            return false;
          }
          if (this.canPerformInRuleRecovery(expectTokAfterLastMatch, this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx))) {
            return false;
          }
          return true;
        }
        // Error Recovery functionality
        getFollowsForInRuleRecovery(tokType, tokIdxInRule) {
          const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule);
          const follows = this.getNextPossibleTokenTypes(grammarPath);
          return follows;
        }
        tryInRuleRecovery(expectedTokType, follows) {
          if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {
            const tokToInsert = this.getTokenToInsert(expectedTokType);
            return tokToInsert;
          }
          if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {
            const nextTok = this.SKIP_TOKEN();
            this.consumeToken();
            return nextTok;
          }
          throw new InRuleRecoveryException("sad sad panda");
        }
        canPerformInRuleRecovery(expectedToken, follows) {
          return this.canRecoverWithSingleTokenInsertion(expectedToken, follows) || this.canRecoverWithSingleTokenDeletion(expectedToken);
        }
        canRecoverWithSingleTokenInsertion(expectedTokType, follows) {
          if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {
            return false;
          }
          if (isEmpty_default2(follows)) {
            return false;
          }
          const mismatchedTok = this.LA(1);
          const isMisMatchedTokInFollows = find_default3(follows, (possibleFollowsTokType) => {
            return this.tokenMatcher(mismatchedTok, possibleFollowsTokType);
          }) !== void 0;
          return isMisMatchedTokInFollows;
        }
        canRecoverWithSingleTokenDeletion(expectedTokType) {
          if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {
            return false;
          }
          const isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType);
          return isNextTokenWhatIsExpected;
        }
        isInCurrentRuleReSyncSet(tokenTypeIdx) {
          const followKey = this.getCurrFollowKey();
          const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey);
          return includes_default(currentRuleReSyncSet, tokenTypeIdx);
        }
        findReSyncTokenType() {
          const allPossibleReSyncTokTypes = this.flattenFollowSet();
          let nextToken = this.LA(1);
          let k2 = 2;
          while (true) {
            const foundMatch = find_default3(allPossibleReSyncTokTypes, (resyncTokType) => {
              const canMatch = tokenMatcher(nextToken, resyncTokType);
              return canMatch;
            });
            if (foundMatch !== void 0) {
              return foundMatch;
            }
            nextToken = this.LA(k2);
            k2++;
          }
        }
        getCurrFollowKey() {
          if (this.RULE_STACK.length === 1) {
            return EOF_FOLLOW_KEY;
          }
          const currRuleShortName = this.getLastExplicitRuleShortName();
          const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex();
          const prevRuleShortName = this.getPreviousExplicitRuleShortName();
          return {
            ruleName: this.shortRuleNameToFullName(currRuleShortName),
            idxInCallingRule: currRuleIdx,
            inRule: this.shortRuleNameToFullName(prevRuleShortName)
          };
        }
        buildFullFollowKeyStack() {
          const explicitRuleStack = this.RULE_STACK;
          const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK;
          return map_default2(explicitRuleStack, (ruleName, idx) => {
            if (idx === 0) {
              return EOF_FOLLOW_KEY;
            }
            return {
              ruleName: this.shortRuleNameToFullName(ruleName),
              idxInCallingRule: explicitOccurrenceStack[idx],
              inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1])
            };
          });
        }
        flattenFollowSet() {
          const followStack = map_default2(this.buildFullFollowKeyStack(), (currKey) => {
            return this.getFollowSetFromFollowKey(currKey);
          });
          return flatten_default2(followStack);
        }
        getFollowSetFromFollowKey(followKey) {
          if (followKey === EOF_FOLLOW_KEY) {
            return [EOF];
          }
          const followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule;
          return this.resyncFollows[followName];
        }
        // It does not make any sense to include a virtual EOF token in the list of resynced tokens
        // as EOF does not really exist and thus does not contain any useful information (line/column numbers)
        addToResyncTokens(token2, resyncTokens) {
          if (!this.tokenMatcher(token2, EOF)) {
            resyncTokens.push(token2);
          }
          return resyncTokens;
        }
        reSyncTo(tokType) {
          const resyncedTokens = [];
          let nextTok = this.LA(1);
          while (this.tokenMatcher(nextTok, tokType) === false) {
            nextTok = this.SKIP_TOKEN();
            this.addToResyncTokens(nextTok, resyncedTokens);
          }
          return dropRight_default(resyncedTokens);
        }
        attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {
        }
        getCurrentGrammarPath(tokType, tokIdxInRule) {
          const pathRuleStack = this.getHumanReadableRuleStack();
          const pathOccurrenceStack = clone_default3(this.RULE_OCCURRENCE_STACK);
          const grammarPath = {
            ruleStack: pathRuleStack,
            occurrenceStack: pathOccurrenceStack,
            lastTok: tokType,
            lastTokOccurrence: tokIdxInRule
          };
          return grammarPath;
        }
        getHumanReadableRuleStack() {
          return map_default2(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName));
        }
      };
      __name(attemptInRepetitionRecovery, "attemptInRepetitionRecovery");
      __name2(attemptInRepetitionRecovery, "attemptInRepetitionRecovery");
      BITS_FOR_METHOD_TYPE = 4;
      BITS_FOR_OCCURRENCE_IDX = 8;
      BITS_FOR_ALT_IDX = 8;
      OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX;
      OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX;
      MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX;
      AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX;
      MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX;
      AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX;
      __name(getKeyForAutomaticLookahead, "getKeyForAutomaticLookahead");
      __name2(getKeyForAutomaticLookahead, "getKeyForAutomaticLookahead");
      BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX;
      LLkLookaheadStrategy = class {
        static {
          __name(this, "LLkLookaheadStrategy");
        }
        static {
          __name2(this, "LLkLookaheadStrategy");
        }
        constructor(options2) {
          var _a;
          this.maxLookahead = (_a = options2 === null || options2 === void 0 ? void 0 : options2.maxLookahead) !== null && _a !== void 0 ? _a : DEFAULT_PARSER_CONFIG.maxLookahead;
        }
        validate(options2) {
          const leftRecursionErrors = this.validateNoLeftRecursion(options2.rules);
          if (isEmpty_default2(leftRecursionErrors)) {
            const emptyAltErrors = this.validateEmptyOrAlternatives(options2.rules);
            const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options2.rules, this.maxLookahead);
            const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options2.rules, this.maxLookahead);
            const allErrors = [
              ...leftRecursionErrors,
              ...emptyAltErrors,
              ...ambiguousAltsErrors,
              ...emptyRepetitionErrors
            ];
            return allErrors;
          }
          return leftRecursionErrors;
        }
        validateNoLeftRecursion(rules2) {
          return flatMap_default(rules2, (currTopRule) => validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider));
        }
        validateEmptyOrAlternatives(rules2) {
          return flatMap_default(rules2, (currTopRule) => validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider));
        }
        validateAmbiguousAlternationAlternatives(rules2, maxLookahead) {
          return flatMap_default(rules2, (currTopRule) => validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider));
        }
        validateSomeNonEmptyLookaheadPath(rules2, maxLookahead) {
          return validateSomeNonEmptyLookaheadPath(rules2, maxLookahead, defaultGrammarValidatorErrorProvider);
        }
        buildLookaheadForAlternation(options2) {
          return buildLookaheadFuncForOr(options2.prodOccurrence, options2.rule, options2.maxLookahead, options2.hasPredicates, options2.dynamicTokensEnabled, buildAlternativesLookAheadFunc);
        }
        buildLookaheadForOptional(options2) {
          return buildLookaheadFuncForOptionalProd(options2.prodOccurrence, options2.rule, options2.maxLookahead, options2.dynamicTokensEnabled, getProdType(options2.prodType), buildSingleAlternativeLookaheadFunction);
        }
      };
      LooksAhead = class {
        static {
          __name(this, "LooksAhead");
        }
        static {
          __name2(this, "LooksAhead");
        }
        initLooksAhead(config3) {
          this.dynamicTokensEnabled = has_default2(config3, "dynamicTokensEnabled") ? config3.dynamicTokensEnabled : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled;
          this.maxLookahead = has_default2(config3, "maxLookahead") ? config3.maxLookahead : DEFAULT_PARSER_CONFIG.maxLookahead;
          this.lookaheadStrategy = has_default2(config3, "lookaheadStrategy") ? config3.lookaheadStrategy : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead });
          this.lookAheadFuncsCache = /* @__PURE__ */ new Map();
        }
        preComputeLookaheadFunctions(rules2) {
          forEach_default2(rules2, (currRule) => {
            this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {
              const { alternation: alternation2, repetition: repetition2, option: option2, repetitionMandatory: repetitionMandatory2, repetitionMandatoryWithSeparator, repetitionWithSeparator } = collectMethods(currRule);
              forEach_default2(alternation2, (currProd) => {
                const prodIdx = currProd.idx === 0 ? "" : currProd.idx;
                this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => {
                  const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({
                    prodOccurrence: currProd.idx,
                    rule: currRule,
                    maxLookahead: currProd.maxLookahead || this.maxLookahead,
                    hasPredicates: currProd.hasPredicates,
                    dynamicTokensEnabled: this.dynamicTokensEnabled
                  });
                  const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx);
                  this.setLaFuncCache(key, laFunc);
                });
              });
              forEach_default2(repetition2, (currProd) => {
                this.computeLookaheadFunc(currRule, currProd.idx, MANY_IDX, "Repetition", currProd.maxLookahead, getProductionDslName(currProd));
              });
              forEach_default2(option2, (currProd) => {
                this.computeLookaheadFunc(currRule, currProd.idx, OPTION_IDX, "Option", currProd.maxLookahead, getProductionDslName(currProd));
              });
              forEach_default2(repetitionMandatory2, (currProd) => {
                this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_IDX, "RepetitionMandatory", currProd.maxLookahead, getProductionDslName(currProd));
              });
              forEach_default2(repetitionMandatoryWithSeparator, (currProd) => {
                this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_SEP_IDX, "RepetitionMandatoryWithSeparator", currProd.maxLookahead, getProductionDslName(currProd));
              });
              forEach_default2(repetitionWithSeparator, (currProd) => {
                this.computeLookaheadFunc(currRule, currProd.idx, MANY_SEP_IDX, "RepetitionWithSeparator", currProd.maxLookahead, getProductionDslName(currProd));
              });
            });
          });
        }
        computeLookaheadFunc(rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {
          this.TRACE_INIT(`${dslMethodName}${prodOccurrence === 0 ? "" : prodOccurrence}`, () => {
            const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({
              prodOccurrence,
              rule,
              maxLookahead: prodMaxLookahead || this.maxLookahead,
              dynamicTokensEnabled: this.dynamicTokensEnabled,
              prodType
            });
            const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence);
            this.setLaFuncCache(key, laFunc);
          });
        }
        // this actually returns a number, but it is always used as a string (object prop key)
        getKeyForAutomaticLookahead(dslMethodIdx, occurrence) {
          const currRuleShortName = this.getLastExplicitRuleShortName();
          return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence);
        }
        getLaFuncFromCache(key) {
          return this.lookAheadFuncsCache.get(key);
        }
        /* istanbul ignore next */
        setLaFuncCache(key, value2) {
          this.lookAheadFuncsCache.set(key, value2);
        }
      };
      DslMethodsCollectorVisitor = class extends GAstVisitor {
        static {
          __name(this, "DslMethodsCollectorVisitor");
        }
        static {
          __name2(this, "DslMethodsCollectorVisitor");
        }
        constructor() {
          super(...arguments);
          this.dslMethods = {
            option: [],
            alternation: [],
            repetition: [],
            repetitionWithSeparator: [],
            repetitionMandatory: [],
            repetitionMandatoryWithSeparator: []
          };
        }
        reset() {
          this.dslMethods = {
            option: [],
            alternation: [],
            repetition: [],
            repetitionWithSeparator: [],
            repetitionMandatory: [],
            repetitionMandatoryWithSeparator: []
          };
        }
        visitOption(option2) {
          this.dslMethods.option.push(option2);
        }
        visitRepetitionWithSeparator(manySep) {
          this.dslMethods.repetitionWithSeparator.push(manySep);
        }
        visitRepetitionMandatory(atLeastOne) {
          this.dslMethods.repetitionMandatory.push(atLeastOne);
        }
        visitRepetitionMandatoryWithSeparator(atLeastOneSep) {
          this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep);
        }
        visitRepetition(many) {
          this.dslMethods.repetition.push(many);
        }
        visitAlternation(or) {
          this.dslMethods.alternation.push(or);
        }
      };
      collectorVisitor = new DslMethodsCollectorVisitor();
      __name(collectMethods, "collectMethods");
      __name2(collectMethods, "collectMethods");
      __name(setNodeLocationOnlyOffset, "setNodeLocationOnlyOffset");
      __name2(setNodeLocationOnlyOffset, "setNodeLocationOnlyOffset");
      __name(setNodeLocationFull, "setNodeLocationFull");
      __name2(setNodeLocationFull, "setNodeLocationFull");
      __name(addTerminalToCst, "addTerminalToCst");
      __name2(addTerminalToCst, "addTerminalToCst");
      __name(addNoneTerminalToCst, "addNoneTerminalToCst");
      __name2(addNoneTerminalToCst, "addNoneTerminalToCst");
      NAME = "name";
      __name(defineNameProp, "defineNameProp");
      __name2(defineNameProp, "defineNameProp");
      __name(defaultVisit, "defaultVisit");
      __name2(defaultVisit, "defaultVisit");
      __name(createBaseSemanticVisitorConstructor, "createBaseSemanticVisitorConstructor");
      __name2(createBaseSemanticVisitorConstructor, "createBaseSemanticVisitorConstructor");
      __name(createBaseVisitorConstructorWithDefaults, "createBaseVisitorConstructorWithDefaults");
      __name2(createBaseVisitorConstructorWithDefaults, "createBaseVisitorConstructorWithDefaults");
      (function(CstVisitorDefinitionError2) {
        CstVisitorDefinitionError2[CstVisitorDefinitionError2["REDUNDANT_METHOD"] = 0] = "REDUNDANT_METHOD";
        CstVisitorDefinitionError2[CstVisitorDefinitionError2["MISSING_METHOD"] = 1] = "MISSING_METHOD";
      })(CstVisitorDefinitionError || (CstVisitorDefinitionError = {}));
      __name(validateVisitor, "validateVisitor");
      __name2(validateVisitor, "validateVisitor");
      __name(validateMissingCstMethods, "validateMissingCstMethods");
      __name2(validateMissingCstMethods, "validateMissingCstMethods");
      TreeBuilder = class {
        static {
          __name(this, "TreeBuilder");
        }
        static {
          __name2(this, "TreeBuilder");
        }
        initTreeBuilder(config3) {
          this.CST_STACK = [];
          this.outputCst = config3.outputCst;
          this.nodeLocationTracking = has_default2(config3, "nodeLocationTracking") ? config3.nodeLocationTracking : DEFAULT_PARSER_CONFIG.nodeLocationTracking;
          if (!this.outputCst) {
            this.cstInvocationStateUpdate = noop_default3;
            this.cstFinallyStateUpdate = noop_default3;
            this.cstPostTerminal = noop_default3;
            this.cstPostNonTerminal = noop_default3;
            this.cstPostRule = noop_default3;
          } else {
            if (/full/i.test(this.nodeLocationTracking)) {
              if (this.recoveryEnabled) {
                this.setNodeLocationFromToken = setNodeLocationFull;
                this.setNodeLocationFromNode = setNodeLocationFull;
                this.cstPostRule = noop_default3;
                this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery;
              } else {
                this.setNodeLocationFromToken = noop_default3;
                this.setNodeLocationFromNode = noop_default3;
                this.cstPostRule = this.cstPostRuleFull;
                this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular;
              }
            } else if (/onlyOffset/i.test(this.nodeLocationTracking)) {
              if (this.recoveryEnabled) {
                this.setNodeLocationFromToken = setNodeLocationOnlyOffset;
                this.setNodeLocationFromNode = setNodeLocationOnlyOffset;
                this.cstPostRule = noop_default3;
                this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery;
              } else {
                this.setNodeLocationFromToken = noop_default3;
                this.setNodeLocationFromNode = noop_default3;
                this.cstPostRule = this.cstPostRuleOnlyOffset;
                this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular;
              }
            } else if (/none/i.test(this.nodeLocationTracking)) {
              this.setNodeLocationFromToken = noop_default3;
              this.setNodeLocationFromNode = noop_default3;
              this.cstPostRule = noop_default3;
              this.setInitialNodeLocation = noop_default3;
            } else {
              throw Error(`Invalid <nodeLocationTracking> config option: "${config3.nodeLocationTracking}"`);
            }
          }
        }
        setInitialNodeLocationOnlyOffsetRecovery(cstNode) {
          cstNode.location = {
            startOffset: NaN,
            endOffset: NaN
          };
        }
        setInitialNodeLocationOnlyOffsetRegular(cstNode) {
          cstNode.location = {
            // without error recovery the starting Location of a new CstNode is guaranteed
            // To be the next Token's startOffset (for valid inputs).
            // For invalid inputs there won't be any CSTOutput so this potential
            // inaccuracy does not matter
            startOffset: this.LA(1).startOffset,
            endOffset: NaN
          };
        }
        setInitialNodeLocationFullRecovery(cstNode) {
          cstNode.location = {
            startOffset: NaN,
            startLine: NaN,
            startColumn: NaN,
            endOffset: NaN,
            endLine: NaN,
            endColumn: NaN
          };
        }
        /**
             *  @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work
        
             * @param cstNode
             */
        setInitialNodeLocationFullRegular(cstNode) {
          const nextToken = this.LA(1);
          cstNode.location = {
            startOffset: nextToken.startOffset,
            startLine: nextToken.startLine,
            startColumn: nextToken.startColumn,
            endOffset: NaN,
            endLine: NaN,
            endColumn: NaN
          };
        }
        cstInvocationStateUpdate(fullRuleName) {
          const cstNode = {
            name: fullRuleName,
            children: /* @__PURE__ */ Object.create(null)
          };
          this.setInitialNodeLocation(cstNode);
          this.CST_STACK.push(cstNode);
        }
        cstFinallyStateUpdate() {
          this.CST_STACK.pop();
        }
        cstPostRuleFull(ruleCstNode) {
          const prevToken = this.LA(0);
          const loc = ruleCstNode.location;
          if (loc.startOffset <= prevToken.startOffset === true) {
            loc.endOffset = prevToken.endOffset;
            loc.endLine = prevToken.endLine;
            loc.endColumn = prevToken.endColumn;
          } else {
            loc.startOffset = NaN;
            loc.startLine = NaN;
            loc.startColumn = NaN;
          }
        }
        cstPostRuleOnlyOffset(ruleCstNode) {
          const prevToken = this.LA(0);
          const loc = ruleCstNode.location;
          if (loc.startOffset <= prevToken.startOffset === true) {
            loc.endOffset = prevToken.endOffset;
          } else {
            loc.startOffset = NaN;
          }
        }
        cstPostTerminal(key, consumedToken) {
          const rootCst = this.CST_STACK[this.CST_STACK.length - 1];
          addTerminalToCst(rootCst, consumedToken, key);
          this.setNodeLocationFromToken(rootCst.location, consumedToken);
        }
        cstPostNonTerminal(ruleCstResult, ruleName) {
          const preCstNode = this.CST_STACK[this.CST_STACK.length - 1];
          addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult);
          this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location);
        }
        getBaseCstVisitorConstructor() {
          if (isUndefined_default2(this.baseCstVisitorConstructor)) {
            const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(this.className, keys_default2(this.gastProductionsCache));
            this.baseCstVisitorConstructor = newBaseCstVisitorConstructor;
            return newBaseCstVisitorConstructor;
          }
          return this.baseCstVisitorConstructor;
        }
        getBaseCstVisitorConstructorWithDefaults() {
          if (isUndefined_default2(this.baseCstVisitorWithDefaultsConstructor)) {
            const newConstructor = createBaseVisitorConstructorWithDefaults(this.className, keys_default2(this.gastProductionsCache), this.getBaseCstVisitorConstructor());
            this.baseCstVisitorWithDefaultsConstructor = newConstructor;
            return newConstructor;
          }
          return this.baseCstVisitorWithDefaultsConstructor;
        }
        getLastExplicitRuleShortName() {
          const ruleStack = this.RULE_STACK;
          return ruleStack[ruleStack.length - 1];
        }
        getPreviousExplicitRuleShortName() {
          const ruleStack = this.RULE_STACK;
          return ruleStack[ruleStack.length - 2];
        }
        getLastExplicitRuleOccurrenceIndex() {
          const occurrenceStack = this.RULE_OCCURRENCE_STACK;
          return occurrenceStack[occurrenceStack.length - 1];
        }
      };
      LexerAdapter = class {
        static {
          __name(this, "LexerAdapter");
        }
        static {
          __name2(this, "LexerAdapter");
        }
        initLexerAdapter() {
          this.tokVector = [];
          this.tokVectorLength = 0;
          this.currIdx = -1;
        }
        set input(newInput) {
          if (this.selfAnalysisDone !== true) {
            throw Error(`Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`);
          }
          this.reset();
          this.tokVector = newInput;
          this.tokVectorLength = newInput.length;
        }
        get input() {
          return this.tokVector;
        }
        // skips a token and returns the next token
        SKIP_TOKEN() {
          if (this.currIdx <= this.tokVector.length - 2) {
            this.consumeToken();
            return this.LA(1);
          } else {
            return END_OF_FILE;
          }
        }
        // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers
        // or lexers dependent on parser context.
        LA(howMuch) {
          const soughtIdx = this.currIdx + howMuch;
          if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {
            return END_OF_FILE;
          } else {
            return this.tokVector[soughtIdx];
          }
        }
        consumeToken() {
          this.currIdx++;
        }
        exportLexerState() {
          return this.currIdx;
        }
        importLexerState(newState2) {
          this.currIdx = newState2;
        }
        resetLexerState() {
          this.currIdx = -1;
        }
        moveToTerminatedState() {
          this.currIdx = this.tokVector.length - 1;
        }
        getLexerPosition() {
          return this.exportLexerState();
        }
      };
      RecognizerApi = class {
        static {
          __name(this, "RecognizerApi");
        }
        static {
          __name2(this, "RecognizerApi");
        }
        ACTION(impl2) {
          return impl2.call(this);
        }
        consume(idx, tokType, options2) {
          return this.consumeInternal(tokType, idx, options2);
        }
        subrule(idx, ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, idx, options2);
        }
        option(idx, actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, idx);
        }
        or(idx, altsOrOpts) {
          return this.orInternal(altsOrOpts, idx);
        }
        many(idx, actionORMethodDef) {
          return this.manyInternal(idx, actionORMethodDef);
        }
        atLeastOne(idx, actionORMethodDef) {
          return this.atLeastOneInternal(idx, actionORMethodDef);
        }
        CONSUME(tokType, options2) {
          return this.consumeInternal(tokType, 0, options2);
        }
        CONSUME1(tokType, options2) {
          return this.consumeInternal(tokType, 1, options2);
        }
        CONSUME2(tokType, options2) {
          return this.consumeInternal(tokType, 2, options2);
        }
        CONSUME3(tokType, options2) {
          return this.consumeInternal(tokType, 3, options2);
        }
        CONSUME4(tokType, options2) {
          return this.consumeInternal(tokType, 4, options2);
        }
        CONSUME5(tokType, options2) {
          return this.consumeInternal(tokType, 5, options2);
        }
        CONSUME6(tokType, options2) {
          return this.consumeInternal(tokType, 6, options2);
        }
        CONSUME7(tokType, options2) {
          return this.consumeInternal(tokType, 7, options2);
        }
        CONSUME8(tokType, options2) {
          return this.consumeInternal(tokType, 8, options2);
        }
        CONSUME9(tokType, options2) {
          return this.consumeInternal(tokType, 9, options2);
        }
        SUBRULE(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 0, options2);
        }
        SUBRULE1(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 1, options2);
        }
        SUBRULE2(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 2, options2);
        }
        SUBRULE3(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 3, options2);
        }
        SUBRULE4(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 4, options2);
        }
        SUBRULE5(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 5, options2);
        }
        SUBRULE6(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 6, options2);
        }
        SUBRULE7(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 7, options2);
        }
        SUBRULE8(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 8, options2);
        }
        SUBRULE9(ruleToCall, options2) {
          return this.subruleInternal(ruleToCall, 9, options2);
        }
        OPTION(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 0);
        }
        OPTION1(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 1);
        }
        OPTION2(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 2);
        }
        OPTION3(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 3);
        }
        OPTION4(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 4);
        }
        OPTION5(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 5);
        }
        OPTION6(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 6);
        }
        OPTION7(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 7);
        }
        OPTION8(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 8);
        }
        OPTION9(actionORMethodDef) {
          return this.optionInternal(actionORMethodDef, 9);
        }
        OR(altsOrOpts) {
          return this.orInternal(altsOrOpts, 0);
        }
        OR1(altsOrOpts) {
          return this.orInternal(altsOrOpts, 1);
        }
        OR2(altsOrOpts) {
          return this.orInternal(altsOrOpts, 2);
        }
        OR3(altsOrOpts) {
          return this.orInternal(altsOrOpts, 3);
        }
        OR4(altsOrOpts) {
          return this.orInternal(altsOrOpts, 4);
        }
        OR5(altsOrOpts) {
          return this.orInternal(altsOrOpts, 5);
        }
        OR6(altsOrOpts) {
          return this.orInternal(altsOrOpts, 6);
        }
        OR7(altsOrOpts) {
          return this.orInternal(altsOrOpts, 7);
        }
        OR8(altsOrOpts) {
          return this.orInternal(altsOrOpts, 8);
        }
        OR9(altsOrOpts) {
          return this.orInternal(altsOrOpts, 9);
        }
        MANY(actionORMethodDef) {
          this.manyInternal(0, actionORMethodDef);
        }
        MANY1(actionORMethodDef) {
          this.manyInternal(1, actionORMethodDef);
        }
        MANY2(actionORMethodDef) {
          this.manyInternal(2, actionORMethodDef);
        }
        MANY3(actionORMethodDef) {
          this.manyInternal(3, actionORMethodDef);
        }
        MANY4(actionORMethodDef) {
          this.manyInternal(4, actionORMethodDef);
        }
        MANY5(actionORMethodDef) {
          this.manyInternal(5, actionORMethodDef);
        }
        MANY6(actionORMethodDef) {
          this.manyInternal(6, actionORMethodDef);
        }
        MANY7(actionORMethodDef) {
          this.manyInternal(7, actionORMethodDef);
        }
        MANY8(actionORMethodDef) {
          this.manyInternal(8, actionORMethodDef);
        }
        MANY9(actionORMethodDef) {
          this.manyInternal(9, actionORMethodDef);
        }
        MANY_SEP(options2) {
          this.manySepFirstInternal(0, options2);
        }
        MANY_SEP1(options2) {
          this.manySepFirstInternal(1, options2);
        }
        MANY_SEP2(options2) {
          this.manySepFirstInternal(2, options2);
        }
        MANY_SEP3(options2) {
          this.manySepFirstInternal(3, options2);
        }
        MANY_SEP4(options2) {
          this.manySepFirstInternal(4, options2);
        }
        MANY_SEP5(options2) {
          this.manySepFirstInternal(5, options2);
        }
        MANY_SEP6(options2) {
          this.manySepFirstInternal(6, options2);
        }
        MANY_SEP7(options2) {
          this.manySepFirstInternal(7, options2);
        }
        MANY_SEP8(options2) {
          this.manySepFirstInternal(8, options2);
        }
        MANY_SEP9(options2) {
          this.manySepFirstInternal(9, options2);
        }
        AT_LEAST_ONE(actionORMethodDef) {
          this.atLeastOneInternal(0, actionORMethodDef);
        }
        AT_LEAST_ONE1(actionORMethodDef) {
          return this.atLeastOneInternal(1, actionORMethodDef);
        }
        AT_LEAST_ONE2(actionORMethodDef) {
          this.atLeastOneInternal(2, actionORMethodDef);
        }
        AT_LEAST_ONE3(actionORMethodDef) {
          this.atLeastOneInternal(3, actionORMethodDef);
        }
        AT_LEAST_ONE4(actionORMethodDef) {
          this.atLeastOneInternal(4, actionORMethodDef);
        }
        AT_LEAST_ONE5(actionORMethodDef) {
          this.atLeastOneInternal(5, actionORMethodDef);
        }
        AT_LEAST_ONE6(actionORMethodDef) {
          this.atLeastOneInternal(6, actionORMethodDef);
        }
        AT_LEAST_ONE7(actionORMethodDef) {
          this.atLeastOneInternal(7, actionORMethodDef);
        }
        AT_LEAST_ONE8(actionORMethodDef) {
          this.atLeastOneInternal(8, actionORMethodDef);
        }
        AT_LEAST_ONE9(actionORMethodDef) {
          this.atLeastOneInternal(9, actionORMethodDef);
        }
        AT_LEAST_ONE_SEP(options2) {
          this.atLeastOneSepFirstInternal(0, options2);
        }
        AT_LEAST_ONE_SEP1(options2) {
          this.atLeastOneSepFirstInternal(1, options2);
        }
        AT_LEAST_ONE_SEP2(options2) {
          this.atLeastOneSepFirstInternal(2, options2);
        }
        AT_LEAST_ONE_SEP3(options2) {
          this.atLeastOneSepFirstInternal(3, options2);
        }
        AT_LEAST_ONE_SEP4(options2) {
          this.atLeastOneSepFirstInternal(4, options2);
        }
        AT_LEAST_ONE_SEP5(options2) {
          this.atLeastOneSepFirstInternal(5, options2);
        }
        AT_LEAST_ONE_SEP6(options2) {
          this.atLeastOneSepFirstInternal(6, options2);
        }
        AT_LEAST_ONE_SEP7(options2) {
          this.atLeastOneSepFirstInternal(7, options2);
        }
        AT_LEAST_ONE_SEP8(options2) {
          this.atLeastOneSepFirstInternal(8, options2);
        }
        AT_LEAST_ONE_SEP9(options2) {
          this.atLeastOneSepFirstInternal(9, options2);
        }
        RULE(name, implementation, config3 = DEFAULT_RULE_CONFIG) {
          if (includes_default(this.definedRulesNames, name)) {
            const errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({
              topLevelRule: name,
              grammarName: this.className
            });
            const error3 = {
              message: errMsg,
              type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,
              ruleName: name
            };
            this.definitionErrors.push(error3);
          }
          this.definedRulesNames.push(name);
          const ruleImplementation = this.defineRule(name, implementation, config3);
          this[name] = ruleImplementation;
          return ruleImplementation;
        }
        OVERRIDE_RULE(name, impl2, config3 = DEFAULT_RULE_CONFIG) {
          const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className);
          this.definitionErrors = this.definitionErrors.concat(ruleErrors);
          const ruleImplementation = this.defineRule(name, impl2, config3);
          this[name] = ruleImplementation;
          return ruleImplementation;
        }
        BACKTRACK(grammarRule, args) {
          return function() {
            this.isBackTrackingStack.push(1);
            const orgState = this.saveRecogState();
            try {
              grammarRule.apply(this, args);
              return true;
            } catch (e3) {
              if (isRecognitionException(e3)) {
                return false;
              } else {
                throw e3;
              }
            } finally {
              this.reloadRecogState(orgState);
              this.isBackTrackingStack.pop();
            }
          };
        }
        // GAST export APIs
        getGAstProductions() {
          return this.gastProductionsCache;
        }
        getSerializedGastProductions() {
          return serializeGrammar(values_default2(this.gastProductionsCache));
        }
      };
      RecognizerEngine = class {
        static {
          __name(this, "RecognizerEngine");
        }
        static {
          __name2(this, "RecognizerEngine");
        }
        initRecognizerEngine(tokenVocabulary, config3) {
          this.className = this.constructor.name;
          this.shortRuleNameToFull = {};
          this.fullRuleNameToShort = {};
          this.ruleShortNameIdx = 256;
          this.tokenMatcher = tokenStructuredMatcherNoCategories;
          this.subruleIdx = 0;
          this.definedRulesNames = [];
          this.tokensMap = {};
          this.isBackTrackingStack = [];
          this.RULE_STACK = [];
          this.RULE_OCCURRENCE_STACK = [];
          this.gastProductionsCache = {};
          if (has_default2(config3, "serializedGrammar")) {
            throw Error("The Parser's configuration can no longer contain a <serializedGrammar> property.\n	See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n	For Further details.");
          }
          if (isArray_default2(tokenVocabulary)) {
            if (isEmpty_default2(tokenVocabulary)) {
              throw Error("A Token Vocabulary cannot be empty.\n	Note that the first argument for the parser constructor\n	is no longer a Token vector (since v4.0).");
            }
            if (typeof tokenVocabulary[0].startOffset === "number") {
              throw Error("The Parser constructor no longer accepts a token vector as the first argument.\n	See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n	For Further details.");
            }
          }
          if (isArray_default2(tokenVocabulary)) {
            this.tokensMap = reduce_default2(tokenVocabulary, (acc, tokType) => {
              acc[tokType.name] = tokType;
              return acc;
            }, {});
          } else if (has_default2(tokenVocabulary, "modes") && every_default(flatten_default2(values_default2(tokenVocabulary.modes)), isTokenType)) {
            const allTokenTypes2 = flatten_default2(values_default2(tokenVocabulary.modes));
            const uniqueTokens = uniq_default(allTokenTypes2);
            this.tokensMap = reduce_default2(uniqueTokens, (acc, tokType) => {
              acc[tokType.name] = tokType;
              return acc;
            }, {});
          } else if (isObject_default2(tokenVocabulary)) {
            this.tokensMap = clone_default3(tokenVocabulary);
          } else {
            throw new Error("<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");
          }
          this.tokensMap["EOF"] = EOF;
          const allTokenTypes = has_default2(tokenVocabulary, "modes") ? flatten_default2(values_default2(tokenVocabulary.modes)) : values_default2(tokenVocabulary);
          const noTokenCategoriesUsed = every_default(allTokenTypes, (tokenConstructor) => isEmpty_default2(tokenConstructor.categoryMatches));
          this.tokenMatcher = noTokenCategoriesUsed ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher;
          augmentTokenTypes(values_default2(this.tokensMap));
        }
        defineRule(ruleName, impl2, config3) {
          if (this.selfAnalysisDone) {
            throw Error(`Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called'
Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);
          }
          const resyncEnabled = has_default2(config3, "resyncEnabled") ? config3.resyncEnabled : DEFAULT_RULE_CONFIG.resyncEnabled;
          const recoveryValueFunc = has_default2(config3, "recoveryValueFunc") ? config3.recoveryValueFunc : DEFAULT_RULE_CONFIG.recoveryValueFunc;
          const shortName = this.ruleShortNameIdx << BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX;
          this.ruleShortNameIdx++;
          this.shortRuleNameToFull[shortName] = ruleName;
          this.fullRuleNameToShort[ruleName] = shortName;
          let invokeRuleWithTry;
          if (this.outputCst === true) {
            invokeRuleWithTry = /* @__PURE__ */ __name2(/* @__PURE__ */ __name(function invokeRuleWithTry2(...args) {
              try {
                this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);
                impl2.apply(this, args);
                const cst = this.CST_STACK[this.CST_STACK.length - 1];
                this.cstPostRule(cst);
                return cst;
              } catch (e3) {
                return this.invokeRuleCatch(e3, resyncEnabled, recoveryValueFunc);
              } finally {
                this.ruleFinallyStateUpdate();
              }
            }, "invokeRuleWithTry2"), "invokeRuleWithTry");
          } else {
            invokeRuleWithTry = /* @__PURE__ */ __name2(/* @__PURE__ */ __name(function invokeRuleWithTryCst(...args) {
              try {
                this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);
                return impl2.apply(this, args);
              } catch (e3) {
                return this.invokeRuleCatch(e3, resyncEnabled, recoveryValueFunc);
              } finally {
                this.ruleFinallyStateUpdate();
              }
            }, "invokeRuleWithTryCst"), "invokeRuleWithTryCst");
          }
          const wrappedGrammarRule = Object.assign(invokeRuleWithTry, { ruleName, originalGrammarAction: impl2 });
          return wrappedGrammarRule;
        }
        invokeRuleCatch(e3, resyncEnabledConfig, recoveryValueFunc) {
          const isFirstInvokedRule = this.RULE_STACK.length === 1;
          const reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled;
          if (isRecognitionException(e3)) {
            const recogError = e3;
            if (reSyncEnabled) {
              const reSyncTokType = this.findReSyncTokenType();
              if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {
                recogError.resyncedTokens = this.reSyncTo(reSyncTokType);
                if (this.outputCst) {
                  const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];
                  partialCstResult.recoveredNode = true;
                  return partialCstResult;
                } else {
                  return recoveryValueFunc(e3);
                }
              } else {
                if (this.outputCst) {
                  const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];
                  partialCstResult.recoveredNode = true;
                  recogError.partialCstResult = partialCstResult;
                }
                throw recogError;
              }
            } else if (isFirstInvokedRule) {
              this.moveToTerminatedState();
              return recoveryValueFunc(e3);
            } else {
              throw recogError;
            }
          } else {
            throw e3;
          }
        }
        // Implementation of parsing DSL
        optionInternal(actionORMethodDef, occurrence) {
          const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence);
          return this.optionInternalLogic(actionORMethodDef, occurrence, key);
        }
        optionInternalLogic(actionORMethodDef, occurrence, key) {
          let lookAheadFunc = this.getLaFuncFromCache(key);
          let action;
          if (typeof actionORMethodDef !== "function") {
            action = actionORMethodDef.DEF;
            const predicate = actionORMethodDef.GATE;
            if (predicate !== void 0) {
              const orgLookaheadFunction = lookAheadFunc;
              lookAheadFunc = /* @__PURE__ */ __name2(() => {
                return predicate.call(this) && orgLookaheadFunction.call(this);
              }, "lookAheadFunc");
            }
          } else {
            action = actionORMethodDef;
          }
          if (lookAheadFunc.call(this) === true) {
            return action.call(this);
          }
          return void 0;
        }
        atLeastOneInternal(prodOccurrence, actionORMethodDef) {
          const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence);
          return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey);
        }
        atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key) {
          let lookAheadFunc = this.getLaFuncFromCache(key);
          let action;
          if (typeof actionORMethodDef !== "function") {
            action = actionORMethodDef.DEF;
            const predicate = actionORMethodDef.GATE;
            if (predicate !== void 0) {
              const orgLookaheadFunction = lookAheadFunc;
              lookAheadFunc = /* @__PURE__ */ __name2(() => {
                return predicate.call(this) && orgLookaheadFunction.call(this);
              }, "lookAheadFunc");
            }
          } else {
            action = actionORMethodDef;
          }
          if (lookAheadFunc.call(this) === true) {
            let notStuck = this.doSingleRepetition(action);
            while (lookAheadFunc.call(this) === true && notStuck === true) {
              notStuck = this.doSingleRepetition(action);
            }
          } else {
            throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG);
          }
          this.attemptInRepetitionRecovery(this.atLeastOneInternal, [prodOccurrence, actionORMethodDef], lookAheadFunc, AT_LEAST_ONE_IDX, prodOccurrence, NextTerminalAfterAtLeastOneWalker);
        }
        atLeastOneSepFirstInternal(prodOccurrence, options2) {
          const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence);
          this.atLeastOneSepFirstInternalLogic(prodOccurrence, options2, laKey);
        }
        atLeastOneSepFirstInternalLogic(prodOccurrence, options2, key) {
          const action = options2.DEF;
          const separator = options2.SEP;
          const firstIterationLookaheadFunc = this.getLaFuncFromCache(key);
          if (firstIterationLookaheadFunc.call(this) === true) {
            action.call(this);
            const separatorLookAheadFunc = /* @__PURE__ */ __name2(() => {
              return this.tokenMatcher(this.LA(1), separator);
            }, "separatorLookAheadFunc");
            while (this.tokenMatcher(this.LA(1), separator) === true) {
              this.CONSUME(separator);
              action.call(this);
            }
            this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
              prodOccurrence,
              separator,
              separatorLookAheadFunc,
              action,
              NextTerminalAfterAtLeastOneSepWalker
            ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, NextTerminalAfterAtLeastOneSepWalker);
          } else {
            throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, options2.ERR_MSG);
          }
        }
        manyInternal(prodOccurrence, actionORMethodDef) {
          const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence);
          return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);
        }
        manyInternalLogic(prodOccurrence, actionORMethodDef, key) {
          let lookaheadFunction = this.getLaFuncFromCache(key);
          let action;
          if (typeof actionORMethodDef !== "function") {
            action = actionORMethodDef.DEF;
            const predicate = actionORMethodDef.GATE;
            if (predicate !== void 0) {
              const orgLookaheadFunction = lookaheadFunction;
              lookaheadFunction = /* @__PURE__ */ __name2(() => {
                return predicate.call(this) && orgLookaheadFunction.call(this);
              }, "lookaheadFunction");
            }
          } else {
            action = actionORMethodDef;
          }
          let notStuck = true;
          while (lookaheadFunction.call(this) === true && notStuck === true) {
            notStuck = this.doSingleRepetition(action);
          }
          this.attemptInRepetitionRecovery(
            this.manyInternal,
            [prodOccurrence, actionORMethodDef],
            lookaheadFunction,
            MANY_IDX,
            prodOccurrence,
            NextTerminalAfterManyWalker,
            // The notStuck parameter is only relevant when "attemptInRepetitionRecovery"
            // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]
            // An infinite loop cannot occur as:
            // - Either the lookahead is guaranteed to consume something (Single Token Separator)
            // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).
            notStuck
          );
        }
        manySepFirstInternal(prodOccurrence, options2) {
          const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence);
          this.manySepFirstInternalLogic(prodOccurrence, options2, laKey);
        }
        manySepFirstInternalLogic(prodOccurrence, options2, key) {
          const action = options2.DEF;
          const separator = options2.SEP;
          const firstIterationLaFunc = this.getLaFuncFromCache(key);
          if (firstIterationLaFunc.call(this) === true) {
            action.call(this);
            const separatorLookAheadFunc = /* @__PURE__ */ __name2(() => {
              return this.tokenMatcher(this.LA(1), separator);
            }, "separatorLookAheadFunc");
            while (this.tokenMatcher(this.LA(1), separator) === true) {
              this.CONSUME(separator);
              action.call(this);
            }
            this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
              prodOccurrence,
              separator,
              separatorLookAheadFunc,
              action,
              NextTerminalAfterManySepWalker
            ], separatorLookAheadFunc, MANY_SEP_IDX, prodOccurrence, NextTerminalAfterManySepWalker);
          }
        }
        repetitionSepSecondInternal(prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {
          while (separatorLookAheadFunc()) {
            this.CONSUME(separator);
            action.call(this);
          }
          this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
            prodOccurrence,
            separator,
            separatorLookAheadFunc,
            action,
            nextTerminalAfterWalker
          ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, nextTerminalAfterWalker);
        }
        doSingleRepetition(action) {
          const beforeIteration = this.getLexerPosition();
          action.call(this);
          const afterIteration = this.getLexerPosition();
          return afterIteration > beforeIteration;
        }
        orInternal(altsOrOpts, occurrence) {
          const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence);
          const alts = isArray_default2(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF;
          const laFunc = this.getLaFuncFromCache(laKey);
          const altIdxToTake = laFunc.call(this, alts);
          if (altIdxToTake !== void 0) {
            const chosenAlternative = alts[altIdxToTake];
            return chosenAlternative.ALT.call(this);
          }
          this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG);
        }
        ruleFinallyStateUpdate() {
          this.RULE_STACK.pop();
          this.RULE_OCCURRENCE_STACK.pop();
          this.cstFinallyStateUpdate();
          if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {
            const firstRedundantTok = this.LA(1);
            const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({
              firstRedundant: firstRedundantTok,
              ruleName: this.getCurrRuleFullName()
            });
            this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok));
          }
        }
        subruleInternal(ruleToCall, idx, options2) {
          let ruleResult;
          try {
            const args = options2 !== void 0 ? options2.ARGS : void 0;
            this.subruleIdx = idx;
            ruleResult = ruleToCall.apply(this, args);
            this.cstPostNonTerminal(ruleResult, options2 !== void 0 && options2.LABEL !== void 0 ? options2.LABEL : ruleToCall.ruleName);
            return ruleResult;
          } catch (e3) {
            throw this.subruleInternalError(e3, options2, ruleToCall.ruleName);
          }
        }
        subruleInternalError(e3, options2, ruleName) {
          if (isRecognitionException(e3) && e3.partialCstResult !== void 0) {
            this.cstPostNonTerminal(e3.partialCstResult, options2 !== void 0 && options2.LABEL !== void 0 ? options2.LABEL : ruleName);
            delete e3.partialCstResult;
          }
          throw e3;
        }
        consumeInternal(tokType, idx, options2) {
          let consumedToken;
          try {
            const nextToken = this.LA(1);
            if (this.tokenMatcher(nextToken, tokType) === true) {
              this.consumeToken();
              consumedToken = nextToken;
            } else {
              this.consumeInternalError(tokType, nextToken, options2);
            }
          } catch (eFromConsumption) {
            consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption);
          }
          this.cstPostTerminal(options2 !== void 0 && options2.LABEL !== void 0 ? options2.LABEL : tokType.name, consumedToken);
          return consumedToken;
        }
        consumeInternalError(tokType, nextToken, options2) {
          let msg;
          const previousToken = this.LA(0);
          if (options2 !== void 0 && options2.ERR_MSG) {
            msg = options2.ERR_MSG;
          } else {
            msg = this.errorMessageProvider.buildMismatchTokenMessage({
              expected: tokType,
              actual: nextToken,
              previous: previousToken,
              ruleName: this.getCurrRuleFullName()
            });
          }
          throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken));
        }
        consumeInternalRecovery(tokType, idx, eFromConsumption) {
          if (this.recoveryEnabled && // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?
          eFromConsumption.name === "MismatchedTokenException" && !this.isBackTracking()) {
            const follows = this.getFollowsForInRuleRecovery(tokType, idx);
            try {
              return this.tryInRuleRecovery(tokType, follows);
            } catch (eFromInRuleRecovery) {
              if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {
                throw eFromConsumption;
              } else {
                throw eFromInRuleRecovery;
              }
            }
          } else {
            throw eFromConsumption;
          }
        }
        saveRecogState() {
          const savedErrors = this.errors;
          const savedRuleStack = clone_default3(this.RULE_STACK);
          return {
            errors: savedErrors,
            lexerState: this.exportLexerState(),
            RULE_STACK: savedRuleStack,
            CST_STACK: this.CST_STACK
          };
        }
        reloadRecogState(newState2) {
          this.errors = newState2.errors;
          this.importLexerState(newState2.lexerState);
          this.RULE_STACK = newState2.RULE_STACK;
        }
        ruleInvocationStateUpdate(shortName, fullName, idxInCallingRule) {
          this.RULE_OCCURRENCE_STACK.push(idxInCallingRule);
          this.RULE_STACK.push(shortName);
          this.cstInvocationStateUpdate(fullName);
        }
        isBackTracking() {
          return this.isBackTrackingStack.length !== 0;
        }
        getCurrRuleFullName() {
          const shortName = this.getLastExplicitRuleShortName();
          return this.shortRuleNameToFull[shortName];
        }
        shortRuleNameToFullName(shortName) {
          return this.shortRuleNameToFull[shortName];
        }
        isAtEndOfInput() {
          return this.tokenMatcher(this.LA(1), EOF);
        }
        reset() {
          this.resetLexerState();
          this.subruleIdx = 0;
          this.isBackTrackingStack = [];
          this.errors = [];
          this.RULE_STACK = [];
          this.CST_STACK = [];
          this.RULE_OCCURRENCE_STACK = [];
        }
      };
      ErrorHandler = class {
        static {
          __name(this, "ErrorHandler");
        }
        static {
          __name2(this, "ErrorHandler");
        }
        initErrorHandler(config3) {
          this._errors = [];
          this.errorMessageProvider = has_default2(config3, "errorMessageProvider") ? config3.errorMessageProvider : DEFAULT_PARSER_CONFIG.errorMessageProvider;
        }
        SAVE_ERROR(error3) {
          if (isRecognitionException(error3)) {
            error3.context = {
              ruleStack: this.getHumanReadableRuleStack(),
              ruleOccurrenceStack: clone_default3(this.RULE_OCCURRENCE_STACK)
            };
            this._errors.push(error3);
            return error3;
          } else {
            throw Error("Trying to save an Error which is not a RecognitionException");
          }
        }
        get errors() {
          return clone_default3(this._errors);
        }
        set errors(newErrors) {
          this._errors = newErrors;
        }
        // TODO: consider caching the error message computed information
        raiseEarlyExitException(occurrence, prodType, userDefinedErrMsg) {
          const ruleName = this.getCurrRuleFullName();
          const ruleGrammar = this.getGAstProductions()[ruleName];
          const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, this.maxLookahead);
          const insideProdPaths = lookAheadPathsPerAlternative[0];
          const actualTokens = [];
          for (let i2 = 1; i2 <= this.maxLookahead; i2++) {
            actualTokens.push(this.LA(i2));
          }
          const msg = this.errorMessageProvider.buildEarlyExitMessage({
            expectedIterationPaths: insideProdPaths,
            actual: actualTokens,
            previous: this.LA(0),
            customUserDescription: userDefinedErrMsg,
            ruleName
          });
          throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)));
        }
        // TODO: consider caching the error message computed information
        raiseNoAltException(occurrence, errMsgTypes) {
          const ruleName = this.getCurrRuleFullName();
          const ruleGrammar = this.getGAstProductions()[ruleName];
          const lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead);
          const actualTokens = [];
          for (let i2 = 1; i2 <= this.maxLookahead; i2++) {
            actualTokens.push(this.LA(i2));
          }
          const previousToken = this.LA(0);
          const errMsg = this.errorMessageProvider.buildNoViableAltMessage({
            expectedPathsPerAlt: lookAheadPathsPerAlternative,
            actual: actualTokens,
            previous: previousToken,
            customUserDescription: errMsgTypes,
            ruleName: this.getCurrRuleFullName()
          });
          throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken));
        }
      };
      ContentAssist = class {
        static {
          __name(this, "ContentAssist");
        }
        static {
          __name2(this, "ContentAssist");
        }
        initContentAssist() {
        }
        computeContentAssist(startRuleName, precedingInput) {
          const startRuleGast = this.gastProductionsCache[startRuleName];
          if (isUndefined_default2(startRuleGast)) {
            throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`);
          }
          return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead);
        }
        // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...
        // TODO: should this be more explicitly part of the public API?
        getNextPossibleTokenTypes(grammarPath) {
          const topRuleName = head_default(grammarPath.ruleStack);
          const gastProductions = this.getGAstProductions();
          const topProduction = gastProductions[topRuleName];
          const nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking();
          return nextPossibleTokenTypes;
        }
      };
      RECORDING_NULL_OBJECT = {
        description: "This Object indicates the Parser is during Recording Phase"
      };
      Object.freeze(RECORDING_NULL_OBJECT);
      HANDLE_SEPARATOR = true;
      MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1;
      RFT = createToken({ name: "RECORDING_PHASE_TOKEN", pattern: Lexer2.NA });
      augmentTokenTypes([RFT]);
      RECORDING_PHASE_TOKEN = createTokenInstance(
        RFT,
        "This IToken indicates the Parser is in Recording Phase\n	See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details",
        // Using "-1" instead of NaN (as in EOF) because an actual number is less likely to
        // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.
        -1,
        -1,
        -1,
        -1,
        -1,
        -1
      );
      Object.freeze(RECORDING_PHASE_TOKEN);
      RECORDING_PHASE_CSTNODE = {
        name: "This CSTNode indicates the Parser is in Recording Phase\n	See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details",
        children: {}
      };
      GastRecorder = class {
        static {
          __name(this, "GastRecorder");
        }
        static {
          __name2(this, "GastRecorder");
        }
        initGastRecorder(config3) {
          this.recordingProdStack = [];
          this.RECORDING_PHASE = false;
        }
        enableRecording() {
          this.RECORDING_PHASE = true;
          this.TRACE_INIT("Enable Recording", () => {
            for (let i2 = 0; i2 < 10; i2++) {
              const idx = i2 > 0 ? i2 : "";
              this[`CONSUME${idx}`] = function(arg1, arg2) {
                return this.consumeInternalRecord(arg1, i2, arg2);
              };
              this[`SUBRULE${idx}`] = function(arg1, arg2) {
                return this.subruleInternalRecord(arg1, i2, arg2);
              };
              this[`OPTION${idx}`] = function(arg1) {
                return this.optionInternalRecord(arg1, i2);
              };
              this[`OR${idx}`] = function(arg1) {
                return this.orInternalRecord(arg1, i2);
              };
              this[`MANY${idx}`] = function(arg1) {
                this.manyInternalRecord(i2, arg1);
              };
              this[`MANY_SEP${idx}`] = function(arg1) {
                this.manySepFirstInternalRecord(i2, arg1);
              };
              this[`AT_LEAST_ONE${idx}`] = function(arg1) {
                this.atLeastOneInternalRecord(i2, arg1);
              };
              this[`AT_LEAST_ONE_SEP${idx}`] = function(arg1) {
                this.atLeastOneSepFirstInternalRecord(i2, arg1);
              };
            }
            this[`consume`] = function(idx, arg1, arg2) {
              return this.consumeInternalRecord(arg1, idx, arg2);
            };
            this[`subrule`] = function(idx, arg1, arg2) {
              return this.subruleInternalRecord(arg1, idx, arg2);
            };
            this[`option`] = function(idx, arg1) {
              return this.optionInternalRecord(arg1, idx);
            };
            this[`or`] = function(idx, arg1) {
              return this.orInternalRecord(arg1, idx);
            };
            this[`many`] = function(idx, arg1) {
              this.manyInternalRecord(idx, arg1);
            };
            this[`atLeastOne`] = function(idx, arg1) {
              this.atLeastOneInternalRecord(idx, arg1);
            };
            this.ACTION = this.ACTION_RECORD;
            this.BACKTRACK = this.BACKTRACK_RECORD;
            this.LA = this.LA_RECORD;
          });
        }
        disableRecording() {
          this.RECORDING_PHASE = false;
          this.TRACE_INIT("Deleting Recording methods", () => {
            const that = this;
            for (let i2 = 0; i2 < 10; i2++) {
              const idx = i2 > 0 ? i2 : "";
              delete that[`CONSUME${idx}`];
              delete that[`SUBRULE${idx}`];
              delete that[`OPTION${idx}`];
              delete that[`OR${idx}`];
              delete that[`MANY${idx}`];
              delete that[`MANY_SEP${idx}`];
              delete that[`AT_LEAST_ONE${idx}`];
              delete that[`AT_LEAST_ONE_SEP${idx}`];
            }
            delete that[`consume`];
            delete that[`subrule`];
            delete that[`option`];
            delete that[`or`];
            delete that[`many`];
            delete that[`atLeastOne`];
            delete that.ACTION;
            delete that.BACKTRACK;
            delete that.LA;
          });
        }
        //   Parser methods are called inside an ACTION?
        //   Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?
        // @ts-expect-error -- noop place holder
        ACTION_RECORD(impl2) {
        }
        // Executing backtracking logic will break our recording logic assumptions
        BACKTRACK_RECORD(grammarRule, args) {
          return () => true;
        }
        // LA is part of the official API and may be used for custom lookahead logic
        // by end users who may forget to wrap it in ACTION or inside a GATE
        LA_RECORD(howMuch) {
          return END_OF_FILE;
        }
        topLevelRuleRecord(name, def) {
          try {
            const newTopLevelRule = new Rule({ definition: [], name });
            newTopLevelRule.name = name;
            this.recordingProdStack.push(newTopLevelRule);
            def.call(this);
            this.recordingProdStack.pop();
            return newTopLevelRule;
          } catch (originalError) {
            if (originalError.KNOWN_RECORDER_ERROR !== true) {
              try {
                originalError.message = originalError.message + '\n	 This error was thrown during the "grammar recording phase" For more info see:\n	https://chevrotain.io/docs/guide/internals.html#grammar-recording';
              } catch (mutabilityError) {
                throw originalError;
              }
            }
            throw originalError;
          }
        }
        // Implementation of parsing DSL
        optionInternalRecord(actionORMethodDef, occurrence) {
          return recordProd.call(this, Option2, actionORMethodDef, occurrence);
        }
        atLeastOneInternalRecord(occurrence, actionORMethodDef) {
          recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence);
        }
        atLeastOneSepFirstInternalRecord(occurrence, options2) {
          recordProd.call(this, RepetitionMandatoryWithSeparator, options2, occurrence, HANDLE_SEPARATOR);
        }
        manyInternalRecord(occurrence, actionORMethodDef) {
          recordProd.call(this, Repetition, actionORMethodDef, occurrence);
        }
        manySepFirstInternalRecord(occurrence, options2) {
          recordProd.call(this, RepetitionWithSeparator, options2, occurrence, HANDLE_SEPARATOR);
        }
        orInternalRecord(altsOrOpts, occurrence) {
          return recordOrProd.call(this, altsOrOpts, occurrence);
        }
        subruleInternalRecord(ruleToCall, occurrence, options2) {
          assertMethodIdxIsValid(occurrence);
          if (!ruleToCall || has_default2(ruleToCall, "ruleName") === false) {
            const error3 = new Error(`<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(ruleToCall)}>
 inside top level rule: <${this.recordingProdStack[0].name}>`);
            error3.KNOWN_RECORDER_ERROR = true;
            throw error3;
          }
          const prevProd = last_default2(this.recordingProdStack);
          const ruleName = ruleToCall.ruleName;
          const newNoneTerminal = new NonTerminal({
            idx: occurrence,
            nonTerminalName: ruleName,
            label: options2 === null || options2 === void 0 ? void 0 : options2.LABEL,
            // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created
            referencedRule: void 0
          });
          prevProd.definition.push(newNoneTerminal);
          return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT;
        }
        consumeInternalRecord(tokType, occurrence, options2) {
          assertMethodIdxIsValid(occurrence);
          if (!hasShortKeyProperty(tokType)) {
            const error3 = new Error(`<CONSUME${getIdxSuffix(occurrence)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(tokType)}>
 inside top level rule: <${this.recordingProdStack[0].name}>`);
            error3.KNOWN_RECORDER_ERROR = true;
            throw error3;
          }
          const prevProd = last_default2(this.recordingProdStack);
          const newNoneTerminal = new Terminal({
            idx: occurrence,
            terminalType: tokType,
            label: options2 === null || options2 === void 0 ? void 0 : options2.LABEL
          });
          prevProd.definition.push(newNoneTerminal);
          return RECORDING_PHASE_TOKEN;
        }
      };
      __name(recordProd, "recordProd");
      __name2(recordProd, "recordProd");
      __name(recordOrProd, "recordOrProd");
      __name2(recordOrProd, "recordOrProd");
      __name(getIdxSuffix, "getIdxSuffix");
      __name2(getIdxSuffix, "getIdxSuffix");
      __name(assertMethodIdxIsValid, "assertMethodIdxIsValid");
      __name2(assertMethodIdxIsValid, "assertMethodIdxIsValid");
      PerformanceTracer = class {
        static {
          __name(this, "PerformanceTracer");
        }
        static {
          __name2(this, "PerformanceTracer");
        }
        initPerformanceTracer(config3) {
          if (has_default2(config3, "traceInitPerf")) {
            const userTraceInitPerf = config3.traceInitPerf;
            const traceIsNumber = typeof userTraceInitPerf === "number";
            this.traceInitMaxIdent = traceIsNumber ? userTraceInitPerf : Infinity;
            this.traceInitPerf = traceIsNumber ? userTraceInitPerf > 0 : userTraceInitPerf;
          } else {
            this.traceInitMaxIdent = 0;
            this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf;
          }
          this.traceInitIndent = -1;
        }
        TRACE_INIT(phaseDesc, phaseImpl) {
          if (this.traceInitPerf === true) {
            this.traceInitIndent++;
            const indent = new Array(this.traceInitIndent + 1).join("	");
            if (this.traceInitIndent < this.traceInitMaxIdent) {
              console.log(`${indent}--> <${phaseDesc}>`);
            }
            const { time: time4, value: value2 } = timer2(phaseImpl);
            const traceMethod = time4 > 10 ? console.warn : console.log;
            if (this.traceInitIndent < this.traceInitMaxIdent) {
              traceMethod(`${indent}<-- <${phaseDesc}> time: ${time4}ms`);
            }
            this.traceInitIndent--;
            return value2;
          } else {
            return phaseImpl();
          }
        }
      };
      __name(applyMixins, "applyMixins");
      __name2(applyMixins, "applyMixins");
      END_OF_FILE = createTokenInstance(EOF, "", NaN, NaN, NaN, NaN, NaN, NaN);
      Object.freeze(END_OF_FILE);
      DEFAULT_PARSER_CONFIG = Object.freeze({
        recoveryEnabled: false,
        maxLookahead: 3,
        dynamicTokensEnabled: false,
        outputCst: true,
        errorMessageProvider: defaultParserErrorProvider,
        nodeLocationTracking: "none",
        traceInitPerf: false,
        skipValidations: false
      });
      DEFAULT_RULE_CONFIG = Object.freeze({
        recoveryValueFunc: /* @__PURE__ */ __name2(() => void 0, "recoveryValueFunc"),
        resyncEnabled: true
      });
      (function(ParserDefinitionErrorType2) {
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_RULE_NAME"] = 0] = "INVALID_RULE_NAME";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["DUPLICATE_RULE_NAME"] = 1] = "DUPLICATE_RULE_NAME";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_RULE_OVERRIDE"] = 2] = "INVALID_RULE_OVERRIDE";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["DUPLICATE_PRODUCTIONS"] = 3] = "DUPLICATE_PRODUCTIONS";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["UNRESOLVED_SUBRULE_REF"] = 4] = "UNRESOLVED_SUBRULE_REF";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["LEFT_RECURSION"] = 5] = "LEFT_RECURSION";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["NONE_LAST_EMPTY_ALT"] = 6] = "NONE_LAST_EMPTY_ALT";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["AMBIGUOUS_ALTS"] = 7] = "AMBIGUOUS_ALTS";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["CONFLICT_TOKENS_RULES_NAMESPACE"] = 8] = "CONFLICT_TOKENS_RULES_NAMESPACE";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_TOKEN_NAME"] = 9] = "INVALID_TOKEN_NAME";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["NO_NON_EMPTY_LOOKAHEAD"] = 10] = "NO_NON_EMPTY_LOOKAHEAD";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["AMBIGUOUS_PREFIX_ALTS"] = 11] = "AMBIGUOUS_PREFIX_ALTS";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["TOO_MANY_ALTS"] = 12] = "TOO_MANY_ALTS";
        ParserDefinitionErrorType2[ParserDefinitionErrorType2["CUSTOM_LOOKAHEAD_VALIDATION"] = 13] = "CUSTOM_LOOKAHEAD_VALIDATION";
      })(ParserDefinitionErrorType || (ParserDefinitionErrorType = {}));
      __name(EMPTY_ALT, "EMPTY_ALT");
      __name2(EMPTY_ALT, "EMPTY_ALT");
      Parser2 = class _Parser {
        static {
          __name(this, "_Parser");
        }
        static {
          __name2(this, "Parser");
        }
        /**
         *  @deprecated use the **instance** method with the same name instead
         */
        static performSelfAnalysis(parserInstance) {
          throw Error("The **static** `performSelfAnalysis` method has been deprecated.	\nUse the **instance** method with the same name instead.");
        }
        performSelfAnalysis() {
          this.TRACE_INIT("performSelfAnalysis", () => {
            let defErrorsMsgs;
            this.selfAnalysisDone = true;
            const className = this.className;
            this.TRACE_INIT("toFastProps", () => {
              toFastProperties(this);
            });
            this.TRACE_INIT("Grammar Recording", () => {
              try {
                this.enableRecording();
                forEach_default2(this.definedRulesNames, (currRuleName) => {
                  const wrappedRule = this[currRuleName];
                  const originalGrammarAction = wrappedRule["originalGrammarAction"];
                  let recordedRuleGast;
                  this.TRACE_INIT(`${currRuleName} Rule`, () => {
                    recordedRuleGast = this.topLevelRuleRecord(currRuleName, originalGrammarAction);
                  });
                  this.gastProductionsCache[currRuleName] = recordedRuleGast;
                });
              } finally {
                this.disableRecording();
              }
            });
            let resolverErrors = [];
            this.TRACE_INIT("Grammar Resolving", () => {
              resolverErrors = resolveGrammar2({
                rules: values_default2(this.gastProductionsCache)
              });
              this.definitionErrors = this.definitionErrors.concat(resolverErrors);
            });
            this.TRACE_INIT("Grammar Validations", () => {
              if (isEmpty_default2(resolverErrors) && this.skipValidations === false) {
                const validationErrors = validateGrammar2({
                  rules: values_default2(this.gastProductionsCache),
                  tokenTypes: values_default2(this.tokensMap),
                  errMsgProvider: defaultGrammarValidatorErrorProvider,
                  grammarName: className
                });
                const lookaheadValidationErrors = validateLookahead({
                  lookaheadStrategy: this.lookaheadStrategy,
                  rules: values_default2(this.gastProductionsCache),
                  tokenTypes: values_default2(this.tokensMap),
                  grammarName: className
                });
                this.definitionErrors = this.definitionErrors.concat(validationErrors, lookaheadValidationErrors);
              }
            });
            if (isEmpty_default2(this.definitionErrors)) {
              if (this.recoveryEnabled) {
                this.TRACE_INIT("computeAllProdsFollows", () => {
                  const allFollows = computeAllProdsFollows(values_default2(this.gastProductionsCache));
                  this.resyncFollows = allFollows;
                });
              }
              this.TRACE_INIT("ComputeLookaheadFunctions", () => {
                var _a, _b;
                (_b = (_a = this.lookaheadStrategy).initialize) === null || _b === void 0 ? void 0 : _b.call(_a, {
                  rules: values_default2(this.gastProductionsCache)
                });
                this.preComputeLookaheadFunctions(values_default2(this.gastProductionsCache));
              });
            }
            if (!_Parser.DEFER_DEFINITION_ERRORS_HANDLING && !isEmpty_default2(this.definitionErrors)) {
              defErrorsMsgs = map_default2(this.definitionErrors, (defError) => defError.message);
              throw new Error(`Parser Definition Errors detected:
 ${defErrorsMsgs.join("\n-------------------------------\n")}`);
            }
          });
        }
        constructor(tokenVocabulary, config3) {
          this.definitionErrors = [];
          this.selfAnalysisDone = false;
          const that = this;
          that.initErrorHandler(config3);
          that.initLexerAdapter();
          that.initLooksAhead(config3);
          that.initRecognizerEngine(tokenVocabulary, config3);
          that.initRecoverable(config3);
          that.initTreeBuilder(config3);
          that.initContentAssist();
          that.initGastRecorder(config3);
          that.initPerformanceTracer(config3);
          if (has_default2(config3, "ignoredIssues")) {
            throw new Error("The <ignoredIssues> IParserConfig property has been deprecated.\n	Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n	See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n	For further details.");
          }
          this.skipValidations = has_default2(config3, "skipValidations") ? config3.skipValidations : DEFAULT_PARSER_CONFIG.skipValidations;
        }
      };
      Parser2.DEFER_DEFINITION_ERRORS_HANDLING = false;
      applyMixins(Parser2, [
        Recoverable,
        LooksAhead,
        TreeBuilder,
        LexerAdapter,
        RecognizerEngine,
        RecognizerApi,
        ErrorHandler,
        ContentAssist,
        GastRecorder,
        PerformanceTracer
      ]);
      EmbeddedActionsParser = class extends Parser2 {
        static {
          __name(this, "EmbeddedActionsParser");
        }
        static {
          __name2(this, "EmbeddedActionsParser");
        }
        constructor(tokenVocabulary, config3 = DEFAULT_PARSER_CONFIG) {
          const configClone = clone_default3(config3);
          configClone.outputCst = false;
          super(tokenVocabulary, configClone);
        }
      };
      __name(arrayMap22, "arrayMap2");
      __name2(arrayMap22, "arrayMap");
      arrayMap_default22 = arrayMap22;
      __name(listCacheClear22, "listCacheClear2");
      __name2(listCacheClear22, "listCacheClear");
      listCacheClear_default22 = listCacheClear22;
      __name(eq22, "eq2");
      __name2(eq22, "eq");
      eq_default22 = eq22;
      __name(assocIndexOf22, "assocIndexOf2");
      __name2(assocIndexOf22, "assocIndexOf");
      assocIndexOf_default22 = assocIndexOf22;
      arrayProto22 = Array.prototype;
      splice22 = arrayProto22.splice;
      __name(listCacheDelete22, "listCacheDelete2");
      __name2(listCacheDelete22, "listCacheDelete");
      listCacheDelete_default22 = listCacheDelete22;
      __name(listCacheGet22, "listCacheGet2");
      __name2(listCacheGet22, "listCacheGet");
      listCacheGet_default22 = listCacheGet22;
      __name(listCacheHas22, "listCacheHas2");
      __name2(listCacheHas22, "listCacheHas");
      listCacheHas_default22 = listCacheHas22;
      __name(listCacheSet22, "listCacheSet2");
      __name2(listCacheSet22, "listCacheSet");
      listCacheSet_default22 = listCacheSet22;
      __name(ListCache22, "ListCache2");
      __name2(ListCache22, "ListCache");
      ListCache22.prototype.clear = listCacheClear_default22;
      ListCache22.prototype["delete"] = listCacheDelete_default22;
      ListCache22.prototype.get = listCacheGet_default22;
      ListCache22.prototype.has = listCacheHas_default22;
      ListCache22.prototype.set = listCacheSet_default22;
      ListCache_default22 = ListCache22;
      __name(stackClear22, "stackClear2");
      __name2(stackClear22, "stackClear");
      stackClear_default22 = stackClear22;
      __name(stackDelete22, "stackDelete2");
      __name2(stackDelete22, "stackDelete");
      stackDelete_default22 = stackDelete22;
      __name(stackGet22, "stackGet2");
      __name2(stackGet22, "stackGet");
      stackGet_default22 = stackGet22;
      __name(stackHas22, "stackHas2");
      __name2(stackHas22, "stackHas");
      stackHas_default22 = stackHas22;
      freeGlobal22 = typeof global == "object" && global && global.Object === Object && global;
      freeGlobal_default22 = freeGlobal22;
      freeSelf22 = typeof self == "object" && self && self.Object === Object && self;
      root22 = freeGlobal_default22 || freeSelf22 || Function("return this")();
      root_default22 = root22;
      Symbol3 = root_default22.Symbol;
      Symbol_default22 = Symbol3;
      objectProto21 = Object.prototype;
      hasOwnProperty18 = objectProto21.hasOwnProperty;
      nativeObjectToString32 = objectProto21.toString;
      symToStringTag32 = Symbol_default22 ? Symbol_default22.toStringTag : void 0;
      __name(getRawTag22, "getRawTag2");
      __name2(getRawTag22, "getRawTag");
      getRawTag_default22 = getRawTag22;
      objectProto222 = Object.prototype;
      nativeObjectToString4 = objectProto222.toString;
      __name(objectToString22, "objectToString2");
      __name2(objectToString22, "objectToString");
      objectToString_default22 = objectToString22;
      nullTag22 = "[object Null]";
      undefinedTag22 = "[object Undefined]";
      symToStringTag4 = Symbol_default22 ? Symbol_default22.toStringTag : void 0;
      __name(baseGetTag22, "baseGetTag2");
      __name2(baseGetTag22, "baseGetTag");
      baseGetTag_default22 = baseGetTag22;
      __name(isObject22, "isObject2");
      __name2(isObject22, "isObject");
      isObject_default22 = isObject22;
      asyncTag22 = "[object AsyncFunction]";
      funcTag42 = "[object Function]";
      genTag32 = "[object GeneratorFunction]";
      proxyTag22 = "[object Proxy]";
      __name(isFunction22, "isFunction2");
      __name2(isFunction22, "isFunction");
      isFunction_default22 = isFunction22;
      coreJsData22 = root_default22["__core-js_shared__"];
      coreJsData_default22 = coreJsData22;
      maskSrcKey22 = (function() {
        var uid = /[^.]+$/.exec(coreJsData_default22 && coreJsData_default22.keys && coreJsData_default22.keys.IE_PROTO || "");
        return uid ? "Symbol(src)_1." + uid : "";
      })();
      __name(isMasked22, "isMasked2");
      __name2(isMasked22, "isMasked");
      isMasked_default22 = isMasked22;
      funcProto32 = Function.prototype;
      funcToString32 = funcProto32.toString;
      __name(toSource22, "toSource2");
      __name2(toSource22, "toSource");
      toSource_default22 = toSource22;
      reRegExpChar22 = /[\\^$.*+?()[\]{}|]/g;
      reIsHostCtor22 = /^\[object .+?Constructor\]$/;
      funcProto42 = Function.prototype;
      objectProto23 = Object.prototype;
      funcToString42 = funcProto42.toString;
      hasOwnProperty19 = objectProto23.hasOwnProperty;
      reIsNative22 = RegExp(
        "^" + funcToString42.call(hasOwnProperty19).replace(reRegExpChar22, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
      );
      __name(baseIsNative22, "baseIsNative2");
      __name2(baseIsNative22, "baseIsNative");
      baseIsNative_default22 = baseIsNative22;
      __name(getValue22, "getValue2");
      __name2(getValue22, "getValue");
      getValue_default22 = getValue22;
      __name(getNative22, "getNative2");
      __name2(getNative22, "getNative");
      getNative_default22 = getNative22;
      Map3 = getNative_default22(root_default22, "Map");
      Map_default22 = Map3;
      nativeCreate22 = getNative_default22(Object, "create");
      nativeCreate_default22 = nativeCreate22;
      __name(hashClear22, "hashClear2");
      __name2(hashClear22, "hashClear");
      hashClear_default22 = hashClear22;
      __name(hashDelete22, "hashDelete2");
      __name2(hashDelete22, "hashDelete");
      hashDelete_default22 = hashDelete22;
      HASH_UNDEFINED42 = "__lodash_hash_undefined__";
      objectProto24 = Object.prototype;
      hasOwnProperty20 = objectProto24.hasOwnProperty;
      __name(hashGet22, "hashGet2");
      __name2(hashGet22, "hashGet");
      hashGet_default22 = hashGet22;
      objectProto25 = Object.prototype;
      hasOwnProperty21 = objectProto25.hasOwnProperty;
      __name(hashHas22, "hashHas2");
      __name2(hashHas22, "hashHas");
      hashHas_default22 = hashHas22;
      HASH_UNDEFINED5 = "__lodash_hash_undefined__";
      __name(hashSet22, "hashSet2");
      __name2(hashSet22, "hashSet");
      hashSet_default22 = hashSet22;
      __name(Hash22, "Hash2");
      __name2(Hash22, "Hash");
      Hash22.prototype.clear = hashClear_default22;
      Hash22.prototype["delete"] = hashDelete_default22;
      Hash22.prototype.get = hashGet_default22;
      Hash22.prototype.has = hashHas_default22;
      Hash22.prototype.set = hashSet_default22;
      Hash_default22 = Hash22;
      __name(mapCacheClear22, "mapCacheClear2");
      __name2(mapCacheClear22, "mapCacheClear");
      mapCacheClear_default22 = mapCacheClear22;
      __name(isKeyable22, "isKeyable2");
      __name2(isKeyable22, "isKeyable");
      isKeyable_default22 = isKeyable22;
      __name(getMapData22, "getMapData2");
      __name2(getMapData22, "getMapData");
      getMapData_default22 = getMapData22;
      __name(mapCacheDelete22, "mapCacheDelete2");
      __name2(mapCacheDelete22, "mapCacheDelete");
      mapCacheDelete_default22 = mapCacheDelete22;
      __name(mapCacheGet22, "mapCacheGet2");
      __name2(mapCacheGet22, "mapCacheGet");
      mapCacheGet_default22 = mapCacheGet22;
      __name(mapCacheHas22, "mapCacheHas2");
      __name2(mapCacheHas22, "mapCacheHas");
      mapCacheHas_default22 = mapCacheHas22;
      __name(mapCacheSet22, "mapCacheSet2");
      __name2(mapCacheSet22, "mapCacheSet");
      mapCacheSet_default22 = mapCacheSet22;
      __name(MapCache22, "MapCache2");
      __name2(MapCache22, "MapCache");
      MapCache22.prototype.clear = mapCacheClear_default22;
      MapCache22.prototype["delete"] = mapCacheDelete_default22;
      MapCache22.prototype.get = mapCacheGet_default22;
      MapCache22.prototype.has = mapCacheHas_default22;
      MapCache22.prototype.set = mapCacheSet_default22;
      MapCache_default22 = MapCache22;
      LARGE_ARRAY_SIZE4 = 200;
      __name(stackSet22, "stackSet2");
      __name2(stackSet22, "stackSet");
      stackSet_default22 = stackSet22;
      __name(Stack22, "Stack2");
      __name2(Stack22, "Stack");
      Stack22.prototype.clear = stackClear_default22;
      Stack22.prototype["delete"] = stackDelete_default22;
      Stack22.prototype.get = stackGet_default22;
      Stack22.prototype.has = stackHas_default22;
      Stack22.prototype.set = stackSet_default22;
      Stack_default22 = Stack22;
      HASH_UNDEFINED6 = "__lodash_hash_undefined__";
      __name(setCacheAdd22, "setCacheAdd2");
      __name2(setCacheAdd22, "setCacheAdd");
      setCacheAdd_default22 = setCacheAdd22;
      __name(setCacheHas22, "setCacheHas2");
      __name2(setCacheHas22, "setCacheHas");
      setCacheHas_default22 = setCacheHas22;
      __name(SetCache22, "SetCache2");
      __name2(SetCache22, "SetCache");
      SetCache22.prototype.add = SetCache22.prototype.push = setCacheAdd_default22;
      SetCache22.prototype.has = setCacheHas_default22;
      SetCache_default22 = SetCache22;
      __name(arraySome22, "arraySome2");
      __name2(arraySome22, "arraySome");
      arraySome_default22 = arraySome22;
      __name(cacheHas22, "cacheHas2");
      __name2(cacheHas22, "cacheHas");
      cacheHas_default22 = cacheHas22;
      COMPARE_PARTIAL_FLAG72 = 1;
      COMPARE_UNORDERED_FLAG52 = 2;
      __name(equalArrays22, "equalArrays2");
      __name2(equalArrays22, "equalArrays");
      equalArrays_default22 = equalArrays22;
      Uint8Array3 = root_default22.Uint8Array;
      Uint8Array_default22 = Uint8Array3;
      __name(mapToArray22, "mapToArray2");
      __name2(mapToArray22, "mapToArray");
      mapToArray_default22 = mapToArray22;
      __name(setToArray22, "setToArray2");
      __name2(setToArray22, "setToArray");
      setToArray_default22 = setToArray22;
      COMPARE_PARTIAL_FLAG8 = 1;
      COMPARE_UNORDERED_FLAG6 = 2;
      boolTag52 = "[object Boolean]";
      dateTag52 = "[object Date]";
      errorTag42 = "[object Error]";
      mapTag82 = "[object Map]";
      numberTag52 = "[object Number]";
      regexpTag62 = "[object RegExp]";
      setTag82 = "[object Set]";
      stringTag62 = "[object String]";
      symbolTag52 = "[object Symbol]";
      arrayBufferTag52 = "[object ArrayBuffer]";
      dataViewTag62 = "[object DataView]";
      symbolProto42 = Symbol_default22 ? Symbol_default22.prototype : void 0;
      symbolValueOf32 = symbolProto42 ? symbolProto42.valueOf : void 0;
      __name(equalByTag22, "equalByTag2");
      __name2(equalByTag22, "equalByTag");
      equalByTag_default22 = equalByTag22;
      __name(arrayPush22, "arrayPush2");
      __name2(arrayPush22, "arrayPush");
      arrayPush_default22 = arrayPush22;
      isArray22 = Array.isArray;
      isArray_default22 = isArray22;
      __name(baseGetAllKeys22, "baseGetAllKeys2");
      __name2(baseGetAllKeys22, "baseGetAllKeys");
      baseGetAllKeys_default22 = baseGetAllKeys22;
      __name(arrayFilter22, "arrayFilter2");
      __name2(arrayFilter22, "arrayFilter");
      arrayFilter_default22 = arrayFilter22;
      __name(stubArray22, "stubArray2");
      __name2(stubArray22, "stubArray");
      stubArray_default22 = stubArray22;
      objectProto26 = Object.prototype;
      propertyIsEnumerable32 = objectProto26.propertyIsEnumerable;
      nativeGetSymbols32 = Object.getOwnPropertySymbols;
      getSymbols22 = !nativeGetSymbols32 ? stubArray_default22 : function(object3) {
        if (object3 == null) {
          return [];
        }
        object3 = Object(object3);
        return arrayFilter_default22(nativeGetSymbols32(object3), function(symbol) {
          return propertyIsEnumerable32.call(object3, symbol);
        });
      };
      getSymbols_default22 = getSymbols22;
      __name(baseTimes22, "baseTimes2");
      __name2(baseTimes22, "baseTimes");
      baseTimes_default22 = baseTimes22;
      __name(isObjectLike22, "isObjectLike2");
      __name2(isObjectLike22, "isObjectLike");
      isObjectLike_default22 = isObjectLike22;
      argsTag52 = "[object Arguments]";
      __name(baseIsArguments22, "baseIsArguments2");
      __name2(baseIsArguments22, "baseIsArguments");
      baseIsArguments_default22 = baseIsArguments22;
      objectProto27 = Object.prototype;
      hasOwnProperty222 = objectProto27.hasOwnProperty;
      propertyIsEnumerable4 = objectProto27.propertyIsEnumerable;
      isArguments22 = baseIsArguments_default22(/* @__PURE__ */ (function() {
        return arguments;
      })()) ? baseIsArguments_default22 : function(value2) {
        return isObjectLike_default22(value2) && hasOwnProperty222.call(value2, "callee") && !propertyIsEnumerable4.call(value2, "callee");
      };
      isArguments_default22 = isArguments22;
      __name(stubFalse22, "stubFalse2");
      __name2(stubFalse22, "stubFalse");
      stubFalse_default22 = stubFalse22;
      freeExports42 = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule42 = freeExports42 && typeof module == "object" && module && !module.nodeType && module;
      moduleExports42 = freeModule42 && freeModule42.exports === freeExports42;
      Buffer4 = moduleExports42 ? root_default22.Buffer : void 0;
      nativeIsBuffer22 = Buffer4 ? Buffer4.isBuffer : void 0;
      isBuffer22 = nativeIsBuffer22 || stubFalse_default22;
      isBuffer_default22 = isBuffer22;
      MAX_SAFE_INTEGER32 = 9007199254740991;
      reIsUint22 = /^(?:0|[1-9]\d*)$/;
      __name(isIndex22, "isIndex2");
      __name2(isIndex22, "isIndex");
      isIndex_default22 = isIndex22;
      MAX_SAFE_INTEGER4 = 9007199254740991;
      __name(isLength22, "isLength2");
      __name2(isLength22, "isLength");
      isLength_default22 = isLength22;
      argsTag6 = "[object Arguments]";
      arrayTag42 = "[object Array]";
      boolTag6 = "[object Boolean]";
      dateTag62 = "[object Date]";
      errorTag5 = "[object Error]";
      funcTag5 = "[object Function]";
      mapTag92 = "[object Map]";
      numberTag62 = "[object Number]";
      objectTag52 = "[object Object]";
      regexpTag7 = "[object RegExp]";
      setTag92 = "[object Set]";
      stringTag72 = "[object String]";
      weakMapTag42 = "[object WeakMap]";
      arrayBufferTag62 = "[object ArrayBuffer]";
      dataViewTag72 = "[object DataView]";
      float32Tag42 = "[object Float32Array]";
      float64Tag42 = "[object Float64Array]";
      int8Tag42 = "[object Int8Array]";
      int16Tag42 = "[object Int16Array]";
      int32Tag42 = "[object Int32Array]";
      uint8Tag42 = "[object Uint8Array]";
      uint8ClampedTag42 = "[object Uint8ClampedArray]";
      uint16Tag42 = "[object Uint16Array]";
      uint32Tag42 = "[object Uint32Array]";
      typedArrayTags22 = {};
      typedArrayTags22[float32Tag42] = typedArrayTags22[float64Tag42] = typedArrayTags22[int8Tag42] = typedArrayTags22[int16Tag42] = typedArrayTags22[int32Tag42] = typedArrayTags22[uint8Tag42] = typedArrayTags22[uint8ClampedTag42] = typedArrayTags22[uint16Tag42] = typedArrayTags22[uint32Tag42] = true;
      typedArrayTags22[argsTag6] = typedArrayTags22[arrayTag42] = typedArrayTags22[arrayBufferTag62] = typedArrayTags22[boolTag6] = typedArrayTags22[dataViewTag72] = typedArrayTags22[dateTag62] = typedArrayTags22[errorTag5] = typedArrayTags22[funcTag5] = typedArrayTags22[mapTag92] = typedArrayTags22[numberTag62] = typedArrayTags22[objectTag52] = typedArrayTags22[regexpTag7] = typedArrayTags22[setTag92] = typedArrayTags22[stringTag72] = typedArrayTags22[weakMapTag42] = false;
      __name(baseIsTypedArray22, "baseIsTypedArray2");
      __name2(baseIsTypedArray22, "baseIsTypedArray");
      baseIsTypedArray_default22 = baseIsTypedArray22;
      __name(baseUnary22, "baseUnary2");
      __name2(baseUnary22, "baseUnary");
      baseUnary_default22 = baseUnary22;
      freeExports5 = typeof exports == "object" && exports && !exports.nodeType && exports;
      freeModule5 = freeExports5 && typeof module == "object" && module && !module.nodeType && module;
      moduleExports5 = freeModule5 && freeModule5.exports === freeExports5;
      freeProcess22 = moduleExports5 && freeGlobal_default22.process;
      nodeUtil22 = (function() {
        try {
          var types = freeModule5 && freeModule5.require && freeModule5.require("util").types;
          if (types) {
            return types;
          }
          return freeProcess22 && freeProcess22.binding && freeProcess22.binding("util");
        } catch (e3) {
        }
      })();
      nodeUtil_default22 = nodeUtil22;
      nodeIsTypedArray22 = nodeUtil_default22 && nodeUtil_default22.isTypedArray;
      isTypedArray22 = nodeIsTypedArray22 ? baseUnary_default22(nodeIsTypedArray22) : baseIsTypedArray_default22;
      isTypedArray_default22 = isTypedArray22;
      objectProto28 = Object.prototype;
      hasOwnProperty23 = objectProto28.hasOwnProperty;
      __name(arrayLikeKeys22, "arrayLikeKeys2");
      __name2(arrayLikeKeys22, "arrayLikeKeys");
      arrayLikeKeys_default22 = arrayLikeKeys22;
      objectProto29 = Object.prototype;
      __name(isPrototype22, "isPrototype2");
      __name2(isPrototype22, "isPrototype");
      isPrototype_default22 = isPrototype22;
      __name(overArg22, "overArg2");
      __name2(overArg22, "overArg");
      overArg_default22 = overArg22;
      nativeKeys22 = overArg_default22(Object.keys, Object);
      nativeKeys_default22 = nativeKeys22;
      objectProto30 = Object.prototype;
      hasOwnProperty24 = objectProto30.hasOwnProperty;
      __name(baseKeys22, "baseKeys2");
      __name2(baseKeys22, "baseKeys");
      baseKeys_default22 = baseKeys22;
      __name(isArrayLike22, "isArrayLike2");
      __name2(isArrayLike22, "isArrayLike");
      isArrayLike_default22 = isArrayLike22;
      __name(keys22, "keys2");
      __name2(keys22, "keys");
      keys_default22 = keys22;
      __name(getAllKeys22, "getAllKeys2");
      __name2(getAllKeys22, "getAllKeys");
      getAllKeys_default22 = getAllKeys22;
      COMPARE_PARTIAL_FLAG9 = 1;
      objectProto31 = Object.prototype;
      hasOwnProperty25 = objectProto31.hasOwnProperty;
      __name(equalObjects22, "equalObjects2");
      __name2(equalObjects22, "equalObjects");
      equalObjects_default22 = equalObjects22;
      DataView22 = getNative_default22(root_default22, "DataView");
      DataView_default22 = DataView22;
      Promise3 = getNative_default22(root_default22, "Promise");
      Promise_default22 = Promise3;
      Set3 = getNative_default22(root_default22, "Set");
      Set_default22 = Set3;
      WeakMap22 = getNative_default22(root_default22, "WeakMap");
      WeakMap_default22 = WeakMap22;
      mapTag102 = "[object Map]";
      objectTag62 = "[object Object]";
      promiseTag22 = "[object Promise]";
      setTag102 = "[object Set]";
      weakMapTag5 = "[object WeakMap]";
      dataViewTag8 = "[object DataView]";
      dataViewCtorString22 = toSource_default22(DataView_default22);
      mapCtorString22 = toSource_default22(Map_default22);
      promiseCtorString22 = toSource_default22(Promise_default22);
      setCtorString22 = toSource_default22(Set_default22);
      weakMapCtorString22 = toSource_default22(WeakMap_default22);
      getTag22 = baseGetTag_default22;
      if (DataView_default22 && getTag22(new DataView_default22(new ArrayBuffer(1))) != dataViewTag8 || Map_default22 && getTag22(new Map_default22()) != mapTag102 || Promise_default22 && getTag22(Promise_default22.resolve()) != promiseTag22 || Set_default22 && getTag22(new Set_default22()) != setTag102 || WeakMap_default22 && getTag22(new WeakMap_default22()) != weakMapTag5) {
        getTag22 = /* @__PURE__ */ __name2(function(value2) {
          var result = baseGetTag_default22(value2), Ctor = result == objectTag62 ? value2.constructor : void 0, ctorString = Ctor ? toSource_default22(Ctor) : "";
          if (ctorString) {
            switch (ctorString) {
              case dataViewCtorString22:
                return dataViewTag8;
              case mapCtorString22:
                return mapTag102;
              case promiseCtorString22:
                return promiseTag22;
              case setCtorString22:
                return setTag102;
              case weakMapCtorString22:
                return weakMapTag5;
            }
          }
          return result;
        }, "getTag");
      }
      getTag_default22 = getTag22;
      COMPARE_PARTIAL_FLAG10 = 1;
      argsTag7 = "[object Arguments]";
      arrayTag52 = "[object Array]";
      objectTag72 = "[object Object]";
      objectProto322 = Object.prototype;
      hasOwnProperty26 = objectProto322.hasOwnProperty;
      __name(baseIsEqualDeep22, "baseIsEqualDeep2");
      __name2(baseIsEqualDeep22, "baseIsEqualDeep");
      baseIsEqualDeep_default22 = baseIsEqualDeep22;
      __name(baseIsEqual22, "baseIsEqual2");
      __name2(baseIsEqual22, "baseIsEqual");
      baseIsEqual_default22 = baseIsEqual22;
      COMPARE_PARTIAL_FLAG11 = 1;
      COMPARE_UNORDERED_FLAG7 = 2;
      __name(baseIsMatch22, "baseIsMatch2");
      __name2(baseIsMatch22, "baseIsMatch");
      baseIsMatch_default22 = baseIsMatch22;
      __name(isStrictComparable22, "isStrictComparable2");
      __name2(isStrictComparable22, "isStrictComparable");
      isStrictComparable_default22 = isStrictComparable22;
      __name(getMatchData22, "getMatchData2");
      __name2(getMatchData22, "getMatchData");
      getMatchData_default22 = getMatchData22;
      __name(matchesStrictComparable22, "matchesStrictComparable2");
      __name2(matchesStrictComparable22, "matchesStrictComparable");
      matchesStrictComparable_default22 = matchesStrictComparable22;
      __name(baseMatches22, "baseMatches2");
      __name2(baseMatches22, "baseMatches");
      baseMatches_default22 = baseMatches22;
      symbolTag62 = "[object Symbol]";
      __name(isSymbol22, "isSymbol2");
      __name2(isSymbol22, "isSymbol");
      isSymbol_default22 = isSymbol22;
      reIsDeepProp22 = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
      reIsPlainProp22 = /^\w*$/;
      __name(isKey22, "isKey2");
      __name2(isKey22, "isKey");
      isKey_default22 = isKey22;
      FUNC_ERROR_TEXT3 = "Expected a function";
      __name(memoize22, "memoize2");
      __name2(memoize22, "memoize");
      memoize22.Cache = MapCache_default22;
      memoize_default22 = memoize22;
      MAX_MEMOIZE_SIZE22 = 500;
      __name(memoizeCapped22, "memoizeCapped2");
      __name2(memoizeCapped22, "memoizeCapped");
      memoizeCapped_default22 = memoizeCapped22;
      rePropName22 = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
      reEscapeChar22 = /\\(\\)?/g;
      stringToPath22 = memoizeCapped_default22(function(string3) {
        var result = [];
        if (string3.charCodeAt(0) === 46) {
          result.push("");
        }
        string3.replace(rePropName22, function(match3, number7, quote, subString) {
          result.push(quote ? subString.replace(reEscapeChar22, "$1") : number7 || match3);
        });
        return result;
      });
      stringToPath_default22 = stringToPath22;
      INFINITY52 = 1 / 0;
      symbolProto5 = Symbol_default22 ? Symbol_default22.prototype : void 0;
      symbolToString22 = symbolProto5 ? symbolProto5.toString : void 0;
      __name(baseToString22, "baseToString2");
      __name2(baseToString22, "baseToString");
      baseToString_default22 = baseToString22;
      __name(toString32, "toString3");
      __name2(toString32, "toString");
      toString_default22 = toString32;
      __name(castPath22, "castPath2");
      __name2(castPath22, "castPath");
      castPath_default22 = castPath22;
      INFINITY6 = 1 / 0;
      __name(toKey22, "toKey2");
      __name2(toKey22, "toKey");
      toKey_default22 = toKey22;
      __name(baseGet22, "baseGet2");
      __name2(baseGet22, "baseGet");
      baseGet_default22 = baseGet22;
      __name(get22, "get2");
      __name2(get22, "get");
      get_default22 = get22;
      __name(baseHasIn22, "baseHasIn2");
      __name2(baseHasIn22, "baseHasIn");
      baseHasIn_default22 = baseHasIn22;
      __name(hasPath22, "hasPath2");
      __name2(hasPath22, "hasPath");
      hasPath_default22 = hasPath22;
      __name(hasIn22, "hasIn2");
      __name2(hasIn22, "hasIn");
      hasIn_default22 = hasIn22;
      COMPARE_PARTIAL_FLAG12 = 1;
      COMPARE_UNORDERED_FLAG8 = 2;
      __name(baseMatchesProperty22, "baseMatchesProperty2");
      __name2(baseMatchesProperty22, "baseMatchesProperty");
      baseMatchesProperty_default22 = baseMatchesProperty22;
      __name(identity22, "identity2");
      __name2(identity22, "identity");
      identity_default22 = identity22;
      __name(baseProperty22, "baseProperty2");
      __name2(baseProperty22, "baseProperty");
      baseProperty_default22 = baseProperty22;
      __name(basePropertyDeep22, "basePropertyDeep2");
      __name2(basePropertyDeep22, "basePropertyDeep");
      basePropertyDeep_default22 = basePropertyDeep22;
      __name(property22, "property2");
      __name2(property22, "property");
      property_default22 = property22;
      __name(baseIteratee22, "baseIteratee2");
      __name2(baseIteratee22, "baseIteratee");
      baseIteratee_default22 = baseIteratee22;
      __name(createBaseFor22, "createBaseFor2");
      __name2(createBaseFor22, "createBaseFor");
      createBaseFor_default22 = createBaseFor22;
      baseFor22 = createBaseFor_default22();
      baseFor_default22 = baseFor22;
      __name(baseForOwn22, "baseForOwn2");
      __name2(baseForOwn22, "baseForOwn");
      baseForOwn_default22 = baseForOwn22;
      __name(createBaseEach22, "createBaseEach2");
      __name2(createBaseEach22, "createBaseEach");
      createBaseEach_default22 = createBaseEach22;
      baseEach22 = createBaseEach_default22(baseForOwn_default22);
      baseEach_default22 = baseEach22;
      __name(baseMap22, "baseMap2");
      __name2(baseMap22, "baseMap");
      baseMap_default22 = baseMap22;
      __name(map22, "map2");
      __name2(map22, "map");
      map_default22 = map22;
      __name(baseFilter22, "baseFilter2");
      __name2(baseFilter22, "baseFilter");
      baseFilter_default22 = baseFilter22;
      __name(filter22, "filter2");
      __name2(filter22, "filter");
      filter_default22 = filter22;
      __name(buildATNKey, "buildATNKey");
      __name2(buildATNKey, "buildATNKey");
      ATN_BASIC = 1;
      ATN_RULE_START = 2;
      ATN_PLUS_BLOCK_START = 4;
      ATN_STAR_BLOCK_START = 5;
      ATN_RULE_STOP = 7;
      ATN_BLOCK_END = 8;
      ATN_STAR_LOOP_BACK = 9;
      ATN_STAR_LOOP_ENTRY = 10;
      ATN_PLUS_LOOP_BACK = 11;
      ATN_LOOP_END = 12;
      AbstractTransition = class {
        static {
          __name(this, "AbstractTransition");
        }
        static {
          __name2(this, "AbstractTransition");
        }
        constructor(target) {
          this.target = target;
        }
        isEpsilon() {
          return false;
        }
      };
      AtomTransition = class extends AbstractTransition {
        static {
          __name(this, "AtomTransition");
        }
        static {
          __name2(this, "AtomTransition");
        }
        constructor(target, tokenType) {
          super(target);
          this.tokenType = tokenType;
        }
      };
      EpsilonTransition = class extends AbstractTransition {
        static {
          __name(this, "EpsilonTransition");
        }
        static {
          __name2(this, "EpsilonTransition");
        }
        constructor(target) {
          super(target);
        }
        isEpsilon() {
          return true;
        }
      };
      RuleTransition = class extends AbstractTransition {
        static {
          __name(this, "RuleTransition");
        }
        static {
          __name2(this, "RuleTransition");
        }
        constructor(ruleStart, rule, followState) {
          super(ruleStart);
          this.rule = rule;
          this.followState = followState;
        }
        isEpsilon() {
          return true;
        }
      };
      __name(createATN, "createATN");
      __name2(createATN, "createATN");
      __name(createRuleStartAndStopATNStates, "createRuleStartAndStopATNStates");
      __name2(createRuleStartAndStopATNStates, "createRuleStartAndStopATNStates");
      __name(atom, "atom");
      __name2(atom, "atom");
      __name(repetition, "repetition");
      __name2(repetition, "repetition");
      __name(repetitionSep, "repetitionSep");
      __name2(repetitionSep, "repetitionSep");
      __name(repetitionMandatory, "repetitionMandatory");
      __name2(repetitionMandatory, "repetitionMandatory");
      __name(repetitionMandatorySep, "repetitionMandatorySep");
      __name2(repetitionMandatorySep, "repetitionMandatorySep");
      __name(alternation, "alternation");
      __name2(alternation, "alternation");
      __name(option, "option");
      __name2(option, "option");
      __name(block, "block");
      __name2(block, "block");
      __name(plus, "plus");
      __name2(plus, "plus");
      __name(star, "star");
      __name2(star, "star");
      __name(optional, "optional");
      __name2(optional, "optional");
      __name(defineDecisionState, "defineDecisionState");
      __name2(defineDecisionState, "defineDecisionState");
      __name(makeAlts, "makeAlts");
      __name2(makeAlts, "makeAlts");
      __name(getProdType2, "getProdType2");
      __name2(getProdType2, "getProdType");
      __name(makeBlock, "makeBlock");
      __name2(makeBlock, "makeBlock");
      __name(tokenRef, "tokenRef");
      __name2(tokenRef, "tokenRef");
      __name(ruleRef, "ruleRef");
      __name2(ruleRef, "ruleRef");
      __name(buildRuleHandle, "buildRuleHandle");
      __name2(buildRuleHandle, "buildRuleHandle");
      __name(epsilon4, "epsilon");
      __name2(epsilon4, "epsilon");
      __name(newState, "newState");
      __name2(newState, "newState");
      __name(addTransition, "addTransition");
      __name2(addTransition, "addTransition");
      __name(removeState, "removeState");
      __name2(removeState, "removeState");
      DFA_ERROR = {};
      ATNConfigSet = class {
        static {
          __name(this, "ATNConfigSet");
        }
        static {
          __name2(this, "ATNConfigSet");
        }
        constructor() {
          this.map = {};
          this.configs = [];
        }
        get size() {
          return this.configs.length;
        }
        finalize() {
          this.map = {};
        }
        add(config3) {
          const key = getATNConfigKey(config3);
          if (!(key in this.map)) {
            this.map[key] = this.configs.length;
            this.configs.push(config3);
          }
        }
        get elements() {
          return this.configs;
        }
        get alts() {
          return map_default22(this.configs, (e3) => e3.alt);
        }
        get key() {
          let value2 = "";
          for (const k2 in this.map) {
            value2 += k2 + ":";
          }
          return value2;
        }
      };
      __name(getATNConfigKey, "getATNConfigKey");
      __name2(getATNConfigKey, "getATNConfigKey");
      __name(baseExtremum2, "baseExtremum");
      __name2(baseExtremum2, "baseExtremum");
      baseExtremum_default2 = baseExtremum2;
      __name(baseLt2, "baseLt");
      __name2(baseLt2, "baseLt");
      baseLt_default2 = baseLt2;
      __name(min8, "min");
      __name2(min8, "min");
      min_default2 = min8;
      spreadableSymbol22 = Symbol_default22 ? Symbol_default22.isConcatSpreadable : void 0;
      __name(isFlattenable22, "isFlattenable2");
      __name2(isFlattenable22, "isFlattenable");
      isFlattenable_default22 = isFlattenable22;
      __name(baseFlatten22, "baseFlatten2");
      __name2(baseFlatten22, "baseFlatten");
      baseFlatten_default22 = baseFlatten22;
      __name(flatMap2, "flatMap2");
      __name2(flatMap2, "flatMap");
      flatMap_default2 = flatMap2;
      __name(baseFindIndex22, "baseFindIndex2");
      __name2(baseFindIndex22, "baseFindIndex");
      baseFindIndex_default22 = baseFindIndex22;
      __name(baseIsNaN22, "baseIsNaN2");
      __name2(baseIsNaN22, "baseIsNaN");
      baseIsNaN_default22 = baseIsNaN22;
      __name(strictIndexOf22, "strictIndexOf2");
      __name2(strictIndexOf22, "strictIndexOf");
      strictIndexOf_default22 = strictIndexOf22;
      __name(baseIndexOf22, "baseIndexOf2");
      __name2(baseIndexOf22, "baseIndexOf");
      baseIndexOf_default22 = baseIndexOf22;
      __name(arrayIncludes22, "arrayIncludes2");
      __name2(arrayIncludes22, "arrayIncludes");
      arrayIncludes_default22 = arrayIncludes22;
      __name(arrayIncludesWith22, "arrayIncludesWith2");
      __name2(arrayIncludesWith22, "arrayIncludesWith");
      arrayIncludesWith_default22 = arrayIncludesWith22;
      __name(noop22, "noop2");
      __name2(noop22, "noop");
      noop_default22 = noop22;
      INFINITY7 = 1 / 0;
      createSet22 = !(Set_default22 && 1 / setToArray_default22(new Set_default22([, -0]))[1] == INFINITY7) ? noop_default22 : function(values22) {
        return new Set_default22(values22);
      };
      createSet_default22 = createSet22;
      LARGE_ARRAY_SIZE5 = 200;
      __name(baseUniq22, "baseUniq2");
      __name2(baseUniq22, "baseUniq");
      baseUniq_default22 = baseUniq22;
      __name(uniqBy, "uniqBy");
      __name2(uniqBy, "uniqBy");
      uniqBy_default = uniqBy;
      __name(flatten22, "flatten2");
      __name2(flatten22, "flatten");
      flatten_default22 = flatten22;
      __name(arrayEach22, "arrayEach2");
      __name2(arrayEach22, "arrayEach");
      arrayEach_default22 = arrayEach22;
      __name(castFunction22, "castFunction2");
      __name2(castFunction22, "castFunction");
      castFunction_default22 = castFunction22;
      __name(forEach22, "forEach2");
      __name2(forEach22, "forEach");
      forEach_default22 = forEach22;
      mapTag11 = "[object Map]";
      setTag11 = "[object Set]";
      objectProto33 = Object.prototype;
      hasOwnProperty27 = objectProto33.hasOwnProperty;
      __name(isEmpty22, "isEmpty2");
      __name2(isEmpty22, "isEmpty");
      isEmpty_default22 = isEmpty22;
      __name(arrayReduce22, "arrayReduce2");
      __name2(arrayReduce22, "arrayReduce");
      arrayReduce_default22 = arrayReduce22;
      __name(baseReduce22, "baseReduce2");
      __name2(baseReduce22, "baseReduce");
      baseReduce_default22 = baseReduce22;
      __name(reduce22, "reduce2");
      __name2(reduce22, "reduce");
      reduce_default22 = reduce22;
      __name(createDFACache, "createDFACache");
      __name2(createDFACache, "createDFACache");
      PredicateSet = class {
        static {
          __name(this, "PredicateSet");
        }
        static {
          __name2(this, "PredicateSet");
        }
        constructor() {
          this.predicates = [];
        }
        is(index) {
          return index >= this.predicates.length || this.predicates[index];
        }
        set(index, value2) {
          this.predicates[index] = value2;
        }
        toString() {
          let value2 = "";
          const size4 = this.predicates.length;
          for (let i2 = 0; i2 < size4; i2++) {
            value2 += this.predicates[i2] === true ? "1" : "0";
          }
          return value2;
        }
      };
      EMPTY_PREDICATES = new PredicateSet();
      LLStarLookaheadStrategy = class extends LLkLookaheadStrategy {
        static {
          __name(this, "LLStarLookaheadStrategy");
        }
        static {
          __name2(this, "LLStarLookaheadStrategy");
        }
        constructor(options2) {
          var _a;
          super();
          this.logging = (_a = options2 === null || options2 === void 0 ? void 0 : options2.logging) !== null && _a !== void 0 ? _a : ((message) => console.log(message));
        }
        initialize(options2) {
          this.atn = createATN(options2.rules);
          this.dfas = initATNSimulator(this.atn);
        }
        validateAmbiguousAlternationAlternatives() {
          return [];
        }
        validateEmptyOrAlternatives() {
          return [];
        }
        buildLookaheadForAlternation(options2) {
          const { prodOccurrence, rule, hasPredicates, dynamicTokensEnabled } = options2;
          const dfas = this.dfas;
          const logging = this.logging;
          const key = buildATNKey(rule, "Alternation", prodOccurrence);
          const decisionState = this.atn.decisionMap[key];
          const decisionIndex = decisionState.decision;
          const partialAlts = map_default22(getLookaheadPaths({
            maxLookahead: 1,
            occurrence: prodOccurrence,
            prodType: "Alternation",
            rule
          }), (currAlt) => map_default22(currAlt, (path4) => path4[0]));
          if (isLL1Sequence(partialAlts, false) && !dynamicTokensEnabled) {
            const choiceToAlt = reduce_default22(partialAlts, (result, currAlt, idx) => {
              forEach_default22(currAlt, (currTokType) => {
                if (currTokType) {
                  result[currTokType.tokenTypeIdx] = idx;
                  forEach_default22(currTokType.categoryMatches, (currExtendingType) => {
                    result[currExtendingType] = idx;
                  });
                }
              });
              return result;
            }, {});
            if (hasPredicates) {
              return function(orAlts) {
                var _a;
                const nextToken = this.LA(1);
                const prediction = choiceToAlt[nextToken.tokenTypeIdx];
                if (orAlts !== void 0 && prediction !== void 0) {
                  const gate = (_a = orAlts[prediction]) === null || _a === void 0 ? void 0 : _a.GATE;
                  if (gate !== void 0 && gate.call(this) === false) {
                    return void 0;
                  }
                }
                return prediction;
              };
            } else {
              return function() {
                const nextToken = this.LA(1);
                return choiceToAlt[nextToken.tokenTypeIdx];
              };
            }
          } else if (hasPredicates) {
            return function(orAlts) {
              const predicates = new PredicateSet();
              const length2 = orAlts === void 0 ? 0 : orAlts.length;
              for (let i2 = 0; i2 < length2; i2++) {
                const gate = orAlts === null || orAlts === void 0 ? void 0 : orAlts[i2].GATE;
                predicates.set(i2, gate === void 0 || gate.call(this));
              }
              const result = adaptivePredict.call(this, dfas, decisionIndex, predicates, logging);
              return typeof result === "number" ? result : void 0;
            };
          } else {
            return function() {
              const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging);
              return typeof result === "number" ? result : void 0;
            };
          }
        }
        buildLookaheadForOptional(options2) {
          const { prodOccurrence, rule, prodType, dynamicTokensEnabled } = options2;
          const dfas = this.dfas;
          const logging = this.logging;
          const key = buildATNKey(rule, prodType, prodOccurrence);
          const decisionState = this.atn.decisionMap[key];
          const decisionIndex = decisionState.decision;
          const alts = map_default22(getLookaheadPaths({
            maxLookahead: 1,
            occurrence: prodOccurrence,
            prodType,
            rule
          }), (e3) => {
            return map_default22(e3, (g2) => g2[0]);
          });
          if (isLL1Sequence(alts) && alts[0][0] && !dynamicTokensEnabled) {
            const alt = alts[0];
            const singleTokensTypes = flatten_default22(alt);
            if (singleTokensTypes.length === 1 && isEmpty_default22(singleTokensTypes[0].categoryMatches)) {
              const expectedTokenType = singleTokensTypes[0];
              const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx;
              return function() {
                return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey;
              };
            } else {
              const choiceToAlt = reduce_default22(singleTokensTypes, (result, currTokType) => {
                if (currTokType !== void 0) {
                  result[currTokType.tokenTypeIdx] = true;
                  forEach_default22(currTokType.categoryMatches, (currExtendingType) => {
                    result[currExtendingType] = true;
                  });
                }
                return result;
              }, {});
              return function() {
                const nextToken = this.LA(1);
                return choiceToAlt[nextToken.tokenTypeIdx] === true;
              };
            }
          }
          return function() {
            const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging);
            return typeof result === "object" ? false : result === 0;
          };
        }
      };
      __name(isLL1Sequence, "isLL1Sequence");
      __name2(isLL1Sequence, "isLL1Sequence");
      __name(initATNSimulator, "initATNSimulator");
      __name2(initATNSimulator, "initATNSimulator");
      __name(adaptivePredict, "adaptivePredict");
      __name2(adaptivePredict, "adaptivePredict");
      __name(performLookahead, "performLookahead");
      __name2(performLookahead, "performLookahead");
      __name(computeLookaheadTarget, "computeLookaheadTarget");
      __name2(computeLookaheadTarget, "computeLookaheadTarget");
      __name(reportLookaheadAmbiguity, "reportLookaheadAmbiguity");
      __name2(reportLookaheadAmbiguity, "reportLookaheadAmbiguity");
      __name(buildAmbiguityError, "buildAmbiguityError");
      __name2(buildAmbiguityError, "buildAmbiguityError");
      __name(getProductionDslName2, "getProductionDslName2");
      __name2(getProductionDslName2, "getProductionDslName");
      __name(buildAdaptivePredictError, "buildAdaptivePredictError");
      __name2(buildAdaptivePredictError, "buildAdaptivePredictError");
      __name(getExistingTargetState, "getExistingTargetState");
      __name2(getExistingTargetState, "getExistingTargetState");
      __name(computeReachSet, "computeReachSet");
      __name2(computeReachSet, "computeReachSet");
      __name(getReachableTarget, "getReachableTarget");
      __name2(getReachableTarget, "getReachableTarget");
      __name(getUniqueAlt, "getUniqueAlt");
      __name2(getUniqueAlt, "getUniqueAlt");
      __name(newDFAState, "newDFAState");
      __name2(newDFAState, "newDFAState");
      __name(addDFAEdge, "addDFAEdge");
      __name2(addDFAEdge, "addDFAEdge");
      __name(addDFAState, "addDFAState");
      __name2(addDFAState, "addDFAState");
      __name(computeStartState, "computeStartState");
      __name2(computeStartState, "computeStartState");
      __name(closure, "closure");
      __name2(closure, "closure");
      __name(getEpsilonTarget, "getEpsilonTarget");
      __name2(getEpsilonTarget, "getEpsilonTarget");
      __name(hasConfigInRuleStopState, "hasConfigInRuleStopState");
      __name2(hasConfigInRuleStopState, "hasConfigInRuleStopState");
      __name(allConfigsInRuleStopStates, "allConfigsInRuleStopStates");
      __name2(allConfigsInRuleStopStates, "allConfigsInRuleStopStates");
      __name(hasConflictTerminatingPrediction, "hasConflictTerminatingPrediction");
      __name2(hasConflictTerminatingPrediction, "hasConflictTerminatingPrediction");
      __name(getConflictingAltSets, "getConflictingAltSets");
      __name2(getConflictingAltSets, "getConflictingAltSets");
      __name(hasConflictingAltSet, "hasConflictingAltSet");
      __name2(hasConflictingAltSet, "hasConflictingAltSet");
      __name(hasStateAssociatedWithOneAlt, "hasStateAssociatedWithOneAlt");
      __name2(hasStateAssociatedWithOneAlt, "hasStateAssociatedWithOneAlt");
      init_main();
      CstNodeBuilder = class {
        static {
          __name(this, "CstNodeBuilder");
        }
        static {
          __name2(this, "CstNodeBuilder");
        }
        constructor() {
          this.nodeStack = [];
        }
        get current() {
          return this.nodeStack[this.nodeStack.length - 1] ?? this.rootNode;
        }
        buildRootNode(input) {
          this.rootNode = new RootCstNodeImpl(input);
          this.rootNode.root = this.rootNode;
          this.nodeStack = [this.rootNode];
          return this.rootNode;
        }
        buildCompositeNode(feature) {
          const compositeNode = new CompositeCstNodeImpl();
          compositeNode.grammarSource = feature;
          compositeNode.root = this.rootNode;
          this.current.content.push(compositeNode);
          this.nodeStack.push(compositeNode);
          return compositeNode;
        }
        buildLeafNode(token2, feature) {
          const leafNode = new LeafCstNodeImpl(token2.startOffset, token2.image.length, tokenToRange(token2), token2.tokenType, !feature);
          leafNode.grammarSource = feature;
          leafNode.root = this.rootNode;
          this.current.content.push(leafNode);
          return leafNode;
        }
        removeNode(node2) {
          const parent4 = node2.container;
          if (parent4) {
            const index = parent4.content.indexOf(node2);
            if (index >= 0) {
              parent4.content.splice(index, 1);
            }
          }
        }
        addHiddenNodes(tokens2) {
          const nodes5 = [];
          for (const token2 of tokens2) {
            const leafNode = new LeafCstNodeImpl(token2.startOffset, token2.image.length, tokenToRange(token2), token2.tokenType, true);
            leafNode.root = this.rootNode;
            nodes5.push(leafNode);
          }
          let current = this.current;
          let added = false;
          if (current.content.length > 0) {
            current.content.push(...nodes5);
            return;
          }
          while (current.container) {
            const index = current.container.content.indexOf(current);
            if (index > 0) {
              current.container.content.splice(index, 0, ...nodes5);
              added = true;
              break;
            }
            current = current.container;
          }
          if (!added) {
            this.rootNode.content.unshift(...nodes5);
          }
        }
        construct(item) {
          const current = this.current;
          if (typeof item.$type === "string" && !item.$infix) {
            this.current.astNode = item;
          }
          item.$cstNode = current;
          const node2 = this.nodeStack.pop();
          if (node2?.content.length === 0) {
            this.removeNode(node2);
          }
        }
      };
      AbstractCstNode = class {
        static {
          __name(this, "AbstractCstNode");
        }
        static {
          __name2(this, "AbstractCstNode");
        }
        get hidden() {
          return false;
        }
        get astNode() {
          const node2 = typeof this._astNode?.$type === "string" ? this._astNode : this.container?.astNode;
          if (!node2) {
            throw new Error("This node has no associated AST element");
          }
          return node2;
        }
        set astNode(value2) {
          this._astNode = value2;
        }
        get text() {
          return this.root.fullText.substring(this.offset, this.end);
        }
      };
      LeafCstNodeImpl = class extends AbstractCstNode {
        static {
          __name(this, "LeafCstNodeImpl");
        }
        static {
          __name2(this, "LeafCstNodeImpl");
        }
        get offset() {
          return this._offset;
        }
        get length() {
          return this._length;
        }
        get end() {
          return this._offset + this._length;
        }
        get hidden() {
          return this._hidden;
        }
        get tokenType() {
          return this._tokenType;
        }
        get range() {
          return this._range;
        }
        constructor(offset, length2, range3, tokenType, hidden = false) {
          super();
          this._hidden = hidden;
          this._offset = offset;
          this._tokenType = tokenType;
          this._length = length2;
          this._range = range3;
        }
      };
      CompositeCstNodeImpl = class extends AbstractCstNode {
        static {
          __name(this, "CompositeCstNodeImpl");
        }
        static {
          __name2(this, "CompositeCstNodeImpl");
        }
        constructor() {
          super(...arguments);
          this.content = new CstNodeContainer(this);
        }
        get offset() {
          return this.firstNonHiddenNode?.offset ?? 0;
        }
        get length() {
          return this.end - this.offset;
        }
        get end() {
          return this.lastNonHiddenNode?.end ?? 0;
        }
        get range() {
          const firstNode = this.firstNonHiddenNode;
          const lastNode = this.lastNonHiddenNode;
          if (firstNode && lastNode) {
            if (this._rangeCache === void 0) {
              const { range: firstRange } = firstNode;
              const { range: lastRange } = lastNode;
              this._rangeCache = { start: firstRange.start, end: lastRange.end.line < firstRange.start.line ? firstRange.start : lastRange.end };
            }
            return this._rangeCache;
          } else {
            return { start: Position.create(0, 0), end: Position.create(0, 0) };
          }
        }
        get firstNonHiddenNode() {
          for (const child of this.content) {
            if (!child.hidden) {
              return child;
            }
          }
          return this.content[0];
        }
        get lastNonHiddenNode() {
          for (let i2 = this.content.length - 1; i2 >= 0; i2--) {
            const child = this.content[i2];
            if (!child.hidden) {
              return child;
            }
          }
          return this.content[this.content.length - 1];
        }
      };
      CstNodeContainer = class _CstNodeContainer extends Array {
        static {
          __name(this, "_CstNodeContainer");
        }
        static {
          __name2(this, "CstNodeContainer");
        }
        constructor(parent4) {
          super();
          this.parent = parent4;
          Object.setPrototypeOf(this, _CstNodeContainer.prototype);
        }
        push(...items) {
          this.addParents(items);
          return super.push(...items);
        }
        unshift(...items) {
          this.addParents(items);
          return super.unshift(...items);
        }
        splice(start3, count2, ...items) {
          this.addParents(items);
          return super.splice(start3, count2, ...items);
        }
        addParents(items) {
          for (const item of items) {
            item.container = this.parent;
          }
        }
      };
      RootCstNodeImpl = class extends CompositeCstNodeImpl {
        static {
          __name(this, "RootCstNodeImpl");
        }
        static {
          __name2(this, "RootCstNodeImpl");
        }
        get text() {
          return this._text.substring(this.offset, this.end);
        }
        get fullText() {
          return this._text;
        }
        constructor(input) {
          super();
          this._text = "";
          this._text = input ?? "";
        }
      };
      DatatypeSymbol = Symbol("Datatype");
      __name(isDataTypeNode, "isDataTypeNode");
      __name2(isDataTypeNode, "isDataTypeNode");
      ruleSuffix = "\u200B";
      withRuleSuffix = /* @__PURE__ */ __name2((name) => name.endsWith(ruleSuffix) ? name : name + ruleSuffix, "withRuleSuffix");
      AbstractLangiumParser = class {
        static {
          __name(this, "AbstractLangiumParser");
        }
        static {
          __name2(this, "AbstractLangiumParser");
        }
        constructor(services) {
          this._unorderedGroups = /* @__PURE__ */ new Map();
          this.allRules = /* @__PURE__ */ new Map();
          this.lexer = services.parser.Lexer;
          const tokens2 = this.lexer.definition;
          const production = services.LanguageMetaData.mode === "production";
          if (services.shared.profilers.LangiumProfiler?.isActive("parsing")) {
            this.wrapper = new ProfilerWrapper(tokens2, {
              ...services.parser.ParserConfig,
              skipValidations: production,
              errorMessageProvider: services.parser.ParserErrorMessageProvider
            }, services.shared.profilers.LangiumProfiler.createTask("parsing", services.LanguageMetaData.languageId));
          } else {
            this.wrapper = new ChevrotainWrapper(tokens2, {
              ...services.parser.ParserConfig,
              skipValidations: production,
              errorMessageProvider: services.parser.ParserErrorMessageProvider
            });
          }
        }
        alternatives(idx, choices) {
          this.wrapper.wrapOr(idx, choices);
        }
        optional(idx, callback) {
          this.wrapper.wrapOption(idx, callback);
        }
        many(idx, callback) {
          this.wrapper.wrapMany(idx, callback);
        }
        atLeastOne(idx, callback) {
          this.wrapper.wrapAtLeastOne(idx, callback);
        }
        getRule(name) {
          return this.allRules.get(name);
        }
        isRecording() {
          return this.wrapper.IS_RECORDING;
        }
        get unorderedGroups() {
          return this._unorderedGroups;
        }
        getRuleStack() {
          return this.wrapper.RULE_STACK;
        }
        finalize() {
          this.wrapper.wrapSelfAnalysis();
        }
      };
      LangiumParser = class extends AbstractLangiumParser {
        static {
          __name(this, "LangiumParser");
        }
        static {
          __name2(this, "LangiumParser");
        }
        get current() {
          return this.stack[this.stack.length - 1];
        }
        constructor(services) {
          super(services);
          this.nodeBuilder = new CstNodeBuilder();
          this.stack = [];
          this.assignmentMap = /* @__PURE__ */ new Map();
          this.operatorPrecedence = /* @__PURE__ */ new Map();
          this.linker = services.references.Linker;
          this.converter = services.parser.ValueConverter;
          this.astReflection = services.shared.AstReflection;
        }
        rule(rule, impl2) {
          const type3 = this.computeRuleType(rule);
          let infixName = void 0;
          if (isInfixRule(rule)) {
            infixName = rule.name;
            this.registerPrecedenceMap(rule);
          }
          const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(type3, infixName, impl2).bind(this));
          this.allRules.set(rule.name, ruleMethod);
          if (isParserRule(rule) && rule.entry) {
            this.mainRule = ruleMethod;
          }
          return ruleMethod;
        }
        registerPrecedenceMap(rule) {
          const name = rule.name;
          const map32 = /* @__PURE__ */ new Map();
          for (let i2 = 0; i2 < rule.operators.precedences.length; i2++) {
            const precedence = rule.operators.precedences[i2];
            for (const keyword of precedence.operators) {
              map32.set(keyword.value, {
                precedence: i2,
                rightAssoc: precedence.associativity === "right"
              });
            }
          }
          this.operatorPrecedence.set(name, map32);
        }
        computeRuleType(rule) {
          if (isInfixRule(rule)) {
            return getTypeName(rule);
          } else if (rule.fragment) {
            return void 0;
          } else if (isDataTypeRule(rule)) {
            return DatatypeSymbol;
          } else {
            return getTypeName(rule);
          }
        }
        parse(input, options2 = {}) {
          this.nodeBuilder.buildRootNode(input);
          const lexerResult = this.lexerResult = this.lexer.tokenize(input);
          this.wrapper.input = lexerResult.tokens;
          const ruleMethod = options2.rule ? this.allRules.get(options2.rule) : this.mainRule;
          if (!ruleMethod) {
            throw new Error(options2.rule ? `No rule found with name '${options2.rule}'` : "No main rule available.");
          }
          const result = this.doParse(ruleMethod);
          this.nodeBuilder.addHiddenNodes(lexerResult.hidden);
          this.unorderedGroups.clear();
          this.lexerResult = void 0;
          linkContentToContainer(result, { deep: true });
          return {
            value: result,
            lexerErrors: lexerResult.errors,
            lexerReport: lexerResult.report,
            parserErrors: this.wrapper.errors
          };
        }
        doParse(rule) {
          let result = this.wrapper.rule(rule);
          if (this.stack.length > 0) {
            result = this.construct();
          }
          if (result === void 0) {
            throw new Error("No result from parser");
          } else if (this.stack.length > 0) {
            throw new Error("Parser stack is not empty after parsing");
          }
          return result;
        }
        startImplementation($type, infixName, implementation) {
          return (args) => {
            const createNode = !this.isRecording() && $type !== void 0;
            if (createNode) {
              const node2 = { $type };
              this.stack.push(node2);
              if ($type === DatatypeSymbol) {
                node2.value = "";
              } else if (infixName !== void 0) {
                node2.$infixName = infixName;
              }
            }
            implementation(args);
            return createNode ? this.construct() : void 0;
          };
        }
        extractHiddenTokens(token2) {
          const hiddenTokens = this.lexerResult.hidden;
          if (!hiddenTokens.length) {
            return [];
          }
          const offset = token2.startOffset;
          for (let i2 = 0; i2 < hiddenTokens.length; i2++) {
            const token22 = hiddenTokens[i2];
            if (token22.startOffset > offset) {
              return hiddenTokens.splice(0, i2);
            }
          }
          return hiddenTokens.splice(0, hiddenTokens.length);
        }
        consume(idx, tokenType, feature) {
          const token2 = this.wrapper.wrapConsume(idx, tokenType);
          if (!this.isRecording() && this.isValidToken(token2)) {
            const hiddenTokens = this.extractHiddenTokens(token2);
            this.nodeBuilder.addHiddenNodes(hiddenTokens);
            const leafNode = this.nodeBuilder.buildLeafNode(token2, feature);
            const { assignment, crossRef } = this.getAssignment(feature);
            const current = this.current;
            if (assignment) {
              const convertedValue = isKeyword(feature) ? token2.image : this.converter.convert(token2.image, leafNode);
              this.assign(assignment.operator, assignment.feature, convertedValue, leafNode, crossRef);
            } else if (isDataTypeNode(current)) {
              let text4 = token2.image;
              if (!isKeyword(feature)) {
                text4 = this.converter.convert(text4, leafNode).toString();
              }
              current.value += text4;
            }
          }
        }
        /**
         * Most consumed parser tokens are valid. However there are two cases in which they are not valid:
         *
         * 1. They were inserted during error recovery by the parser. These tokens don't really exist and should not be further processed
         * 2. They contain invalid token ranges. This might include the special EOF token, or other tokens produced by invalid token builders.
         */
        isValidToken(token2) {
          return !token2.isInsertedInRecovery && !isNaN(token2.startOffset) && typeof token2.endOffset === "number" && !isNaN(token2.endOffset);
        }
        subrule(idx, rule, fragment, feature, args) {
          let cstNode;
          if (!this.isRecording() && !fragment) {
            cstNode = this.nodeBuilder.buildCompositeNode(feature);
          }
          let result;
          try {
            result = this.wrapper.wrapSubrule(idx, rule, args);
          } finally {
            if (!this.isRecording()) {
              if (result === void 0 && !fragment) {
                result = this.construct();
              }
              if (result !== void 0 && cstNode && cstNode.length > 0) {
                this.performSubruleAssignment(result, feature, cstNode);
              }
            }
          }
        }
        performSubruleAssignment(result, feature, cstNode) {
          const { assignment, crossRef } = this.getAssignment(feature);
          if (assignment) {
            this.assign(assignment.operator, assignment.feature, result, cstNode, crossRef);
          } else if (!assignment) {
            const current = this.current;
            if (isDataTypeNode(current)) {
              current.value += result.toString();
            } else if (typeof result === "object" && result) {
              const object3 = this.assignWithoutOverride(result, current);
              const newItem = object3;
              this.stack.pop();
              this.stack.push(newItem);
            }
          }
        }
        action($type, action) {
          if (!this.isRecording()) {
            let last22 = this.current;
            if (action.feature && action.operator) {
              last22 = this.construct();
              this.nodeBuilder.removeNode(last22.$cstNode);
              const node2 = this.nodeBuilder.buildCompositeNode(action);
              node2.content.push(last22.$cstNode);
              const newItem = { $type };
              this.stack.push(newItem);
              this.assign(action.operator, action.feature, last22, last22.$cstNode);
            } else {
              last22.$type = $type;
            }
          }
        }
        construct() {
          if (this.isRecording()) {
            return void 0;
          }
          const obj = this.stack.pop();
          this.nodeBuilder.construct(obj);
          if ("$infixName" in obj) {
            return this.constructInfix(obj, this.operatorPrecedence.get(obj.$infixName));
          } else if (isDataTypeNode(obj)) {
            return this.converter.convert(obj.value, obj.$cstNode);
          } else {
            assignMandatoryProperties(this.astReflection, obj);
          }
          return obj;
        }
        constructInfix(obj, precedence) {
          const parts = obj.parts;
          if (!Array.isArray(parts) || parts.length === 0) {
            return void 0;
          }
          const operators = obj.operators;
          if (!Array.isArray(operators) || parts.length < 2) {
            return parts[0];
          }
          let lowestPrecedenceIdx = 0;
          let lowestPrecedenceValue = -1;
          for (let i2 = 0; i2 < operators.length; i2++) {
            const operator = operators[i2];
            const opPrecedence = precedence.get(operator) ?? {
              precedence: Infinity,
              rightAssoc: false
            };
            if (opPrecedence.precedence > lowestPrecedenceValue) {
              lowestPrecedenceValue = opPrecedence.precedence;
              lowestPrecedenceIdx = i2;
            } else if (opPrecedence.precedence === lowestPrecedenceValue) {
              if (!opPrecedence.rightAssoc) {
                lowestPrecedenceIdx = i2;
              }
            }
          }
          const leftOperators = operators.slice(0, lowestPrecedenceIdx);
          const rightOperators = operators.slice(lowestPrecedenceIdx + 1);
          const leftParts = parts.slice(0, lowestPrecedenceIdx + 1);
          const rightParts = parts.slice(lowestPrecedenceIdx + 1);
          const leftInfix = {
            $infixName: obj.$infixName,
            $type: obj.$type,
            $cstNode: obj.$cstNode,
            parts: leftParts,
            operators: leftOperators
          };
          const rightInfix = {
            $infixName: obj.$infixName,
            $type: obj.$type,
            $cstNode: obj.$cstNode,
            parts: rightParts,
            operators: rightOperators
          };
          const leftTree = this.constructInfix(leftInfix, precedence);
          const rightTree = this.constructInfix(rightInfix, precedence);
          return {
            $type: obj.$type,
            $cstNode: obj.$cstNode,
            left: leftTree,
            operator: operators[lowestPrecedenceIdx],
            right: rightTree
          };
        }
        getAssignment(feature) {
          if (!this.assignmentMap.has(feature)) {
            const assignment = getContainerOfType(feature, isAssignment);
            this.assignmentMap.set(feature, {
              assignment,
              crossRef: assignment && isCrossReference(assignment.terminal) ? assignment.terminal.isMulti ? "multi" : "single" : void 0
            });
          }
          return this.assignmentMap.get(feature);
        }
        assign(operator, feature, value2, cstNode, crossRef) {
          const obj = this.current;
          let item;
          if (crossRef === "single" && typeof value2 === "string") {
            item = this.linker.buildReference(obj, feature, cstNode, value2);
          } else if (crossRef === "multi" && typeof value2 === "string") {
            item = this.linker.buildMultiReference(obj, feature, cstNode, value2);
          } else {
            item = value2;
          }
          switch (operator) {
            case "=": {
              obj[feature] = item;
              break;
            }
            case "?=": {
              obj[feature] = true;
              break;
            }
            case "+=": {
              if (!Array.isArray(obj[feature])) {
                obj[feature] = [];
              }
              obj[feature].push(item);
            }
          }
        }
        assignWithoutOverride(target, source) {
          for (const [name, existingValue] of Object.entries(source)) {
            const newValue = target[name];
            if (newValue === void 0) {
              target[name] = existingValue;
            } else if (Array.isArray(newValue) && Array.isArray(existingValue)) {
              existingValue.push(...newValue);
              target[name] = existingValue;
            }
          }
          const targetCstNode = target.$cstNode;
          if (targetCstNode) {
            targetCstNode.astNode = void 0;
            target.$cstNode = void 0;
          }
          return target;
        }
        get definitionErrors() {
          return this.wrapper.definitionErrors;
        }
      };
      AbstractParserErrorMessageProvider = class {
        static {
          __name(this, "AbstractParserErrorMessageProvider");
        }
        static {
          __name2(this, "AbstractParserErrorMessageProvider");
        }
        buildMismatchTokenMessage(options2) {
          return defaultParserErrorProvider.buildMismatchTokenMessage(options2);
        }
        buildNotAllInputParsedMessage(options2) {
          return defaultParserErrorProvider.buildNotAllInputParsedMessage(options2);
        }
        buildNoViableAltMessage(options2) {
          return defaultParserErrorProvider.buildNoViableAltMessage(options2);
        }
        buildEarlyExitMessage(options2) {
          return defaultParserErrorProvider.buildEarlyExitMessage(options2);
        }
      };
      LangiumParserErrorMessageProvider = class extends AbstractParserErrorMessageProvider {
        static {
          __name(this, "LangiumParserErrorMessageProvider");
        }
        static {
          __name2(this, "LangiumParserErrorMessageProvider");
        }
        buildMismatchTokenMessage({ expected, actual }) {
          const expectedMsg = expected.LABEL ? "`" + expected.LABEL + "`" : expected.name.endsWith(":KW") ? `keyword '${expected.name.substring(0, expected.name.length - 3)}'` : `token of type '${expected.name}'`;
          return `Expecting ${expectedMsg} but found \`${actual.image}\`.`;
        }
        buildNotAllInputParsedMessage({ firstRedundant }) {
          return `Expecting end of file but found \`${firstRedundant.image}\`.`;
        }
      };
      LangiumCompletionParser = class extends AbstractLangiumParser {
        static {
          __name(this, "LangiumCompletionParser");
        }
        static {
          __name2(this, "LangiumCompletionParser");
        }
        constructor() {
          super(...arguments);
          this.tokens = [];
          this.elementStack = [];
          this.lastElementStack = [];
          this.nextTokenIndex = 0;
          this.stackSize = 0;
        }
        action() {
        }
        construct() {
          return void 0;
        }
        parse(input) {
          this.resetState();
          const tokens2 = this.lexer.tokenize(input, { mode: "partial" });
          this.tokens = tokens2.tokens;
          this.wrapper.input = [...this.tokens];
          this.mainRule.call(this.wrapper, {});
          this.unorderedGroups.clear();
          return {
            tokens: this.tokens,
            elementStack: [...this.lastElementStack],
            tokenIndex: this.nextTokenIndex
          };
        }
        rule(rule, impl2) {
          const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(impl2).bind(this));
          this.allRules.set(rule.name, ruleMethod);
          if (rule.entry) {
            this.mainRule = ruleMethod;
          }
          return ruleMethod;
        }
        resetState() {
          this.elementStack = [];
          this.lastElementStack = [];
          this.nextTokenIndex = 0;
          this.stackSize = 0;
        }
        startImplementation(implementation) {
          return (args) => {
            const size4 = this.keepStackSize();
            try {
              implementation(args);
            } finally {
              this.resetStackSize(size4);
            }
          };
        }
        removeUnexpectedElements() {
          this.elementStack.splice(this.stackSize);
        }
        keepStackSize() {
          const size4 = this.elementStack.length;
          this.stackSize = size4;
          return size4;
        }
        resetStackSize(size4) {
          this.removeUnexpectedElements();
          this.stackSize = size4;
        }
        consume(idx, tokenType, feature) {
          this.wrapper.wrapConsume(idx, tokenType);
          if (!this.isRecording()) {
            this.lastElementStack = [...this.elementStack, feature];
            this.nextTokenIndex = this.currIdx + 1;
          }
        }
        subrule(idx, rule, fragment, feature, args) {
          this.before(feature);
          this.wrapper.wrapSubrule(idx, rule, args);
          this.after(feature);
        }
        before(element3) {
          if (!this.isRecording()) {
            this.elementStack.push(element3);
          }
        }
        after(element3) {
          if (!this.isRecording()) {
            const index = this.elementStack.lastIndexOf(element3);
            if (index >= 0) {
              this.elementStack.splice(index);
            }
          }
        }
        get currIdx() {
          return this.wrapper.currIdx;
        }
      };
      defaultConfig3 = {
        recoveryEnabled: true,
        nodeLocationTracking: "full",
        skipValidations: true,
        errorMessageProvider: new LangiumParserErrorMessageProvider()
      };
      ChevrotainWrapper = class extends EmbeddedActionsParser {
        static {
          __name(this, "ChevrotainWrapper");
        }
        static {
          __name2(this, "ChevrotainWrapper");
        }
        constructor(tokens2, config3) {
          const useDefaultLookahead = config3 && "maxLookahead" in config3;
          super(tokens2, {
            ...defaultConfig3,
            lookaheadStrategy: useDefaultLookahead ? new LLkLookaheadStrategy({ maxLookahead: config3.maxLookahead }) : new LLStarLookaheadStrategy({
              // If validations are skipped, don't log the lookahead warnings
              logging: config3.skipValidations ? () => {
              } : void 0
            }),
            ...config3
          });
        }
        get IS_RECORDING() {
          return this.RECORDING_PHASE;
        }
        DEFINE_RULE(name, impl2, config3) {
          return this.RULE(name, impl2, config3);
        }
        wrapSelfAnalysis() {
          this.performSelfAnalysis();
        }
        wrapConsume(idx, tokenType) {
          return this.consume(idx, tokenType, void 0);
        }
        wrapSubrule(idx, rule, args) {
          return this.subrule(idx, rule, {
            ARGS: [args]
          });
        }
        wrapOr(idx, choices) {
          this.or(idx, choices);
        }
        wrapOption(idx, callback) {
          this.option(idx, callback);
        }
        wrapMany(idx, callback) {
          this.many(idx, callback);
        }
        wrapAtLeastOne(idx, callback) {
          this.atLeastOne(idx, callback);
        }
        rule(rule) {
          return rule.call(this, {});
        }
      };
      ProfilerWrapper = class extends ChevrotainWrapper {
        static {
          __name(this, "ProfilerWrapper");
        }
        static {
          __name2(this, "ProfilerWrapper");
        }
        constructor(tokens2, config3, task) {
          super(tokens2, config3);
          this.task = task;
        }
        rule(rule) {
          this.task.start();
          this.task.startSubTask(this.ruleName(rule));
          try {
            return super.rule(rule);
          } finally {
            this.task.stopSubTask(this.ruleName(rule));
            this.task.stop();
          }
        }
        ruleName(rule) {
          return rule.ruleName;
        }
        subrule(idx, ruleToCall, options2) {
          this.task.startSubTask(this.ruleName(ruleToCall));
          try {
            return super.subrule(idx, ruleToCall, options2);
          } finally {
            this.task.stopSubTask(this.ruleName(ruleToCall));
          }
        }
      };
      __name(createParser, "createParser");
      __name2(createParser, "createParser");
      __name(buildRules, "buildRules");
      __name2(buildRules, "buildRules");
      __name(buildInfixRule, "buildInfixRule");
      __name2(buildInfixRule, "buildInfixRule");
      __name(buildElement, "buildElement");
      __name2(buildElement, "buildElement");
      __name(buildAction, "buildAction");
      __name2(buildAction, "buildAction");
      __name(buildRuleCall, "buildRuleCall");
      __name2(buildRuleCall, "buildRuleCall");
      __name(buildRuleCallPredicate, "buildRuleCallPredicate");
      __name2(buildRuleCallPredicate, "buildRuleCallPredicate");
      __name(buildPredicate, "buildPredicate");
      __name2(buildPredicate, "buildPredicate");
      __name(buildAlternatives, "buildAlternatives");
      __name2(buildAlternatives, "buildAlternatives");
      __name(buildUnorderedGroup, "buildUnorderedGroup");
      __name2(buildUnorderedGroup, "buildUnorderedGroup");
      __name(buildGroup4, "buildGroup");
      __name2(buildGroup4, "buildGroup");
      __name(getGuardCondition, "getGuardCondition");
      __name2(getGuardCondition, "getGuardCondition");
      __name(buildCrossReference, "buildCrossReference");
      __name2(buildCrossReference, "buildCrossReference");
      __name(buildKeyword, "buildKeyword");
      __name2(buildKeyword, "buildKeyword");
      __name(wrap, "wrap");
      __name2(wrap, "wrap");
      __name(getRule, "getRule");
      __name2(getRule, "getRule");
      __name(getRuleName, "getRuleName");
      __name2(getRuleName, "getRuleName");
      __name(getToken, "getToken");
      __name2(getToken, "getToken");
      __name(createCompletionParser, "createCompletionParser");
      __name2(createCompletionParser, "createCompletionParser");
      __name(createLangiumParser, "createLangiumParser");
      __name2(createLangiumParser, "createLangiumParser");
      __name(prepareLangiumParser, "prepareLangiumParser");
      __name2(prepareLangiumParser, "prepareLangiumParser");
      DefaultTokenBuilder = class {
        static {
          __name(this, "DefaultTokenBuilder");
        }
        static {
          __name2(this, "DefaultTokenBuilder");
        }
        constructor() {
          this.diagnostics = [];
        }
        buildTokens(grammar, options2) {
          const reachableRules = stream(getAllReachableRules(grammar, false));
          const terminalTokens = this.buildTerminalTokens(reachableRules);
          const tokens2 = this.buildKeywordTokens(reachableRules, terminalTokens, options2);
          tokens2.push(...terminalTokens);
          return tokens2;
        }
        // eslint-disable-next-line @typescript-eslint/no-unused-vars
        flushLexingReport(text4) {
          return { diagnostics: this.popDiagnostics() };
        }
        popDiagnostics() {
          const diagnostics = [...this.diagnostics];
          this.diagnostics = [];
          return diagnostics;
        }
        buildTerminalTokens(rules2) {
          return rules2.filter(isTerminalRule).filter((e3) => !e3.fragment).map((terminal) => this.buildTerminalToken(terminal)).toArray();
        }
        buildTerminalToken(terminal) {
          const regex2 = terminalRegex(terminal);
          const pattern = this.requiresCustomPattern(regex2) ? this.regexPatternFunction(regex2) : regex2;
          const tokenType = {
            name: terminal.name,
            PATTERN: pattern
          };
          if (typeof pattern === "function") {
            tokenType.LINE_BREAKS = true;
          }
          if (terminal.hidden) {
            tokenType.GROUP = isWhitespace2(regex2) ? Lexer2.SKIPPED : "hidden";
          }
          return tokenType;
        }
        requiresCustomPattern(regex2) {
          if (regex2.flags.includes("u") || regex2.flags.includes("s")) {
            return true;
          } else {
            return false;
          }
        }
        regexPatternFunction(regex2) {
          const stickyRegex = new RegExp(regex2, regex2.flags + "y");
          return (text4, offset) => {
            stickyRegex.lastIndex = offset;
            const execResult = stickyRegex.exec(text4);
            return execResult;
          };
        }
        buildKeywordTokens(rules2, terminalTokens, options2) {
          return rules2.filter(isAbstractParserRule).flatMap((rule) => streamAllContents(rule).filter(isKeyword)).distinct((e3) => e3.value).toArray().sort((a2, b3) => b3.value.length - a2.value.length).map((keyword) => this.buildKeywordToken(keyword, terminalTokens, Boolean(options2?.caseInsensitive)));
        }
        buildKeywordToken(keyword, terminalTokens, caseInsensitive) {
          const keywordPattern = this.buildKeywordPattern(keyword, caseInsensitive);
          const tokenType = {
            name: keyword.value,
            PATTERN: keywordPattern,
            LONGER_ALT: this.findLongerAlt(keyword, terminalTokens)
          };
          if (typeof keywordPattern === "function") {
            tokenType.LINE_BREAKS = true;
          }
          return tokenType;
        }
        buildKeywordPattern(keyword, caseInsensitive) {
          return caseInsensitive ? new RegExp(escapeRegExp(keyword.value), "i") : keyword.value;
        }
        findLongerAlt(keyword, terminalTokens) {
          return terminalTokens.reduce((longerAlts, token2) => {
            const pattern = token2?.PATTERN;
            if (pattern?.source && partialMatches("^" + pattern.source + "$", keyword.value)) {
              longerAlts.push(token2);
            }
            return longerAlts;
          }, []);
        }
      };
      DefaultValueConverter = class {
        static {
          __name(this, "DefaultValueConverter");
        }
        static {
          __name2(this, "DefaultValueConverter");
        }
        convert(input, cstNode) {
          let feature = cstNode.grammarSource;
          if (isCrossReference(feature)) {
            feature = getCrossReferenceTerminal(feature);
          }
          if (isRuleCall(feature)) {
            const rule = feature.rule.ref;
            if (!rule) {
              throw new Error("This cst node was not parsed by a rule.");
            }
            return this.runConverter(rule, input, cstNode);
          }
          return input;
        }
        // eslint-disable-next-line @typescript-eslint/no-unused-vars
        runConverter(rule, input, cstNode) {
          switch (rule.name.toUpperCase()) {
            case "INT":
              return ValueConverter.convertInt(input);
            case "STRING":
              return ValueConverter.convertString(input);
            case "ID":
              return ValueConverter.convertID(input);
          }
          switch (getRuleType(rule)?.toLowerCase()) {
            case "number":
              return ValueConverter.convertNumber(input);
            case "boolean":
              return ValueConverter.convertBoolean(input);
            case "bigint":
              return ValueConverter.convertBigint(input);
            case "date":
              return ValueConverter.convertDate(input);
            default:
              return input;
          }
        }
      };
      (function(ValueConverter2) {
        function convertString(input) {
          let result = "";
          for (let i2 = 1; i2 < input.length - 1; i2++) {
            const c3 = input.charAt(i2);
            if (c3 === "\\") {
              const c1 = input.charAt(++i2);
              result += convertEscapeCharacter(c1);
            } else {
              result += c3;
            }
          }
          return result;
        }
        __name(convertString, "convertString");
        __name2(convertString, "convertString");
        ValueConverter2.convertString = convertString;
        function convertEscapeCharacter(char2) {
          switch (char2) {
            case "b":
              return "\b";
            case "f":
              return "\f";
            case "n":
              return "\n";
            case "r":
              return "\r";
            case "t":
              return "	";
            case "v":
              return "\v";
            case "0":
              return "\0";
            default:
              return char2;
          }
        }
        __name(convertEscapeCharacter, "convertEscapeCharacter");
        __name2(convertEscapeCharacter, "convertEscapeCharacter");
        function convertID(input) {
          if (input.charAt(0) === "^") {
            return input.substring(1);
          } else {
            return input;
          }
        }
        __name(convertID, "convertID");
        __name2(convertID, "convertID");
        ValueConverter2.convertID = convertID;
        function convertInt(input) {
          return parseInt(input);
        }
        __name(convertInt, "convertInt");
        __name2(convertInt, "convertInt");
        ValueConverter2.convertInt = convertInt;
        function convertBigint(input) {
          return BigInt(input);
        }
        __name(convertBigint, "convertBigint");
        __name2(convertBigint, "convertBigint");
        ValueConverter2.convertBigint = convertBigint;
        function convertDate(input) {
          return new Date(input);
        }
        __name(convertDate, "convertDate");
        __name2(convertDate, "convertDate");
        ValueConverter2.convertDate = convertDate;
        function convertNumber(input) {
          return Number(input);
        }
        __name(convertNumber, "convertNumber");
        __name2(convertNumber, "convertNumber");
        ValueConverter2.convertNumber = convertNumber;
        function convertBoolean(input) {
          return input.toLowerCase() === "true";
        }
        __name(convertBoolean, "convertBoolean");
        __name2(convertBoolean, "convertBoolean");
        ValueConverter2.convertBoolean = convertBoolean;
      })(ValueConverter || (ValueConverter = {}));
      cancellation_exports = {};
      __reExport(cancellation_exports, __toESM2(require_cancellation(), 1));
      __name(delayNextTick, "delayNextTick");
      __name2(delayNextTick, "delayNextTick");
      lastTick = 0;
      globalInterruptionPeriod = 10;
      __name(startCancelableOperation, "startCancelableOperation");
      __name2(startCancelableOperation, "startCancelableOperation");
      __name(setInterruptionPeriod, "setInterruptionPeriod");
      __name2(setInterruptionPeriod, "setInterruptionPeriod");
      OperationCancelled = Symbol("OperationCancelled");
      __name(isOperationCancelled, "isOperationCancelled");
      __name2(isOperationCancelled, "isOperationCancelled");
      __name(interruptAndCheck, "interruptAndCheck");
      __name2(interruptAndCheck, "interruptAndCheck");
      Deferred = class {
        static {
          __name(this, "Deferred");
        }
        static {
          __name2(this, "Deferred");
        }
        constructor() {
          this.promise = new Promise((resolve2, reject22) => {
            this.resolve = (arg) => {
              resolve2(arg);
              return this;
            };
            this.reject = (err) => {
              reject22(err);
              return this;
            };
          });
        }
      };
      FullTextDocument2 = class _FullTextDocument {
        static {
          __name(this, "_FullTextDocument");
        }
        static {
          __name2(this, "FullTextDocument");
        }
        constructor(uri, languageId, version3, content) {
          this._uri = uri;
          this._languageId = languageId;
          this._version = version3;
          this._content = content;
          this._lineOffsets = void 0;
        }
        get uri() {
          return this._uri;
        }
        get languageId() {
          return this._languageId;
        }
        get version() {
          return this._version;
        }
        getText(range3) {
          if (range3) {
            const start3 = this.offsetAt(range3.start);
            const end2 = this.offsetAt(range3.end);
            return this._content.substring(start3, end2);
          }
          return this._content;
        }
        update(changes, version3) {
          for (const change2 of changes) {
            if (_FullTextDocument.isIncremental(change2)) {
              const range3 = getWellformedRange(change2.range);
              const startOffset = this.offsetAt(range3.start);
              const endOffset = this.offsetAt(range3.end);
              this._content = this._content.substring(0, startOffset) + change2.text + this._content.substring(endOffset, this._content.length);
              const startLine = Math.max(range3.start.line, 0);
              const endLine = Math.max(range3.end.line, 0);
              let lineOffsets = this._lineOffsets;
              const addedLineOffsets = computeLineOffsets(change2.text, false, startOffset);
              if (endLine - startLine === addedLineOffsets.length) {
                for (let i2 = 0, len = addedLineOffsets.length; i2 < len; i2++) {
                  lineOffsets[i2 + startLine + 1] = addedLineOffsets[i2];
                }
              } else {
                if (addedLineOffsets.length < 1e4) {
                  lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);
                } else {
                  this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
                }
              }
              const diff2 = change2.text.length - (endOffset - startOffset);
              if (diff2 !== 0) {
                for (let i2 = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i2 < len; i2++) {
                  lineOffsets[i2] = lineOffsets[i2] + diff2;
                }
              }
            } else if (_FullTextDocument.isFull(change2)) {
              this._content = change2.text;
              this._lineOffsets = void 0;
            } else {
              throw new Error("Unknown change event received");
            }
          }
          this._version = version3;
        }
        getLineOffsets() {
          if (this._lineOffsets === void 0) {
            this._lineOffsets = computeLineOffsets(this._content, true);
          }
          return this._lineOffsets;
        }
        positionAt(offset) {
          offset = Math.max(Math.min(offset, this._content.length), 0);
          const lineOffsets = this.getLineOffsets();
          let low = 0, high = lineOffsets.length;
          if (high === 0) {
            return { line: 0, character: offset };
          }
          while (low < high) {
            const mid = Math.floor((low + high) / 2);
            if (lineOffsets[mid] > offset) {
              high = mid;
            } else {
              low = mid + 1;
            }
          }
          const line2 = low - 1;
          offset = this.ensureBeforeEOL(offset, lineOffsets[line2]);
          return { line: line2, character: offset - lineOffsets[line2] };
        }
        offsetAt(position5) {
          const lineOffsets = this.getLineOffsets();
          if (position5.line >= lineOffsets.length) {
            return this._content.length;
          } else if (position5.line < 0) {
            return 0;
          }
          const lineOffset = lineOffsets[position5.line];
          if (position5.character <= 0) {
            return lineOffset;
          }
          const nextLineOffset = position5.line + 1 < lineOffsets.length ? lineOffsets[position5.line + 1] : this._content.length;
          const offset = Math.min(lineOffset + position5.character, nextLineOffset);
          return this.ensureBeforeEOL(offset, lineOffset);
        }
        ensureBeforeEOL(offset, lineOffset) {
          while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {
            offset--;
          }
          return offset;
        }
        get lineCount() {
          return this.getLineOffsets().length;
        }
        static isIncremental(event3) {
          const candidate = event3;
          return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === "number");
        }
        static isFull(event3) {
          const candidate = event3;
          return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range === void 0 && candidate.rangeLength === void 0;
        }
      };
      (function(TextDocument3) {
        function create4(uri, languageId, version3, content) {
          return new FullTextDocument2(uri, languageId, version3, content);
        }
        __name(create4, "create");
        __name2(create4, "create");
        TextDocument3.create = create4;
        function update2(document2, changes, version3) {
          if (document2 instanceof FullTextDocument2) {
            document2.update(changes, version3);
            return document2;
          } else {
            throw new Error("TextDocument.update: document must be created by TextDocument.create");
          }
        }
        __name(update2, "update");
        __name2(update2, "update");
        TextDocument3.update = update2;
        function applyEdits(document2, edits) {
          const text4 = document2.getText();
          const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a2, b3) => {
            const diff2 = a2.range.start.line - b3.range.start.line;
            if (diff2 === 0) {
              return a2.range.start.character - b3.range.start.character;
            }
            return diff2;
          });
          let lastModifiedOffset = 0;
          const spans = [];
          for (const e3 of sortedEdits) {
            const startOffset = document2.offsetAt(e3.range.start);
            if (startOffset < lastModifiedOffset) {
              throw new Error("Overlapping edit");
            } else if (startOffset > lastModifiedOffset) {
              spans.push(text4.substring(lastModifiedOffset, startOffset));
            }
            if (e3.newText.length) {
              spans.push(e3.newText);
            }
            lastModifiedOffset = document2.offsetAt(e3.range.end);
          }
          spans.push(text4.substr(lastModifiedOffset));
          return spans.join("");
        }
        __name(applyEdits, "applyEdits");
        __name2(applyEdits, "applyEdits");
        TextDocument3.applyEdits = applyEdits;
      })(TextDocument2 || (TextDocument2 = {}));
      __name(mergeSort, "mergeSort");
      __name2(mergeSort, "mergeSort");
      __name(computeLineOffsets, "computeLineOffsets");
      __name2(computeLineOffsets, "computeLineOffsets");
      __name(isEOL, "isEOL");
      __name2(isEOL, "isEOL");
      __name(getWellformedRange, "getWellformedRange");
      __name2(getWellformedRange, "getWellformedRange");
      __name(getWellformedEdit, "getWellformedEdit");
      __name2(getWellformedEdit, "getWellformedEdit");
      (() => {
        "use strict";
        var t4 = { 975: (t22) => {
          function e22(t32) {
            if ("string" != typeof t32) throw new TypeError("Path must be a string. Received " + JSON.stringify(t32));
          }
          __name(e22, "e2");
          __name2(e22, "e");
          function r22(t32, e32) {
            for (var r3, n3 = "", i22 = 0, o22 = -1, s22 = 0, h22 = 0; h22 <= t32.length; ++h22) {
              if (h22 < t32.length) r3 = t32.charCodeAt(h22);
              else {
                if (47 === r3) break;
                r3 = 47;
              }
              if (47 === r3) {
                if (o22 === h22 - 1 || 1 === s22) ;
                else if (o22 !== h22 - 1 && 2 === s22) {
                  if (n3.length < 2 || 2 !== i22 || 46 !== n3.charCodeAt(n3.length - 1) || 46 !== n3.charCodeAt(n3.length - 2)) {
                    if (n3.length > 2) {
                      var a22 = n3.lastIndexOf("/");
                      if (a22 !== n3.length - 1) {
                        -1 === a22 ? (n3 = "", i22 = 0) : i22 = (n3 = n3.slice(0, a22)).length - 1 - n3.lastIndexOf("/"), o22 = h22, s22 = 0;
                        continue;
                      }
                    } else if (2 === n3.length || 1 === n3.length) {
                      n3 = "", i22 = 0, o22 = h22, s22 = 0;
                      continue;
                    }
                  }
                  e32 && (n3.length > 0 ? n3 += "/.." : n3 = "..", i22 = 2);
                } else n3.length > 0 ? n3 += "/" + t32.slice(o22 + 1, h22) : n3 = t32.slice(o22 + 1, h22), i22 = h22 - o22 - 1;
                o22 = h22, s22 = 0;
              } else 46 === r3 && -1 !== s22 ? ++s22 : s22 = -1;
            }
            return n3;
          }
          __name(r22, "r2");
          __name2(r22, "r");
          var n22 = { resolve: /* @__PURE__ */ __name2(function() {
            for (var t32, n3 = "", i22 = false, o22 = arguments.length - 1; o22 >= -1 && !i22; o22--) {
              var s22;
              o22 >= 0 ? s22 = arguments[o22] : (void 0 === t32 && (t32 = process.cwd()), s22 = t32), e22(s22), 0 !== s22.length && (n3 = s22 + "/" + n3, i22 = 47 === s22.charCodeAt(0));
            }
            return n3 = r22(n3, !i22), i22 ? n3.length > 0 ? "/" + n3 : "/" : n3.length > 0 ? n3 : ".";
          }, "resolve"), normalize: /* @__PURE__ */ __name2(function(t32) {
            if (e22(t32), 0 === t32.length) return ".";
            var n3 = 47 === t32.charCodeAt(0), i22 = 47 === t32.charCodeAt(t32.length - 1);
            return 0 !== (t32 = r22(t32, !n3)).length || n3 || (t32 = "."), t32.length > 0 && i22 && (t32 += "/"), n3 ? "/" + t32 : t32;
          }, "normalize"), isAbsolute: /* @__PURE__ */ __name2(function(t32) {
            return e22(t32), t32.length > 0 && 47 === t32.charCodeAt(0);
          }, "isAbsolute"), join: /* @__PURE__ */ __name2(function() {
            if (0 === arguments.length) return ".";
            for (var t32, r3 = 0; r3 < arguments.length; ++r3) {
              var i22 = arguments[r3];
              e22(i22), i22.length > 0 && (void 0 === t32 ? t32 = i22 : t32 += "/" + i22);
            }
            return void 0 === t32 ? "." : n22.normalize(t32);
          }, "join"), relative: /* @__PURE__ */ __name2(function(t32, r3) {
            if (e22(t32), e22(r3), t32 === r3) return "";
            if ((t32 = n22.resolve(t32)) === (r3 = n22.resolve(r3))) return "";
            for (var i22 = 1; i22 < t32.length && 47 === t32.charCodeAt(i22); ++i22) ;
            for (var o22 = t32.length, s22 = o22 - i22, h22 = 1; h22 < r3.length && 47 === r3.charCodeAt(h22); ++h22) ;
            for (var a22 = r3.length - h22, c22 = s22 < a22 ? s22 : a22, f22 = -1, u22 = 0; u22 <= c22; ++u22) {
              if (u22 === c22) {
                if (a22 > c22) {
                  if (47 === r3.charCodeAt(h22 + u22)) return r3.slice(h22 + u22 + 1);
                  if (0 === u22) return r3.slice(h22 + u22);
                } else s22 > c22 && (47 === t32.charCodeAt(i22 + u22) ? f22 = u22 : 0 === u22 && (f22 = 0));
                break;
              }
              var l22 = t32.charCodeAt(i22 + u22);
              if (l22 !== r3.charCodeAt(h22 + u22)) break;
              47 === l22 && (f22 = u22);
            }
            var g22 = "";
            for (u22 = i22 + f22 + 1; u22 <= o22; ++u22) u22 !== o22 && 47 !== t32.charCodeAt(u22) || (0 === g22.length ? g22 += ".." : g22 += "/..");
            return g22.length > 0 ? g22 + r3.slice(h22 + f22) : (h22 += f22, 47 === r3.charCodeAt(h22) && ++h22, r3.slice(h22));
          }, "relative"), _makeLong: /* @__PURE__ */ __name2(function(t32) {
            return t32;
          }, "_makeLong"), dirname: /* @__PURE__ */ __name2(function(t32) {
            if (e22(t32), 0 === t32.length) return ".";
            for (var r3 = t32.charCodeAt(0), n3 = 47 === r3, i22 = -1, o22 = true, s22 = t32.length - 1; s22 >= 1; --s22) if (47 === (r3 = t32.charCodeAt(s22))) {
              if (!o22) {
                i22 = s22;
                break;
              }
            } else o22 = false;
            return -1 === i22 ? n3 ? "/" : "." : n3 && 1 === i22 ? "//" : t32.slice(0, i22);
          }, "dirname"), basename: /* @__PURE__ */ __name2(function(t32, r3) {
            if (void 0 !== r3 && "string" != typeof r3) throw new TypeError('"ext" argument must be a string');
            e22(t32);
            var n3, i22 = 0, o22 = -1, s22 = true;
            if (void 0 !== r3 && r3.length > 0 && r3.length <= t32.length) {
              if (r3.length === t32.length && r3 === t32) return "";
              var h22 = r3.length - 1, a22 = -1;
              for (n3 = t32.length - 1; n3 >= 0; --n3) {
                var c22 = t32.charCodeAt(n3);
                if (47 === c22) {
                  if (!s22) {
                    i22 = n3 + 1;
                    break;
                  }
                } else -1 === a22 && (s22 = false, a22 = n3 + 1), h22 >= 0 && (c22 === r3.charCodeAt(h22) ? -1 == --h22 && (o22 = n3) : (h22 = -1, o22 = a22));
              }
              return i22 === o22 ? o22 = a22 : -1 === o22 && (o22 = t32.length), t32.slice(i22, o22);
            }
            for (n3 = t32.length - 1; n3 >= 0; --n3) if (47 === t32.charCodeAt(n3)) {
              if (!s22) {
                i22 = n3 + 1;
                break;
              }
            } else -1 === o22 && (s22 = false, o22 = n3 + 1);
            return -1 === o22 ? "" : t32.slice(i22, o22);
          }, "basename"), extname: /* @__PURE__ */ __name2(function(t32) {
            e22(t32);
            for (var r3 = -1, n3 = 0, i22 = -1, o22 = true, s22 = 0, h22 = t32.length - 1; h22 >= 0; --h22) {
              var a22 = t32.charCodeAt(h22);
              if (47 !== a22) -1 === i22 && (o22 = false, i22 = h22 + 1), 46 === a22 ? -1 === r3 ? r3 = h22 : 1 !== s22 && (s22 = 1) : -1 !== r3 && (s22 = -1);
              else if (!o22) {
                n3 = h22 + 1;
                break;
              }
            }
            return -1 === r3 || -1 === i22 || 0 === s22 || 1 === s22 && r3 === i22 - 1 && r3 === n3 + 1 ? "" : t32.slice(r3, i22);
          }, "extname"), format: /* @__PURE__ */ __name2(function(t32) {
            if (null === t32 || "object" != typeof t32) throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof t32);
            return (function(t42, e32) {
              var r3 = e32.dir || e32.root, n3 = e32.base || (e32.name || "") + (e32.ext || "");
              return r3 ? r3 === e32.root ? r3 + n3 : r3 + "/" + n3 : n3;
            })(0, t32);
          }, "format"), parse: /* @__PURE__ */ __name2(function(t32) {
            e22(t32);
            var r3 = { root: "", dir: "", base: "", ext: "", name: "" };
            if (0 === t32.length) return r3;
            var n3, i22 = t32.charCodeAt(0), o22 = 47 === i22;
            o22 ? (r3.root = "/", n3 = 1) : n3 = 0;
            for (var s22 = -1, h22 = 0, a22 = -1, c22 = true, f22 = t32.length - 1, u22 = 0; f22 >= n3; --f22) if (47 !== (i22 = t32.charCodeAt(f22))) -1 === a22 && (c22 = false, a22 = f22 + 1), 46 === i22 ? -1 === s22 ? s22 = f22 : 1 !== u22 && (u22 = 1) : -1 !== s22 && (u22 = -1);
            else if (!c22) {
              h22 = f22 + 1;
              break;
            }
            return -1 === s22 || -1 === a22 || 0 === u22 || 1 === u22 && s22 === a22 - 1 && s22 === h22 + 1 ? -1 !== a22 && (r3.base = r3.name = 0 === h22 && o22 ? t32.slice(1, a22) : t32.slice(h22, a22)) : (0 === h22 && o22 ? (r3.name = t32.slice(1, s22), r3.base = t32.slice(1, a22)) : (r3.name = t32.slice(h22, s22), r3.base = t32.slice(h22, a22)), r3.ext = t32.slice(s22, a22)), h22 > 0 ? r3.dir = t32.slice(0, h22 - 1) : o22 && (r3.dir = "/"), r3;
          }, "parse"), sep: "/", delimiter: ":", win32: null, posix: null };
          n22.posix = n22, t22.exports = n22;
        } }, e3 = {};
        function r2(n22) {
          var i22 = e3[n22];
          if (void 0 !== i22) return i22.exports;
          var o22 = e3[n22] = { exports: {} };
          return t4[n22](o22, o22.exports, r2), o22.exports;
        }
        __name(r2, "r");
        __name2(r2, "r");
        r2.d = (t22, e22) => {
          for (var n22 in e22) r2.o(e22, n22) && !r2.o(t22, n22) && Object.defineProperty(t22, n22, { enumerable: true, get: e22[n22] });
        }, r2.o = (t22, e22) => Object.prototype.hasOwnProperty.call(t22, e22), r2.r = (t22) => {
          "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t22, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t22, "__esModule", { value: true });
        };
        var n2 = {};
        let i2;
        if (r2.r(n2), r2.d(n2, { URI: /* @__PURE__ */ __name2(() => l4, "URI"), Utils: /* @__PURE__ */ __name2(() => I3, "Utils") }), "object" == typeof process) i2 = "win32" === process.platform;
        else if ("object" == typeof navigator) {
          let t22 = navigator.userAgent;
          i2 = t22.indexOf("Windows") >= 0;
        }
        const o2 = /^\w[\w\d+.-]*$/, s2 = /^\//, h3 = /^\/\//;
        function a2(t22, e22) {
          if (!t22.scheme && e22) throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${t22.authority}", path: "${t22.path}", query: "${t22.query}", fragment: "${t22.fragment}"}`);
          if (t22.scheme && !o2.test(t22.scheme)) throw new Error("[UriError]: Scheme contains illegal characters.");
          if (t22.path) {
            if (t22.authority) {
              if (!s2.test(t22.path)) throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character');
            } else if (h3.test(t22.path)) throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")');
          }
        }
        __name(a2, "a");
        __name2(a2, "a");
        const c3 = "", f2 = "/", u2 = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
        class l4 {
          static {
            __name(this, "l");
          }
          static {
            __name2(this, "l");
          }
          static isUri(t22) {
            return t22 instanceof l4 || !!t22 && "string" == typeof t22.authority && "string" == typeof t22.fragment && "string" == typeof t22.path && "string" == typeof t22.query && "string" == typeof t22.scheme && "string" == typeof t22.fsPath && "function" == typeof t22.with && "function" == typeof t22.toString;
          }
          scheme;
          authority;
          path;
          query;
          fragment;
          constructor(t22, e22, r22, n22, i22, o22 = false) {
            "object" == typeof t22 ? (this.scheme = t22.scheme || c3, this.authority = t22.authority || c3, this.path = t22.path || c3, this.query = t22.query || c3, this.fragment = t22.fragment || c3) : (this.scheme = /* @__PURE__ */ (function(t32, e32) {
              return t32 || e32 ? t32 : "file";
            })(t22, o22), this.authority = e22 || c3, this.path = (function(t32, e32) {
              switch (t32) {
                case "https":
                case "http":
                case "file":
                  e32 ? e32[0] !== f2 && (e32 = f2 + e32) : e32 = f2;
              }
              return e32;
            })(this.scheme, r22 || c3), this.query = n22 || c3, this.fragment = i22 || c3, a2(this, o22));
          }
          get fsPath() {
            return v3(this, false);
          }
          with(t22) {
            if (!t22) return this;
            let { scheme: e22, authority: r22, path: n22, query: i22, fragment: o22 } = t22;
            return void 0 === e22 ? e22 = this.scheme : null === e22 && (e22 = c3), void 0 === r22 ? r22 = this.authority : null === r22 && (r22 = c3), void 0 === n22 ? n22 = this.path : null === n22 && (n22 = c3), void 0 === i22 ? i22 = this.query : null === i22 && (i22 = c3), void 0 === o22 ? o22 = this.fragment : null === o22 && (o22 = c3), e22 === this.scheme && r22 === this.authority && n22 === this.path && i22 === this.query && o22 === this.fragment ? this : new d3(e22, r22, n22, i22, o22);
          }
          static parse(t22, e22 = false) {
            const r22 = u2.exec(t22);
            return r22 ? new d3(r22[2] || c3, w4(r22[4] || c3), w4(r22[5] || c3), w4(r22[7] || c3), w4(r22[9] || c3), e22) : new d3(c3, c3, c3, c3, c3);
          }
          static file(t22) {
            let e22 = c3;
            if (i2 && (t22 = t22.replace(/\\/g, f2)), t22[0] === f2 && t22[1] === f2) {
              const r22 = t22.indexOf(f2, 2);
              -1 === r22 ? (e22 = t22.substring(2), t22 = f2) : (e22 = t22.substring(2, r22), t22 = t22.substring(r22) || f2);
            }
            return new d3("file", e22, t22, c3, c3);
          }
          static from(t22) {
            const e22 = new d3(t22.scheme, t22.authority, t22.path, t22.query, t22.fragment);
            return a2(e22, true), e22;
          }
          toString(t22 = false) {
            return b3(this, t22);
          }
          toJSON() {
            return this;
          }
          static revive(t22) {
            if (t22) {
              if (t22 instanceof l4) return t22;
              {
                const e22 = new d3(t22);
                return e22._formatted = t22.external, e22._fsPath = t22._sep === g2 ? t22.fsPath : null, e22;
              }
            }
            return t22;
          }
        }
        const g2 = i2 ? 1 : void 0;
        class d3 extends l4 {
          static {
            __name(this, "d");
          }
          static {
            __name2(this, "d");
          }
          _formatted = null;
          _fsPath = null;
          get fsPath() {
            return this._fsPath || (this._fsPath = v3(this, false)), this._fsPath;
          }
          toString(t22 = false) {
            return t22 ? b3(this, true) : (this._formatted || (this._formatted = b3(this, false)), this._formatted);
          }
          toJSON() {
            const t22 = { $mid: 1 };
            return this._fsPath && (t22.fsPath = this._fsPath, t22._sep = g2), this._formatted && (t22.external = this._formatted), this.path && (t22.path = this.path), this.scheme && (t22.scheme = this.scheme), this.authority && (t22.authority = this.authority), this.query && (t22.query = this.query), this.fragment && (t22.fragment = this.fragment), t22;
          }
        }
        const p3 = { 58: "%3A", 47: "%2F", 63: "%3F", 35: "%23", 91: "%5B", 93: "%5D", 64: "%40", 33: "%21", 36: "%24", 38: "%26", 39: "%27", 40: "%28", 41: "%29", 42: "%2A", 43: "%2B", 44: "%2C", 59: "%3B", 61: "%3D", 32: "%20" };
        function m3(t22, e22, r22) {
          let n22, i22 = -1;
          for (let o22 = 0; o22 < t22.length; o22++) {
            const s22 = t22.charCodeAt(o22);
            if (s22 >= 97 && s22 <= 122 || s22 >= 65 && s22 <= 90 || s22 >= 48 && s22 <= 57 || 45 === s22 || 46 === s22 || 95 === s22 || 126 === s22 || e22 && 47 === s22 || r22 && 91 === s22 || r22 && 93 === s22 || r22 && 58 === s22) -1 !== i22 && (n22 += encodeURIComponent(t22.substring(i22, o22)), i22 = -1), void 0 !== n22 && (n22 += t22.charAt(o22));
            else {
              void 0 === n22 && (n22 = t22.substr(0, o22));
              const e32 = p3[s22];
              void 0 !== e32 ? (-1 !== i22 && (n22 += encodeURIComponent(t22.substring(i22, o22)), i22 = -1), n22 += e32) : -1 === i22 && (i22 = o22);
            }
          }
          return -1 !== i22 && (n22 += encodeURIComponent(t22.substring(i22))), void 0 !== n22 ? n22 : t22;
        }
        __name(m3, "m");
        __name2(m3, "m");
        function y6(t22) {
          let e22;
          for (let r22 = 0; r22 < t22.length; r22++) {
            const n22 = t22.charCodeAt(r22);
            35 === n22 || 63 === n22 ? (void 0 === e22 && (e22 = t22.substr(0, r22)), e22 += p3[n22]) : void 0 !== e22 && (e22 += t22[r22]);
          }
          return void 0 !== e22 ? e22 : t22;
        }
        __name(y6, "y");
        __name2(y6, "y");
        function v3(t22, e22) {
          let r22;
          return r22 = t22.authority && t22.path.length > 1 && "file" === t22.scheme ? `//${t22.authority}${t22.path}` : 47 === t22.path.charCodeAt(0) && (t22.path.charCodeAt(1) >= 65 && t22.path.charCodeAt(1) <= 90 || t22.path.charCodeAt(1) >= 97 && t22.path.charCodeAt(1) <= 122) && 58 === t22.path.charCodeAt(2) ? e22 ? t22.path.substr(1) : t22.path[1].toLowerCase() + t22.path.substr(2) : t22.path, i2 && (r22 = r22.replace(/\//g, "\\")), r22;
        }
        __name(v3, "v");
        __name2(v3, "v");
        function b3(t22, e22) {
          const r22 = e22 ? y6 : m3;
          let n22 = "", { scheme: i22, authority: o22, path: s22, query: h22, fragment: a22 } = t22;
          if (i22 && (n22 += i22, n22 += ":"), (o22 || "file" === i22) && (n22 += f2, n22 += f2), o22) {
            let t32 = o22.indexOf("@");
            if (-1 !== t32) {
              const e32 = o22.substr(0, t32);
              o22 = o22.substr(t32 + 1), t32 = e32.lastIndexOf(":"), -1 === t32 ? n22 += r22(e32, false, false) : (n22 += r22(e32.substr(0, t32), false, false), n22 += ":", n22 += r22(e32.substr(t32 + 1), false, true)), n22 += "@";
            }
            o22 = o22.toLowerCase(), t32 = o22.lastIndexOf(":"), -1 === t32 ? n22 += r22(o22, false, true) : (n22 += r22(o22.substr(0, t32), false, true), n22 += o22.substr(t32));
          }
          if (s22) {
            if (s22.length >= 3 && 47 === s22.charCodeAt(0) && 58 === s22.charCodeAt(2)) {
              const t32 = s22.charCodeAt(1);
              t32 >= 65 && t32 <= 90 && (s22 = `/${String.fromCharCode(t32 + 32)}:${s22.substr(3)}`);
            } else if (s22.length >= 2 && 58 === s22.charCodeAt(1)) {
              const t32 = s22.charCodeAt(0);
              t32 >= 65 && t32 <= 90 && (s22 = `${String.fromCharCode(t32 + 32)}:${s22.substr(2)}`);
            }
            n22 += r22(s22, true, false);
          }
          return h22 && (n22 += "?", n22 += r22(h22, false, false)), a22 && (n22 += "#", n22 += e22 ? a22 : m3(a22, false, false)), n22;
        }
        __name(b3, "b");
        __name2(b3, "b");
        function C3(t22) {
          try {
            return decodeURIComponent(t22);
          } catch {
            return t22.length > 3 ? t22.substr(0, 3) + C3(t22.substr(3)) : t22;
          }
        }
        __name(C3, "C");
        __name2(C3, "C");
        const A2 = /(%[0-9A-Za-z][0-9A-Za-z])+/g;
        function w4(t22) {
          return t22.match(A2) ? t22.replace(A2, ((t32) => C3(t32))) : t22;
        }
        __name(w4, "w");
        __name2(w4, "w");
        var x5 = r2(975);
        const P3 = x5.posix || x5, _3 = "/";
        var I3;
        !(function(t22) {
          t22.joinPath = function(t32, ...e22) {
            return t32.with({ path: P3.join(t32.path, ...e22) });
          }, t22.resolvePath = function(t32, ...e22) {
            let r22 = t32.path, n22 = false;
            r22[0] !== _3 && (r22 = _3 + r22, n22 = true);
            let i22 = P3.resolve(r22, ...e22);
            return n22 && i22[0] === _3 && !t32.authority && (i22 = i22.substring(1)), t32.with({ path: i22 });
          }, t22.dirname = function(t32) {
            if (0 === t32.path.length || t32.path === _3) return t32;
            let e22 = P3.dirname(t32.path);
            return 1 === e22.length && 46 === e22.charCodeAt(0) && (e22 = ""), t32.with({ path: e22 });
          }, t22.basename = function(t32) {
            return P3.basename(t32.path);
          }, t22.extname = function(t32) {
            return P3.extname(t32.path);
          };
        })(I3 || (I3 = {})), LIB = n2;
      })();
      ({ URI: URI2, Utils: Utils2 } = LIB);
      (function(UriUtils2) {
        UriUtils2.basename = Utils2.basename;
        UriUtils2.dirname = Utils2.dirname;
        UriUtils2.extname = Utils2.extname;
        UriUtils2.joinPath = Utils2.joinPath;
        UriUtils2.resolvePath = Utils2.resolvePath;
        const isWindows = typeof process === "object" && process?.platform === "win32";
        function equals(a2, b3) {
          return a2?.toString() === b3?.toString();
        }
        __name(equals, "equals");
        __name2(equals, "equals");
        UriUtils2.equals = equals;
        function relative(from2, to) {
          const fromPath = typeof from2 === "string" ? URI2.parse(from2).path : from2.path;
          const toPath2 = typeof to === "string" ? URI2.parse(to).path : to.path;
          const fromParts = fromPath.split("/").filter((e3) => e3.length > 0);
          const toParts = toPath2.split("/").filter((e3) => e3.length > 0);
          if (isWindows) {
            const upperCaseDriveLetter = /^[A-Z]:$/;
            if (fromParts[0] && upperCaseDriveLetter.test(fromParts[0])) {
              fromParts[0] = fromParts[0].toLowerCase();
            }
            if (toParts[0] && upperCaseDriveLetter.test(toParts[0])) {
              toParts[0] = toParts[0].toLowerCase();
            }
            if (fromParts[0] !== toParts[0]) {
              return toPath2.substring(1);
            }
          }
          let i2 = 0;
          for (; i2 < fromParts.length; i2++) {
            if (fromParts[i2] !== toParts[i2]) {
              break;
            }
          }
          const backPart = "../".repeat(fromParts.length - i2);
          const toPart = toParts.slice(i2).join("/");
          return backPart + toPart;
        }
        __name(relative, "relative");
        __name2(relative, "relative");
        UriUtils2.relative = relative;
        function normalize4(uri) {
          return URI2.parse(uri.toString()).toString();
        }
        __name(normalize4, "normalize");
        __name2(normalize4, "normalize");
        UriUtils2.normalize = normalize4;
        function contains2(parent4, child) {
          let parentPath = typeof parent4 === "string" ? parent4 : parent4.path;
          let childPath = typeof child === "string" ? child : child.path;
          if (childPath.charAt(childPath.length - 1) === "/") {
            childPath = childPath.slice(0, -1);
          }
          if (parentPath.charAt(parentPath.length - 1) === "/") {
            parentPath = parentPath.slice(0, -1);
          }
          if (childPath === parentPath) {
            return true;
          }
          if (childPath.length < parentPath.length) {
            return false;
          }
          if (childPath.charAt(parentPath.length) !== "/") {
            return false;
          }
          return childPath.startsWith(parentPath);
        }
        __name(contains2, "contains");
        __name2(contains2, "contains");
        UriUtils2.contains = contains2;
      })(UriUtils || (UriUtils = {}));
      UriTrie = class {
        static {
          __name(this, "UriTrie");
        }
        static {
          __name2(this, "UriTrie");
        }
        constructor() {
          this.root = { name: "", children: /* @__PURE__ */ new Map() };
        }
        normalizeUri(uri) {
          return UriUtils.normalize(uri);
        }
        clear() {
          this.root.children.clear();
        }
        insert(uri, element3) {
          const node2 = this.getNode(this.normalizeUri(uri), true);
          node2.element = element3;
        }
        delete(uri) {
          const nodeToDelete = this.getNode(this.normalizeUri(uri), false);
          if (nodeToDelete?.parent) {
            nodeToDelete.parent.children.delete(nodeToDelete.name);
          }
        }
        has(uri) {
          return this.getNode(this.normalizeUri(uri), false)?.element !== void 0;
        }
        hasNode(uri) {
          return this.getNode(this.normalizeUri(uri), false) !== void 0;
        }
        find(uri) {
          return this.getNode(this.normalizeUri(uri), false)?.element;
        }
        findNode(uri) {
          const uriString = this.normalizeUri(uri);
          const node2 = this.getNode(uriString, false);
          if (!node2) {
            return void 0;
          }
          return {
            name: node2.name,
            uri: UriUtils.joinPath(URI2.parse(uriString), node2.name).toString(),
            element: node2.element
          };
        }
        findChildren(uri) {
          const uriString = this.normalizeUri(uri);
          const node2 = this.getNode(uriString, false);
          if (!node2) {
            return [];
          }
          return Array.from(node2.children.values()).map((child) => ({
            name: child.name,
            uri: UriUtils.joinPath(URI2.parse(uriString), child.name).toString(),
            element: child.element
          }));
        }
        all() {
          return this.collectValues(this.root);
        }
        findAll(prefix) {
          const node2 = this.getNode(UriUtils.normalize(prefix), false);
          if (!node2) {
            return [];
          }
          return this.collectValues(node2);
        }
        getNode(uri, create4) {
          const parts = uri.split("/");
          if (uri.charAt(uri.length - 1) === "/") {
            parts.pop();
          }
          let current = this.root;
          for (const part of parts) {
            let child = current.children.get(part);
            if (!child) {
              if (create4) {
                child = {
                  name: part,
                  children: /* @__PURE__ */ new Map(),
                  parent: current
                };
                current.children.set(part, child);
              } else {
                return void 0;
              }
            }
            current = child;
          }
          return current;
        }
        collectValues(node2) {
          const result = [];
          if (node2.element) {
            result.push(node2.element);
          }
          for (const child of node2.children.values()) {
            result.push(...this.collectValues(child));
          }
          return result;
        }
      };
      (function(DocumentState2) {
        DocumentState2[DocumentState2["Changed"] = 0] = "Changed";
        DocumentState2[DocumentState2["Parsed"] = 1] = "Parsed";
        DocumentState2[DocumentState2["IndexedContent"] = 2] = "IndexedContent";
        DocumentState2[DocumentState2["ComputedScopes"] = 3] = "ComputedScopes";
        DocumentState2[DocumentState2["Linked"] = 4] = "Linked";
        DocumentState2[DocumentState2["IndexedReferences"] = 5] = "IndexedReferences";
        DocumentState2[DocumentState2["Validated"] = 6] = "Validated";
      })(DocumentState || (DocumentState = {}));
      DefaultLangiumDocumentFactory = class {
        static {
          __name(this, "DefaultLangiumDocumentFactory");
        }
        static {
          __name2(this, "DefaultLangiumDocumentFactory");
        }
        constructor(services) {
          this.serviceRegistry = services.ServiceRegistry;
          this.textDocuments = services.workspace.TextDocuments;
          this.fileSystemProvider = services.workspace.FileSystemProvider;
        }
        async fromUri(uri, cancellationToken = cancellation_exports.CancellationToken.None) {
          const content = await this.fileSystemProvider.readFile(uri);
          return this.createAsync(uri, content, cancellationToken);
        }
        fromTextDocument(textDocument, uri, token2) {
          uri = uri ?? URI2.parse(textDocument.uri);
          if (cancellation_exports.CancellationToken.is(token2)) {
            return this.createAsync(uri, textDocument, token2);
          } else {
            return this.create(uri, textDocument, token2);
          }
        }
        fromString(text4, uri, token2) {
          if (cancellation_exports.CancellationToken.is(token2)) {
            return this.createAsync(uri, text4, token2);
          } else {
            return this.create(uri, text4, token2);
          }
        }
        fromModel(model, uri) {
          return this.create(uri, { $model: model });
        }
        create(uri, content, options2) {
          if (typeof content === "string") {
            const parseResult = this.parse(uri, content, options2);
            return this.createLangiumDocument(parseResult, uri, void 0, content);
          } else if ("$model" in content) {
            const parseResult = { value: content.$model, parserErrors: [], lexerErrors: [] };
            return this.createLangiumDocument(parseResult, uri);
          } else {
            const parseResult = this.parse(uri, content.getText(), options2);
            return this.createLangiumDocument(parseResult, uri, content);
          }
        }
        async createAsync(uri, content, cancelToken) {
          if (typeof content === "string") {
            const parseResult = await this.parseAsync(uri, content, cancelToken);
            return this.createLangiumDocument(parseResult, uri, void 0, content);
          } else {
            const parseResult = await this.parseAsync(uri, content.getText(), cancelToken);
            return this.createLangiumDocument(parseResult, uri, content);
          }
        }
        /**
         * Create a LangiumDocument from a given parse result.
         *
         * A TextDocument is created on demand if it is not provided as argument here. Usually this
         * should not be necessary because the main purpose of the TextDocument is to convert between
         * text ranges and offsets, which is done solely in LSP request handling.
         *
         * With the introduction of {@link update} below this method is supposed to be mainly called
         * during workspace initialization and on addition/recognition of new files, while changes in
         * existing documents are processed via {@link update}.
         */
        createLangiumDocument(parseResult, uri, textDocument, text4) {
          let document2;
          if (textDocument) {
            document2 = {
              parseResult,
              uri,
              state: DocumentState.Parsed,
              references: [],
              textDocument
            };
          } else {
            const textDocumentGetter = this.createTextDocumentGetter(uri, text4);
            document2 = {
              parseResult,
              uri,
              state: DocumentState.Parsed,
              references: [],
              get textDocument() {
                return textDocumentGetter();
              }
            };
          }
          parseResult.value.$document = document2;
          return document2;
        }
        async update(document2, cancellationToken) {
          const oldText = document2.parseResult.value.$cstNode?.root.fullText;
          const textDocument = this.textDocuments?.get(document2.uri.toString());
          const text4 = textDocument ? textDocument.getText() : await this.fileSystemProvider.readFile(document2.uri);
          if (textDocument) {
            Object.defineProperty(document2, "textDocument", {
              value: textDocument
            });
          } else {
            const textDocumentGetter = this.createTextDocumentGetter(document2.uri, text4);
            Object.defineProperty(document2, "textDocument", {
              get: textDocumentGetter
            });
          }
          if (oldText !== text4) {
            document2.parseResult = await this.parseAsync(document2.uri, text4, cancellationToken);
            document2.parseResult.value.$document = document2;
          }
          document2.state = DocumentState.Parsed;
          return document2;
        }
        parse(uri, text4, options2) {
          const services = this.serviceRegistry.getServices(uri);
          return services.parser.LangiumParser.parse(text4, options2);
        }
        parseAsync(uri, text4, cancellationToken) {
          const services = this.serviceRegistry.getServices(uri);
          return services.parser.AsyncParser.parse(text4, cancellationToken);
        }
        createTextDocumentGetter(uri, text4) {
          const serviceRegistry = this.serviceRegistry;
          let textDoc = void 0;
          return () => {
            return textDoc ?? (textDoc = TextDocument2.create(uri.toString(), serviceRegistry.getServices(uri).LanguageMetaData.languageId, 0, text4 ?? ""));
          };
        }
      };
      DefaultLangiumDocuments = class {
        static {
          __name(this, "DefaultLangiumDocuments");
        }
        static {
          __name2(this, "DefaultLangiumDocuments");
        }
        constructor(services) {
          this.documentTrie = new UriTrie();
          this.services = services;
          this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;
          this.documentBuilder = () => services.workspace.DocumentBuilder;
        }
        get all() {
          return stream(this.documentTrie.all());
        }
        addDocument(document2) {
          const uriString = document2.uri.toString();
          if (this.documentTrie.has(uriString)) {
            throw new Error(`A document with the URI '${uriString}' is already present.`);
          }
          this.documentTrie.insert(uriString, document2);
        }
        getDocument(uri) {
          const uriString = uri.toString();
          return this.documentTrie.find(uriString);
        }
        getDocuments(folder) {
          const uriString = folder.toString();
          return this.documentTrie.findAll(uriString);
        }
        async getOrCreateDocument(uri, cancellationToken) {
          let document2 = this.getDocument(uri);
          if (document2) {
            return document2;
          }
          document2 = await this.langiumDocumentFactory.fromUri(uri, cancellationToken);
          this.addDocument(document2);
          return document2;
        }
        createDocument(uri, text4, cancellationToken) {
          if (cancellationToken) {
            return this.langiumDocumentFactory.fromString(text4, uri, cancellationToken).then((document2) => {
              this.addDocument(document2);
              return document2;
            });
          } else {
            const document2 = this.langiumDocumentFactory.fromString(text4, uri);
            this.addDocument(document2);
            return document2;
          }
        }
        hasDocument(uri) {
          return this.documentTrie.has(uri.toString());
        }
        /**
         * @deprecated Since 4.2 use `DocumentBuilder.resetToState(DocumentState.Changed)` instead
         * TODO remove this for the next major release
         */
        invalidateDocument(uri) {
          const uriString = uri.toString();
          const langiumDoc = this.documentTrie.find(uriString);
          if (langiumDoc) {
            this.documentBuilder().resetToState(langiumDoc, DocumentState.Changed);
          }
          return langiumDoc;
        }
        deleteDocument(uri) {
          const uriString = uri.toString();
          const langiumDoc = this.documentTrie.find(uriString);
          if (langiumDoc) {
            langiumDoc.state = DocumentState.Changed;
            this.documentTrie.delete(uriString);
          }
          return langiumDoc;
        }
        deleteDocuments(folder) {
          const uriString = folder.toString();
          const langiumDocs = this.documentTrie.findAll(uriString);
          for (const langiumDoc of langiumDocs) {
            langiumDoc.state = DocumentState.Changed;
          }
          this.documentTrie.delete(uriString);
          return langiumDocs;
        }
      };
      RefResolving = Symbol("RefResolving");
      DefaultLinker = class {
        static {
          __name(this, "DefaultLinker");
        }
        static {
          __name2(this, "DefaultLinker");
        }
        constructor(services) {
          this.reflection = services.shared.AstReflection;
          this.langiumDocuments = () => services.shared.workspace.LangiumDocuments;
          this.scopeProvider = services.references.ScopeProvider;
          this.astNodeLocator = services.workspace.AstNodeLocator;
          this.profiler = services.shared.profilers.LangiumProfiler;
          this.languageId = services.LanguageMetaData.languageId;
        }
        async link(document2, cancelToken = cancellation_exports.CancellationToken.None) {
          if (this.profiler?.isActive("linking")) {
            const task = this.profiler.createTask("linking", this.languageId);
            task.start();
            try {
              for (const node2 of streamAst(document2.parseResult.value)) {
                await interruptAndCheck(cancelToken);
                streamReferences(node2).forEach((ref) => {
                  const name = `${node2.$type}:${ref.property}`;
                  task.startSubTask(name);
                  try {
                    this.doLink(ref, document2);
                  } finally {
                    task.stopSubTask(name);
                  }
                });
              }
            } finally {
              task.stop();
            }
          } else {
            for (const node2 of streamAst(document2.parseResult.value)) {
              await interruptAndCheck(cancelToken);
              streamReferences(node2).forEach((ref) => this.doLink(ref, document2));
            }
          }
        }
        doLink(refInfo, document2) {
          const ref = refInfo.reference;
          if ("_ref" in ref && ref._ref === void 0) {
            ref._ref = RefResolving;
            try {
              const description = this.getCandidate(refInfo);
              if (isLinkingError(description)) {
                ref._ref = description;
              } else {
                ref._nodeDescription = description;
                const linkedNode = this.loadAstNode(description);
                ref._ref = linkedNode ?? this.createLinkingError(refInfo, description);
              }
            } catch (err) {
              console.error(`An error occurred while resolving reference to '${ref.$refText}':`, err);
              const errorMessage = err.message ?? String(err);
              ref._ref = {
                info: refInfo,
                message: `An error occurred while resolving reference to '${ref.$refText}': ${errorMessage}`
              };
            }
            document2.references.push(ref);
          } else if ("_items" in ref && ref._items === void 0) {
            ref._items = RefResolving;
            try {
              const descriptions = this.getCandidates(refInfo);
              const items = [];
              if (isLinkingError(descriptions)) {
                ref._linkingError = descriptions;
              } else {
                for (const description of descriptions) {
                  const linkedNode = this.loadAstNode(description);
                  if (linkedNode) {
                    items.push({ ref: linkedNode, $nodeDescription: description });
                  }
                }
              }
              ref._items = items;
            } catch (err) {
              ref._linkingError = {
                info: refInfo,
                message: `An error occurred while resolving reference to '${ref.$refText}': ${err}`
              };
              ref._items = [];
            }
            document2.references.push(ref);
          }
        }
        unlink(document2) {
          for (const ref of document2.references) {
            if ("_ref" in ref) {
              ref._ref = void 0;
              delete ref._nodeDescription;
            } else if ("_items" in ref) {
              ref._items = void 0;
              delete ref._linkingError;
            }
          }
          document2.references = [];
        }
        getCandidate(refInfo) {
          const scope = this.scopeProvider.getScope(refInfo);
          const description = scope.getElement(refInfo.reference.$refText);
          return description ?? this.createLinkingError(refInfo);
        }
        getCandidates(refInfo) {
          const scope = this.scopeProvider.getScope(refInfo);
          const descriptions = scope.getElements(refInfo.reference.$refText).distinct((desc) => `${desc.documentUri}#${desc.path}`).toArray();
          return descriptions.length > 0 ? descriptions : this.createLinkingError(refInfo);
        }
        buildReference(node2, property3, refNode, refText) {
          const linker = this;
          const reference = {
            $refNode: refNode,
            $refText: refText,
            _ref: void 0,
            get ref() {
              if (isAstNode(this._ref)) {
                return this._ref;
              } else if (isAstNodeDescription(this._nodeDescription)) {
                const linkedNode = linker.loadAstNode(this._nodeDescription);
                this._ref = linkedNode ?? linker.createLinkingError({ reference, container: node2, property: property3 }, this._nodeDescription);
              } else if (this._ref === void 0) {
                this._ref = RefResolving;
                const document2 = findRootNode(node2).$document;
                const refData = linker.getLinkedNode({ reference, container: node2, property: property3 });
                if (refData.error && document2 && document2.state < DocumentState.ComputedScopes) {
                  return this._ref = void 0;
                }
                this._ref = refData.node ?? refData.error;
                this._nodeDescription = refData.descr;
                document2?.references.push(this);
              } else if (this._ref === RefResolving) {
                linker.throwCyclicReferenceError(node2, property3, refText);
              }
              return isAstNode(this._ref) ? this._ref : void 0;
            },
            get $nodeDescription() {
              return this._nodeDescription;
            },
            get error() {
              return isLinkingError(this._ref) ? this._ref : void 0;
            }
          };
          return reference;
        }
        buildMultiReference(node2, property3, refNode, refText) {
          const linker = this;
          const reference = {
            $refNode: refNode,
            $refText: refText,
            _items: void 0,
            get items() {
              if (Array.isArray(this._items)) {
                return this._items;
              } else if (this._items === void 0) {
                this._items = RefResolving;
                const document2 = findRootNode(node2).$document;
                const descriptions = linker.getCandidates({
                  reference,
                  container: node2,
                  property: property3
                });
                const items = [];
                if (isLinkingError(descriptions)) {
                  this._linkingError = descriptions;
                } else {
                  for (const description of descriptions) {
                    const linkedNode = linker.loadAstNode(description);
                    if (linkedNode) {
                      items.push({ ref: linkedNode, $nodeDescription: description });
                    }
                  }
                }
                this._items = items;
                document2?.references.push(this);
              } else if (this._items === RefResolving) {
                linker.throwCyclicReferenceError(node2, property3, refText);
              }
              return Array.isArray(this._items) ? this._items : [];
            },
            get error() {
              if (this._linkingError) {
                return this._linkingError;
              }
              const refs = this.items;
              if (refs.length > 0) {
                return void 0;
              } else {
                return this._linkingError = linker.createLinkingError({ reference, container: node2, property: property3 });
              }
            }
          };
          return reference;
        }
        throwCyclicReferenceError(node2, property3, refText) {
          throw new Error(`Cyclic reference resolution detected: ${this.astNodeLocator.getAstNodePath(node2)}/${property3} (symbol '${refText}')`);
        }
        getLinkedNode(refInfo) {
          try {
            const description = this.getCandidate(refInfo);
            if (isLinkingError(description)) {
              return { error: description };
            }
            const linkedNode = this.loadAstNode(description);
            if (linkedNode) {
              return { node: linkedNode, descr: description };
            } else {
              return {
                descr: description,
                error: this.createLinkingError(refInfo, description)
              };
            }
          } catch (err) {
            console.error(`An error occurred while resolving reference to '${refInfo.reference.$refText}':`, err);
            const errorMessage = err.message ?? String(err);
            return {
              error: {
                info: refInfo,
                message: `An error occurred while resolving reference to '${refInfo.reference.$refText}': ${errorMessage}`
              }
            };
          }
        }
        loadAstNode(nodeDescription) {
          if (nodeDescription.node) {
            return nodeDescription.node;
          }
          const doc = this.langiumDocuments().getDocument(nodeDescription.documentUri);
          if (!doc) {
            return void 0;
          }
          return this.astNodeLocator.getAstNode(doc.parseResult.value, nodeDescription.path);
        }
        createLinkingError(refInfo, targetDescription) {
          const document2 = findRootNode(refInfo.container).$document;
          if (document2 && document2.state < DocumentState.ComputedScopes) {
            console.warn(`Attempted reference resolution before document reached ComputedScopes state (${document2.uri}).`);
          }
          const referenceType = this.reflection.getReferenceType(refInfo);
          return {
            info: refInfo,
            message: `Could not resolve reference to ${referenceType} named '${refInfo.reference.$refText}'.`,
            targetDescription
          };
        }
      };
      __name(isNamed, "isNamed");
      __name2(isNamed, "isNamed");
      DefaultNameProvider = class {
        static {
          __name(this, "DefaultNameProvider");
        }
        static {
          __name2(this, "DefaultNameProvider");
        }
        getName(node2) {
          if (isNamed(node2)) {
            return node2.name;
          }
          return void 0;
        }
        getNameNode(node2) {
          return findNodeForProperty(node2.$cstNode, "name");
        }
      };
      DefaultReferences = class {
        static {
          __name(this, "DefaultReferences");
        }
        static {
          __name2(this, "DefaultReferences");
        }
        constructor(services) {
          this.nameProvider = services.references.NameProvider;
          this.index = services.shared.workspace.IndexManager;
          this.nodeLocator = services.workspace.AstNodeLocator;
          this.documents = services.shared.workspace.LangiumDocuments;
          this.hasMultiReference = streamAst(services.Grammar).some((node2) => isCrossReference(node2) && node2.isMulti);
        }
        findDeclarations(sourceCstNode) {
          if (sourceCstNode) {
            const assignment = findAssignment(sourceCstNode);
            const nodeElem = sourceCstNode.astNode;
            if (assignment && nodeElem) {
              const reference = nodeElem[assignment.feature];
              if (isReference(reference) || isMultiReference(reference)) {
                return getReferenceNodes(reference);
              } else if (Array.isArray(reference)) {
                for (const ref of reference) {
                  if ((isReference(ref) || isMultiReference(ref)) && ref.$refNode && ref.$refNode.offset <= sourceCstNode.offset && ref.$refNode.end >= sourceCstNode.end) {
                    return getReferenceNodes(ref);
                  }
                }
              }
            }
            if (nodeElem) {
              const nameNode = this.nameProvider.getNameNode(nodeElem);
              if (nameNode && (nameNode === sourceCstNode || isChildNode(sourceCstNode, nameNode))) {
                return this.getSelfNodes(nodeElem);
              }
            }
          }
          return [];
        }
        /**
         * Returns all self-references for the specified node.
         * Since the node can be part of a multi-reference, this method returns all nodes that are part of the same multi-reference.
         */
        getSelfNodes(node2) {
          if (!this.hasMultiReference) {
            return [node2];
          } else {
            const references = this.index.findAllReferences(node2, this.nodeLocator.getAstNodePath(node2));
            const headNode = this.getNodeFromReferenceDescription(references.head());
            if (headNode) {
              for (const ref of streamReferences(headNode)) {
                if (isMultiReference(ref.reference) && ref.reference.items.some((item) => item.ref === node2)) {
                  return ref.reference.items.map((item) => item.ref);
                }
              }
            }
            return [node2];
          }
        }
        getNodeFromReferenceDescription(ref) {
          if (!ref) {
            return void 0;
          }
          const doc = this.documents.getDocument(ref.sourceUri);
          if (doc) {
            return this.nodeLocator.getAstNode(doc.parseResult.value, ref.sourcePath);
          }
          return void 0;
        }
        findDeclarationNodes(sourceCstNode) {
          const astNodes = this.findDeclarations(sourceCstNode);
          const cstNodes = [];
          for (const astNode of astNodes) {
            const cstNode = this.nameProvider.getNameNode(astNode) ?? astNode.$cstNode;
            if (cstNode) {
              cstNodes.push(cstNode);
            }
          }
          return cstNodes;
        }
        findReferences(targetNode, options2) {
          const refs = [];
          if (options2.includeDeclaration) {
            refs.push(...this.getSelfReferences(targetNode));
          }
          let indexReferences = this.index.findAllReferences(targetNode, this.nodeLocator.getAstNodePath(targetNode));
          if (options2.documentUri) {
            indexReferences = indexReferences.filter((ref) => UriUtils.equals(ref.sourceUri, options2.documentUri));
          }
          refs.push(...indexReferences);
          return stream(refs);
        }
        getSelfReferences(targetNode) {
          const selfNodes = this.getSelfNodes(targetNode);
          const references = [];
          for (const selfNode of selfNodes) {
            const nameNode = this.nameProvider.getNameNode(selfNode);
            if (nameNode) {
              const doc = getDocument(selfNode);
              const path4 = this.nodeLocator.getAstNodePath(selfNode);
              references.push({
                sourceUri: doc.uri,
                sourcePath: path4,
                targetUri: doc.uri,
                targetPath: path4,
                segment: toDocumentSegment(nameNode),
                local: true
              });
            }
          }
          return references;
        }
      };
      MultiMap = class {
        static {
          __name(this, "MultiMap");
        }
        static {
          __name2(this, "MultiMap");
        }
        constructor(elements2) {
          this.map = /* @__PURE__ */ new Map();
          if (elements2) {
            for (const [key, value2] of elements2) {
              this.add(key, value2);
            }
          }
        }
        /**
         * The total number of values in the multimap.
         */
        get size() {
          return Reduction.sum(stream(this.map.values()).map((a2) => a2.length));
        }
        /**
         * Clear all entries in the multimap.
         */
        clear() {
          this.map.clear();
        }
        /**
         * Operates differently depending on whether a `value` is given:
         *  * With a value, this method deletes the specific key / value pair from the multimap.
         *  * Without a value, all values associated with the given key are deleted.
         *
         * @returns `true` if a value existed and has been removed, or `false` if the specified
         *     key / value does not exist.
         */
        delete(key, value2) {
          if (value2 === void 0) {
            return this.map.delete(key);
          } else {
            const values22 = this.map.get(key);
            if (values22) {
              const index = values22.indexOf(value2);
              if (index >= 0) {
                if (values22.length === 1) {
                  this.map.delete(key);
                } else {
                  values22.splice(index, 1);
                }
                return true;
              }
            }
            return false;
          }
        }
        /**
         * Returns an array of all values associated with the given key. If no value exists,
         * an empty array is returned.
         *
         * _Note:_ The returned array is assumed not to be modified. Use the `set` method to add a
         * value and `delete` to remove a value from the multimap.
         */
        get(key) {
          return this.map.get(key) ?? [];
        }
        /**
         * Returns a stream of all values associated with the given key. If no value exists,
         * {@link EMPTY_STREAM} is returned.
         */
        getStream(key) {
          const values22 = this.map.get(key);
          return values22 ? stream(values22) : EMPTY_STREAM;
        }
        /**
         * Operates differently depending on whether a `value` is given:
         *  * With a value, this method returns `true` if the specific key / value pair is present in the multimap.
         *  * Without a value, this method returns `true` if the given key is present in the multimap.
         */
        has(key, value2) {
          if (value2 === void 0) {
            return this.map.has(key);
          } else {
            const values22 = this.map.get(key);
            if (values22) {
              return values22.indexOf(value2) >= 0;
            }
            return false;
          }
        }
        /**
         * Add the given key / value pair to the multimap.
         */
        add(key, value2) {
          if (this.map.has(key)) {
            this.map.get(key).push(value2);
          } else {
            this.map.set(key, [value2]);
          }
          return this;
        }
        /**
         * Add the given set of key / value pairs to the multimap.
         */
        addAll(key, values22) {
          if (this.map.has(key)) {
            this.map.get(key).push(...values22);
          } else {
            this.map.set(key, Array.from(values22));
          }
          return this;
        }
        /**
         * Invokes the given callback function for every key / value pair in the multimap.
         */
        forEach(callbackfn) {
          this.map.forEach((array4, key) => array4.forEach((value2) => callbackfn(value2, key, this)));
        }
        /**
         * Returns an iterator of key, value pairs for every entry in the map.
         */
        [Symbol.iterator]() {
          return this.entries().iterator();
        }
        /**
         * Returns a stream of key, value pairs for every entry in the map.
         */
        entries() {
          return stream(this.map.entries()).flatMap(([key, array4]) => array4.map((value2) => [key, value2]));
        }
        /**
         * Returns a stream of keys in the map.
         */
        keys() {
          return stream(this.map.keys());
        }
        /**
         * Returns a stream of values in the map.
         */
        values() {
          return stream(this.map.values()).flat();
        }
        /**
         * Returns a stream of key, value set pairs for every key in the map.
         */
        entriesGroupedByKey() {
          return stream(this.map.entries());
        }
      };
      BiMap = class {
        static {
          __name(this, "BiMap");
        }
        static {
          __name2(this, "BiMap");
        }
        get size() {
          return this.map.size;
        }
        constructor(elements2) {
          this.map = /* @__PURE__ */ new Map();
          this.inverse = /* @__PURE__ */ new Map();
          if (elements2) {
            for (const [key, value2] of elements2) {
              this.set(key, value2);
            }
          }
        }
        clear() {
          this.map.clear();
          this.inverse.clear();
        }
        set(key, value2) {
          this.map.set(key, value2);
          this.inverse.set(value2, key);
          return this;
        }
        get(key) {
          return this.map.get(key);
        }
        getKey(value2) {
          return this.inverse.get(value2);
        }
        delete(key) {
          const value2 = this.map.get(key);
          if (value2 !== void 0) {
            this.map.delete(key);
            this.inverse.delete(value2);
            return true;
          }
          return false;
        }
      };
      DefaultScopeComputation = class {
        static {
          __name(this, "DefaultScopeComputation");
        }
        static {
          __name2(this, "DefaultScopeComputation");
        }
        constructor(services) {
          this.nameProvider = services.references.NameProvider;
          this.descriptions = services.workspace.AstNodeDescriptionProvider;
        }
        async collectExportedSymbols(document2, cancelToken = cancellation_exports.CancellationToken.None) {
          return this.collectExportedSymbolsForNode(document2.parseResult.value, document2, void 0, cancelToken);
        }
        /**
         * Creates {@link AstNodeDescription AstNodeDescriptions} for the given {@link AstNode parentNode} and its children.
         * The list of children to be considered is determined by the function parameter {@link children}.
         * By default only the direct children of {@link parentNode} are visited, nested nodes are not exported.
         *
         * @param parentNode AST node to be exported, i.e., of which an {@link AstNodeDescription} shall be added to the returned list.
         * @param document The document containing the AST node to be exported.
         * @param children A function called with {@link parentNode} as single argument and returning an {@link Iterable} supplying the children to be visited, which must be directly or transitively contained in {@link parentNode}.
         * @param cancelToken Indicates when to cancel the current operation.
         * @throws `OperationCancelled` if a user action occurs during execution.
         * @returns A list of {@link AstNodeDescription AstNodeDescriptions} to be published to index.
         */
        async collectExportedSymbolsForNode(parentNode, document2, children2 = streamContents, cancelToken = cancellation_exports.CancellationToken.None) {
          const exports2 = [];
          this.addExportedSymbol(parentNode, exports2, document2);
          for (const node2 of children2(parentNode)) {
            await interruptAndCheck(cancelToken);
            this.addExportedSymbol(node2, exports2, document2);
          }
          return exports2;
        }
        /**
         * Adds a single node to the list of exports if it has a name. Override this method to change how
         * symbols are exported, e.g. by modifying their exported name.
         */
        addExportedSymbol(node2, exports2, document2) {
          const name = this.nameProvider.getName(node2);
          if (name) {
            exports2.push(this.descriptions.createDescription(node2, name, document2));
          }
        }
        // --- local symbols gathering ---
        async collectLocalSymbols(document2, cancelToken = cancellation_exports.CancellationToken.None) {
          const rootNode = document2.parseResult.value;
          const symbols2 = new MultiMap();
          for (const node2 of streamAllContents(rootNode)) {
            await interruptAndCheck(cancelToken);
            this.addLocalSymbol(node2, document2, symbols2);
          }
          return symbols2;
        }
        /**
         * Adds a single node to the local symbols of its containing document if it has a name.
         * The default implementation makes the node visible in the subtree of its container if it does have a container.
         * Override this method to change this, e.g. by increasing the visibility to a higher level in the AST.
         */
        addLocalSymbol(node2, document2, symbols2) {
          const container2 = node2.$container;
          if (container2) {
            const name = this.nameProvider.getName(node2);
            if (name) {
              symbols2.add(container2, this.descriptions.createDescription(node2, name, document2));
            }
          }
        }
      };
      StreamScope = class {
        static {
          __name(this, "StreamScope");
        }
        static {
          __name2(this, "StreamScope");
        }
        constructor(elements2, outerScope, options2) {
          this.elements = elements2;
          this.outerScope = outerScope;
          this.caseInsensitive = options2?.caseInsensitive ?? false;
          this.concatOuterScope = options2?.concatOuterScope ?? true;
        }
        getAllElements() {
          if (this.outerScope) {
            return this.elements.concat(this.outerScope.getAllElements());
          } else {
            return this.elements;
          }
        }
        getElement(name) {
          const lowerCaseName = this.caseInsensitive ? name.toLowerCase() : name;
          const local = this.caseInsensitive ? this.elements.find((e3) => e3.name.toLowerCase() === lowerCaseName) : this.elements.find((e3) => e3.name === name);
          if (local) {
            return local;
          }
          if (this.outerScope) {
            return this.outerScope.getElement(name);
          }
          return void 0;
        }
        getElements(name) {
          const lowerCaseName = this.caseInsensitive ? name.toLowerCase() : name;
          const local = this.caseInsensitive ? this.elements.filter((e3) => e3.name.toLowerCase() === lowerCaseName) : this.elements.filter((e3) => e3.name === name);
          if ((this.concatOuterScope || local.isEmpty()) && this.outerScope) {
            return local.concat(this.outerScope.getElements(name));
          } else {
            return local;
          }
        }
      };
      MapScope = class {
        static {
          __name(this, "MapScope");
        }
        static {
          __name2(this, "MapScope");
        }
        constructor(elements2, outerScope, options2) {
          this.elements = /* @__PURE__ */ new Map();
          this.caseInsensitive = options2?.caseInsensitive ?? false;
          this.concatOuterScope = options2?.concatOuterScope ?? true;
          for (const element3 of elements2) {
            const name = this.caseInsensitive ? element3.name.toLowerCase() : element3.name;
            this.elements.set(name, element3);
          }
          this.outerScope = outerScope;
        }
        getElement(name) {
          const localName = this.caseInsensitive ? name.toLowerCase() : name;
          const local = this.elements.get(localName);
          if (local) {
            return local;
          }
          if (this.outerScope) {
            return this.outerScope.getElement(name);
          }
          return void 0;
        }
        getElements(name) {
          const localName = this.caseInsensitive ? name.toLowerCase() : name;
          const local = this.elements.get(localName);
          const arr = local ? [local] : [];
          if ((this.concatOuterScope || arr.length > 0) && this.outerScope) {
            return stream(arr).concat(this.outerScope.getElements(name));
          } else {
            return stream(arr);
          }
        }
        getAllElements() {
          let elementStream = stream(this.elements.values());
          if (this.outerScope) {
            elementStream = elementStream.concat(this.outerScope.getAllElements());
          }
          return elementStream;
        }
      };
      MultiMapScope = class {
        static {
          __name(this, "MultiMapScope");
        }
        static {
          __name2(this, "MultiMapScope");
        }
        constructor(elements2, outerScope, options2) {
          this.elements = new MultiMap();
          this.caseInsensitive = options2?.caseInsensitive ?? false;
          this.concatOuterScope = options2?.concatOuterScope ?? true;
          for (const element3 of elements2) {
            const name = this.caseInsensitive ? element3.name.toLowerCase() : element3.name;
            this.elements.add(name, element3);
          }
          this.outerScope = outerScope;
        }
        getElement(name) {
          const localName = this.caseInsensitive ? name.toLowerCase() : name;
          const local = this.elements.get(localName)[0];
          if (local) {
            return local;
          }
          if (this.outerScope) {
            return this.outerScope.getElement(name);
          }
          return void 0;
        }
        getElements(name) {
          const localName = this.caseInsensitive ? name.toLowerCase() : name;
          const local = this.elements.get(localName);
          if ((this.concatOuterScope || local.length === 0) && this.outerScope) {
            return stream(local).concat(this.outerScope.getElements(name));
          } else {
            return stream(local);
          }
        }
        getAllElements() {
          let elementStream = stream(this.elements.values());
          if (this.outerScope) {
            elementStream = elementStream.concat(this.outerScope.getAllElements());
          }
          return elementStream;
        }
      };
      EMPTY_SCOPE = {
        getElement() {
          return void 0;
        },
        getElements() {
          return EMPTY_STREAM;
        },
        getAllElements() {
          return EMPTY_STREAM;
        }
      };
      DisposableCache = class {
        static {
          __name(this, "DisposableCache");
        }
        static {
          __name2(this, "DisposableCache");
        }
        constructor() {
          this.toDispose = [];
          this.isDisposed = false;
        }
        onDispose(disposable) {
          this.toDispose.push(disposable);
        }
        dispose() {
          this.throwIfDisposed();
          this.clear();
          this.isDisposed = true;
          this.toDispose.forEach((disposable) => disposable.dispose());
        }
        throwIfDisposed() {
          if (this.isDisposed) {
            throw new Error("This cache has already been disposed");
          }
        }
      };
      SimpleCache = class extends DisposableCache {
        static {
          __name(this, "SimpleCache");
        }
        static {
          __name2(this, "SimpleCache");
        }
        constructor() {
          super(...arguments);
          this.cache = /* @__PURE__ */ new Map();
        }
        has(key) {
          this.throwIfDisposed();
          return this.cache.has(key);
        }
        set(key, value2) {
          this.throwIfDisposed();
          this.cache.set(key, value2);
        }
        get(key, provider) {
          this.throwIfDisposed();
          if (this.cache.has(key)) {
            return this.cache.get(key);
          } else if (provider) {
            const value2 = provider();
            this.cache.set(key, value2);
            return value2;
          } else {
            return void 0;
          }
        }
        delete(key) {
          this.throwIfDisposed();
          return this.cache.delete(key);
        }
        clear() {
          this.throwIfDisposed();
          this.cache.clear();
        }
      };
      ContextCache = class extends DisposableCache {
        static {
          __name(this, "ContextCache");
        }
        static {
          __name2(this, "ContextCache");
        }
        constructor(converter) {
          super();
          this.cache = /* @__PURE__ */ new Map();
          this.converter = converter ?? ((value2) => value2);
        }
        has(contextKey, key) {
          this.throwIfDisposed();
          return this.cacheForContext(contextKey).has(key);
        }
        set(contextKey, key, value2) {
          this.throwIfDisposed();
          this.cacheForContext(contextKey).set(key, value2);
        }
        get(contextKey, key, provider) {
          this.throwIfDisposed();
          const contextCache = this.cacheForContext(contextKey);
          if (contextCache.has(key)) {
            return contextCache.get(key);
          } else if (provider) {
            const value2 = provider();
            contextCache.set(key, value2);
            return value2;
          } else {
            return void 0;
          }
        }
        delete(contextKey, key) {
          this.throwIfDisposed();
          return this.cacheForContext(contextKey).delete(key);
        }
        clear(contextKey) {
          this.throwIfDisposed();
          if (contextKey) {
            const mapKey = this.converter(contextKey);
            this.cache.delete(mapKey);
          } else {
            this.cache.clear();
          }
        }
        cacheForContext(contextKey) {
          const mapKey = this.converter(contextKey);
          let documentCache = this.cache.get(mapKey);
          if (!documentCache) {
            documentCache = /* @__PURE__ */ new Map();
            this.cache.set(mapKey, documentCache);
          }
          return documentCache;
        }
      };
      DocumentCache = class extends ContextCache {
        static {
          __name(this, "DocumentCache");
        }
        static {
          __name2(this, "DocumentCache");
        }
        /**
         * Creates a new document cache.
         *
         * @param sharedServices Service container instance to hook into document lifecycle events.
         * @param state Optional document state on which the cache should evict.
         * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.
         * *Deleted* documents are considered in both cases.
         *
         * Providing a state here will use `DocumentBuilder#onDocumentPhase` instead,
         * which triggers on all documents that have been affected by this change, assuming that the
         * state is `DocumentState.Linked` or a later state.
         */
        constructor(sharedServices, state4) {
          super((uri) => uri.toString());
          if (state4) {
            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onDocumentPhase(state4, (document2) => {
              this.clear(document2.uri.toString());
            }));
            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {
              for (const uri of deleted) {
                this.clear(uri);
              }
            }));
          } else {
            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((changed, deleted) => {
              const allUris = changed.concat(deleted);
              for (const uri of allUris) {
                this.clear(uri);
              }
            }));
          }
        }
      };
      WorkspaceCache = class extends SimpleCache {
        static {
          __name(this, "WorkspaceCache");
        }
        static {
          __name2(this, "WorkspaceCache");
        }
        /**
         * Creates a new workspace cache.
         *
         * @param sharedServices Service container instance to hook into document lifecycle events.
         * @param state Optional document state on which the cache should evict.
         * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.
         * *Deleted* documents are considered in both cases.
         */
        constructor(sharedServices, state4) {
          super();
          if (state4) {
            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onBuildPhase(state4, () => {
              this.clear();
            }));
            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {
              if (deleted.length > 0) {
                this.clear();
              }
            }));
          } else {
            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate(() => {
              this.clear();
            }));
          }
        }
      };
      DefaultScopeProvider = class {
        static {
          __name(this, "DefaultScopeProvider");
        }
        static {
          __name2(this, "DefaultScopeProvider");
        }
        constructor(services) {
          this.reflection = services.shared.AstReflection;
          this.nameProvider = services.references.NameProvider;
          this.descriptions = services.workspace.AstNodeDescriptionProvider;
          this.indexManager = services.shared.workspace.IndexManager;
          this.globalScopeCache = new WorkspaceCache(services.shared);
        }
        getScope(context) {
          const scopes = [];
          const referenceType = this.reflection.getReferenceType(context);
          const localSymbols = getDocument(context.container).localSymbols;
          if (localSymbols) {
            let currentNode = context.container;
            do {
              if (localSymbols.has(currentNode)) {
                scopes.push(localSymbols.getStream(currentNode).filter((desc) => this.reflection.isSubtype(desc.type, referenceType)));
              }
              currentNode = currentNode.$container;
            } while (currentNode);
          }
          let result = this.getGlobalScope(referenceType, context);
          for (let i2 = scopes.length - 1; i2 >= 0; i2--) {
            result = this.createScope(scopes[i2], result);
          }
          return result;
        }
        /**
         * Create a scope for the given collection of AST node descriptions.
         */
        createScope(elements2, outerScope, options2) {
          return new StreamScope(stream(elements2), outerScope, options2);
        }
        /**
         * Create a scope for the given collection of AST nodes, which need to be transformed into respective
         * descriptions first. This is done using the `NameProvider` and `AstNodeDescriptionProvider` services.
         */
        createScopeForNodes(elements2, outerScope, options2) {
          const s2 = stream(elements2).map((e3) => {
            const name = this.nameProvider.getName(e3);
            if (name) {
              return this.descriptions.createDescription(e3, name);
            }
            return void 0;
          }).nonNullable();
          return new StreamScope(s2, outerScope, options2);
        }
        /**
         * Create a global scope filtered for the given reference type.
         */
        getGlobalScope(referenceType, _context) {
          return this.globalScopeCache.get(referenceType, () => new MultiMapScope(this.indexManager.allElements(referenceType)));
        }
      };
      __name(isAstNodeWithComment, "isAstNodeWithComment");
      __name2(isAstNodeWithComment, "isAstNodeWithComment");
      __name(isIntermediateReference, "isIntermediateReference");
      __name2(isIntermediateReference, "isIntermediateReference");
      DefaultJsonSerializer = class {
        static {
          __name(this, "DefaultJsonSerializer");
        }
        static {
          __name2(this, "DefaultJsonSerializer");
        }
        constructor(services) {
          this.ignoreProperties = /* @__PURE__ */ new Set(["$container", "$containerProperty", "$containerIndex", "$document", "$cstNode"]);
          this.langiumDocuments = services.shared.workspace.LangiumDocuments;
          this.astNodeLocator = services.workspace.AstNodeLocator;
          this.nameProvider = services.references.NameProvider;
          this.commentProvider = services.documentation.CommentProvider;
        }
        serialize(node2, options2) {
          const serializeOptions = options2 ?? {};
          const specificReplacer = options2?.replacer;
          const defaultReplacer = /* @__PURE__ */ __name2((key, value2) => this.replacer(key, value2, serializeOptions), "defaultReplacer");
          const replacer = specificReplacer ? (key, value2) => specificReplacer(key, value2, defaultReplacer) : defaultReplacer;
          try {
            this.currentDocument = getDocument(node2);
            return JSON.stringify(node2, replacer, options2?.space);
          } finally {
            this.currentDocument = void 0;
          }
        }
        deserialize(content, options2) {
          const deserializeOptions = options2 ?? {};
          const root32 = JSON.parse(content);
          this.linkNode(root32, root32, deserializeOptions);
          return root32;
        }
        replacer(key, value2, { refText, sourceText, textRegions, comments, uriConverter }) {
          if (this.ignoreProperties.has(key)) {
            return void 0;
          } else if (isReference(value2)) {
            const refValue = value2.ref;
            const $refText = refText ? value2.$refText : void 0;
            if (refValue) {
              const targetDocument = getDocument(refValue);
              let targetUri = "";
              if (this.currentDocument && this.currentDocument !== targetDocument) {
                if (uriConverter) {
                  targetUri = uriConverter(targetDocument.uri, refValue);
                } else {
                  targetUri = targetDocument.uri.toString();
                }
              }
              const targetPath = this.astNodeLocator.getAstNodePath(refValue);
              return {
                $ref: `${targetUri}#${targetPath}`,
                $refText
              };
            } else {
              return {
                $error: value2.error?.message ?? "Could not resolve reference",
                $refText
              };
            }
          } else if (isMultiReference(value2)) {
            const $refText = refText ? value2.$refText : void 0;
            const $refs = [];
            for (const item of value2.items) {
              const refValue = item.ref;
              const targetDocument = getDocument(item.ref);
              let targetUri = "";
              if (this.currentDocument && this.currentDocument !== targetDocument) {
                if (uriConverter) {
                  targetUri = uriConverter(targetDocument.uri, refValue);
                } else {
                  targetUri = targetDocument.uri.toString();
                }
              }
              const targetPath = this.astNodeLocator.getAstNodePath(refValue);
              $refs.push(`${targetUri}#${targetPath}`);
            }
            return {
              $refs,
              $refText
            };
          } else if (isAstNode(value2)) {
            let astNode = void 0;
            if (textRegions) {
              astNode = this.addAstNodeRegionWithAssignmentsTo({ ...value2 });
              if ((!key || value2.$document) && astNode?.$textRegion) {
                astNode.$textRegion.documentURI = this.currentDocument?.uri.toString();
              }
            }
            if (sourceText && !key) {
              astNode ?? (astNode = { ...value2 });
              astNode.$sourceText = value2.$cstNode?.text;
            }
            if (comments) {
              astNode ?? (astNode = { ...value2 });
              const comment2 = this.commentProvider.getComment(value2);
              if (comment2) {
                astNode.$comment = comment2.replace(/\r/g, "");
              }
            }
            return astNode ?? value2;
          } else {
            return value2;
          }
        }
        addAstNodeRegionWithAssignmentsTo(node2) {
          const createDocumentSegment = /* @__PURE__ */ __name2((cstNode) => ({
            offset: cstNode.offset,
            end: cstNode.end,
            length: cstNode.length,
            range: cstNode.range
          }), "createDocumentSegment");
          if (node2.$cstNode) {
            const textRegion = node2.$textRegion = createDocumentSegment(node2.$cstNode);
            const assignments = textRegion.assignments = {};
            Object.keys(node2).filter((key) => !key.startsWith("$")).forEach((key) => {
              const propertyAssignments = findNodesForProperty(node2.$cstNode, key).map(createDocumentSegment);
              if (propertyAssignments.length !== 0) {
                assignments[key] = propertyAssignments;
              }
            });
            return node2;
          }
          return void 0;
        }
        linkNode(node2, root32, options2, container2, containerProperty, containerIndex) {
          for (const [propertyName, item] of Object.entries(node2)) {
            if (Array.isArray(item)) {
              for (let index = 0; index < item.length; index++) {
                const element3 = item[index];
                if (isIntermediateReference(element3)) {
                  item[index] = this.reviveReference(node2, propertyName, root32, element3, options2);
                } else if (isAstNode(element3)) {
                  this.linkNode(element3, root32, options2, node2, propertyName, index);
                }
              }
            } else if (isIntermediateReference(item)) {
              node2[propertyName] = this.reviveReference(node2, propertyName, root32, item, options2);
            } else if (isAstNode(item)) {
              this.linkNode(item, root32, options2, node2, propertyName);
            }
          }
          const mutable = node2;
          mutable.$container = container2;
          mutable.$containerProperty = containerProperty;
          mutable.$containerIndex = containerIndex;
        }
        reviveReference(container2, property3, root32, reference, options2) {
          let refText = reference.$refText;
          let error3 = reference.$error;
          let ref;
          if (reference.$ref) {
            const refNode = this.getRefNode(root32, reference.$ref, options2.uriConverter);
            if (isAstNode(refNode)) {
              if (!refText) {
                refText = this.nameProvider.getName(refNode);
              }
              return {
                $refText: refText ?? "",
                ref: refNode
              };
            } else {
              error3 = refNode;
            }
          } else if (reference.$refs) {
            const refs = [];
            for (const refUri of reference.$refs) {
              const refNode = this.getRefNode(root32, refUri, options2.uriConverter);
              if (isAstNode(refNode)) {
                refs.push({ ref: refNode });
              }
            }
            if (refs.length === 0) {
              ref = {
                $refText: refText ?? "",
                items: refs
              };
              error3 ?? (error3 = "Could not resolve multi-reference");
            } else {
              return {
                $refText: refText ?? "",
                items: refs
              };
            }
          }
          if (error3) {
            ref ?? (ref = {
              $refText: refText ?? "",
              ref: void 0
            });
            ref.error = {
              info: {
                container: container2,
                property: property3,
                reference: ref
              },
              message: error3
            };
            return ref;
          } else {
            return void 0;
          }
        }
        getRefNode(root32, uri, uriConverter) {
          try {
            const fragmentIndex = uri.indexOf("#");
            if (fragmentIndex === 0) {
              const node22 = this.astNodeLocator.getAstNode(root32, uri.substring(1));
              if (!node22) {
                return "Could not resolve path: " + uri;
              }
              return node22;
            }
            if (fragmentIndex < 0) {
              const documentUri2 = uriConverter ? uriConverter(uri) : URI2.parse(uri);
              const document22 = this.langiumDocuments.getDocument(documentUri2);
              if (!document22) {
                return "Could not find document for URI: " + uri;
              }
              return document22.parseResult.value;
            }
            const documentUri = uriConverter ? uriConverter(uri.substring(0, fragmentIndex)) : URI2.parse(uri.substring(0, fragmentIndex));
            const document2 = this.langiumDocuments.getDocument(documentUri);
            if (!document2) {
              return "Could not find document for URI: " + uri;
            }
            if (fragmentIndex === uri.length - 1) {
              return document2.parseResult.value;
            }
            const node2 = this.astNodeLocator.getAstNode(document2.parseResult.value, uri.substring(fragmentIndex + 1));
            if (!node2) {
              return "Could not resolve URI: " + uri;
            }
            return node2;
          } catch (err) {
            return String(err);
          }
        }
      };
      DefaultServiceRegistry = class {
        static {
          __name(this, "DefaultServiceRegistry");
        }
        static {
          __name2(this, "DefaultServiceRegistry");
        }
        /**
         * @deprecated Since 3.1.0. Use the new `fileExtensionMap` (or `languageIdMap`) property instead.
         */
        get map() {
          return this.fileExtensionMap;
        }
        constructor(services) {
          this.languageIdMap = /* @__PURE__ */ new Map();
          this.fileExtensionMap = /* @__PURE__ */ new Map();
          this.fileNameMap = /* @__PURE__ */ new Map();
          this.textDocuments = services?.workspace.TextDocuments;
        }
        register(language) {
          const data6 = language.LanguageMetaData;
          for (const ext of data6.fileExtensions) {
            if (this.fileExtensionMap.has(ext)) {
              console.warn(`The file extension ${ext} is used by multiple languages. It is now assigned to '${data6.languageId}'.`);
            }
            this.fileExtensionMap.set(ext, language);
          }
          if (data6.fileNames) {
            for (const name of data6.fileNames) {
              if (this.fileNameMap.has(name)) {
                console.warn(`The file name ${name} is used by multiple languages. It is now assigned to '${data6.languageId}'.`);
              }
              this.fileNameMap.set(name, language);
            }
          }
          this.languageIdMap.set(data6.languageId, language);
        }
        getServices(uri) {
          if (this.languageIdMap.size === 0) {
            throw new Error("The service registry is empty. Use `register` to register the services of a language.");
          }
          const languageId = this.textDocuments?.get(uri)?.languageId;
          if (languageId !== void 0) {
            const services2 = this.languageIdMap.get(languageId);
            if (services2) {
              return services2;
            }
          }
          const ext = UriUtils.extname(uri);
          const name = UriUtils.basename(uri);
          const services = this.fileNameMap.get(name) ?? this.fileExtensionMap.get(ext);
          if (!services) {
            if (languageId) {
              throw new Error(`The service registry contains no services for the extension '${ext}' for language '${languageId}'.`);
            } else {
              throw new Error(`The service registry contains no services for the extension '${ext}'.`);
            }
          }
          return services;
        }
        hasServices(uri) {
          try {
            this.getServices(uri);
            return true;
          } catch {
            return false;
          }
        }
        get all() {
          return Array.from(this.languageIdMap.values());
        }
      };
      __name(diagnosticData, "diagnosticData");
      __name2(diagnosticData, "diagnosticData");
      (function(ValidationCategory2) {
        ValidationCategory2.defaults = ["fast", "slow", "built-in"];
        ValidationCategory2.all = ValidationCategory2.defaults;
      })(ValidationCategory || (ValidationCategory = {}));
      ValidationRegistry = class {
        static {
          __name(this, "ValidationRegistry");
        }
        static {
          __name2(this, "ValidationRegistry");
        }
        constructor(services) {
          this.entries = new MultiMap();
          this.knownCategories = new Set(ValidationCategory.defaults);
          this.entriesBefore = [];
          this.entriesAfter = [];
          this.reflection = services.shared.AstReflection;
        }
        /**
         * Register a set of validation checks. Each value in the record can be either a single validation check (i.e. a function)
         * or an array of validation checks.
         *
         * @param checksRecord Set of validation checks to register.
         * @param thisObj Optional object to be used as `this` when calling the validation check functions.
         * @param category Optional category for the validation checks (defaults to `'fast'`).
         */
        register(checksRecord, thisObj = this, category = "fast") {
          if (category === "built-in") {
            throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");
          }
          this.knownCategories.add(category);
          for (const [type3, ch] of Object.entries(checksRecord)) {
            const callbacks = ch;
            if (Array.isArray(callbacks)) {
              for (const check of callbacks) {
                const entry = {
                  check: this.wrapValidationException(check, thisObj),
                  category
                };
                this.addEntry(type3, entry);
              }
            } else if (typeof callbacks === "function") {
              const entry = {
                check: this.wrapValidationException(callbacks, thisObj),
                category
              };
              this.addEntry(type3, entry);
            } else {
              assertUnreachable(callbacks);
            }
          }
        }
        wrapValidationException(check, thisObj) {
          return async (node2, accept, cancelToken) => {
            await this.handleException(() => check.call(thisObj, node2, accept, cancelToken), "An error occurred during validation", accept, node2);
          };
        }
        async handleException(functionality, messageContext, accept, node2) {
          try {
            await functionality();
          } catch (err) {
            if (isOperationCancelled(err)) {
              throw err;
            }
            console.error(`${messageContext}:`, err);
            if (err instanceof Error && err.stack) {
              console.error(err.stack);
            }
            const messageDetails = err instanceof Error ? err.message : String(err);
            accept("error", `${messageContext}: ${messageDetails}`, { node: node2 });
          }
        }
        addEntry(type3, entry) {
          if (type3 === "AstNode") {
            this.entries.add("AstNode", entry);
            return;
          }
          for (const subtype of this.reflection.getAllSubTypes(type3)) {
            this.entries.add(subtype, entry);
          }
        }
        getChecks(type3, categories) {
          let checks = stream(this.entries.get(type3)).concat(this.entries.get("AstNode"));
          if (categories) {
            checks = checks.filter((entry) => categories.includes(entry.category));
          }
          return checks.map((entry) => entry.check);
        }
        /**
         * Register logic which will be executed once before validating all the nodes of an AST/Langium document.
         * This helps to prepare or initialize some information which are required or reusable for the following checks on the AstNodes.
         *
         * As an example, for validating unique fully-qualified names of nodes in the AST,
         * here the map for mapping names to nodes could be established.
         * During the usual checks on the nodes, they are put into this map with their name.
         *
         * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.
         * Therefore it is recommended to clear stored information
         * _before_ validating an AST to validate each AST unaffected from other ASTs
         * AND _after_ validating the AST to free memory by information which are no longer used.
         *
         * @param checkBefore a set-up function which will be called once before actually validating an AST
         * @param thisObj Optional object to be used as `this` when calling the validation check functions.
         */
        registerBeforeDocument(checkBefore, thisObj = this) {
          this.entriesBefore.push(this.wrapPreparationException(checkBefore, "An error occurred during set-up of the validation", thisObj));
        }
        /**
         * Register logic which will be executed once after validating all the nodes of an AST/Langium document.
         * This helps to finally evaluate information which are collected during the checks on the AstNodes.
         *
         * As an example, for validating unique fully-qualified names of nodes in the AST,
         * here the map with all the collected nodes and their names is checked
         * and validation hints are created for all nodes with the same name.
         *
         * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.
         * Therefore it is recommended to clear stored information
         * _before_ validating an AST to validate each AST unaffected from other ASTs
         * AND _after_ validating the AST to free memory by information which are no longer used.
         *
         * @param checkBefore a set-up function which will be called once before actually validating an AST
         * @param thisObj Optional object to be used as `this` when calling the validation check functions.
         */
        registerAfterDocument(checkAfter, thisObj = this) {
          this.entriesAfter.push(this.wrapPreparationException(checkAfter, "An error occurred during tear-down of the validation", thisObj));
        }
        wrapPreparationException(check, messageContext, thisObj) {
          return async (rootNode, accept, categories, cancelToken) => {
            await this.handleException(() => check.call(thisObj, rootNode, accept, categories, cancelToken), messageContext, accept, rootNode);
          };
        }
        get checksBefore() {
          return this.entriesBefore;
        }
        get checksAfter() {
          return this.entriesAfter;
        }
        getAllValidationCategories(_document) {
          return this.knownCategories;
        }
      };
      VALIDATE_EACH_NODE = Object.freeze({
        validateNode: true,
        validateChildren: true
      });
      DefaultDocumentValidator = class {
        static {
          __name(this, "DefaultDocumentValidator");
        }
        static {
          __name2(this, "DefaultDocumentValidator");
        }
        constructor(services) {
          this.validationRegistry = services.validation.ValidationRegistry;
          this.metadata = services.LanguageMetaData;
          this.profiler = services.shared.profilers.LangiumProfiler;
          this.languageId = services.LanguageMetaData.languageId;
        }
        async validateDocument(document2, options2 = {}, cancelToken = cancellation_exports.CancellationToken.None) {
          const parseResult = document2.parseResult;
          const diagnostics = [];
          await interruptAndCheck(cancelToken);
          if (!options2.categories || options2.categories.includes("built-in")) {
            this.processLexingErrors(parseResult, diagnostics, options2);
            if (options2.stopAfterLexingErrors && diagnostics.some((d3) => d3.data?.code === DocumentValidator.LexingError)) {
              return diagnostics;
            }
            this.processParsingErrors(parseResult, diagnostics, options2);
            if (options2.stopAfterParsingErrors && diagnostics.some((d3) => d3.data?.code === DocumentValidator.ParsingError)) {
              return diagnostics;
            }
            this.processLinkingErrors(document2, diagnostics, options2);
            if (options2.stopAfterLinkingErrors && diagnostics.some((d3) => d3.data?.code === DocumentValidator.LinkingError)) {
              return diagnostics;
            }
          }
          try {
            diagnostics.push(...await this.validateAst(parseResult.value, options2, cancelToken));
          } catch (err) {
            if (isOperationCancelled(err)) {
              throw err;
            }
            console.error("An error occurred during validation:", err);
          }
          await interruptAndCheck(cancelToken);
          return diagnostics;
        }
        processLexingErrors(parseResult, diagnostics, _options) {
          const lexerDiagnostics = [...parseResult.lexerErrors, ...parseResult.lexerReport?.diagnostics ?? []];
          for (const lexerDiagnostic of lexerDiagnostics) {
            const severity = lexerDiagnostic.severity ?? "error";
            const diagnostic = {
              severity: toDiagnosticSeverity(severity),
              range: {
                start: {
                  line: lexerDiagnostic.line - 1,
                  character: lexerDiagnostic.column - 1
                },
                end: {
                  line: lexerDiagnostic.line - 1,
                  character: lexerDiagnostic.column + lexerDiagnostic.length - 1
                }
              },
              message: lexerDiagnostic.message,
              data: toDiagnosticData(severity),
              source: this.getSource()
            };
            diagnostics.push(diagnostic);
          }
        }
        processParsingErrors(parseResult, diagnostics, _options) {
          for (const parserError of parseResult.parserErrors) {
            let range3 = void 0;
            if (isNaN(parserError.token.startOffset)) {
              if ("previousToken" in parserError) {
                const token2 = parserError.previousToken;
                if (!isNaN(token2.startOffset)) {
                  const position5 = { line: token2.endLine - 1, character: token2.endColumn };
                  range3 = { start: position5, end: position5 };
                } else {
                  const position5 = { line: 0, character: 0 };
                  range3 = { start: position5, end: position5 };
                }
              }
            } else {
              range3 = tokenToRange(parserError.token);
            }
            if (range3) {
              const diagnostic = {
                severity: toDiagnosticSeverity("error"),
                range: range3,
                message: parserError.message,
                data: diagnosticData(DocumentValidator.ParsingError),
                source: this.getSource()
              };
              diagnostics.push(diagnostic);
            }
          }
        }
        processLinkingErrors(document2, diagnostics, _options) {
          for (const reference of document2.references) {
            const linkingError = reference.error;
            if (linkingError) {
              const info2 = {
                node: linkingError.info.container,
                range: reference.$refNode?.range,
                property: linkingError.info.property,
                index: linkingError.info.index,
                data: {
                  code: DocumentValidator.LinkingError,
                  containerType: linkingError.info.container.$type,
                  property: linkingError.info.property,
                  refText: linkingError.info.reference.$refText
                }
              };
              diagnostics.push(this.toDiagnostic("error", linkingError.message, info2));
            }
          }
        }
        async validateAst(rootNode, options2, cancelToken = cancellation_exports.CancellationToken.None) {
          const validationItems = [];
          const acceptor = /* @__PURE__ */ __name2((severity, message, info2) => {
            validationItems.push(this.toDiagnostic(severity, message, info2));
          }, "acceptor");
          await this.validateAstBefore(rootNode, options2, acceptor, cancelToken);
          await this.validateAstNodes(rootNode, options2, acceptor, cancelToken);
          await this.validateAstAfter(rootNode, options2, acceptor, cancelToken);
          return validationItems;
        }
        async validateAstBefore(rootNode, options2, acceptor, cancelToken = cancellation_exports.CancellationToken.None) {
          const checksBefore = this.validationRegistry.checksBefore;
          for (const checkBefore of checksBefore) {
            await interruptAndCheck(cancelToken);
            await checkBefore(rootNode, acceptor, options2.categories ?? [], cancelToken);
          }
        }
        async validateAstNodes(rootNode, options2, acceptor, cancelToken = cancellation_exports.CancellationToken.None) {
          if (this.profiler?.isActive("validating")) {
            const task = this.profiler.createTask("validating", this.languageId);
            task.start();
            try {
              const nodes5 = streamAst(rootNode).iterator();
              for (const node2 of nodes5) {
                task.startSubTask(node2.$type);
                const nodeOptions = this.validateSingleNodeOptions(node2, options2);
                if (nodeOptions.validateNode) {
                  try {
                    const checks = this.validationRegistry.getChecks(node2.$type, options2.categories);
                    for (const check of checks) {
                      await check(node2, acceptor, cancelToken);
                    }
                  } finally {
                    task.stopSubTask(node2.$type);
                  }
                }
                if (!nodeOptions.validateChildren) {
                  nodes5.prune();
                }
              }
            } finally {
              task.stop();
            }
          } else {
            const nodes5 = streamAst(rootNode).iterator();
            for (const node2 of nodes5) {
              await interruptAndCheck(cancelToken);
              const nodeOptions = this.validateSingleNodeOptions(node2, options2);
              if (nodeOptions.validateNode) {
                const checks = this.validationRegistry.getChecks(node2.$type, options2.categories);
                for (const check of checks) {
                  await check(node2, acceptor, cancelToken);
                }
              }
              if (!nodeOptions.validateChildren) {
                nodes5.prune();
              }
            }
          }
        }
        validateSingleNodeOptions(_node, _options) {
          return VALIDATE_EACH_NODE;
        }
        async validateAstAfter(rootNode, options2, acceptor, cancelToken = cancellation_exports.CancellationToken.None) {
          const checksAfter = this.validationRegistry.checksAfter;
          for (const checkAfter of checksAfter) {
            await interruptAndCheck(cancelToken);
            await checkAfter(rootNode, acceptor, options2.categories ?? [], cancelToken);
          }
        }
        toDiagnostic(severity, message, info2) {
          return {
            message,
            range: getDiagnosticRange(info2),
            severity: toDiagnosticSeverity(severity),
            code: info2.code,
            codeDescription: info2.codeDescription,
            tags: info2.tags,
            relatedInformation: info2.relatedInformation,
            data: info2.data,
            source: this.getSource()
          };
        }
        getSource() {
          return this.metadata.languageId;
        }
      };
      __name(getDiagnosticRange, "getDiagnosticRange");
      __name2(getDiagnosticRange, "getDiagnosticRange");
      __name(toDiagnosticSeverity, "toDiagnosticSeverity");
      __name2(toDiagnosticSeverity, "toDiagnosticSeverity");
      __name(toDiagnosticData, "toDiagnosticData");
      __name2(toDiagnosticData, "toDiagnosticData");
      (function(DocumentValidator2) {
        DocumentValidator2.LexingError = "lexing-error";
        DocumentValidator2.LexingWarning = "lexing-warning";
        DocumentValidator2.LexingInfo = "lexing-info";
        DocumentValidator2.LexingHint = "lexing-hint";
        DocumentValidator2.ParsingError = "parsing-error";
        DocumentValidator2.LinkingError = "linking-error";
      })(DocumentValidator || (DocumentValidator = {}));
      DefaultAstNodeDescriptionProvider = class {
        static {
          __name(this, "DefaultAstNodeDescriptionProvider");
        }
        static {
          __name2(this, "DefaultAstNodeDescriptionProvider");
        }
        constructor(services) {
          this.astNodeLocator = services.workspace.AstNodeLocator;
          this.nameProvider = services.references.NameProvider;
        }
        createDescription(node2, name, document2) {
          const doc = document2 ?? getDocument(node2);
          name ?? (name = this.nameProvider.getName(node2));
          const path4 = this.astNodeLocator.getAstNodePath(node2);
          if (!name) {
            throw new Error(`Node at path ${path4} has no name.`);
          }
          let nameNodeSegment;
          const nameSegmentGetter = /* @__PURE__ */ __name2(() => nameNodeSegment ?? (nameNodeSegment = toDocumentSegment(this.nameProvider.getNameNode(node2) ?? node2.$cstNode)), "nameSegmentGetter");
          return {
            node: node2,
            name,
            get nameSegment() {
              return nameSegmentGetter();
            },
            selectionSegment: toDocumentSegment(node2.$cstNode),
            type: node2.$type,
            documentUri: doc.uri,
            path: path4
          };
        }
      };
      DefaultReferenceDescriptionProvider = class {
        static {
          __name(this, "DefaultReferenceDescriptionProvider");
        }
        static {
          __name2(this, "DefaultReferenceDescriptionProvider");
        }
        constructor(services) {
          this.nodeLocator = services.workspace.AstNodeLocator;
        }
        async createDescriptions(document2, cancelToken = cancellation_exports.CancellationToken.None) {
          const descr = [];
          const rootNode = document2.parseResult.value;
          for (const astNode of streamAst(rootNode)) {
            await interruptAndCheck(cancelToken);
            streamReferences(astNode).forEach((refInfo) => {
              if (!refInfo.reference.error) {
                descr.push(...this.createInfoDescriptions(refInfo));
              }
            });
          }
          return descr;
        }
        createInfoDescriptions(refInfo) {
          const reference = refInfo.reference;
          if (reference.error || !reference.$refNode) {
            return [];
          }
          let items = [];
          if (isReference(reference) && reference.$nodeDescription) {
            items = [reference.$nodeDescription];
          } else if (isMultiReference(reference)) {
            items = reference.items.map((e3) => e3.$nodeDescription).filter((e3) => e3 !== void 0);
          }
          const sourceUri = getDocument(refInfo.container).uri;
          const sourcePath = this.nodeLocator.getAstNodePath(refInfo.container);
          const descriptions = [];
          const segment = toDocumentSegment(reference.$refNode);
          for (const item of items) {
            descriptions.push({
              sourceUri,
              sourcePath,
              targetUri: item.documentUri,
              targetPath: item.path,
              segment,
              local: UriUtils.equals(item.documentUri, sourceUri)
            });
          }
          return descriptions;
        }
      };
      DefaultAstNodeLocator = class {
        static {
          __name(this, "DefaultAstNodeLocator");
        }
        static {
          __name2(this, "DefaultAstNodeLocator");
        }
        constructor() {
          this.segmentSeparator = "/";
          this.indexSeparator = "@";
        }
        getAstNodePath(node2) {
          if (node2.$container) {
            const containerPath = this.getAstNodePath(node2.$container);
            const newSegment = this.getPathSegment(node2);
            const nodePath = containerPath + this.segmentSeparator + newSegment;
            return nodePath;
          }
          return "";
        }
        getPathSegment({ $containerProperty, $containerIndex }) {
          if (!$containerProperty) {
            throw new Error("Missing '$containerProperty' in AST node.");
          }
          if ($containerIndex !== void 0) {
            return $containerProperty + this.indexSeparator + $containerIndex;
          }
          return $containerProperty;
        }
        getAstNode(node2, path4) {
          const segments = path4.split(this.segmentSeparator);
          return segments.reduce((previousValue, currentValue) => {
            if (!previousValue || currentValue.length === 0) {
              return previousValue;
            }
            const propertyIndex = currentValue.indexOf(this.indexSeparator);
            if (propertyIndex > 0) {
              const property3 = currentValue.substring(0, propertyIndex);
              const arrayIndex = parseInt(currentValue.substring(propertyIndex + 1));
              const array4 = previousValue[property3];
              return array4?.[arrayIndex];
            }
            return previousValue[currentValue];
          }, node2);
        }
      };
      event_exports = {};
      __reExport(event_exports, __toESM2(require_events(), 1));
      DefaultConfigurationProvider = class {
        static {
          __name(this, "DefaultConfigurationProvider");
        }
        static {
          __name2(this, "DefaultConfigurationProvider");
        }
        constructor(services) {
          this._ready = new Deferred();
          this.onConfigurationSectionUpdateEmitter = new event_exports.Emitter();
          this.settings = {};
          this.workspaceConfig = false;
          this.serviceRegistry = services.ServiceRegistry;
        }
        get ready() {
          return this._ready.promise;
        }
        initialize(params) {
          this.workspaceConfig = params.capabilities.workspace?.configuration ?? false;
        }
        async initialized(params) {
          if (this.workspaceConfig) {
            if (params.register) {
              const languages = this.serviceRegistry.all;
              params.register({
                // Listen to configuration changes for all languages
                section: languages.map((lang) => this.toSectionName(lang.LanguageMetaData.languageId))
              });
            }
            if (params.fetchConfiguration) {
              const configToUpdate = this.serviceRegistry.all.map((lang) => ({
                // Fetch the configuration changes for all languages
                section: this.toSectionName(lang.LanguageMetaData.languageId)
              }));
              const configs = await params.fetchConfiguration(configToUpdate);
              configToUpdate.forEach((conf5, idx) => {
                this.updateSectionConfiguration(conf5.section, configs[idx]);
              });
            }
          }
          this._ready.resolve();
        }
        /**
         *  Updates the cached configurations using the `change` notification parameters.
         *
         * @param change The parameters of a change configuration notification.
         * `settings` property of the change object could be expressed as `Record<string, Record<string, any>>`
         */
        updateConfiguration(change2) {
          if (typeof change2.settings !== "object" || change2.settings === null) {
            return;
          }
          Object.entries(change2.settings).forEach(([section, configuration]) => {
            this.updateSectionConfiguration(section, configuration);
            this.onConfigurationSectionUpdateEmitter.fire({ section, configuration });
          });
        }
        updateSectionConfiguration(section, configuration) {
          this.settings[section] = configuration;
        }
        /**
        * Returns a configuration value stored for the given language.
        *
        * @param language The language id
        * @param configuration Configuration name
        */
        async getConfiguration(language, configuration) {
          await this.ready;
          const sectionName = this.toSectionName(language);
          if (this.settings[sectionName]) {
            return this.settings[sectionName][configuration];
          }
        }
        toSectionName(languageId) {
          return `${languageId}`;
        }
        get onConfigurationSectionUpdate() {
          return this.onConfigurationSectionUpdateEmitter.event;
        }
      };
      import_vscode_languageserver_protocol = __toESM2(require_main2(), 1);
      (function(Disposable2) {
        function create4(callback) {
          return {
            dispose: /* @__PURE__ */ __name2(async () => await callback(), "dispose")
          };
        }
        __name(create4, "create");
        __name2(create4, "create");
        Disposable2.create = create4;
      })(Disposable || (Disposable = {}));
      DefaultDocumentBuilder = class {
        static {
          __name(this, "DefaultDocumentBuilder");
        }
        static {
          __name2(this, "DefaultDocumentBuilder");
        }
        constructor(services) {
          this.updateBuildOptions = {
            // Default: run only the built-in validation checks and those in the _fast_ category (includes those without category)
            validation: {
              categories: ["built-in", "fast"]
            }
          };
          this.updateListeners = [];
          this.buildPhaseListeners = new MultiMap();
          this.documentPhaseListeners = new MultiMap();
          this.buildState = /* @__PURE__ */ new Map();
          this.documentBuildWaiters = /* @__PURE__ */ new Map();
          this.currentState = DocumentState.Changed;
          this.langiumDocuments = services.workspace.LangiumDocuments;
          this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;
          this.textDocuments = services.workspace.TextDocuments;
          this.indexManager = services.workspace.IndexManager;
          this.fileSystemProvider = services.workspace.FileSystemProvider;
          this.workspaceManager = () => services.workspace.WorkspaceManager;
          this.serviceRegistry = services.ServiceRegistry;
        }
        async build(documents, options2 = {}, cancelToken = cancellation_exports.CancellationToken.None) {
          for (const document2 of documents) {
            const key = document2.uri.toString();
            if (document2.state === DocumentState.Validated) {
              if (typeof options2.validation === "boolean" && options2.validation) {
                this.resetToState(document2, DocumentState.IndexedReferences);
              } else if (typeof options2.validation === "object") {
                const categories = this.findMissingValidationCategories(document2, options2);
                if (categories.length > 0) {
                  this.buildState.set(key, {
                    completed: false,
                    options: {
                      validation: {
                        categories
                      }
                    },
                    result: this.buildState.get(key)?.result
                  });
                  document2.state = DocumentState.IndexedReferences;
                }
              }
            } else {
              this.buildState.delete(key);
            }
          }
          this.currentState = DocumentState.Changed;
          await this.emitUpdate(documents.map((e3) => e3.uri), []);
          await this.buildDocuments(documents, options2, cancelToken);
        }
        async update(changed, deleted, cancelToken = cancellation_exports.CancellationToken.None) {
          this.currentState = DocumentState.Changed;
          const deletedUris = [];
          for (const deletedUri of deleted) {
            const deletedDocs = this.langiumDocuments.deleteDocuments(deletedUri);
            for (const doc of deletedDocs) {
              deletedUris.push(doc.uri);
              this.cleanUpDeleted(doc);
            }
          }
          const changedUris = (await Promise.all(changed.map((uri) => this.findChangedUris(uri)))).flat();
          for (const changedUri of changedUris) {
            let changedDocument = this.langiumDocuments.getDocument(changedUri);
            if (changedDocument === void 0) {
              changedDocument = this.langiumDocumentFactory.fromModel({ $type: "INVALID" }, changedUri);
              changedDocument.state = DocumentState.Changed;
              this.langiumDocuments.addDocument(changedDocument);
            }
            this.resetToState(changedDocument, DocumentState.Changed);
          }
          const allChangedUris = stream(changedUris).concat(deletedUris).map((uri) => uri.toString()).toSet();
          this.langiumDocuments.all.filter((doc) => !allChangedUris.has(doc.uri.toString()) && this.shouldRelink(doc, allChangedUris)).forEach((doc) => this.resetToState(doc, DocumentState.ComputedScopes));
          await this.emitUpdate(changedUris, deletedUris);
          await interruptAndCheck(cancelToken);
          const rebuildDocuments = this.sortDocuments(this.langiumDocuments.all.filter((doc) => (
            // This includes those that were reported as changed and those that we selected for relinking
            doc.state < DocumentState.Validated || !this.buildState.get(doc.uri.toString())?.completed || this.resultsAreIncomplete(doc, this.updateBuildOptions)
          )).toArray());
          await this.buildDocuments(rebuildDocuments, this.updateBuildOptions, cancelToken);
        }
        resultsAreIncomplete(document2, options2) {
          return this.findMissingValidationCategories(document2, options2).length >= 1;
        }
        findMissingValidationCategories(document2, options2) {
          const state4 = this.buildState.get(document2.uri.toString());
          const allCategories = this.serviceRegistry.getServices(document2.uri).validation.ValidationRegistry.getAllValidationCategories(document2);
          const executedCategories = state4?.result?.validationChecks ? new Set(state4?.result?.validationChecks) : state4?.completed ? allCategories : /* @__PURE__ */ new Set();
          const requestedCategories = options2 === void 0 || options2.validation === true ? allCategories : typeof options2.validation === "object" ? options2.validation.categories ?? allCategories : [];
          return stream(requestedCategories).filter((requested) => !executedCategories.has(requested)).toArray();
        }
        async findChangedUris(changed) {
          const document2 = this.langiumDocuments.getDocument(changed) ?? this.textDocuments?.get(changed);
          if (document2) {
            return [changed];
          }
          try {
            const stat = await this.fileSystemProvider.stat(changed);
            if (stat.isDirectory) {
              const uris = await this.workspaceManager().searchFolder(changed);
              return uris;
            } else if (this.workspaceManager().shouldIncludeEntry(stat)) {
              return [changed];
            }
          } catch {
          }
          return [];
        }
        async emitUpdate(changed, deleted) {
          await Promise.all(this.updateListeners.map((listener) => listener(changed, deleted)));
        }
        /**
         * Sort the given documents by priority. By default, documents with an open text document are prioritized.
         * This is useful to ensure that visible documents show their diagnostics before all other documents.
         *
         * This improves the responsiveness in large workspaces as users usually don't care about diagnostics
         * in files that are currently not opened in the editor.
         */
        sortDocuments(documents) {
          let left3 = 0;
          let right3 = documents.length - 1;
          while (left3 < right3) {
            while (left3 < documents.length && this.hasTextDocument(documents[left3])) {
              left3++;
            }
            while (right3 >= 0 && !this.hasTextDocument(documents[right3])) {
              right3--;
            }
            if (left3 < right3) {
              [documents[left3], documents[right3]] = [documents[right3], documents[left3]];
            }
          }
          return documents;
        }
        hasTextDocument(doc) {
          return Boolean(this.textDocuments?.get(doc.uri));
        }
        /**
         * Check whether the given document should be relinked after changes were found in the given URIs.
         */
        shouldRelink(document2, changedUris) {
          if (document2.references.some((ref) => ref.error !== void 0)) {
            return true;
          }
          return this.indexManager.isAffected(document2, changedUris);
        }
        onUpdate(callback) {
          this.updateListeners.push(callback);
          return Disposable.create(() => {
            const index = this.updateListeners.indexOf(callback);
            if (index >= 0) {
              this.updateListeners.splice(index, 1);
            }
          });
        }
        resetToState(document2, state4) {
          switch (state4) {
            case DocumentState.Changed: {
            }
            case DocumentState.Parsed:
              this.indexManager.removeContent(document2.uri);
            // Fall through
            case DocumentState.IndexedContent:
              document2.localSymbols = void 0;
            // Fall through
            case DocumentState.ComputedScopes: {
              const linker = this.serviceRegistry.getServices(document2.uri).references.Linker;
              linker.unlink(document2);
            }
            case DocumentState.Linked:
              this.indexManager.removeReferences(document2.uri);
            // Fall through
            case DocumentState.IndexedReferences:
              document2.diagnostics = void 0;
              this.buildState.delete(document2.uri.toString());
            // Fall through
            case DocumentState.Validated:
          }
          if (document2.state > state4) {
            document2.state = state4;
          }
        }
        cleanUpDeleted(document2) {
          this.buildState.delete(document2.uri.toString());
          this.indexManager.remove(document2.uri);
          document2.state = DocumentState.Changed;
        }
        /**
         * Build the given documents by stepping through all build phases. If a document's state indicates
         * that a certain build phase is already done, the phase is skipped for that document.
         *
         * @param documents The documents to build.
         * @param options the {@link BuildOptions} to use.
         * @param cancelToken A cancellation token that can be used to cancel the build.
         * @returns A promise that resolves when the build is done.
         */
        async buildDocuments(documents, options2, cancelToken) {
          this.prepareBuild(documents, options2);
          await this.runCancelable(documents, DocumentState.Parsed, cancelToken, (doc) => this.langiumDocumentFactory.update(doc, cancelToken));
          await this.runCancelable(documents, DocumentState.IndexedContent, cancelToken, (doc) => this.indexManager.updateContent(doc, cancelToken));
          await this.runCancelable(documents, DocumentState.ComputedScopes, cancelToken, async (doc) => {
            const scopeComputation = this.serviceRegistry.getServices(doc.uri).references.ScopeComputation;
            doc.localSymbols = await scopeComputation.collectLocalSymbols(doc, cancelToken);
          });
          const toBeLinked = documents.filter((doc) => this.shouldLink(doc));
          await this.runCancelable(toBeLinked, DocumentState.Linked, cancelToken, (doc) => {
            const linker = this.serviceRegistry.getServices(doc.uri).references.Linker;
            return linker.link(doc, cancelToken);
          });
          await this.runCancelable(toBeLinked, DocumentState.IndexedReferences, cancelToken, (doc) => this.indexManager.updateReferences(doc, cancelToken));
          const toBeValidated = documents.filter((doc) => {
            if (this.shouldValidate(doc)) {
              return true;
            } else {
              this.markAsCompleted(doc);
              return false;
            }
          });
          await this.runCancelable(toBeValidated, DocumentState.Validated, cancelToken, async (doc) => {
            await this.validate(doc, cancelToken);
            this.markAsCompleted(doc);
          });
        }
        markAsCompleted(document2) {
          const state4 = this.buildState.get(document2.uri.toString());
          if (state4) {
            state4.completed = true;
          }
        }
        /**
         * Runs prior to beginning the build process to update the {@link DocumentBuildState} for each document
         *
         * @param documents collection of documents to be built
         * @param options the {@link BuildOptions} to use
         */
        prepareBuild(documents, options2) {
          for (const doc of documents) {
            const key = doc.uri.toString();
            const state4 = this.buildState.get(key);
            if (!state4 || state4.completed) {
              this.buildState.set(key, {
                completed: false,
                options: options2,
                result: state4?.result
              });
            } else {
            }
          }
        }
        /**
         * Runs a cancelable operation on a set of documents to bring them to a specified {@link DocumentState}.
         *
         * @param documents The array of documents to process.
         * @param targetState The target {@link DocumentState} to bring the documents to.
         * @param cancelToken A token that can be used to cancel the operation.
         * @param callback A function to be called for each document.
         * @returns A promise that resolves when all documents have been processed or the operation is canceled.
         * @throws Will throw `OperationCancelled` if the operation is canceled via a `CancellationToken`.
         */
        async runCancelable(documents, targetState, cancelToken, callback) {
          for (const document2 of documents) {
            if (document2.state < targetState) {
              await interruptAndCheck(cancelToken);
              await callback(document2);
              document2.state = targetState;
              await this.notifyDocumentPhase(document2, targetState, cancelToken);
            }
          }
          const targetStateDocs = documents.filter((doc) => doc.state === targetState);
          await this.notifyBuildPhase(targetStateDocs, targetState, cancelToken);
          this.currentState = targetState;
        }
        onBuildPhase(targetState, callback) {
          this.buildPhaseListeners.add(targetState, callback);
          return Disposable.create(() => {
            this.buildPhaseListeners.delete(targetState, callback);
          });
        }
        onDocumentPhase(targetState, callback) {
          this.documentPhaseListeners.add(targetState, callback);
          return Disposable.create(() => {
            this.documentPhaseListeners.delete(targetState, callback);
          });
        }
        waitUntil(state4, uriOrToken, cancelToken) {
          let uri = void 0;
          if (uriOrToken && "path" in uriOrToken) {
            uri = uriOrToken;
          } else {
            cancelToken = uriOrToken;
          }
          cancelToken ?? (cancelToken = cancellation_exports.CancellationToken.None);
          if (uri) {
            return this.awaitDocumentState(state4, uri, cancelToken);
          } else {
            return this.awaitBuilderState(state4, cancelToken);
          }
        }
        awaitDocumentState(state4, uri, cancelToken) {
          const document2 = this.langiumDocuments.getDocument(uri);
          if (!document2) {
            return Promise.reject(new import_vscode_languageserver_protocol.ResponseError(import_vscode_languageserver_protocol.LSPErrorCodes.ServerCancelled, `No document found for URI: ${uri.toString()}`));
          } else if (document2.state >= state4) {
            return Promise.resolve(uri);
          } else if (cancelToken.isCancellationRequested) {
            return Promise.reject(OperationCancelled);
          } else if (this.currentState >= state4 && state4 > document2.state) {
            return Promise.reject(new import_vscode_languageserver_protocol.ResponseError(import_vscode_languageserver_protocol.LSPErrorCodes.RequestFailed, `Document state of ${uri.toString()} is ${DocumentState[document2.state]}, requiring ${DocumentState[state4]}, but workspace state is already ${DocumentState[this.currentState]}. Returning undefined.`));
          }
          return new Promise((resolve2, reject22) => {
            const buildDisposable = this.onDocumentPhase(state4, (doc) => {
              if (UriUtils.equals(doc.uri, uri)) {
                buildDisposable.dispose();
                cancelDisposable.dispose();
                resolve2(doc.uri);
              }
            });
            const cancelDisposable = cancelToken.onCancellationRequested(() => {
              buildDisposable.dispose();
              cancelDisposable.dispose();
              reject22(OperationCancelled);
            });
          });
        }
        awaitBuilderState(state4, cancelToken) {
          if (this.currentState >= state4) {
            return Promise.resolve();
          } else if (cancelToken.isCancellationRequested) {
            return Promise.reject(OperationCancelled);
          }
          return new Promise((resolve2, reject22) => {
            const buildDisposable = this.onBuildPhase(state4, () => {
              buildDisposable.dispose();
              cancelDisposable.dispose();
              resolve2();
            });
            const cancelDisposable = cancelToken.onCancellationRequested(() => {
              buildDisposable.dispose();
              cancelDisposable.dispose();
              reject22(OperationCancelled);
            });
          });
        }
        async notifyDocumentPhase(document2, state4, cancelToken) {
          const listeners = this.documentPhaseListeners.get(state4);
          const listenersCopy = listeners.slice();
          for (const listener of listenersCopy) {
            try {
              await interruptAndCheck(cancelToken);
              await listener(document2, cancelToken);
            } catch (err) {
              if (!isOperationCancelled(err)) {
                throw err;
              }
            }
          }
        }
        async notifyBuildPhase(documents, state4, cancelToken) {
          if (documents.length === 0) {
            return;
          }
          const listeners = this.buildPhaseListeners.get(state4);
          const listenersCopy = listeners.slice();
          for (const listener of listenersCopy) {
            await interruptAndCheck(cancelToken);
            await listener(documents, cancelToken);
          }
        }
        /**
         * Determine whether the given document should be linked during a build. The default
         * implementation checks the `eagerLinking` property of the build options. If it's set to `true`
         * or `undefined`, the document is included in the linking phase. This also affects the
         * references indexing phase, which depends on eager linking.
         */
        shouldLink(document2) {
          return this.getBuildOptions(document2).eagerLinking ?? true;
        }
        /**
         * Determine whether the given document should be validated during a build. The default
         * implementation checks the `validation` property of the build options. If it's set to `true`
         * or a `ValidationOptions` object, the document is included in the validation phase.
         */
        shouldValidate(document2) {
          return Boolean(this.getBuildOptions(document2).validation);
        }
        /**
         * Run validation checks on the given document and store the resulting diagnostics in the document.
         * If the document already contains diagnostics, the new ones are added to the list.
         */
        async validate(document2, cancelToken) {
          const validator = this.serviceRegistry.getServices(document2.uri).validation.DocumentValidator;
          const options2 = this.getBuildOptions(document2);
          const validationOptions = typeof options2.validation === "object" ? { ...options2.validation } : {};
          validationOptions.categories = this.findMissingValidationCategories(document2, options2);
          const diagnostics = await validator.validateDocument(document2, validationOptions, cancelToken);
          if (document2.diagnostics) {
            document2.diagnostics.push(...diagnostics);
          } else {
            document2.diagnostics = diagnostics;
          }
          const state4 = this.buildState.get(document2.uri.toString());
          if (state4) {
            state4.result ?? (state4.result = {});
            if (state4.result.validationChecks) {
              state4.result.validationChecks = stream(state4.result.validationChecks).concat(validationOptions.categories).distinct().toArray();
            } else {
              state4.result.validationChecks = [...validationOptions.categories];
            }
          }
        }
        getBuildOptions(document2) {
          return this.buildState.get(document2.uri.toString())?.options ?? {};
        }
      };
      DefaultIndexManager = class {
        static {
          __name(this, "DefaultIndexManager");
        }
        static {
          __name2(this, "DefaultIndexManager");
        }
        constructor(services) {
          this.symbolIndex = /* @__PURE__ */ new Map();
          this.symbolByTypeIndex = new ContextCache();
          this.referenceIndex = /* @__PURE__ */ new Map();
          this.documents = services.workspace.LangiumDocuments;
          this.serviceRegistry = services.ServiceRegistry;
          this.astReflection = services.AstReflection;
        }
        findAllReferences(targetNode, astNodePath) {
          const targetDocUri = getDocument(targetNode).uri;
          const result = [];
          this.referenceIndex.forEach((docRefs) => {
            docRefs.forEach((refDescr) => {
              if (UriUtils.equals(refDescr.targetUri, targetDocUri) && refDescr.targetPath === astNodePath) {
                result.push(refDescr);
              }
            });
          });
          return stream(result);
        }
        allElements(nodeType3, uris) {
          let documentUris = stream(this.symbolIndex.keys());
          if (uris) {
            documentUris = documentUris.filter((uri) => !uris || uris.has(uri));
          }
          return documentUris.map((uri) => this.getFileDescriptions(uri, nodeType3)).flat();
        }
        getFileDescriptions(uri, nodeType3) {
          if (!nodeType3) {
            return this.symbolIndex.get(uri) ?? [];
          }
          const descriptions = this.symbolByTypeIndex.get(uri, nodeType3, () => {
            const allFileDescriptions = this.symbolIndex.get(uri) ?? [];
            return allFileDescriptions.filter((e3) => this.astReflection.isSubtype(e3.type, nodeType3));
          });
          return descriptions;
        }
        remove(uri) {
          this.removeContent(uri);
          this.removeReferences(uri);
        }
        removeContent(uri) {
          const uriString = uri.toString();
          this.symbolIndex.delete(uriString);
          this.symbolByTypeIndex.clear(uriString);
        }
        removeReferences(uri) {
          const uriString = uri.toString();
          this.referenceIndex.delete(uriString);
        }
        async updateContent(document2, cancelToken = cancellation_exports.CancellationToken.None) {
          const services = this.serviceRegistry.getServices(document2.uri);
          const exports2 = await services.references.ScopeComputation.collectExportedSymbols(document2, cancelToken);
          const uri = document2.uri.toString();
          this.symbolIndex.set(uri, exports2);
          this.symbolByTypeIndex.clear(uri);
        }
        async updateReferences(document2, cancelToken = cancellation_exports.CancellationToken.None) {
          const services = this.serviceRegistry.getServices(document2.uri);
          const indexData = await services.workspace.ReferenceDescriptionProvider.createDescriptions(document2, cancelToken);
          this.referenceIndex.set(document2.uri.toString(), indexData);
        }
        isAffected(document2, changedUris) {
          const references = this.referenceIndex.get(document2.uri.toString());
          if (!references) {
            return false;
          }
          return references.some((ref) => !ref.local && changedUris.has(ref.targetUri.toString()));
        }
      };
      DefaultWorkspaceManager = class {
        static {
          __name(this, "DefaultWorkspaceManager");
        }
        static {
          __name2(this, "DefaultWorkspaceManager");
        }
        constructor(services) {
          this.initialBuildOptions = {};
          this._ready = new Deferred();
          this.serviceRegistry = services.ServiceRegistry;
          this.langiumDocuments = services.workspace.LangiumDocuments;
          this.documentBuilder = services.workspace.DocumentBuilder;
          this.fileSystemProvider = services.workspace.FileSystemProvider;
          this.mutex = services.workspace.WorkspaceLock;
        }
        get ready() {
          return this._ready.promise;
        }
        get workspaceFolders() {
          return this.folders;
        }
        initialize(params) {
          this.folders = params.workspaceFolders ?? void 0;
        }
        initialized(_params) {
          return this.mutex.write((token2) => this.initializeWorkspace(this.folders ?? [], token2));
        }
        async initializeWorkspace(folders, cancelToken = cancellation_exports.CancellationToken.None) {
          const documents = await this.performStartup(folders);
          await interruptAndCheck(cancelToken);
          await this.documentBuilder.build(documents, this.initialBuildOptions, cancelToken);
        }
        /**
         * Performs the uninterruptable startup sequence of the workspace manager.
         * This methods loads all documents in the workspace and other documents and returns them.
         */
        async performStartup(folders) {
          const documents = [];
          const collector = /* @__PURE__ */ __name2((document2) => {
            documents.push(document2);
            if (!this.langiumDocuments.hasDocument(document2.uri)) {
              this.langiumDocuments.addDocument(document2);
            }
          }, "collector");
          await this.loadAdditionalDocuments(folders, collector);
          const uris = [];
          await Promise.all(folders.map((wf) => this.getRootFolder(wf)).map(async (entry) => this.traverseFolder(entry, uris)));
          const uniqueUris = stream(uris).distinct((uri) => uri.toString()).filter((uri) => !this.langiumDocuments.hasDocument(uri));
          await this.loadWorkspaceDocuments(uniqueUris, collector);
          this._ready.resolve();
          return documents;
        }
        async loadWorkspaceDocuments(uris, collector) {
          await Promise.all(uris.map(async (uri) => {
            const document2 = await this.langiumDocuments.getOrCreateDocument(uri);
            collector(document2);
          }));
        }
        /**
         * Load all additional documents that shall be visible in the context of the given workspace
         * folders and add them to the collector. This can be used to include built-in libraries of
         * your language, which can be either loaded from provided files or constructed in memory.
         */
        loadAdditionalDocuments(_folders, _collector) {
          return Promise.resolve();
        }
        /**
         * Determine the root folder of the source documents in the given workspace folder.
         * The default implementation returns the URI of the workspace folder, but you can override
         * this to return a subfolder like `src` instead.
         */
        getRootFolder(workspaceFolder) {
          return URI2.parse(workspaceFolder.uri);
        }
        /**
         * Traverse the file system folder identified by the given URI and its subfolders. All
         * contained files that match the file extensions are added to the `uris` array.
         */
        async traverseFolder(folderPath, uris) {
          try {
            const content = await this.fileSystemProvider.readDirectory(folderPath);
            await Promise.all(content.map(async (entry) => {
              if (this.shouldIncludeEntry(entry)) {
                if (entry.isDirectory) {
                  await this.traverseFolder(entry.uri, uris);
                } else if (entry.isFile) {
                  uris.push(entry.uri);
                }
              }
            }));
          } catch (e3) {
            console.error("Failure to read directory content of " + folderPath.toString(true), e3);
          }
        }
        async searchFolder(uri) {
          const uris = [];
          await this.traverseFolder(uri, uris);
          return uris;
        }
        /**
         * Determine whether the given folder entry shall be included while indexing the workspace.
         */
        shouldIncludeEntry(entry) {
          const name = UriUtils.basename(entry.uri);
          if (name.startsWith(".")) {
            return false;
          }
          if (entry.isDirectory) {
            return name !== "node_modules" && name !== "out";
          } else if (entry.isFile) {
            return this.serviceRegistry.hasServices(entry.uri);
          }
          return false;
        }
      };
      DefaultLexerErrorMessageProvider = class {
        static {
          __name(this, "DefaultLexerErrorMessageProvider");
        }
        static {
          __name2(this, "DefaultLexerErrorMessageProvider");
        }
        buildUnexpectedCharactersMessage(fullText, startOffset, length2, line2, column2) {
          return defaultLexerErrorProvider.buildUnexpectedCharactersMessage(fullText, startOffset, length2, line2, column2);
        }
        buildUnableToPopLexerModeMessage(token2) {
          return defaultLexerErrorProvider.buildUnableToPopLexerModeMessage(token2);
        }
      };
      DEFAULT_TOKENIZE_OPTIONS = { mode: "full" };
      DefaultLexer = class {
        static {
          __name(this, "DefaultLexer");
        }
        static {
          __name2(this, "DefaultLexer");
        }
        constructor(services) {
          this.errorMessageProvider = services.parser.LexerErrorMessageProvider;
          this.tokenBuilder = services.parser.TokenBuilder;
          const tokens2 = this.tokenBuilder.buildTokens(services.Grammar, {
            caseInsensitive: services.LanguageMetaData.caseInsensitive
          });
          this.tokenTypes = this.toTokenTypeDictionary(tokens2);
          const lexerTokens = isTokenTypeDictionary(tokens2) ? Object.values(tokens2) : tokens2;
          const production = services.LanguageMetaData.mode === "production";
          this.chevrotainLexer = new Lexer2(lexerTokens, {
            positionTracking: "full",
            skipValidations: production,
            errorMessageProvider: this.errorMessageProvider
          });
        }
        get definition() {
          return this.tokenTypes;
        }
        tokenize(text4, _options = DEFAULT_TOKENIZE_OPTIONS) {
          const chevrotainResult = this.chevrotainLexer.tokenize(text4);
          return {
            tokens: chevrotainResult.tokens,
            errors: chevrotainResult.errors,
            hidden: chevrotainResult.groups.hidden ?? [],
            report: this.tokenBuilder.flushLexingReport?.(text4)
          };
        }
        toTokenTypeDictionary(buildTokens) {
          if (isTokenTypeDictionary(buildTokens))
            return buildTokens;
          const tokens2 = isIMultiModeLexerDefinition(buildTokens) ? Object.values(buildTokens.modes).flat() : buildTokens;
          const res = {};
          tokens2.forEach((token2) => res[token2.name] = token2);
          return res;
        }
      };
      __name(isTokenTypeArray, "isTokenTypeArray");
      __name2(isTokenTypeArray, "isTokenTypeArray");
      __name(isIMultiModeLexerDefinition, "isIMultiModeLexerDefinition");
      __name2(isIMultiModeLexerDefinition, "isIMultiModeLexerDefinition");
      __name(isTokenTypeDictionary, "isTokenTypeDictionary");
      __name2(isTokenTypeDictionary, "isTokenTypeDictionary");
      init_main();
      __name(parseJSDoc, "parseJSDoc");
      __name2(parseJSDoc, "parseJSDoc");
      __name(isJSDoc, "isJSDoc");
      __name2(isJSDoc, "isJSDoc");
      __name(getLines, "getLines");
      __name2(getLines, "getLines");
      tagRegex = /\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy;
      inlineTagRegex = /\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;
      __name(tokenize, "tokenize");
      __name2(tokenize, "tokenize");
      __name(buildInlineTokens, "buildInlineTokens");
      __name2(buildInlineTokens, "buildInlineTokens");
      nonWhitespaceRegex = /\S/;
      whitespaceEndRegex = /\s*$/;
      __name(skipWhitespace, "skipWhitespace");
      __name2(skipWhitespace, "skipWhitespace");
      __name(lastCharacter, "lastCharacter");
      __name2(lastCharacter, "lastCharacter");
      __name(parseJSDocComment, "parseJSDocComment");
      __name2(parseJSDocComment, "parseJSDocComment");
      __name(parseJSDocElement, "parseJSDocElement");
      __name2(parseJSDocElement, "parseJSDocElement");
      __name(appendEmptyLine, "appendEmptyLine");
      __name2(appendEmptyLine, "appendEmptyLine");
      __name(parseJSDocText, "parseJSDocText");
      __name2(parseJSDocText, "parseJSDocText");
      __name(parseJSDocInline, "parseJSDocInline");
      __name2(parseJSDocInline, "parseJSDocInline");
      __name(parseJSDocTag, "parseJSDocTag");
      __name2(parseJSDocTag, "parseJSDocTag");
      __name(parseJSDocLine, "parseJSDocLine");
      __name2(parseJSDocLine, "parseJSDocLine");
      __name(normalizeOptions, "normalizeOptions");
      __name2(normalizeOptions, "normalizeOptions");
      __name(normalizeOption, "normalizeOption");
      __name2(normalizeOption, "normalizeOption");
      JSDocCommentImpl = class {
        static {
          __name(this, "JSDocCommentImpl");
        }
        static {
          __name2(this, "JSDocCommentImpl");
        }
        constructor(elements2, range3) {
          this.elements = elements2;
          this.range = range3;
        }
        getTag(name) {
          return this.getAllTags().find((e3) => e3.name === name);
        }
        getTags(name) {
          return this.getAllTags().filter((e3) => e3.name === name);
        }
        getAllTags() {
          return this.elements.filter((e3) => "name" in e3);
        }
        toString() {
          let value2 = "";
          for (const element3 of this.elements) {
            if (value2.length === 0) {
              value2 = element3.toString();
            } else {
              const text4 = element3.toString();
              value2 += fillNewlines(value2) + text4;
            }
          }
          return value2.trim();
        }
        toMarkdown(options2) {
          let value2 = "";
          for (const element3 of this.elements) {
            if (value2.length === 0) {
              value2 = element3.toMarkdown(options2);
            } else {
              const text4 = element3.toMarkdown(options2);
              value2 += fillNewlines(value2) + text4;
            }
          }
          return value2.trim();
        }
      };
      JSDocTagImpl = class {
        static {
          __name(this, "JSDocTagImpl");
        }
        static {
          __name2(this, "JSDocTagImpl");
        }
        constructor(name, content, inline, range3) {
          this.name = name;
          this.content = content;
          this.inline = inline;
          this.range = range3;
        }
        toString() {
          let text4 = `@${this.name}`;
          const content = this.content.toString();
          if (this.content.inlines.length === 1) {
            text4 = `${text4} ${content}`;
          } else if (this.content.inlines.length > 1) {
            text4 = `${text4}
${content}`;
          }
          if (this.inline) {
            return `{${text4}}`;
          } else {
            return text4;
          }
        }
        toMarkdown(options2) {
          return options2?.renderTag?.(this) ?? this.toMarkdownDefault(options2);
        }
        toMarkdownDefault(options2) {
          const content = this.content.toMarkdown(options2);
          if (this.inline) {
            const rendered = renderInlineTag(this.name, content, options2 ?? {});
            if (typeof rendered === "string") {
              return rendered;
            }
          }
          let marker = "";
          if (options2?.tag === "italic" || options2?.tag === void 0) {
            marker = "*";
          } else if (options2?.tag === "bold") {
            marker = "**";
          } else if (options2?.tag === "bold-italic") {
            marker = "***";
          }
          let text4 = `${marker}@${this.name}${marker}`;
          if (this.content.inlines.length === 1) {
            text4 = `${text4} \u2014 ${content}`;
          } else if (this.content.inlines.length > 1) {
            text4 = `${text4}
${content}`;
          }
          if (this.inline) {
            return `{${text4}}`;
          } else {
            return text4;
          }
        }
      };
      __name(renderInlineTag, "renderInlineTag");
      __name2(renderInlineTag, "renderInlineTag");
      __name(renderLinkDefault, "renderLinkDefault");
      __name2(renderLinkDefault, "renderLinkDefault");
      JSDocTextImpl = class {
        static {
          __name(this, "JSDocTextImpl");
        }
        static {
          __name2(this, "JSDocTextImpl");
        }
        constructor(lines, range3) {
          this.inlines = lines;
          this.range = range3;
        }
        toString() {
          let text4 = "";
          for (let i2 = 0; i2 < this.inlines.length; i2++) {
            const inline = this.inlines[i2];
            const next3 = this.inlines[i2 + 1];
            text4 += inline.toString();
            if (next3 && next3.range.start.line > inline.range.start.line) {
              text4 += "\n";
            }
          }
          return text4;
        }
        toMarkdown(options2) {
          let text4 = "";
          for (let i2 = 0; i2 < this.inlines.length; i2++) {
            const inline = this.inlines[i2];
            const next3 = this.inlines[i2 + 1];
            text4 += inline.toMarkdown(options2);
            if (next3 && next3.range.start.line > inline.range.start.line) {
              text4 += "\n";
            }
          }
          return text4;
        }
      };
      JSDocLineImpl = class {
        static {
          __name(this, "JSDocLineImpl");
        }
        static {
          __name2(this, "JSDocLineImpl");
        }
        constructor(text4, range3) {
          this.text = text4;
          this.range = range3;
        }
        toString() {
          return this.text;
        }
        toMarkdown() {
          return this.text;
        }
      };
      __name(fillNewlines, "fillNewlines");
      __name2(fillNewlines, "fillNewlines");
      JSDocDocumentationProvider = class {
        static {
          __name(this, "JSDocDocumentationProvider");
        }
        static {
          __name2(this, "JSDocDocumentationProvider");
        }
        constructor(services) {
          this.indexManager = services.shared.workspace.IndexManager;
          this.commentProvider = services.documentation.CommentProvider;
        }
        getDocumentation(node2) {
          const comment2 = this.commentProvider.getComment(node2);
          if (comment2 && isJSDoc(comment2)) {
            const parsedJSDoc = parseJSDoc(comment2);
            return parsedJSDoc.toMarkdown({
              renderLink: /* @__PURE__ */ __name2((link2, display) => {
                return this.documentationLinkRenderer(node2, link2, display);
              }, "renderLink"),
              renderTag: /* @__PURE__ */ __name2((tag) => {
                return this.documentationTagRenderer(node2, tag);
              }, "renderTag")
            });
          }
          return void 0;
        }
        documentationLinkRenderer(node2, name, display) {
          const description = this.findNameInLocalSymbols(node2, name) ?? this.findNameInGlobalScope(node2, name);
          if (description && description.nameSegment) {
            const line2 = description.nameSegment.range.start.line + 1;
            const character2 = description.nameSegment.range.start.character + 1;
            const uri = description.documentUri.with({ fragment: `L${line2},${character2}` });
            return `[${display}](${uri.toString()})`;
          } else {
            return void 0;
          }
        }
        documentationTagRenderer(_node, _tag) {
          return void 0;
        }
        findNameInLocalSymbols(node2, name) {
          const document2 = getDocument(node2);
          const precomputed = document2.localSymbols;
          if (!precomputed) {
            return void 0;
          }
          let currentNode = node2;
          do {
            const allDescriptions = precomputed.getStream(currentNode);
            const description = allDescriptions.find((e3) => e3.name === name);
            if (description) {
              return description;
            }
            currentNode = currentNode.$container;
          } while (currentNode);
          return void 0;
        }
        findNameInGlobalScope(node2, name) {
          const description = this.indexManager.allElements().find((e3) => e3.name === name);
          return description;
        }
      };
      DefaultCommentProvider = class {
        static {
          __name(this, "DefaultCommentProvider");
        }
        static {
          __name2(this, "DefaultCommentProvider");
        }
        constructor(services) {
          this.grammarConfig = () => services.parser.GrammarConfig;
        }
        getComment(node2) {
          if (isAstNodeWithComment(node2)) {
            return node2.$comment;
          }
          return findCommentNode(node2.$cstNode, this.grammarConfig().multilineCommentRules)?.text;
        }
      };
      DefaultAsyncParser = class {
        static {
          __name(this, "DefaultAsyncParser");
        }
        static {
          __name2(this, "DefaultAsyncParser");
        }
        constructor(services) {
          this.syncParser = services.parser.LangiumParser;
        }
        parse(text4, _cancelToken) {
          return Promise.resolve(this.syncParser.parse(text4));
        }
      };
      AbstractThreadedAsyncParser = class {
        static {
          __name(this, "AbstractThreadedAsyncParser");
        }
        static {
          __name2(this, "AbstractThreadedAsyncParser");
        }
        constructor(services) {
          this.threadCount = 8;
          this.terminationDelay = 200;
          this.workerPool = [];
          this.queue = [];
          this.hydrator = services.serializer.Hydrator;
        }
        initializeWorkers() {
          while (this.workerPool.length < this.threadCount) {
            const worker = this.createWorker();
            worker.onReady(() => {
              if (this.queue.length > 0) {
                const deferred = this.queue.shift();
                if (deferred) {
                  worker.lock();
                  deferred.resolve(worker);
                }
              }
            });
            this.workerPool.push(worker);
          }
        }
        async parse(text4, cancelToken) {
          const worker = await this.acquireParserWorker(cancelToken);
          const deferred = new Deferred();
          let timeout2;
          const cancellation = cancelToken.onCancellationRequested(() => {
            timeout2 = setTimeout(() => {
              this.terminateWorker(worker);
            }, this.terminationDelay);
          });
          worker.parse(text4).then((result) => {
            const hydrated = this.hydrator.hydrate(result);
            deferred.resolve(hydrated);
          }).catch((err) => {
            deferred.reject(err);
          }).finally(() => {
            cancellation.dispose();
            clearTimeout(timeout2);
          });
          return deferred.promise;
        }
        terminateWorker(worker) {
          worker.terminate();
          const index = this.workerPool.indexOf(worker);
          if (index >= 0) {
            this.workerPool.splice(index, 1);
          }
        }
        async acquireParserWorker(cancelToken) {
          this.initializeWorkers();
          for (const worker of this.workerPool) {
            if (worker.ready) {
              worker.lock();
              return worker;
            }
          }
          const deferred = new Deferred();
          cancelToken.onCancellationRequested(() => {
            const index = this.queue.indexOf(deferred);
            if (index >= 0) {
              this.queue.splice(index, 1);
            }
            deferred.reject(OperationCancelled);
          });
          this.queue.push(deferred);
          return deferred.promise;
        }
      };
      ParserWorker = class {
        static {
          __name(this, "ParserWorker");
        }
        static {
          __name2(this, "ParserWorker");
        }
        get ready() {
          return this._ready;
        }
        get onReady() {
          return this.onReadyEmitter.event;
        }
        constructor(sendMessage, onMessage, onError, terminate) {
          this.onReadyEmitter = new event_exports.Emitter();
          this.deferred = new Deferred();
          this._ready = true;
          this._parsing = false;
          this.sendMessage = sendMessage;
          this._terminate = terminate;
          onMessage((result) => {
            const parseResult = result;
            this.deferred.resolve(parseResult);
            this.unlock();
          });
          onError((error3) => {
            this.deferred.reject(error3);
            this.unlock();
          });
        }
        terminate() {
          this.deferred.reject(OperationCancelled);
          this._terminate();
        }
        lock() {
          this._ready = false;
        }
        unlock() {
          this._parsing = false;
          this._ready = true;
          this.onReadyEmitter.fire();
        }
        parse(text4) {
          if (this._parsing) {
            throw new Error("Parser worker is busy");
          }
          this._parsing = true;
          this.deferred = new Deferred();
          this.sendMessage(text4);
          return this.deferred.promise;
        }
      };
      DefaultWorkspaceLock = class {
        static {
          __name(this, "DefaultWorkspaceLock");
        }
        static {
          __name2(this, "DefaultWorkspaceLock");
        }
        constructor() {
          this.previousTokenSource = new cancellation_exports.CancellationTokenSource();
          this.writeQueue = [];
          this.readQueue = [];
          this.done = true;
        }
        write(action) {
          this.cancelWrite();
          const tokenSource = startCancelableOperation();
          this.previousTokenSource = tokenSource;
          return this.enqueue(this.writeQueue, action, tokenSource.token);
        }
        read(action) {
          return this.enqueue(this.readQueue, action);
        }
        enqueue(queue, action, cancellationToken = cancellation_exports.CancellationToken.None) {
          const deferred = new Deferred();
          const entry = {
            action,
            deferred,
            cancellationToken
          };
          queue.push(entry);
          this.performNextOperation();
          return deferred.promise;
        }
        async performNextOperation() {
          if (!this.done) {
            return;
          }
          const entries2 = [];
          if (this.writeQueue.length > 0) {
            entries2.push(this.writeQueue.shift());
          } else if (this.readQueue.length > 0) {
            entries2.push(...this.readQueue.splice(0, this.readQueue.length));
          } else {
            return;
          }
          this.done = false;
          await Promise.all(entries2.map(async ({ action, deferred, cancellationToken }) => {
            try {
              const result = await Promise.resolve().then(() => action(cancellationToken));
              deferred.resolve(result);
            } catch (err) {
              if (isOperationCancelled(err)) {
                deferred.resolve(void 0);
              } else {
                deferred.reject(err);
              }
            }
          }));
          this.done = true;
          this.performNextOperation();
        }
        cancelWrite() {
          this.previousTokenSource.cancel();
        }
      };
      DefaultHydrator = class {
        static {
          __name(this, "DefaultHydrator");
        }
        static {
          __name2(this, "DefaultHydrator");
        }
        constructor(services) {
          this.grammarElementIdMap = new BiMap();
          this.tokenTypeIdMap = new BiMap();
          this.grammar = services.Grammar;
          this.lexer = services.parser.Lexer;
          this.linker = services.references.Linker;
        }
        dehydrate(result) {
          return {
            lexerErrors: result.lexerErrors,
            lexerReport: result.lexerReport ? this.dehydrateLexerReport(result.lexerReport) : void 0,
            // We need to create shallow copies of the errors
            // The original errors inherit from the `Error` class, which is not transferable across worker threads
            parserErrors: result.parserErrors.map((e3) => ({ ...e3, message: e3.message })),
            value: this.dehydrateAstNode(result.value, this.createDehyrationContext(result.value))
          };
        }
        dehydrateLexerReport(lexerReport) {
          return lexerReport;
        }
        createDehyrationContext(node2) {
          const astNodes = /* @__PURE__ */ new Map();
          const cstNodes = /* @__PURE__ */ new Map();
          for (const astNode of streamAst(node2)) {
            astNodes.set(astNode, {});
          }
          if (node2.$cstNode) {
            for (const cstNode of streamCst(node2.$cstNode)) {
              cstNodes.set(cstNode, {});
            }
          }
          return {
            astNodes,
            cstNodes
          };
        }
        dehydrateAstNode(node2, context) {
          const obj = context.astNodes.get(node2);
          obj.$type = node2.$type;
          obj.$containerIndex = node2.$containerIndex;
          obj.$containerProperty = node2.$containerProperty;
          if (node2.$cstNode !== void 0) {
            obj.$cstNode = this.dehydrateCstNode(node2.$cstNode, context);
          }
          for (const [name, value2] of Object.entries(node2)) {
            if (name.startsWith("$")) {
              continue;
            }
            if (Array.isArray(value2)) {
              const arr = [];
              obj[name] = arr;
              for (const item of value2) {
                if (isAstNode(item)) {
                  arr.push(this.dehydrateAstNode(item, context));
                } else if (isReference(item)) {
                  arr.push(this.dehydrateReference(item, context));
                } else {
                  arr.push(item);
                }
              }
            } else if (isAstNode(value2)) {
              obj[name] = this.dehydrateAstNode(value2, context);
            } else if (isReference(value2)) {
              obj[name] = this.dehydrateReference(value2, context);
            } else if (value2 !== void 0) {
              obj[name] = value2;
            }
          }
          return obj;
        }
        dehydrateReference(reference, context) {
          const obj = {};
          obj.$refText = reference.$refText;
          if (reference.$refNode) {
            obj.$refNode = context.cstNodes.get(reference.$refNode);
          }
          return obj;
        }
        dehydrateCstNode(node2, context) {
          const cstNode = context.cstNodes.get(node2);
          if (isRootCstNode(node2)) {
            cstNode.fullText = node2.fullText;
          } else {
            cstNode.grammarSource = this.getGrammarElementId(node2.grammarSource);
          }
          cstNode.hidden = node2.hidden;
          cstNode.astNode = context.astNodes.get(node2.astNode);
          if (isCompositeCstNode(node2)) {
            cstNode.content = node2.content.map((child) => this.dehydrateCstNode(child, context));
          } else if (isLeafCstNode(node2)) {
            cstNode.tokenType = node2.tokenType.name;
            cstNode.offset = node2.offset;
            cstNode.length = node2.length;
            cstNode.startLine = node2.range.start.line;
            cstNode.startColumn = node2.range.start.character;
            cstNode.endLine = node2.range.end.line;
            cstNode.endColumn = node2.range.end.character;
          }
          return cstNode;
        }
        hydrate(result) {
          const node2 = result.value;
          const context = this.createHydrationContext(node2);
          if ("$cstNode" in node2) {
            this.hydrateCstNode(node2.$cstNode, context);
          }
          return {
            lexerErrors: result.lexerErrors,
            lexerReport: result.lexerReport,
            parserErrors: result.parserErrors,
            value: this.hydrateAstNode(node2, context)
          };
        }
        createHydrationContext(node2) {
          const astNodes = /* @__PURE__ */ new Map();
          const cstNodes = /* @__PURE__ */ new Map();
          for (const astNode of streamAst(node2)) {
            astNodes.set(astNode, {});
          }
          let root32;
          if (node2.$cstNode) {
            for (const cstNode of streamCst(node2.$cstNode)) {
              let cst;
              if ("fullText" in cstNode) {
                cst = new RootCstNodeImpl(cstNode.fullText);
                root32 = cst;
              } else if ("content" in cstNode) {
                cst = new CompositeCstNodeImpl();
              } else if ("tokenType" in cstNode) {
                cst = this.hydrateCstLeafNode(cstNode);
              }
              if (cst) {
                cstNodes.set(cstNode, cst);
                cst.root = root32;
              }
            }
          }
          return {
            astNodes,
            cstNodes
          };
        }
        hydrateAstNode(node2, context) {
          const astNode = context.astNodes.get(node2);
          astNode.$type = node2.$type;
          astNode.$containerIndex = node2.$containerIndex;
          astNode.$containerProperty = node2.$containerProperty;
          if (node2.$cstNode) {
            astNode.$cstNode = context.cstNodes.get(node2.$cstNode);
          }
          for (const [name, value2] of Object.entries(node2)) {
            if (name.startsWith("$")) {
              continue;
            }
            if (Array.isArray(value2)) {
              const arr = [];
              astNode[name] = arr;
              for (const item of value2) {
                if (isAstNode(item)) {
                  arr.push(this.setParent(this.hydrateAstNode(item, context), astNode));
                } else if (isReference(item)) {
                  arr.push(this.hydrateReference(item, astNode, name, context));
                } else {
                  arr.push(item);
                }
              }
            } else if (isAstNode(value2)) {
              astNode[name] = this.setParent(this.hydrateAstNode(value2, context), astNode);
            } else if (isReference(value2)) {
              astNode[name] = this.hydrateReference(value2, astNode, name, context);
            } else if (value2 !== void 0) {
              astNode[name] = value2;
            }
          }
          return astNode;
        }
        setParent(node2, parent4) {
          node2.$container = parent4;
          return node2;
        }
        hydrateReference(reference, node2, name, context) {
          return this.linker.buildReference(node2, name, context.cstNodes.get(reference.$refNode), reference.$refText);
        }
        hydrateCstNode(cstNode, context, num = 0) {
          const cstNodeObj = context.cstNodes.get(cstNode);
          if (typeof cstNode.grammarSource === "number") {
            cstNodeObj.grammarSource = this.getGrammarElement(cstNode.grammarSource);
          }
          cstNodeObj.astNode = context.astNodes.get(cstNode.astNode);
          if (isCompositeCstNode(cstNodeObj)) {
            for (const child of cstNode.content) {
              const hydrated = this.hydrateCstNode(child, context, num++);
              cstNodeObj.content.push(hydrated);
            }
          }
          return cstNodeObj;
        }
        hydrateCstLeafNode(cstNode) {
          const tokenType = this.getTokenType(cstNode.tokenType);
          const offset = cstNode.offset;
          const length2 = cstNode.length;
          const startLine = cstNode.startLine;
          const startColumn = cstNode.startColumn;
          const endLine = cstNode.endLine;
          const endColumn = cstNode.endColumn;
          const hidden = cstNode.hidden;
          const node2 = new LeafCstNodeImpl(offset, length2, {
            start: {
              line: startLine,
              character: startColumn
            },
            end: {
              line: endLine,
              character: endColumn
            }
          }, tokenType, hidden);
          return node2;
        }
        getTokenType(name) {
          return this.lexer.definition[name];
        }
        getGrammarElementId(node2) {
          if (!node2) {
            return void 0;
          }
          if (this.grammarElementIdMap.size === 0) {
            this.createGrammarElementIdMap();
          }
          return this.grammarElementIdMap.get(node2);
        }
        getGrammarElement(id41) {
          if (this.grammarElementIdMap.size === 0) {
            this.createGrammarElementIdMap();
          }
          const element3 = this.grammarElementIdMap.getKey(id41);
          return element3;
        }
        createGrammarElementIdMap() {
          let id41 = 0;
          for (const element3 of streamAst(this.grammar)) {
            if (isAbstractElement(element3)) {
              this.grammarElementIdMap.set(element3, id41++);
            }
          }
        }
      };
      __name(createDefaultCoreModule, "createDefaultCoreModule");
      __name2(createDefaultCoreModule, "createDefaultCoreModule");
      __name(createDefaultSharedCoreModule, "createDefaultSharedCoreModule");
      __name2(createDefaultSharedCoreModule, "createDefaultSharedCoreModule");
      (function(Module2) {
        Module2.merge = (m1, m22) => _merge(_merge({}, m1), m22);
      })(Module || (Module = {}));
      __name(inject, "inject");
      __name2(inject, "inject");
      isProxy = Symbol("isProxy");
      __name(eagerLoad, "eagerLoad");
      __name2(eagerLoad, "eagerLoad");
      __name(_inject, "_inject");
      __name2(_inject, "_inject");
      __requested__ = Symbol();
      __name(_resolve2, "_resolve");
      __name2(_resolve2, "_resolve");
      __name(_merge, "_merge");
      __name2(_merge, "_merge");
      indentationBuilderDefaultOptions = {
        indentTokenName: "INDENT",
        dedentTokenName: "DEDENT",
        whitespaceTokenName: "WS",
        ignoreIndentationDelimiters: []
      };
      (function(LexingMode2) {
        LexingMode2["REGULAR"] = "indentation-sensitive";
        LexingMode2["IGNORE_INDENTATION"] = "ignore-indentation";
      })(LexingMode || (LexingMode = {}));
      IndentationAwareTokenBuilder = class extends DefaultTokenBuilder {
        static {
          __name(this, "IndentationAwareTokenBuilder");
        }
        static {
          __name2(this, "IndentationAwareTokenBuilder");
        }
        constructor(options2 = indentationBuilderDefaultOptions) {
          super();
          this.indentationStack = [0];
          this.whitespaceRegExp = /[ \t]+/y;
          this.options = {
            ...indentationBuilderDefaultOptions,
            ...options2
          };
          this.indentTokenType = createToken({
            name: this.options.indentTokenName,
            pattern: this.indentMatcher.bind(this),
            line_breaks: false
          });
          this.dedentTokenType = createToken({
            name: this.options.dedentTokenName,
            pattern: this.dedentMatcher.bind(this),
            line_breaks: false
          });
        }
        buildTokens(grammar, options2) {
          const tokenTypes = super.buildTokens(grammar, options2);
          if (!isTokenTypeArray(tokenTypes)) {
            throw new Error("Invalid tokens built by default builder");
          }
          const { indentTokenName, dedentTokenName, whitespaceTokenName, ignoreIndentationDelimiters } = this.options;
          let dedent2;
          let indent;
          let ws;
          const otherTokens = [];
          for (const tokenType of tokenTypes) {
            for (const [begin, end2] of ignoreIndentationDelimiters) {
              if (tokenType.name === begin) {
                tokenType.PUSH_MODE = LexingMode.IGNORE_INDENTATION;
              } else if (tokenType.name === end2) {
                tokenType.POP_MODE = true;
              }
            }
            if (tokenType.name === dedentTokenName) {
              dedent2 = tokenType;
            } else if (tokenType.name === indentTokenName) {
              indent = tokenType;
            } else if (tokenType.name === whitespaceTokenName) {
              ws = tokenType;
            } else {
              otherTokens.push(tokenType);
            }
          }
          if (!dedent2 || !indent || !ws) {
            throw new Error("Some indentation/whitespace tokens not found!");
          }
          if (ignoreIndentationDelimiters.length > 0) {
            const multiModeLexerDef = {
              modes: {
                [LexingMode.REGULAR]: [dedent2, indent, ...otherTokens, ws],
                [LexingMode.IGNORE_INDENTATION]: [...otherTokens, ws]
              },
              defaultMode: LexingMode.REGULAR
            };
            return multiModeLexerDef;
          } else {
            return [dedent2, indent, ws, ...otherTokens];
          }
        }
        flushLexingReport(text4) {
          const result = super.flushLexingReport(text4);
          return {
            ...result,
            remainingDedents: this.flushRemainingDedents(text4)
          };
        }
        /**
         * Helper function to check if the current position is the start of a new line.
         *
         * @param text The full input string.
         * @param offset The current position at which to check
         * @returns Whether the current position is the start of a new line
         */
        isStartOfLine(text4, offset) {
          return offset === 0 || "\r\n".includes(text4[offset - 1]);
        }
        /**
         * A helper function used in matching both indents and dedents.
         *
         * @param text The full input string.
         * @param offset The current position at which to attempt a match
         * @param tokens Previously scanned tokens
         * @param groups Token Groups
         * @returns The current and previous indentation levels and the matched whitespace
         */
        // eslint-disable-next-line @typescript-eslint/no-unused-vars
        matchWhitespace(text4, offset, tokens2, groups) {
          this.whitespaceRegExp.lastIndex = offset;
          const match3 = this.whitespaceRegExp.exec(text4);
          return {
            currIndentLevel: match3?.[0].length ?? 0,
            prevIndentLevel: this.indentationStack.at(-1),
            match: match3
          };
        }
        /**
         * Helper function to create an instance of an indentation token.
         *
         * @param tokenType Indent or dedent token type
         * @param text Full input string, used to calculate the line number
         * @param image The original image of the token (tabs or spaces)
         * @param offset Current position in the input string
         * @returns The indentation token instance
         */
        createIndentationTokenInstance(tokenType, text4, image, offset) {
          const lineNumber = this.getLineNumber(text4, offset);
          return createTokenInstance(tokenType, image, offset, offset + image.length, lineNumber, lineNumber, 1, image.length);
        }
        /**
         * Helper function to get the line number at a given offset.
         *
         * @param text Full input string, used to calculate the line number
         * @param offset Current position in the input string
         * @returns The line number at the given offset
         */
        getLineNumber(text4, offset) {
          return text4.substring(0, offset).split(/\r\n|\r|\n/).length;
        }
        /**
         * A custom pattern for matching indents
         *
         * @param text The full input string.
         * @param offset The offset at which to attempt a match
         * @param tokens Previously scanned tokens
         * @param groups Token Groups
         */
        indentMatcher(text4, offset, tokens2, groups) {
          if (!this.isStartOfLine(text4, offset)) {
            return null;
          }
          const { currIndentLevel, prevIndentLevel, match: match3 } = this.matchWhitespace(text4, offset, tokens2, groups);
          if (currIndentLevel <= prevIndentLevel) {
            return null;
          }
          this.indentationStack.push(currIndentLevel);
          return match3;
        }
        /**
         * A custom pattern for matching dedents
         *
         * @param text The full input string.
         * @param offset The offset at which to attempt a match
         * @param tokens Previously scanned tokens
         * @param groups Token Groups
         */
        dedentMatcher(text4, offset, tokens2, groups) {
          if (!this.isStartOfLine(text4, offset)) {
            return null;
          }
          const { currIndentLevel, prevIndentLevel, match: match3 } = this.matchWhitespace(text4, offset, tokens2, groups);
          if (currIndentLevel >= prevIndentLevel) {
            return null;
          }
          const matchIndentIndex = this.indentationStack.lastIndexOf(currIndentLevel);
          if (matchIndentIndex === -1) {
            this.diagnostics.push({
              severity: "error",
              message: `Invalid dedent level ${currIndentLevel} at offset: ${offset}. Current indentation stack: ${this.indentationStack}`,
              offset,
              length: match3?.[0]?.length ?? 0,
              line: this.getLineNumber(text4, offset),
              column: 1
            });
            return null;
          }
          const numberOfDedents = this.indentationStack.length - matchIndentIndex - 1;
          const newlinesBeforeDedent = text4.substring(0, offset).match(/[\r\n]+$/)?.[0].length ?? 1;
          for (let i2 = 0; i2 < numberOfDedents; i2++) {
            const token2 = this.createIndentationTokenInstance(
              this.dedentTokenType,
              text4,
              "",
              // Dedents are 0-width tokens
              offset - (newlinesBeforeDedent - 1)
            );
            tokens2.push(token2);
            this.indentationStack.pop();
          }
          return null;
        }
        buildTerminalToken(terminal) {
          const tokenType = super.buildTerminalToken(terminal);
          const { indentTokenName, dedentTokenName, whitespaceTokenName } = this.options;
          if (tokenType.name === indentTokenName) {
            return this.indentTokenType;
          } else if (tokenType.name === dedentTokenName) {
            return this.dedentTokenType;
          } else if (tokenType.name === whitespaceTokenName) {
            return createToken({
              name: whitespaceTokenName,
              pattern: this.whitespaceRegExp,
              group: Lexer2.SKIPPED
            });
          }
          return tokenType;
        }
        /**
         * Resets the indentation stack between different runs of the lexer
         *
         * @param text Full text that was tokenized
         * @returns Remaining dedent tokens to match all previous indents at the end of the file
         */
        flushRemainingDedents(text4) {
          const remainingDedents = [];
          while (this.indentationStack.length > 1) {
            remainingDedents.push(this.createIndentationTokenInstance(this.dedentTokenType, text4, "", text4.length));
            this.indentationStack.pop();
          }
          this.indentationStack = [0];
          return remainingDedents;
        }
      };
      IndentationAwareLexer = class extends DefaultLexer {
        static {
          __name(this, "IndentationAwareLexer");
        }
        static {
          __name2(this, "IndentationAwareLexer");
        }
        constructor(services) {
          super(services);
          if (services.parser.TokenBuilder instanceof IndentationAwareTokenBuilder) {
            this.indentationTokenBuilder = services.parser.TokenBuilder;
          } else {
            throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder");
          }
        }
        tokenize(text4, options2 = DEFAULT_TOKENIZE_OPTIONS) {
          const result = super.tokenize(text4);
          const report = result.report;
          if (options2?.mode === "full") {
            result.tokens.push(...report.remainingDedents);
          }
          report.remainingDedents = [];
          const { indentTokenType, dedentTokenType } = this.indentationTokenBuilder;
          const indentTokenIdx = indentTokenType.tokenTypeIdx;
          const dedentTokenIdx = dedentTokenType.tokenTypeIdx;
          const cleanTokens = [];
          const length2 = result.tokens.length - 1;
          for (let i2 = 0; i2 < length2; i2++) {
            const token2 = result.tokens[i2];
            const nextToken = result.tokens[i2 + 1];
            if (token2.tokenTypeIdx === indentTokenIdx && nextToken.tokenTypeIdx === dedentTokenIdx) {
              i2++;
              continue;
            }
            cleanTokens.push(token2);
          }
          if (length2 >= 0) {
            cleanTokens.push(result.tokens[length2]);
          }
          result.tokens = cleanTokens;
          return result;
        }
      };
      utils_exports = {};
      __export2(utils_exports, {
        AstUtils: /* @__PURE__ */ __name(() => ast_utils_exports, "AstUtils"),
        BiMap: /* @__PURE__ */ __name(() => BiMap, "BiMap"),
        Cancellation: /* @__PURE__ */ __name(() => cancellation_exports, "Cancellation"),
        ContextCache: /* @__PURE__ */ __name(() => ContextCache, "ContextCache"),
        CstUtils: /* @__PURE__ */ __name(() => cst_utils_exports, "CstUtils"),
        DONE_RESULT: /* @__PURE__ */ __name(() => DONE_RESULT, "DONE_RESULT"),
        Deferred: /* @__PURE__ */ __name(() => Deferred, "Deferred"),
        Disposable: /* @__PURE__ */ __name(() => Disposable, "Disposable"),
        DisposableCache: /* @__PURE__ */ __name(() => DisposableCache, "DisposableCache"),
        DocumentCache: /* @__PURE__ */ __name(() => DocumentCache, "DocumentCache"),
        EMPTY_STREAM: /* @__PURE__ */ __name(() => EMPTY_STREAM, "EMPTY_STREAM"),
        ErrorWithLocation: /* @__PURE__ */ __name(() => ErrorWithLocation, "ErrorWithLocation"),
        GrammarUtils: /* @__PURE__ */ __name(() => grammar_utils_exports, "GrammarUtils"),
        MultiMap: /* @__PURE__ */ __name(() => MultiMap, "MultiMap"),
        OperationCancelled: /* @__PURE__ */ __name(() => OperationCancelled, "OperationCancelled"),
        Reduction: /* @__PURE__ */ __name(() => Reduction, "Reduction"),
        RegExpUtils: /* @__PURE__ */ __name(() => regexp_utils_exports, "RegExpUtils"),
        SimpleCache: /* @__PURE__ */ __name(() => SimpleCache, "SimpleCache"),
        StreamImpl: /* @__PURE__ */ __name(() => StreamImpl, "StreamImpl"),
        TreeStreamImpl: /* @__PURE__ */ __name(() => TreeStreamImpl, "TreeStreamImpl"),
        URI: /* @__PURE__ */ __name(() => URI2, "URI"),
        UriTrie: /* @__PURE__ */ __name(() => UriTrie, "UriTrie"),
        UriUtils: /* @__PURE__ */ __name(() => UriUtils, "UriUtils"),
        WorkspaceCache: /* @__PURE__ */ __name(() => WorkspaceCache, "WorkspaceCache"),
        assertCondition: /* @__PURE__ */ __name(() => assertCondition, "assertCondition"),
        assertUnreachable: /* @__PURE__ */ __name(() => assertUnreachable, "assertUnreachable"),
        delayNextTick: /* @__PURE__ */ __name(() => delayNextTick, "delayNextTick"),
        interruptAndCheck: /* @__PURE__ */ __name(() => interruptAndCheck, "interruptAndCheck"),
        isOperationCancelled: /* @__PURE__ */ __name(() => isOperationCancelled, "isOperationCancelled"),
        loadGrammarFromJson: /* @__PURE__ */ __name(() => loadGrammarFromJson, "loadGrammarFromJson"),
        setInterruptionPeriod: /* @__PURE__ */ __name(() => setInterruptionPeriod, "setInterruptionPeriod"),
        startCancelableOperation: /* @__PURE__ */ __name(() => startCancelableOperation, "startCancelableOperation"),
        stream: /* @__PURE__ */ __name(() => stream, "stream")
      });
      __reExport(utils_exports, event_exports);
      EmptyFileSystemProvider = class {
        static {
          __name(this, "EmptyFileSystemProvider");
        }
        static {
          __name2(this, "EmptyFileSystemProvider");
        }
        stat(_uri) {
          throw new Error("No file system is available.");
        }
        statSync(_uri) {
          throw new Error("No file system is available.");
        }
        async exists() {
          return false;
        }
        existsSync() {
          return false;
        }
        readBinary() {
          throw new Error("No file system is available.");
        }
        readBinarySync() {
          throw new Error("No file system is available.");
        }
        readFile() {
          throw new Error("No file system is available.");
        }
        readFileSync() {
          throw new Error("No file system is available.");
        }
        async readDirectory() {
          return [];
        }
        readDirectorySync() {
          return [];
        }
      };
      EmptyFileSystem = {
        fileSystemProvider: /* @__PURE__ */ __name2(() => new EmptyFileSystemProvider(), "fileSystemProvider")
      };
      minimalGrammarModule = {
        Grammar: /* @__PURE__ */ __name2(() => void 0, "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => ({
          caseInsensitive: false,
          fileExtensions: [".langium"],
          languageId: "langium"
        }), "LanguageMetaData")
      };
      minimalSharedGrammarModule = {
        AstReflection: /* @__PURE__ */ __name2(() => new LangiumGrammarAstReflection(), "AstReflection")
      };
      __name(createMinimalGrammarServices, "createMinimalGrammarServices");
      __name2(createMinimalGrammarServices, "createMinimalGrammarServices");
      __name(loadGrammarFromJson, "loadGrammarFromJson");
      __name2(loadGrammarFromJson, "loadGrammarFromJson");
      __reExport(lib_exports, utils_exports);
      DefaultLangiumProfiler = class {
        static {
          __name(this, "DefaultLangiumProfiler");
        }
        static {
          __name2(this, "DefaultLangiumProfiler");
        }
        constructor(activeCategories) {
          this.activeCategories = /* @__PURE__ */ new Set();
          this.allCategories = /* @__PURE__ */ new Set(["validating", "parsing", "linking"]);
          this.activeCategories = activeCategories ?? new Set(this.allCategories);
          this.records = new MultiMap();
        }
        isActive(category) {
          return this.activeCategories.has(category);
        }
        start(...categories) {
          if (!categories) {
            this.activeCategories = new Set(this.allCategories);
          } else {
            categories.forEach((category) => this.activeCategories.add(category));
          }
        }
        stop(...categories) {
          if (!categories) {
            this.activeCategories.clear();
          } else {
            categories.forEach((category) => this.activeCategories.delete(category));
          }
        }
        createTask(category, taskId) {
          if (!this.isActive(category)) {
            throw new Error(`Category "${category}" is not active.`);
          }
          console.log(`Creating profiling task for '${category}.${taskId}'.`);
          return new ProfilingTask((record) => this.records.add(category, this.dumpRecord(category, record)), taskId);
        }
        dumpRecord(category, record) {
          console.info(`Task ${category}.${record.identifier} executed in ${record.duration.toFixed(2)}ms and ended at ${record.date.toISOString()}`);
          const result = [];
          for (const key of record.entries.keys()) {
            const values22 = record.entries.get(key);
            const duration = values22.reduce((p3, c3) => p3 + c3);
            result.push({ name: `${record.identifier}.${key}`, count: values22.length, duration });
          }
          const taskInternalDuration = record.duration - result.map((r2) => r2.duration).reduce((a2, b3) => a2 + b3, 0);
          result.push({ name: record.identifier, count: 1, duration: taskInternalDuration });
          result.sort((a2, b3) => b3.duration - a2.duration);
          function Round(value2) {
            return Math.round(100 * value2) / 100;
          }
          __name(Round, "Round");
          __name2(Round, "Round");
          console.table(result.map((e3) => {
            return { Element: e3.name, Count: e3.count, "Self %": Round(100 * e3.duration / record.duration), "Time (ms)": Round(e3.duration) };
          }));
          return record;
        }
        getRecords(...categories) {
          if (categories.length === 0) {
            return this.records.values();
          } else {
            return this.records.entries().filter((e3) => categories.some((c3) => c3 === e3[0])).flatMap((e3) => e3[1]);
          }
        }
      };
      ProfilingTask = class {
        static {
          __name(this, "ProfilingTask");
        }
        static {
          __name2(this, "ProfilingTask");
        }
        constructor(addRecord, identifier2) {
          this.stack = [];
          this.entries = new MultiMap();
          this.addRecord = addRecord;
          this.identifier = identifier2;
        }
        start() {
          if (this.startTime !== void 0) {
            throw new Error(`Task "${this.identifier}" is already started.`);
          }
          this.startTime = performance.now();
        }
        stop() {
          if (this.startTime === void 0) {
            throw new Error(`Task "${this.identifier}" was not started.`);
          }
          if (this.stack.length !== 0) {
            throw new Error(`Task "${this.identifier}" cannot be stopped before sub-task(s): ${this.stack.map((s2) => s2.id).join(", ")}.`);
          }
          const record = {
            identifier: this.identifier,
            date: /* @__PURE__ */ new Date(),
            duration: performance.now() - this.startTime,
            entries: this.entries
          };
          this.addRecord(record);
          this.startTime = void 0;
          this.entries.clear();
        }
        startSubTask(subTaskId) {
          this.stack.push({ id: subTaskId, start: performance.now(), content: 0 });
        }
        stopSubTask(subTaskId) {
          const subStack = this.stack.pop();
          if (!subStack) {
            throw new Error(`Task "${this.identifier}.${subTaskId}" was not started.`);
          }
          if (subStack.id !== subTaskId) {
            throw new Error(`Sub-Task "${subStack.id}" is not already stopped.`);
          }
          const duration = performance.now() - subStack.start;
          if (this.stack.at(-1) !== void 0) {
            this.stack[this.stack.length - 1].content += duration;
          }
          const selfDuration = duration - subStack.content;
          this.entries.add(subTaskId, selfDuration);
        }
      };
      ((ArchitectureGrammar2) => {
        ArchitectureGrammar2.Terminals = {
          ARROW_DIRECTION: /L|R|T|B/,
          ARROW_GROUP: /\{group\}/,
          ARROW_INTO: /<|>/,
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          ID: /[\w]([-\w]*\w)?/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
          ARCH_ICON: /\([\w-:]+\)/,
          ARCH_TITLE: /\[(?:"([^"\\]|\\.)*"|'([^'\\]|\\.)*'|[\w ]+)\]/
        };
      })(ArchitectureGrammar || (ArchitectureGrammar = {}));
      ((CynefinGrammar2) => {
        CynefinGrammar2.Terminals = {
          DOMAIN_NAME: /complex|complicated|clear|chaotic|confusion/,
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
        };
      })(CynefinGrammar || (CynefinGrammar = {}));
      ((EventModeling2) => {
        EventModeling2.Terminals = {
          EM_ID: /[_a-zA-Z][\w_]*/,
          EM_FID: /\d{1,3}/,
          EM_DATA_INLINE: /\{(.*)\}|"(.*)"|'(.*)'/,
          EM_DATA_BLOCK: /\{[\t ]*\r?\n(?:[\S\s]*?\r?\n)?\}(?:\r?\n|(?!\S))/,
          EM_ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          EM_ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          EM_TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          EM_WS: /\s+/,
          EM_YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          EM_DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          EM_SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
          EM_ML_COMMENT: /\/\*[\s\S]*?\*\//,
          EM_SL_COMMENT: /\/\/[^\n\r]*/
        };
      })(EventModeling || (EventModeling = {}));
      ((GitGraphGrammar2) => {
        GitGraphGrammar2.Terminals = {
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          INT: /0|[1-9][0-9]*(?!\.)/,
          STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
          REFERENCE: /\w([-\./\w]*[-\w])?/
        };
      })(GitGraphGrammar || (GitGraphGrammar = {}));
      ((InfoGrammar2) => {
        InfoGrammar2.Terminals = {
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
        };
      })(InfoGrammar || (InfoGrammar = {}));
      ((PacketGrammar2) => {
        PacketGrammar2.Terminals = {
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          INT: /0|[1-9][0-9]*(?!\.)/,
          STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
        };
      })(PacketGrammar || (PacketGrammar = {}));
      ((PieGrammar2) => {
        PieGrammar2.Terminals = {
          NUMBER_PIE: /(?:-?[0-9]+\.[0-9]+(?!\.))|(?:-?(0|[1-9][0-9]*)(?!\.))/,
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
        };
      })(PieGrammar || (PieGrammar = {}));
      ((RadarGrammar2) => {
        RadarGrammar2.Terminals = {
          GRATICULE: /circle|polygon/,
          BOOLEAN: /true|false/,
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          NUMBER: /(?:[0-9]+\.[0-9]+(?!\.))|(?:0|[1-9][0-9]*(?!\.))/,
          STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          ID: /[\w]([-\w]*\w)?/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
        };
      })(RadarGrammar || (RadarGrammar = {}));
      ((RailroadAbnfGrammar2) => {
        RailroadAbnfGrammar2.Terminals = {
          TITLE: /title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          ACC_TITLE: /accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          ACC_DESCR: /accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ABNF_RULENAME: /[A-Za-z][A-Za-z0-9-]*/,
          ABNF_STRING: /"[^"]*"/,
          ABNF_NUMVAL: /%[xXdDbB][0-9A-Fa-f]+(?:-[0-9A-Fa-f]+|\.[0-9A-Fa-f]+)*/,
          ABNF_REPEAT: /[0-9]*\*[0-9]*/,
          ABNF_EXACT_REPEAT: /[0-9]+/,
          ABNF_WHITESPACE: /[\t \r\n]+/,
          ABNF_YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          ABNF_DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          ABNF_SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
          ABNF_COMMENT: /;[^\n\r]*/
        };
      })(RailroadAbnfGrammar || (RailroadAbnfGrammar = {}));
      ((RailroadEbnfGrammar2) => {
        RailroadEbnfGrammar2.Terminals = {
          TITLE: /title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          ACC_TITLE: /accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          ACC_DESCR: /accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          EBNF_ID: /[A-Z_a-z][\w-]*/,
          EBNF_STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          EBNF_SPECIAL_SEQUENCE: /\?(?=[^?;]*[^?\s;][^?;]*\?)[^?;]*\?/,
          EBNF_WHITESPACE: /[\t \r\n]+/,
          EBNF_YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          EBNF_DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          EBNF_SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
          EBNF_BLOCK_COMMENT: /\/\*[\s\S]*?\*\//,
          EBNF_ISO_COMMENT: /\(\*[\s\S]*?\*\)/
        };
      })(RailroadEbnfGrammar || (RailroadEbnfGrammar = {}));
      ((RailroadGrammar2) => {
        RailroadGrammar2.Terminals = {
          TITLE: /title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          ACC_TITLE: /accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          ACC_DESCR: /accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          RR_ID: /[A-Z_a-z][\w-]*/,
          RR_STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          RR_WHITESPACE: /[\t \r\n]+/,
          RR_YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          RR_DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          RR_SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
          RR_BLOCK_COMMENT: /\/\*[\s\S]*?\*\//
        };
      })(RailroadGrammar || (RailroadGrammar = {}));
      ((RailroadPegGrammar2) => {
        RailroadPegGrammar2.Terminals = {
          TITLE: /title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          ACC_TITLE: /accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          ACC_DESCR: /accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          PEG_ID: /[A-Z_a-z][\w-]*/,
          PEG_STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          PEG_WHITESPACE: /[\t \r\n]+/,
          PEG_YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          PEG_DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          PEG_SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/,
          PEG_LINE_COMMENT: /#[^\n\r]*/
        };
      })(RailroadPegGrammar || (RailroadPegGrammar = {}));
      ((TreemapGrammar2) => {
        TreemapGrammar2.Terminals = {
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          TREEMAP_KEYWORD: /treemap-beta|treemap/,
          CLASS_DEF: /classDef\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\s+([^;\r\n]*))?(?:;)?/,
          STYLE_SEPARATOR: /:::/,
          SEPARATOR: /:/,
          COMMA: /,/,
          INDENTATION: /[ \t]{1,}/,
          WS: /[ \t]+/,
          ML_COMMENT: /\%\%[^\n]*/,
          NL: /\r?\n/,
          ID2: /[a-zA-Z_][a-zA-Z0-9_]*/,
          NUMBER2: /[0-9_\.\,]+/,
          STRING2: /"[^"]*"|'[^']*'/
        };
      })(TreemapGrammar || (TreemapGrammar = {}));
      ((TreeViewGrammar2) => {
        TreeViewGrammar2.Terminals = {
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          CLASS_ANNOTATION: /[ \t]+:::[ \t]*[A-Za-z_][\w-]*/,
          ICON_ANNOTATION: /[ \t]+icon\([\w-]*(?::[\w-]+)?\)/,
          DESC_ANNOTATION: /[ \t]+##[^\n\r]*/,
          INDENTATION: /[ \t]{1,}/,
          QUOTED_NAME: /"[^"]*"|'[^']*'/,
          WS: /[ \t]+/,
          ML_COMMENT: /\%\%[^\n]*/,
          NL: /\r?\n/,
          BARE_NAME: /(?!:::|icon\(|##)[^ \t\n\r"'](?:(?![ \t]+:::[ \t]*[A-Za-z_]|[ \t]+icon\(|[ \t]+##)[^\n\r])*/
        };
      })(TreeViewGrammar || (TreeViewGrammar = {}));
      ((WardleyGrammar2) => {
        WardleyGrammar2.Terminals = {
          WARDLEY_NUMBER: /[0-9]+\.[0-9]+/,
          ARROW: /->/,
          LINK_PORT: /\+<>|\+>|\+</,
          LINK_ARROW: /-->|-\.->|>|\+'[^']*'<>|\+'[^']*'<|\+'[^']*'>/,
          LINK_LABEL: /;[^\n\r]+/,
          STRATEGY: /build|buy|outsource|market/,
          KW_WARDLEY: /wardley-beta/,
          KW_SIZE: /size/,
          KW_EVOLUTION: /evolution/,
          KW_ANCHOR: /anchor/,
          KW_COMPONENT: /component/,
          KW_LABEL: /label/,
          KW_INERTIA: /inertia/,
          KW_EVOLVE: /evolve/,
          KW_PIPELINE: /pipeline/,
          KW_NOTE: /note/,
          KW_ANNOTATIONS: /annotations/,
          KW_ANNOTATION: /annotation/,
          KW_ACCELERATOR: /accelerator/,
          KW_DEACCELERATOR: /deaccelerator/,
          NAME_WITH_SPACES: /(?!title\s|accTitle|accDescr)[A-Za-z](?:[A-Za-z0-9_()&]|-(?!>))*(?:[ \t]+[A-Za-z(](?:[A-Za-z0-9_()&]|-(?!>))*)*/,
          WS: /[ \t]+/,
          ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,
          ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,
          TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,
          INT: /0|[1-9][0-9]*(?!\.)/,
          STRING: /"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,
          ID: /[\w]([-\w]*\w)?/,
          NEWLINE: /\r?\n/,
          WHITESPACE: /[\t ]+/,
          YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,
          DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,
          SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/
        };
      })(WardleyGrammar || (WardleyGrammar = {}));
      MermaidTerminals = {
        ...ArchitectureGrammar.Terminals,
        ...CynefinGrammar.Terminals,
        ...EventModeling.Terminals,
        ...GitGraphGrammar.Terminals,
        ...InfoGrammar.Terminals,
        ...PacketGrammar.Terminals,
        ...PieGrammar.Terminals,
        ...RadarGrammar.Terminals,
        ...RailroadAbnfGrammar.Terminals,
        ...RailroadEbnfGrammar.Terminals,
        ...RailroadGrammar.Terminals,
        ...RailroadPegGrammar.Terminals,
        ...TreeViewGrammar.Terminals,
        ...TreemapGrammar.Terminals,
        ...WardleyGrammar.Terminals
      };
      AbnfAlternation = {
        $type: "AbnfAlternation",
        alternatives: "alternatives"
      };
      AbnfConcatenation = {
        $type: "AbnfConcatenation",
        elements: "elements"
      };
      AbnfElement = {
        $type: "AbnfElement",
        primary: "primary",
        repeat: "repeat"
      };
      AbnfGroup = {
        $type: "AbnfGroup",
        element: "element"
      };
      AbnfNumVal = {
        $type: "AbnfNumVal",
        value: "value"
      };
      AbnfOptionalGroup = {
        $type: "AbnfOptionalGroup",
        element: "element"
      };
      AbnfPrimary = {
        $type: "AbnfPrimary"
      };
      AbnfRule = {
        $type: "AbnfRule",
        definition: "definition",
        name: "name"
      };
      AbnfRuleName = {
        $type: "AbnfRuleName",
        name: "name"
      };
      AbnfStringLiteral = {
        $type: "AbnfStringLiteral",
        value: "value"
      };
      Accelerator = {
        $type: "Accelerator",
        name: "name",
        x: "x",
        y: "y"
      };
      Alignment = {
        $type: "Alignment",
        direction: "direction",
        members: "members"
      };
      Anchor2 = {
        $type: "Anchor",
        evolution: "evolution",
        name: "name",
        visibility: "visibility"
      };
      Annotation = {
        $type: "Annotation",
        number: "number",
        text: "text",
        x: "x",
        y: "y"
      };
      Annotations = {
        $type: "Annotations",
        x: "x",
        y: "y"
      };
      Architecture = {
        $type: "Architecture",
        accDescr: "accDescr",
        accTitle: "accTitle",
        alignments: "alignments",
        edges: "edges",
        groups: "groups",
        junctions: "junctions",
        services: "services",
        title: "title"
      };
      __name(isArchitecture, "isArchitecture");
      __name2(isArchitecture, "isArchitecture");
      Axis = {
        $type: "Axis",
        label: "label",
        name: "name"
      };
      Branch = {
        $type: "Branch",
        name: "name",
        order: "order"
      };
      __name(isBranch, "isBranch");
      __name2(isBranch, "isBranch");
      Checkout = {
        $type: "Checkout",
        branch: "branch"
      };
      CherryPicking = {
        $type: "CherryPicking",
        id: "id",
        parent: "parent",
        tags: "tags"
      };
      ClassDefStatement = {
        $type: "ClassDefStatement",
        className: "className",
        styleText: "styleText"
      };
      Commit = {
        $type: "Commit",
        id: "id",
        message: "message",
        tags: "tags",
        type: "type"
      };
      __name(isCommit, "isCommit");
      __name2(isCommit, "isCommit");
      Common = {
        $type: "Common",
        accDescr: "accDescr",
        accTitle: "accTitle",
        title: "title"
      };
      Component = {
        $type: "Component",
        decorator: "decorator",
        evolution: "evolution",
        inertia: "inertia",
        label: "label",
        name: "name",
        visibility: "visibility"
      };
      Curve = {
        $type: "Curve",
        entries: "entries",
        label: "label",
        name: "name"
      };
      Cynefin = {
        $type: "Cynefin",
        accDescr: "accDescr",
        accTitle: "accTitle",
        domains: "domains",
        title: "title",
        transitions: "transitions"
      };
      __name(isCynefin, "isCynefin");
      __name2(isCynefin, "isCynefin");
      Deaccelerator = {
        $type: "Deaccelerator",
        name: "name",
        x: "x",
        y: "y"
      };
      Decorator = {
        $type: "Decorator",
        strategy: "strategy"
      };
      Direction = {
        $type: "Direction",
        accDescr: "accDescr",
        accTitle: "accTitle",
        dir: "dir",
        statements: "statements",
        title: "title"
      };
      DomainBlock = {
        $type: "DomainBlock",
        domain: "domain",
        items: "items"
      };
      __name(isDomainBlock, "isDomainBlock");
      __name2(isDomainBlock, "isDomainBlock");
      DomainItem = {
        $type: "DomainItem",
        label: "label"
      };
      __name(isDomainItem, "isDomainItem");
      __name2(isDomainItem, "isDomainItem");
      EbnfChoice = {
        $type: "EbnfChoice",
        alternatives: "alternatives"
      };
      EbnfExceptionPostfix = {
        $type: "EbnfExceptionPostfix",
        except: "except"
      };
      EbnfGroup = {
        $type: "EbnfGroup",
        element: "element"
      };
      EbnfNonTerminal = {
        $type: "EbnfNonTerminal",
        name: "name"
      };
      EbnfOneOrMorePostfix = {
        $type: "EbnfOneOrMorePostfix",
        operator: "operator"
      };
      EbnfOptional = {
        $type: "EbnfOptional",
        element: "element"
      };
      EbnfOptionalPostfix = {
        $type: "EbnfOptionalPostfix",
        operator: "operator"
      };
      EbnfPostfix = {
        $type: "EbnfPostfix"
      };
      EbnfPrimary = {
        $type: "EbnfPrimary"
      };
      EbnfRepetition = {
        $type: "EbnfRepetition",
        element: "element"
      };
      EbnfRule = {
        $type: "EbnfRule",
        definition: "definition",
        name: "name"
      };
      EbnfSequence = {
        $type: "EbnfSequence",
        elements: "elements"
      };
      EbnfSpecial = {
        $type: "EbnfSpecial",
        text: "text"
      };
      EbnfTerm = {
        $type: "EbnfTerm",
        base: "base",
        postfixes: "postfixes"
      };
      EbnfTerminal = {
        $type: "EbnfTerminal",
        value: "value"
      };
      EbnfZeroOrMorePostfix = {
        $type: "EbnfZeroOrMorePostfix",
        operator: "operator"
      };
      Edge = {
        $type: "Edge",
        lhsDir: "lhsDir",
        lhsGroup: "lhsGroup",
        lhsId: "lhsId",
        lhsInto: "lhsInto",
        rhsDir: "rhsDir",
        rhsGroup: "rhsGroup",
        rhsId: "rhsId",
        rhsInto: "rhsInto",
        title: "title"
      };
      EmDataEntity = {
        $type: "EmDataEntity",
        dataBlockValue: "dataBlockValue",
        dataType: "dataType",
        name: "name"
      };
      EmFrame = {
        $type: "EmFrame"
      };
      EmGwt = {
        $type: "EmGwt",
        givenStatements: "givenStatements",
        sourceFrame: "sourceFrame",
        thenStatements: "thenStatements",
        whenStatements: "whenStatements"
      };
      EmGwtStatement = {
        $type: "EmGwtStatement",
        entityIdentifier: "entityIdentifier"
      };
      EmModelEntity = {
        $type: "EmModelEntity",
        name: "name"
      };
      __name(isEmModelEntityType, "isEmModelEntityType");
      __name2(isEmModelEntityType, "isEmModelEntityType");
      EmNoteEntity = {
        $type: "EmNoteEntity",
        dataBlockValue: "dataBlockValue",
        dataType: "dataType",
        sourceFrame: "sourceFrame"
      };
      EmResetFrame = {
        $type: "EmResetFrame",
        dataInlineValue: "dataInlineValue",
        dataReference: "dataReference",
        dataType: "dataType",
        entityIdentifier: "entityIdentifier",
        modelEntityType: "modelEntityType",
        name: "name",
        sourceFrames: "sourceFrames"
      };
      __name(isEmResetFrame, "isEmResetFrame");
      __name2(isEmResetFrame, "isEmResetFrame");
      EmTimeFrame = {
        $type: "EmTimeFrame",
        dataInlineValue: "dataInlineValue",
        dataReference: "dataReference",
        dataType: "dataType",
        entityIdentifier: "entityIdentifier",
        modelEntityType: "modelEntityType",
        name: "name",
        sourceFrames: "sourceFrames"
      };
      Entry = {
        $type: "Entry",
        axis: "axis",
        value: "value"
      };
      EventModel = {
        $type: "EventModel",
        accDescr: "accDescr",
        accTitle: "accTitle",
        dataEntities: "dataEntities",
        frames: "frames",
        gwtEntities: "gwtEntities",
        modelEntities: "modelEntities",
        noteEntities: "noteEntities",
        title: "title"
      };
      Evolution = {
        $type: "Evolution",
        stages: "stages"
      };
      EvolutionStage = {
        $type: "EvolutionStage",
        boundary: "boundary",
        name: "name",
        secondName: "secondName"
      };
      Evolve = {
        $type: "Evolve",
        component: "component",
        target: "target"
      };
      GitGraph = {
        $type: "GitGraph",
        accDescr: "accDescr",
        accTitle: "accTitle",
        statements: "statements",
        title: "title"
      };
      __name(isGitGraph, "isGitGraph");
      __name2(isGitGraph, "isGitGraph");
      Group2 = {
        $type: "Group",
        icon: "icon",
        id: "id",
        in: "in",
        title: "title"
      };
      Info = {
        $type: "Info",
        accDescr: "accDescr",
        accTitle: "accTitle",
        title: "title"
      };
      __name(isInfo, "isInfo");
      __name2(isInfo, "isInfo");
      Item = {
        $type: "Item",
        classSelector: "classSelector",
        name: "name"
      };
      Junction = {
        $type: "Junction",
        id: "id",
        in: "in"
      };
      Label = {
        $type: "Label",
        negX: "negX",
        negY: "negY",
        offsetX: "offsetX",
        offsetY: "offsetY"
      };
      Leaf = {
        $type: "Leaf",
        classSelector: "classSelector",
        name: "name",
        value: "value"
      };
      Link = {
        $type: "Link",
        arrow: "arrow",
        from: "from",
        fromPort: "fromPort",
        linkLabel: "linkLabel",
        to: "to",
        toPort: "toPort"
      };
      Merge = {
        $type: "Merge",
        branch: "branch",
        id: "id",
        tags: "tags",
        type: "type"
      };
      __name(isMerge, "isMerge");
      __name2(isMerge, "isMerge");
      Note = {
        $type: "Note",
        evolution: "evolution",
        text: "text",
        visibility: "visibility"
      };
      Option22 = {
        $type: "Option",
        name: "name",
        value: "value"
      };
      Packet = {
        $type: "Packet",
        accDescr: "accDescr",
        accTitle: "accTitle",
        blocks: "blocks",
        title: "title"
      };
      __name(isPacket, "isPacket");
      __name2(isPacket, "isPacket");
      PacketBlock = {
        $type: "PacketBlock",
        bits: "bits",
        end: "end",
        label: "label",
        start: "start"
      };
      __name(isPacketBlock, "isPacketBlock");
      __name2(isPacketBlock, "isPacketBlock");
      PegAny = {
        $type: "PegAny",
        dot: "dot"
      };
      PegGroup = {
        $type: "PegGroup",
        element: "element"
      };
      PegIdentifier = {
        $type: "PegIdentifier",
        name: "name"
      };
      PegLiteral = {
        $type: "PegLiteral",
        value: "value"
      };
      PegOrderedChoice = {
        $type: "PegOrderedChoice",
        alternatives: "alternatives"
      };
      PegPrefix = {
        $type: "PegPrefix",
        operator: "operator",
        suffix: "suffix"
      };
      PegPrimary = {
        $type: "PegPrimary"
      };
      PegRule = {
        $type: "PegRule",
        definition: "definition",
        name: "name"
      };
      PegSequence = {
        $type: "PegSequence",
        elements: "elements"
      };
      PegSuffix = {
        $type: "PegSuffix",
        operator: "operator",
        primary: "primary"
      };
      Pie = {
        $type: "Pie",
        accDescr: "accDescr",
        accTitle: "accTitle",
        sections: "sections",
        showData: "showData",
        title: "title"
      };
      __name(isPie, "isPie");
      __name2(isPie, "isPie");
      PieSection = {
        $type: "PieSection",
        label: "label",
        value: "value"
      };
      __name(isPieSection, "isPieSection");
      __name2(isPieSection, "isPieSection");
      Pipeline = {
        $type: "Pipeline",
        components: "components",
        parent: "parent"
      };
      PipelineComponent = {
        $type: "PipelineComponent",
        evolution: "evolution",
        label: "label",
        name: "name"
      };
      Radar = {
        $type: "Radar",
        accDescr: "accDescr",
        accTitle: "accTitle",
        axes: "axes",
        curves: "curves",
        options: "options",
        title: "title"
      };
      Railroad = {
        $type: "Railroad",
        accDescr: "accDescr",
        accTitle: "accTitle",
        rules: "rules",
        title: "title"
      };
      __name(isRailroad, "isRailroad");
      __name2(isRailroad, "isRailroad");
      RailroadAbnf = {
        $type: "RailroadAbnf",
        accDescr: "accDescr",
        accTitle: "accTitle",
        rules: "rules",
        title: "title"
      };
      __name(isRailroadAbnf, "isRailroadAbnf");
      __name2(isRailroadAbnf, "isRailroadAbnf");
      RailroadChoiceExpr = {
        $type: "RailroadChoiceExpr",
        alternatives: "alternatives"
      };
      RailroadEbnf = {
        $type: "RailroadEbnf",
        accDescr: "accDescr",
        accTitle: "accTitle",
        rules: "rules",
        title: "title"
      };
      __name(isRailroadEbnf, "isRailroadEbnf");
      __name2(isRailroadEbnf, "isRailroadEbnf");
      RailroadExpression = {
        $type: "RailroadExpression"
      };
      RailroadNonTerminalExpr = {
        $type: "RailroadNonTerminalExpr",
        name: "name"
      };
      RailroadOneOrMoreExpr = {
        $type: "RailroadOneOrMoreExpr",
        element: "element"
      };
      RailroadOptionalExpr = {
        $type: "RailroadOptionalExpr",
        element: "element"
      };
      RailroadPeg = {
        $type: "RailroadPeg",
        accDescr: "accDescr",
        accTitle: "accTitle",
        rules: "rules",
        title: "title"
      };
      __name(isRailroadPeg, "isRailroadPeg");
      __name2(isRailroadPeg, "isRailroadPeg");
      RailroadRule = {
        $type: "RailroadRule",
        definition: "definition",
        name: "name"
      };
      RailroadSequenceExpr = {
        $type: "RailroadSequenceExpr",
        elements: "elements"
      };
      RailroadSpecialExpr = {
        $type: "RailroadSpecialExpr",
        text: "text"
      };
      RailroadTerminalExpr = {
        $type: "RailroadTerminalExpr",
        value: "value"
      };
      RailroadZeroOrMoreExpr = {
        $type: "RailroadZeroOrMoreExpr",
        element: "element"
      };
      Section = {
        $type: "Section",
        classSelector: "classSelector",
        name: "name"
      };
      Service = {
        $type: "Service",
        icon: "icon",
        iconText: "iconText",
        id: "id",
        in: "in",
        title: "title"
      };
      Size = {
        $type: "Size",
        height: "height",
        width: "width"
      };
      Statement = {
        $type: "Statement"
      };
      Transition2 = {
        $type: "Transition",
        from: "from",
        label: "label",
        to: "to"
      };
      __name(isTransition, "isTransition");
      __name2(isTransition, "isTransition");
      Treemap = {
        $type: "Treemap",
        accDescr: "accDescr",
        accTitle: "accTitle",
        title: "title",
        TreemapRows: "TreemapRows"
      };
      __name(isTreemap, "isTreemap");
      __name2(isTreemap, "isTreemap");
      TreemapRow = {
        $type: "TreemapRow",
        indent: "indent",
        item: "item"
      };
      TreeNode = {
        $type: "TreeNode",
        classAnnotation: "classAnnotation",
        descAnnotation: "descAnnotation",
        iconAnnotation: "iconAnnotation",
        indent: "indent",
        name: "name"
      };
      TreeView = {
        $type: "TreeView",
        accDescr: "accDescr",
        accTitle: "accTitle",
        nodes: "nodes",
        title: "title"
      };
      Wardley = {
        $type: "Wardley",
        accDescr: "accDescr",
        accelerators: "accelerators",
        accTitle: "accTitle",
        anchors: "anchors",
        annotation: "annotation",
        annotations: "annotations",
        components: "components",
        deaccelerators: "deaccelerators",
        evolution: "evolution",
        evolves: "evolves",
        links: "links",
        notes: "notes",
        pipelines: "pipelines",
        size: "size",
        title: "title"
      };
      __name(isWardley, "isWardley");
      __name2(isWardley, "isWardley");
      MermaidAstReflection = class extends AbstractAstReflection {
        static {
          __name(this, "MermaidAstReflection");
        }
        constructor() {
          super(...arguments);
          this.types = {
            AbnfAlternation: {
              name: AbnfAlternation.$type,
              properties: {
                alternatives: {
                  name: AbnfAlternation.alternatives,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            AbnfConcatenation: {
              name: AbnfConcatenation.$type,
              properties: {
                elements: {
                  name: AbnfConcatenation.elements,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            AbnfElement: {
              name: AbnfElement.$type,
              properties: {
                primary: {
                  name: AbnfElement.primary
                },
                repeat: {
                  name: AbnfElement.repeat
                }
              },
              superTypes: []
            },
            AbnfGroup: {
              name: AbnfGroup.$type,
              properties: {
                element: {
                  name: AbnfGroup.element
                }
              },
              superTypes: [AbnfPrimary.$type]
            },
            AbnfNumVal: {
              name: AbnfNumVal.$type,
              properties: {
                value: {
                  name: AbnfNumVal.value
                }
              },
              superTypes: [AbnfPrimary.$type]
            },
            AbnfOptionalGroup: {
              name: AbnfOptionalGroup.$type,
              properties: {
                element: {
                  name: AbnfOptionalGroup.element
                }
              },
              superTypes: [AbnfPrimary.$type]
            },
            AbnfPrimary: {
              name: AbnfPrimary.$type,
              properties: {},
              superTypes: []
            },
            AbnfRule: {
              name: AbnfRule.$type,
              properties: {
                definition: {
                  name: AbnfRule.definition
                },
                name: {
                  name: AbnfRule.name
                }
              },
              superTypes: []
            },
            AbnfRuleName: {
              name: AbnfRuleName.$type,
              properties: {
                name: {
                  name: AbnfRuleName.name
                }
              },
              superTypes: [AbnfPrimary.$type]
            },
            AbnfStringLiteral: {
              name: AbnfStringLiteral.$type,
              properties: {
                value: {
                  name: AbnfStringLiteral.value
                }
              },
              superTypes: [AbnfPrimary.$type]
            },
            Accelerator: {
              name: Accelerator.$type,
              properties: {
                name: {
                  name: Accelerator.name
                },
                x: {
                  name: Accelerator.x
                },
                y: {
                  name: Accelerator.y
                }
              },
              superTypes: []
            },
            Alignment: {
              name: Alignment.$type,
              properties: {
                direction: {
                  name: Alignment.direction
                },
                members: {
                  name: Alignment.members,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            Anchor: {
              name: Anchor2.$type,
              properties: {
                evolution: {
                  name: Anchor2.evolution
                },
                name: {
                  name: Anchor2.name
                },
                visibility: {
                  name: Anchor2.visibility
                }
              },
              superTypes: []
            },
            Annotation: {
              name: Annotation.$type,
              properties: {
                number: {
                  name: Annotation.number
                },
                text: {
                  name: Annotation.text
                },
                x: {
                  name: Annotation.x
                },
                y: {
                  name: Annotation.y
                }
              },
              superTypes: []
            },
            Annotations: {
              name: Annotations.$type,
              properties: {
                x: {
                  name: Annotations.x
                },
                y: {
                  name: Annotations.y
                }
              },
              superTypes: []
            },
            Architecture: {
              name: Architecture.$type,
              properties: {
                accDescr: {
                  name: Architecture.accDescr
                },
                accTitle: {
                  name: Architecture.accTitle
                },
                alignments: {
                  name: Architecture.alignments,
                  defaultValue: []
                },
                edges: {
                  name: Architecture.edges,
                  defaultValue: []
                },
                groups: {
                  name: Architecture.groups,
                  defaultValue: []
                },
                junctions: {
                  name: Architecture.junctions,
                  defaultValue: []
                },
                services: {
                  name: Architecture.services,
                  defaultValue: []
                },
                title: {
                  name: Architecture.title
                }
              },
              superTypes: []
            },
            Axis: {
              name: Axis.$type,
              properties: {
                label: {
                  name: Axis.label
                },
                name: {
                  name: Axis.name
                }
              },
              superTypes: []
            },
            Branch: {
              name: Branch.$type,
              properties: {
                name: {
                  name: Branch.name
                },
                order: {
                  name: Branch.order
                }
              },
              superTypes: [Statement.$type]
            },
            Checkout: {
              name: Checkout.$type,
              properties: {
                branch: {
                  name: Checkout.branch
                }
              },
              superTypes: [Statement.$type]
            },
            CherryPicking: {
              name: CherryPicking.$type,
              properties: {
                id: {
                  name: CherryPicking.id
                },
                parent: {
                  name: CherryPicking.parent
                },
                tags: {
                  name: CherryPicking.tags,
                  defaultValue: []
                }
              },
              superTypes: [Statement.$type]
            },
            ClassDefStatement: {
              name: ClassDefStatement.$type,
              properties: {
                className: {
                  name: ClassDefStatement.className
                },
                styleText: {
                  name: ClassDefStatement.styleText
                }
              },
              superTypes: []
            },
            Commit: {
              name: Commit.$type,
              properties: {
                id: {
                  name: Commit.id
                },
                message: {
                  name: Commit.message
                },
                tags: {
                  name: Commit.tags,
                  defaultValue: []
                },
                type: {
                  name: Commit.type
                }
              },
              superTypes: [Statement.$type]
            },
            Common: {
              name: Common.$type,
              properties: {
                accDescr: {
                  name: Common.accDescr
                },
                accTitle: {
                  name: Common.accTitle
                },
                title: {
                  name: Common.title
                }
              },
              superTypes: []
            },
            Component: {
              name: Component.$type,
              properties: {
                decorator: {
                  name: Component.decorator
                },
                evolution: {
                  name: Component.evolution
                },
                inertia: {
                  name: Component.inertia,
                  defaultValue: false
                },
                label: {
                  name: Component.label
                },
                name: {
                  name: Component.name
                },
                visibility: {
                  name: Component.visibility
                }
              },
              superTypes: []
            },
            Curve: {
              name: Curve.$type,
              properties: {
                entries: {
                  name: Curve.entries,
                  defaultValue: []
                },
                label: {
                  name: Curve.label
                },
                name: {
                  name: Curve.name
                }
              },
              superTypes: []
            },
            Cynefin: {
              name: Cynefin.$type,
              properties: {
                accDescr: {
                  name: Cynefin.accDescr
                },
                accTitle: {
                  name: Cynefin.accTitle
                },
                domains: {
                  name: Cynefin.domains,
                  defaultValue: []
                },
                title: {
                  name: Cynefin.title
                },
                transitions: {
                  name: Cynefin.transitions,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            Deaccelerator: {
              name: Deaccelerator.$type,
              properties: {
                name: {
                  name: Deaccelerator.name
                },
                x: {
                  name: Deaccelerator.x
                },
                y: {
                  name: Deaccelerator.y
                }
              },
              superTypes: []
            },
            Decorator: {
              name: Decorator.$type,
              properties: {
                strategy: {
                  name: Decorator.strategy
                }
              },
              superTypes: []
            },
            Direction: {
              name: Direction.$type,
              properties: {
                accDescr: {
                  name: Direction.accDescr
                },
                accTitle: {
                  name: Direction.accTitle
                },
                dir: {
                  name: Direction.dir
                },
                statements: {
                  name: Direction.statements,
                  defaultValue: []
                },
                title: {
                  name: Direction.title
                }
              },
              superTypes: [GitGraph.$type]
            },
            DomainBlock: {
              name: DomainBlock.$type,
              properties: {
                domain: {
                  name: DomainBlock.domain
                },
                items: {
                  name: DomainBlock.items,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            DomainItem: {
              name: DomainItem.$type,
              properties: {
                label: {
                  name: DomainItem.label
                }
              },
              superTypes: []
            },
            EbnfChoice: {
              name: EbnfChoice.$type,
              properties: {
                alternatives: {
                  name: EbnfChoice.alternatives,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            EbnfExceptionPostfix: {
              name: EbnfExceptionPostfix.$type,
              properties: {
                except: {
                  name: EbnfExceptionPostfix.except
                }
              },
              superTypes: [EbnfPostfix.$type]
            },
            EbnfGroup: {
              name: EbnfGroup.$type,
              properties: {
                element: {
                  name: EbnfGroup.element
                }
              },
              superTypes: [EbnfPrimary.$type]
            },
            EbnfNonTerminal: {
              name: EbnfNonTerminal.$type,
              properties: {
                name: {
                  name: EbnfNonTerminal.name
                }
              },
              superTypes: [EbnfPrimary.$type]
            },
            EbnfOneOrMorePostfix: {
              name: EbnfOneOrMorePostfix.$type,
              properties: {
                operator: {
                  name: EbnfOneOrMorePostfix.operator
                }
              },
              superTypes: [EbnfPostfix.$type]
            },
            EbnfOptional: {
              name: EbnfOptional.$type,
              properties: {
                element: {
                  name: EbnfOptional.element
                }
              },
              superTypes: [EbnfPrimary.$type]
            },
            EbnfOptionalPostfix: {
              name: EbnfOptionalPostfix.$type,
              properties: {
                operator: {
                  name: EbnfOptionalPostfix.operator
                }
              },
              superTypes: [EbnfPostfix.$type]
            },
            EbnfPostfix: {
              name: EbnfPostfix.$type,
              properties: {},
              superTypes: []
            },
            EbnfPrimary: {
              name: EbnfPrimary.$type,
              properties: {},
              superTypes: []
            },
            EbnfRepetition: {
              name: EbnfRepetition.$type,
              properties: {
                element: {
                  name: EbnfRepetition.element
                }
              },
              superTypes: [EbnfPrimary.$type]
            },
            EbnfRule: {
              name: EbnfRule.$type,
              properties: {
                definition: {
                  name: EbnfRule.definition
                },
                name: {
                  name: EbnfRule.name
                }
              },
              superTypes: []
            },
            EbnfSequence: {
              name: EbnfSequence.$type,
              properties: {
                elements: {
                  name: EbnfSequence.elements,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            EbnfSpecial: {
              name: EbnfSpecial.$type,
              properties: {
                text: {
                  name: EbnfSpecial.text
                }
              },
              superTypes: [EbnfPrimary.$type]
            },
            EbnfTerm: {
              name: EbnfTerm.$type,
              properties: {
                base: {
                  name: EbnfTerm.base
                },
                postfixes: {
                  name: EbnfTerm.postfixes,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            EbnfTerminal: {
              name: EbnfTerminal.$type,
              properties: {
                value: {
                  name: EbnfTerminal.value
                }
              },
              superTypes: [EbnfPrimary.$type]
            },
            EbnfZeroOrMorePostfix: {
              name: EbnfZeroOrMorePostfix.$type,
              properties: {
                operator: {
                  name: EbnfZeroOrMorePostfix.operator
                }
              },
              superTypes: [EbnfPostfix.$type]
            },
            Edge: {
              name: Edge.$type,
              properties: {
                lhsDir: {
                  name: Edge.lhsDir
                },
                lhsGroup: {
                  name: Edge.lhsGroup,
                  defaultValue: false
                },
                lhsId: {
                  name: Edge.lhsId
                },
                lhsInto: {
                  name: Edge.lhsInto,
                  defaultValue: false
                },
                rhsDir: {
                  name: Edge.rhsDir
                },
                rhsGroup: {
                  name: Edge.rhsGroup,
                  defaultValue: false
                },
                rhsId: {
                  name: Edge.rhsId
                },
                rhsInto: {
                  name: Edge.rhsInto,
                  defaultValue: false
                },
                title: {
                  name: Edge.title
                }
              },
              superTypes: []
            },
            EmDataEntity: {
              name: EmDataEntity.$type,
              properties: {
                dataBlockValue: {
                  name: EmDataEntity.dataBlockValue
                },
                dataType: {
                  name: EmDataEntity.dataType
                },
                name: {
                  name: EmDataEntity.name
                }
              },
              superTypes: []
            },
            EmFrame: {
              name: EmFrame.$type,
              properties: {},
              superTypes: []
            },
            EmGwt: {
              name: EmGwt.$type,
              properties: {
                givenStatements: {
                  name: EmGwt.givenStatements,
                  defaultValue: []
                },
                sourceFrame: {
                  name: EmGwt.sourceFrame,
                  referenceType: EmFrame.$type
                },
                thenStatements: {
                  name: EmGwt.thenStatements,
                  defaultValue: []
                },
                whenStatements: {
                  name: EmGwt.whenStatements,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            EmGwtStatement: {
              name: EmGwtStatement.$type,
              properties: {
                entityIdentifier: {
                  name: EmGwtStatement.entityIdentifier,
                  referenceType: EmModelEntity.$type
                }
              },
              superTypes: []
            },
            EmModelEntity: {
              name: EmModelEntity.$type,
              properties: {
                name: {
                  name: EmModelEntity.name
                }
              },
              superTypes: []
            },
            EmNoteEntity: {
              name: EmNoteEntity.$type,
              properties: {
                dataBlockValue: {
                  name: EmNoteEntity.dataBlockValue
                },
                dataType: {
                  name: EmNoteEntity.dataType
                },
                sourceFrame: {
                  name: EmNoteEntity.sourceFrame,
                  referenceType: EmFrame.$type
                }
              },
              superTypes: []
            },
            EmResetFrame: {
              name: EmResetFrame.$type,
              properties: {
                dataInlineValue: {
                  name: EmResetFrame.dataInlineValue
                },
                dataReference: {
                  name: EmResetFrame.dataReference,
                  referenceType: EmDataEntity.$type
                },
                dataType: {
                  name: EmResetFrame.dataType
                },
                entityIdentifier: {
                  name: EmResetFrame.entityIdentifier
                },
                modelEntityType: {
                  name: EmResetFrame.modelEntityType
                },
                name: {
                  name: EmResetFrame.name
                },
                sourceFrames: {
                  name: EmResetFrame.sourceFrames,
                  defaultValue: [],
                  referenceType: EmFrame.$type
                }
              },
              superTypes: [EmFrame.$type]
            },
            EmTimeFrame: {
              name: EmTimeFrame.$type,
              properties: {
                dataInlineValue: {
                  name: EmTimeFrame.dataInlineValue
                },
                dataReference: {
                  name: EmTimeFrame.dataReference,
                  referenceType: EmDataEntity.$type
                },
                dataType: {
                  name: EmTimeFrame.dataType
                },
                entityIdentifier: {
                  name: EmTimeFrame.entityIdentifier
                },
                modelEntityType: {
                  name: EmTimeFrame.modelEntityType
                },
                name: {
                  name: EmTimeFrame.name
                },
                sourceFrames: {
                  name: EmTimeFrame.sourceFrames,
                  defaultValue: [],
                  referenceType: EmFrame.$type
                }
              },
              superTypes: [EmFrame.$type]
            },
            Entry: {
              name: Entry.$type,
              properties: {
                axis: {
                  name: Entry.axis,
                  referenceType: Axis.$type
                },
                value: {
                  name: Entry.value
                }
              },
              superTypes: []
            },
            EventModel: {
              name: EventModel.$type,
              properties: {
                accDescr: {
                  name: EventModel.accDescr
                },
                accTitle: {
                  name: EventModel.accTitle
                },
                dataEntities: {
                  name: EventModel.dataEntities,
                  defaultValue: []
                },
                frames: {
                  name: EventModel.frames,
                  defaultValue: []
                },
                gwtEntities: {
                  name: EventModel.gwtEntities,
                  defaultValue: []
                },
                modelEntities: {
                  name: EventModel.modelEntities,
                  defaultValue: []
                },
                noteEntities: {
                  name: EventModel.noteEntities,
                  defaultValue: []
                },
                title: {
                  name: EventModel.title
                }
              },
              superTypes: []
            },
            Evolution: {
              name: Evolution.$type,
              properties: {
                stages: {
                  name: Evolution.stages,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            EvolutionStage: {
              name: EvolutionStage.$type,
              properties: {
                boundary: {
                  name: EvolutionStage.boundary
                },
                name: {
                  name: EvolutionStage.name
                },
                secondName: {
                  name: EvolutionStage.secondName
                }
              },
              superTypes: []
            },
            Evolve: {
              name: Evolve.$type,
              properties: {
                component: {
                  name: Evolve.component
                },
                target: {
                  name: Evolve.target
                }
              },
              superTypes: []
            },
            GitGraph: {
              name: GitGraph.$type,
              properties: {
                accDescr: {
                  name: GitGraph.accDescr
                },
                accTitle: {
                  name: GitGraph.accTitle
                },
                statements: {
                  name: GitGraph.statements,
                  defaultValue: []
                },
                title: {
                  name: GitGraph.title
                }
              },
              superTypes: []
            },
            Group: {
              name: Group2.$type,
              properties: {
                icon: {
                  name: Group2.icon
                },
                id: {
                  name: Group2.id
                },
                in: {
                  name: Group2.in
                },
                title: {
                  name: Group2.title
                }
              },
              superTypes: []
            },
            Info: {
              name: Info.$type,
              properties: {
                accDescr: {
                  name: Info.accDescr
                },
                accTitle: {
                  name: Info.accTitle
                },
                title: {
                  name: Info.title
                }
              },
              superTypes: []
            },
            Item: {
              name: Item.$type,
              properties: {
                classSelector: {
                  name: Item.classSelector
                },
                name: {
                  name: Item.name
                }
              },
              superTypes: []
            },
            Junction: {
              name: Junction.$type,
              properties: {
                id: {
                  name: Junction.id
                },
                in: {
                  name: Junction.in
                }
              },
              superTypes: []
            },
            Label: {
              name: Label.$type,
              properties: {
                negX: {
                  name: Label.negX,
                  defaultValue: false
                },
                negY: {
                  name: Label.negY,
                  defaultValue: false
                },
                offsetX: {
                  name: Label.offsetX
                },
                offsetY: {
                  name: Label.offsetY
                }
              },
              superTypes: []
            },
            Leaf: {
              name: Leaf.$type,
              properties: {
                classSelector: {
                  name: Leaf.classSelector
                },
                name: {
                  name: Leaf.name
                },
                value: {
                  name: Leaf.value
                }
              },
              superTypes: [Item.$type]
            },
            Link: {
              name: Link.$type,
              properties: {
                arrow: {
                  name: Link.arrow
                },
                from: {
                  name: Link.from
                },
                fromPort: {
                  name: Link.fromPort
                },
                linkLabel: {
                  name: Link.linkLabel
                },
                to: {
                  name: Link.to
                },
                toPort: {
                  name: Link.toPort
                }
              },
              superTypes: []
            },
            Merge: {
              name: Merge.$type,
              properties: {
                branch: {
                  name: Merge.branch
                },
                id: {
                  name: Merge.id
                },
                tags: {
                  name: Merge.tags,
                  defaultValue: []
                },
                type: {
                  name: Merge.type
                }
              },
              superTypes: [Statement.$type]
            },
            Note: {
              name: Note.$type,
              properties: {
                evolution: {
                  name: Note.evolution
                },
                text: {
                  name: Note.text
                },
                visibility: {
                  name: Note.visibility
                }
              },
              superTypes: []
            },
            Option: {
              name: Option22.$type,
              properties: {
                name: {
                  name: Option22.name
                },
                value: {
                  name: Option22.value,
                  defaultValue: false
                }
              },
              superTypes: []
            },
            Packet: {
              name: Packet.$type,
              properties: {
                accDescr: {
                  name: Packet.accDescr
                },
                accTitle: {
                  name: Packet.accTitle
                },
                blocks: {
                  name: Packet.blocks,
                  defaultValue: []
                },
                title: {
                  name: Packet.title
                }
              },
              superTypes: []
            },
            PacketBlock: {
              name: PacketBlock.$type,
              properties: {
                bits: {
                  name: PacketBlock.bits
                },
                end: {
                  name: PacketBlock.end
                },
                label: {
                  name: PacketBlock.label
                },
                start: {
                  name: PacketBlock.start
                }
              },
              superTypes: []
            },
            PegAny: {
              name: PegAny.$type,
              properties: {
                dot: {
                  name: PegAny.dot
                }
              },
              superTypes: [PegPrimary.$type]
            },
            PegGroup: {
              name: PegGroup.$type,
              properties: {
                element: {
                  name: PegGroup.element
                }
              },
              superTypes: [PegPrimary.$type]
            },
            PegIdentifier: {
              name: PegIdentifier.$type,
              properties: {
                name: {
                  name: PegIdentifier.name
                }
              },
              superTypes: [PegPrimary.$type]
            },
            PegLiteral: {
              name: PegLiteral.$type,
              properties: {
                value: {
                  name: PegLiteral.value
                }
              },
              superTypes: [PegPrimary.$type]
            },
            PegOrderedChoice: {
              name: PegOrderedChoice.$type,
              properties: {
                alternatives: {
                  name: PegOrderedChoice.alternatives,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            PegPrefix: {
              name: PegPrefix.$type,
              properties: {
                operator: {
                  name: PegPrefix.operator
                },
                suffix: {
                  name: PegPrefix.suffix
                }
              },
              superTypes: []
            },
            PegPrimary: {
              name: PegPrimary.$type,
              properties: {},
              superTypes: []
            },
            PegRule: {
              name: PegRule.$type,
              properties: {
                definition: {
                  name: PegRule.definition
                },
                name: {
                  name: PegRule.name
                }
              },
              superTypes: []
            },
            PegSequence: {
              name: PegSequence.$type,
              properties: {
                elements: {
                  name: PegSequence.elements,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            PegSuffix: {
              name: PegSuffix.$type,
              properties: {
                operator: {
                  name: PegSuffix.operator
                },
                primary: {
                  name: PegSuffix.primary
                }
              },
              superTypes: []
            },
            Pie: {
              name: Pie.$type,
              properties: {
                accDescr: {
                  name: Pie.accDescr
                },
                accTitle: {
                  name: Pie.accTitle
                },
                sections: {
                  name: Pie.sections,
                  defaultValue: []
                },
                showData: {
                  name: Pie.showData,
                  defaultValue: false
                },
                title: {
                  name: Pie.title
                }
              },
              superTypes: []
            },
            PieSection: {
              name: PieSection.$type,
              properties: {
                label: {
                  name: PieSection.label
                },
                value: {
                  name: PieSection.value
                }
              },
              superTypes: []
            },
            Pipeline: {
              name: Pipeline.$type,
              properties: {
                components: {
                  name: Pipeline.components,
                  defaultValue: []
                },
                parent: {
                  name: Pipeline.parent
                }
              },
              superTypes: []
            },
            PipelineComponent: {
              name: PipelineComponent.$type,
              properties: {
                evolution: {
                  name: PipelineComponent.evolution
                },
                label: {
                  name: PipelineComponent.label
                },
                name: {
                  name: PipelineComponent.name
                }
              },
              superTypes: []
            },
            Radar: {
              name: Radar.$type,
              properties: {
                accDescr: {
                  name: Radar.accDescr
                },
                accTitle: {
                  name: Radar.accTitle
                },
                axes: {
                  name: Radar.axes,
                  defaultValue: []
                },
                curves: {
                  name: Radar.curves,
                  defaultValue: []
                },
                options: {
                  name: Radar.options,
                  defaultValue: []
                },
                title: {
                  name: Radar.title
                }
              },
              superTypes: []
            },
            Railroad: {
              name: Railroad.$type,
              properties: {
                accDescr: {
                  name: Railroad.accDescr
                },
                accTitle: {
                  name: Railroad.accTitle
                },
                rules: {
                  name: Railroad.rules,
                  defaultValue: []
                },
                title: {
                  name: Railroad.title
                }
              },
              superTypes: []
            },
            RailroadAbnf: {
              name: RailroadAbnf.$type,
              properties: {
                accDescr: {
                  name: RailroadAbnf.accDescr
                },
                accTitle: {
                  name: RailroadAbnf.accTitle
                },
                rules: {
                  name: RailroadAbnf.rules,
                  defaultValue: []
                },
                title: {
                  name: RailroadAbnf.title
                }
              },
              superTypes: []
            },
            RailroadChoiceExpr: {
              name: RailroadChoiceExpr.$type,
              properties: {
                alternatives: {
                  name: RailroadChoiceExpr.alternatives,
                  defaultValue: []
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            RailroadEbnf: {
              name: RailroadEbnf.$type,
              properties: {
                accDescr: {
                  name: RailroadEbnf.accDescr
                },
                accTitle: {
                  name: RailroadEbnf.accTitle
                },
                rules: {
                  name: RailroadEbnf.rules,
                  defaultValue: []
                },
                title: {
                  name: RailroadEbnf.title
                }
              },
              superTypes: []
            },
            RailroadExpression: {
              name: RailroadExpression.$type,
              properties: {},
              superTypes: []
            },
            RailroadNonTerminalExpr: {
              name: RailroadNonTerminalExpr.$type,
              properties: {
                name: {
                  name: RailroadNonTerminalExpr.name
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            RailroadOneOrMoreExpr: {
              name: RailroadOneOrMoreExpr.$type,
              properties: {
                element: {
                  name: RailroadOneOrMoreExpr.element
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            RailroadOptionalExpr: {
              name: RailroadOptionalExpr.$type,
              properties: {
                element: {
                  name: RailroadOptionalExpr.element
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            RailroadPeg: {
              name: RailroadPeg.$type,
              properties: {
                accDescr: {
                  name: RailroadPeg.accDescr
                },
                accTitle: {
                  name: RailroadPeg.accTitle
                },
                rules: {
                  name: RailroadPeg.rules,
                  defaultValue: []
                },
                title: {
                  name: RailroadPeg.title
                }
              },
              superTypes: []
            },
            RailroadRule: {
              name: RailroadRule.$type,
              properties: {
                definition: {
                  name: RailroadRule.definition
                },
                name: {
                  name: RailroadRule.name
                }
              },
              superTypes: []
            },
            RailroadSequenceExpr: {
              name: RailroadSequenceExpr.$type,
              properties: {
                elements: {
                  name: RailroadSequenceExpr.elements,
                  defaultValue: []
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            RailroadSpecialExpr: {
              name: RailroadSpecialExpr.$type,
              properties: {
                text: {
                  name: RailroadSpecialExpr.text
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            RailroadTerminalExpr: {
              name: RailroadTerminalExpr.$type,
              properties: {
                value: {
                  name: RailroadTerminalExpr.value
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            RailroadZeroOrMoreExpr: {
              name: RailroadZeroOrMoreExpr.$type,
              properties: {
                element: {
                  name: RailroadZeroOrMoreExpr.element
                }
              },
              superTypes: [RailroadExpression.$type]
            },
            Section: {
              name: Section.$type,
              properties: {
                classSelector: {
                  name: Section.classSelector
                },
                name: {
                  name: Section.name
                }
              },
              superTypes: [Item.$type]
            },
            Service: {
              name: Service.$type,
              properties: {
                icon: {
                  name: Service.icon
                },
                iconText: {
                  name: Service.iconText
                },
                id: {
                  name: Service.id
                },
                in: {
                  name: Service.in
                },
                title: {
                  name: Service.title
                }
              },
              superTypes: []
            },
            Size: {
              name: Size.$type,
              properties: {
                height: {
                  name: Size.height
                },
                width: {
                  name: Size.width
                }
              },
              superTypes: []
            },
            Statement: {
              name: Statement.$type,
              properties: {},
              superTypes: []
            },
            Transition: {
              name: Transition2.$type,
              properties: {
                from: {
                  name: Transition2.from
                },
                label: {
                  name: Transition2.label
                },
                to: {
                  name: Transition2.to
                }
              },
              superTypes: []
            },
            TreeNode: {
              name: TreeNode.$type,
              properties: {
                classAnnotation: {
                  name: TreeNode.classAnnotation
                },
                descAnnotation: {
                  name: TreeNode.descAnnotation
                },
                iconAnnotation: {
                  name: TreeNode.iconAnnotation
                },
                indent: {
                  name: TreeNode.indent
                },
                name: {
                  name: TreeNode.name
                }
              },
              superTypes: []
            },
            TreeView: {
              name: TreeView.$type,
              properties: {
                accDescr: {
                  name: TreeView.accDescr
                },
                accTitle: {
                  name: TreeView.accTitle
                },
                nodes: {
                  name: TreeView.nodes,
                  defaultValue: []
                },
                title: {
                  name: TreeView.title
                }
              },
              superTypes: []
            },
            Treemap: {
              name: Treemap.$type,
              properties: {
                accDescr: {
                  name: Treemap.accDescr
                },
                accTitle: {
                  name: Treemap.accTitle
                },
                title: {
                  name: Treemap.title
                },
                TreemapRows: {
                  name: Treemap.TreemapRows,
                  defaultValue: []
                }
              },
              superTypes: []
            },
            TreemapRow: {
              name: TreemapRow.$type,
              properties: {
                indent: {
                  name: TreemapRow.indent
                },
                item: {
                  name: TreemapRow.item
                }
              },
              superTypes: []
            },
            Wardley: {
              name: Wardley.$type,
              properties: {
                accDescr: {
                  name: Wardley.accDescr
                },
                accelerators: {
                  name: Wardley.accelerators,
                  defaultValue: []
                },
                accTitle: {
                  name: Wardley.accTitle
                },
                anchors: {
                  name: Wardley.anchors,
                  defaultValue: []
                },
                annotation: {
                  name: Wardley.annotation,
                  defaultValue: []
                },
                annotations: {
                  name: Wardley.annotations,
                  defaultValue: []
                },
                components: {
                  name: Wardley.components,
                  defaultValue: []
                },
                deaccelerators: {
                  name: Wardley.deaccelerators,
                  defaultValue: []
                },
                evolution: {
                  name: Wardley.evolution
                },
                evolves: {
                  name: Wardley.evolves,
                  defaultValue: []
                },
                links: {
                  name: Wardley.links,
                  defaultValue: []
                },
                notes: {
                  name: Wardley.notes,
                  defaultValue: []
                },
                pipelines: {
                  name: Wardley.pipelines,
                  defaultValue: []
                },
                size: {
                  name: Wardley.size
                },
                title: {
                  name: Wardley.title
                }
              },
              superTypes: []
            }
          };
        }
        static {
          __name2(this, "MermaidAstReflection");
        }
      };
      reflection2 = new MermaidAstReflection();
      ArchitectureGrammarGrammar = /* @__PURE__ */ __name2(() => loadedArchitectureGrammarGrammar ?? (loadedArchitectureGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"ArchitectureGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"alignments","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Alignment","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"align"},{"$type":"Assignment","feature":"direction","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"row"},{"$type":"Keyword","value":"column"}]}},{"$type":"Assignment","feature":"members","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Assignment","feature":"members","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"+"},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@20"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[(?:\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'|[\\\\w ]+)\\\\]/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)), "ArchitectureGrammarGrammar");
      CynefinGrammarGrammar = /* @__PURE__ */ __name2(() => loadedCynefinGrammarGrammar ?? (loadedCynefinGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"CynefinGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Cynefin","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"cynefin-beta"},{"$type":"Keyword","value":"cynefin-beta:"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"domains","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"transitions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"DomainBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"domain","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Assignment","feature":"items","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"DomainItem","definition":{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Transition","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"from","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Keyword","value":"-->"},{"$type":"Assignment","feature":"to","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"DOMAIN_NAME","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"complex"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"complicated"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"clear"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"chaotic"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"confusion"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "CynefinGrammarGrammar");
      EventModelingGrammar = /* @__PURE__ */ __name2(() => loadedEventModelingGrammar ?? (loadedEventModelingGrammar = loadGrammarFromJson('{"$type":"Grammar","isDeclared":true,"name":"EventModeling","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","entry":true,"name":"EventModel","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"eventmodeling"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"modelEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"frames","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"dataEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"noteEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"gwtEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmModelEntityType","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rmo"},{"$type":"Keyword","value":"readmodel"},{"$type":"Keyword","value":"ui"},{"$type":"Keyword","value":"cmd"},{"$type":"Keyword","value":"command"},{"$type":"Keyword","value":"evt"},{"$type":"Keyword","value":"event"},{"$type":"Keyword","value":"pcr"},{"$type":"Keyword","value":"processor"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmDataType","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"json"},{"$type":"Keyword","value":"jsobj"},{"$type":"Keyword","value":"figma"},{"$type":"Keyword","value":"salt"},{"$type":"Keyword","value":"uri"},{"$type":"Keyword","value":"md"},{"$type":"Keyword","value":"html"},{"$type":"Keyword","value":"text"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"EmDataInline","definition":{"$type":"Group","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"`"},{"$type":"Assignment","feature":"dataType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":"`"}],"cardinality":"?"},{"$type":"Assignment","feature":"dataInlineValue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"EmDataBlock","definition":{"$type":"Group","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"`"},{"$type":"Assignment","feature":"dataType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":"`"}],"cardinality":"?"},{"$type":"Assignment","feature":"dataBlockValue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"QualifiedName","dataType":"string","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"."},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmTimeFrame","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"tf"},{"$type":"Keyword","value":"timeframe"}]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"modelEntityType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"entityIdentifier","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"->>"},{"$type":"Assignment","feature":"sourceFrames","operator":"+=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}}],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"[["},{"$type":"Assignment","feature":"dataReference","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@10"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":"]]"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmResetFrame","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rf"},{"$type":"Keyword","value":"resetframe"}]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"modelEntityType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"entityIdentifier","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"->>"},{"$type":"Assignment","feature":"sourceFrames","operator":"+=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}}],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"[["},{"$type":"Assignment","feature":"dataReference","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@10"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":"]]"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmFrame","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmModelEntity","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"entity"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmDataEntity","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"data"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmNoteEntity","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"note"},{"$type":"Assignment","feature":"sourceFrame","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmGwt","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"gwt"},{"$type":"Assignment","feature":"sourceFrame","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":"given"},{"$type":"Assignment","feature":"givenStatements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"+"},{"$type":"Group","elements":[{"$type":"Keyword","value":"when"},{"$type":"Assignment","feature":"whenStatements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"+"}],"cardinality":"?"},{"$type":"Keyword","value":"then"},{"$type":"Assignment","feature":"thenStatements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"+"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmGwtStatement","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},{"$type":"Assignment","feature":"entityIdentifier","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@9"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EM_EID","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EM_FI","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"EM_ID","definition":{"$type":"RegexToken","regex":"/[_a-zA-Z][\\\\w_]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_FID","definition":{"$type":"RegexToken","regex":"/\\\\d{1,3}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_DATA_INLINE","definition":{"$type":"RegexToken","regex":"/\\\\{(.*)\\\\}|\\"(.*)\\"|\'(.*)\'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_DATA_BLOCK","definition":{"$type":"RegexToken","regex":"/\\\\{[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?\\\\}(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"EM_WS","definition":{"$type":"RegexToken","regex":"/\\\\s+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_SL_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\/[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"imports":[],"types":[]}')), "EventModelingGrammar");
      GitGraphGrammarGrammar = /* @__PURE__ */ __name2(() => loadedGitGraphGrammarGrammar ?? (loadedGitGraphGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"GitGraphGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)), "GitGraphGrammarGrammar");
      InfoGrammarGrammar = /* @__PURE__ */ __name2(() => loadedInfoGrammarGrammar ?? (loadedInfoGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"InfoGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "InfoGrammarGrammar");
      PacketGrammarGrammar = /* @__PURE__ */ __name2(() => loadedPacketGrammarGrammar ?? (loadedPacketGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"PacketGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "PacketGrammarGrammar");
      PieGrammarGrammar = /* @__PURE__ */ __name2(() => loadedPieGrammarGrammar ?? (loadedPieGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"PieGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"FLOAT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?(0|[1-9][0-9]*)(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@2"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@3"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "PieGrammarGrammar");
      RadarGrammarGrammar = /* @__PURE__ */ __name2(() => loadedRadarGrammarGrammar ?? (loadedRadarGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"RadarGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}},"isMulti":false}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"types":[]}`)), "RadarGrammarGrammar");
      RailroadAbnfGrammarGrammar = /* @__PURE__ */ __name2(() => loadedRailroadAbnfGrammarGrammar ?? (loadedRailroadAbnfGrammarGrammar = loadGrammarFromJson('{"$type":"Grammar","isDeclared":true,"name":"RailroadAbnfGrammar","rules":[{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ABNF_RULENAME","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[A-Za-z][A-Za-z0-9-]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ABNF_STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ABNF_NUMVAL","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/%[xXdDbB][0-9A-Fa-f]+(?:-[0-9A-Fa-f]+|\\\\.[0-9A-Fa-f]+)*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ABNF_REPEAT","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[0-9]*\\\\*[0-9]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ABNF_EXACT_REPEAT","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[0-9]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"ABNF_WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t \\\\r\\\\n]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ABNF_YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ABNF_DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ABNF_SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ABNF_COMMENT","definition":{"$type":"RegexToken","regex":"/;[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"ParserRule","entry":true,"name":"RailroadAbnf","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"railroad-abnf-beta"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfRule","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Keyword","value":"="},{"$type":"Assignment","feature":"definition","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Keyword","value":";"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfAlternation","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"/"},{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfConcatenation","returnType":{"$ref":"#/interfaces@3"},"definition":{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]},"cardinality":"+"},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfElement","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"repeat","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"repeat","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"primary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfPrimary","returnType":{"$ref":"#/interfaces@5"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfStringLiteral","returnType":{"$ref":"#/interfaces@6"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfNumVal","returnType":{"$ref":"#/interfaces@7"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfRuleName","returnType":{"$ref":"#/interfaces@8"},"definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfGroup","returnType":{"$ref":"#/interfaces@9"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"AbnfOptionalGroup","returnType":{"$ref":"#/interfaces@10"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"fragment":false,"parameters":[]}],"interfaces":[{"$type":"Interface","name":"RailroadAbnf","attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"rules","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AbnfRule","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"definition","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AbnfAlternation","attributes":[{"$type":"TypeAttribute","name":"alternatives","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@3"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AbnfConcatenation","attributes":[{"$type":"TypeAttribute","name":"elements","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@4"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AbnfElement","attributes":[{"$type":"TypeAttribute","name":"repeat","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"primary","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AbnfPrimary","attributes":[],"superTypes":[]},{"$type":"Interface","name":"AbnfStringLiteral","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"AbnfNumVal","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"AbnfRuleName","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"AbnfGroup","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"AbnfOptionalGroup","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]}],"imports":[],"types":[]}')), "RailroadAbnfGrammarGrammar");
      RailroadEbnfGrammarGrammar = /* @__PURE__ */ __name2(() => loadedRailroadEbnfGrammarGrammar ?? (loadedRailroadEbnfGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"RailroadEbnfGrammar","rules":[{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EBNF_ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[A-Z_a-z][\\\\w-]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EBNF_STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EBNF_SPECIAL_SEQUENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\?(?=[^?;]*[^?\\\\s;][^?;]*\\\\?)[^?;]*\\\\?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"EBNF_WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t \\\\r\\\\n]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EBNF_YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EBNF_DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EBNF_SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EBNF_BLOCK_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EBNF_ISO_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\(\\\\*[\\\\s\\\\S]*?\\\\*\\\\)/","parenthesized":false},"fragment":false},{"$type":"ParserRule","entry":true,"name":"RailroadEbnf","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"railroad-ebnf-beta"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfRule","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"="},{"$type":"Keyword","value":"::="}]},{"$type":"Assignment","feature":"definition","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":";"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfChoice","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"|"},{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfSequence","returnType":{"$ref":"#/interfaces@3"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":",","cardinality":"?"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfTerm","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"base","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Assignment","feature":"postfixes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfPrimary","returnType":{"$ref":"#/interfaces@5"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfTerminal","returnType":{"$ref":"#/interfaces@7"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfNonTerminal","returnType":{"$ref":"#/interfaces@8"},"definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfSpecial","returnType":{"$ref":"#/interfaces@9"},"definition":{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfGroup","returnType":{"$ref":"#/interfaces@10"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfOptional","returnType":{"$ref":"#/interfaces@11"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfRepetition","returnType":{"$ref":"#/interfaces@12"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":"}"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfPostfix","returnType":{"$ref":"#/interfaces@6"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@25"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@26"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfOptionalPostfix","returnType":{"$ref":"#/interfaces@13"},"definition":{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"?"}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfZeroOrMorePostfix","returnType":{"$ref":"#/interfaces@14"},"definition":{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"*"}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfOneOrMorePostfix","returnType":{"$ref":"#/interfaces@15"},"definition":{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"+"}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EbnfExceptionPostfix","returnType":{"$ref":"#/interfaces@16"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"except","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]}],"interfaces":[{"$type":"Interface","name":"RailroadEbnf","attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"rules","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"EbnfRule","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"definition","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"EbnfChoice","attributes":[{"$type":"TypeAttribute","name":"alternatives","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@3"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"EbnfSequence","attributes":[{"$type":"TypeAttribute","name":"elements","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@4"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"EbnfTerm","attributes":[{"$type":"TypeAttribute","name":"base","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}},"isOptional":false},{"$type":"TypeAttribute","name":"postfixes","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"EbnfPrimary","attributes":[],"superTypes":[]},{"$type":"Interface","name":"EbnfPostfix","attributes":[],"superTypes":[]},{"$type":"Interface","name":"EbnfTerminal","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"EbnfNonTerminal","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"EbnfSpecial","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"text","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"EbnfGroup","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"EbnfOptional","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"EbnfRepetition","superTypes":[{"$ref":"#/interfaces@5"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"EbnfOptionalPostfix","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"operator","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"EbnfZeroOrMorePostfix","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"operator","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"EbnfOneOrMorePostfix","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"operator","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"EbnfExceptionPostfix","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"except","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}},"isOptional":false}]}],"imports":[],"types":[]}`)), "RailroadEbnfGrammarGrammar");
      RailroadGrammarGrammar = /* @__PURE__ */ __name2(() => loadedRailroadGrammarGrammar ?? (loadedRailroadGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"RailroadGrammar","rules":[{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"RR_ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[A-Z_a-z][\\\\w-]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"RR_STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"RR_WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t \\\\r\\\\n]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"RR_YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"RR_DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"RR_SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"RR_BLOCK_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//","parenthesized":false},"fragment":false},{"$type":"ParserRule","entry":true,"name":"Railroad","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"railroad-beta"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadRule","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Keyword","value":"="},{"$type":"Assignment","feature":"definition","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Keyword","value":";"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadExpression","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadSequenceExpr","returnType":{"$ref":"#/interfaces@3"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"sequence"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadChoiceExpr","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"choice"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadOptionalExpr","returnType":{"$ref":"#/interfaces@5"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"optional"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadOneOrMoreExpr","returnType":{"$ref":"#/interfaces@6"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"oneOrMore"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadZeroOrMoreExpr","returnType":{"$ref":"#/interfaces@7"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"zeroOrMore"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadTerminalExpr","returnType":{"$ref":"#/interfaces@8"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"terminal"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadNonTerminalExpr","returnType":{"$ref":"#/interfaces@9"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"nonterminal"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"RailroadSpecialExpr","returnType":{"$ref":"#/interfaces@10"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"special"},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]}],"interfaces":[{"$type":"Interface","name":"Railroad","attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"rules","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"RailroadRule","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"definition","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"RailroadExpression","attributes":[],"superTypes":[]},{"$type":"Interface","name":"RailroadSequenceExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"elements","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}}},"isOptional":false}]},{"$type":"Interface","name":"RailroadChoiceExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"alternatives","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}}},"isOptional":false}]},{"$type":"Interface","name":"RailroadOptionalExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"RailroadOneOrMoreExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"RailroadZeroOrMoreExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"RailroadTerminalExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"RailroadNonTerminalExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"RailroadSpecialExpr","superTypes":[{"$ref":"#/interfaces@2"}],"attributes":[{"$type":"TypeAttribute","name":"text","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]}],"imports":[],"types":[]}`)), "RailroadGrammarGrammar");
      RailroadPegGrammarGrammar = /* @__PURE__ */ __name2(() => loadedRailroadPegGrammarGrammar ?? (loadedRailroadPegGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"RailroadPegGrammar","rules":[{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PEG_ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[A-Z_a-z][\\\\w-]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PEG_STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"PEG_WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t \\\\r\\\\n]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"PEG_YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"PEG_DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"PEG_SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"PEG_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/#[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"ParserRule","entry":true,"name":"RailroadPeg","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"railroad-peg-beta"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegRule","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Keyword","value":"<-"},{"$type":"Assignment","feature":"definition","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Keyword","value":";"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegOrderedChoice","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"/"},{"$type":"Assignment","feature":"alternatives","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegSequence","returnType":{"$ref":"#/interfaces@3"},"definition":{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"+"},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegPrefix","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"&"}},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"!"}}],"cardinality":"?"},{"$type":"Assignment","feature":"suffix","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegSuffix","returnType":{"$ref":"#/interfaces@5"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"primary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"?"}},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"*"}},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"+"}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegPrimary","returnType":{"$ref":"#/interfaces@6"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegLiteral","returnType":{"$ref":"#/interfaces@7"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegIdentifier","returnType":{"$ref":"#/interfaces@8"},"definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegGroup","returnType":{"$ref":"#/interfaces@9"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PegAny","returnType":{"$ref":"#/interfaces@10"},"definition":{"$type":"Assignment","feature":"dot","operator":"=","terminal":{"$type":"Keyword","value":"."}},"entry":false,"fragment":false,"parameters":[]}],"interfaces":[{"$type":"Interface","name":"RailroadPeg","attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"rules","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"PegRule","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"definition","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"PegOrderedChoice","attributes":[{"$type":"TypeAttribute","name":"alternatives","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@3"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"PegSequence","attributes":[{"$type":"TypeAttribute","name":"elements","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@4"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"PegPrefix","attributes":[{"$type":"TypeAttribute","name":"operator","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"suffix","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"PegSuffix","attributes":[{"$type":"TypeAttribute","name":"primary","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}},"isOptional":false},{"$type":"TypeAttribute","name":"operator","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"PegPrimary","attributes":[],"superTypes":[]},{"$type":"Interface","name":"PegLiteral","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"PegIdentifier","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]},{"$type":"Interface","name":"PegGroup","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"element","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}]},{"$type":"Interface","name":"PegAny","superTypes":[{"$ref":"#/interfaces@6"}],"attributes":[{"$type":"TypeAttribute","name":"dot","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}]}],"imports":[],"types":[]}`)), "RailroadPegGrammarGrammar");
      TreemapGrammarGrammar = /* @__PURE__ */ __name2(() => loadedTreemapGrammarGrammar ?? (loadedTreemapGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"TreemapGrammar","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@15"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)), "TreemapGrammarGrammar");
      TreeViewGrammarGrammar = /* @__PURE__ */ __name2(() => loadedTreeViewGrammarGrammar ?? (loadedTreeViewGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"TreeViewGrammar","rules":[{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"TreeView","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"treeView-beta"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"nodes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"CLASS_ANNOTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+:::[ \\\\t]*[A-Za-z_][\\\\w-]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ICON_ANNOTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+icon\\\\([\\\\w-]*(?::[\\\\w-]+)?\\\\)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"DESC_ANNOTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+##[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"QUOTED_NAME","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"BARE_NAME","definition":{"$type":"RegexToken","regex":"/(?!:::|icon\\\\(|##)[^ \\\\t\\\\n\\\\r\\"'](?:(?![ \\\\t]+:::[ \\\\t]*[A-Za-z_]|[ \\\\t]+icon\\\\(|[ \\\\t]+##)[^\\\\n\\\\r])*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TreeNode","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"classAnnotation","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"iconAnnotation","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"descAnnotation","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]}],"interfaces":[{"$type":"Interface","name":"TreeView","attributes":[{"$type":"TypeAttribute","name":"nodes","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@14"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * TreeView grammar for Langium\\n *\\n * Supports both quoted labels (\\"my file\\") and bare labels (index.js).\\n * Annotations (:::class, icon(), ## description) are parsed directly into\\n * AST fields by the grammar. Value conversion for stripping quotes, extracting\\n * class names, icon names, and description text happens in valueConverter.ts.\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treeView keyword, allowing for empty lines and comments before the\\n * treeView declaration.\\n */"}`)), "TreeViewGrammarGrammar");
      WardleyGrammarGrammar = /* @__PURE__ */ __name2(() => loadedWardleyGrammarGrammar ?? (loadedWardleyGrammarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"WardleyGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Wardley","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@25"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@42"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"size","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"anchors","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"links","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"evolves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"pipelines","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"notes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"annotations","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Assignment","feature":"annotation","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Assignment","feature":"deaccelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Size","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@26"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"width","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"height","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolution","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EvolutionStage","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"@"},{"$type":"Assignment","feature":"boundary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}],"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"/"},{"$type":"Assignment","feature":"secondName","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Anchor","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Component","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"decorator","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Keyword","value":")"}]}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Label","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"negX","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetX","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"negY","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetY","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Decorator","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"strategy","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Link","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"from","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"fromPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"arrow","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]},"cardinality":"?"},{"$type":"Assignment","feature":"to","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"toPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"linkLabel","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolve","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},{"$type":"Assignment","feature":"component","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Pipeline","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@33"},"arguments":[]},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"+"},{"$type":"Keyword","value":"}"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PipelineComponent","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Note","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[]},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotations","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@35"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotation","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},{"$type":"Assignment","feature":"number","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CoordinateValue","dataType":"number","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Accelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Deaccelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@38"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"WARDLEY_NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"->"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_PORT","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<>"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+>"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_ARROW","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-->"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-.->"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":">"},"parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'<>/","parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'</","parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'>/","parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_LABEL","definition":{"$type":"RegexToken","regex":"/;[^\\\\n\\\\r]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRATEGY","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"build"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"buy"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"outsource"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"market"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_WARDLEY","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"wardley-beta"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_SIZE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"size"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLUTION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolution"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANCHOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"anchor"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_COMPONENT","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"component"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_LABEL","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"label"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_INERTIA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"inertia"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLVE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolve"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_PIPELINE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"pipeline"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_NOTE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"note"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATIONS","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotations"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotation"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"accelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_DEACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"deaccelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NAME_WITH_SPACES","definition":{"$type":"RegexToken","regex":"/(?!title\\\\s|accTitle|accDescr)[A-Za-z](?:[A-Za-z0-9_()&]|-(?!>))*(?:[ \\\\t]+[A-Za-z(](?:[A-Za-z0-9_()&]|-(?!>))*)*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@44"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@45"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@46"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@47"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@48"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)), "WardleyGrammarGrammar");
      ArchitectureGrammarLanguageMetaData = {
        languageId: "architecture",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      CynefinGrammarLanguageMetaData = {
        languageId: "cynefin",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      EventModelingLanguageMetaData = {
        languageId: "eventmodeling",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      GitGraphGrammarLanguageMetaData = {
        languageId: "gitGraph",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      InfoGrammarLanguageMetaData = {
        languageId: "info",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      PacketGrammarLanguageMetaData = {
        languageId: "packet",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      PieGrammarLanguageMetaData = {
        languageId: "pie",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      RadarGrammarLanguageMetaData = {
        languageId: "radar",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      RailroadAbnfGrammarLanguageMetaData = {
        languageId: "railroadAbnf",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      RailroadEbnfGrammarLanguageMetaData = {
        languageId: "railroadEbnf",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      RailroadGrammarLanguageMetaData = {
        languageId: "railroad",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      RailroadPegGrammarLanguageMetaData = {
        languageId: "railroadPeg",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      TreemapGrammarLanguageMetaData = {
        languageId: "treemap",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      TreeViewGrammarLanguageMetaData = {
        languageId: "treeView",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      WardleyGrammarLanguageMetaData = {
        languageId: "wardley",
        fileExtensions: [".mmd", ".mermaid"],
        caseInsensitive: false,
        mode: "production"
      };
      MermaidGeneratedSharedModule = {
        AstReflection: /* @__PURE__ */ __name2(() => new MermaidAstReflection(), "AstReflection")
      };
      ArchitectureGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => ArchitectureGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => ArchitectureGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      CynefinGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => CynefinGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => CynefinGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      EventModelingGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => EventModelingGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => EventModelingLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      GitGraphGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => GitGraphGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => GitGraphGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      InfoGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => InfoGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => InfoGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      PacketGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => PacketGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => PacketGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      PieGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => PieGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => PieGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      RadarGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => RadarGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => RadarGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      RailroadAbnfGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => RailroadAbnfGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => RailroadAbnfGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      RailroadEbnfGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => RailroadEbnfGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => RailroadEbnfGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      RailroadGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => RailroadGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => RailroadGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      RailroadPegGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => RailroadPegGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => RailroadPegGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      TreemapGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => TreemapGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => TreemapGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      TreeViewGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => TreeViewGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => TreeViewGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      WardleyGrammarGeneratedModule = {
        Grammar: /* @__PURE__ */ __name2(() => WardleyGrammarGrammar(), "Grammar"),
        LanguageMetaData: /* @__PURE__ */ __name2(() => WardleyGrammarLanguageMetaData, "LanguageMetaData"),
        parser: {}
      };
      accessibilityDescrRegex = /accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/;
      accessibilityTitleRegex = /accTitle[\t ]*:([^\n\r]*)/;
      titleRegex = /title([\t ][^\n\r]*|)/;
      rulesRegexes = {
        ACC_DESCR: accessibilityDescrRegex,
        ACC_TITLE: accessibilityTitleRegex,
        TITLE: titleRegex
      };
      AbstractMermaidValueConverter = class extends DefaultValueConverter {
        static {
          __name(this, "AbstractMermaidValueConverter");
        }
        static {
          __name2(this, "AbstractMermaidValueConverter");
        }
        runConverter(rule, input, cstNode) {
          let value2 = this.runCommonConverter(rule, input, cstNode);
          if (value2 === void 0) {
            value2 = this.runCustomConverter(rule, input, cstNode);
          }
          if (value2 === void 0) {
            return super.runConverter(rule, input, cstNode);
          }
          return value2;
        }
        runCommonConverter(rule, input, _cstNode) {
          const regex2 = rulesRegexes[rule.name];
          if (regex2 === void 0) {
            return void 0;
          }
          const match3 = regex2.exec(input);
          if (match3 === null) {
            return void 0;
          }
          if (match3[1] !== void 0) {
            return match3[1].trim().replace(/[\t ]{2,}/gm, " ");
          }
          if (match3[2] !== void 0) {
            return match3[2].replace(/^\s*/gm, "").replace(/\s+$/gm, "").replace(/[\t ]{2,}/gm, " ").replace(/[\n\r]{2,}/gm, "\n");
          }
          return void 0;
        }
      };
      CommonValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "CommonValueConverter");
        }
        static {
          __name2(this, "CommonValueConverter");
        }
        runCustomConverter(_rule, _input, _cstNode) {
          return void 0;
        }
      };
      AbstractMermaidTokenBuilder = class extends DefaultTokenBuilder {
        static {
          __name(this, "AbstractMermaidTokenBuilder");
        }
        static {
          __name2(this, "AbstractMermaidTokenBuilder");
        }
        constructor(keywords) {
          super();
          this.keywords = new Set(keywords);
        }
        buildKeywordTokens(rules2, terminalTokens, options2) {
          const tokenTypes = super.buildKeywordTokens(rules2, terminalTokens, options2);
          tokenTypes.forEach((tokenType) => {
            if (this.keywords.has(tokenType.name) && tokenType.PATTERN !== void 0) {
              tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + "(?:(?=%%)|(?!\\S))");
            }
          });
          return tokenTypes;
        }
      };
      CommonTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "CommonTokenBuilder");
        }
        static {
          __name2(this, "CommonTokenBuilder");
        }
      };
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-QBLGF6JB.mjs
  function createRadarServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Radar2 = inject(
      createDefaultCoreModule({ shared }),
      RadarGrammarGeneratedModule,
      RadarModule
    );
    shared.ServiceRegistry.register(Radar2);
    return { shared, Radar: Radar2 };
  }
  var RadarTokenBuilder, RadarModule;
  var init_chunk_QBLGF6JB = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-QBLGF6JB.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      RadarTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "RadarTokenBuilder");
        }
        static {
          __name2(this, "RadarTokenBuilder");
        }
        constructor() {
          super(["radar-beta"]);
        }
      };
      RadarModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new RadarTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter")
        }
      };
      __name(createRadarServices, "createRadarServices");
      __name2(createRadarServices, "createRadarServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-5TONJI2A.mjs
  function createRailroadServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Railroad2 = inject(
      createDefaultCoreModule({ shared }),
      RailroadGrammarGeneratedModule,
      RailroadModule
    );
    shared.ServiceRegistry.register(Railroad2);
    return { shared, Railroad: Railroad2 };
  }
  var RailroadTokenBuilder, decodeEscapedString, RailroadValueConverter, RailroadModule;
  var init_chunk_5TONJI2A = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-5TONJI2A.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      RailroadTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "RailroadTokenBuilder");
        }
        static {
          __name2(this, "RailroadTokenBuilder");
        }
        constructor() {
          super(["railroad-beta"]);
        }
      };
      decodeEscapedString = /* @__PURE__ */ __name2((input) => {
        const content = input.slice(1, -1);
        let value2 = "";
        for (let index = 0; index < content.length; index++) {
          const character2 = content[index];
          if (character2 === "\\" && index + 1 < content.length) {
            index++;
            const escaped = content[index];
            switch (escaped) {
              case "n":
                value2 += "\n";
                break;
              case "r":
                value2 += "\r";
                break;
              case "t":
                value2 += "	";
                break;
              default:
                value2 += escaped;
            }
            continue;
          }
          value2 += character2;
        }
        return value2;
      }, "decodeEscapedString");
      RailroadValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "RailroadValueConverter");
        }
        static {
          __name2(this, "RailroadValueConverter");
        }
        runConverter(rule, input, cstNode) {
          const value2 = super.runConverter(rule, input, cstNode);
          if (rule.name === "TITLE" && typeof value2 === "string") {
            const trimmedValue = value2.trim();
            if (trimmedValue.startsWith('"') && trimmedValue.endsWith('"') || trimmedValue.startsWith("'") && trimmedValue.endsWith("'")) {
              return decodeEscapedString(trimmedValue);
            }
          }
          return value2;
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name === "RR_STRING") {
            return decodeEscapedString(input);
          }
          return void 0;
        }
      };
      RailroadModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new RailroadTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new RailroadValueConverter(), "ValueConverter")
        }
      };
      __name(createRailroadServices, "createRailroadServices");
      __name2(createRailroadServices, "createRailroadServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-U6XO7XAA.mjs
  function createRailroadEbnfServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const RailroadEbnf2 = inject(
      createDefaultCoreModule({ shared }),
      RailroadEbnfGrammarGeneratedModule,
      RailroadEbnfModule
    );
    shared.ServiceRegistry.register(RailroadEbnf2);
    return { shared, RailroadEbnf: RailroadEbnf2 };
  }
  var RailroadEbnfTokenBuilder, decodeEscapedString2, RailroadEbnfValueConverter, RailroadEbnfModule;
  var init_chunk_U6XO7XAA = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-U6XO7XAA.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      RailroadEbnfTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "RailroadEbnfTokenBuilder");
        }
        static {
          __name2(this, "RailroadEbnfTokenBuilder");
        }
        constructor() {
          super(["railroad-ebnf-beta"]);
        }
      };
      decodeEscapedString2 = /* @__PURE__ */ __name2((input) => {
        const content = input.slice(1, -1);
        let value2 = "";
        for (let index = 0; index < content.length; index++) {
          const character2 = content[index];
          if (character2 === "\\" && index + 1 < content.length) {
            index++;
            const escaped = content[index];
            switch (escaped) {
              case "n":
                value2 += "\n";
                break;
              case "r":
                value2 += "\r";
                break;
              case "t":
                value2 += "	";
                break;
              default:
                value2 += escaped;
            }
            continue;
          }
          value2 += character2;
        }
        return value2;
      }, "decodeEscapedString");
      RailroadEbnfValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "RailroadEbnfValueConverter");
        }
        static {
          __name2(this, "RailroadEbnfValueConverter");
        }
        runConverter(rule, input, cstNode) {
          const value2 = super.runConverter(rule, input, cstNode);
          if (rule.name === "TITLE" && typeof value2 === "string") {
            const trimmedValue = value2.trim();
            if (trimmedValue.startsWith('"') && trimmedValue.endsWith('"') || trimmedValue.startsWith("'") && trimmedValue.endsWith("'")) {
              return decodeEscapedString2(trimmedValue);
            }
          }
          return value2;
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name === "EBNF_STRING") {
            return decodeEscapedString2(input);
          }
          if (rule.name === "EBNF_SPECIAL_SEQUENCE") {
            return input.slice(1, -1).trim();
          }
          return void 0;
        }
      };
      RailroadEbnfModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new RailroadEbnfTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new RailroadEbnfValueConverter(), "ValueConverter")
        }
      };
      __name(createRailroadEbnfServices, "createRailroadEbnfServices");
      __name2(createRailroadEbnfServices, "createRailroadEbnfServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-5HE753X5.mjs
  function createRailroadAbnfServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const RailroadAbnf2 = inject(
      createDefaultCoreModule({ shared }),
      RailroadAbnfGrammarGeneratedModule,
      RailroadAbnfModule
    );
    shared.ServiceRegistry.register(RailroadAbnf2);
    return { shared, RailroadAbnf: RailroadAbnf2 };
  }
  var RailroadAbnfTokenBuilder, RailroadAbnfValueConverter, RailroadAbnfModule;
  var init_chunk_5HE753X5 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-5HE753X5.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      RailroadAbnfTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "RailroadAbnfTokenBuilder");
        }
        static {
          __name2(this, "RailroadAbnfTokenBuilder");
        }
        constructor() {
          super(["railroad-abnf-beta"]);
        }
      };
      RailroadAbnfValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "RailroadAbnfValueConverter");
        }
        static {
          __name2(this, "RailroadAbnfValueConverter");
        }
        runConverter(rule, input, cstNode) {
          const value2 = super.runConverter(rule, input, cstNode);
          if (rule.name === "TITLE" && typeof value2 === "string") {
            const trimmedValue = value2.trim();
            if (trimmedValue.startsWith('"') && trimmedValue.endsWith('"') || trimmedValue.startsWith("'") && trimmedValue.endsWith("'")) {
              return trimmedValue.slice(1, -1);
            }
          }
          return value2;
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name === "ABNF_STRING") {
            return input.slice(1, -1);
          }
          return void 0;
        }
      };
      RailroadAbnfModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new RailroadAbnfTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new RailroadAbnfValueConverter(), "ValueConverter")
        }
      };
      __name(createRailroadAbnfServices, "createRailroadAbnfServices");
      __name2(createRailroadAbnfServices, "createRailroadAbnfServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-JG7HCLWE.mjs
  function createRailroadPegServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const RailroadPeg2 = inject(
      createDefaultCoreModule({ shared }),
      RailroadPegGrammarGeneratedModule,
      RailroadPegModule
    );
    shared.ServiceRegistry.register(RailroadPeg2);
    return { shared, RailroadPeg: RailroadPeg2 };
  }
  var RailroadPegTokenBuilder, decodeEscapedString3, RailroadPegValueConverter, RailroadPegModule;
  var init_chunk_JG7HCLWE = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-JG7HCLWE.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      RailroadPegTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "RailroadPegTokenBuilder");
        }
        static {
          __name2(this, "RailroadPegTokenBuilder");
        }
        constructor() {
          super(["railroad-peg-beta"]);
        }
      };
      decodeEscapedString3 = /* @__PURE__ */ __name2((input) => {
        const content = input.slice(1, -1);
        let value2 = "";
        for (let index = 0; index < content.length; index++) {
          const character2 = content[index];
          if (character2 === "\\" && index + 1 < content.length) {
            index++;
            const escaped = content[index];
            switch (escaped) {
              case "n":
                value2 += "\n";
                break;
              case "r":
                value2 += "\r";
                break;
              case "t":
                value2 += "	";
                break;
              default:
                value2 += escaped;
            }
            continue;
          }
          value2 += character2;
        }
        return value2;
      }, "decodeEscapedString");
      RailroadPegValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "RailroadPegValueConverter");
        }
        static {
          __name2(this, "RailroadPegValueConverter");
        }
        runConverter(rule, input, cstNode) {
          const value2 = super.runConverter(rule, input, cstNode);
          if (rule.name === "TITLE" && typeof value2 === "string") {
            const trimmedValue = value2.trim();
            if (trimmedValue.startsWith('"') && trimmedValue.endsWith('"') || trimmedValue.startsWith("'") && trimmedValue.endsWith("'")) {
              return decodeEscapedString3(trimmedValue);
            }
          }
          return value2;
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name === "PEG_STRING") {
            return decodeEscapedString3(input);
          }
          return void 0;
        }
      };
      RailroadPegModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new RailroadPegTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new RailroadPegValueConverter(), "ValueConverter")
        }
      };
      __name(createRailroadPegServices, "createRailroadPegServices");
      __name2(createRailroadPegServices, "createRailroadPegServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-R7FJI6CG.mjs
  function registerValidationChecks(services) {
    const validator = services.validation.TreemapValidator;
    const registry = services.validation.ValidationRegistry;
    if (registry) {
      const checks = {
        Treemap: validator.checkSingleRoot.bind(validator)
        // Remove unused validation for TreemapRow
      };
      registry.register(checks, validator);
    }
  }
  function createTreemapServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Treemap2 = inject(
      createDefaultCoreModule({ shared }),
      TreemapGrammarGeneratedModule,
      TreemapModule
    );
    shared.ServiceRegistry.register(Treemap2);
    registerValidationChecks(Treemap2);
    return { shared, Treemap: Treemap2 };
  }
  var TreemapTokenBuilder, classDefRegex, TreemapValueConverter, TreemapValidator, TreemapModule;
  var init_chunk_R7FJI6CG = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-R7FJI6CG.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      TreemapTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "TreemapTokenBuilder");
        }
        static {
          __name2(this, "TreemapTokenBuilder");
        }
        constructor() {
          super(["treemap"]);
        }
      };
      classDefRegex = /classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/;
      TreemapValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "TreemapValueConverter");
        }
        static {
          __name2(this, "TreemapValueConverter");
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name === "NUMBER2") {
            return parseFloat(input.replace(/,/g, ""));
          } else if (rule.name === "SEPARATOR") {
            return input.substring(1, input.length - 1);
          } else if (rule.name === "STRING2") {
            return input.substring(1, input.length - 1);
          } else if (rule.name === "INDENTATION") {
            return input.length;
          } else if (rule.name === "ClassDef") {
            if (typeof input !== "string") {
              return input;
            }
            const match3 = classDefRegex.exec(input);
            if (match3) {
              return {
                $type: "ClassDefStatement",
                className: match3[1],
                styleText: match3[2] || void 0
              };
            }
          }
          return void 0;
        }
      };
      __name(registerValidationChecks, "registerValidationChecks");
      __name2(registerValidationChecks, "registerValidationChecks");
      TreemapValidator = class {
        static {
          __name(this, "TreemapValidator");
        }
        static {
          __name2(this, "TreemapValidator");
        }
        /**
         * Validates that a treemap has only one root node.
         * A root node is defined as a node that has no indentation.
         */
        checkSingleRoot(doc, accept) {
          let rootNodeIndentation;
          for (const row of doc.TreemapRows) {
            if (!row.item) {
              continue;
            }
            if (rootNodeIndentation === void 0 && // Check if this is a root node (no indentation)
            row.indent === void 0) {
              rootNodeIndentation = 0;
            } else if (row.indent === void 0) {
              accept("error", "Multiple root nodes are not allowed in a treemap.", {
                node: row,
                property: "item"
              });
            } else if (rootNodeIndentation !== void 0 && rootNodeIndentation >= parseInt(row.indent, 10)) {
              accept("error", "Multiple root nodes are not allowed in a treemap.", {
                node: row,
                property: "item"
              });
            }
          }
        }
      };
      TreemapModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new TreemapTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new TreemapValueConverter(), "ValueConverter")
        },
        validation: {
          TreemapValidator: /* @__PURE__ */ __name2(() => new TreemapValidator(), "TreemapValidator")
        }
      };
      __name(createTreemapServices, "createTreemapServices");
      __name2(createTreemapServices, "createTreemapServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-5FCAYU7R.mjs
  function createWardleyServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Wardley2 = inject(
      createDefaultCoreModule({ shared }),
      WardleyGrammarGeneratedModule,
      WardleyModule
    );
    shared.ServiceRegistry.register(Wardley2);
    return { shared, Wardley: Wardley2 };
  }
  var WardleyValueConverter, WardleyModule;
  var init_chunk_5FCAYU7R = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-5FCAYU7R.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      WardleyValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "WardleyValueConverter");
        }
        static {
          __name2(this, "WardleyValueConverter");
        }
        runCustomConverter(rule, input, _cstNode) {
          switch (rule.name.toUpperCase()) {
            case "LINK_LABEL":
              return input.substring(1).trim();
            default:
              return void 0;
          }
        }
      };
      WardleyModule = {
        parser: {
          ValueConverter: /* @__PURE__ */ __name2(() => new WardleyValueConverter(), "ValueConverter")
        }
      };
      __name(createWardleyServices, "createWardleyServices");
      __name2(createWardleyServices, "createWardleyServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-OSBZ3O6U.mjs
  function createCynefinServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Cynefin2 = inject(
      createDefaultCoreModule({ shared }),
      CynefinGrammarGeneratedModule,
      CynefinModule
    );
    shared.ServiceRegistry.register(Cynefin2);
    return { shared, Cynefin: Cynefin2 };
  }
  var CynefinTokenBuilder, CynefinModule;
  var init_chunk_OSBZ3O6U = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-OSBZ3O6U.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      CynefinTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "CynefinTokenBuilder");
        }
        static {
          __name2(this, "CynefinTokenBuilder");
        }
        constructor() {
          super(["cynefin-beta"]);
        }
      };
      CynefinModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new CynefinTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter")
        }
      };
      __name(createCynefinServices, "createCynefinServices");
      __name2(createCynefinServices, "createCynefinServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-CYSBUYHQ.mjs
  function createGitGraphServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const GitGraph2 = inject(
      createDefaultCoreModule({ shared }),
      GitGraphGrammarGeneratedModule,
      GitGraphModule
    );
    shared.ServiceRegistry.register(GitGraph2);
    return { shared, GitGraph: GitGraph2 };
  }
  var GitGraphTokenBuilder, GitGraphModule;
  var init_chunk_CYSBUYHQ = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-CYSBUYHQ.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      GitGraphTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "GitGraphTokenBuilder");
        }
        static {
          __name2(this, "GitGraphTokenBuilder");
        }
        constructor() {
          super(["gitGraph"]);
        }
      };
      GitGraphModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new GitGraphTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter")
        }
      };
      __name(createGitGraphServices, "createGitGraphServices");
      __name2(createGitGraphServices, "createGitGraphServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-BIQX33UG.mjs
  function createInfoServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Info2 = inject(
      createDefaultCoreModule({ shared }),
      InfoGrammarGeneratedModule,
      InfoModule
    );
    shared.ServiceRegistry.register(Info2);
    return { shared, Info: Info2 };
  }
  var InfoTokenBuilder, InfoModule;
  var init_chunk_BIQX33UG = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-BIQX33UG.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      InfoTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "InfoTokenBuilder");
        }
        static {
          __name2(this, "InfoTokenBuilder");
        }
        constructor() {
          super(["info", "showInfo"]);
        }
      };
      InfoModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new InfoTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter")
        }
      };
      __name(createInfoServices, "createInfoServices");
      __name2(createInfoServices, "createInfoServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-EMLP6XTP.mjs
  function createPacketServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Packet2 = inject(
      createDefaultCoreModule({ shared }),
      PacketGrammarGeneratedModule,
      PacketModule
    );
    shared.ServiceRegistry.register(Packet2);
    return { shared, Packet: Packet2 };
  }
  var PacketTokenBuilder, PacketModule;
  var init_chunk_EMLP6XTP = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-EMLP6XTP.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      PacketTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "PacketTokenBuilder");
        }
        static {
          __name2(this, "PacketTokenBuilder");
        }
        constructor() {
          super(["packet"]);
        }
      };
      PacketModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new PacketTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter")
        }
      };
      __name(createPacketServices, "createPacketServices");
      __name2(createPacketServices, "createPacketServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-YOTPTUD7.mjs
  function createPieServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Pie2 = inject(
      createDefaultCoreModule({ shared }),
      PieGrammarGeneratedModule,
      PieModule
    );
    shared.ServiceRegistry.register(Pie2);
    return { shared, Pie: Pie2 };
  }
  var PieTokenBuilder, PieValueConverter, PieModule;
  var init_chunk_YOTPTUD7 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-YOTPTUD7.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      PieTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "PieTokenBuilder");
        }
        static {
          __name2(this, "PieTokenBuilder");
        }
        constructor() {
          super(["pie", "showData"]);
        }
      };
      PieValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "PieValueConverter");
        }
        static {
          __name2(this, "PieValueConverter");
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name !== "PIE_SECTION_LABEL") {
            return void 0;
          }
          return input.replace(/"/g, "").trim();
        }
      };
      PieModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new PieTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new PieValueConverter(), "ValueConverter")
        }
      };
      __name(createPieServices, "createPieServices");
      __name2(createPieServices, "createPieServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-CQNSW5MT.mjs
  function createTreeViewServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const TreeView2 = inject(
      createDefaultCoreModule({ shared }),
      TreeViewGrammarGeneratedModule,
      TreeViewModule
    );
    shared.ServiceRegistry.register(TreeView2);
    return { shared, TreeView: TreeView2 };
  }
  var TreeViewValueConverter, TreeViewTokenBuilder, TreeViewModule;
  var init_chunk_CQNSW5MT = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-CQNSW5MT.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      TreeViewValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "TreeViewValueConverter");
        }
        static {
          __name2(this, "TreeViewValueConverter");
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name === "INDENTATION") {
            return input?.length || 0;
          }
          if (rule.name === "QUOTED_NAME") {
            return input.substring(1, input.length - 1);
          }
          if (rule.name === "BARE_NAME") {
            return input.replace(/[\t ]+$/, "");
          }
          if (rule.name === "CLASS_ANNOTATION") {
            const trimmed = input.trim();
            return trimmed.substring(3).trim();
          }
          if (rule.name === "ICON_ANNOTATION") {
            const trimmed = input.trim();
            return trimmed.substring(5, trimmed.length - 1);
          }
          if (rule.name === "DESC_ANNOTATION") {
            const trimmed = input.trim();
            return trimmed.substring(2).trim();
          }
          return void 0;
        }
      };
      TreeViewTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "TreeViewTokenBuilder");
        }
        static {
          __name2(this, "TreeViewTokenBuilder");
        }
        constructor() {
          super(["treeView-beta"]);
        }
      };
      TreeViewModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new TreeViewTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new TreeViewValueConverter(), "ValueConverter")
        }
      };
      __name(createTreeViewServices, "createTreeViewServices");
      __name2(createTreeViewServices, "createTreeViewServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-MOZMSUNE.mjs
  function createArchitectureServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const Architecture2 = inject(
      createDefaultCoreModule({ shared }),
      ArchitectureGrammarGeneratedModule,
      ArchitectureModule
    );
    shared.ServiceRegistry.register(Architecture2);
    return { shared, Architecture: Architecture2 };
  }
  var ArchitectureTokenBuilder, ArchitectureValueConverter, ArchitectureModule;
  var init_chunk_MOZMSUNE = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-MOZMSUNE.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      ArchitectureTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "ArchitectureTokenBuilder");
        }
        static {
          __name2(this, "ArchitectureTokenBuilder");
        }
        constructor() {
          super(["architecture"]);
        }
      };
      ArchitectureValueConverter = class extends AbstractMermaidValueConverter {
        static {
          __name(this, "ArchitectureValueConverter");
        }
        static {
          __name2(this, "ArchitectureValueConverter");
        }
        runCustomConverter(rule, input, _cstNode) {
          if (rule.name === "ARCH_ICON") {
            return input.replace(/[()]/g, "").trim();
          } else if (rule.name === "ARCH_TEXT_ICON") {
            return input.replace(/["()]/g, "");
          } else if (rule.name === "ARCH_TITLE") {
            let result = input.replace(/^\[|]$/g, "").trim();
            if (result.startsWith('"') && result.endsWith('"') || result.startsWith("'") && result.endsWith("'")) {
              result = result.slice(1, -1);
              result = result.replace(/\\"/g, '"').replace(/\\'/g, "'");
            }
            return result.trim();
          }
          return void 0;
        }
      };
      ArchitectureModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new ArchitectureTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new ArchitectureValueConverter(), "ValueConverter")
        }
      };
      __name(createArchitectureServices, "createArchitectureServices");
      __name2(createArchitectureServices, "createArchitectureServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/chunk-5JV3BV7I.mjs
  function registerValidationChecks2(services) {
    const validator = services.validation.EventModelingValidator;
    const registry = services.validation.ValidationRegistry;
    if (registry) {
      const checks = {
        EmTimeFrame: validator.checkSourceFrameTypes.bind(validator),
        EmResetFrame: validator.checkSourceFrameTypes.bind(validator)
      };
      registry.register(checks, validator);
    }
  }
  function createEventModelingServices(context = EmptyFileSystem) {
    const shared = inject(
      createDefaultSharedCoreModule(context),
      MermaidGeneratedSharedModule
    );
    const EventModel2 = inject(
      createDefaultCoreModule({ shared }),
      EventModelingGeneratedModule,
      EventModelingModule
    );
    shared.ServiceRegistry.register(EventModel2);
    registerValidationChecks2(EventModel2);
    return { shared, EventModel: EventModel2 };
  }
  var EventModelingTokenBuilder, COMMAND_TYPES, EVENT_TYPES, READMODEL_TYPES, PROCESSOR_TYPES, UI_TYPES, EventModelingValidator, EventModelingModule;
  var init_chunk_5JV3BV7I = __esm({
    "../parser/dist/chunks/mermaid-parser.core/chunk-5JV3BV7I.mjs"() {
      "use strict";
      init_chunk_KEIR6QF5();
      EventModelingTokenBuilder = class extends AbstractMermaidTokenBuilder {
        static {
          __name(this, "EventModelingTokenBuilder");
        }
        static {
          __name2(this, "EventModelingTokenBuilder");
        }
        constructor() {
          super(["eventmodeling"]);
        }
      };
      COMMAND_TYPES = /* @__PURE__ */ new Set(["cmd", "command"]);
      EVENT_TYPES = /* @__PURE__ */ new Set(["evt", "event"]);
      READMODEL_TYPES = /* @__PURE__ */ new Set(["rmo", "readmodel"]);
      PROCESSOR_TYPES = /* @__PURE__ */ new Set(["pcr", "processor"]);
      UI_TYPES = /* @__PURE__ */ new Set(["ui"]);
      __name(registerValidationChecks2, "registerValidationChecks");
      __name2(registerValidationChecks2, "registerValidationChecks");
      EventModelingValidator = class {
        static {
          __name(this, "EventModelingValidator");
        }
        static {
          __name2(this, "EventModelingValidator");
        }
        checkSourceFrameTypes(frame2, accept) {
          if (frame2.sourceFrames.length === 0) {
            return;
          }
          if (COMMAND_TYPES.has(frame2.modelEntityType)) {
            this.validateSources(
              frame2,
              /* @__PURE__ */ new Set([...UI_TYPES, ...PROCESSOR_TYPES]),
              "command",
              "ui or processor",
              accept
            );
          } else if (EVENT_TYPES.has(frame2.modelEntityType)) {
            this.validateSources(frame2, COMMAND_TYPES, "event", "command", accept);
          } else if (READMODEL_TYPES.has(frame2.modelEntityType)) {
            this.validateSources(frame2, EVENT_TYPES, "read model", "event", accept);
          } else if (PROCESSOR_TYPES.has(frame2.modelEntityType)) {
            this.validateSources(frame2, READMODEL_TYPES, "processor", "read model", accept);
          } else if (UI_TYPES.has(frame2.modelEntityType)) {
            this.validateSources(frame2, READMODEL_TYPES, "ui", "read model", accept);
          }
        }
        validateSources(frame2, allowedSourceTypes, targetLabel, expectedSourceLabel, accept) {
          for (const sourceRef of frame2.sourceFrames) {
            const source = sourceRef.ref;
            if (source !== void 0 && !allowedSourceTypes.has(source.modelEntityType)) {
              accept(
                "error",
                `A ${targetLabel} can only receive input from a ${expectedSourceLabel}, not from '${source.modelEntityType}'.`,
                { node: frame2, property: "sourceFrames" }
              );
            }
          }
        }
      };
      EventModelingModule = {
        parser: {
          TokenBuilder: /* @__PURE__ */ __name2(() => new EventModelingTokenBuilder(), "TokenBuilder"),
          ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter")
        },
        validation: {
          EventModelingValidator: /* @__PURE__ */ __name2(() => new EventModelingValidator(), "EventModelingValidator")
        }
      };
      __name(createEventModelingServices, "createEventModelingServices");
      __name2(createEventModelingServices, "createEventModelingServices");
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/info-DKCQHKI2.mjs
  var info_DKCQHKI2_exports = {};
  __export(info_DKCQHKI2_exports, {
    InfoModule: () => InfoModule,
    createInfoServices: () => createInfoServices
  });
  var init_info_DKCQHKI2 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/info-DKCQHKI2.mjs"() {
      "use strict";
      init_chunk_BIQX33UG();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/packet-7NZHBO7P.mjs
  var packet_7NZHBO7P_exports = {};
  __export(packet_7NZHBO7P_exports, {
    PacketModule: () => PacketModule,
    createPacketServices: () => createPacketServices
  });
  var init_packet_7NZHBO7P = __esm({
    "../parser/dist/chunks/mermaid-parser.core/packet-7NZHBO7P.mjs"() {
      "use strict";
      init_chunk_EMLP6XTP();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/pie-RZYD4A2V.mjs
  var pie_RZYD4A2V_exports = {};
  __export(pie_RZYD4A2V_exports, {
    PieModule: () => PieModule,
    createPieServices: () => createPieServices
  });
  var init_pie_RZYD4A2V = __esm({
    "../parser/dist/chunks/mermaid-parser.core/pie-RZYD4A2V.mjs"() {
      "use strict";
      init_chunk_YOTPTUD7();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/treeView-QDETBFTQ.mjs
  var treeView_QDETBFTQ_exports = {};
  __export(treeView_QDETBFTQ_exports, {
    TreeViewModule: () => TreeViewModule,
    createTreeViewServices: () => createTreeViewServices
  });
  var init_treeView_QDETBFTQ = __esm({
    "../parser/dist/chunks/mermaid-parser.core/treeView-QDETBFTQ.mjs"() {
      "use strict";
      init_chunk_CQNSW5MT();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/architecture-TIHT7OUA.mjs
  var architecture_TIHT7OUA_exports = {};
  __export(architecture_TIHT7OUA_exports, {
    ArchitectureModule: () => ArchitectureModule,
    createArchitectureServices: () => createArchitectureServices
  });
  var init_architecture_TIHT7OUA = __esm({
    "../parser/dist/chunks/mermaid-parser.core/architecture-TIHT7OUA.mjs"() {
      "use strict";
      init_chunk_MOZMSUNE();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/gitGraph-TEB2WS4Q.mjs
  var gitGraph_TEB2WS4Q_exports = {};
  __export(gitGraph_TEB2WS4Q_exports, {
    GitGraphModule: () => GitGraphModule,
    createGitGraphServices: () => createGitGraphServices
  });
  var init_gitGraph_TEB2WS4Q = __esm({
    "../parser/dist/chunks/mermaid-parser.core/gitGraph-TEB2WS4Q.mjs"() {
      "use strict";
      init_chunk_CYSBUYHQ();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/eventmodeling-45OFAUF4.mjs
  var eventmodeling_45OFAUF4_exports = {};
  __export(eventmodeling_45OFAUF4_exports, {
    EventModelingModule: () => EventModelingModule,
    createEventModelingServices: () => createEventModelingServices
  });
  var init_eventmodeling_45OFAUF4 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/eventmodeling-45OFAUF4.mjs"() {
      "use strict";
      init_chunk_5JV3BV7I();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/radar-I7S5WNFK.mjs
  var radar_I7S5WNFK_exports = {};
  __export(radar_I7S5WNFK_exports, {
    RadarModule: () => RadarModule,
    createRadarServices: () => createRadarServices
  });
  var init_radar_I7S5WNFK = __esm({
    "../parser/dist/chunks/mermaid-parser.core/radar-I7S5WNFK.mjs"() {
      "use strict";
      init_chunk_QBLGF6JB();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/railroad-3IZDKUUU.mjs
  var railroad_3IZDKUUU_exports = {};
  __export(railroad_3IZDKUUU_exports, {
    RailroadModule: () => RailroadModule,
    createRailroadServices: () => createRailroadServices
  });
  var init_railroad_3IZDKUUU = __esm({
    "../parser/dist/chunks/mermaid-parser.core/railroad-3IZDKUUU.mjs"() {
      "use strict";
      init_chunk_5TONJI2A();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/railroad-ebnf-EBAXGLYW.mjs
  var railroad_ebnf_EBAXGLYW_exports = {};
  __export(railroad_ebnf_EBAXGLYW_exports, {
    RailroadEbnfModule: () => RailroadEbnfModule,
    createRailroadEbnfServices: () => createRailroadEbnfServices
  });
  var init_railroad_ebnf_EBAXGLYW = __esm({
    "../parser/dist/chunks/mermaid-parser.core/railroad-ebnf-EBAXGLYW.mjs"() {
      "use strict";
      init_chunk_U6XO7XAA();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/railroad-abnf-AHOZXSZD.mjs
  var railroad_abnf_AHOZXSZD_exports = {};
  __export(railroad_abnf_AHOZXSZD_exports, {
    RailroadAbnfModule: () => RailroadAbnfModule,
    createRailroadAbnfServices: () => createRailroadAbnfServices
  });
  var init_railroad_abnf_AHOZXSZD = __esm({
    "../parser/dist/chunks/mermaid-parser.core/railroad-abnf-AHOZXSZD.mjs"() {
      "use strict";
      init_chunk_5HE753X5();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/railroad-peg-LSFZ7HO6.mjs
  var railroad_peg_LSFZ7HO6_exports = {};
  __export(railroad_peg_LSFZ7HO6_exports, {
    RailroadPegModule: () => RailroadPegModule,
    createRailroadPegServices: () => createRailroadPegServices
  });
  var init_railroad_peg_LSFZ7HO6 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/railroad-peg-LSFZ7HO6.mjs"() {
      "use strict";
      init_chunk_JG7HCLWE();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/treemap-6X3UGDF4.mjs
  var treemap_6X3UGDF4_exports = {};
  __export(treemap_6X3UGDF4_exports, {
    TreemapModule: () => TreemapModule,
    createTreemapServices: () => createTreemapServices
  });
  var init_treemap_6X3UGDF4 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/treemap-6X3UGDF4.mjs"() {
      "use strict";
      init_chunk_R7FJI6CG();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/wardley-OPB4EBWU.mjs
  var wardley_OPB4EBWU_exports = {};
  __export(wardley_OPB4EBWU_exports, {
    WardleyModule: () => WardleyModule,
    createWardleyServices: () => createWardleyServices
  });
  var init_wardley_OPB4EBWU = __esm({
    "../parser/dist/chunks/mermaid-parser.core/wardley-OPB4EBWU.mjs"() {
      "use strict";
      init_chunk_5FCAYU7R();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/chunks/mermaid-parser.core/cynefin-VYW2F7L2.mjs
  var cynefin_VYW2F7L2_exports = {};
  __export(cynefin_VYW2F7L2_exports, {
    CynefinModule: () => CynefinModule,
    createCynefinServices: () => createCynefinServices
  });
  var init_cynefin_VYW2F7L2 = __esm({
    "../parser/dist/chunks/mermaid-parser.core/cynefin-VYW2F7L2.mjs"() {
      "use strict";
      init_chunk_OSBZ3O6U();
      init_chunk_KEIR6QF5();
    }
  });

  // ../parser/dist/mermaid-parser.core.mjs
  async function parse3(diagramType, text4) {
    const initializer = initializers[diagramType];
    if (!initializer) {
      throw new Error(`Unknown diagram type: ${diagramType}`);
    }
    if (!parsers[diagramType]) {
      await initializer();
    }
    const parser34 = parsers[diagramType];
    const result = parser34.parse(text4);
    if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {
      throw new MermaidParseError(result);
    }
    return result.value;
  }
  var parsers, initializers, MermaidParseError;
  var init_mermaid_parser_core = __esm({
    "../parser/dist/mermaid-parser.core.mjs"() {
      "use strict";
      init_chunk_QBLGF6JB();
      init_chunk_5TONJI2A();
      init_chunk_U6XO7XAA();
      init_chunk_5HE753X5();
      init_chunk_JG7HCLWE();
      init_chunk_R7FJI6CG();
      init_chunk_5FCAYU7R();
      init_chunk_OSBZ3O6U();
      init_chunk_CYSBUYHQ();
      init_chunk_BIQX33UG();
      init_chunk_EMLP6XTP();
      init_chunk_YOTPTUD7();
      init_chunk_CQNSW5MT();
      init_chunk_MOZMSUNE();
      init_chunk_5JV3BV7I();
      init_chunk_KEIR6QF5();
      parsers = {};
      initializers = {
        info: /* @__PURE__ */ __name2(async () => {
          const { createInfoServices: createInfoServices2 } = await Promise.resolve().then(() => (init_info_DKCQHKI2(), info_DKCQHKI2_exports));
          const parser34 = createInfoServices2().Info.parser.LangiumParser;
          parsers.info = parser34;
        }, "info"),
        packet: /* @__PURE__ */ __name2(async () => {
          const { createPacketServices: createPacketServices2 } = await Promise.resolve().then(() => (init_packet_7NZHBO7P(), packet_7NZHBO7P_exports));
          const parser34 = createPacketServices2().Packet.parser.LangiumParser;
          parsers.packet = parser34;
        }, "packet"),
        pie: /* @__PURE__ */ __name2(async () => {
          const { createPieServices: createPieServices2 } = await Promise.resolve().then(() => (init_pie_RZYD4A2V(), pie_RZYD4A2V_exports));
          const parser34 = createPieServices2().Pie.parser.LangiumParser;
          parsers.pie = parser34;
        }, "pie"),
        treeView: /* @__PURE__ */ __name2(async () => {
          const { createTreeViewServices: createTreeViewServices2 } = await Promise.resolve().then(() => (init_treeView_QDETBFTQ(), treeView_QDETBFTQ_exports));
          const parser34 = createTreeViewServices2().TreeView.parser.LangiumParser;
          parsers.treeView = parser34;
        }, "treeView"),
        architecture: /* @__PURE__ */ __name2(async () => {
          const { createArchitectureServices: createArchitectureServices2 } = await Promise.resolve().then(() => (init_architecture_TIHT7OUA(), architecture_TIHT7OUA_exports));
          const parser34 = createArchitectureServices2().Architecture.parser.LangiumParser;
          parsers.architecture = parser34;
        }, "architecture"),
        gitGraph: /* @__PURE__ */ __name2(async () => {
          const { createGitGraphServices: createGitGraphServices2 } = await Promise.resolve().then(() => (init_gitGraph_TEB2WS4Q(), gitGraph_TEB2WS4Q_exports));
          const parser34 = createGitGraphServices2().GitGraph.parser.LangiumParser;
          parsers.gitGraph = parser34;
        }, "gitGraph"),
        eventmodeling: /* @__PURE__ */ __name2(async () => {
          const { createEventModelingServices: createEventModelingServices2 } = await Promise.resolve().then(() => (init_eventmodeling_45OFAUF4(), eventmodeling_45OFAUF4_exports));
          const parser34 = createEventModelingServices2().EventModel.parser.LangiumParser;
          parsers.eventmodeling = parser34;
        }, "eventmodeling"),
        radar: /* @__PURE__ */ __name2(async () => {
          const { createRadarServices: createRadarServices2 } = await Promise.resolve().then(() => (init_radar_I7S5WNFK(), radar_I7S5WNFK_exports));
          const parser34 = createRadarServices2().Radar.parser.LangiumParser;
          parsers.radar = parser34;
        }, "radar"),
        railroad: /* @__PURE__ */ __name2(async () => {
          const { createRailroadServices: createRailroadServices2 } = await Promise.resolve().then(() => (init_railroad_3IZDKUUU(), railroad_3IZDKUUU_exports));
          const parser34 = createRailroadServices2().Railroad.parser.LangiumParser;
          parsers.railroad = parser34;
        }, "railroad"),
        railroadEbnf: /* @__PURE__ */ __name2(async () => {
          const { createRailroadEbnfServices: createRailroadEbnfServices2 } = await Promise.resolve().then(() => (init_railroad_ebnf_EBAXGLYW(), railroad_ebnf_EBAXGLYW_exports));
          const parser34 = createRailroadEbnfServices2().RailroadEbnf.parser.LangiumParser;
          parsers.railroadEbnf = parser34;
        }, "railroadEbnf"),
        railroadAbnf: /* @__PURE__ */ __name2(async () => {
          const { createRailroadAbnfServices: createRailroadAbnfServices2 } = await Promise.resolve().then(() => (init_railroad_abnf_AHOZXSZD(), railroad_abnf_AHOZXSZD_exports));
          const parser34 = createRailroadAbnfServices2().RailroadAbnf.parser.LangiumParser;
          parsers.railroadAbnf = parser34;
        }, "railroadAbnf"),
        railroadPeg: /* @__PURE__ */ __name2(async () => {
          const { createRailroadPegServices: createRailroadPegServices2 } = await Promise.resolve().then(() => (init_railroad_peg_LSFZ7HO6(), railroad_peg_LSFZ7HO6_exports));
          const parser34 = createRailroadPegServices2().RailroadPeg.parser.LangiumParser;
          parsers.railroadPeg = parser34;
        }, "railroadPeg"),
        treemap: /* @__PURE__ */ __name2(async () => {
          const { createTreemapServices: createTreemapServices2 } = await Promise.resolve().then(() => (init_treemap_6X3UGDF4(), treemap_6X3UGDF4_exports));
          const parser34 = createTreemapServices2().Treemap.parser.LangiumParser;
          parsers.treemap = parser34;
        }, "treemap"),
        wardley: /* @__PURE__ */ __name2(async () => {
          const { createWardleyServices: createWardleyServices2 } = await Promise.resolve().then(() => (init_wardley_OPB4EBWU(), wardley_OPB4EBWU_exports));
          const parser34 = createWardleyServices2().Wardley.parser.LangiumParser;
          parsers.wardley = parser34;
        }, "wardley"),
        cynefin: /* @__PURE__ */ __name2(async () => {
          const { createCynefinServices: createCynefinServices2 } = await Promise.resolve().then(() => (init_cynefin_VYW2F7L2(), cynefin_VYW2F7L2_exports));
          const parser34 = createCynefinServices2().Cynefin.parser.LangiumParser;
          parsers.cynefin = parser34;
        }, "cynefin")
      };
      __name(parse3, "parse");
      __name2(parse3, "parse");
      MermaidParseError = class extends Error {
        static {
          __name(this, "MermaidParseError");
        }
        constructor(result) {
          const lexerErrors = result.lexerErrors.map((err) => {
            const line2 = err.line !== void 0 && !isNaN(err.line) ? err.line : "?";
            const column2 = err.column !== void 0 && !isNaN(err.column) ? err.column : "?";
            return `Lexer error on line ${line2}, column ${column2}: ${err.message}`;
          }).join("\n");
          const parserErrors = result.parserErrors.map((err) => {
            const line2 = err.token.startLine !== void 0 && !isNaN(err.token.startLine) ? err.token.startLine : "?";
            const column2 = err.token.startColumn !== void 0 && !isNaN(err.token.startColumn) ? err.token.startColumn : "?";
            return `Parse error on line ${line2}, column ${column2}: ${err.message}`;
          }).join("\n");
          super(`Parsing failed: ${lexerErrors} ${parserErrors}`);
          this.result = result;
        }
        static {
          __name2(this, "MermaidParseError");
        }
      };
    }
  });

  // src/diagrams/common/populateCommonDb.ts
  function populateCommonDb(ast, db12) {
    if (ast.accDescr) {
      db12.setAccDescription?.(ast.accDescr);
    }
    if (ast.accTitle) {
      db12.setAccTitle?.(ast.accTitle);
    }
    if (ast.title) {
      db12.setDiagramTitle?.(ast.title);
    }
  }
  var init_populateCommonDb = __esm({
    "src/diagrams/common/populateCommonDb.ts"() {
      "use strict";
      __name(populateCommonDb, "populateCommonDb");
    }
  });

  // src/diagrams/git/gitGraphTypes.ts
  var commitType;
  var init_gitGraphTypes = __esm({
    "src/diagrams/git/gitGraphTypes.ts"() {
      "use strict";
      commitType = {
        NORMAL: 0,
        REVERSE: 1,
        HIGHLIGHT: 2,
        MERGE: 3,
        CHERRY_PICK: 4
      };
    }
  });

  // src/utils/imperativeState.ts
  var ImperativeState;
  var init_imperativeState = __esm({
    "src/utils/imperativeState.ts"() {
      "use strict";
      ImperativeState = class {
        /**
         * @param init - Function that creates the default state.
         */
        constructor(init3) {
          this.init = init3;
          this.records = this.init();
        }
        static {
          __name(this, "ImperativeState");
        }
        reset() {
          this.records = this.init();
        }
      };
    }
  });

  // src/diagrams/git/gitGraphAst.ts
  function getID() {
    return random({ length: 7 });
  }
  function uniqBy2(list, fn3) {
    const recordMap = /* @__PURE__ */ Object.create(null);
    return list.reduce((out, item) => {
      const key = fn3(item);
      if (!recordMap[key]) {
        recordMap[key] = true;
        out.push(item);
      }
      return out;
    }, []);
  }
  function upsert(arr, key, newVal) {
    const index = arr.indexOf(key);
    if (index === -1) {
      arr.push(newVal);
    } else {
      arr.splice(index, 1, newVal);
    }
  }
  function prettyPrintCommitHistory(commitArr) {
    const commit2 = commitArr.reduce((out, commit3) => {
      if (out.seq > commit3.seq) {
        return out;
      }
      return commit3;
    }, commitArr[0]);
    let line2 = "";
    commitArr.forEach(function(c3) {
      if (c3 === commit2) {
        line2 += "	*";
      } else {
        line2 += "	|";
      }
    });
    const label = [line2, commit2.id, commit2.seq];
    for (const branch2 in state2.records.branches) {
      if (state2.records.branches.get(branch2) === commit2.id) {
        label.push(branch2);
      }
    }
    log.debug(label.join(" "));
    if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) {
      const newCommit = state2.records.commits.get(commit2.parents[0]);
      upsert(commitArr, commit2, newCommit);
      if (commit2.parents[1]) {
        commitArr.push(state2.records.commits.get(commit2.parents[1]));
      }
    } else if (commit2.parents.length == 0) {
      return;
    } else {
      if (commit2.parents[0]) {
        const newCommit = state2.records.commits.get(commit2.parents[0]);
        upsert(commitArr, commit2, newCommit);
      }
    }
    commitArr = uniqBy2(commitArr, (c3) => c3.id);
    prettyPrintCommitHistory(commitArr);
  }
  var DEFAULT_GITGRAPH_CONFIG, getConfig3, state2, setDirection, setOptions6, getOptions, commit, branch, merge5, cherryPick, checkout, prettyPrint, clear7, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection, getHead, db;
  var init_gitGraphAst = __esm({
    "src/diagrams/git/gitGraphAst.ts"() {
      "use strict";
      init_logger();
      init_utils2();
      init_config();
      init_common();
      init_commonDb();
      init_gitGraphTypes();
      init_imperativeState();
      init_defaultConfig();
      DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph;
      getConfig3 = /* @__PURE__ */ __name(() => {
        const config3 = cleanAndMerge({
          ...DEFAULT_GITGRAPH_CONFIG,
          ...getConfig().gitGraph
        });
        return config3;
      }, "getConfig");
      state2 = new ImperativeState(() => {
        const config3 = getConfig3();
        const mainBranchName = config3.mainBranchName;
        const mainBranchOrder = config3.mainBranchOrder;
        return {
          mainBranchName,
          commits: /* @__PURE__ */ new Map(),
          head: null,
          branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),
          branches: /* @__PURE__ */ new Map([[mainBranchName, null]]),
          currBranch: mainBranchName,
          direction: "LR",
          seq: 0,
          options: {}
        };
      });
      __name(getID, "getID");
      __name(uniqBy2, "uniqBy");
      setDirection = /* @__PURE__ */ __name(function(dir2) {
        state2.records.direction = dir2;
      }, "setDirection");
      setOptions6 = /* @__PURE__ */ __name(function(rawOptString) {
        log.debug("options str", rawOptString);
        rawOptString = rawOptString?.trim();
        rawOptString = rawOptString || "{}";
        try {
          state2.records.options = JSON.parse(rawOptString);
        } catch (e3) {
          log.error("error while parsing gitGraph options", e3.message);
        }
      }, "setOptions");
      getOptions = /* @__PURE__ */ __name(function() {
        return state2.records.options;
      }, "getOptions");
      commit = /* @__PURE__ */ __name(function(commitDB) {
        let msg = commitDB.msg;
        let id41 = commitDB.id;
        const type3 = commitDB.type;
        let tags2 = commitDB.tags;
        log.info("commit", msg, id41, type3, tags2);
        log.debug("Entering commit:", msg, id41, type3, tags2);
        const config3 = getConfig3();
        id41 = common_default.sanitizeText(id41, config3);
        msg = common_default.sanitizeText(msg, config3);
        tags2 = tags2?.map((tag) => common_default.sanitizeText(tag, config3));
        const newCommit = {
          id: id41 ? id41 : state2.records.seq + "-" + getID(),
          message: msg,
          seq: state2.records.seq++,
          type: type3 ?? commitType.NORMAL,
          tags: tags2 ?? [],
          parents: state2.records.head == null ? [] : [state2.records.head.id],
          branch: state2.records.currBranch
        };
        state2.records.head = newCommit;
        log.info("main branch", config3.mainBranchName);
        if (state2.records.commits.has(newCommit.id)) {
          log.warn(`Commit ID ${newCommit.id} already exists`);
        }
        state2.records.commits.set(newCommit.id, newCommit);
        state2.records.branches.set(state2.records.currBranch, newCommit.id);
        log.debug("in pushCommit " + newCommit.id);
      }, "commit");
      branch = /* @__PURE__ */ __name(function(branchDB) {
        let name = branchDB.name;
        const order2 = branchDB.order;
        name = common_default.sanitizeText(name, getConfig3());
        if (state2.records.branches.has(name)) {
          throw new Error(
            `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${name}")`
          );
        }
        state2.records.branches.set(name, state2.records.head != null ? state2.records.head.id : null);
        state2.records.branchConfig.set(name, { name, order: order2 });
        checkout(name);
        log.debug("in createBranch");
      }, "branch");
      merge5 = /* @__PURE__ */ __name((mergeDB) => {
        let otherBranch = mergeDB.branch;
        let customId = mergeDB.id;
        const overrideType = mergeDB.type;
        const customTags = mergeDB.tags;
        const config3 = getConfig3();
        otherBranch = common_default.sanitizeText(otherBranch, config3);
        if (customId) {
          customId = common_default.sanitizeText(customId, config3);
        }
        const currentBranchCheck = state2.records.branches.get(state2.records.currBranch);
        const otherBranchCheck = state2.records.branches.get(otherBranch);
        const currentCommit = currentBranchCheck ? state2.records.commits.get(currentBranchCheck) : void 0;
        const otherCommit = otherBranchCheck ? state2.records.commits.get(otherBranchCheck) : void 0;
        if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {
          throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);
        }
        if (state2.records.currBranch === otherBranch) {
          const error3 = new Error('Incorrect usage of "merge". Cannot merge a branch to itself');
          error3.hash = {
            text: `merge ${otherBranch}`,
            token: `merge ${otherBranch}`,
            expected: ["branch abc"]
          };
          throw error3;
        }
        if (currentCommit === void 0 || !currentCommit) {
          const error3 = new Error(
            `Incorrect usage of "merge". Current branch (${state2.records.currBranch})has no commits`
          );
          error3.hash = {
            text: `merge ${otherBranch}`,
            token: `merge ${otherBranch}`,
            expected: ["commit"]
          };
          throw error3;
        }
        if (!state2.records.branches.has(otherBranch)) {
          const error3 = new Error(
            'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist"
          );
          error3.hash = {
            text: `merge ${otherBranch}`,
            token: `merge ${otherBranch}`,
            expected: [`branch ${otherBranch}`]
          };
          throw error3;
        }
        if (otherCommit === void 0 || !otherCommit) {
          const error3 = new Error(
            'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits"
          );
          error3.hash = {
            text: `merge ${otherBranch}`,
            token: `merge ${otherBranch}`,
            expected: ['"commit"']
          };
          throw error3;
        }
        if (currentCommit === otherCommit) {
          const error3 = new Error('Incorrect usage of "merge". Both branches have same head');
          error3.hash = {
            text: `merge ${otherBranch}`,
            token: `merge ${otherBranch}`,
            expected: ["branch abc"]
          };
          throw error3;
        }
        if (customId && state2.records.commits.has(customId)) {
          const error3 = new Error(
            'Incorrect usage of "merge". Commit with id:' + customId + " already exists, use different custom id"
          );
          error3.hash = {
            text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(" ")}`,
            token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(" ")}`,
            expected: [
              `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(" ")}`
            ]
          };
          throw error3;
        }
        const verifiedBranch = otherBranchCheck ? otherBranchCheck : "";
        const commit2 = {
          id: customId || `${state2.records.seq}-${getID()}`,
          message: `merged branch ${otherBranch} into ${state2.records.currBranch}`,
          seq: state2.records.seq++,
          parents: state2.records.head == null ? [] : [state2.records.head.id, verifiedBranch],
          branch: state2.records.currBranch,
          type: commitType.MERGE,
          customType: overrideType,
          customId: customId ? true : false,
          tags: customTags ?? []
        };
        state2.records.head = commit2;
        state2.records.commits.set(commit2.id, commit2);
        state2.records.branches.set(state2.records.currBranch, commit2.id);
        log.debug(state2.records.branches);
        log.debug("in mergeBranch");
      }, "merge");
      cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) {
        let sourceId = cherryPickDB.id;
        let targetId = cherryPickDB.targetId;
        let tags2 = cherryPickDB.tags;
        let parentCommitId = cherryPickDB.parent;
        log.debug("Entering cherryPick:", sourceId, targetId, tags2);
        const config3 = getConfig3();
        sourceId = common_default.sanitizeText(sourceId, config3);
        targetId = common_default.sanitizeText(targetId, config3);
        tags2 = tags2?.map((tag) => common_default.sanitizeText(tag, config3));
        parentCommitId = common_default.sanitizeText(parentCommitId, config3);
        if (!sourceId || !state2.records.commits.has(sourceId)) {
          const error3 = new Error(
            'Incorrect usage of "cherryPick". Source commit id should exist and provided'
          );
          error3.hash = {
            text: `cherryPick ${sourceId} ${targetId}`,
            token: `cherryPick ${sourceId} ${targetId}`,
            expected: ["cherry-pick abc"]
          };
          throw error3;
        }
        const sourceCommit = state2.records.commits.get(sourceId);
        if (sourceCommit === void 0 || !sourceCommit) {
          throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');
        }
        if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) {
          const error3 = new Error(
            "Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit."
          );
          throw error3;
        }
        const sourceCommitBranch = sourceCommit.branch;
        if (sourceCommit.type === commitType.MERGE && !parentCommitId) {
          const error3 = new Error(
            "Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified."
          );
          throw error3;
        }
        if (!targetId || !state2.records.commits.has(targetId)) {
          if (sourceCommitBranch === state2.records.currBranch) {
            const error3 = new Error(
              'Incorrect usage of "cherryPick". Source commit is already on current branch'
            );
            error3.hash = {
              text: `cherryPick ${sourceId} ${targetId}`,
              token: `cherryPick ${sourceId} ${targetId}`,
              expected: ["cherry-pick abc"]
            };
            throw error3;
          }
          const currentCommitId = state2.records.branches.get(state2.records.currBranch);
          if (currentCommitId === void 0 || !currentCommitId) {
            const error3 = new Error(
              `Incorrect usage of "cherry-pick". Current branch (${state2.records.currBranch})has no commits`
            );
            error3.hash = {
              text: `cherryPick ${sourceId} ${targetId}`,
              token: `cherryPick ${sourceId} ${targetId}`,
              expected: ["cherry-pick abc"]
            };
            throw error3;
          }
          const currentCommit = state2.records.commits.get(currentCommitId);
          if (currentCommit === void 0 || !currentCommit) {
            const error3 = new Error(
              `Incorrect usage of "cherry-pick". Current branch (${state2.records.currBranch})has no commits`
            );
            error3.hash = {
              text: `cherryPick ${sourceId} ${targetId}`,
              token: `cherryPick ${sourceId} ${targetId}`,
              expected: ["cherry-pick abc"]
            };
            throw error3;
          }
          const commit2 = {
            id: state2.records.seq + "-" + getID(),
            message: `cherry-picked ${sourceCommit?.message} into ${state2.records.currBranch}`,
            seq: state2.records.seq++,
            parents: state2.records.head == null ? [] : [state2.records.head.id, sourceCommit.id],
            branch: state2.records.currBranch,
            type: commitType.CHERRY_PICK,
            tags: tags2 ? tags2.filter(Boolean) : [
              `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : ""}`
            ]
          };
          state2.records.head = commit2;
          state2.records.commits.set(commit2.id, commit2);
          state2.records.branches.set(state2.records.currBranch, commit2.id);
          log.debug(state2.records.branches);
          log.debug("in cherryPick");
        }
      }, "cherryPick");
      checkout = /* @__PURE__ */ __name(function(branch2) {
        branch2 = common_default.sanitizeText(branch2, getConfig3());
        if (!state2.records.branches.has(branch2)) {
          const error3 = new Error(
            `Trying to checkout branch which is not yet created. (Help try using "branch ${branch2}")`
          );
          error3.hash = {
            text: `checkout ${branch2}`,
            token: `checkout ${branch2}`,
            expected: [`branch ${branch2}`]
          };
          throw error3;
        } else {
          state2.records.currBranch = branch2;
          const id41 = state2.records.branches.get(state2.records.currBranch);
          if (id41 === void 0 || !id41) {
            state2.records.head = null;
          } else {
            state2.records.head = state2.records.commits.get(id41) ?? null;
          }
        }
      }, "checkout");
      __name(upsert, "upsert");
      __name(prettyPrintCommitHistory, "prettyPrintCommitHistory");
      prettyPrint = /* @__PURE__ */ __name(function() {
        log.debug(state2.records.commits);
        const node2 = getCommitsArray()[0];
        prettyPrintCommitHistory([node2]);
      }, "prettyPrint");
      clear7 = /* @__PURE__ */ __name(function() {
        state2.reset();
        clear();
      }, "clear");
      getBranchesAsObjArray = /* @__PURE__ */ __name(function() {
        const branchesArray = [...state2.records.branchConfig.values()].map((branchConfig, i2) => {
          if (branchConfig.order !== null && branchConfig.order !== void 0) {
            return branchConfig;
          }
          return {
            ...branchConfig,
            order: parseFloat(`0.${i2}`)
          };
        }).sort((a2, b3) => (a2.order ?? 0) - (b3.order ?? 0)).map(({ name }) => ({ name }));
        return branchesArray;
      }, "getBranchesAsObjArray");
      getBranches = /* @__PURE__ */ __name(function() {
        return state2.records.branches;
      }, "getBranches");
      getCommits = /* @__PURE__ */ __name(function() {
        return state2.records.commits;
      }, "getCommits");
      getCommitsArray = /* @__PURE__ */ __name(function() {
        const commitArr = [...state2.records.commits.values()];
        commitArr.forEach(function(o2) {
          log.debug(o2.id);
        });
        commitArr.sort((a2, b3) => a2.seq - b3.seq);
        return commitArr;
      }, "getCommitsArray");
      getCurrentBranch = /* @__PURE__ */ __name(function() {
        return state2.records.currBranch;
      }, "getCurrentBranch");
      getDirection = /* @__PURE__ */ __name(function() {
        return state2.records.direction;
      }, "getDirection");
      getHead = /* @__PURE__ */ __name(function() {
        return state2.records.head;
      }, "getHead");
      db = {
        commitType,
        getConfig: getConfig3,
        setDirection,
        setOptions: setOptions6,
        getOptions,
        commit,
        branch,
        merge: merge5,
        cherryPick,
        checkout,
        //reset,
        prettyPrint,
        clear: clear7,
        getBranchesAsObjArray,
        getBranches,
        getCommits,
        getCommitsArray,
        getCurrentBranch,
        getDirection,
        getHead,
        setAccTitle,
        getAccTitle,
        getAccDescription,
        setAccDescription,
        setDiagramTitle,
        getDiagramTitle
      };
    }
  });

  // src/diagrams/git/gitGraphParser.ts
  var populate15, parseStatement, parseCommit, parseBranch, parseMerge, parseCheckout, parseCherryPicking, parser4;
  var init_gitGraphParser = __esm({
    "src/diagrams/git/gitGraphParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_gitGraphAst();
      init_gitGraphTypes();
      populate15 = /* @__PURE__ */ __name((ast, db12) => {
        populateCommonDb(ast, db12);
        if (ast.dir) {
          db12.setDirection(ast.dir);
        }
        for (const statement of ast.statements) {
          parseStatement(statement, db12);
        }
      }, "populate");
      parseStatement = /* @__PURE__ */ __name((statement, db12) => {
        const parsers2 = {
          Commit: /* @__PURE__ */ __name((stmt) => db12.commit(parseCommit(stmt)), "Commit"),
          Branch: /* @__PURE__ */ __name((stmt) => db12.branch(parseBranch(stmt)), "Branch"),
          Merge: /* @__PURE__ */ __name((stmt) => db12.merge(parseMerge(stmt)), "Merge"),
          Checkout: /* @__PURE__ */ __name((stmt) => db12.checkout(parseCheckout(stmt)), "Checkout"),
          CherryPicking: /* @__PURE__ */ __name((stmt) => db12.cherryPick(parseCherryPicking(stmt)), "CherryPicking")
        };
        const parser34 = parsers2[statement.$type];
        if (parser34) {
          parser34(statement);
        } else {
          log.error(`Unknown statement type: ${statement.$type}`);
        }
      }, "parseStatement");
      parseCommit = /* @__PURE__ */ __name((commit2) => {
        const commitDB = {
          id: commit2.id,
          msg: commit2.message ?? "",
          type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL,
          tags: commit2.tags ?? void 0
        };
        return commitDB;
      }, "parseCommit");
      parseBranch = /* @__PURE__ */ __name((branch2) => {
        const branchDB = {
          name: branch2.name,
          order: branch2.order ?? 0
        };
        return branchDB;
      }, "parseBranch");
      parseMerge = /* @__PURE__ */ __name((merge6) => {
        const mergeDB = {
          branch: merge6.branch,
          id: merge6.id ?? "",
          type: merge6.type !== void 0 ? commitType[merge6.type] : void 0,
          tags: merge6.tags ?? void 0
        };
        return mergeDB;
      }, "parseMerge");
      parseCheckout = /* @__PURE__ */ __name((checkout2) => {
        const branch2 = checkout2.branch;
        return branch2;
      }, "parseCheckout");
      parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => {
        const cherryPickDB = {
          id: cherryPicking.id,
          targetId: "",
          tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags,
          parent: cherryPicking.parent
        };
        return cherryPickDB;
      }, "parseCherryPicking");
      parser4 = {
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("gitGraph", input);
          log.debug(ast);
          populate15(ast, db);
        }, "parse")
      };
      if (void 0) {
        const { it, expect, describe } = void 0;
        const mockDB = {
          commitType,
          setDirection: vi.fn(),
          commit: vi.fn(),
          branch: vi.fn(),
          merge: vi.fn(),
          cherryPick: vi.fn(),
          checkout: vi.fn()
        };
        describe("GitGraph Parser", () => {
          it("should parse a commit statement", () => {
            const commit2 = {
              $type: "Commit",
              id: "1",
              message: "test",
              tags: ["tag1", "tag2"],
              type: "NORMAL"
            };
            parseStatement(commit2, mockDB);
            expect(mockDB.commit).toHaveBeenCalledWith({
              id: "1",
              msg: "test",
              tags: ["tag1", "tag2"],
              type: 0
            });
          });
          it("should parse a branch statement", () => {
            const branch2 = {
              $type: "Branch",
              name: "newBranch",
              order: 1
            };
            parseStatement(branch2, mockDB);
            expect(mockDB.branch).toHaveBeenCalledWith({ name: "newBranch", order: 1 });
          });
          it("should parse a checkout statement", () => {
            const checkout2 = {
              $type: "Checkout",
              branch: "newBranch"
            };
            parseStatement(checkout2, mockDB);
            expect(mockDB.checkout).toHaveBeenCalledWith("newBranch");
          });
          it("should parse a merge statement", () => {
            const merge6 = {
              $type: "Merge",
              branch: "newBranch",
              id: "1",
              tags: ["tag1", "tag2"],
              type: "NORMAL"
            };
            parseStatement(merge6, mockDB);
            expect(mockDB.merge).toHaveBeenCalledWith({
              branch: "newBranch",
              id: "1",
              tags: ["tag1", "tag2"],
              type: 0
            });
          });
          it("should parse a cherry picking statement", () => {
            const cherryPick2 = {
              $type: "CherryPicking",
              id: "1",
              tags: ["tag1", "tag2"],
              parent: "2"
            };
            parseStatement(cherryPick2, mockDB);
            expect(mockDB.cherryPick).toHaveBeenCalledWith({
              id: "1",
              targetId: "",
              parent: "2",
              tags: ["tag1", "tag2"]
            });
          });
          it("should parse a langium generated gitGraph ast", () => {
            const dummy = {
              $type: "GitGraph",
              statements: [],
              accDescr: "",
              accTitle: "",
              title: ""
            };
            const gitGraphAst = {
              $type: "GitGraph",
              statements: [
                {
                  $container: dummy,
                  $type: "Commit",
                  id: "1",
                  message: "test",
                  tags: ["tag1", "tag2"],
                  type: "NORMAL"
                },
                {
                  $container: dummy,
                  $type: "Branch",
                  name: "newBranch",
                  order: 1
                },
                {
                  $container: dummy,
                  $type: "Merge",
                  branch: "newBranch",
                  id: "1",
                  tags: ["tag1", "tag2"],
                  type: "NORMAL"
                },
                {
                  $container: dummy,
                  $type: "Checkout",
                  branch: "newBranch"
                },
                {
                  $container: dummy,
                  $type: "CherryPicking",
                  id: "1",
                  tags: ["tag1", "tag2"],
                  parent: "2"
                }
              ],
              accDescr: "",
              accTitle: "",
              title: ""
            };
            populate15(gitGraphAst, mockDB);
            expect(mockDB.commit).toHaveBeenCalledWith({
              id: "1",
              msg: "test",
              tags: ["tag1", "tag2"],
              type: 0
            });
            expect(mockDB.branch).toHaveBeenCalledWith({ name: "newBranch", order: 1 });
            expect(mockDB.merge).toHaveBeenCalledWith({
              branch: "newBranch",
              id: "1",
              tags: ["tag1", "tag2"],
              type: 0
            });
            expect(mockDB.checkout).toHaveBeenCalledWith("newBranch");
          });
        });
      }
    }
  });

  // src/diagrams/git/gitGraphRenderer.ts
  var LAYOUT_OFFSET, COMMIT_STEP, PX, PY, THEME_COLOR_LIMIT, REDUX_GEOMETRY_THEMES, REDUX_BRANCH_LABEL_PADDING_Y, COLOR_THEMES3, DARK_THEMES, calcColorIndex, branchPos, commitPos, defaultPos, allCommitsDict, lanes, maxPos, dir, clear8, drawText2, findClosestParent, findClosestParentBT, setParallelBTPos, findClosestParentPos, calculateCommitPosition, setCommitPosition, setRootPosition, drawCommitBullet, drawCommitLabel, drawCommitTags, getCommitClassType, calculatePosition, getCommitPosition, drawCommits, shouldRerouteArrow, findLane, drawArrow, drawArrows, drawBranches, setBranchPosition, draw4, gitGraphRenderer_default;
  var init_gitGraphRenderer = __esm({
    "src/diagrams/git/gitGraphRenderer.ts"() {
      "use strict";
      init_src32();
      init_diagramAPI();
      init_logger();
      init_utils2();
      init_gitGraphTypes();
      LAYOUT_OFFSET = 10;
      COMMIT_STEP = 40;
      PX = 4;
      PY = 2;
      THEME_COLOR_LIMIT = 8;
      REDUX_GEOMETRY_THEMES = /* @__PURE__ */ new Set(["redux", "redux-dark", "redux-color", "redux-dark-color"]);
      REDUX_BRANCH_LABEL_PADDING_Y = 12;
      COLOR_THEMES3 = /* @__PURE__ */ new Set(["redux-color", "redux-dark-color"]);
      DARK_THEMES = /* @__PURE__ */ new Set(["dark", "redux-dark", "redux-dark-color", "neo-dark"]);
      calcColorIndex = /* @__PURE__ */ __name((rawIndex, limit2, avoidDefaultColor = false) => {
        if (avoidDefaultColor && rawIndex > 0) {
          return (rawIndex - 1) % (limit2 - 1) + 1;
        }
        return rawIndex % limit2;
      }, "calcColorIndex");
      branchPos = /* @__PURE__ */ new Map();
      commitPos = /* @__PURE__ */ new Map();
      defaultPos = 30;
      allCommitsDict = /* @__PURE__ */ new Map();
      lanes = [];
      maxPos = 0;
      dir = "LR";
      clear8 = /* @__PURE__ */ __name(() => {
        branchPos.clear();
        commitPos.clear();
        allCommitsDict.clear();
        maxPos = 0;
        lanes = [];
        dir = "LR";
      }, "clear");
      drawText2 = /* @__PURE__ */ __name((txt) => {
        const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text");
        const rows = typeof txt === "string" ? txt.split(/\\n|\n|<br\s*\/?>/gi) : txt;
        rows.forEach((row) => {
          const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
          tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
          tspan.setAttribute("dy", "1em");
          tspan.setAttribute("x", "0");
          tspan.setAttribute("class", "row");
          tspan.textContent = row.trim();
          svgLabel.appendChild(tspan);
        });
        return svgLabel;
      }, "drawText");
      findClosestParent = /* @__PURE__ */ __name((parents3) => {
        let closestParent;
        let comparisonFunc;
        let targetPosition;
        if (dir === "BT") {
          comparisonFunc = /* @__PURE__ */ __name((a2, b3) => a2 <= b3, "comparisonFunc");
          targetPosition = Infinity;
        } else {
          comparisonFunc = /* @__PURE__ */ __name((a2, b3) => a2 >= b3, "comparisonFunc");
          targetPosition = 0;
        }
        parents3.forEach((parent4) => {
          const parentPosition = dir === "TB" || dir == "BT" ? commitPos.get(parent4)?.y : commitPos.get(parent4)?.x;
          if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) {
            closestParent = parent4;
            targetPosition = parentPosition;
          }
        });
        return closestParent;
      }, "findClosestParent");
      findClosestParentBT = /* @__PURE__ */ __name((parents3) => {
        let closestParent = "";
        let maxPosition = Infinity;
        parents3.forEach((parent4) => {
          const parentPosition = commitPos.get(parent4).y;
          if (parentPosition <= maxPosition) {
            closestParent = parent4;
            maxPosition = parentPosition;
          }
        });
        return closestParent || void 0;
      }, "findClosestParentBT");
      setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => {
        let curPos = defaultPos2;
        let maxPosition = defaultPos2;
        const roots = [];
        sortedKeys.forEach((key) => {
          const commit2 = commits.get(key);
          if (!commit2) {
            throw new Error(`Commit not found for key ${key}`);
          }
          if (commit2.parents.length) {
            curPos = calculateCommitPosition(commit2);
            maxPosition = Math.max(curPos, maxPosition);
          } else {
            roots.push(commit2);
          }
          setCommitPosition(commit2, curPos);
        });
        curPos = maxPosition;
        roots.forEach((commit2) => {
          setRootPosition(commit2, curPos, defaultPos2);
        });
        sortedKeys.forEach((key) => {
          const commit2 = commits.get(key);
          if (commit2?.parents.length) {
            const closestParent = findClosestParentBT(commit2.parents);
            curPos = commitPos.get(closestParent).y - COMMIT_STEP;
            if (curPos <= maxPosition) {
              maxPosition = curPos;
            }
            const x5 = branchPos.get(commit2.branch).pos;
            const y6 = curPos - LAYOUT_OFFSET;
            commitPos.set(commit2.id, { x: x5, y: y6 });
          }
        });
      }, "setParallelBTPos");
      findClosestParentPos = /* @__PURE__ */ __name((commit2) => {
        const closestParent = findClosestParent(commit2.parents.filter((p3) => p3 !== null));
        if (!closestParent) {
          throw new Error(`Closest parent not found for commit ${commit2.id}`);
        }
        const closestParentPos = commitPos.get(closestParent)?.y;
        if (closestParentPos === void 0) {
          throw new Error(`Closest parent position not found for commit ${commit2.id}`);
        }
        return closestParentPos;
      }, "findClosestParentPos");
      calculateCommitPosition = /* @__PURE__ */ __name((commit2) => {
        const closestParentPos = findClosestParentPos(commit2);
        return closestParentPos + COMMIT_STEP;
      }, "calculateCommitPosition");
      setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => {
        const branch2 = branchPos.get(commit2.branch);
        if (!branch2) {
          throw new Error(`Branch not found for commit ${commit2.id}`);
        }
        const x5 = branch2.pos;
        const y6 = curPos + LAYOUT_OFFSET;
        commitPos.set(commit2.id, { x: x5, y: y6 });
        return { x: x5, y: y6 };
      }, "setCommitPosition");
      setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => {
        const branch2 = branchPos.get(commit2.branch);
        if (!branch2) {
          throw new Error(`Branch not found for commit ${commit2.id}`);
        }
        const y6 = curPos + defaultPos2;
        const x5 = branch2.pos;
        commitPos.set(commit2.id, { x: x5, y: y6 });
      }, "setRootPosition");
      drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => {
        const { theme } = getConfig2();
        const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(theme ?? "");
        const useColorTheme = COLOR_THEMES3.has(theme ?? "");
        const isDark2 = DARK_THEMES.has(theme ?? "");
        if (commitSymbolType === commitType.HIGHLIGHT) {
          gBullets.append("rect").attr("x", commitPosition.x - 10 + (useReduxGeometry ? 3 : 0)).attr("y", commitPosition.y - 10 + (useReduxGeometry ? 3 : 0)).attr("width", useReduxGeometry ? 14 : 20).attr("height", useReduxGeometry ? 14 : 20).attr(
            "class",
            `commit ${commit2.id} commit-highlight${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)} ${typeClass}-outer`
          );
          gBullets.append("rect").attr("x", commitPosition.x - 6 + (useReduxGeometry ? 2 : 0)).attr("y", commitPosition.y - 6 + (useReduxGeometry ? 2 : 0)).attr("width", useReduxGeometry ? 8 : 12).attr("height", useReduxGeometry ? 8 : 12).attr(
            "class",
            `commit ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)} ${typeClass}-inner`
          );
        } else if (commitSymbolType === commitType.CHERRY_PICK) {
          gBullets.append("circle").attr("cx", commitPosition.x).attr("cy", commitPosition.y).attr("r", useReduxGeometry ? 7 : 10).attr("class", `commit ${commit2.id} ${typeClass}`);
          gBullets.append("circle").attr("cx", commitPosition.x - 3).attr("cy", commitPosition.y + 2).attr("r", useReduxGeometry ? 2.5 : 2.75).attr("fill", isDark2 ? "#000000" : "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
          gBullets.append("circle").attr("cx", commitPosition.x + 3).attr("cy", commitPosition.y + 2).attr("r", useReduxGeometry ? 2.5 : 2.75).attr("fill", isDark2 ? "#000000" : "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
          gBullets.append("line").attr("x1", commitPosition.x + 3).attr("y1", commitPosition.y + 1).attr("x2", commitPosition.x).attr("y2", commitPosition.y - 5).attr("stroke", isDark2 ? "#000000" : "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
          gBullets.append("line").attr("x1", commitPosition.x - 3).attr("y1", commitPosition.y + 1).attr("x2", commitPosition.x).attr("y2", commitPosition.y - 5).attr("stroke", isDark2 ? "#000000" : "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
        } else {
          const circle6 = gBullets.append("circle");
          circle6.attr("cx", commitPosition.x);
          circle6.attr("cy", commitPosition.y);
          circle6.attr("r", useReduxGeometry ? 7 : 10);
          circle6.attr(
            "class",
            `commit ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`
          );
          if (commitSymbolType === commitType.MERGE) {
            const circle22 = gBullets.append("circle");
            circle22.attr("cx", commitPosition.x);
            circle22.attr("cy", commitPosition.y);
            circle22.attr("r", useReduxGeometry ? 5 : 6);
            circle22.attr(
              "class",
              `commit ${typeClass} ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`
            );
          }
          if (commitSymbolType === commitType.REVERSE) {
            const cross3 = gBullets.append("path");
            const constValue = useReduxGeometry ? 4 : 5;
            cross3.attr(
              "d",
              `M ${commitPosition.x - constValue},${commitPosition.y - constValue}L${commitPosition.x + constValue},${commitPosition.y + constValue}M${commitPosition.x - constValue},${commitPosition.y + constValue}L${commitPosition.x + constValue},${commitPosition.y - constValue}`
            ).attr(
              "class",
              `commit ${typeClass} ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`
            );
          }
        }
      }, "drawCommitBullet");
      drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos, gitGraphConfig) => {
        if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) {
          const wrapper = gLabels.append("g");
          const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg");
          const text4 = wrapper.append("text").attr("x", pos).attr("y", commitPosition.y + 25).attr("class", "commit-label").text(commit2.id);
          const bbox = text4.node()?.getBBox();
          if (bbox) {
            labelBkg.attr("x", commitPosition.posWithOffset - bbox.width / 2 - PY).attr("y", commitPosition.y + 13.5).attr("width", bbox.width + 2 * PY).attr("height", bbox.height + 2 * PY);
            if (dir === "TB" || dir === "BT") {
              labelBkg.attr("x", commitPosition.x - (bbox.width + 4 * PX + 5)).attr("y", commitPosition.y - 12);
              text4.attr("x", commitPosition.x - (bbox.width + 4 * PX)).attr("y", commitPosition.y + bbox.height - 12);
            } else {
              text4.attr("x", commitPosition.posWithOffset - bbox.width / 2);
            }
            if (gitGraphConfig.rotateCommitLabel) {
              if (dir === "TB" || dir === "BT") {
                text4.attr(
                  "transform",
                  "rotate(-45, " + commitPosition.x + ", " + commitPosition.y + ")"
                );
                labelBkg.attr(
                  "transform",
                  "rotate(-45, " + commitPosition.x + ", " + commitPosition.y + ")"
                );
              } else {
                const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;
                const r_y = 10 + bbox.width / 25 * 8.5;
                wrapper.attr(
                  "transform",
                  "translate(" + r_x + ", " + r_y + ") rotate(-45, " + pos + ", " + commitPosition.y + ")"
                );
              }
            }
          }
        }
      }, "drawCommitLabel");
      drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {
        if (commit2.tags.length > 0) {
          let yOffset = 0;
          let maxTagBboxWidth = 0;
          let maxTagBboxHeight = 0;
          const tagElements = [];
          for (const tagValue of commit2.tags.reverse()) {
            const rect3 = gLabels.insert("polygon");
            const hole = gLabels.append("circle");
            const tag = gLabels.append("text").attr("y", commitPosition.y - 16 - yOffset).attr("class", "tag-label").text(tagValue);
            const tagBbox = tag.node()?.getBBox();
            if (!tagBbox) {
              throw new Error("Tag bbox not found");
            }
            maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);
            maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);
            tag.attr("x", commitPosition.posWithOffset - tagBbox.width / 2);
            tagElements.push({
              tag,
              hole,
              rect: rect3,
              yOffset
            });
            yOffset += 20;
          }
          for (const { tag, hole, rect: rect3, yOffset: yOffset2 } of tagElements) {
            const h22 = maxTagBboxHeight / 2;
            const ly = commitPosition.y - 19.2 - yOffset2;
            rect3.attr("class", "tag-label-bkg").attr(
              "points",
              `
      ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY}  
      ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}
      ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h22 - PY}
      ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h22 - PY}
      ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h22 + PY}
      ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h22 + PY}`
            );
            hole.attr("cy", ly).attr("cx", pos - maxTagBboxWidth / 2 + PX / 2).attr("r", 1.5).attr("class", "tag-hole");
            if (dir === "TB" || dir === "BT") {
              const yOrigin = pos + yOffset2;
              rect3.attr("class", "tag-label-bkg").attr(
                "points",
                `
        ${commitPosition.x},${yOrigin + 2}
        ${commitPosition.x},${yOrigin - 2}
        ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h22 - 2}
        ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h22 - 2}
        ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h22 + 2}
        ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h22 + 2}`
              ).attr("transform", "translate(12,12) rotate(45, " + commitPosition.x + "," + pos + ")");
              hole.attr("cx", commitPosition.x + PX / 2).attr("cy", yOrigin).attr("transform", "translate(12,12) rotate(45, " + commitPosition.x + "," + pos + ")");
              tag.attr("x", commitPosition.x + 5).attr("y", yOrigin + 3).attr("transform", "translate(14,14) rotate(45, " + commitPosition.x + "," + pos + ")");
            }
          }
        }
      }, "drawCommitTags");
      getCommitClassType = /* @__PURE__ */ __name((commit2) => {
        const commitSymbolType = commit2.customType ?? commit2.type;
        switch (commitSymbolType) {
          case commitType.NORMAL:
            return "commit-normal";
          case commitType.REVERSE:
            return "commit-reverse";
          case commitType.HIGHLIGHT:
            return "commit-highlight";
          case commitType.MERGE:
            return "commit-merge";
          case commitType.CHERRY_PICK:
            return "commit-cherry-pick";
          default:
            return "commit-normal";
        }
      }, "getCommitClassType");
      calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => {
        const defaultCommitPosition = { x: 0, y: 0 };
        if (commit2.parents.length > 0) {
          const closestParent = findClosestParent(commit2.parents);
          if (closestParent) {
            const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition;
            if (dir2 === "TB") {
              return parentPosition.y + COMMIT_STEP;
            } else if (dir2 === "BT") {
              const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;
              return currentPosition.y - COMMIT_STEP;
            } else {
              return parentPosition.x + COMMIT_STEP;
            }
          }
        } else {
          if (dir2 === "TB") {
            return defaultPos;
          } else if (dir2 === "BT") {
            const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;
            return currentPosition.y - COMMIT_STEP;
          } else {
            return 0;
          }
        }
        return 0;
      }, "calculatePosition");
      getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => {
        const posWithOffset = dir === "BT" && isParallelCommits ? pos : pos + LAYOUT_OFFSET;
        const branchY = branchPos.get(commit2.branch)?.pos;
        const x5 = dir === "TB" || dir === "BT" ? branchPos.get(commit2.branch)?.pos : posWithOffset;
        if (x5 === void 0 || branchY === void 0) {
          throw new Error(`Position were undefined for commit ${commit2.id}`);
        }
        const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(getConfig2().theme ?? "");
        const y6 = dir === "TB" || dir === "BT" ? posWithOffset : branchY + (useReduxGeometry ? REDUX_BRANCH_LABEL_PADDING_Y / 2 + 1 : -2);
        return { x: x5, y: y6, posWithOffset };
      }, "getCommitPosition");
      drawCommits = /* @__PURE__ */ __name((svg2, commits, modifyGraph, gitGraphConfig) => {
        const gBullets = svg2.append("g").attr("class", "commit-bullets");
        const gLabels = svg2.append("g").attr("class", "commit-labels");
        let pos = dir === "TB" || dir === "BT" ? defaultPos : 0;
        const keys3 = [...commits.keys()];
        const isParallelCommits = gitGraphConfig.parallelCommits ?? false;
        const sortKeys = /* @__PURE__ */ __name((a2, b3) => {
          const seqA = commits.get(a2)?.seq;
          const seqB = commits.get(b3)?.seq;
          return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0;
        }, "sortKeys");
        let sortedKeys = keys3.sort(sortKeys);
        if (dir === "BT") {
          if (isParallelCommits) {
            setParallelBTPos(sortedKeys, commits, pos);
          }
          sortedKeys = sortedKeys.reverse();
        }
        sortedKeys.forEach((key) => {
          const commit2 = commits.get(key);
          if (!commit2) {
            throw new Error(`Commit not found for key ${key}`);
          }
          if (isParallelCommits) {
            pos = calculatePosition(commit2, dir, pos, commitPos);
          }
          const commitPosition = getCommitPosition(commit2, pos, isParallelCommits);
          if (modifyGraph) {
            const typeClass = getCommitClassType(commit2);
            const commitSymbolType = commit2.customType ?? commit2.type;
            const branchIndex = branchPos.get(commit2.branch)?.index ?? 0;
            drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType);
            drawCommitLabel(gLabels, commit2, commitPosition, pos, gitGraphConfig);
            drawCommitTags(gLabels, commit2, commitPosition, pos);
          }
          if (dir === "TB" || dir === "BT") {
            commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset });
          } else {
            commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y });
          }
          pos = dir === "BT" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;
          if (pos > maxPos) {
            maxPos = pos;
          }
        });
      }, "drawCommits");
      shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p22, allCommits) => {
        const commitBIsFurthest = dir === "TB" || dir === "BT" ? p1.x < p22.x : p1.y < p22.y;
        const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;
        const isOnBranchToGetCurve = /* @__PURE__ */ __name((x5) => x5.branch === branchToGetCurve, "isOnBranchToGetCurve");
        const isBetweenCommits = /* @__PURE__ */ __name((x5) => x5.seq > commitA.seq && x5.seq < commitB.seq, "isBetweenCommits");
        return [...allCommits.values()].some((commitX) => {
          return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);
        });
      }, "shouldRerouteArrow");
      findLane = /* @__PURE__ */ __name((y1, y22, depth = 0) => {
        const candidate = y1 + Math.abs(y1 - y22) / 2;
        if (depth > 5) {
          return candidate;
        }
        const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);
        if (ok) {
          lanes.push(candidate);
          return candidate;
        }
        const diff2 = Math.abs(y1 - y22);
        return findLane(y1, y22 - diff2 / 5, depth + 1);
      }, "findLane");
      drawArrow = /* @__PURE__ */ __name((svg2, commitA, commitB, allCommits) => {
        const { theme: arrowTheme } = getConfig2();
        const useColorTheme = COLOR_THEMES3.has(arrowTheme ?? "");
        const p1 = commitPos.get(commitA.id);
        const p22 = commitPos.get(commitB.id);
        if (p1 === void 0 || p22 === void 0) {
          throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);
        }
        const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p22, allCommits);
        let arc = "";
        let arc2 = "";
        let radius2 = 0;
        let offset = 0;
        let colorClassNum = branchPos.get(commitB.branch)?.index;
        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {
          colorClassNum = branchPos.get(commitA.branch)?.index;
        }
        let lineDef;
        if (arrowNeedsRerouting) {
          arc = "A 10 10, 0, 0, 0,";
          arc2 = "A 10 10, 0, 0, 1,";
          radius2 = 10;
          offset = 10;
          const lineY = p1.y < p22.y ? findLane(p1.y, p22.y) : findLane(p22.y, p1.y);
          const lineX = p1.x < p22.x ? findLane(p1.x, p22.x) : findLane(p22.x, p1.x);
          if (dir === "TB") {
            if (p1.x < p22.x) {
              lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius2} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p22.y - radius2} ${arc} ${lineX + offset} ${p22.y} L ${p22.x} ${p22.y}`;
            } else {
              colorClassNum = branchPos.get(commitA.branch)?.index;
              lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius2} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p22.y - radius2} ${arc2} ${lineX - offset} ${p22.y} L ${p22.x} ${p22.y}`;
            }
          } else if (dir === "BT") {
            if (p1.x < p22.x) {
              lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius2} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p22.y + radius2} ${arc2} ${lineX + offset} ${p22.y} L ${p22.x} ${p22.y}`;
            } else {
              colorClassNum = branchPos.get(commitA.branch)?.index;
              lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius2} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p22.y + radius2} ${arc} ${lineX - offset} ${p22.y} L ${p22.x} ${p22.y}`;
            }
          } else {
            if (p1.y < p22.y) {
              lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius2} ${arc} ${p1.x + offset} ${lineY} L ${p22.x - radius2} ${lineY} ${arc2} ${p22.x} ${lineY + offset} L ${p22.x} ${p22.y}`;
            } else {
              colorClassNum = branchPos.get(commitA.branch)?.index;
              lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius2} ${arc2} ${p1.x + offset} ${lineY} L ${p22.x - radius2} ${lineY} ${arc} ${p22.x} ${lineY - offset} L ${p22.x} ${p22.y}`;
            }
          }
        } else {
          arc = "A 20 20, 0, 0, 0,";
          arc2 = "A 20 20, 0, 0, 1,";
          radius2 = 20;
          offset = 20;
          if (dir === "TB") {
            if (p1.x < p22.x) {
              if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {
                lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y - radius2} ${arc} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`;
              } else {
                lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc2} ${p22.x} ${p1.y + offset} L ${p22.x} ${p22.y}`;
              }
            }
            if (p1.x > p22.x) {
              arc = "A 20 20, 0, 0, 0,";
              arc2 = "A 20 20, 0, 0, 1,";
              radius2 = 20;
              offset = 20;
              if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {
                lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y - radius2} ${arc2} ${p1.x - offset} ${p22.y} L ${p22.x} ${p22.y}`;
              } else {
                lineDef = `M ${p1.x} ${p1.y} L ${p22.x + radius2} ${p1.y} ${arc} ${p22.x} ${p1.y + offset} L ${p22.x} ${p22.y}`;
              }
            }
            if (p1.x === p22.x) {
              lineDef = `M ${p1.x} ${p1.y} L ${p22.x} ${p22.y}`;
            }
          } else if (dir === "BT") {
            if (p1.x < p22.x) {
              if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {
                lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y + radius2} ${arc2} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`;
              } else {
                lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc} ${p22.x} ${p1.y - offset} L ${p22.x} ${p22.y}`;
              }
            }
            if (p1.x > p22.x) {
              arc = "A 20 20, 0, 0, 0,";
              arc2 = "A 20 20, 0, 0, 1,";
              radius2 = 20;
              offset = 20;
              if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {
                lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y + radius2} ${arc} ${p1.x - offset} ${p22.y} L ${p22.x} ${p22.y}`;
              } else {
                lineDef = `M ${p1.x} ${p1.y} L ${p22.x + radius2} ${p1.y} ${arc2} ${p22.x} ${p1.y - offset} L ${p22.x} ${p22.y}`;
              }
            }
            if (p1.x === p22.x) {
              lineDef = `M ${p1.x} ${p1.y} L ${p22.x} ${p22.y}`;
            }
          } else {
            if (p1.y < p22.y) {
              if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {
                lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc2} ${p22.x} ${p1.y + offset} L ${p22.x} ${p22.y}`;
              } else {
                lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y - radius2} ${arc} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`;
              }
            }
            if (p1.y > p22.y) {
              if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {
                lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc} ${p22.x} ${p1.y - offset} L ${p22.x} ${p22.y}`;
              } else {
                lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y + radius2} ${arc2} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`;
              }
            }
            if (p1.y === p22.y) {
              lineDef = `M ${p1.x} ${p1.y} L ${p22.x} ${p22.y}`;
            }
          }
        }
        if (lineDef === void 0) {
          throw new Error("Line definition not found");
        }
        svg2.append("path").attr("d", lineDef).attr(
          "class",
          "arrow arrow" + calcColorIndex(colorClassNum, THEME_COLOR_LIMIT, useColorTheme)
        );
      }, "drawArrow");
      drawArrows = /* @__PURE__ */ __name((svg2, commits) => {
        const gArrows = svg2.append("g").attr("class", "commit-arrows");
        [...commits.keys()].forEach((key) => {
          const commit2 = commits.get(key);
          if (commit2.parents && commit2.parents.length > 0) {
            commit2.parents.forEach((parent4) => {
              drawArrow(gArrows, commits.get(parent4), commit2, commits);
            });
          }
        });
      }, "drawArrows");
      drawBranches = /* @__PURE__ */ __name((svg2, branches, gitGraphConfig, id41) => {
        const { look, theme, themeVariables } = getConfig2();
        const { dropShadow, THEME_COLOR_LIMIT: themeColorLimit } = themeVariables;
        const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(theme ?? "");
        const useColorTheme = COLOR_THEMES3.has(theme ?? "");
        const g2 = svg2.append("g");
        branches.forEach((branch2, index) => {
          const adjustIndexForTheme = calcColorIndex(
            index,
            useReduxGeometry ? themeColorLimit : THEME_COLOR_LIMIT,
            useColorTheme
          );
          const pos = branchPos.get(branch2.name)?.pos;
          if (pos === void 0) {
            throw new Error(`Position not found for branch ${branch2.name}`);
          }
          const spineY = dir === "TB" || dir === "BT" ? pos : useReduxGeometry ? pos + REDUX_BRANCH_LABEL_PADDING_Y / 2 + 1 : pos - 2;
          const line2 = g2.append("line");
          line2.attr("x1", 0);
          line2.attr("y1", spineY);
          line2.attr("x2", maxPos);
          line2.attr("y2", spineY);
          line2.attr("class", "branch branch" + adjustIndexForTheme);
          if (dir === "TB") {
            line2.attr("y1", defaultPos);
            line2.attr("x1", pos);
            line2.attr("y2", maxPos);
            line2.attr("x2", pos);
          } else if (dir === "BT") {
            line2.attr("y1", maxPos);
            line2.attr("x1", pos);
            line2.attr("y2", defaultPos);
            line2.attr("x2", pos);
          }
          lanes.push(spineY);
          const name = branch2.name;
          const labelElement = drawText2(name);
          const bkg = g2.insert("rect");
          const branchLabel = g2.insert("g").attr("class", "branchLabel");
          const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme);
          label.node().appendChild(labelElement);
          const bbox = labelElement.getBBox();
          const borderRadius = useReduxGeometry ? 0 : 4;
          const labelPaddingX = useReduxGeometry ? 16 : 0;
          const labelPaddingY = useReduxGeometry ? REDUX_BRANCH_LABEL_PADDING_Y : 0;
          if (look === "neo") {
            bkg.attr("data-look", `neo`);
          }
          bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr(
            "style",
            look === "neo" ? `filter:${useReduxGeometry ? `url(#${id41}-drop-shadow)` : dropShadow}` : ""
          ).attr("rx", borderRadius).attr("ry", borderRadius).attr("x", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 10).attr("width", bbox.width + 18 + labelPaddingX).attr("height", bbox.height + 4 + labelPaddingY);
          label.attr(
            "transform",
            "translate(" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0) + labelPaddingX / 2) + ", " + (spineY - bbox.height / 2 - 2) + ")"
          );
          if (dir === "TB") {
            bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", 0);
            label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", 0)");
            if (useReduxGeometry) {
              bkg.attr("transform", `translate(${-labelPaddingX / 2 - 3}, ${-labelPaddingY - 10})`);
              label.attr(
                "transform",
                "translate(" + (pos - bbox.width / 2 - 5) + ", " + (-labelPaddingY * 2 + 7) + ")"
              );
            }
          } else if (dir === "BT") {
            bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", maxPos);
            label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", " + maxPos + ")");
            if (useReduxGeometry) {
              bkg.attr("transform", `translate(${-labelPaddingX / 2 - 3}, ${labelPaddingY + 10})`);
              label.attr(
                "transform",
                "translate(" + (pos - bbox.width / 2 - 5) + ", " + (maxPos + labelPaddingY * 2 + 4) + ")"
              );
            }
          } else {
            bkg.attr("transform", "translate(-19, " + (spineY - 12 - labelPaddingY / 2) + ")");
          }
        });
      }, "drawBranches");
      setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) {
        branchPos.set(name, { pos, index });
        pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === "TB" || dir === "BT" ? bbox.width / 2 : 0);
        return pos;
      }, "setBranchPosition");
      draw4 = /* @__PURE__ */ __name(function(txt, id41, ver, diagObj) {
        clear8();
        log.debug("in gitgraph renderer", txt + "\n", "id:", id41, ver);
        const db12 = diagObj.db;
        if (!db12.getConfig) {
          log.error("getConfig method is not available on db");
          return;
        }
        const gitGraphConfig = db12.getConfig();
        const rotateCommitLabel = gitGraphConfig.rotateCommitLabel ?? false;
        allCommitsDict = db12.getCommits();
        const branches = db12.getBranchesAsObjArray();
        dir = db12.getDirection();
        const diagram38 = select_default2(`[id="${id41}"]`);
        const { look, theme, themeVariables } = getConfig2();
        const { useGradient, gradientStart, gradientStop, filterColor } = themeVariables;
        if (useGradient) {
          const gradient = diagram38.append("defs").append("linearGradient").attr("id", id41 + "-gradient").attr("gradientUnits", "objectBoundingBox").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%");
          gradient.append("stop").attr("offset", "0%").attr("stop-color", gradientStart).attr("stop-opacity", 1);
          gradient.append("stop").attr("offset", "100%").attr("stop-color", gradientStop).attr("stop-opacity", 1);
        }
        if (look === "neo" && REDUX_GEOMETRY_THEMES.has(theme ?? "")) {
          diagram38.append("defs").append("filter").attr("id", id41 + "-drop-shadow").attr("height", "130%").attr("width", "130%").append("feDropShadow").attr("dx", "4").attr("dy", "4").attr("stdDeviation", 0).attr("flood-opacity", "0.06").attr("flood-color", filterColor);
        }
        let pos = 0;
        branches.forEach((branch2, index) => {
          const labelElement = drawText2(branch2.name);
          const g2 = diagram38.append("g");
          const branchLabel = g2.insert("g").attr("class", "branchLabel");
          const label = branchLabel.insert("g").attr("class", "label branch-label");
          label.node()?.appendChild(labelElement);
          const bbox = labelElement.getBBox();
          pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel);
          label.remove();
          branchLabel.remove();
          g2.remove();
        });
        drawCommits(diagram38, allCommitsDict, false, gitGraphConfig);
        if (gitGraphConfig.showBranches) {
          drawBranches(diagram38, branches, gitGraphConfig, id41);
        }
        drawArrows(diagram38, allCommitsDict);
        drawCommits(diagram38, allCommitsDict, true, gitGraphConfig);
        utils_default2.insertTitle(
          diagram38,
          "gitTitleText",
          gitGraphConfig.titleTopMargin ?? 0,
          db12.getDiagramTitle()
        );
        setupGraphViewbox2(void 0, diagram38, gitGraphConfig.diagramPadding, gitGraphConfig.useMaxWidth);
      }, "draw");
      gitGraphRenderer_default = {
        draw: draw4
      };
      if (void 0) {
        const { it, expect, describe } = void 0;
        describe("drawText", () => {
          it("should drawText", () => {
            const svgLabel = drawText2("main");
            expect(svgLabel).toBeDefined();
            expect(svgLabel.children[0].innerHTML).toBe("main");
          });
        });
        describe("branchPosition", () => {
          const bbox = {
            x: 0,
            y: 0,
            width: 10,
            height: 10,
            top: 0,
            right: 0,
            bottom: 0,
            left: 0,
            toJSON: /* @__PURE__ */ __name(() => "", "toJSON")
          };
          it("should setBranchPositions LR with two branches", () => {
            dir = "LR";
            const pos = setBranchPosition("main", 0, 0, bbox, true);
            expect(pos).toBe(90);
            expect(branchPos.get("main")).toEqual({ pos: 0, index: 0 });
            const posNext = setBranchPosition("develop", pos, 1, bbox, true);
            expect(posNext).toBe(180);
            expect(branchPos.get("develop")).toEqual({ pos, index: 1 });
          });
          it("should setBranchPositions TB with two branches", () => {
            dir = "TB";
            bbox.width = 34.9921875;
            const pos = setBranchPosition("main", 0, 0, bbox, true);
            expect(pos).toBe(107.49609375);
            expect(branchPos.get("main")).toEqual({ pos: 0, index: 0 });
            bbox.width = 56.421875;
            const posNext = setBranchPosition("develop", pos, 1, bbox, true);
            expect(posNext).toBe(225.70703125);
            expect(branchPos.get("develop")).toEqual({ pos, index: 1 });
          });
        });
        describe("commitPosition", () => {
          const commits = /* @__PURE__ */ new Map([
            [
              "commitZero",
              {
                id: "ZERO",
                message: "",
                seq: 0,
                type: commitType.NORMAL,
                tags: [],
                parents: [],
                branch: "main"
              }
            ],
            [
              "commitA",
              {
                id: "A",
                message: "",
                seq: 1,
                type: commitType.NORMAL,
                tags: [],
                parents: ["ZERO"],
                branch: "feature"
              }
            ],
            [
              "commitB",
              {
                id: "B",
                message: "",
                seq: 2,
                type: commitType.NORMAL,
                tags: [],
                parents: ["A"],
                branch: "feature"
              }
            ],
            [
              "commitM",
              {
                id: "M",
                message: "merged branch feature into main",
                seq: 3,
                type: commitType.MERGE,
                tags: [],
                parents: ["ZERO", "B"],
                branch: "main",
                customId: true
              }
            ],
            [
              "commitC",
              {
                id: "C",
                message: "",
                seq: 4,
                type: commitType.NORMAL,
                tags: [],
                parents: ["ZERO"],
                branch: "release"
              }
            ],
            [
              "commit5_8928ea0",
              {
                id: "5-8928ea0",
                message: "cherry-picked [object Object] into release",
                seq: 5,
                type: commitType.CHERRY_PICK,
                tags: [],
                parents: ["C", "M"],
                branch: "release"
              }
            ],
            [
              "commitD",
              {
                id: "D",
                message: "",
                seq: 6,
                type: commitType.NORMAL,
                tags: [],
                parents: ["5-8928ea0"],
                branch: "release"
              }
            ],
            [
              "commit7_ed848ba",
              {
                id: "7-ed848ba",
                message: "cherry-picked [object Object] into release",
                seq: 7,
                type: commitType.CHERRY_PICK,
                tags: [],
                parents: ["D", "M"],
                branch: "release"
              }
            ]
          ]);
          let pos = 0;
          branchPos.set("main", { pos: 0, index: 0 });
          branchPos.set("feature", { pos: 107.49609375, index: 1 });
          branchPos.set("release", { pos: 224.03515625, index: 2 });
          describe("TB", () => {
            pos = 30;
            dir = "TB";
            const expectedCommitPositionTB = /* @__PURE__ */ new Map([
              ["commitZero", { x: 0, y: 40, posWithOffset: 40 }],
              ["commitA", { x: 107.49609375, y: 90, posWithOffset: 90 }],
              ["commitB", { x: 107.49609375, y: 140, posWithOffset: 140 }],
              ["commitM", { x: 0, y: 190, posWithOffset: 190 }],
              ["commitC", { x: 224.03515625, y: 240, posWithOffset: 240 }],
              ["commit5_8928ea0", { x: 224.03515625, y: 290, posWithOffset: 290 }],
              ["commitD", { x: 224.03515625, y: 340, posWithOffset: 340 }],
              ["commit7_ed848ba", { x: 224.03515625, y: 390, posWithOffset: 390 }]
            ]);
            commits.forEach((commit2, key) => {
              it(`should give the correct position for commit ${key}`, () => {
                const position5 = getCommitPosition(commit2, pos, false);
                expect(position5).toEqual(expectedCommitPositionTB.get(key));
                pos += 50;
              });
            });
          });
          describe("LR", () => {
            let pos2 = 30;
            dir = "LR";
            const expectedCommitPositionLR = /* @__PURE__ */ new Map([
              ["commitZero", { x: 0, y: 40, posWithOffset: 40 }],
              ["commitA", { x: 107.49609375, y: 90, posWithOffset: 90 }],
              ["commitB", { x: 107.49609375, y: 140, posWithOffset: 140 }],
              ["commitM", { x: 0, y: 190, posWithOffset: 190 }],
              ["commitC", { x: 224.03515625, y: 240, posWithOffset: 240 }],
              ["commit5_8928ea0", { x: 224.03515625, y: 290, posWithOffset: 290 }],
              ["commitD", { x: 224.03515625, y: 340, posWithOffset: 340 }],
              ["commit7_ed848ba", { x: 224.03515625, y: 390, posWithOffset: 390 }]
            ]);
            commits.forEach((commit2, key) => {
              it(`should give the correct position for commit ${key}`, () => {
                const position5 = getCommitPosition(commit2, pos2, false);
                expect(position5).toEqual(expectedCommitPositionLR.get(key));
                pos2 += 50;
              });
            });
          });
          describe("getCommitClassType", () => {
            const expectedCommitClassType = /* @__PURE__ */ new Map([
              ["commitZero", "commit-normal"],
              ["commitA", "commit-normal"],
              ["commitB", "commit-normal"],
              ["commitM", "commit-merge"],
              ["commitC", "commit-normal"],
              ["commit5_8928ea0", "commit-cherry-pick"],
              ["commitD", "commit-normal"],
              ["commit7_ed848ba", "commit-cherry-pick"]
            ]);
            commits.forEach((commit2, key) => {
              it(`should give the correct class type for commit ${key}`, () => {
                const classType = getCommitClassType(commit2);
                expect(classType).toBe(expectedCommitClassType.get(key));
              });
            });
          });
        });
        describe("building BT parallel commit diagram", () => {
          const commits = /* @__PURE__ */ new Map([
            [
              "1-abcdefg",
              {
                id: "1-abcdefg",
                message: "",
                seq: 0,
                type: 0,
                tags: [],
                parents: [],
                branch: "main"
              }
            ],
            [
              "2-abcdefg",
              {
                id: "2-abcdefg",
                message: "",
                seq: 1,
                type: 0,
                tags: [],
                parents: ["1-abcdefg"],
                branch: "main"
              }
            ],
            [
              "3-abcdefg",
              {
                id: "3-abcdefg",
                message: "",
                seq: 2,
                type: 0,
                tags: [],
                parents: ["2-abcdefg"],
                branch: "develop"
              }
            ],
            [
              "4-abcdefg",
              {
                id: "4-abcdefg",
                message: "",
                seq: 3,
                type: 0,
                tags: [],
                parents: ["3-abcdefg"],
                branch: "develop"
              }
            ],
            [
              "5-abcdefg",
              {
                id: "5-abcdefg",
                message: "",
                seq: 4,
                type: 0,
                tags: [],
                parents: ["2-abcdefg"],
                branch: "feature"
              }
            ],
            [
              "6-abcdefg",
              {
                id: "6-abcdefg",
                message: "",
                seq: 5,
                type: 0,
                tags: [],
                parents: ["5-abcdefg"],
                branch: "feature"
              }
            ],
            [
              "7-abcdefg",
              {
                id: "7-abcdefg",
                message: "",
                seq: 6,
                type: 0,
                tags: [],
                parents: ["2-abcdefg"],
                branch: "main"
              }
            ],
            [
              "8-abcdefg",
              {
                id: "8-abcdefg",
                message: "",
                seq: 7,
                type: 0,
                tags: [],
                parents: ["7-abcdefg"],
                branch: "main"
              }
            ]
          ]);
          const expectedCommitPosition = /* @__PURE__ */ new Map([
            ["1-abcdefg", { x: 0, y: 40 }],
            ["2-abcdefg", { x: 0, y: 90 }],
            ["3-abcdefg", { x: 107.49609375, y: 140 }],
            ["4-abcdefg", { x: 107.49609375, y: 190 }],
            ["5-abcdefg", { x: 225.70703125, y: 140 }],
            ["6-abcdefg", { x: 225.70703125, y: 190 }],
            ["7-abcdefg", { x: 0, y: 140 }],
            ["8-abcdefg", { x: 0, y: 190 }]
          ]);
          const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([
            ["1-abcdefg", { x: 0, y: 210 }],
            ["2-abcdefg", { x: 0, y: 160 }],
            ["3-abcdefg", { x: 107.49609375, y: 110 }],
            ["4-abcdefg", { x: 107.49609375, y: 60 }],
            ["5-abcdefg", { x: 225.70703125, y: 110 }],
            ["6-abcdefg", { x: 225.70703125, y: 60 }],
            ["7-abcdefg", { x: 0, y: 110 }],
            ["8-abcdefg", { x: 0, y: 60 }]
          ]);
          const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([
            ["1-abcdefg", 30],
            ["2-abcdefg", 80],
            ["3-abcdefg", 130],
            ["4-abcdefg", 180],
            ["5-abcdefg", 130],
            ["6-abcdefg", 180],
            ["7-abcdefg", 130],
            ["8-abcdefg", 180]
          ]);
          const sortedKeys = [...expectedCommitPosition.keys()];
          it("should get the correct commit position and current position", () => {
            dir = "BT";
            let curPos = 30;
            commitPos.clear();
            branchPos.clear();
            branchPos.set("main", { pos: 0, index: 0 });
            branchPos.set("develop", { pos: 107.49609375, index: 1 });
            branchPos.set("feature", { pos: 225.70703125, index: 2 });
            commits.forEach((commit2, key) => {
              if (commit2.parents.length > 0) {
                curPos = calculateCommitPosition(commit2);
              }
              const position5 = setCommitPosition(commit2, curPos);
              expect(position5).toEqual(expectedCommitPosition.get(key));
              expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));
            });
          });
          it("should get the correct commit position after parallel commits", () => {
            commitPos.clear();
            branchPos.clear();
            dir = "BT";
            const curPos = 30;
            commitPos.clear();
            branchPos.clear();
            branchPos.set("main", { pos: 0, index: 0 });
            branchPos.set("develop", { pos: 107.49609375, index: 1 });
            branchPos.set("feature", { pos: 225.70703125, index: 2 });
            setParallelBTPos(sortedKeys, commits, curPos);
            sortedKeys.forEach((commit2) => {
              const position5 = commitPos.get(commit2);
              expect(position5).toEqual(expectedCommitPositionAfterParallel.get(commit2));
            });
          });
        });
        it("add", () => {
          commitPos.set("parent1", { x: 1, y: 1 });
          commitPos.set("parent2", { x: 2, y: 2 });
          commitPos.set("parent3", { x: 3, y: 3 });
          dir = "LR";
          const parents3 = ["parent1", "parent2", "parent3"];
          const closestParent = findClosestParent(parents3);
          expect(closestParent).toBe("parent3");
          commitPos.clear();
        });
      }
    }
  });

  // src/diagrams/git/styles.js
  var GIT_NAMED_COLOR_COUNT, REDUX_GEOMETRY_THEMES2, COLOR_THEMES4, NEO_THEMES, DARK_THEMES2, NEO_COLOR_GEN_THEMES, genGitGraphGradient, genColor2, normalTheme, getStyles6, styles_default6;
  var init_styles6 = __esm({
    "src/diagrams/git/styles.js"() {
      "use strict";
      init_config();
      GIT_NAMED_COLOR_COUNT = 8;
      REDUX_GEOMETRY_THEMES2 = /* @__PURE__ */ new Set(["redux", "redux-dark", "redux-color", "redux-dark-color"]);
      COLOR_THEMES4 = /* @__PURE__ */ new Set(["redux-color", "redux-dark-color"]);
      NEO_THEMES = /* @__PURE__ */ new Set(["neo", "neo-dark"]);
      DARK_THEMES2 = /* @__PURE__ */ new Set(["dark", "redux-dark", "redux-dark-color", "neo-dark"]);
      NEO_COLOR_GEN_THEMES = /* @__PURE__ */ new Set([
        "redux",
        "redux-dark",
        "redux-color",
        "redux-dark-color",
        "neo",
        "neo-dark"
      ]);
      genGitGraphGradient = /* @__PURE__ */ __name((options2) => {
        const { svgId } = options2;
        let sections6 = "";
        if (options2.useGradient && svgId) {
          for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
            sections6 += `
      .label${i2}  { fill: ${options2.mainBkg}; stroke: url(${svgId}-gradient); stroke-width: ${options2.strokeWidth};}
             `;
          }
        }
        return sections6;
      }, "genGitGraphGradient");
      genColor2 = /* @__PURE__ */ __name((options2) => {
        const config3 = getConfig();
        const { theme, themeVariables } = config3;
        const { borderColorArray } = themeVariables;
        const useReduxGeometry = REDUX_GEOMETRY_THEMES2.has(theme);
        if (NEO_THEMES.has(theme)) {
          let sections6 = "";
          for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
            if (i2 === 0) {
              sections6 += `
        .branch-label${i2} { fill: ${options2.nodeBorder};}
        .commit${i2} { stroke: ${options2.nodeBorder};   }
        .commit-highlight${i2} { stroke: ${options2.nodeBorder}; fill: ${options2.nodeBorder}; }
        .arrow${i2} { stroke: ${options2.nodeBorder}; }
        .commit-bullets { fill: ${options2.nodeBorder}; }
        .commit-cherry-pick${i2} { stroke: ${options2.nodeBorder}; }
        ${genGitGraphGradient(options2)}`;
            } else {
              const ci = i2 % GIT_NAMED_COLOR_COUNT;
              sections6 += `
        .branch-label${i2} { fill: ${options2["gitBranchLabel" + ci]}; }
        .commit${i2} { stroke: ${options2["git" + ci]}; fill: ${options2["git" + ci]}; }
        .commit-highlight${i2} { stroke: ${options2["gitInv" + ci]}; fill: ${options2["gitInv" + ci]}; }
        .arrow${i2} { stroke: ${options2["git" + ci]}; }
        `;
            }
          }
          return sections6;
        } else if (!COLOR_THEMES4.has(theme)) {
          let sections6 = "";
          for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
            sections6 += `
        .branch-label${i2} { fill: ${options2.nodeBorder}; ${useReduxGeometry ? `font-weight:${options2.noteFontWeight}` : ""} }
        .commit${i2} { stroke: ${options2.nodeBorder};   }
        .commit-highlight${i2} { stroke: ${options2.nodeBorder}; fill: ${options2.nodeBorder}; }
        .label${i2}  { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; stroke-width: ${options2.strokeWidth}; ${useReduxGeometry ? `font-weight:${options2.noteFontWeight}` : ""}}
        .arrow${i2} { stroke: ${options2.nodeBorder}; }
        .commit-bullets { fill: ${options2.nodeBorder}; }
        .commit-cherry-pick${i2} { stroke: ${options2.nodeBorder}; }
        `;
          }
          return sections6;
        } else {
          let sections6 = "";
          for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
            if (i2 === 0) {
              sections6 += `
        .branch-label${i2} { fill: ${options2.nodeBorder}; ${useReduxGeometry ? `font-weight:${options2.noteFontWeight}` : ""} }
        .commit${i2} { stroke: ${options2.nodeBorder}; }
        .commit-highlight${i2} { stroke: ${options2.nodeBorder}; fill: ${options2.mainBkg}; }
        .label${i2}  { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; stroke-width: ${options2.strokeWidth}; ${useReduxGeometry ? `font-weight:${options2.noteFontWeight}` : ""} }
        .arrow${i2} { stroke: ${options2.nodeBorder}; }
        .commit-bullets { fill: ${options2.nodeBorder}; }
        `;
            } else {
              const colorIndex = i2 % borderColorArray.length;
              sections6 += `
        .branch-label${i2} { fill: ${options2.nodeBorder}; ${useReduxGeometry ? `font-weight:${options2.noteFontWeight}` : ""} }
        .commit${i2} { stroke: ${borderColorArray[colorIndex]}; fill: ${borderColorArray[colorIndex]}; }
        .commit-highlight${i2} { stroke: ${borderColorArray[colorIndex]}; fill: ${borderColorArray[colorIndex]}; }
        .label${i2}  { fill: ${DARK_THEMES2.has(theme) ? options2.mainBkg : borderColorArray[colorIndex]}; stroke: ${borderColorArray[colorIndex]};  stroke-width: ${options2.strokeWidth}; }
        .arrow${i2} { stroke: ${borderColorArray[colorIndex]}; }
        `;
            }
          }
          return sections6;
        }
      }, "genColor");
      normalTheme = /* @__PURE__ */ __name((options2) => {
        return `${Array.from({ length: options2.THEME_COLOR_LIMIT }, (_3, i2) => i2).map((i2) => {
          const ci = i2 % GIT_NAMED_COLOR_COUNT;
          return `
        .branch-label${i2} { fill: ${options2["gitBranchLabel" + ci]}; }
        .commit${i2} { stroke: ${options2["git" + ci]}; fill: ${options2["git" + ci]}; }
        .commit-highlight${i2} { stroke: ${options2["gitInv" + ci]}; fill: ${options2["gitInv" + ci]}; }
        .label${i2}  { fill: ${options2["git" + ci]}; }
        .arrow${i2} { stroke: ${options2["git" + ci]}; }
        `;
        }).join("\n")}`;
      }, "normalTheme");
      getStyles6 = /* @__PURE__ */ __name((options2) => {
        const config3 = getConfig();
        const { theme } = config3;
        const useNeoColorGen = NEO_COLOR_GEN_THEMES.has(theme);
        return `
  .commit-id,
  .commit-msg,
  .branch-label {
    fill: lightgrey;
    color: lightgrey;
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
  }
  
  ${useNeoColorGen ? genColor2(options2) : normalTheme(options2)}

  .branch {
    stroke-width: ${options2.strokeWidth};
    stroke: ${options2.commitLineColor ?? options2.lineColor};
    stroke-dasharray:  ${useNeoColorGen ? "4 2" : "2"};
  }
  .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${useNeoColorGen ? options2.nodeBorder : options2.commitLabelColor}; ${useNeoColorGen ? `font-weight:${options2.noteFontWeight};` : ""}}
  .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${useNeoColorGen ? "transparent" : options2.commitLabelBackground}; opacity: ${useNeoColorGen ? "" : 0.5};  }
  .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};}
  .tag-label-bkg { fill: ${useNeoColorGen ? options2.mainBkg : options2.tagLabelBackground}; stroke: ${useNeoColorGen ? options2.nodeBorder : options2.tagLabelBorder}; ${useNeoColorGen ? `filter:${options2.dropShadow}` : ""}  }
  .tag-hole { fill: ${options2.textColor}; }

  .commit-merge {
    stroke: ${useNeoColorGen ? options2.mainBkg : options2.primaryColor};
    fill: ${useNeoColorGen ? options2.mainBkg : options2.primaryColor};
  }
  .commit-reverse {
    stroke: ${useNeoColorGen ? options2.mainBkg : options2.primaryColor};
    fill: ${useNeoColorGen ? options2.mainBkg : options2.primaryColor};
    stroke-width: ${useNeoColorGen ? options2.strokeWidth : 3};
  }
  .commit-highlight-outer {
  }
  .commit-highlight-inner {
    stroke: ${useNeoColorGen ? options2.mainBkg : options2.primaryColor};
    fill: ${useNeoColorGen ? options2.mainBkg : options2.primaryColor};
  }

  .arrow {
    /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */
    stroke-width: ${REDUX_GEOMETRY_THEMES2.has(theme) ? options2.strokeWidth : 8};
    stroke-linecap: round;
    fill: none
  }
  .gitTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${options2.textColor};
  }
`;
      }, "getStyles");
      styles_default6 = getStyles6;
    }
  });

  // src/diagrams/git/gitGraphDiagram.ts
  var gitGraphDiagram_exports = {};
  __export(gitGraphDiagram_exports, {
    diagram: () => diagram5
  });
  var diagram5;
  var init_gitGraphDiagram = __esm({
    "src/diagrams/git/gitGraphDiagram.ts"() {
      "use strict";
      init_gitGraphParser();
      init_gitGraphAst();
      init_gitGraphRenderer();
      init_styles6();
      diagram5 = {
        parser: parser4,
        db,
        renderer: gitGraphRenderer_default,
        styles: styles_default6
      };
    }
  });

  // src/diagrams/gantt/parser/gantt.jison
  var parser5, gantt_default;
  var init_gantt = __esm({
    "src/diagrams/gantt/parser/gantt.jison"() {
      "use strict";
      parser5 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 35, 36, 38, 40], $V1 = [1, 26], $V2 = [1, 27], $V3 = [1, 28], $V4 = [1, 29], $V5 = [1, 30], $V6 = [1, 31], $V7 = [1, 32], $V8 = [1, 33], $V9 = [1, 34], $Va = [1, 9], $Vb = [1, 10], $Vc = [1, 11], $Vd = [1, 12], $Ve = [1, 13], $Vf = [1, 14], $Vg = [1, 15], $Vh = [1, 16], $Vi = [1, 19], $Vj = [1, 20], $Vk = [1, 21], $Vl = [1, 22], $Vm = [1, 23], $Vn = [1, 25], $Vo = [1, 35];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "gantt": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NL": 10, "weekday": 11, "weekday_monday": 12, "weekday_tuesday": 13, "weekday_wednesday": 14, "weekday_thursday": 15, "weekday_friday": 16, "weekday_saturday": 17, "weekday_sunday": 18, "weekend": 19, "weekend_friday": 20, "weekend_saturday": 21, "dateFormat": 22, "inclusiveEndDates": 23, "topAxis": 24, "axisFormat": 25, "tickInterval": 26, "excludes": 27, "includes": 28, "todayMarker": 29, "title": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "section": 36, "clickStatement": 37, "taskTxt": 38, "taskData": 39, "click": 40, "callbackname": 41, "callbackargs": 42, "href": 43, "clickStatementDebug": 44, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "gantt", 6: "EOF", 8: "SPACE", 10: "NL", 12: "weekday_monday", 13: "weekday_tuesday", 14: "weekday_wednesday", 15: "weekday_thursday", 16: "weekday_friday", 17: "weekday_saturday", 18: "weekday_sunday", 20: "weekend_friday", 21: "weekend_saturday", 22: "dateFormat", 23: "inclusiveEndDates", 24: "topAxis", 25: "axisFormat", 26: "tickInterval", 27: "excludes", 28: "includes", 29: "todayMarker", 30: "title", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 36: "section", 38: "taskTxt", 39: "taskData", 40: "click", 41: "callbackname", 42: "callbackargs", 43: "href" },
          productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [19, 1], [19, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [37, 2], [37, 3], [37, 3], [37, 4], [37, 3], [37, 4], [37, 2], [44, 2], [44, 3], [44, 3], [44, 4], [44, 3], [44, 4], [44, 2]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 1:
                return $$[$0 - 1];
                break;
              case 2:
                this.$ = [];
                break;
              case 3:
                $$[$0 - 1].push($$[$0]);
                this.$ = $$[$0 - 1];
                break;
              case 4:
              case 5:
                this.$ = $$[$0];
                break;
              case 6:
              case 7:
                this.$ = [];
                break;
              case 8:
                yy.setWeekday("monday");
                break;
              case 9:
                yy.setWeekday("tuesday");
                break;
              case 10:
                yy.setWeekday("wednesday");
                break;
              case 11:
                yy.setWeekday("thursday");
                break;
              case 12:
                yy.setWeekday("friday");
                break;
              case 13:
                yy.setWeekday("saturday");
                break;
              case 14:
                yy.setWeekday("sunday");
                break;
              case 15:
                yy.setWeekend("friday");
                break;
              case 16:
                yy.setWeekend("saturday");
                break;
              case 17:
                yy.setDateFormat($$[$0].substr(11));
                this.$ = $$[$0].substr(11);
                break;
              case 18:
                yy.enableInclusiveEndDates();
                this.$ = $$[$0].substr(18);
                break;
              case 19:
                yy.TopAxis();
                this.$ = $$[$0].substr(8);
                break;
              case 20:
                yy.setAxisFormat($$[$0].substr(11));
                this.$ = $$[$0].substr(11);
                break;
              case 21:
                yy.setTickInterval($$[$0].substr(13));
                this.$ = $$[$0].substr(13);
                break;
              case 22:
                yy.setExcludes($$[$0].substr(9));
                this.$ = $$[$0].substr(9);
                break;
              case 23:
                yy.setIncludes($$[$0].substr(9));
                this.$ = $$[$0].substr(9);
                break;
              case 24:
                yy.setTodayMarker($$[$0].substr(12));
                this.$ = $$[$0].substr(12);
                break;
              case 27:
                yy.setDiagramTitle($$[$0].substr(6));
                this.$ = $$[$0].substr(6);
                break;
              case 28:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 29:
              case 30:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 31:
                yy.addSection($$[$0].substr(8));
                this.$ = $$[$0].substr(8);
                break;
              case 33:
                yy.addTask($$[$0 - 1], $$[$0]);
                this.$ = "task";
                break;
              case 34:
                this.$ = $$[$0 - 1];
                yy.setClickEvent($$[$0 - 1], $$[$0], null);
                break;
              case 35:
                this.$ = $$[$0 - 2];
                yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);
                break;
              case 36:
                this.$ = $$[$0 - 2];
                yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null);
                yy.setLink($$[$0 - 2], $$[$0]);
                break;
              case 37:
                this.$ = $$[$0 - 3];
                yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);
                yy.setLink($$[$0 - 3], $$[$0]);
                break;
              case 38:
                this.$ = $$[$0 - 2];
                yy.setClickEvent($$[$0 - 2], $$[$0], null);
                yy.setLink($$[$0 - 2], $$[$0 - 1]);
                break;
              case 39:
                this.$ = $$[$0 - 3];
                yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]);
                yy.setLink($$[$0 - 3], $$[$0 - 2]);
                break;
              case 40:
                this.$ = $$[$0 - 1];
                yy.setLink($$[$0 - 1], $$[$0]);
                break;
              case 41:
              case 47:
                this.$ = $$[$0 - 1] + " " + $$[$0];
                break;
              case 42:
              case 43:
              case 45:
                this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0];
                break;
              case 44:
              case 46:
                this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0];
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o2($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 36, 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 17]), o2($V0, [2, 18]), o2($V0, [2, 19]), o2($V0, [2, 20]), o2($V0, [2, 21]), o2($V0, [2, 22]), o2($V0, [2, 23]), o2($V0, [2, 24]), o2($V0, [2, 25]), o2($V0, [2, 26]), o2($V0, [2, 27]), { 32: [1, 37] }, { 34: [1, 38] }, o2($V0, [2, 30]), o2($V0, [2, 31]), o2($V0, [2, 32]), { 39: [1, 39] }, o2($V0, [2, 8]), o2($V0, [2, 9]), o2($V0, [2, 10]), o2($V0, [2, 11]), o2($V0, [2, 12]), o2($V0, [2, 13]), o2($V0, [2, 14]), o2($V0, [2, 15]), o2($V0, [2, 16]), { 41: [1, 40], 43: [1, 41] }, o2($V0, [2, 4]), o2($V0, [2, 28]), o2($V0, [2, 29]), o2($V0, [2, 33]), o2($V0, [2, 34], { 42: [1, 42], 43: [1, 43] }), o2($V0, [2, 40], { 41: [1, 44] }), o2($V0, [2, 35], { 43: [1, 45] }), o2($V0, [2, 36]), o2($V0, [2, 38], { 42: [1, 46] }), o2($V0, [2, 37]), o2($V0, [2, 39])],
          defaultActions: {},
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  this.begin("open_directive");
                  return "open_directive";
                  break;
                case 1:
                  this.begin("acc_title");
                  return 31;
                  break;
                case 2:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 3:
                  this.begin("acc_descr");
                  return 33;
                  break;
                case 4:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 5:
                  this.begin("acc_descr_multiline");
                  break;
                case 6:
                  this.popState();
                  break;
                case 7:
                  return "acc_descr_multiline_value";
                  break;
                case 8:
                  break;
                case 9:
                  break;
                case 10:
                  break;
                case 11:
                  return 10;
                  break;
                case 12:
                  break;
                case 13:
                  break;
                case 14:
                  this.begin("href");
                  break;
                case 15:
                  this.popState();
                  break;
                case 16:
                  return 43;
                  break;
                case 17:
                  this.begin("callbackname");
                  break;
                case 18:
                  this.popState();
                  break;
                case 19:
                  this.popState();
                  this.begin("callbackargs");
                  break;
                case 20:
                  return 41;
                  break;
                case 21:
                  this.popState();
                  break;
                case 22:
                  return 42;
                  break;
                case 23:
                  this.begin("click");
                  break;
                case 24:
                  this.popState();
                  break;
                case 25:
                  return 40;
                  break;
                case 26:
                  return 4;
                  break;
                case 27:
                  return 22;
                  break;
                case 28:
                  return 23;
                  break;
                case 29:
                  return 24;
                  break;
                case 30:
                  return 25;
                  break;
                case 31:
                  return 26;
                  break;
                case 32:
                  return 28;
                  break;
                case 33:
                  return 27;
                  break;
                case 34:
                  return 29;
                  break;
                case 35:
                  return 12;
                  break;
                case 36:
                  return 13;
                  break;
                case 37:
                  return 14;
                  break;
                case 38:
                  return 15;
                  break;
                case 39:
                  return 16;
                  break;
                case 40:
                  return 17;
                  break;
                case 41:
                  return 18;
                  break;
                case 42:
                  return 20;
                  break;
                case 43:
                  return 21;
                  break;
                case 44:
                  return "date";
                  break;
                case 45:
                  return 30;
                  break;
                case 46:
                  return "accDescription";
                  break;
                case 47:
                  return 36;
                  break;
                case 48:
                  return 38;
                  break;
                case 49:
                  return 39;
                  break;
                case 50:
                  return ":";
                  break;
                case 51:
                  return 6;
                  break;
                case 52:
                  return "INVALID";
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:%%\{)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:weekday\s+monday\b)/i, /^(?:weekday\s+tuesday\b)/i, /^(?:weekday\s+wednesday\b)/i, /^(?:weekday\s+thursday\b)/i, /^(?:weekday\s+friday\b)/i, /^(?:weekday\s+saturday\b)/i, /^(?:weekday\s+sunday\b)/i, /^(?:weekend\s+friday\b)/i, /^(?:weekend\s+saturday\b)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^\n]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^\n]+)/i, /^(?:[^:\n]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],
            conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "callbackargs": { "rules": [21, 22], "inclusive": false }, "callbackname": { "rules": [18, 19, 20], "inclusive": false }, "href": { "rules": [15, 16], "inclusive": false }, "click": { "rules": [24, 25], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 17, 23, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser5.parser = parser5;
      gantt_default = parser5;
    }
  });

  // ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/isoWeek.js
  var require_isoWeek = __commonJS({
    "../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/isoWeek.js"(exports2, module2) {
      "use strict";
      !(function(e3, t4) {
        "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = t4() : "function" == typeof define && define.amd ? define(t4) : (e3 = "undefined" != typeof globalThis ? globalThis : e3 || self).dayjs_plugin_isoWeek = t4();
      })(exports2, (function() {
        "use strict";
        var e3 = "day";
        return function(t4, i2, s2) {
          var a2 = /* @__PURE__ */ __name(function(t5) {
            return t5.add(4 - t5.isoWeekday(), e3);
          }, "a"), d3 = i2.prototype;
          d3.isoWeekYear = function() {
            return a2(this).year();
          }, d3.isoWeek = function(t5) {
            if (!this.$utils().u(t5)) return this.add(7 * (t5 - this.isoWeek()), e3);
            var i3, d4, n3, o2, r2 = a2(this), u2 = (i3 = this.isoWeekYear(), d4 = this.$u, n3 = (d4 ? s2.utc : s2)().year(i3).startOf("year"), o2 = 4 - n3.isoWeekday(), n3.isoWeekday() > 4 && (o2 += 7), n3.add(o2, e3));
            return r2.diff(u2, "week") + 1;
          }, d3.isoWeekday = function(e4) {
            return this.$utils().u(e4) ? this.day() || 7 : this.day(this.day() % 7 ? e4 : e4 - 7);
          };
          var n2 = d3.startOf;
          d3.startOf = function(e4, t5) {
            var i3 = this.$utils(), s3 = !!i3.u(t5) || t5;
            return "isoweek" === i3.p(e4) ? s3 ? this.date(this.date() - (this.isoWeekday() - 1)).startOf("day") : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf("day") : n2.bind(this)(e4, t5);
          };
        };
      }));
    }
  });

  // ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/customParseFormat.js
  var require_customParseFormat = __commonJS({
    "../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/customParseFormat.js"(exports2, module2) {
      "use strict";
      !(function(e3, t4) {
        "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = t4() : "function" == typeof define && define.amd ? define(t4) : (e3 = "undefined" != typeof globalThis ? globalThis : e3 || self).dayjs_plugin_customParseFormat = t4();
      })(exports2, (function() {
        "use strict";
        var e3 = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, t4 = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, n2 = /\d/, r2 = /\d\d/, i2 = /\d\d?/, o2 = /\d*[^-_:/,()\s\d]+/, s2 = {}, a2 = /* @__PURE__ */ __name(function(e4) {
          return (e4 = +e4) + (e4 > 68 ? 1900 : 2e3);
        }, "a");
        var f2 = /* @__PURE__ */ __name(function(e4) {
          return function(t5) {
            this[e4] = +t5;
          };
        }, "f"), h3 = [/[+-]\d\d:?(\d\d)?|Z/, function(e4) {
          (this.zone || (this.zone = {})).offset = (function(e6) {
            if (!e6) return 0;
            if ("Z" === e6) return 0;
            var t5 = e6.match(/([+-]|\d\d)/g), n3 = 60 * t5[1] + (+t5[2] || 0);
            return 0 === n3 ? 0 : "+" === t5[0] ? -n3 : n3;
          })(e4);
        }], u2 = /* @__PURE__ */ __name(function(e4) {
          var t5 = s2[e4];
          return t5 && (t5.indexOf ? t5 : t5.s.concat(t5.f));
        }, "u"), d3 = /* @__PURE__ */ __name(function(e4, t5) {
          var n3, r3 = s2.meridiem;
          if (r3) {
            for (var i3 = 1; i3 <= 24; i3 += 1) if (e4.indexOf(r3(i3, 0, t5)) > -1) {
              n3 = i3 > 12;
              break;
            }
          } else n3 = e4 === (t5 ? "pm" : "PM");
          return n3;
        }, "d"), c3 = { A: [o2, function(e4) {
          this.afternoon = d3(e4, false);
        }], a: [o2, function(e4) {
          this.afternoon = d3(e4, true);
        }], Q: [n2, function(e4) {
          this.month = 3 * (e4 - 1) + 1;
        }], S: [n2, function(e4) {
          this.milliseconds = 100 * +e4;
        }], SS: [r2, function(e4) {
          this.milliseconds = 10 * +e4;
        }], SSS: [/\d{3}/, function(e4) {
          this.milliseconds = +e4;
        }], s: [i2, f2("seconds")], ss: [i2, f2("seconds")], m: [i2, f2("minutes")], mm: [i2, f2("minutes")], H: [i2, f2("hours")], h: [i2, f2("hours")], HH: [i2, f2("hours")], hh: [i2, f2("hours")], D: [i2, f2("day")], DD: [r2, f2("day")], Do: [o2, function(e4) {
          var t5 = s2.ordinal, n3 = e4.match(/\d+/);
          if (this.day = n3[0], t5) for (var r3 = 1; r3 <= 31; r3 += 1) t5(r3).replace(/\[|\]/g, "") === e4 && (this.day = r3);
        }], w: [i2, f2("week")], ww: [r2, f2("week")], M: [i2, f2("month")], MM: [r2, f2("month")], MMM: [o2, function(e4) {
          var t5 = u2("months"), n3 = (u2("monthsShort") || t5.map((function(e6) {
            return e6.slice(0, 3);
          }))).indexOf(e4) + 1;
          if (n3 < 1) throw new Error();
          this.month = n3 % 12 || n3;
        }], MMMM: [o2, function(e4) {
          var t5 = u2("months").indexOf(e4) + 1;
          if (t5 < 1) throw new Error();
          this.month = t5 % 12 || t5;
        }], Y: [/[+-]?\d+/, f2("year")], YY: [r2, function(e4) {
          this.year = a2(e4);
        }], YYYY: [/\d{4}/, f2("year")], Z: h3, ZZ: h3 };
        function l4(n3) {
          var r3, i3;
          r3 = n3, i3 = s2 && s2.formats;
          for (var o3 = (n3 = r3.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, (function(t5, n4, r4) {
            var o4 = r4 && r4.toUpperCase();
            return n4 || i3[r4] || e3[r4] || i3[o4].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(e4, t6, n5) {
              return t6 || n5.slice(1);
            }));
          }))).match(t4), a3 = o3.length, f3 = 0; f3 < a3; f3 += 1) {
            var h4 = o3[f3], u3 = c3[h4], d4 = u3 && u3[0], l5 = u3 && u3[1];
            o3[f3] = l5 ? { regex: d4, parser: l5 } : h4.replace(/^\[|\]$/g, "");
          }
          return function(e4) {
            for (var t5 = {}, n4 = 0, r4 = 0; n4 < a3; n4 += 1) {
              var i4 = o3[n4];
              if ("string" == typeof i4) r4 += i4.length;
              else {
                var s3 = i4.regex, f4 = i4.parser, h5 = e4.slice(r4), u4 = s3.exec(h5)[0];
                f4.call(t5, u4), e4 = e4.replace(u4, "");
              }
            }
            return (function(e6) {
              var t6 = e6.afternoon;
              if (void 0 !== t6) {
                var n5 = e6.hours;
                t6 ? n5 < 12 && (e6.hours += 12) : 12 === n5 && (e6.hours = 0), delete e6.afternoon;
              }
            })(t5), t5;
          };
        }
        __name(l4, "l");
        return function(e4, t5, n3) {
          n3.p.customParseFormat = true, e4 && e4.parseTwoDigitYear && (a2 = e4.parseTwoDigitYear);
          var r3 = t5.prototype, i3 = r3.parse;
          r3.parse = function(e6) {
            var t6 = e6.date, r4 = e6.utc, o3 = e6.args;
            this.$u = r4;
            var a3 = o3[1];
            if ("string" == typeof a3) {
              var f3 = true === o3[2], h4 = true === o3[3], u3 = f3 || h4, d4 = o3[2];
              h4 && (d4 = o3[2]), s2 = this.$locale(), !f3 && d4 && (s2 = n3.Ls[d4]), this.$d = (function(e7, t7, n4, r5) {
                try {
                  if (["x", "X"].indexOf(t7) > -1) return new Date(("X" === t7 ? 1e3 : 1) * e7);
                  var i4 = l4(t7)(e7), o4 = i4.year, s3 = i4.month, a4 = i4.day, f4 = i4.hours, h5 = i4.minutes, u4 = i4.seconds, d5 = i4.milliseconds, c5 = i4.zone, m4 = i4.week, M4 = /* @__PURE__ */ new Date(), Y3 = a4 || (o4 || s3 ? 1 : M4.getDate()), p3 = o4 || M4.getFullYear(), v3 = 0;
                  o4 && !s3 || (v3 = s3 > 0 ? s3 - 1 : M4.getMonth());
                  var D4, w4 = f4 || 0, g2 = h5 || 0, y6 = u4 || 0, L3 = d5 || 0;
                  return c5 ? new Date(Date.UTC(p3, v3, Y3, w4, g2, y6, L3 + 60 * c5.offset * 1e3)) : n4 ? new Date(Date.UTC(p3, v3, Y3, w4, g2, y6, L3)) : (D4 = new Date(p3, v3, Y3, w4, g2, y6, L3), m4 && (D4 = r5(D4).week(m4).toDate()), D4);
                } catch (e8) {
                  return /* @__PURE__ */ new Date("");
                }
              })(t6, a3, r4, n3), this.init(), d4 && true !== d4 && (this.$L = this.locale(d4).$L), u3 && t6 != this.format(a3) && (this.$d = /* @__PURE__ */ new Date("")), s2 = {};
            } else if (a3 instanceof Array) for (var c4 = a3.length, m3 = 1; m3 <= c4; m3 += 1) {
              o3[1] = a3[m3 - 1];
              var M3 = n3.apply(this, o3);
              if (M3.isValid()) {
                this.$d = M3.$d, this.$L = M3.$L, this.init();
                break;
              }
              m3 === c4 && (this.$d = /* @__PURE__ */ new Date(""));
            }
            else i3.call(this, e6);
          };
        };
      }));
    }
  });

  // ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/advancedFormat.js
  var require_advancedFormat = __commonJS({
    "../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/advancedFormat.js"(exports2, module2) {
      "use strict";
      !(function(e3, t4) {
        "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = t4() : "function" == typeof define && define.amd ? define(t4) : (e3 = "undefined" != typeof globalThis ? globalThis : e3 || self).dayjs_plugin_advancedFormat = t4();
      })(exports2, (function() {
        "use strict";
        return function(e3, t4) {
          var r2 = t4.prototype, n2 = r2.format;
          r2.format = function(e4) {
            var t5 = this, r3 = this.$locale();
            if (!this.isValid()) return n2.bind(this)(e4);
            var s2 = this.$utils(), a2 = (e4 || "YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, (function(e6) {
              switch (e6) {
                case "Q":
                  return Math.ceil((t5.$M + 1) / 3);
                case "Do":
                  return r3.ordinal(t5.$D);
                case "gggg":
                  return t5.weekYear();
                case "GGGG":
                  return t5.isoWeekYear();
                case "wo":
                  return r3.ordinal(t5.week(), "W");
                case "w":
                case "ww":
                  return s2.s(t5.week(), "w" === e6 ? 1 : 2, "0");
                case "W":
                case "WW":
                  return s2.s(t5.isoWeek(), "W" === e6 ? 1 : 2, "0");
                case "k":
                case "kk":
                  return s2.s(String(0 === t5.$H ? 24 : t5.$H), "k" === e6 ? 1 : 2, "0");
                case "X":
                  return Math.floor(t5.$d.getTime() / 1e3);
                case "x":
                  return t5.$d.getTime();
                case "z":
                  return "[" + t5.offsetName() + "]";
                case "zzz":
                  return "[" + t5.offsetName("long") + "]";
                default:
                  return e6;
              }
            }));
            return n2.bind(this)(a2);
          };
        };
      }));
    }
  });

  // src/diagrams/gantt/ganttDb.js
  function getTaskTags(data6, task, tags2) {
    let matchFound = true;
    while (matchFound) {
      matchFound = false;
      tags2.forEach(function(t4) {
        const pattern = "^\\s*" + t4 + "\\s*$";
        const regex2 = new RegExp(pattern);
        if (data6[0].match(regex2)) {
          task[t4] = true;
          data6.shift(1);
          matchFound = true;
        }
      });
    }
  }
  var import_sanitize_url4, import_dayjs2, import_isoWeek, import_customParseFormat, import_advancedFormat, WEEKEND_START_DAY, dateFormat, axisFormat, tickInterval, todayMarker, includes2, excludes, links, sections, tasks, currentSection, displayMode, tags, funs, diagramId, inclusiveEndDates, topAxis, weekday, weekend, lastOrder, clear9, setDiagramId, setAxisFormat, getAxisFormat, setTickInterval, getTickInterval, setTodayMarker, getTodayMarker, setDateFormat, enableInclusiveEndDates, endDatesAreInclusive, enableTopAxis, topAxisEnabled, setDisplayMode, getDisplayMode, getDateFormat, mergeTokens, setIncludes, getIncludes, setExcludes, getExcludes, getLinks, addSection, getSections, getTasks, isInvalidDate, setWeekday, getWeekday, setWeekend, checkTaskDates, fixTaskDates, getStartDate, parseDuration, getEndDate, taskCnt, parseId, compileData, parseData, lastTask, lastTaskID, rawTasks, taskDb, addTask, findTaskById, addTaskOrg, compileTasks, setLink, setClass, setClickFun, pushFun, setClickEvent, bindFunctions, ganttDb_default;
  var init_ganttDb = __esm({
    "src/diagrams/gantt/ganttDb.js"() {
      "use strict";
      import_sanitize_url4 = __toESM(require_dist(), 1);
      import_dayjs2 = __toESM(require_dayjs_min(), 1);
      import_isoWeek = __toESM(require_isoWeek(), 1);
      import_customParseFormat = __toESM(require_customParseFormat(), 1);
      import_advancedFormat = __toESM(require_advancedFormat(), 1);
      init_logger();
      init_diagramAPI();
      init_utils2();
      init_commonDb();
      import_dayjs2.default.extend(import_isoWeek.default);
      import_dayjs2.default.extend(import_customParseFormat.default);
      import_dayjs2.default.extend(import_advancedFormat.default);
      WEEKEND_START_DAY = { friday: 5, saturday: 6 };
      dateFormat = "";
      axisFormat = "";
      tickInterval = void 0;
      todayMarker = "";
      includes2 = [];
      excludes = [];
      links = /* @__PURE__ */ new Map();
      sections = [];
      tasks = [];
      currentSection = "";
      displayMode = "";
      tags = ["active", "done", "crit", "milestone", "vert"];
      funs = [];
      diagramId = "";
      inclusiveEndDates = false;
      topAxis = false;
      weekday = "sunday";
      weekend = "saturday";
      lastOrder = 0;
      clear9 = /* @__PURE__ */ __name(function() {
        sections = [];
        tasks = [];
        currentSection = "";
        funs = [];
        taskCnt = 0;
        lastTask = void 0;
        lastTaskID = void 0;
        rawTasks = [];
        dateFormat = "";
        axisFormat = "";
        displayMode = "";
        tickInterval = void 0;
        todayMarker = "";
        includes2 = [];
        excludes = [];
        inclusiveEndDates = false;
        topAxis = false;
        lastOrder = 0;
        links = /* @__PURE__ */ new Map();
        diagramId = "";
        clear();
        weekday = "sunday";
        weekend = "saturday";
      }, "clear");
      setDiagramId = /* @__PURE__ */ __name(function(id41) {
        diagramId = id41;
      }, "setDiagramId");
      setAxisFormat = /* @__PURE__ */ __name(function(txt) {
        axisFormat = txt;
      }, "setAxisFormat");
      getAxisFormat = /* @__PURE__ */ __name(function() {
        return axisFormat;
      }, "getAxisFormat");
      setTickInterval = /* @__PURE__ */ __name(function(txt) {
        tickInterval = txt;
      }, "setTickInterval");
      getTickInterval = /* @__PURE__ */ __name(function() {
        return tickInterval;
      }, "getTickInterval");
      setTodayMarker = /* @__PURE__ */ __name(function(txt) {
        todayMarker = txt;
      }, "setTodayMarker");
      getTodayMarker = /* @__PURE__ */ __name(function() {
        return todayMarker;
      }, "getTodayMarker");
      setDateFormat = /* @__PURE__ */ __name(function(txt) {
        dateFormat = txt;
      }, "setDateFormat");
      enableInclusiveEndDates = /* @__PURE__ */ __name(function() {
        inclusiveEndDates = true;
      }, "enableInclusiveEndDates");
      endDatesAreInclusive = /* @__PURE__ */ __name(function() {
        return inclusiveEndDates;
      }, "endDatesAreInclusive");
      enableTopAxis = /* @__PURE__ */ __name(function() {
        topAxis = true;
      }, "enableTopAxis");
      topAxisEnabled = /* @__PURE__ */ __name(function() {
        return topAxis;
      }, "topAxisEnabled");
      setDisplayMode = /* @__PURE__ */ __name(function(txt) {
        displayMode = txt;
      }, "setDisplayMode");
      getDisplayMode = /* @__PURE__ */ __name(function() {
        return displayMode;
      }, "getDisplayMode");
      getDateFormat = /* @__PURE__ */ __name(function() {
        return dateFormat;
      }, "getDateFormat");
      mergeTokens = /* @__PURE__ */ __name((existing, txt) => {
        const tokens2 = txt.toLowerCase().split(/[\s,]+/).filter((t4) => t4 !== "");
        return [.../* @__PURE__ */ new Set([...existing, ...tokens2])];
      }, "mergeTokens");
      setIncludes = /* @__PURE__ */ __name(function(txt) {
        includes2 = mergeTokens(includes2, txt);
      }, "setIncludes");
      getIncludes = /* @__PURE__ */ __name(function() {
        return includes2;
      }, "getIncludes");
      setExcludes = /* @__PURE__ */ __name(function(txt) {
        excludes = mergeTokens(excludes, txt);
      }, "setExcludes");
      getExcludes = /* @__PURE__ */ __name(function() {
        return excludes;
      }, "getExcludes");
      getLinks = /* @__PURE__ */ __name(function() {
        return links;
      }, "getLinks");
      addSection = /* @__PURE__ */ __name(function(txt) {
        currentSection = txt;
        sections.push(txt);
      }, "addSection");
      getSections = /* @__PURE__ */ __name(function() {
        return sections;
      }, "getSections");
      getTasks = /* @__PURE__ */ __name(function() {
        let allItemsProcessed = compileTasks();
        const maxDepth = 10;
        let iterationCount = 0;
        while (!allItemsProcessed && iterationCount < maxDepth) {
          allItemsProcessed = compileTasks();
          iterationCount++;
        }
        tasks = rawTasks;
        return tasks;
      }, "getTasks");
      isInvalidDate = /* @__PURE__ */ __name(function(date2, dateFormat2, excludes2, includes3) {
        const formattedDate = date2.format(dateFormat2.trim());
        const dateOnly = date2.format("YYYY-MM-DD");
        if (includes3.includes(formattedDate) || includes3.includes(dateOnly)) {
          return false;
        }
        if (excludes2.includes("weekends") && (date2.isoWeekday() === WEEKEND_START_DAY[weekend] || date2.isoWeekday() === WEEKEND_START_DAY[weekend] + 1)) {
          return true;
        }
        if (excludes2.includes(date2.format("dddd").toLowerCase())) {
          return true;
        }
        return excludes2.includes(formattedDate) || excludes2.includes(dateOnly);
      }, "isInvalidDate");
      setWeekday = /* @__PURE__ */ __name(function(txt) {
        weekday = txt;
      }, "setWeekday");
      getWeekday = /* @__PURE__ */ __name(function() {
        return weekday;
      }, "getWeekday");
      setWeekend = /* @__PURE__ */ __name(function(startDay) {
        weekend = startDay;
      }, "setWeekend");
      checkTaskDates = /* @__PURE__ */ __name(function(task, dateFormat2, excludes2, includes3) {
        if (!excludes2.length || task.manualEndTime) {
          return;
        }
        let startTime;
        if (task.startTime instanceof Date) {
          startTime = (0, import_dayjs2.default)(task.startTime);
        } else {
          startTime = (0, import_dayjs2.default)(task.startTime, dateFormat2, true);
        }
        startTime = startTime.add(1, "d");
        let originalEndTime;
        if (task.endTime instanceof Date) {
          originalEndTime = (0, import_dayjs2.default)(task.endTime);
        } else {
          originalEndTime = (0, import_dayjs2.default)(task.endTime, dateFormat2, true);
        }
        const [fixedEndTime, renderEndTime] = fixTaskDates(
          startTime,
          originalEndTime,
          dateFormat2,
          excludes2,
          includes3
        );
        task.endTime = fixedEndTime.toDate();
        task.renderEndTime = renderEndTime;
      }, "checkTaskDates");
      fixTaskDates = /* @__PURE__ */ __name(function(startTime, endTime, dateFormat2, excludes2, includes3) {
        let invalid = false;
        let renderEndTime = null;
        const maxEndTime = endTime.add(1e4, "d");
        while (startTime <= endTime) {
          if (!invalid) {
            renderEndTime = endTime.toDate();
          }
          invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes3);
          if (invalid) {
            endTime = endTime.add(1, "d");
            if (endTime > maxEndTime) {
              throw new Error(
                "Failed to find a valid date that was not excluded by `excludes` after 10,000 iterations."
              );
            }
          }
          startTime = startTime.add(1, "d");
        }
        return [endTime, renderEndTime];
      }, "fixTaskDates");
      getStartDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str2) {
        str2 = str2.trim();
        const isTimestampFormat = /* @__PURE__ */ __name((format3) => {
          const trimmedFormat = format3.trim();
          return trimmedFormat === "x" || trimmedFormat === "X";
        }, "isTimestampFormat");
        if (isTimestampFormat(dateFormat2) && /^\d+$/.test(str2)) {
          return new Date(Number(str2));
        }
        const afterRePattern = /^after\s+(?<ids>[\d\w- ]+)/;
        const afterStatement = afterRePattern.exec(str2);
        if (afterStatement !== null) {
          let latestTask = null;
          for (const id41 of afterStatement.groups.ids.split(" ")) {
            let task = findTaskById(id41);
            if (task !== void 0 && (!latestTask || task.endTime > latestTask.endTime)) {
              latestTask = task;
            }
          }
          if (latestTask) {
            return latestTask.endTime;
          }
          const today = /* @__PURE__ */ new Date();
          today.setHours(0, 0, 0, 0);
          return today;
        }
        let mDate = (0, import_dayjs2.default)(str2, dateFormat2.trim(), true);
        if (mDate.isValid()) {
          return mDate.toDate();
        } else {
          log.debug("Invalid date:" + str2);
          log.debug("With date format:" + dateFormat2.trim());
          const d3 = new Date(str2);
          if (d3 === void 0 || isNaN(d3.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously
          // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304.
          // This can cause virtually infinite loops while rendering, so for the
          // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as
          // invalid.
          d3.getFullYear() < -1e4 || d3.getFullYear() > 1e4) {
            throw new Error("Invalid date:" + str2);
          }
          return d3;
        }
      }, "getStartDate");
      parseDuration = /* @__PURE__ */ __name(function(str2) {
        const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str2.trim());
        if (statement !== null) {
          return [Number.parseFloat(statement[1]), statement[2]];
        }
        return [NaN, "ms"];
      }, "parseDuration");
      getEndDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str2, inclusive = false) {
        str2 = str2.trim();
        const untilRePattern = /^until\s+(?<ids>[\d\w- ]+)/;
        const untilStatement = untilRePattern.exec(str2);
        if (untilStatement !== null) {
          let earliestTask = null;
          for (const id41 of untilStatement.groups.ids.split(" ")) {
            let task = findTaskById(id41);
            if (task !== void 0 && (!earliestTask || task.startTime < earliestTask.startTime)) {
              earliestTask = task;
            }
          }
          if (earliestTask) {
            return earliestTask.startTime;
          }
          const today = /* @__PURE__ */ new Date();
          today.setHours(0, 0, 0, 0);
          return today;
        }
        let parsedDate = (0, import_dayjs2.default)(str2, dateFormat2.trim(), true);
        if (parsedDate.isValid()) {
          if (inclusive) {
            parsedDate = parsedDate.add(1, "d");
          }
          return parsedDate.toDate();
        }
        let endTime = (0, import_dayjs2.default)(prevTime);
        const [durationValue, durationUnit] = parseDuration(str2);
        if (!Number.isNaN(durationValue)) {
          const newEndTime = endTime.add(durationValue, durationUnit);
          if (newEndTime.isValid()) {
            endTime = newEndTime;
          }
        }
        return endTime.toDate();
      }, "getEndDate");
      taskCnt = 0;
      parseId = /* @__PURE__ */ __name(function(idStr) {
        if (idStr === void 0) {
          taskCnt = taskCnt + 1;
          return "task" + taskCnt;
        }
        return idStr;
      }, "parseId");
      compileData = /* @__PURE__ */ __name(function(prevTask, dataStr) {
        let ds;
        if (dataStr.substr(0, 1) === ":") {
          ds = dataStr.substr(1, dataStr.length);
        } else {
          ds = dataStr;
        }
        const data6 = ds.split(",");
        const task = {};
        getTaskTags(data6, task, tags);
        for (let i2 = 0; i2 < data6.length; i2++) {
          data6[i2] = data6[i2].trim();
        }
        let endTimeData = "";
        switch (data6.length) {
          case 1:
            task.id = parseId();
            task.startTime = prevTask.endTime;
            endTimeData = data6[0];
            break;
          case 2:
            task.id = parseId();
            task.startTime = getStartDate(void 0, dateFormat, data6[0]);
            endTimeData = data6[1];
            break;
          case 3:
            task.id = parseId(data6[0]);
            task.startTime = getStartDate(void 0, dateFormat, data6[1]);
            endTimeData = data6[2];
            break;
          default:
        }
        if (endTimeData) {
          task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);
          task.manualEndTime = (0, import_dayjs2.default)(endTimeData, "YYYY-MM-DD", true).isValid();
          checkTaskDates(task, dateFormat, excludes, includes2);
        }
        return task;
      }, "compileData");
      parseData = /* @__PURE__ */ __name(function(prevTaskId, dataStr) {
        let ds;
        if (dataStr.substr(0, 1) === ":") {
          ds = dataStr.substr(1, dataStr.length);
        } else {
          ds = dataStr;
        }
        const data6 = ds.split(",");
        const task = {};
        getTaskTags(data6, task, tags);
        for (let i2 = 0; i2 < data6.length; i2++) {
          data6[i2] = data6[i2].trim();
        }
        switch (data6.length) {
          case 1:
            task.id = parseId();
            task.startTime = {
              type: "prevTaskEnd",
              id: prevTaskId
            };
            task.endTime = {
              data: data6[0]
            };
            break;
          case 2:
            task.id = parseId();
            task.startTime = {
              type: "getStartDate",
              startData: data6[0]
            };
            task.endTime = {
              data: data6[1]
            };
            break;
          case 3:
            task.id = parseId(data6[0]);
            task.startTime = {
              type: "getStartDate",
              startData: data6[1]
            };
            task.endTime = {
              data: data6[2]
            };
            break;
          default:
        }
        return task;
      }, "parseData");
      rawTasks = [];
      taskDb = {};
      addTask = /* @__PURE__ */ __name(function(descr, data6) {
        const rawTask = {
          section: currentSection,
          type: currentSection,
          processed: false,
          manualEndTime: false,
          renderEndTime: null,
          raw: { data: data6 },
          task: descr,
          classes: []
        };
        const taskInfo = parseData(lastTaskID, data6);
        rawTask.raw.startTime = taskInfo.startTime;
        rawTask.raw.endTime = taskInfo.endTime;
        rawTask.id = taskInfo.id;
        rawTask.prevTaskId = lastTaskID;
        rawTask.active = taskInfo.active;
        rawTask.done = taskInfo.done;
        rawTask.crit = taskInfo.crit;
        rawTask.milestone = taskInfo.milestone;
        rawTask.vert = taskInfo.vert;
        if (rawTask.vert) {
          rawTask.order = -1;
        } else {
          rawTask.order = lastOrder;
          lastOrder++;
        }
        const pos = rawTasks.push(rawTask);
        lastTaskID = rawTask.id;
        taskDb[rawTask.id] = pos - 1;
      }, "addTask");
      findTaskById = /* @__PURE__ */ __name(function(id41) {
        const pos = taskDb[id41];
        return rawTasks[pos];
      }, "findTaskById");
      addTaskOrg = /* @__PURE__ */ __name(function(descr, data6) {
        const newTask = {
          section: currentSection,
          type: currentSection,
          description: descr,
          task: descr,
          classes: []
        };
        const taskInfo = compileData(lastTask, data6);
        newTask.startTime = taskInfo.startTime;
        newTask.endTime = taskInfo.endTime;
        newTask.id = taskInfo.id;
        newTask.active = taskInfo.active;
        newTask.done = taskInfo.done;
        newTask.crit = taskInfo.crit;
        newTask.milestone = taskInfo.milestone;
        newTask.vert = taskInfo.vert;
        lastTask = newTask;
        tasks.push(newTask);
      }, "addTaskOrg");
      compileTasks = /* @__PURE__ */ __name(function() {
        const compileTask = /* @__PURE__ */ __name(function(pos) {
          const task = rawTasks[pos];
          let startTime = "";
          switch (rawTasks[pos].raw.startTime.type) {
            case "prevTaskEnd": {
              const prevTask = findTaskById(task.prevTaskId);
              task.startTime = prevTask.endTime;
              break;
            }
            case "getStartDate":
              startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData);
              if (startTime) {
                rawTasks[pos].startTime = startTime;
              }
              break;
          }
          if (rawTasks[pos].startTime) {
            rawTasks[pos].endTime = getEndDate(
              rawTasks[pos].startTime,
              dateFormat,
              rawTasks[pos].raw.endTime.data,
              inclusiveEndDates
            );
            if (rawTasks[pos].endTime) {
              rawTasks[pos].processed = true;
              rawTasks[pos].manualEndTime = (0, import_dayjs2.default)(
                rawTasks[pos].raw.endTime.data,
                "YYYY-MM-DD",
                true
              ).isValid();
              checkTaskDates(rawTasks[pos], dateFormat, excludes, includes2);
            }
          }
          return rawTasks[pos].processed;
        }, "compileTask");
        let allProcessed = true;
        for (const [i2, rawTask] of rawTasks.entries()) {
          compileTask(i2);
          allProcessed = allProcessed && rawTask.processed;
        }
        return allProcessed;
      }, "compileTasks");
      setLink = /* @__PURE__ */ __name(function(ids, _linkStr) {
        let linkStr = _linkStr;
        if (getConfig2().securityLevel !== "loose") {
          linkStr = (0, import_sanitize_url4.sanitizeUrl)(_linkStr);
        }
        ids.split(",").forEach(function(id41) {
          let rawTask = findTaskById(id41);
          if (rawTask !== void 0) {
            pushFun(id41, () => {
              window.open(linkStr, "_self");
            });
            links.set(id41, linkStr);
          }
        });
        setClass(ids, "clickable");
      }, "setLink");
      setClass = /* @__PURE__ */ __name(function(ids, className) {
        ids.split(",").forEach(function(id41) {
          let rawTask = findTaskById(id41);
          if (rawTask !== void 0) {
            rawTask.classes.push(className);
          }
        });
      }, "setClass");
      setClickFun = /* @__PURE__ */ __name(function(id41, functionName, functionArgs) {
        if (getConfig2().securityLevel !== "loose") {
          return;
        }
        if (functionName === void 0) {
          return;
        }
        let argList = [];
        if (typeof functionArgs === "string") {
          argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
          for (let i2 = 0; i2 < argList.length; i2++) {
            let item = argList[i2].trim();
            if (item.startsWith('"') && item.endsWith('"')) {
              item = item.substr(1, item.length - 2);
            }
            argList[i2] = item;
          }
        }
        if (argList.length === 0) {
          argList.push(id41);
        }
        let rawTask = findTaskById(id41);
        if (rawTask !== void 0) {
          pushFun(id41, () => {
            utils_default2.runFunc(functionName, ...argList);
          });
        }
      }, "setClickFun");
      pushFun = /* @__PURE__ */ __name(function(id41, callbackFunction) {
        funs.push(
          function() {
            const prefixedId = diagramId ? `${diagramId}-${id41}` : id41;
            const elem = document.querySelector(`[id="${prefixedId}"]`);
            if (elem !== null) {
              elem.addEventListener("click", function() {
                callbackFunction();
              });
            }
          },
          function() {
            const prefixedId = diagramId ? `${diagramId}-${id41}` : id41;
            const elem = document.querySelector(`[id="${prefixedId}-text"]`);
            if (elem !== null) {
              elem.addEventListener("click", function() {
                callbackFunction();
              });
            }
          }
        );
      }, "pushFun");
      setClickEvent = /* @__PURE__ */ __name(function(ids, functionName, functionArgs) {
        ids.split(",").forEach(function(id41) {
          setClickFun(id41, functionName, functionArgs);
        });
        setClass(ids, "clickable");
      }, "setClickEvent");
      bindFunctions = /* @__PURE__ */ __name(function(element3) {
        funs.forEach(function(fun) {
          fun(element3);
        });
      }, "bindFunctions");
      ganttDb_default = {
        getConfig: /* @__PURE__ */ __name(() => getConfig2().gantt, "getConfig"),
        clear: clear9,
        setDateFormat,
        getDateFormat,
        enableInclusiveEndDates,
        endDatesAreInclusive,
        enableTopAxis,
        topAxisEnabled,
        setAxisFormat,
        getAxisFormat,
        setTickInterval,
        getTickInterval,
        setTodayMarker,
        getTodayMarker,
        setAccTitle,
        getAccTitle,
        setDiagramTitle,
        getDiagramTitle,
        setDiagramId,
        setDisplayMode,
        getDisplayMode,
        setAccDescription,
        getAccDescription,
        addSection,
        getSections,
        getTasks,
        addTask,
        findTaskById,
        addTaskOrg,
        setIncludes,
        getIncludes,
        setExcludes,
        getExcludes,
        setClickEvent,
        setLink,
        getLinks,
        bindFunctions,
        parseDuration,
        isInvalidDate,
        setWeekday,
        getWeekday,
        setWeekend
      };
      __name(getTaskTags, "getTaskTags");
    }
  });

  // ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/duration.js
  var require_duration = __commonJS({
    "../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/duration.js"(exports2, module2) {
      "use strict";
      !(function(t4, s2) {
        "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = s2() : "function" == typeof define && define.amd ? define(s2) : (t4 = "undefined" != typeof globalThis ? globalThis : t4 || self).dayjs_plugin_duration = s2();
      })(exports2, (function() {
        "use strict";
        var t4, s2, n2 = 1e3, i2 = 6e4, e3 = 36e5, r2 = 864e5, o2 = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, u2 = 31536e6, d3 = 2628e6, a2 = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/, h3 = { years: u2, months: d3, days: r2, hours: e3, minutes: i2, seconds: n2, milliseconds: 1, weeks: 6048e5 }, c3 = /* @__PURE__ */ __name(function(t5) {
          return t5 instanceof g2;
        }, "c"), f2 = /* @__PURE__ */ __name(function(t5, s3, n3) {
          return new g2(t5, n3, s3.$l);
        }, "f"), m3 = /* @__PURE__ */ __name(function(t5) {
          return s2.p(t5) + "s";
        }, "m"), l4 = /* @__PURE__ */ __name(function(t5) {
          return t5 < 0;
        }, "l"), $4 = /* @__PURE__ */ __name(function(t5) {
          return l4(t5) ? Math.ceil(t5) : Math.floor(t5);
        }, "$"), y6 = /* @__PURE__ */ __name(function(t5) {
          return Math.abs(t5);
        }, "y"), v3 = /* @__PURE__ */ __name(function(t5, s3) {
          return t5 ? l4(t5) ? { negative: true, format: "" + y6(t5) + s3 } : { negative: false, format: "" + t5 + s3 } : { negative: false, format: "" };
        }, "v"), g2 = (function() {
          function l5(t5, s3, n3) {
            var i3 = this;
            if (this.$d = {}, this.$l = n3, void 0 === t5 && (this.$ms = 0, this.parseFromMilliseconds()), s3) return f2(t5 * h3[m3(s3)], this);
            if ("number" == typeof t5) return this.$ms = t5, this.parseFromMilliseconds(), this;
            if ("object" == typeof t5) return Object.keys(t5).forEach((function(s4) {
              i3.$d[m3(s4)] = t5[s4];
            })), this.calMilliseconds(), this;
            if ("string" == typeof t5) {
              var e4 = t5.match(a2);
              if (e4) {
                var r3 = e4.slice(2).map((function(t6) {
                  return null != t6 ? Number(t6) : 0;
                }));
                return this.$d.years = r3[0], this.$d.months = r3[1], this.$d.weeks = r3[2], this.$d.days = r3[3], this.$d.hours = r3[4], this.$d.minutes = r3[5], this.$d.seconds = r3[6], this.calMilliseconds(), this;
              }
            }
            return this;
          }
          __name(l5, "l");
          var y7 = l5.prototype;
          return y7.calMilliseconds = function() {
            var t5 = this;
            this.$ms = Object.keys(this.$d).reduce((function(s3, n3) {
              return s3 + (t5.$d[n3] || 0) * h3[n3];
            }), 0);
          }, y7.parseFromMilliseconds = function() {
            var t5 = this.$ms;
            this.$d.years = $4(t5 / u2), t5 %= u2, this.$d.months = $4(t5 / d3), t5 %= d3, this.$d.days = $4(t5 / r2), t5 %= r2, this.$d.hours = $4(t5 / e3), t5 %= e3, this.$d.minutes = $4(t5 / i2), t5 %= i2, this.$d.seconds = $4(t5 / n2), t5 %= n2, this.$d.milliseconds = t5;
          }, y7.toISOString = function() {
            var t5 = v3(this.$d.years, "Y"), s3 = v3(this.$d.months, "M"), n3 = +this.$d.days || 0;
            this.$d.weeks && (n3 += 7 * this.$d.weeks);
            var i3 = v3(n3, "D"), e4 = v3(this.$d.hours, "H"), r3 = v3(this.$d.minutes, "M"), o3 = this.$d.seconds || 0;
            this.$d.milliseconds && (o3 += this.$d.milliseconds / 1e3, o3 = Math.round(1e3 * o3) / 1e3);
            var u3 = v3(o3, "S"), d4 = t5.negative || s3.negative || i3.negative || e4.negative || r3.negative || u3.negative, a3 = e4.format || r3.format || u3.format ? "T" : "", h4 = (d4 ? "-" : "") + "P" + t5.format + s3.format + i3.format + a3 + e4.format + r3.format + u3.format;
            return "P" === h4 || "-P" === h4 ? "P0D" : h4;
          }, y7.toJSON = function() {
            return this.toISOString();
          }, y7.format = function(t5) {
            var n3 = t5 || "YYYY-MM-DDTHH:mm:ss", i3 = { Y: this.$d.years, YY: s2.s(this.$d.years, 2, "0"), YYYY: s2.s(this.$d.years, 4, "0"), M: this.$d.months, MM: s2.s(this.$d.months, 2, "0"), D: this.$d.days, DD: s2.s(this.$d.days, 2, "0"), H: this.$d.hours, HH: s2.s(this.$d.hours, 2, "0"), m: this.$d.minutes, mm: s2.s(this.$d.minutes, 2, "0"), s: this.$d.seconds, ss: s2.s(this.$d.seconds, 2, "0"), SSS: s2.s(this.$d.milliseconds, 3, "0") };
            return n3.replace(o2, (function(t6, s3) {
              return s3 || String(i3[t6]);
            }));
          }, y7.as = function(t5) {
            return this.$ms / h3[m3(t5)];
          }, y7.get = function(t5) {
            var s3 = this.$ms, n3 = m3(t5);
            return "milliseconds" === n3 ? s3 %= 1e3 : s3 = "weeks" === n3 ? $4(s3 / h3[n3]) : this.$d[n3], s3 || 0;
          }, y7.add = function(t5, s3, n3) {
            var i3;
            return i3 = s3 ? t5 * h3[m3(s3)] : c3(t5) ? t5.$ms : f2(t5, this).$ms, f2(this.$ms + i3 * (n3 ? -1 : 1), this);
          }, y7.subtract = function(t5, s3) {
            return this.add(t5, s3, true);
          }, y7.locale = function(t5) {
            var s3 = this.clone();
            return s3.$l = t5, s3;
          }, y7.clone = function() {
            return f2(this.$ms, this);
          }, y7.humanize = function(s3) {
            return t4().add(this.$ms, "ms").locale(this.$l).fromNow(!s3);
          }, y7.valueOf = function() {
            return this.asMilliseconds();
          }, y7.milliseconds = function() {
            return this.get("milliseconds");
          }, y7.asMilliseconds = function() {
            return this.as("milliseconds");
          }, y7.seconds = function() {
            return this.get("seconds");
          }, y7.asSeconds = function() {
            return this.as("seconds");
          }, y7.minutes = function() {
            return this.get("minutes");
          }, y7.asMinutes = function() {
            return this.as("minutes");
          }, y7.hours = function() {
            return this.get("hours");
          }, y7.asHours = function() {
            return this.as("hours");
          }, y7.days = function() {
            return this.get("days");
          }, y7.asDays = function() {
            return this.as("days");
          }, y7.weeks = function() {
            return this.get("weeks");
          }, y7.asWeeks = function() {
            return this.as("weeks");
          }, y7.months = function() {
            return this.get("months");
          }, y7.asMonths = function() {
            return this.as("months");
          }, y7.years = function() {
            return this.get("years");
          }, y7.asYears = function() {
            return this.as("years");
          }, l5;
        })(), p3 = /* @__PURE__ */ __name(function(t5, s3, n3) {
          return t5.add(s3.years() * n3, "y").add(s3.months() * n3, "M").add(s3.days() * n3, "d").add(s3.hours() * n3, "h").add(s3.minutes() * n3, "m").add(s3.seconds() * n3, "s").add(s3.milliseconds() * n3, "ms");
        }, "p");
        return function(n3, i3, e4) {
          t4 = e4, s2 = e4().$utils(), e4.duration = function(t5, s3) {
            var n4 = e4.locale();
            return f2(t5, { $l: n4 }, s3);
          }, e4.isDuration = c3;
          var r3 = i3.prototype.add, o3 = i3.prototype.subtract;
          i3.prototype.add = function(t5, s3) {
            return c3(t5) ? p3(this, t5, 1) : r3.bind(this)(t5, s3);
          }, i3.prototype.subtract = function(t5, s3) {
            return c3(t5) ? p3(this, t5, -1) : o3.bind(this)(t5, s3);
          };
        };
      }));
    }
  });

  // src/diagrams/gantt/ganttRenderer.js
  var import_dayjs3, import_duration8, setConf2, mapWeekdayToTimeFunction, getMaxIntersections, w3, MAX_TICK_COUNT, draw5, ganttRenderer_default;
  var init_ganttRenderer = __esm({
    "src/diagrams/gantt/ganttRenderer.js"() {
      "use strict";
      import_dayjs3 = __toESM(require_dayjs_min(), 1);
      import_duration8 = __toESM(require_duration(), 1);
      init_logger();
      init_src32();
      init_common();
      init_diagramAPI();
      init_setupGraphViewbox();
      import_dayjs3.default.extend(import_duration8.default);
      setConf2 = /* @__PURE__ */ __name(function() {
        log.debug("Something is calling, setConf, remove the call");
      }, "setConf");
      mapWeekdayToTimeFunction = {
        monday: timeMonday,
        tuesday: timeTuesday,
        wednesday: timeWednesday,
        thursday: timeThursday,
        friday: timeFriday,
        saturday: timeSaturday,
        sunday: timeSunday
      };
      getMaxIntersections = /* @__PURE__ */ __name((tasks4, orderOffset) => {
        let timeline = [...tasks4].map(() => -Infinity);
        let sorted = [...tasks4].sort((a2, b3) => a2.startTime - b3.startTime || a2.order - b3.order);
        let maxIntersections = 0;
        for (const element3 of sorted) {
          for (let j3 = 0; j3 < timeline.length; j3++) {
            if (element3.startTime >= timeline[j3]) {
              timeline[j3] = element3.endTime;
              element3.order = j3 + orderOffset;
              if (j3 > maxIntersections) {
                maxIntersections = j3;
              }
              break;
            }
          }
        }
        return maxIntersections;
      }, "getMaxIntersections");
      MAX_TICK_COUNT = 1e4;
      draw5 = /* @__PURE__ */ __name(function(text4, id41, version3, diagObj) {
        const conf5 = getConfig2().gantt;
        diagObj.db.setDiagramId(id41);
        const securityLevel = getConfig2().securityLevel;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
        const elem = doc.getElementById(id41);
        w3 = elem.parentElement.offsetWidth;
        if (w3 === void 0) {
          w3 = 1200;
        }
        if (conf5.useWidth !== void 0) {
          w3 = conf5.useWidth;
        }
        const taskArray = diagObj.db.getTasks();
        const tasksWithoutVert = taskArray.filter((task) => !task.vert);
        let categories = [];
        for (const element3 of tasksWithoutVert) {
          categories.push(element3.type);
        }
        categories = checkUnique(categories);
        const categoryHeights = {};
        let h3 = 2 * conf5.topPadding;
        if (diagObj.db.getDisplayMode() === "compact" || conf5.displayMode === "compact") {
          const categoryElements = {};
          for (const element3 of tasksWithoutVert) {
            if (categoryElements[element3.section] === void 0) {
              categoryElements[element3.section] = [element3];
            } else {
              categoryElements[element3.section].push(element3);
            }
          }
          let intersections = 0;
          for (const category of Object.keys(categoryElements)) {
            const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1;
            intersections += categoryHeight;
            h3 += categoryHeight * (conf5.barHeight + conf5.barGap);
            categoryHeights[category] = categoryHeight;
          }
        } else {
          h3 += tasksWithoutVert.length * (conf5.barHeight + conf5.barGap);
          for (const category of categories) {
            categoryHeights[category] = tasksWithoutVert.filter((task) => task.type === category).length;
          }
        }
        elem.setAttribute("viewBox", "0 0 " + w3 + " " + h3);
        const svg2 = root4.select(`[id="${id41}"]`);
        const timeScale = time().domain([
          min(taskArray, function(d3) {
            return d3.startTime;
          }),
          max(taskArray, function(d3) {
            return d3.endTime;
          })
        ]).rangeRound([0, w3 - conf5.leftPadding - conf5.rightPadding]);
        function taskCompare(a2, b3) {
          const taskA = a2.startTime;
          const taskB = b3.startTime;
          let result = 0;
          if (taskA > taskB) {
            result = 1;
          } else if (taskA < taskB) {
            result = -1;
          }
          return result;
        }
        __name(taskCompare, "taskCompare");
        taskArray.sort(taskCompare);
        makeGantt(taskArray, w3, h3);
        configureSvgSize(svg2, h3, w3, conf5.useMaxWidth);
        svg2.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w3 / 2).attr("y", conf5.titleTopMargin).attr("class", "titleText");
        function makeGantt(tasks4, pageWidth, pageHeight) {
          const barHeight = conf5.barHeight;
          const gap = barHeight + conf5.barGap;
          const topPadding = conf5.topPadding;
          const leftPadding = conf5.leftPadding;
          const colorScale = linear2().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(hcl_default);
          drawExcludeDays(
            gap,
            topPadding,
            leftPadding,
            pageWidth,
            pageHeight,
            tasks4,
            diagObj.db.getExcludes(),
            diagObj.db.getIncludes()
          );
          makeGrid(leftPadding, topPadding, pageWidth, pageHeight);
          drawRects(tasks4, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight);
          vertLabels(gap, topPadding, leftPadding, barHeight, colorScale);
          drawToday(leftPadding, topPadding, pageWidth, pageHeight);
        }
        __name(makeGantt, "makeGantt");
        function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w4) {
          theArray.sort((a2, b3) => a2.vert === b3.vert ? 0 : a2.vert ? 1 : -1);
          const tasksWithoutVert2 = theArray.filter((task) => !task.vert);
          const uniqueTaskOrderIds = [...new Set(tasksWithoutVert2.map((item) => item.order))];
          const uniqueTasks = uniqueTaskOrderIds.map(
            (id42) => tasksWithoutVert2.find((item) => item.order === id42)
          );
          svg2.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d3, i2) {
            i2 = d3.order;
            return i2 * theGap + theTopPad - 2;
          }).attr("width", function() {
            return w4 - conf5.rightPadding / 2;
          }).attr("height", theGap).attr("class", function(d3) {
            for (const [i2, category] of categories.entries()) {
              if (d3.type === category) {
                return "section section" + i2 % conf5.numberSectionStyles;
              }
            }
            return "section section0";
          }).enter();
          const rectangles = svg2.append("g").selectAll("rect").data(theArray).enter();
          const links3 = diagObj.db.getLinks();
          rectangles.append("rect").attr("id", function(d3) {
            return id41 + "-" + d3.id;
          }).attr("rx", 3).attr("ry", 3).attr("x", function(d3) {
            if (d3.milestone) {
              return timeScale(d3.startTime) + theSidePad + 0.5 * (timeScale(d3.endTime) - timeScale(d3.startTime)) - 0.5 * theBarHeight;
            }
            return timeScale(d3.startTime) + theSidePad;
          }).attr("y", function(d3, i2) {
            i2 = d3.order;
            if (d3.vert) {
              return conf5.gridLineStartPadding;
            }
            return i2 * theGap + theTopPad;
          }).attr("width", function(d3) {
            if (d3.milestone) {
              return theBarHeight;
            }
            if (d3.vert) {
              return 0.08 * theBarHeight;
            }
            return timeScale(d3.renderEndTime || d3.endTime) - timeScale(d3.startTime);
          }).attr("height", function(d3) {
            if (d3.vert) {
              return tasksWithoutVert2.length * (conf5.barHeight + conf5.barGap) + conf5.barHeight * 2;
            }
            return theBarHeight;
          }).attr("transform-origin", function(d3, i2) {
            i2 = d3.order;
            return (timeScale(d3.startTime) + theSidePad + 0.5 * (timeScale(d3.endTime) - timeScale(d3.startTime))).toString() + "px " + (i2 * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px";
          }).attr("class", function(d3) {
            const res = "task";
            let classStr = "";
            if (d3.classes.length > 0) {
              classStr = d3.classes.join(" ");
            }
            let secNum = 0;
            for (const [i2, category] of categories.entries()) {
              if (d3.type === category) {
                secNum = i2 % conf5.numberSectionStyles;
              }
            }
            let taskClass = "";
            if (d3.active) {
              if (d3.crit) {
                taskClass += " activeCrit";
              } else {
                taskClass = " active";
              }
            } else if (d3.done) {
              if (d3.crit) {
                taskClass = " doneCrit";
              } else {
                taskClass = " done";
              }
            } else {
              if (d3.crit) {
                taskClass += " crit";
              }
            }
            if (taskClass.length === 0) {
              taskClass = " task";
            }
            if (d3.milestone) {
              taskClass = " milestone " + taskClass;
            }
            if (d3.vert) {
              taskClass = " vert " + taskClass;
            }
            taskClass += secNum;
            taskClass += " " + classStr;
            return res + taskClass;
          });
          rectangles.append("text").attr("id", function(d3) {
            return id41 + "-" + d3.id + "-text";
          }).text(function(d3) {
            return d3.task;
          }).attr("font-size", conf5.fontSize).attr("x", function(d3) {
            let startX2 = timeScale(d3.startTime);
            let endX = timeScale(d3.renderEndTime || d3.endTime);
            if (d3.milestone) {
              startX2 += 0.5 * (timeScale(d3.endTime) - timeScale(d3.startTime)) - 0.5 * theBarHeight;
              endX = startX2 + theBarHeight;
            }
            if (d3.vert) {
              return timeScale(d3.startTime) + theSidePad;
            }
            const textWidth = this.getBBox().width;
            if (textWidth > endX - startX2) {
              if (endX + textWidth + 1.5 * conf5.leftPadding > w4) {
                return startX2 + theSidePad - 5;
              } else {
                return endX + theSidePad + 5;
              }
            } else {
              return (endX - startX2) / 2 + startX2 + theSidePad;
            }
          }).attr("y", function(d3, i2) {
            if (d3.vert) {
              return conf5.gridLineStartPadding + tasksWithoutVert2.length * (conf5.barHeight + conf5.barGap) + 60;
            }
            i2 = d3.order;
            return i2 * theGap + conf5.barHeight / 2 + (conf5.fontSize / 2 - 2) + theTopPad;
          }).attr("text-height", theBarHeight).attr("class", function(d3) {
            const startX2 = timeScale(d3.startTime);
            let endX = timeScale(d3.endTime);
            if (d3.milestone) {
              endX = startX2 + theBarHeight;
            }
            const textWidth = this.getBBox().width;
            let classStr = "";
            if (d3.classes.length > 0) {
              classStr = d3.classes.join(" ");
            }
            let secNum = 0;
            for (const [i2, category] of categories.entries()) {
              if (d3.type === category) {
                secNum = i2 % conf5.numberSectionStyles;
              }
            }
            let taskType = "";
            if (d3.active) {
              if (d3.crit) {
                taskType = "activeCritText" + secNum;
              } else {
                taskType = "activeText" + secNum;
              }
            }
            if (d3.done) {
              if (d3.crit) {
                taskType = taskType + " doneCritText" + secNum;
              } else {
                taskType = taskType + " doneText" + secNum;
              }
            } else {
              if (d3.crit) {
                taskType = taskType + " critText" + secNum;
              }
            }
            if (d3.milestone) {
              taskType += " milestoneText";
            }
            if (d3.vert) {
              taskType += " vertText";
            }
            if (textWidth > endX - startX2) {
              if (endX + textWidth + 1.5 * conf5.leftPadding > w4) {
                return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType;
              } else {
                return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth;
              }
            } else {
              return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth;
            }
          });
          const securityLevel2 = getConfig2().securityLevel;
          if (securityLevel2 === "sandbox") {
            let sandboxElement2;
            sandboxElement2 = select_default2("#i" + id41);
            const doc2 = sandboxElement2.nodes()[0].contentDocument;
            rectangles.filter(function(d3) {
              return links3.has(d3.id);
            }).each(function(o2) {
              var taskRect = doc2.querySelector("#" + CSS.escape(id41 + "-" + o2.id));
              var taskText = doc2.querySelector("#" + CSS.escape(id41 + "-" + o2.id + "-text"));
              const oldParent = taskRect.parentNode;
              var Link2 = doc2.createElement("a");
              Link2.setAttribute("xlink:href", links3.get(o2.id));
              Link2.setAttribute("target", "_top");
              oldParent.appendChild(Link2);
              Link2.appendChild(taskRect);
              Link2.appendChild(taskText);
            });
          }
        }
        __name(drawRects, "drawRects");
        function drawExcludeDays(theGap, theTopPad, theSidePad, w4, h4, tasks4, excludes2, includes3) {
          if (excludes2.length === 0 && includes3.length === 0) {
            return;
          }
          let minTime;
          let maxTime;
          for (const { startTime, endTime } of tasks4) {
            if (minTime === void 0 || startTime < minTime) {
              minTime = startTime;
            }
            if (maxTime === void 0 || endTime > maxTime) {
              maxTime = endTime;
            }
          }
          if (!minTime || !maxTime) {
            return;
          }
          if ((0, import_dayjs3.default)(maxTime).diff((0, import_dayjs3.default)(minTime), "year") > 5) {
            log.warn(
              "The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days."
            );
            return;
          }
          const dateFormat2 = diagObj.db.getDateFormat();
          const excludeRanges = [];
          let range3 = null;
          let d3 = (0, import_dayjs3.default)(minTime);
          while (d3.valueOf() <= maxTime) {
            if (diagObj.db.isInvalidDate(d3, dateFormat2, excludes2, includes3)) {
              if (!range3) {
                range3 = {
                  start: d3,
                  end: d3
                };
              } else {
                range3.end = d3;
              }
            } else {
              if (range3) {
                excludeRanges.push(range3);
                range3 = null;
              }
            }
            d3 = d3.add(1, "d");
          }
          const rectangles = svg2.append("g").selectAll("rect").data(excludeRanges).enter();
          rectangles.append("rect").attr("id", (d4) => id41 + "-exclude-" + d4.start.format("YYYY-MM-DD")).attr("x", (d4) => timeScale(d4.start.startOf("day")) + theSidePad).attr("y", conf5.gridLineStartPadding).attr("width", (d4) => timeScale(d4.end.endOf("day")) - timeScale(d4.start.startOf("day"))).attr("height", h4 - theTopPad - conf5.gridLineStartPadding).attr("transform-origin", function(d4, i2) {
            return (timeScale(d4.start) + theSidePad + 0.5 * (timeScale(d4.end) - timeScale(d4.start))).toString() + "px " + (i2 * theGap + 0.5 * h4).toString() + "px";
          }).attr("class", "exclude-range");
        }
        __name(drawExcludeDays, "drawExcludeDays");
        function getEstimatedTickCount(minTime, maxTime, every3, interval2) {
          if (every3 <= 0 || minTime > maxTime) {
            return Infinity;
          }
          const timeDiffMs = maxTime - minTime;
          const intervalMs = import_dayjs3.default.duration({ [interval2 ?? "day"]: every3 }).asMilliseconds();
          if (intervalMs <= 0) {
            return Infinity;
          }
          return Math.ceil(timeDiffMs / intervalMs);
        }
        __name(getEstimatedTickCount, "getEstimatedTickCount");
        function makeGrid(theSidePad, theTopPad, w4, h4) {
          const dateFormat2 = diagObj.db.getDateFormat();
          const userAxisFormat = diagObj.db.getAxisFormat();
          let axisFormat2;
          if (userAxisFormat) {
            axisFormat2 = userAxisFormat;
          } else if (dateFormat2 === "D") {
            axisFormat2 = "%d";
          } else {
            axisFormat2 = conf5.axisFormat ?? "%Y-%m-%d";
          }
          let bottomXAxis = axisBottom(timeScale).tickSize(-h4 + theTopPad + conf5.gridLineStartPadding).tickFormat(timeFormat(axisFormat2));
          const reTickInterval = /^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/;
          const resultTickInterval = reTickInterval.exec(
            diagObj.db.getTickInterval() || conf5.tickInterval
          );
          if (resultTickInterval !== null) {
            const every3 = parseInt(resultTickInterval[1], 10);
            if (isNaN(every3) || every3 <= 0) {
              log.warn(
                `Invalid tick interval value: "${resultTickInterval[1]}". Skipping custom tick interval.`
              );
            } else {
              const interval2 = resultTickInterval[2];
              const weekday2 = diagObj.db.getWeekday() || conf5.weekday;
              const domain = timeScale.domain();
              const minTime = domain[0];
              const maxTime = domain[1];
              const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every3, interval2);
              if (estimatedTicks > MAX_TICK_COUNT) {
                log.warn(
                  `The tick interval "${every3}${interval2}" would generate ${estimatedTicks} ticks, which exceeds the maximum allowed (${MAX_TICK_COUNT}). This may indicate an invalid date or time range. Skipping custom tick interval.`
                );
              } else {
                switch (interval2) {
                  case "millisecond":
                    bottomXAxis.ticks(millisecond.every(every3));
                    break;
                  case "second":
                    bottomXAxis.ticks(second.every(every3));
                    break;
                  case "minute":
                    bottomXAxis.ticks(timeMinute.every(every3));
                    break;
                  case "hour":
                    bottomXAxis.ticks(timeHour.every(every3));
                    break;
                  case "day":
                    bottomXAxis.ticks(timeDay.every(every3));
                    break;
                  case "week":
                    bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every3));
                    break;
                  case "month":
                    bottomXAxis.ticks(timeMonth.every(every3));
                    break;
                }
              }
            }
          }
          svg2.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h4 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em");
          if (diagObj.db.topAxisEnabled() || conf5.topAxis) {
            let topXAxis = axisTop(timeScale).tickSize(-h4 + theTopPad + conf5.gridLineStartPadding).tickFormat(timeFormat(axisFormat2));
            if (resultTickInterval !== null) {
              const every3 = parseInt(resultTickInterval[1], 10);
              if (isNaN(every3) || every3 <= 0) {
                log.warn(
                  `Invalid tick interval value: "${resultTickInterval[1]}". Skipping custom tick interval.`
                );
              } else {
                const interval2 = resultTickInterval[2];
                const weekday2 = diagObj.db.getWeekday() || conf5.weekday;
                const domain = timeScale.domain();
                const minTime = domain[0];
                const maxTime = domain[1];
                const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every3, interval2);
                if (estimatedTicks <= MAX_TICK_COUNT) {
                  switch (interval2) {
                    case "millisecond":
                      topXAxis.ticks(millisecond.every(every3));
                      break;
                    case "second":
                      topXAxis.ticks(second.every(every3));
                      break;
                    case "minute":
                      topXAxis.ticks(timeMinute.every(every3));
                      break;
                    case "hour":
                      topXAxis.ticks(timeHour.every(every3));
                      break;
                    case "day":
                      topXAxis.ticks(timeDay.every(every3));
                      break;
                    case "week":
                      topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every3));
                      break;
                    case "month":
                      topXAxis.ticks(timeMonth.every(every3));
                      break;
                  }
                }
              }
            }
            svg2.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10);
          }
        }
        __name(makeGrid, "makeGrid");
        function vertLabels(theGap, theTopPad) {
          let prevGap = 0;
          const numOccurrences = Object.keys(categoryHeights).map((d3) => [d3, categoryHeights[d3]]);
          svg2.append("g").selectAll("text").data(numOccurrences).enter().append(function(d3) {
            const rows = d3[0].split(common_default.lineBreakRegex);
            const dy = -(rows.length - 1) / 2;
            const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text");
            svgLabel.setAttribute("dy", dy + "em");
            for (const [j3, row] of rows.entries()) {
              const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan");
              tspan.setAttribute("alignment-baseline", "central");
              tspan.setAttribute("x", "10");
              if (j3 > 0) {
                tspan.setAttribute("dy", "1em");
              }
              tspan.textContent = row;
              svgLabel.appendChild(tspan);
            }
            return svgLabel;
          }).attr("x", 10).attr("y", function(d3, i2) {
            if (i2 > 0) {
              for (let j3 = 0; j3 < i2; j3++) {
                prevGap += numOccurrences[i2 - 1][1];
                return d3[1] * theGap / 2 + prevGap * theGap + theTopPad;
              }
            } else {
              return d3[1] * theGap / 2 + theTopPad;
            }
          }).attr("font-size", conf5.sectionFontSize).attr("class", function(d3) {
            for (const [i2, category] of categories.entries()) {
              if (d3[0] === category) {
                return "sectionTitle sectionTitle" + i2 % conf5.numberSectionStyles;
              }
            }
            return "sectionTitle";
          });
        }
        __name(vertLabels, "vertLabels");
        function drawToday(theSidePad, theTopPad, w4, h4) {
          const todayMarker2 = diagObj.db.getTodayMarker();
          if (todayMarker2 === "off") {
            return;
          }
          const todayG = svg2.append("g").attr("class", "today");
          const today = /* @__PURE__ */ new Date();
          const todayLine = todayG.append("line");
          todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf5.titleTopMargin).attr("y2", h4 - conf5.titleTopMargin).attr("class", "today");
          if (todayMarker2 !== "") {
            todayLine.attr("style", todayMarker2.replace(/,/g, ";"));
          }
        }
        __name(drawToday, "drawToday");
        function checkUnique(arr) {
          const hash = {};
          const result = [];
          for (let i2 = 0, l4 = arr.length; i2 < l4; ++i2) {
            if (!Object.prototype.hasOwnProperty.call(hash, arr[i2])) {
              hash[arr[i2]] = true;
              result.push(arr[i2]);
            }
          }
          return result;
        }
        __name(checkUnique, "checkUnique");
      }, "draw");
      ganttRenderer_default = {
        setConf: setConf2,
        draw: draw5
      };
    }
  });

  // src/diagrams/gantt/styles.js
  var getStyles7, styles_default7;
  var init_styles7 = __esm({
    "src/diagrams/gantt/styles.js"() {
      "use strict";
      getStyles7 = /* @__PURE__ */ __name((options2) => `
  .mermaid-main-font {
        font-family: ${options2.fontFamily};
  }

  .exclude-range {
    fill: ${options2.excludeBkgColor};
  }

  .section {
    stroke: none;
    opacity: 0.2;
  }

  .section0 {
    fill: ${options2.sectionBkgColor};
  }

  .section2 {
    fill: ${options2.sectionBkgColor2};
  }

  .section1,
  .section3 {
    fill: ${options2.altSectionBkgColor};
    opacity: 0.2;
  }

  .sectionTitle0 {
    fill: ${options2.titleColor};
  }

  .sectionTitle1 {
    fill: ${options2.titleColor};
  }

  .sectionTitle2 {
    fill: ${options2.titleColor};
  }

  .sectionTitle3 {
    fill: ${options2.titleColor};
  }

  .sectionTitle {
    text-anchor: start;
    font-family: ${options2.fontFamily};
  }


  /* Grid and axis */

  .grid .tick {
    stroke: ${options2.gridColor};
    opacity: 0.8;
    shape-rendering: crispEdges;
  }

  .grid .tick text {
    font-family: ${options2.fontFamily};
    fill: ${options2.textColor};
  }

  .grid path {
    stroke-width: 0;
  }


  /* Today line */

  .today {
    fill: none;
    stroke: ${options2.todayLineColor};
    stroke-width: 2px;
  }


  /* Task styling */

  /* Default task */

  .task {
    stroke-width: 2;
  }

  .taskText {
    text-anchor: middle;
    font-family: ${options2.fontFamily};
  }

  .taskTextOutsideRight {
    fill: ${options2.taskTextDarkColor};
    text-anchor: start;
    font-family: ${options2.fontFamily};
  }

  .taskTextOutsideLeft {
    fill: ${options2.taskTextDarkColor};
    text-anchor: end;
  }


  /* Special case clickable */

  .task.clickable {
    cursor: pointer;
  }

  .taskText.clickable {
    cursor: pointer;
    fill: ${options2.taskTextClickableColor} !important;
    font-weight: bold;
  }

  .taskTextOutsideLeft.clickable {
    cursor: pointer;
    fill: ${options2.taskTextClickableColor} !important;
    font-weight: bold;
  }

  .taskTextOutsideRight.clickable {
    cursor: pointer;
    fill: ${options2.taskTextClickableColor} !important;
    font-weight: bold;
  }


  /* Specific task settings for the sections*/

  .taskText0,
  .taskText1,
  .taskText2,
  .taskText3 {
    fill: ${options2.taskTextColor};
  }

  .task0,
  .task1,
  .task2,
  .task3 {
    fill: ${options2.taskBkgColor};
    stroke: ${options2.taskBorderColor};
  }

  .taskTextOutside0,
  .taskTextOutside2
  {
    fill: ${options2.taskTextOutsideColor};
  }

  .taskTextOutside1,
  .taskTextOutside3 {
    fill: ${options2.taskTextOutsideColor};
  }


  /* Active task */

  .active0,
  .active1,
  .active2,
  .active3 {
    fill: ${options2.activeTaskBkgColor};
    stroke: ${options2.activeTaskBorderColor};
  }

  .activeText0,
  .activeText1,
  .activeText2,
  .activeText3 {
    fill: ${options2.taskTextDarkColor} !important;
  }


  /* Completed task */

  .done0,
  .done1,
  .done2,
  .done3 {
    stroke: ${options2.doneTaskBorderColor};
    fill: ${options2.doneTaskBkgColor};
    stroke-width: 2;
  }

  .doneText0,
  .doneText1,
  .doneText2,
  .doneText3 {
    fill: ${options2.taskTextDarkColor} !important;
  }

  /* Done task text displayed outside the bar sits against the diagram background,
     not against the done-task bar, so it must use the outside/contrast color. */
  .doneText0.taskTextOutsideLeft,
  .doneText0.taskTextOutsideRight,
  .doneText1.taskTextOutsideLeft,
  .doneText1.taskTextOutsideRight,
  .doneText2.taskTextOutsideLeft,
  .doneText2.taskTextOutsideRight,
  .doneText3.taskTextOutsideLeft,
  .doneText3.taskTextOutsideRight {
    fill: ${options2.taskTextOutsideColor} !important;
  }


  /* Tasks on the critical line */

  .crit0,
  .crit1,
  .crit2,
  .crit3 {
    stroke: ${options2.critBorderColor};
    fill: ${options2.critBkgColor};
    stroke-width: 2;
  }

  .activeCrit0,
  .activeCrit1,
  .activeCrit2,
  .activeCrit3 {
    stroke: ${options2.critBorderColor};
    fill: ${options2.activeTaskBkgColor};
    stroke-width: 2;
  }

  .doneCrit0,
  .doneCrit1,
  .doneCrit2,
  .doneCrit3 {
    stroke: ${options2.critBorderColor};
    fill: ${options2.doneTaskBkgColor};
    stroke-width: 2;
    cursor: pointer;
    shape-rendering: crispEdges;
  }

  .milestone {
    transform: rotate(45deg) scale(0.8,0.8);
  }

  .milestoneText {
    font-style: italic;
  }
  .doneCritText0,
  .doneCritText1,
  .doneCritText2,
  .doneCritText3 {
    fill: ${options2.taskTextDarkColor} !important;
  }

  /* Done-crit task text outside the bar \u2014 same reasoning as doneText above. */
  .doneCritText0.taskTextOutsideLeft,
  .doneCritText0.taskTextOutsideRight,
  .doneCritText1.taskTextOutsideLeft,
  .doneCritText1.taskTextOutsideRight,
  .doneCritText2.taskTextOutsideLeft,
  .doneCritText2.taskTextOutsideRight,
  .doneCritText3.taskTextOutsideLeft,
  .doneCritText3.taskTextOutsideRight {
    fill: ${options2.taskTextOutsideColor} !important;
  }

  .vert {
    stroke: ${options2.vertLineColor};
  }

  .vertText {
    font-size: 15px;
    text-anchor: middle;
    fill: ${options2.vertLineColor} !important;
  }

  .activeCritText0,
  .activeCritText1,
  .activeCritText2,
  .activeCritText3 {
    fill: ${options2.taskTextDarkColor} !important;
  }

  .titleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${options2.titleColor || options2.textColor};
    font-family: ${options2.fontFamily};
  }
`, "getStyles");
      styles_default7 = getStyles7;
    }
  });

  // src/diagrams/gantt/ganttDiagram.ts
  var ganttDiagram_exports = {};
  __export(ganttDiagram_exports, {
    diagram: () => diagram6
  });
  var diagram6;
  var init_ganttDiagram = __esm({
    "src/diagrams/gantt/ganttDiagram.ts"() {
      "use strict";
      init_gantt();
      init_ganttDb();
      init_ganttRenderer();
      init_styles7();
      diagram6 = {
        parser: gantt_default,
        db: ganttDb_default,
        renderer: ganttRenderer_default,
        styles: styles_default7
      };
    }
  });

  // src/diagrams/info/infoParser.ts
  var parser6;
  var init_infoParser = __esm({
    "src/diagrams/info/infoParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      parser6 = {
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("info", input);
          log.debug(ast);
        }, "parse")
      };
    }
  });

  // src/diagrams/info/infoDb.ts
  var DEFAULT_INFO_DB, getVersion, db2;
  var init_infoDb = __esm({
    "src/diagrams/info/infoDb.ts"() {
      "use strict";
      DEFAULT_INFO_DB = {
        version: "11.16.1" + (true ? "" : "-tiny")
      };
      getVersion = /* @__PURE__ */ __name(() => DEFAULT_INFO_DB.version, "getVersion");
      db2 = {
        getVersion
      };
    }
  });

  // src/rendering-util/selectSvgElement.ts
  var selectSvgElement;
  var init_selectSvgElement = __esm({
    "src/rendering-util/selectSvgElement.ts"() {
      "use strict";
      init_src32();
      init_diagramAPI();
      selectSvgElement = /* @__PURE__ */ __name((id41) => {
        const { securityLevel } = getConfig2();
        let root4 = select_default2("body");
        if (securityLevel === "sandbox") {
          const sandboxElement = select_default2(`#i${id41}`);
          const doc = sandboxElement.node()?.contentDocument ?? document;
          root4 = select_default2(doc.body);
        }
        const svg2 = root4.select(`#${id41}`);
        return svg2;
      }, "selectSvgElement");
    }
  });

  // src/diagrams/info/infoRenderer.ts
  var draw6, renderer3;
  var init_infoRenderer = __esm({
    "src/diagrams/info/infoRenderer.ts"() {
      "use strict";
      init_logger();
      init_selectSvgElement();
      init_setupGraphViewbox();
      draw6 = /* @__PURE__ */ __name((text4, id41, version3) => {
        log.debug("rendering info diagram\n" + text4);
        const svg2 = selectSvgElement(id41);
        configureSvgSize(svg2, 100, 400, true);
        const group2 = svg2.append("g");
        group2.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", 32).style("text-anchor", "middle").text(`v${version3}`);
      }, "draw");
      renderer3 = { draw: draw6 };
    }
  });

  // src/diagrams/info/infoDiagram.ts
  var infoDiagram_exports = {};
  __export(infoDiagram_exports, {
    diagram: () => diagram7
  });
  var diagram7;
  var init_infoDiagram = __esm({
    "src/diagrams/info/infoDiagram.ts"() {
      "use strict";
      init_infoParser();
      init_infoDb();
      init_infoRenderer();
      diagram7 = {
        parser: parser6,
        db: db2,
        renderer: renderer3
      };
    }
  });

  // src/diagrams/pie/pieDb.ts
  var DEFAULT_PIE_CONFIG, DEFAULT_PIE_DB, sections2, showData, config2, getConfig4, clear10, addSection2, getSections2, setShowData, getShowData, db3;
  var init_pieDb = __esm({
    "src/diagrams/pie/pieDb.ts"() {
      "use strict";
      init_logger();
      init_commonDb();
      init_defaultConfig();
      DEFAULT_PIE_CONFIG = defaultConfig_default.pie;
      DEFAULT_PIE_DB = {
        sections: /* @__PURE__ */ new Map(),
        showData: false,
        config: DEFAULT_PIE_CONFIG
      };
      sections2 = DEFAULT_PIE_DB.sections;
      showData = DEFAULT_PIE_DB.showData;
      config2 = structuredClone(DEFAULT_PIE_CONFIG);
      getConfig4 = /* @__PURE__ */ __name(() => structuredClone(config2), "getConfig");
      clear10 = /* @__PURE__ */ __name(() => {
        sections2 = /* @__PURE__ */ new Map();
        showData = DEFAULT_PIE_DB.showData;
        clear();
      }, "clear");
      addSection2 = /* @__PURE__ */ __name(({ label, value: value2 }) => {
        if (value2 < 0) {
          throw new Error(
            `"${label}" has invalid value: ${value2}. Negative values are not allowed in pie charts. All slice values must be >= 0.`
          );
        }
        if (!sections2.has(label)) {
          sections2.set(label, value2);
          log.debug(`added new section: ${label}, with value: ${value2}`);
        }
      }, "addSection");
      getSections2 = /* @__PURE__ */ __name(() => sections2, "getSections");
      setShowData = /* @__PURE__ */ __name((toggle) => {
        showData = toggle;
      }, "setShowData");
      getShowData = /* @__PURE__ */ __name(() => showData, "getShowData");
      db3 = {
        getConfig: getConfig4,
        clear: clear10,
        setDiagramTitle,
        getDiagramTitle,
        setAccTitle,
        getAccTitle,
        setAccDescription,
        getAccDescription,
        addSection: addSection2,
        getSections: getSections2,
        setShowData,
        getShowData
      };
    }
  });

  // src/diagrams/pie/pieParser.ts
  var populateDb, parser7;
  var init_pieParser = __esm({
    "src/diagrams/pie/pieParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_pieDb();
      populateDb = /* @__PURE__ */ __name((ast, db12) => {
        populateCommonDb(ast, db12);
        db12.setShowData(ast.showData);
        ast.sections.map(db12.addSection);
      }, "populateDb");
      parser7 = {
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("pie", input);
          log.debug(ast);
          populateDb(ast, db3);
        }, "parse")
      };
    }
  });

  // src/diagrams/pie/pieStyles.ts
  var getStyles8, pieStyles_default;
  var init_pieStyles = __esm({
    "src/diagrams/pie/pieStyles.ts"() {
      "use strict";
      getStyles8 = /* @__PURE__ */ __name((options2) => `
  .pieCircle{
    stroke: ${options2.pieStrokeColor};
    stroke-width : ${options2.pieStrokeWidth};
    opacity : ${options2.pieOpacity};
  }
  .pieCircle.highlighted{
    scale: 1.05;
    opacity: 1;
  }
  .pieCircle.highlightedOnHover:hover{
    transition-duration: 250ms;
    scale: 1.05;
    opacity: 1;
  }
  .pieOuterCircle{
    stroke: ${options2.pieOuterStrokeColor};
    stroke-width: ${options2.pieOuterStrokeWidth};
    fill: none;
  }
  .pieTitleText {
    text-anchor: middle;
    font-size: ${options2.pieTitleTextSize};
    fill: ${options2.pieTitleTextColor};
    font-family: ${options2.fontFamily};
  }
  .slice {
    font-family: ${options2.fontFamily};
    fill: ${options2.pieSectionTextColor};
    font-size:${options2.pieSectionTextSize};
    // fill: white;
  }
  .legend text {
    fill: ${options2.pieLegendTextColor};
    font-family: ${options2.fontFamily};
    font-size: ${options2.pieLegendTextSize};
  }
`, "getStyles");
      pieStyles_default = getStyles8;
    }
  });

  // src/diagrams/pie/pieRenderer.ts
  var createPieArcs, draw7, renderer4;
  var init_pieRenderer = __esm({
    "src/diagrams/pie/pieRenderer.ts"() {
      "use strict";
      init_src32();
      init_diagramAPI();
      init_logger();
      init_selectSvgElement();
      init_setupGraphViewbox();
      init_utils2();
      createPieArcs = /* @__PURE__ */ __name((sections6) => {
        const sum2 = [...sections6.values()].reduce((acc, val) => acc + val, 0);
        const pieData = [...sections6.entries()].map(([label, value2]) => ({ label, value: value2 })).filter((d3) => d3.value / sum2 * 100 >= 1);
        const pie2 = pie_default().value((d3) => d3.value).sort(null);
        return pie2(pieData);
      }, "createPieArcs");
      draw7 = /* @__PURE__ */ __name((text4, id41, _version, diagObj) => {
        log.debug("rendering pie chart\n" + text4);
        const db12 = diagObj.db;
        const globalConfig = getConfig2();
        const pieConfig = cleanAndMerge(db12.getConfig(), globalConfig.pie);
        const MARGIN = 40;
        const LEGEND_RECT_SIZE = 18;
        const LEGEND_SPACING = 4;
        const height2 = 450;
        const pieWidth = height2;
        const svg2 = selectSvgElement(id41);
        const group2 = svg2.append("g");
        group2.attr("transform", "translate(" + pieWidth / 2 + "," + height2 / 2 + ")");
        const { themeVariables } = globalConfig;
        let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth);
        outerStrokeWidth ??= 2;
        const legendPosition = pieConfig.legendPosition;
        const textPosition = pieConfig.textPosition;
        const innerHole = pieConfig.donutHole > 0 && pieConfig.donutHole <= 0.9 ? pieConfig.donutHole : 0;
        const radius2 = Math.min(pieWidth, height2) / 2 - MARGIN;
        const arcGenerator = arc_default().innerRadius(innerHole * radius2).outerRadius(radius2);
        const labelArcGenerator = arc_default().innerRadius(radius2 * textPosition).outerRadius(radius2 * textPosition);
        const pie2 = group2.append("g");
        pie2.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius2 + outerStrokeWidth / 2).attr("class", "pieOuterCircle");
        const sections6 = db12.getSections();
        const arcs = createPieArcs(sections6);
        const myGeneratedColors = [
          themeVariables.pie1,
          themeVariables.pie2,
          themeVariables.pie3,
          themeVariables.pie4,
          themeVariables.pie5,
          themeVariables.pie6,
          themeVariables.pie7,
          themeVariables.pie8,
          themeVariables.pie9,
          themeVariables.pie10,
          themeVariables.pie11,
          themeVariables.pie12
        ];
        let sum2 = 0;
        sections6.forEach((section) => {
          sum2 += section;
        });
        const filteredArcs = arcs.filter((datum2) => (datum2.data.value / sum2 * 100).toFixed(0) !== "0");
        const color2 = ordinal(myGeneratedColors).domain([
          ...sections6.keys()
        ]);
        pie2.selectAll("mySlices").data(filteredArcs).enter().append("path").attr("d", arcGenerator).attr("fill", (datum2) => {
          return color2(datum2.data.label);
        }).attr("class", (datum2) => {
          let className = "pieCircle";
          if (pieConfig.highlightSlice === "hover") {
            className += " highlightedOnHover";
          } else if (pieConfig.highlightSlice === datum2.data.label) {
            className += " highlighted";
          }
          return className;
        });
        pie2.selectAll("mySlices").data(filteredArcs).enter().append("text").text((datum2) => {
          return (datum2.data.value / sum2 * 100).toFixed(0) + "%";
        }).attr("transform", (datum2) => {
          return "translate(" + labelArcGenerator.centroid(datum2) + ")";
        }).style("text-anchor", "middle").attr("class", "slice");
        const titleText = group2.append("text").text(db12.getDiagramTitle()).attr("x", 0).attr("y", -(height2 - 50) / 2).attr("class", "pieTitleText");
        const allSectionData = [...sections6.entries()].map(([label, value2]) => ({
          label,
          value: value2
        }));
        const legend = group2.selectAll(".legend").data(allSectionData).enter().append("g").attr("class", "legend");
        legend.append("rect").attr("width", LEGEND_RECT_SIZE).attr("height", LEGEND_RECT_SIZE).style("fill", (d3) => color2(d3.label)).style("stroke", (d3) => color2(d3.label));
        legend.append("text").attr("x", LEGEND_RECT_SIZE + LEGEND_SPACING).attr("y", LEGEND_RECT_SIZE - LEGEND_SPACING).text((d3) => {
          if (db12.getShowData()) {
            return `${d3.label} [${d3.value}]`;
          }
          return d3.label;
        });
        const longestTextWidth = Math.max(
          ...legend.selectAll("text").nodes().map((node2) => node2?.getBoundingClientRect().width ?? 0)
        );
        let chartAndLegendHeight = height2;
        let chartAndLegendWidth = pieWidth + MARGIN;
        const legendHeight = LEGEND_RECT_SIZE + LEGEND_SPACING;
        const totalLegendHeight = allSectionData.length * legendHeight;
        switch (legendPosition) {
          case "center":
            legend.attr("transform", (_datum, index) => {
              const offset = legendHeight * allSectionData.length / 2;
              const horizontal = -longestTextWidth / 2 - (LEGEND_RECT_SIZE + LEGEND_SPACING);
              const vertical = index * legendHeight - offset;
              return "translate(" + horizontal + "," + vertical + ")";
            });
            break;
          case "top":
            chartAndLegendHeight += totalLegendHeight;
            legend.attr("transform", (_datum, index) => {
              const offset = radius2;
              const horizontal = -longestTextWidth / 2 - (LEGEND_RECT_SIZE + LEGEND_SPACING);
              const vertical = index * legendHeight - offset;
              return `translate(${horizontal}, ${vertical})`;
            });
            pie2.attr("transform", () => {
              return `translate(0, ${totalLegendHeight + legendHeight})`;
            });
            break;
          case "bottom":
            chartAndLegendHeight += totalLegendHeight;
            legend.attr("transform", (_datum, index) => {
              const offset = -radius2 - legendHeight;
              const horizontal = -longestTextWidth / 2 - (LEGEND_RECT_SIZE + LEGEND_SPACING);
              const vertical = index * legendHeight - offset;
              return "translate(" + horizontal + "," + vertical + ")";
            });
            break;
          case "left":
            chartAndLegendWidth += LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth;
            legend.attr("transform", (_datum, index) => {
              const offset = legendHeight * allSectionData.length / 2;
              const horizontal = -radius2 - (LEGEND_RECT_SIZE + LEGEND_SPACING);
              const vertical = index * legendHeight - offset;
              return "translate(" + horizontal + "," + vertical + ")";
            });
            pie2.attr("transform", () => {
              return `translate(${longestTextWidth + LEGEND_RECT_SIZE + LEGEND_SPACING}, 0)`;
            });
            break;
          case "right":
          default:
            chartAndLegendWidth += LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth;
            legend.attr("transform", (_datum, index) => {
              const offset = legendHeight * allSectionData.length / 2;
              const horizontal = 12 * LEGEND_RECT_SIZE;
              const vertical = index * legendHeight - offset;
              return "translate(" + horizontal + "," + vertical + ")";
            });
            break;
        }
        const titleWidth = titleText.node()?.getBoundingClientRect().width ?? 0;
        const titleLeft = pieWidth / 2 - titleWidth / 2;
        const titleRight = pieWidth / 2 + titleWidth / 2;
        const viewBoxX = Math.min(0, titleLeft);
        const viewBoxRight = Math.max(chartAndLegendWidth, titleRight);
        const totalWidth = viewBoxRight - viewBoxX;
        svg2.attr("viewBox", `${viewBoxX} 0 ${totalWidth} ${chartAndLegendHeight}`);
        configureSvgSize(svg2, chartAndLegendHeight, totalWidth, pieConfig.useMaxWidth);
      }, "draw");
      renderer4 = { draw: draw7 };
    }
  });

  // src/diagrams/pie/pieDiagram.ts
  var pieDiagram_exports = {};
  __export(pieDiagram_exports, {
    diagram: () => diagram8
  });
  var diagram8;
  var init_pieDiagram = __esm({
    "src/diagrams/pie/pieDiagram.ts"() {
      "use strict";
      init_pieParser();
      init_pieDb();
      init_pieStyles();
      init_pieRenderer();
      diagram8 = {
        parser: parser7,
        db: db3,
        renderer: renderer4,
        styles: pieStyles_default
      };
    }
  });

  // src/diagrams/quadrant-chart/parser/quadrant.jison
  var parser8, quadrant_default;
  var init_quadrant = __esm({
    "src/diagrams/quadrant-chart/parser/quadrant.jison"() {
      "use strict";
      parser8 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [1, 7], $V5 = [1, 4, 5, 10, 12, 13, 14, 15, 18, 25, 35, 37, 39, 41, 42, 48, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 63, 64, 65, 66, 67], $V6 = [1, 4, 5, 10, 12, 13, 14, 15, 18, 25, 28, 35, 37, 39, 41, 42, 48, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 63, 64, 65, 66, 67], $V7 = [55, 56, 57], $V8 = [2, 36], $V9 = [1, 37], $Va = [1, 36], $Vb = [1, 38], $Vc = [1, 35], $Vd = [1, 43], $Ve = [1, 41], $Vf = [1, 45], $Vg = [1, 14], $Vh = [1, 23], $Vi = [1, 18], $Vj = [1, 19], $Vk = [1, 20], $Vl = [1, 21], $Vm = [1, 22], $Vn = [1, 24], $Vo = [1, 25], $Vp = [1, 26], $Vq = [1, 27], $Vr = [1, 28], $Vs = [1, 29], $Vt = [1, 32], $Vu = [1, 33], $Vv = [1, 34], $Vw = [1, 39], $Vx = [1, 40], $Vy = [1, 42], $Vz = [1, 44], $VA = [1, 63], $VB = [1, 62], $VC = [4, 5, 8, 10, 12, 13, 14, 15, 18, 44, 47, 49, 55, 56, 57, 63, 64, 65, 66, 67], $VD = [1, 66], $VE = [1, 67], $VF = [1, 68], $VG = [1, 69], $VH = [1, 70], $VI = [1, 71], $VJ = [1, 72], $VK = [1, 73], $VL = [1, 74], $VM = [1, 75], $VN = [1, 76], $VO = [1, 77], $VP = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18], $VQ = [1, 91], $VR = [1, 92], $VS = [1, 93], $VT = [1, 100], $VU = [1, 94], $VV = [1, 97], $VW = [1, 95], $VX = [1, 96], $VY = [1, 98], $VZ = [1, 99], $V_ = [1, 103], $V$ = [10, 55, 56, 57], $V01 = [4, 5, 6, 8, 10, 11, 13, 17, 18, 19, 20, 55, 56, 57];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "idStringToken": 3, "ALPHA": 4, "NUM": 5, "NODE_STRING": 6, "DOWN": 7, "MINUS": 8, "DEFAULT": 9, "COMMA": 10, "COLON": 11, "AMP": 12, "BRKT": 13, "MULT": 14, "UNICODE_TEXT": 15, "styleComponent": 16, "UNIT": 17, "SPACE": 18, "STYLE": 19, "PCT": 20, "idString": 21, "style": 22, "stylesOpt": 23, "classDefStatement": 24, "CLASSDEF": 25, "start": 26, "eol": 27, "QUADRANT": 28, "document": 29, "line": 30, "statement": 31, "axisDetails": 32, "quadrantDetails": 33, "points": 34, "title": 35, "title_value": 36, "acc_title": 37, "acc_title_value": 38, "acc_descr": 39, "acc_descr_value": 40, "acc_descr_multiline_value": 41, "section": 42, "text": 43, "point_start": 44, "point_x": 45, "point_y": 46, "class_name": 47, "X-AXIS": 48, "AXIS-TEXT-DELIMITER": 49, "Y-AXIS": 50, "QUADRANT_1": 51, "QUADRANT_2": 52, "QUADRANT_3": 53, "QUADRANT_4": 54, "NEWLINE": 55, "SEMI": 56, "EOF": 57, "alphaNumToken": 58, "textNoTagsToken": 59, "STR": 60, "MD_STR": 61, "alphaNum": 62, "PUNCTUATION": 63, "PLUS": 64, "EQUALS": 65, "DOT": 66, "UNDERSCORE": 67, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "ALPHA", 5: "NUM", 6: "NODE_STRING", 7: "DOWN", 8: "MINUS", 9: "DEFAULT", 10: "COMMA", 11: "COLON", 12: "AMP", 13: "BRKT", 14: "MULT", 15: "UNICODE_TEXT", 17: "UNIT", 18: "SPACE", 19: "STYLE", 20: "PCT", 25: "CLASSDEF", 28: "QUADRANT", 35: "title", 36: "title_value", 37: "acc_title", 38: "acc_title_value", 39: "acc_descr", 40: "acc_descr_value", 41: "acc_descr_multiline_value", 42: "section", 44: "point_start", 45: "point_x", 46: "point_y", 47: "class_name", 48: "X-AXIS", 49: "AXIS-TEXT-DELIMITER", 50: "Y-AXIS", 51: "QUADRANT_1", 52: "QUADRANT_2", 53: "QUADRANT_3", 54: "QUADRANT_4", 55: "NEWLINE", 56: "SEMI", 57: "EOF", 60: "STR", 61: "MD_STR", 63: "PUNCTUATION", 64: "PLUS", 65: "EQUALS", 66: "DOT", 67: "UNDERSCORE" },
          productions_: [0, [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [21, 1], [21, 2], [22, 1], [22, 2], [23, 1], [23, 3], [24, 5], [26, 2], [26, 2], [26, 2], [29, 0], [29, 2], [30, 2], [31, 0], [31, 1], [31, 2], [31, 1], [31, 1], [31, 1], [31, 2], [31, 2], [31, 2], [31, 1], [31, 1], [34, 4], [34, 5], [34, 5], [34, 6], [32, 4], [32, 3], [32, 2], [32, 4], [32, 3], [32, 2], [33, 2], [33, 2], [33, 2], [33, 2], [27, 1], [27, 1], [27, 1], [43, 1], [43, 2], [43, 1], [43, 1], [62, 1], [62, 2], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [59, 1], [59, 1], [59, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 23:
                this.$ = $$[$0];
                break;
              case 24:
                this.$ = $$[$0 - 1] + "" + $$[$0];
                break;
              case 26:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
              case 27:
                this.$ = [$$[$0].trim()];
                break;
              case 28:
                $$[$0 - 2].push($$[$0].trim());
                this.$ = $$[$0 - 2];
                break;
              case 29:
                this.$ = $$[$0 - 4];
                yy.addClass($$[$0 - 2], $$[$0]);
                break;
              case 37:
                this.$ = [];
                break;
              case 42:
                this.$ = $$[$0].trim();
                yy.setDiagramTitle(this.$);
                break;
              case 43:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 44:
              case 45:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 46:
                yy.addSection($$[$0].substr(8));
                this.$ = $$[$0].substr(8);
                break;
              case 47:
                yy.addPoint($$[$0 - 3], "", $$[$0 - 1], $$[$0], []);
                break;
              case 48:
                yy.addPoint($$[$0 - 4], $$[$0 - 3], $$[$0 - 1], $$[$0], []);
                break;
              case 49:
                yy.addPoint($$[$0 - 4], "", $$[$0 - 2], $$[$0 - 1], $$[$0]);
                break;
              case 50:
                yy.addPoint($$[$0 - 5], $$[$0 - 4], $$[$0 - 2], $$[$0 - 1], $$[$0]);
                break;
              case 51:
                yy.setXAxisLeftText($$[$0 - 2]);
                yy.setXAxisRightText($$[$0]);
                break;
              case 52:
                $$[$0 - 1].text += " \u27F6 ";
                yy.setXAxisLeftText($$[$0 - 1]);
                break;
              case 53:
                yy.setXAxisLeftText($$[$0]);
                break;
              case 54:
                yy.setYAxisBottomText($$[$0 - 2]);
                yy.setYAxisTopText($$[$0]);
                break;
              case 55:
                $$[$0 - 1].text += " \u27F6 ";
                yy.setYAxisBottomText($$[$0 - 1]);
                break;
              case 56:
                yy.setYAxisBottomText($$[$0]);
                break;
              case 57:
                yy.setQuadrant1Text($$[$0]);
                break;
              case 58:
                yy.setQuadrant2Text($$[$0]);
                break;
              case 59:
                yy.setQuadrant3Text($$[$0]);
                break;
              case 60:
                yy.setQuadrant4Text($$[$0]);
                break;
              case 64:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 65:
                this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type };
                break;
              case 66:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 67:
                this.$ = { text: $$[$0], type: "markdown" };
                break;
              case 68:
                this.$ = $$[$0];
                break;
              case 69:
                this.$ = $$[$0 - 1] + "" + $$[$0];
                break;
            }
          }, "anonymous"),
          table: [{ 18: $V0, 26: 1, 27: 2, 28: $V1, 55: $V2, 56: $V3, 57: $V4 }, { 1: [3] }, { 18: $V0, 26: 8, 27: 2, 28: $V1, 55: $V2, 56: $V3, 57: $V4 }, { 18: $V0, 26: 9, 27: 2, 28: $V1, 55: $V2, 56: $V3, 57: $V4 }, o2($V5, [2, 33], { 29: 10 }), o2($V6, [2, 61]), o2($V6, [2, 62]), o2($V6, [2, 63]), { 1: [2, 30] }, { 1: [2, 31] }, o2($V7, $V8, { 30: 11, 31: 12, 24: 13, 32: 15, 33: 16, 34: 17, 43: 30, 58: 31, 1: [2, 32], 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $Vg, 25: $Vh, 35: $Vi, 37: $Vj, 39: $Vk, 41: $Vl, 42: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V5, [2, 34]), { 27: 46, 55: $V2, 56: $V3, 57: $V4 }, o2($V7, [2, 37]), o2($V7, $V8, { 24: 13, 32: 15, 33: 16, 34: 17, 43: 30, 58: 31, 31: 47, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $Vg, 25: $Vh, 35: $Vi, 37: $Vj, 39: $Vk, 41: $Vl, 42: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 39]), o2($V7, [2, 40]), o2($V7, [2, 41]), { 36: [1, 48] }, { 38: [1, 49] }, { 40: [1, 50] }, o2($V7, [2, 45]), o2($V7, [2, 46]), { 18: [1, 51] }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 43: 52, 58: 31, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 43: 53, 58: 31, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 43: 54, 58: 31, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 43: 55, 58: 31, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 43: 56, 58: 31, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 43: 57, 58: 31, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }, { 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 44: [1, 58], 47: [1, 59], 58: 61, 59: 60, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }, o2($VC, [2, 64]), o2($VC, [2, 66]), o2($VC, [2, 67]), o2($VC, [2, 70]), o2($VC, [2, 71]), o2($VC, [2, 72]), o2($VC, [2, 73]), o2($VC, [2, 74]), o2($VC, [2, 75]), o2($VC, [2, 76]), o2($VC, [2, 77]), o2($VC, [2, 78]), o2($VC, [2, 79]), o2($VC, [2, 80]), o2($VC, [2, 81]), o2($V5, [2, 35]), o2($V7, [2, 38]), o2($V7, [2, 42]), o2($V7, [2, 43]), o2($V7, [2, 44]), { 3: 65, 4: $VD, 5: $VE, 6: $VF, 7: $VG, 8: $VH, 9: $VI, 10: $VJ, 11: $VK, 12: $VL, 13: $VM, 14: $VN, 15: $VO, 21: 64 }, o2($V7, [2, 53], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 49: [1, 78], 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 56], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 49: [1, 79], 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 57], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 58], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 59], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 60], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), { 45: [1, 80] }, { 44: [1, 81] }, o2($VC, [2, 65]), o2($VC, [2, 82]), o2($VC, [2, 83]), o2($VC, [2, 84]), { 3: 83, 4: $VD, 5: $VE, 6: $VF, 7: $VG, 8: $VH, 9: $VI, 10: $VJ, 11: $VK, 12: $VL, 13: $VM, 14: $VN, 15: $VO, 18: [1, 82] }, o2($VP, [2, 23]), o2($VP, [2, 1]), o2($VP, [2, 2]), o2($VP, [2, 3]), o2($VP, [2, 4]), o2($VP, [2, 5]), o2($VP, [2, 6]), o2($VP, [2, 7]), o2($VP, [2, 8]), o2($VP, [2, 9]), o2($VP, [2, 10]), o2($VP, [2, 11]), o2($VP, [2, 12]), o2($V7, [2, 52], { 58: 31, 43: 84, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 55], { 58: 31, 43: 85, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 60: $Vt, 61: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), { 46: [1, 86] }, { 45: [1, 87] }, { 4: $VQ, 5: $VR, 6: $VS, 8: $VT, 11: $VU, 13: $VV, 16: 90, 17: $VW, 18: $VX, 19: $VY, 20: $VZ, 22: 89, 23: 88 }, o2($VP, [2, 24]), o2($V7, [2, 51], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 54], { 59: 60, 58: 61, 4: $V9, 5: $Va, 8: $VA, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 15: $Vf, 18: $VB, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz }), o2($V7, [2, 47], { 22: 89, 16: 90, 23: 101, 4: $VQ, 5: $VR, 6: $VS, 8: $VT, 11: $VU, 13: $VV, 17: $VW, 18: $VX, 19: $VY, 20: $VZ }), { 46: [1, 102] }, o2($V7, [2, 29], { 10: $V_ }), o2($V$, [2, 27], { 16: 104, 4: $VQ, 5: $VR, 6: $VS, 8: $VT, 11: $VU, 13: $VV, 17: $VW, 18: $VX, 19: $VY, 20: $VZ }), o2($V01, [2, 25]), o2($V01, [2, 13]), o2($V01, [2, 14]), o2($V01, [2, 15]), o2($V01, [2, 16]), o2($V01, [2, 17]), o2($V01, [2, 18]), o2($V01, [2, 19]), o2($V01, [2, 20]), o2($V01, [2, 21]), o2($V01, [2, 22]), o2($V7, [2, 49], { 10: $V_ }), o2($V7, [2, 48], { 22: 89, 16: 90, 23: 105, 4: $VQ, 5: $VR, 6: $VS, 8: $VT, 11: $VU, 13: $VV, 17: $VW, 18: $VX, 19: $VY, 20: $VZ }), { 4: $VQ, 5: $VR, 6: $VS, 8: $VT, 11: $VU, 13: $VV, 16: 90, 17: $VW, 18: $VX, 19: $VY, 20: $VZ, 22: 106 }, o2($V01, [2, 26]), o2($V7, [2, 50], { 10: $V_ }), o2($V$, [2, 28], { 16: 104, 4: $VQ, 5: $VR, 6: $VS, 8: $VT, 11: $VU, 13: $VV, 17: $VW, 18: $VX, 19: $VY, 20: $VZ })],
          defaultActions: { 8: [2, 30], 9: [2, 31] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  break;
                case 1:
                  break;
                case 2:
                  return 55;
                  break;
                case 3:
                  break;
                case 4:
                  this.begin("title");
                  return 35;
                  break;
                case 5:
                  this.popState();
                  return "title_value";
                  break;
                case 6:
                  this.begin("acc_title");
                  return 37;
                  break;
                case 7:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 8:
                  this.begin("acc_descr");
                  return 39;
                  break;
                case 9:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 10:
                  this.begin("acc_descr_multiline");
                  break;
                case 11:
                  this.popState();
                  break;
                case 12:
                  return "acc_descr_multiline_value";
                  break;
                case 13:
                  return 48;
                  break;
                case 14:
                  return 50;
                  break;
                case 15:
                  return 49;
                  break;
                case 16:
                  return 51;
                  break;
                case 17:
                  return 52;
                  break;
                case 18:
                  return 53;
                  break;
                case 19:
                  return 54;
                  break;
                case 20:
                  return 25;
                  break;
                case 21:
                  this.begin("md_string");
                  break;
                case 22:
                  return "MD_STR";
                  break;
                case 23:
                  this.popState();
                  break;
                case 24:
                  this.begin("string");
                  break;
                case 25:
                  this.popState();
                  break;
                case 26:
                  return "STR";
                  break;
                case 27:
                  this.begin("class_name");
                  break;
                case 28:
                  this.popState();
                  return 47;
                  break;
                case 29:
                  this.begin("point_start");
                  return 44;
                  break;
                case 30:
                  this.begin("point_x");
                  return 45;
                  break;
                case 31:
                  this.popState();
                  break;
                case 32:
                  this.popState();
                  this.begin("point_y");
                  break;
                case 33:
                  this.popState();
                  return 46;
                  break;
                case 34:
                  return 28;
                  break;
                case 35:
                  return 4;
                  break;
                case 36:
                  return 15;
                  break;
                case 37:
                  return 11;
                  break;
                case 38:
                  return 64;
                  break;
                case 39:
                  return 10;
                  break;
                case 40:
                  return 65;
                  break;
                case 41:
                  return 65;
                  break;
                case 42:
                  return 14;
                  break;
                case 43:
                  return 13;
                  break;
                case 44:
                  return 67;
                  break;
                case 45:
                  return 66;
                  break;
                case 46:
                  return 12;
                  break;
                case 47:
                  return 8;
                  break;
                case 48:
                  return 5;
                  break;
                case 49:
                  return 18;
                  break;
                case 50:
                  return 56;
                  break;
                case 51:
                  return 63;
                  break;
                case 52:
                  return 57;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?: *x-axis *)/i, /^(?: *y-axis *)/i, /^(?: *--+> *)/i, /^(?: *quadrant-1 *)/i, /^(?: *quadrant-2 *)/i, /^(?: *quadrant-3 *)/i, /^(?: *quadrant-4 *)/i, /^(?:classDef\b)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?::::)/i, /^(?:^\w+)/i, /^(?:\s*:\s*\[\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?:\s*\] *)/i, /^(?:\s*,\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?: *quadrantChart *)/i, /^(?:[A-Za-z]+)/i, /^(?:[^\x00-\x7F]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s)/i, /^(?:;)/i, /^(?:[!"#$%&'*+,-.`?\\_/])/i, /^(?:$)/i],
            conditions: { "class_name": { "rules": [28], "inclusive": false }, "point_y": { "rules": [33], "inclusive": false }, "point_x": { "rules": [32], "inclusive": false }, "point_start": { "rules": [30, 31], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "title": { "rules": [5], "inclusive": false }, "md_string": { "rules": [22, 23], "inclusive": false }, "string": { "rules": [25, 26], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 27, 29, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser8.parser = parser8;
      quadrant_default = parser8;
    }
  });

  // src/diagrams/quadrant-chart/quadrantBuilder.ts
  var defaultThemeVariables, QuadrantBuilder;
  var init_quadrantBuilder = __esm({
    "src/diagrams/quadrant-chart/quadrantBuilder.ts"() {
      "use strict";
      init_src32();
      init_defaultConfig();
      init_logger();
      init_theme_default();
      defaultThemeVariables = getThemeVariables3();
      QuadrantBuilder = class {
        constructor() {
          this.classes = /* @__PURE__ */ new Map();
          this.config = this.getDefaultConfig();
          this.themeConfig = this.getDefaultThemeConfig();
          this.data = this.getDefaultData();
        }
        static {
          __name(this, "QuadrantBuilder");
        }
        getDefaultData() {
          return {
            titleText: "",
            quadrant1Text: "",
            quadrant2Text: "",
            quadrant3Text: "",
            quadrant4Text: "",
            xAxisLeftText: "",
            xAxisRightText: "",
            yAxisBottomText: "",
            yAxisTopText: "",
            points: []
          };
        }
        getDefaultConfig() {
          return {
            showXAxis: true,
            showYAxis: true,
            showTitle: true,
            chartHeight: defaultConfig_default.quadrantChart?.chartWidth || 500,
            chartWidth: defaultConfig_default.quadrantChart?.chartHeight || 500,
            titlePadding: defaultConfig_default.quadrantChart?.titlePadding || 10,
            titleFontSize: defaultConfig_default.quadrantChart?.titleFontSize || 20,
            quadrantPadding: defaultConfig_default.quadrantChart?.quadrantPadding || 5,
            xAxisLabelPadding: defaultConfig_default.quadrantChart?.xAxisLabelPadding || 5,
            yAxisLabelPadding: defaultConfig_default.quadrantChart?.yAxisLabelPadding || 5,
            xAxisLabelFontSize: defaultConfig_default.quadrantChart?.xAxisLabelFontSize || 16,
            yAxisLabelFontSize: defaultConfig_default.quadrantChart?.yAxisLabelFontSize || 16,
            quadrantLabelFontSize: defaultConfig_default.quadrantChart?.quadrantLabelFontSize || 16,
            quadrantTextTopPadding: defaultConfig_default.quadrantChart?.quadrantTextTopPadding || 5,
            pointTextPadding: defaultConfig_default.quadrantChart?.pointTextPadding || 5,
            pointLabelFontSize: defaultConfig_default.quadrantChart?.pointLabelFontSize || 12,
            pointRadius: defaultConfig_default.quadrantChart?.pointRadius || 5,
            xAxisPosition: defaultConfig_default.quadrantChart?.xAxisPosition || "top",
            yAxisPosition: defaultConfig_default.quadrantChart?.yAxisPosition || "left",
            quadrantInternalBorderStrokeWidth: defaultConfig_default.quadrantChart?.quadrantInternalBorderStrokeWidth || 1,
            quadrantExternalBorderStrokeWidth: defaultConfig_default.quadrantChart?.quadrantExternalBorderStrokeWidth || 2
          };
        }
        getDefaultThemeConfig() {
          return {
            quadrant1Fill: defaultThemeVariables.quadrant1Fill,
            quadrant2Fill: defaultThemeVariables.quadrant2Fill,
            quadrant3Fill: defaultThemeVariables.quadrant3Fill,
            quadrant4Fill: defaultThemeVariables.quadrant4Fill,
            quadrant1TextFill: defaultThemeVariables.quadrant1TextFill,
            quadrant2TextFill: defaultThemeVariables.quadrant2TextFill,
            quadrant3TextFill: defaultThemeVariables.quadrant3TextFill,
            quadrant4TextFill: defaultThemeVariables.quadrant4TextFill,
            quadrantPointFill: defaultThemeVariables.quadrantPointFill,
            quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill,
            quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill,
            quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill,
            quadrantTitleFill: defaultThemeVariables.quadrantTitleFill,
            quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill,
            quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill
          };
        }
        clear() {
          this.config = this.getDefaultConfig();
          this.themeConfig = this.getDefaultThemeConfig();
          this.data = this.getDefaultData();
          this.classes = /* @__PURE__ */ new Map();
          log.info("clear called");
        }
        setData(data6) {
          this.data = { ...this.data, ...data6 };
        }
        addPoints(points) {
          this.data.points = [...points, ...this.data.points];
        }
        addClass(className, styles7) {
          this.classes.set(className, styles7);
        }
        setConfig(config3) {
          log.trace("setConfig called with: ", config3);
          this.config = { ...this.config, ...config3 };
        }
        setThemeConfig(themeConfig) {
          log.trace("setThemeConfig called with: ", themeConfig);
          this.themeConfig = { ...this.themeConfig, ...themeConfig };
        }
        calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle) {
          const xAxisSpaceCalculation = this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize;
          const xAxisSpace = {
            top: xAxisPosition === "top" && showXAxis ? xAxisSpaceCalculation : 0,
            bottom: xAxisPosition === "bottom" && showXAxis ? xAxisSpaceCalculation : 0
          };
          const yAxisSpaceCalculation = this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize;
          const yAxisSpace = {
            left: this.config.yAxisPosition === "left" && showYAxis ? yAxisSpaceCalculation : 0,
            right: this.config.yAxisPosition === "right" && showYAxis ? yAxisSpaceCalculation : 0
          };
          const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2;
          const titleSpace = {
            top: showTitle ? titleSpaceCalculation : 0
          };
          const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left;
          const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top;
          const quadrantWidth = this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right;
          const quadrantHeight = this.config.chartHeight - this.config.quadrantPadding * 2 - xAxisSpace.top - xAxisSpace.bottom - titleSpace.top;
          const quadrantHalfWidth = quadrantWidth / 2;
          const quadrantHalfHeight = quadrantHeight / 2;
          const quadrantSpace = {
            quadrantLeft,
            quadrantTop,
            quadrantWidth,
            quadrantHalfWidth,
            quadrantHeight,
            quadrantHalfHeight
          };
          return {
            xAxisSpace,
            yAxisSpace,
            titleSpace,
            quadrantSpace
          };
        }
        getAxisLabels(xAxisPosition, showXAxis, showYAxis, spaceData) {
          const { quadrantSpace, titleSpace } = spaceData;
          const {
            quadrantHalfHeight,
            quadrantHeight,
            quadrantLeft,
            quadrantHalfWidth,
            quadrantTop,
            quadrantWidth
          } = quadrantSpace;
          const drawXAxisLabelsInMiddle = Boolean(this.data.xAxisRightText);
          const drawYAxisLabelsInMiddle = Boolean(this.data.yAxisTopText);
          const axisLabels = [];
          if (this.data.xAxisLeftText && showXAxis) {
            axisLabels.push({
              text: this.data.xAxisLeftText,
              fill: this.themeConfig.quadrantXAxisTextFill,
              x: quadrantLeft + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0),
              y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding,
              fontSize: this.config.xAxisLabelFontSize,
              verticalPos: drawXAxisLabelsInMiddle ? "center" : "left",
              horizontalPos: "top",
              rotation: 0
            });
          }
          if (this.data.xAxisRightText && showXAxis) {
            axisLabels.push({
              text: this.data.xAxisRightText,
              fill: this.themeConfig.quadrantXAxisTextFill,
              x: quadrantLeft + quadrantHalfWidth + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0),
              y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding,
              fontSize: this.config.xAxisLabelFontSize,
              verticalPos: drawXAxisLabelsInMiddle ? "center" : "left",
              horizontalPos: "top",
              rotation: 0
            });
          }
          if (this.data.yAxisBottomText && showYAxis) {
            axisLabels.push({
              text: this.data.yAxisBottomText,
              fill: this.themeConfig.quadrantYAxisTextFill,
              x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding,
              y: quadrantTop + quadrantHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0),
              fontSize: this.config.yAxisLabelFontSize,
              verticalPos: drawYAxisLabelsInMiddle ? "center" : "left",
              horizontalPos: "top",
              rotation: -90
            });
          }
          if (this.data.yAxisTopText && showYAxis) {
            axisLabels.push({
              text: this.data.yAxisTopText,
              fill: this.themeConfig.quadrantYAxisTextFill,
              x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding,
              y: quadrantTop + quadrantHalfHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0),
              fontSize: this.config.yAxisLabelFontSize,
              verticalPos: drawYAxisLabelsInMiddle ? "center" : "left",
              horizontalPos: "top",
              rotation: -90
            });
          }
          return axisLabels;
        }
        getQuadrants(spaceData) {
          const { quadrantSpace } = spaceData;
          const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace;
          const quadrants = [
            {
              text: {
                text: this.data.quadrant1Text,
                fill: this.themeConfig.quadrant1TextFill,
                x: 0,
                y: 0,
                fontSize: this.config.quadrantLabelFontSize,
                verticalPos: "center",
                horizontalPos: "middle",
                rotation: 0
              },
              x: quadrantLeft + quadrantHalfWidth,
              y: quadrantTop,
              width: quadrantHalfWidth,
              height: quadrantHalfHeight,
              fill: this.themeConfig.quadrant1Fill
            },
            {
              text: {
                text: this.data.quadrant2Text,
                fill: this.themeConfig.quadrant2TextFill,
                x: 0,
                y: 0,
                fontSize: this.config.quadrantLabelFontSize,
                verticalPos: "center",
                horizontalPos: "middle",
                rotation: 0
              },
              x: quadrantLeft,
              y: quadrantTop,
              width: quadrantHalfWidth,
              height: quadrantHalfHeight,
              fill: this.themeConfig.quadrant2Fill
            },
            {
              text: {
                text: this.data.quadrant3Text,
                fill: this.themeConfig.quadrant3TextFill,
                x: 0,
                y: 0,
                fontSize: this.config.quadrantLabelFontSize,
                verticalPos: "center",
                horizontalPos: "middle",
                rotation: 0
              },
              x: quadrantLeft,
              y: quadrantTop + quadrantHalfHeight,
              width: quadrantHalfWidth,
              height: quadrantHalfHeight,
              fill: this.themeConfig.quadrant3Fill
            },
            {
              text: {
                text: this.data.quadrant4Text,
                fill: this.themeConfig.quadrant4TextFill,
                x: 0,
                y: 0,
                fontSize: this.config.quadrantLabelFontSize,
                verticalPos: "center",
                horizontalPos: "middle",
                rotation: 0
              },
              x: quadrantLeft + quadrantHalfWidth,
              y: quadrantTop + quadrantHalfHeight,
              width: quadrantHalfWidth,
              height: quadrantHalfHeight,
              fill: this.themeConfig.quadrant4Fill
            }
          ];
          for (const quadrant of quadrants) {
            quadrant.text.x = quadrant.x + quadrant.width / 2;
            if (this.data.points.length === 0) {
              quadrant.text.y = quadrant.y + quadrant.height / 2;
              quadrant.text.horizontalPos = "middle";
            } else {
              quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding;
              quadrant.text.horizontalPos = "top";
            }
          }
          return quadrants;
        }
        getQuadrantPoints(spaceData) {
          const { quadrantSpace } = spaceData;
          const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace;
          const xAxis = linear2().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]);
          const yAxis = linear2().domain([0, 1]).range([quadrantHeight + quadrantTop, quadrantTop]);
          const points = this.data.points.map((point8) => {
            const classStyles = this.classes.get(point8.className);
            if (classStyles) {
              point8 = { ...classStyles, ...point8 };
            }
            const props = {
              x: xAxis(point8.x),
              y: yAxis(point8.y),
              fill: point8.color ?? this.themeConfig.quadrantPointFill,
              radius: point8.radius ?? this.config.pointRadius,
              text: {
                text: point8.text,
                fill: this.themeConfig.quadrantPointTextFill,
                x: xAxis(point8.x),
                y: yAxis(point8.y) + this.config.pointTextPadding,
                verticalPos: "center",
                horizontalPos: "top",
                fontSize: this.config.pointLabelFontSize,
                rotation: 0
              },
              strokeColor: point8.strokeColor ?? this.themeConfig.quadrantPointFill,
              strokeWidth: point8.strokeWidth ?? "0px"
            };
            return props;
          });
          return points;
        }
        getBorders(spaceData) {
          const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2;
          const { quadrantSpace } = spaceData;
          const {
            quadrantHalfHeight,
            quadrantHeight,
            quadrantLeft,
            quadrantHalfWidth,
            quadrantTop,
            quadrantWidth
          } = quadrantSpace;
          const borderLines = [
            // top border
            {
              strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,
              strokeWidth: this.config.quadrantExternalBorderStrokeWidth,
              x1: quadrantLeft - halfExternalBorderWidth,
              y1: quadrantTop,
              x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth,
              y2: quadrantTop
            },
            // right border
            {
              strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,
              strokeWidth: this.config.quadrantExternalBorderStrokeWidth,
              x1: quadrantLeft + quadrantWidth,
              y1: quadrantTop + halfExternalBorderWidth,
              x2: quadrantLeft + quadrantWidth,
              y2: quadrantTop + quadrantHeight - halfExternalBorderWidth
            },
            // bottom border
            {
              strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,
              strokeWidth: this.config.quadrantExternalBorderStrokeWidth,
              x1: quadrantLeft - halfExternalBorderWidth,
              y1: quadrantTop + quadrantHeight,
              x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth,
              y2: quadrantTop + quadrantHeight
            },
            // left border
            {
              strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,
              strokeWidth: this.config.quadrantExternalBorderStrokeWidth,
              x1: quadrantLeft,
              y1: quadrantTop + halfExternalBorderWidth,
              x2: quadrantLeft,
              y2: quadrantTop + quadrantHeight - halfExternalBorderWidth
            },
            // vertical inner border
            {
              strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill,
              strokeWidth: this.config.quadrantInternalBorderStrokeWidth,
              x1: quadrantLeft + quadrantHalfWidth,
              y1: quadrantTop + halfExternalBorderWidth,
              x2: quadrantLeft + quadrantHalfWidth,
              y2: quadrantTop + quadrantHeight - halfExternalBorderWidth
            },
            // horizontal inner border
            {
              strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill,
              strokeWidth: this.config.quadrantInternalBorderStrokeWidth,
              x1: quadrantLeft + halfExternalBorderWidth,
              y1: quadrantTop + quadrantHalfHeight,
              x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth,
              y2: quadrantTop + quadrantHalfHeight
            }
          ];
          return borderLines;
        }
        getTitle(showTitle) {
          if (showTitle) {
            return {
              text: this.data.titleText,
              fill: this.themeConfig.quadrantTitleFill,
              fontSize: this.config.titleFontSize,
              horizontalPos: "top",
              verticalPos: "center",
              rotation: 0,
              y: this.config.titlePadding,
              x: this.config.chartWidth / 2
            };
          }
          return;
        }
        build() {
          const showXAxis = this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText);
          const showYAxis = this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText);
          const showTitle = this.config.showTitle && !!this.data.titleText;
          const xAxisPosition = this.data.points.length > 0 ? "bottom" : this.config.xAxisPosition;
          const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle);
          return {
            points: this.getQuadrantPoints(calculatedSpace),
            quadrants: this.getQuadrants(calculatedSpace),
            axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace),
            borderLines: this.getBorders(calculatedSpace),
            title: this.getTitle(showTitle)
          };
        }
      };
    }
  });

  // src/diagrams/quadrant-chart/utils.ts
  function validateHexCode(value2) {
    return !/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(value2);
  }
  function validateNumber(value2) {
    return !/^\d+$/.test(value2);
  }
  function validateSizeInPixels(value2) {
    return !/^\d+px$/.test(value2);
  }
  var InvalidStyleError;
  var init_utils3 = __esm({
    "src/diagrams/quadrant-chart/utils.ts"() {
      "use strict";
      InvalidStyleError = class extends Error {
        static {
          __name(this, "InvalidStyleError");
        }
        constructor(style3, value2, type3) {
          super(`value for ${style3} ${value2} is invalid, please use a valid ${type3}`);
          this.name = "InvalidStyleError";
        }
      };
      __name(validateHexCode, "validateHexCode");
      __name(validateNumber, "validateNumber");
      __name(validateSizeInPixels, "validateSizeInPixels");
    }
  });

  // src/diagrams/quadrant-chart/quadrantDb.ts
  function textSanitizer(text4) {
    return sanitizeText(text4.trim(), getConfig2());
  }
  function setQuadrant1Text(textObj) {
    quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) });
  }
  function setQuadrant2Text(textObj) {
    quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) });
  }
  function setQuadrant3Text(textObj) {
    quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) });
  }
  function setQuadrant4Text(textObj) {
    quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) });
  }
  function setXAxisLeftText(textObj) {
    quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) });
  }
  function setXAxisRightText(textObj) {
    quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) });
  }
  function setYAxisTopText(textObj) {
    quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) });
  }
  function setYAxisBottomText(textObj) {
    quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) });
  }
  function parseStyles(styles7) {
    const stylesObject = {};
    for (const style3 of styles7) {
      const [key, value2] = style3.trim().split(/\s*:\s*/);
      if (key === "radius") {
        if (validateNumber(value2)) {
          throw new InvalidStyleError(key, value2, "number");
        }
        stylesObject.radius = parseInt(value2);
      } else if (key === "color") {
        if (validateHexCode(value2)) {
          throw new InvalidStyleError(key, value2, "hex code");
        }
        stylesObject.color = value2;
      } else if (key === "stroke-color") {
        if (validateHexCode(value2)) {
          throw new InvalidStyleError(key, value2, "hex code");
        }
        stylesObject.strokeColor = value2;
      } else if (key === "stroke-width") {
        if (validateSizeInPixels(value2)) {
          throw new InvalidStyleError(key, value2, "number of pixels (eg. 10px)");
        }
        stylesObject.strokeWidth = value2;
      } else {
        throw new Error(`style named ${key} is not supported.`);
      }
    }
    return stylesObject;
  }
  function addPoint(textObj, className, x5, y6, styles7) {
    const stylesObject = parseStyles(styles7);
    quadrantBuilder.addPoints([
      {
        x: x5,
        y: y6,
        text: textSanitizer(textObj.text),
        className,
        ...stylesObject
      }
    ]);
  }
  function addClass2(className, styles7) {
    quadrantBuilder.addClass(className, parseStyles(styles7));
  }
  function setWidth(width3) {
    quadrantBuilder.setConfig({ chartWidth: width3 });
  }
  function setHeight(height2) {
    quadrantBuilder.setConfig({ chartHeight: height2 });
  }
  function getQuadrantData() {
    const config3 = getConfig2();
    const { themeVariables, quadrantChart: quadrantChartConfig } = config3;
    if (quadrantChartConfig) {
      quadrantBuilder.setConfig(quadrantChartConfig);
    }
    quadrantBuilder.setThemeConfig({
      quadrant1Fill: themeVariables.quadrant1Fill,
      quadrant2Fill: themeVariables.quadrant2Fill,
      quadrant3Fill: themeVariables.quadrant3Fill,
      quadrant4Fill: themeVariables.quadrant4Fill,
      quadrant1TextFill: themeVariables.quadrant1TextFill,
      quadrant2TextFill: themeVariables.quadrant2TextFill,
      quadrant3TextFill: themeVariables.quadrant3TextFill,
      quadrant4TextFill: themeVariables.quadrant4TextFill,
      quadrantPointFill: themeVariables.quadrantPointFill,
      quadrantPointTextFill: themeVariables.quadrantPointTextFill,
      quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill,
      quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill,
      quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill,
      quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill,
      quadrantTitleFill: themeVariables.quadrantTitleFill
    });
    quadrantBuilder.setData({ titleText: getDiagramTitle() });
    return quadrantBuilder.build();
  }
  var quadrantBuilder, clear11, quadrantDb_default;
  var init_quadrantDb = __esm({
    "src/diagrams/quadrant-chart/quadrantDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_common();
      init_commonDb();
      init_quadrantBuilder();
      init_utils3();
      __name(textSanitizer, "textSanitizer");
      quadrantBuilder = new QuadrantBuilder();
      __name(setQuadrant1Text, "setQuadrant1Text");
      __name(setQuadrant2Text, "setQuadrant2Text");
      __name(setQuadrant3Text, "setQuadrant3Text");
      __name(setQuadrant4Text, "setQuadrant4Text");
      __name(setXAxisLeftText, "setXAxisLeftText");
      __name(setXAxisRightText, "setXAxisRightText");
      __name(setYAxisTopText, "setYAxisTopText");
      __name(setYAxisBottomText, "setYAxisBottomText");
      __name(parseStyles, "parseStyles");
      __name(addPoint, "addPoint");
      __name(addClass2, "addClass");
      __name(setWidth, "setWidth");
      __name(setHeight, "setHeight");
      __name(getQuadrantData, "getQuadrantData");
      clear11 = /* @__PURE__ */ __name(function() {
        quadrantBuilder.clear();
        clear();
      }, "clear");
      quadrantDb_default = {
        setWidth,
        setHeight,
        setQuadrant1Text,
        setQuadrant2Text,
        setQuadrant3Text,
        setQuadrant4Text,
        setXAxisLeftText,
        setXAxisRightText,
        setYAxisTopText,
        setYAxisBottomText,
        parseStyles,
        addPoint,
        addClass: addClass2,
        getQuadrantData,
        clear: clear11,
        setAccTitle,
        getAccTitle,
        setDiagramTitle,
        getDiagramTitle,
        getAccDescription,
        setAccDescription
      };
    }
  });

  // src/diagrams/quadrant-chart/quadrantRenderer.ts
  var draw8, quadrantRenderer_default;
  var init_quadrantRenderer = __esm({
    "src/diagrams/quadrant-chart/quadrantRenderer.ts"() {
      "use strict";
      init_src32();
      init_diagramAPI();
      init_logger();
      init_setupGraphViewbox();
      draw8 = /* @__PURE__ */ __name((txt, id41, _version, diagObj) => {
        function getDominantBaseLine(horizontalPos) {
          return horizontalPos === "top" ? "hanging" : "middle";
        }
        __name(getDominantBaseLine, "getDominantBaseLine");
        function getTextAnchor(verticalPos) {
          return verticalPos === "left" ? "start" : "middle";
        }
        __name(getTextAnchor, "getTextAnchor");
        function getTransformation(data6) {
          return `translate(${data6.x}, ${data6.y}) rotate(${data6.rotation || 0})`;
        }
        __name(getTransformation, "getTransformation");
        const conf5 = getConfig2();
        log.debug("Rendering quadrant chart\n" + txt);
        const securityLevel = conf5.securityLevel;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const svg2 = root4.select(`[id="${id41}"]`);
        const group2 = svg2.append("g").attr("class", "main");
        const width3 = conf5.quadrantChart?.chartWidth ?? 500;
        const height2 = conf5.quadrantChart?.chartHeight ?? 500;
        configureSvgSize(svg2, height2, width3, conf5.quadrantChart?.useMaxWidth ?? true);
        svg2.attr("viewBox", "0 0 " + width3 + " " + height2);
        diagObj.db.setHeight(height2);
        diagObj.db.setWidth(width3);
        const quadrantData = diagObj.db.getQuadrantData();
        const quadrantsGroup = group2.append("g").attr("class", "quadrants");
        const borderGroup = group2.append("g").attr("class", "border");
        const dataPointGroup = group2.append("g").attr("class", "data-points");
        const labelGroup = group2.append("g").attr("class", "labels");
        const titleGroup = group2.append("g").attr("class", "title");
        if (quadrantData.title) {
          titleGroup.append("text").attr("x", 0).attr("y", 0).attr("fill", quadrantData.title.fill).attr("font-size", quadrantData.title.fontSize).attr("dominant-baseline", getDominantBaseLine(quadrantData.title.horizontalPos)).attr("text-anchor", getTextAnchor(quadrantData.title.verticalPos)).attr("transform", getTransformation(quadrantData.title)).text(quadrantData.title.text);
        }
        if (quadrantData.borderLines) {
          borderGroup.selectAll("line").data(quadrantData.borderLines).enter().append("line").attr("x1", (data6) => data6.x1).attr("y1", (data6) => data6.y1).attr("x2", (data6) => data6.x2).attr("y2", (data6) => data6.y2).style("stroke", (data6) => data6.strokeFill).style("stroke-width", (data6) => data6.strokeWidth);
        }
        const quadrants = quadrantsGroup.selectAll("g.quadrant").data(quadrantData.quadrants).enter().append("g").attr("class", "quadrant");
        quadrants.append("rect").attr("x", (data6) => data6.x).attr("y", (data6) => data6.y).attr("width", (data6) => data6.width).attr("height", (data6) => data6.height).attr("fill", (data6) => data6.fill);
        quadrants.append("text").attr("x", 0).attr("y", 0).attr("fill", (data6) => data6.text.fill).attr("font-size", (data6) => data6.text.fontSize).attr(
          "dominant-baseline",
          (data6) => getDominantBaseLine(data6.text.horizontalPos)
        ).attr("text-anchor", (data6) => getTextAnchor(data6.text.verticalPos)).attr("transform", (data6) => getTransformation(data6.text)).text((data6) => data6.text.text);
        const labels = labelGroup.selectAll("g.label").data(quadrantData.axisLabels).enter().append("g").attr("class", "label");
        labels.append("text").attr("x", 0).attr("y", 0).text((data6) => data6.text).attr("fill", (data6) => data6.fill).attr("font-size", (data6) => data6.fontSize).attr("dominant-baseline", (data6) => getDominantBaseLine(data6.horizontalPos)).attr("text-anchor", (data6) => getTextAnchor(data6.verticalPos)).attr("transform", (data6) => getTransformation(data6));
        const dataPoints = dataPointGroup.selectAll("g.data-point").data(quadrantData.points).enter().append("g").attr("class", "data-point");
        dataPoints.append("circle").attr("cx", (data6) => data6.x).attr("cy", (data6) => data6.y).attr("r", (data6) => data6.radius).attr("fill", (data6) => data6.fill).attr("stroke", (data6) => data6.strokeColor).attr("stroke-width", (data6) => data6.strokeWidth);
        dataPoints.append("text").attr("x", 0).attr("y", 0).text((data6) => data6.text.text).attr("fill", (data6) => data6.text.fill).attr("font-size", (data6) => data6.text.fontSize).attr(
          "dominant-baseline",
          (data6) => getDominantBaseLine(data6.text.horizontalPos)
        ).attr("text-anchor", (data6) => getTextAnchor(data6.text.verticalPos)).attr("transform", (data6) => getTransformation(data6.text));
      }, "draw");
      quadrantRenderer_default = {
        draw: draw8
      };
    }
  });

  // src/diagrams/quadrant-chart/quadrantDiagram.ts
  var quadrantDiagram_exports = {};
  __export(quadrantDiagram_exports, {
    diagram: () => diagram9
  });
  var diagram9;
  var init_quadrantDiagram = __esm({
    "src/diagrams/quadrant-chart/quadrantDiagram.ts"() {
      "use strict";
      init_quadrant();
      init_quadrantDb();
      init_quadrantRenderer();
      diagram9 = {
        parser: quadrant_default,
        db: quadrantDb_default,
        renderer: quadrantRenderer_default,
        styles: /* @__PURE__ */ __name(() => "", "styles")
      };
    }
  });

  // src/diagrams/xychart/parser/xychart.jison
  var parser9, xychart_default;
  var init_xychart = __esm({
    "src/diagrams/xychart/parser/xychart.jison"() {
      "use strict";
      parser9 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 10, 12, 14, 16, 18, 19, 21, 23], $V1 = [2, 6], $V2 = [1, 3], $V3 = [1, 5], $V4 = [1, 6], $V5 = [1, 7], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 21, 23, 36, 37, 38], $V7 = [1, 25], $V8 = [1, 26], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 30], $Vc = [1, 31], $Vd = [1, 32], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 43], $Vk = [1, 42], $Vl = [1, 47], $Vm = [1, 50], $Vn = [1, 10, 12, 14, 16, 18, 19, 21, 23, 36, 37, 38], $Vo = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 28, 29, 36, 37, 38], $Vp = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 28, 29, 36, 37, 38, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], $Vq = [1, 65], $Vr = [26, 28];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "eol": 4, "XYCHART": 5, "chartConfig": 6, "document": 7, "CHART_ORIENTATION": 8, "statement": 9, "title": 10, "text": 11, "X_AXIS": 12, "parseXAxis": 13, "Y_AXIS": 14, "parseYAxis": 15, "LINE": 16, "plotData": 17, "BAR": 18, "acc_title": 19, "acc_title_value": 20, "acc_descr": 21, "acc_descr_value": 22, "acc_descr_multiline_value": 23, "SQUARE_BRACES_START": 24, "dataPoints": 25, "SQUARE_BRACES_END": 26, "dataPoint": 27, "COMMA": 28, "NUMBER_WITH_DECIMAL": 29, "STR": 30, "xAxisData": 31, "bandData": 32, "ARROW_DELIMITER": 33, "commaSeparatedTexts": 34, "yAxisData": 35, "NEWLINE": 36, "SEMI": 37, "EOF": 38, "alphaNum": 39, "MD_STR": 40, "alphaNumToken": 41, "AMP": 42, "NUM": 43, "ALPHA": 44, "PLUS": 45, "EQUALS": 46, "MULT": 47, "DOT": 48, "BRKT": 49, "MINUS": 50, "UNDERSCORE": 51, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 5: "XYCHART", 8: "CHART_ORIENTATION", 10: "title", 12: "X_AXIS", 14: "Y_AXIS", 16: "LINE", 18: "BAR", 19: "acc_title", 20: "acc_title_value", 21: "acc_descr", 22: "acc_descr_value", 23: "acc_descr_multiline_value", 24: "SQUARE_BRACES_START", 26: "SQUARE_BRACES_END", 28: "COMMA", 29: "NUMBER_WITH_DECIMAL", 30: "STR", 33: "ARROW_DELIMITER", 36: "NEWLINE", 37: "SEMI", 38: "EOF", 40: "MD_STR", 42: "AMP", 43: "NUM", 44: "ALPHA", 45: "PLUS", 46: "EQUALS", 47: "MULT", 48: "DOT", 49: "BRKT", 50: "MINUS", 51: "UNDERSCORE" },
          productions_: [0, [3, 2], [3, 3], [3, 2], [3, 1], [6, 1], [7, 0], [7, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 3], [9, 2], [9, 3], [9, 2], [9, 2], [9, 1], [17, 3], [25, 3], [25, 1], [27, 2], [27, 1], [13, 1], [13, 2], [13, 1], [31, 1], [31, 3], [32, 3], [34, 3], [34, 1], [15, 1], [15, 2], [15, 1], [35, 3], [4, 1], [4, 1], [4, 1], [11, 1], [11, 1], [11, 1], [39, 1], [39, 2], [41, 1], [41, 1], [41, 1], [41, 1], [41, 1], [41, 1], [41, 1], [41, 1], [41, 1], [41, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 5:
                yy.setOrientation($$[$0]);
                break;
              case 9:
                yy.setDiagramTitle($$[$0].text.trim());
                break;
              case 12:
                yy.setLineData({ text: "", type: "text" }, $$[$0]);
                break;
              case 13:
                yy.setLineData($$[$0 - 1], $$[$0]);
                break;
              case 14:
                yy.setBarData({ text: "", type: "text" }, $$[$0]);
                break;
              case 15:
                yy.setBarData($$[$0 - 1], $$[$0]);
                break;
              case 16:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 17:
              case 18:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 19:
                this.$ = $$[$0 - 1];
                break;
              case 20:
              case 30:
                this.$ = [$$[$0 - 2], ...$$[$0]];
                break;
              case 21:
              case 31:
                this.$ = [$$[$0]];
                break;
              case 22:
                this.$ = { value: Number($$[$0 - 1]), label: $$[$0] };
                break;
              case 23:
                this.$ = { value: Number($$[$0]), label: "" };
                break;
              case 24:
                yy.setXAxisTitle($$[$0]);
                break;
              case 25:
                yy.setXAxisTitle($$[$0 - 1]);
                break;
              case 26:
                yy.setXAxisTitle({ type: "text", text: "" });
                break;
              case 27:
                yy.setXAxisBand($$[$0]);
                break;
              case 28:
                yy.setXAxisRangeData(Number($$[$0 - 2]), Number($$[$0]));
                break;
              case 29:
                this.$ = $$[$0 - 1];
                break;
              case 32:
                yy.setYAxisTitle($$[$0]);
                break;
              case 33:
                yy.setYAxisTitle($$[$0 - 1]);
                break;
              case 34:
                yy.setYAxisTitle({ type: "text", text: "" });
                break;
              case 35:
                yy.setYAxisRangeData(Number($$[$0 - 2]), Number($$[$0]));
                break;
              case 39:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 40:
                this.$ = { text: $$[$0], type: "text" };
                break;
              case 41:
                this.$ = { text: $$[$0], type: "markdown" };
                break;
              case 42:
                this.$ = $$[$0];
                break;
              case 43:
                this.$ = $$[$0 - 1] + "" + $$[$0];
                break;
            }
          }, "anonymous"),
          table: [o2($V0, $V1, { 3: 1, 4: 2, 7: 4, 5: $V2, 36: $V3, 37: $V4, 38: $V5 }), { 1: [3] }, o2($V0, $V1, { 4: 2, 7: 4, 3: 8, 5: $V2, 36: $V3, 37: $V4, 38: $V5 }), o2($V0, $V1, { 4: 2, 7: 4, 6: 9, 3: 10, 5: $V2, 8: [1, 11], 36: $V3, 37: $V4, 38: $V5 }), { 1: [2, 4], 9: 12, 10: [1, 13], 12: [1, 14], 14: [1, 15], 16: [1, 16], 18: [1, 17], 19: [1, 18], 21: [1, 19], 23: [1, 20] }, o2($V6, [2, 36]), o2($V6, [2, 37]), o2($V6, [2, 38]), { 1: [2, 1] }, o2($V0, $V1, { 4: 2, 7: 4, 3: 21, 5: $V2, 36: $V3, 37: $V4, 38: $V5 }), { 1: [2, 3] }, o2($V6, [2, 5]), o2($V0, [2, 7], { 4: 22, 36: $V3, 37: $V4, 38: $V5 }), { 11: 23, 30: $V7, 39: 24, 40: $V8, 41: 27, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }, { 11: 39, 13: 38, 24: $Vj, 29: $Vk, 30: $V7, 31: 40, 32: 41, 39: 24, 40: $V8, 41: 27, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }, { 11: 45, 15: 44, 29: $Vl, 30: $V7, 35: 46, 39: 24, 40: $V8, 41: 27, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }, { 11: 49, 17: 48, 24: $Vm, 30: $V7, 39: 24, 40: $V8, 41: 27, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }, { 11: 52, 17: 51, 24: $Vm, 30: $V7, 39: 24, 40: $V8, 41: 27, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }, { 20: [1, 53] }, { 22: [1, 54] }, o2($Vn, [2, 18]), { 1: [2, 2] }, o2($Vn, [2, 8]), o2($Vn, [2, 9]), o2($Vo, [2, 39], { 41: 55, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }), o2($Vo, [2, 40]), o2($Vo, [2, 41]), o2($Vp, [2, 42]), o2($Vp, [2, 44]), o2($Vp, [2, 45]), o2($Vp, [2, 46]), o2($Vp, [2, 47]), o2($Vp, [2, 48]), o2($Vp, [2, 49]), o2($Vp, [2, 50]), o2($Vp, [2, 51]), o2($Vp, [2, 52]), o2($Vp, [2, 53]), o2($Vn, [2, 10]), o2($Vn, [2, 24], { 32: 41, 31: 56, 24: $Vj, 29: $Vk }), o2($Vn, [2, 26]), o2($Vn, [2, 27]), { 33: [1, 57] }, { 11: 59, 30: $V7, 34: 58, 39: 24, 40: $V8, 41: 27, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }, o2($Vn, [2, 11]), o2($Vn, [2, 32], { 35: 60, 29: $Vl }), o2($Vn, [2, 34]), { 33: [1, 61] }, o2($Vn, [2, 12]), { 17: 62, 24: $Vm }, { 25: 63, 27: 64, 29: $Vq }, o2($Vn, [2, 14]), { 17: 66, 24: $Vm }, o2($Vn, [2, 16]), o2($Vn, [2, 17]), o2($Vp, [2, 43]), o2($Vn, [2, 25]), { 29: [1, 67] }, { 26: [1, 68] }, { 26: [2, 31], 28: [1, 69] }, o2($Vn, [2, 33]), { 29: [1, 70] }, o2($Vn, [2, 13]), { 26: [1, 71] }, { 26: [2, 21], 28: [1, 72] }, o2($Vr, [2, 23], { 30: [1, 73] }), o2($Vn, [2, 15]), o2($Vn, [2, 28]), o2($Vn, [2, 29]), { 11: 59, 30: $V7, 34: 74, 39: 24, 40: $V8, 41: 27, 42: $V9, 43: $Va, 44: $Vb, 45: $Vc, 46: $Vd, 47: $Ve, 48: $Vf, 49: $Vg, 50: $Vh, 51: $Vi }, o2($Vn, [2, 35]), o2($Vn, [2, 19]), { 25: 75, 27: 64, 29: $Vq }, o2($Vr, [2, 22]), { 26: [2, 30] }, { 26: [2, 20] }],
          defaultActions: { 8: [2, 1], 10: [2, 3], 21: [2, 2], 74: [2, 30], 75: [2, 20] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  break;
                case 1:
                  break;
                case 2:
                  this.popState();
                  return 36;
                  break;
                case 3:
                  this.popState();
                  return 36;
                  break;
                case 4:
                  return 36;
                  break;
                case 5:
                  break;
                case 6:
                  return 10;
                  break;
                case 7:
                  this.pushState("acc_title");
                  return 19;
                  break;
                case 8:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 9:
                  this.pushState("acc_descr");
                  return 21;
                  break;
                case 10:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 11:
                  this.pushState("acc_descr_multiline");
                  break;
                case 12:
                  this.popState();
                  break;
                case 13:
                  return "acc_descr_multiline_value";
                  break;
                case 14:
                  return 5;
                  break;
                case 15:
                  return 5;
                  break;
                case 16:
                  return 8;
                  break;
                case 17:
                  this.pushState("axis_data");
                  return "X_AXIS";
                  break;
                case 18:
                  this.pushState("axis_data");
                  return "Y_AXIS";
                  break;
                case 19:
                  this.pushState("axis_band_data");
                  return 24;
                  break;
                case 20:
                  return 33;
                  break;
                case 21:
                  this.pushState("data");
                  return 16;
                  break;
                case 22:
                  this.pushState("data");
                  return 18;
                  break;
                case 23:
                  this.pushState("data_inner");
                  return 24;
                  break;
                case 24:
                  return 29;
                  break;
                case 25:
                  this.popState();
                  return 26;
                  break;
                case 26:
                  this.popState();
                  break;
                case 27:
                  this.pushState("string");
                  break;
                case 28:
                  this.popState();
                  break;
                case 29:
                  return "STR";
                  break;
                case 30:
                  return 24;
                  break;
                case 31:
                  return 26;
                  break;
                case 32:
                  return 44;
                  break;
                case 33:
                  return "COLON";
                  break;
                case 34:
                  return 45;
                  break;
                case 35:
                  return 28;
                  break;
                case 36:
                  return 46;
                  break;
                case 37:
                  return 47;
                  break;
                case 38:
                  return 49;
                  break;
                case 39:
                  return 51;
                  break;
                case 40:
                  return 48;
                  break;
                case 41:
                  return 42;
                  break;
                case 42:
                  return 50;
                  break;
                case 43:
                  return 43;
                  break;
                case 44:
                  break;
                case 45:
                  return 37;
                  break;
                case 46:
                  return 38;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:(\r?\n))/i, /^(?:(\r?\n))/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:\})/i, /^(?:[^\}]*)/i, /^(?:xychart-beta\b)/i, /^(?:xychart\b)/i, /^(?:(?:vertical|horizontal))/i, /^(?:x-axis\b)/i, /^(?:y-axis\b)/i, /^(?:\[)/i, /^(?:-->)/i, /^(?:line\b)/i, /^(?:bar\b)/i, /^(?:\[)/i, /^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i, /^(?:\])/i, /^(?:(?:`\)                                    \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+                  \{ return MD_STR; \}\n<md_string>\(\?:`))/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s+)/i, /^(?:;)/i, /^(?:$)/i],
            conditions: { "data_inner": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "data": { "rules": [0, 1, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 23, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "axis_band_data": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "axis_data": { "rules": [0, 1, 2, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [], "inclusive": false }, "md_string": { "rules": [], "inclusive": false }, "string": { "rules": [28, 29], "inclusive": false }, "INITIAL": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser9.parser = parser9;
      xychart_default = parser9;
    }
  });

  // src/diagrams/xychart/chartBuilder/interfaces.ts
  function isBarPlot(data6) {
    return data6.type === "bar";
  }
  function isBandAxisData(data6) {
    return data6.type === "band";
  }
  function isLinearAxisData(data6) {
    return data6.type === "linear";
  }
  var init_interfaces = __esm({
    "src/diagrams/xychart/chartBuilder/interfaces.ts"() {
      "use strict";
      __name(isBarPlot, "isBarPlot");
      __name(isBandAxisData, "isBandAxisData");
      __name(isLinearAxisData, "isLinearAxisData");
    }
  });

  // src/diagrams/xychart/chartBuilder/textDimensionCalculator.ts
  var TextDimensionCalculatorWithFont;
  var init_textDimensionCalculator = __esm({
    "src/diagrams/xychart/chartBuilder/textDimensionCalculator.ts"() {
      "use strict";
      init_createText();
      TextDimensionCalculatorWithFont = class {
        constructor(parentGroup) {
          this.parentGroup = parentGroup;
        }
        static {
          __name(this, "TextDimensionCalculatorWithFont");
        }
        getMaxDimension(texts, fontSize) {
          if (!this.parentGroup) {
            return {
              width: texts.reduce((acc, cur) => Math.max(cur.length, acc), 0) * fontSize,
              height: fontSize
            };
          }
          const dimension = {
            width: 0,
            height: 0
          };
          const elem = this.parentGroup.append("g").attr("visibility", "hidden").attr("font-size", fontSize);
          for (const t4 of texts) {
            const bbox = computeDimensionOfText(elem, 1, t4);
            const width3 = bbox ? bbox.width : t4.length * fontSize;
            const height2 = bbox ? bbox.height : fontSize;
            dimension.width = Math.max(dimension.width, width3);
            dimension.height = Math.max(dimension.height, height2);
          }
          elem.remove();
          return dimension;
        }
      };
    }
  });

  // src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts
  var BAR_WIDTH_TO_TICK_WIDTH_RATIO, MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL, BaseAxis;
  var init_baseAxis = __esm({
    "src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts"() {
      "use strict";
      BAR_WIDTH_TO_TICK_WIDTH_RATIO = 0.7;
      MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL = 0.2;
      BaseAxis = class {
        constructor(axisConfig, title2, textDimensionCalculator, axisThemeConfig) {
          this.axisConfig = axisConfig;
          this.title = title2;
          this.textDimensionCalculator = textDimensionCalculator;
          this.axisThemeConfig = axisThemeConfig;
          this.boundingRect = { x: 0, y: 0, width: 0, height: 0 };
          this.axisPosition = "left";
          this.showTitle = false;
          this.showLabel = false;
          this.showTick = false;
          this.showAxisLine = false;
          this.outerPadding = 0;
          this.titleTextHeight = 0;
          this.labelTextHeight = 0;
          this.normalizedLabelRotationInRad = 0;
          this.range = [0, 10];
          this.boundingRect = { x: 0, y: 0, width: 0, height: 0 };
          this.axisPosition = "left";
          this.normalizedLabelRotationInRad = this.axisConfig.labelRotation >= -90 && this.axisConfig.labelRotation <= 90 ? this.axisConfig.labelRotation * Math.PI / 180 : 0;
        }
        static {
          __name(this, "BaseAxis");
        }
        setRange(range3) {
          this.range = range3;
          if (this.axisPosition === "left" || this.axisPosition === "right") {
            this.boundingRect.height = range3[1] - range3[0];
          } else {
            this.boundingRect.width = range3[1] - range3[0];
          }
          this.recalculateScale();
        }
        getRange() {
          return [this.range[0] + this.outerPadding, this.range[1] - this.outerPadding];
        }
        setAxisPosition(axisPosition) {
          this.axisPosition = axisPosition;
          this.setRange(this.range);
        }
        getTickDistance() {
          const range3 = this.getRange();
          return Math.abs(range3[0] - range3[1]) / this.getTickValues().length;
        }
        getAxisOuterPadding() {
          return this.outerPadding;
        }
        getLabelDimension() {
          return this.textDimensionCalculator.getMaxDimension(
            this.getTickValues().map((tick) => tick.toString()),
            this.axisConfig.labelFontSize
          );
        }
        recalculateOuterPaddingToDrawBar() {
          if (BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() > this.outerPadding * 2) {
            this.outerPadding = Math.floor(BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() / 2);
          }
          this.recalculateScale();
        }
        calculateSpaceIfDrawnHorizontally(availableSpace) {
          let availableHeight = availableSpace.height;
          if (this.axisConfig.showAxisLine && availableHeight > this.axisConfig.axisLineWidth) {
            availableHeight -= this.axisConfig.axisLineWidth;
            this.showAxisLine = true;
          }
          if (this.axisConfig.showLabel) {
            const spaceRequired = this.getLabelDimension();
            const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.width;
            this.outerPadding = Math.min(spaceRequired.width / 2, maxPadding);
            let heightRequired = spaceRequired.height;
            if (this.axisPosition === "bottom" && this.normalizedLabelRotationInRad !== 0) {
              heightRequired = Math.max(
                heightRequired,
                Math.abs(Math.sin(this.normalizedLabelRotationInRad) * spaceRequired.width) + Math.abs(Math.cos(this.normalizedLabelRotationInRad) * spaceRequired.height)
              );
            }
            heightRequired += this.axisConfig.labelPadding * 2;
            this.labelTextHeight = spaceRequired.height;
            if (heightRequired <= availableHeight) {
              availableHeight -= heightRequired;
              this.showLabel = true;
            }
          }
          if (this.axisConfig.showTick && availableHeight >= this.axisConfig.tickLength) {
            this.showTick = true;
            availableHeight -= this.axisConfig.tickLength;
          }
          if (this.axisConfig.showTitle && this.title) {
            const spaceRequired = this.textDimensionCalculator.getMaxDimension(
              [this.title],
              this.axisConfig.titleFontSize
            );
            const heightRequired = spaceRequired.height + this.axisConfig.titlePadding * 2;
            this.titleTextHeight = spaceRequired.height;
            if (heightRequired <= availableHeight) {
              availableHeight -= heightRequired;
              this.showTitle = true;
            }
          }
          this.boundingRect.width = availableSpace.width;
          this.boundingRect.height = availableSpace.height - availableHeight;
        }
        calculateSpaceIfDrawnVertical(availableSpace) {
          let availableWidth = availableSpace.width;
          if (this.axisConfig.showAxisLine && availableWidth > this.axisConfig.axisLineWidth) {
            availableWidth -= this.axisConfig.axisLineWidth;
            this.showAxisLine = true;
          }
          if (this.axisConfig.showLabel) {
            const spaceRequired = this.getLabelDimension();
            const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.height;
            this.outerPadding = Math.min(spaceRequired.height / 2, maxPadding);
            const widthRequired = spaceRequired.width + this.axisConfig.labelPadding * 2;
            if (widthRequired <= availableWidth) {
              availableWidth -= widthRequired;
              this.showLabel = true;
            }
          }
          if (this.axisConfig.showTick && availableWidth >= this.axisConfig.tickLength) {
            this.showTick = true;
            availableWidth -= this.axisConfig.tickLength;
          }
          if (this.axisConfig.showTitle && this.title) {
            const spaceRequired = this.textDimensionCalculator.getMaxDimension(
              [this.title],
              this.axisConfig.titleFontSize
            );
            const widthRequired = spaceRequired.height + this.axisConfig.titlePadding * 2;
            this.titleTextHeight = spaceRequired.height;
            if (widthRequired <= availableWidth) {
              availableWidth -= widthRequired;
              this.showTitle = true;
            }
          }
          this.boundingRect.width = availableSpace.width - availableWidth;
          this.boundingRect.height = availableSpace.height;
        }
        calculateSpace(availableSpace) {
          if (this.axisPosition === "left" || this.axisPosition === "right") {
            this.calculateSpaceIfDrawnVertical(availableSpace);
          } else {
            this.calculateSpaceIfDrawnHorizontally(availableSpace);
          }
          this.recalculateScale();
          return {
            width: this.boundingRect.width,
            height: this.boundingRect.height
          };
        }
        setBoundingBoxXY(point8) {
          this.boundingRect.x = point8.x;
          this.boundingRect.y = point8.y;
        }
        calculateOffsetByRotation(reference) {
          const rotation = this.normalizedLabelRotationInRad;
          if (rotation === 0) {
            return 0;
          }
          return Math.sin(rotation) * this.getLabelDimension()[reference] / 2;
        }
        getDrawableElementsForLeftAxis() {
          const drawableElement = [];
          if (this.showAxisLine) {
            const x5 = this.boundingRect.x + this.boundingRect.width - this.axisConfig.axisLineWidth / 2;
            drawableElement.push({
              type: "path",
              groupTexts: ["left-axis", "axisl-line"],
              data: [
                {
                  path: `M ${x5},${this.boundingRect.y} L ${x5},${this.boundingRect.y + this.boundingRect.height} `,
                  strokeFill: this.axisThemeConfig.axisLineColor,
                  strokeWidth: this.axisConfig.axisLineWidth
                }
              ]
            });
          }
          if (this.showLabel) {
            drawableElement.push({
              type: "text",
              groupTexts: ["left-axis", "label"],
              data: this.getTickValues().map((tick) => ({
                text: tick.toString(),
                x: this.boundingRect.x + this.boundingRect.width - (this.showLabel ? this.axisConfig.labelPadding : 0) - (this.showTick ? this.axisConfig.tickLength : 0) - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0),
                y: this.getScaleValue(tick),
                fill: this.axisThemeConfig.labelColor,
                fontSize: this.axisConfig.labelFontSize,
                rotation: 0,
                verticalPos: "middle",
                horizontalPos: "right"
              }))
            });
          }
          if (this.showTick) {
            const x5 = this.boundingRect.x + this.boundingRect.width - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0);
            drawableElement.push({
              type: "path",
              groupTexts: ["left-axis", "ticks"],
              data: this.getTickValues().map((tick) => ({
                path: `M ${x5},${this.getScaleValue(tick)} L ${x5 - this.axisConfig.tickLength},${this.getScaleValue(tick)}`,
                strokeFill: this.axisThemeConfig.tickColor,
                strokeWidth: this.axisConfig.tickWidth
              }))
            });
          }
          if (this.showTitle) {
            drawableElement.push({
              type: "text",
              groupTexts: ["left-axis", "title"],
              data: [
                {
                  text: this.title,
                  x: this.boundingRect.x + this.axisConfig.titlePadding,
                  y: this.boundingRect.y + this.boundingRect.height / 2,
                  fill: this.axisThemeConfig.titleColor,
                  fontSize: this.axisConfig.titleFontSize,
                  rotation: 270,
                  verticalPos: "top",
                  horizontalPos: "center"
                }
              ]
            });
          }
          return drawableElement;
        }
        getDrawableElementsForBottomAxis() {
          const drawableElement = [];
          if (this.showAxisLine) {
            const y6 = this.boundingRect.y + this.axisConfig.axisLineWidth / 2;
            drawableElement.push({
              type: "path",
              groupTexts: ["bottom-axis", "axis-line"],
              data: [
                {
                  path: `M ${this.boundingRect.x},${y6} L ${this.boundingRect.x + this.boundingRect.width},${y6}`,
                  strokeFill: this.axisThemeConfig.axisLineColor,
                  strokeWidth: this.axisConfig.axisLineWidth
                }
              ]
            });
          }
          if (this.showLabel) {
            drawableElement.push({
              type: "text",
              groupTexts: ["bottom-axis", "label"],
              data: this.getTickValues().map((tick) => ({
                text: tick.toString(),
                x: this.getScaleValue(tick) + this.calculateOffsetByRotation("height"),
                y: this.boundingRect.y + this.axisConfig.labelPadding + (this.showTick ? this.axisConfig.tickLength : 0) + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0) + Math.abs(this.calculateOffsetByRotation("width")),
                fill: this.axisThemeConfig.labelColor,
                fontSize: this.axisConfig.labelFontSize,
                rotation: this.normalizedLabelRotationInRad * 180 / Math.PI,
                verticalPos: "top",
                horizontalPos: "center"
              }))
            });
          }
          if (this.showTick) {
            const y6 = this.boundingRect.y + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0);
            drawableElement.push({
              type: "path",
              groupTexts: ["bottom-axis", "ticks"],
              data: this.getTickValues().map((tick) => ({
                path: `M ${this.getScaleValue(tick)},${y6} L ${this.getScaleValue(tick)},${y6 + this.axisConfig.tickLength}`,
                strokeFill: this.axisThemeConfig.tickColor,
                strokeWidth: this.axisConfig.tickWidth
              }))
            });
          }
          if (this.showTitle) {
            drawableElement.push({
              type: "text",
              groupTexts: ["bottom-axis", "title"],
              data: [
                {
                  text: this.title,
                  x: this.range[0] + (this.range[1] - this.range[0]) / 2,
                  y: this.boundingRect.y + this.boundingRect.height - this.axisConfig.titlePadding - this.titleTextHeight,
                  fill: this.axisThemeConfig.titleColor,
                  fontSize: this.axisConfig.titleFontSize,
                  rotation: 0,
                  verticalPos: "top",
                  horizontalPos: "center"
                }
              ]
            });
          }
          return drawableElement;
        }
        getDrawableElementsForTopAxis() {
          const drawableElement = [];
          if (this.showAxisLine) {
            const y6 = this.boundingRect.y + this.boundingRect.height - this.axisConfig.axisLineWidth / 2;
            drawableElement.push({
              type: "path",
              groupTexts: ["top-axis", "axis-line"],
              data: [
                {
                  path: `M ${this.boundingRect.x},${y6} L ${this.boundingRect.x + this.boundingRect.width},${y6}`,
                  strokeFill: this.axisThemeConfig.axisLineColor,
                  strokeWidth: this.axisConfig.axisLineWidth
                }
              ]
            });
          }
          if (this.showLabel) {
            drawableElement.push({
              type: "text",
              groupTexts: ["top-axis", "label"],
              data: this.getTickValues().map((tick) => ({
                text: tick.toString(),
                x: this.getScaleValue(tick),
                y: this.boundingRect.y + (this.showTitle ? this.titleTextHeight + this.axisConfig.titlePadding * 2 : 0) + this.axisConfig.labelPadding,
                fill: this.axisThemeConfig.labelColor,
                fontSize: this.axisConfig.labelFontSize,
                rotation: 0,
                verticalPos: "top",
                horizontalPos: "center"
              }))
            });
          }
          if (this.showTick) {
            const y6 = this.boundingRect.y;
            drawableElement.push({
              type: "path",
              groupTexts: ["top-axis", "ticks"],
              data: this.getTickValues().map((tick) => ({
                path: `M ${this.getScaleValue(tick)},${y6 + this.boundingRect.height - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)} L ${this.getScaleValue(tick)},${y6 + this.boundingRect.height - this.axisConfig.tickLength - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)}`,
                strokeFill: this.axisThemeConfig.tickColor,
                strokeWidth: this.axisConfig.tickWidth
              }))
            });
          }
          if (this.showTitle) {
            drawableElement.push({
              type: "text",
              groupTexts: ["top-axis", "title"],
              data: [
                {
                  text: this.title,
                  x: this.boundingRect.x + this.boundingRect.width / 2,
                  y: this.boundingRect.y + this.axisConfig.titlePadding,
                  fill: this.axisThemeConfig.titleColor,
                  fontSize: this.axisConfig.titleFontSize,
                  rotation: 0,
                  verticalPos: "top",
                  horizontalPos: "center"
                }
              ]
            });
          }
          return drawableElement;
        }
        getDrawableElements() {
          if (this.axisPosition === "left") {
            return this.getDrawableElementsForLeftAxis();
          }
          if (this.axisPosition === "right") {
            throw Error("Drawing of right axis is not implemented");
          }
          if (this.axisPosition === "bottom") {
            return this.getDrawableElementsForBottomAxis();
          }
          if (this.axisPosition === "top") {
            return this.getDrawableElementsForTopAxis();
          }
          return [];
        }
      };
    }
  });

  // src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts
  var BandAxis;
  var init_bandAxis = __esm({
    "src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts"() {
      "use strict";
      init_src32();
      init_logger();
      init_baseAxis();
      BandAxis = class extends BaseAxis {
        static {
          __name(this, "BandAxis");
        }
        constructor(axisConfig, axisThemeConfig, categories, title2, textDimensionCalculator) {
          super(axisConfig, title2, textDimensionCalculator, axisThemeConfig);
          this.categories = categories;
          this.scale = band().domain(this.categories).range(this.getRange());
        }
        setRange(range3) {
          super.setRange(range3);
        }
        recalculateScale() {
          this.scale = band().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(0.5);
          log.trace("BandAxis axis final categories, range: ", this.categories, this.getRange());
        }
        getTickValues() {
          return this.categories;
        }
        getScaleValue(value2) {
          return this.scale(value2) ?? this.getRange()[0];
        }
      };
    }
  });

  // src/diagrams/xychart/chartBuilder/components/axis/linearAxis.ts
  var LinearAxis;
  var init_linearAxis = __esm({
    "src/diagrams/xychart/chartBuilder/components/axis/linearAxis.ts"() {
      "use strict";
      init_src32();
      init_baseAxis();
      LinearAxis = class extends BaseAxis {
        static {
          __name(this, "LinearAxis");
        }
        constructor(axisConfig, axisThemeConfig, domain, title2, textDimensionCalculator) {
          super(axisConfig, title2, textDimensionCalculator, axisThemeConfig);
          this.domain = domain;
          this.scale = linear2().domain(this.domain).range(this.getRange());
        }
        getTickValues() {
          return this.scale.ticks();
        }
        recalculateScale() {
          const domain = [...this.domain];
          if (this.axisPosition === "left") {
            domain.reverse();
          }
          this.scale = linear2().domain(domain).range(this.getRange());
        }
        getScaleValue(value2) {
          return this.scale(value2);
        }
      };
    }
  });

  // src/diagrams/xychart/chartBuilder/components/axis/index.ts
  function getAxis(data6, axisConfig, axisThemeConfig, tmpSVGGroup2) {
    const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2);
    if (isBandAxisData(data6)) {
      return new BandAxis(
        axisConfig,
        axisThemeConfig,
        data6.categories,
        data6.title,
        textDimensionCalculator
      );
    }
    return new LinearAxis(
      axisConfig,
      axisThemeConfig,
      [data6.min, data6.max],
      data6.title,
      textDimensionCalculator
    );
  }
  var init_axis2 = __esm({
    "src/diagrams/xychart/chartBuilder/components/axis/index.ts"() {
      "use strict";
      init_interfaces();
      init_textDimensionCalculator();
      init_bandAxis();
      init_linearAxis();
      __name(getAxis, "getAxis");
    }
  });

  // src/diagrams/xychart/chartBuilder/components/chartTitle.ts
  function getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) {
    const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2);
    return new ChartTitle(textDimensionCalculator, chartConfig, chartData, chartThemeConfig);
  }
  var ChartTitle;
  var init_chartTitle = __esm({
    "src/diagrams/xychart/chartBuilder/components/chartTitle.ts"() {
      "use strict";
      init_textDimensionCalculator();
      ChartTitle = class {
        constructor(textDimensionCalculator, chartConfig, chartData, chartThemeConfig) {
          this.textDimensionCalculator = textDimensionCalculator;
          this.chartConfig = chartConfig;
          this.chartData = chartData;
          this.chartThemeConfig = chartThemeConfig;
          this.boundingRect = {
            x: 0,
            y: 0,
            width: 0,
            height: 0
          };
          this.showChartTitle = false;
        }
        static {
          __name(this, "ChartTitle");
        }
        setBoundingBoxXY(point8) {
          this.boundingRect.x = point8.x;
          this.boundingRect.y = point8.y;
        }
        calculateSpace(availableSpace) {
          const titleDimension = this.textDimensionCalculator.getMaxDimension(
            [this.chartData.title],
            this.chartConfig.titleFontSize
          );
          const widthRequired = Math.max(titleDimension.width, availableSpace.width);
          const heightRequired = titleDimension.height + 2 * this.chartConfig.titlePadding;
          if (titleDimension.width <= widthRequired && titleDimension.height <= heightRequired && this.chartConfig.showTitle && this.chartData.title) {
            this.boundingRect.width = widthRequired;
            this.boundingRect.height = heightRequired;
            this.showChartTitle = true;
          }
          return {
            width: this.boundingRect.width,
            height: this.boundingRect.height
          };
        }
        getDrawableElements() {
          const drawableElem = [];
          if (this.showChartTitle) {
            drawableElem.push({
              groupTexts: ["chart-title"],
              type: "text",
              data: [
                {
                  fontSize: this.chartConfig.titleFontSize,
                  text: this.chartData.title,
                  verticalPos: "middle",
                  horizontalPos: "center",
                  x: this.boundingRect.x + this.boundingRect.width / 2,
                  y: this.boundingRect.y + this.boundingRect.height / 2,
                  fill: this.chartThemeConfig.titleColor,
                  rotation: 0
                }
              ]
            });
          }
          return drawableElem;
        }
      };
      __name(getChartTitleComponent, "getChartTitleComponent");
    }
  });

  // src/diagrams/xychart/chartBuilder/components/plot/linePlot.ts
  var LinePlot;
  var init_linePlot = __esm({
    "src/diagrams/xychart/chartBuilder/components/plot/linePlot.ts"() {
      "use strict";
      init_src32();
      LinePlot = class {
        constructor(plotData, xAxis, yAxis, orientation, plotIndex2) {
          this.plotData = plotData;
          this.xAxis = xAxis;
          this.yAxis = yAxis;
          this.orientation = orientation;
          this.plotIndex = plotIndex2;
        }
        static {
          __name(this, "LinePlot");
        }
        getDrawableElement() {
          const finalData = this.plotData.data.map((d3) => [
            this.xAxis.getScaleValue(d3[0]),
            this.yAxis.getScaleValue(d3[1])
          ]);
          let path4;
          if (this.orientation === "horizontal") {
            path4 = line_default().y((d3) => d3[0]).x((d3) => d3[1])(finalData);
          } else {
            path4 = line_default().x((d3) => d3[0]).y((d3) => d3[1])(finalData);
          }
          if (!path4) {
            return [];
          }
          const elements2 = [
            {
              groupTexts: ["plot", `line-plot-${this.plotIndex}`],
              type: "path",
              data: [
                {
                  path: path4,
                  strokeFill: this.plotData.strokeFill,
                  strokeWidth: this.plotData.strokeWidth
                }
              ]
            }
          ];
          if (this.plotData.pointLabels && this.plotData.pointLabels.length > 0) {
            const labelOffset = 10;
            const fontSize = 12;
            const textData = [];
            for (const [i2, [px, py]] of finalData.entries()) {
              const label = this.plotData.pointLabels[i2];
              if (!label) {
                continue;
              }
              if (this.orientation === "horizontal") {
                textData.push({
                  x: py + labelOffset,
                  y: px,
                  text: label,
                  fill: this.plotData.strokeFill,
                  verticalPos: "middle",
                  horizontalPos: "left",
                  fontSize,
                  rotation: 0
                });
              } else {
                textData.push({
                  x: px,
                  y: py - labelOffset,
                  text: label,
                  fill: this.plotData.strokeFill,
                  verticalPos: "middle",
                  horizontalPos: "center",
                  fontSize,
                  rotation: 0
                });
              }
            }
            if (textData.length > 0) {
              elements2.push({
                groupTexts: ["plot", `line-plot-${this.plotIndex}`, "labels"],
                type: "text",
                data: textData
              });
            }
          }
          return elements2;
        }
      };
    }
  });

  // src/diagrams/xychart/chartBuilder/components/plot/barPlot.ts
  var BarPlot;
  var init_barPlot = __esm({
    "src/diagrams/xychart/chartBuilder/components/plot/barPlot.ts"() {
      "use strict";
      BarPlot = class {
        constructor(barData, boundingRect, xAxis, yAxis, orientation, plotIndex2) {
          this.barData = barData;
          this.boundingRect = boundingRect;
          this.xAxis = xAxis;
          this.yAxis = yAxis;
          this.orientation = orientation;
          this.plotIndex = plotIndex2;
        }
        static {
          __name(this, "BarPlot");
        }
        getDrawableElement() {
          const finalData = this.barData.data.map((d3) => [
            this.xAxis.getScaleValue(d3[0]),
            this.yAxis.getScaleValue(d3[1])
          ]);
          const barPaddingPercent = 0.05;
          const barWidth = Math.min(this.xAxis.getAxisOuterPadding() * 2, this.xAxis.getTickDistance()) * (1 - barPaddingPercent);
          const barWidthHalf = barWidth / 2;
          if (this.orientation === "horizontal") {
            return [
              {
                groupTexts: ["plot", `bar-plot-${this.plotIndex}`],
                type: "rect",
                data: finalData.map((data6) => ({
                  x: this.boundingRect.x,
                  y: data6[0] - barWidthHalf,
                  height: barWidth,
                  width: data6[1] - this.boundingRect.x,
                  fill: this.barData.fill,
                  strokeWidth: 0,
                  strokeFill: this.barData.fill
                }))
              }
            ];
          }
          return [
            {
              groupTexts: ["plot", `bar-plot-${this.plotIndex}`],
              type: "rect",
              data: finalData.map((data6) => ({
                x: data6[0] - barWidthHalf,
                y: data6[1],
                width: barWidth,
                height: this.boundingRect.y + this.boundingRect.height - data6[1],
                fill: this.barData.fill,
                strokeWidth: 0,
                strokeFill: this.barData.fill
              }))
            }
          ];
        }
      };
    }
  });

  // src/diagrams/xychart/chartBuilder/components/plot/index.ts
  function getPlotComponent(chartConfig, chartData, chartThemeConfig) {
    return new BasePlot(chartConfig, chartData, chartThemeConfig);
  }
  var BasePlot;
  var init_plot = __esm({
    "src/diagrams/xychart/chartBuilder/components/plot/index.ts"() {
      "use strict";
      init_linePlot();
      init_barPlot();
      BasePlot = class {
        constructor(chartConfig, chartData, chartThemeConfig) {
          this.chartConfig = chartConfig;
          this.chartData = chartData;
          this.chartThemeConfig = chartThemeConfig;
          this.boundingRect = {
            x: 0,
            y: 0,
            width: 0,
            height: 0
          };
        }
        static {
          __name(this, "BasePlot");
        }
        setAxes(xAxis, yAxis) {
          this.xAxis = xAxis;
          this.yAxis = yAxis;
        }
        setBoundingBoxXY(point8) {
          this.boundingRect.x = point8.x;
          this.boundingRect.y = point8.y;
        }
        calculateSpace(availableSpace) {
          this.boundingRect.width = availableSpace.width;
          this.boundingRect.height = availableSpace.height;
          return {
            width: this.boundingRect.width,
            height: this.boundingRect.height
          };
        }
        getDrawableElements() {
          if (!(this.xAxis && this.yAxis)) {
            throw Error("Axes must be passed to render Plots");
          }
          const drawableElem = [];
          for (const [i2, plot] of this.chartData.plots.entries()) {
            switch (plot.type) {
              case "line":
                {
                  const linePlot = new LinePlot(
                    plot,
                    this.xAxis,
                    this.yAxis,
                    this.chartConfig.chartOrientation,
                    i2
                  );
                  drawableElem.push(...linePlot.getDrawableElement());
                }
                break;
              case "bar":
                {
                  const barPlot = new BarPlot(
                    plot,
                    this.boundingRect,
                    this.xAxis,
                    this.yAxis,
                    this.chartConfig.chartOrientation,
                    i2
                  );
                  drawableElem.push(...barPlot.getDrawableElement());
                }
                break;
            }
          }
          return drawableElem;
        }
      };
      __name(getPlotComponent, "getPlotComponent");
    }
  });

  // src/diagrams/xychart/chartBuilder/orchestrator.ts
  var Orchestrator;
  var init_orchestrator = __esm({
    "src/diagrams/xychart/chartBuilder/orchestrator.ts"() {
      "use strict";
      init_axis2();
      init_chartTitle();
      init_plot();
      init_interfaces();
      Orchestrator = class {
        constructor(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) {
          this.chartConfig = chartConfig;
          this.chartData = chartData;
          this.componentStore = {
            title: getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2),
            plot: getPlotComponent(chartConfig, chartData, chartThemeConfig),
            xAxis: getAxis(
              chartData.xAxis,
              chartConfig.xAxis,
              {
                titleColor: chartThemeConfig.xAxisTitleColor,
                labelColor: chartThemeConfig.xAxisLabelColor,
                tickColor: chartThemeConfig.xAxisTickColor,
                axisLineColor: chartThemeConfig.xAxisLineColor
              },
              tmpSVGGroup2
            ),
            yAxis: getAxis(
              chartData.yAxis,
              chartConfig.yAxis,
              {
                titleColor: chartThemeConfig.yAxisTitleColor,
                labelColor: chartThemeConfig.yAxisLabelColor,
                tickColor: chartThemeConfig.yAxisTickColor,
                axisLineColor: chartThemeConfig.yAxisLineColor
              },
              tmpSVGGroup2
            )
          };
        }
        static {
          __name(this, "Orchestrator");
        }
        calculateVerticalSpace() {
          let availableWidth = this.chartConfig.width;
          let availableHeight = this.chartConfig.height;
          let plotX = 0;
          let plotY = 0;
          let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100);
          let chartHeight = Math.floor(
            availableHeight * this.chartConfig.plotReservedSpacePercent / 100
          );
          let spaceUsed = this.componentStore.plot.calculateSpace({
            width: chartWidth,
            height: chartHeight
          });
          availableWidth -= spaceUsed.width;
          availableHeight -= spaceUsed.height;
          spaceUsed = this.componentStore.title.calculateSpace({
            width: this.chartConfig.width,
            height: availableHeight
          });
          plotY = spaceUsed.height;
          availableHeight -= spaceUsed.height;
          this.componentStore.xAxis.setAxisPosition("bottom");
          spaceUsed = this.componentStore.xAxis.calculateSpace({
            width: availableWidth,
            height: availableHeight
          });
          availableHeight -= spaceUsed.height;
          this.componentStore.yAxis.setAxisPosition("left");
          spaceUsed = this.componentStore.yAxis.calculateSpace({
            width: availableWidth,
            height: availableHeight
          });
          plotX = spaceUsed.width;
          availableWidth -= spaceUsed.width;
          if (availableWidth > 0) {
            chartWidth += availableWidth;
            availableWidth = 0;
          }
          if (availableHeight > 0) {
            chartHeight += availableHeight;
            availableHeight = 0;
          }
          this.componentStore.plot.calculateSpace({
            width: chartWidth,
            height: chartHeight
          });
          this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY });
          this.componentStore.xAxis.setRange([plotX, plotX + chartWidth]);
          this.componentStore.xAxis.setBoundingBoxXY({ x: plotX, y: plotY + chartHeight });
          this.componentStore.yAxis.setRange([plotY, plotY + chartHeight]);
          this.componentStore.yAxis.setBoundingBoxXY({ x: 0, y: plotY });
          if (this.chartData.plots.some((p3) => isBarPlot(p3))) {
            this.componentStore.xAxis.recalculateOuterPaddingToDrawBar();
          }
        }
        calculateHorizontalSpace() {
          let availableWidth = this.chartConfig.width;
          let availableHeight = this.chartConfig.height;
          let titleYEnd = 0;
          let plotX = 0;
          let plotY = 0;
          let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100);
          let chartHeight = Math.floor(
            availableHeight * this.chartConfig.plotReservedSpacePercent / 100
          );
          let spaceUsed = this.componentStore.plot.calculateSpace({
            width: chartWidth,
            height: chartHeight
          });
          availableWidth -= spaceUsed.width;
          availableHeight -= spaceUsed.height;
          spaceUsed = this.componentStore.title.calculateSpace({
            width: this.chartConfig.width,
            height: availableHeight
          });
          titleYEnd = spaceUsed.height;
          availableHeight -= spaceUsed.height;
          this.componentStore.xAxis.setAxisPosition("left");
          spaceUsed = this.componentStore.xAxis.calculateSpace({
            width: availableWidth,
            height: availableHeight
          });
          availableWidth -= spaceUsed.width;
          plotX = spaceUsed.width;
          this.componentStore.yAxis.setAxisPosition("top");
          spaceUsed = this.componentStore.yAxis.calculateSpace({
            width: availableWidth,
            height: availableHeight
          });
          availableHeight -= spaceUsed.height;
          plotY = titleYEnd + spaceUsed.height;
          if (availableWidth > 0) {
            chartWidth += availableWidth;
            availableWidth = 0;
          }
          if (availableHeight > 0) {
            chartHeight += availableHeight;
            availableHeight = 0;
          }
          this.componentStore.plot.calculateSpace({
            width: chartWidth,
            height: chartHeight
          });
          this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY });
          this.componentStore.yAxis.setRange([plotX, plotX + chartWidth]);
          this.componentStore.yAxis.setBoundingBoxXY({ x: plotX, y: titleYEnd });
          this.componentStore.xAxis.setRange([plotY, plotY + chartHeight]);
          this.componentStore.xAxis.setBoundingBoxXY({ x: 0, y: plotY });
          if (this.chartData.plots.some((p3) => isBarPlot(p3))) {
            this.componentStore.xAxis.recalculateOuterPaddingToDrawBar();
          }
        }
        calculateSpace() {
          if (this.chartConfig.chartOrientation === "horizontal") {
            this.calculateHorizontalSpace();
          } else {
            this.calculateVerticalSpace();
          }
        }
        getDrawableElement() {
          this.calculateSpace();
          const drawableElem = [];
          this.componentStore.plot.setAxes(this.componentStore.xAxis, this.componentStore.yAxis);
          for (const component2 of Object.values(this.componentStore)) {
            drawableElem.push(...component2.getDrawableElements());
          }
          return drawableElem;
        }
      };
    }
  });

  // src/diagrams/xychart/chartBuilder/index.ts
  var XYChartBuilder;
  var init_chartBuilder = __esm({
    "src/diagrams/xychart/chartBuilder/index.ts"() {
      "use strict";
      init_orchestrator();
      XYChartBuilder = class {
        static {
          __name(this, "XYChartBuilder");
        }
        static build(config3, chartData, chartThemeConfig, tmpSVGGroup2) {
          const orchestrator = new Orchestrator(config3, chartData, chartThemeConfig, tmpSVGGroup2);
          return orchestrator.getDrawableElement();
        }
      };
    }
  });

  // src/diagrams/xychart/xychartDb.ts
  function getChartDefaultThemeConfig() {
    const defaultThemeVariables2 = getThemeVariables3();
    const config3 = getConfig();
    return cleanAndMerge(defaultThemeVariables2.xyChart, config3.themeVariables.xyChart);
  }
  function getChartDefaultConfig() {
    const config3 = getConfig();
    return cleanAndMerge(
      defaultConfig_default.xyChart,
      config3.xyChart
    );
  }
  function getChartDefaultData() {
    return {
      yAxis: {
        type: "linear",
        title: "",
        min: Infinity,
        max: -Infinity
      },
      xAxis: {
        type: "band",
        title: "",
        categories: []
      },
      title: "",
      plots: []
    };
  }
  function textSanitizer2(text4) {
    const config3 = getConfig();
    return sanitizeText(text4.trim(), config3);
  }
  function setTmpSVGG(SVGG) {
    tmpSVGGroup = SVGG;
  }
  function setOrientation(orientation) {
    if (orientation === "horizontal") {
      xyChartConfig.chartOrientation = "horizontal";
    } else {
      xyChartConfig.chartOrientation = "vertical";
    }
  }
  function setXAxisTitle(title2) {
    xyChartData.xAxis.title = textSanitizer2(title2.text);
  }
  function setXAxisRangeData(min10, max10) {
    xyChartData.xAxis = { type: "linear", title: xyChartData.xAxis.title, min: min10, max: max10 };
    hasSetXAxis = true;
  }
  function setXAxisBand(categories) {
    xyChartData.xAxis = {
      type: "band",
      title: xyChartData.xAxis.title,
      categories: categories.map((c3) => textSanitizer2(c3.text))
    };
    hasSetXAxis = true;
  }
  function setYAxisTitle(title2) {
    xyChartData.yAxis.title = textSanitizer2(title2.text);
  }
  function setYAxisRangeData(min10, max10) {
    xyChartData.yAxis = { type: "linear", title: xyChartData.yAxis.title, min: min10, max: max10 };
    hasSetYAxis = true;
  }
  function setYAxisRangeFromPlotData(data6) {
    const minValue = Math.min(...data6);
    const maxValue = Math.max(...data6);
    const prevMinValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.min : Infinity;
    const prevMaxValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.max : -Infinity;
    xyChartData.yAxis = {
      type: "linear",
      title: xyChartData.yAxis.title,
      min: Math.min(prevMinValue, minValue),
      max: Math.max(prevMaxValue, maxValue)
    };
  }
  function transformDataWithoutCategory(data6) {
    let retData = [];
    if (data6.length === 0) {
      return retData;
    }
    if (!hasSetXAxis) {
      const prevMinValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.min : Infinity;
      const prevMaxValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.max : -Infinity;
      setXAxisRangeData(Math.min(prevMinValue, 1), Math.max(prevMaxValue, data6.length));
    }
    if (isBandAxisData(xyChartData.xAxis) && data6.length > xyChartData.xAxis.categories.length) {
      data6 = data6.slice(0, xyChartData.xAxis.categories.length);
    }
    if (!hasSetYAxis) {
      setYAxisRangeFromPlotData(data6);
    }
    if (isBandAxisData(xyChartData.xAxis)) {
      retData = xyChartData.xAxis.categories.map((c3, i2) => [c3, data6[i2]]);
    }
    if (isLinearAxisData(xyChartData.xAxis)) {
      const min10 = xyChartData.xAxis.min;
      const max10 = xyChartData.xAxis.max;
      if (data6.length === 1) {
        retData = [[`${min10}`, data6[0]]];
      } else {
        const step3 = (max10 - min10) / (data6.length - 1);
        retData = data6.map((datum2, index) => [`${min10 + index * step3}`, datum2]);
      }
    }
    return retData;
  }
  function getPlotColorFromPalette(plotIndex2) {
    return plotColorPalette[plotIndex2 === 0 ? 0 : plotIndex2 % plotColorPalette.length];
  }
  function setLineData(title2, data6) {
    const values3 = data6.map((d3) => d3.value);
    const labels = data6.map((d3) => d3.label ? textSanitizer2(d3.label) : "");
    const plotData = transformDataWithoutCategory(values3);
    const hasAnyLabel = labels.some((l4) => l4 !== "");
    xyChartData.plots.push({
      type: "line",
      strokeFill: getPlotColorFromPalette(plotIndex),
      strokeWidth: 2,
      data: plotData,
      ...hasAnyLabel ? { pointLabels: labels } : {}
    });
    plotIndex++;
  }
  function setBarData(title2, data6) {
    const values3 = data6.map((d3) => d3.value);
    const plotData = transformDataWithoutCategory(values3);
    xyChartData.plots.push({
      type: "bar",
      fill: getPlotColorFromPalette(plotIndex),
      data: plotData
    });
    plotIndex++;
  }
  function getDrawableElem() {
    if (xyChartData.plots.length === 0) {
      throw Error("No Plot to render, please provide a plot with some data");
    }
    xyChartData.title = getDiagramTitle();
    return XYChartBuilder.build(xyChartConfig, xyChartData, xyChartThemeConfig, tmpSVGGroup);
  }
  function getChartThemeConfig() {
    return xyChartThemeConfig;
  }
  function getChartConfig() {
    return xyChartConfig;
  }
  function getXYChartData() {
    return xyChartData;
  }
  var plotIndex, tmpSVGGroup, xyChartConfig, xyChartThemeConfig, xyChartData, plotColorPalette, hasSetXAxis, hasSetYAxis, clear12, xychartDb_default;
  var init_xychartDb = __esm({
    "src/diagrams/xychart/xychartDb.ts"() {
      "use strict";
      init_config();
      init_defaultConfig();
      init_theme_default();
      init_utils2();
      init_common();
      init_commonDb();
      init_chartBuilder();
      init_interfaces();
      plotIndex = 0;
      xyChartConfig = getChartDefaultConfig();
      xyChartThemeConfig = getChartDefaultThemeConfig();
      xyChartData = getChartDefaultData();
      plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color2) => color2.trim());
      hasSetXAxis = false;
      hasSetYAxis = false;
      __name(getChartDefaultThemeConfig, "getChartDefaultThemeConfig");
      __name(getChartDefaultConfig, "getChartDefaultConfig");
      __name(getChartDefaultData, "getChartDefaultData");
      __name(textSanitizer2, "textSanitizer");
      __name(setTmpSVGG, "setTmpSVGG");
      __name(setOrientation, "setOrientation");
      __name(setXAxisTitle, "setXAxisTitle");
      __name(setXAxisRangeData, "setXAxisRangeData");
      __name(setXAxisBand, "setXAxisBand");
      __name(setYAxisTitle, "setYAxisTitle");
      __name(setYAxisRangeData, "setYAxisRangeData");
      __name(setYAxisRangeFromPlotData, "setYAxisRangeFromPlotData");
      __name(transformDataWithoutCategory, "transformDataWithoutCategory");
      __name(getPlotColorFromPalette, "getPlotColorFromPalette");
      __name(setLineData, "setLineData");
      __name(setBarData, "setBarData");
      __name(getDrawableElem, "getDrawableElem");
      __name(getChartThemeConfig, "getChartThemeConfig");
      __name(getChartConfig, "getChartConfig");
      __name(getXYChartData, "getXYChartData");
      clear12 = /* @__PURE__ */ __name(function() {
        clear();
        plotIndex = 0;
        xyChartConfig = getChartDefaultConfig();
        xyChartData = getChartDefaultData();
        xyChartThemeConfig = getChartDefaultThemeConfig();
        plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color2) => color2.trim());
        hasSetXAxis = false;
        hasSetYAxis = false;
      }, "clear");
      xychartDb_default = {
        getDrawableElem,
        clear: clear12,
        setAccTitle,
        getAccTitle,
        setDiagramTitle,
        getDiagramTitle,
        getAccDescription,
        setAccDescription,
        setOrientation,
        setXAxisTitle,
        setXAxisRangeData,
        setXAxisBand,
        setYAxisTitle,
        setYAxisRangeData,
        setLineData,
        setBarData,
        setTmpSVGG,
        getChartThemeConfig,
        getChartConfig,
        getXYChartData
      };
    }
  });

  // src/diagrams/xychart/xychartRenderer.ts
  var draw9, xychartRenderer_default;
  var init_xychartRenderer = __esm({
    "src/diagrams/xychart/xychartRenderer.ts"() {
      "use strict";
      init_logger();
      init_selectSvgElement();
      init_setupGraphViewbox();
      draw9 = /* @__PURE__ */ __name((txt, id41, _version, diagObj) => {
        const db12 = diagObj.db;
        const themeConfig = db12.getChartThemeConfig();
        const chartConfig = db12.getChartConfig();
        const labelData = db12.getXYChartData().plots[0].data.map((data6) => data6[1]);
        function getDominantBaseLine(horizontalPos) {
          return horizontalPos === "top" ? "text-before-edge" : "middle";
        }
        __name(getDominantBaseLine, "getDominantBaseLine");
        function getTextAnchor(verticalPos) {
          return verticalPos === "left" ? "start" : verticalPos === "right" ? "end" : "middle";
        }
        __name(getTextAnchor, "getTextAnchor");
        function getTextTransformation(data6) {
          return `translate(${data6.x}, ${data6.y}) rotate(${data6.rotation || 0})`;
        }
        __name(getTextTransformation, "getTextTransformation");
        log.debug("Rendering xychart chart\n" + txt);
        const svg2 = selectSvgElement(id41);
        const group2 = svg2.append("g").attr("class", "main");
        const background = group2.append("rect").attr("width", chartConfig.width).attr("height", chartConfig.height).attr("class", "background");
        configureSvgSize(svg2, chartConfig.height, chartConfig.width, true);
        svg2.attr("viewBox", `0 0 ${chartConfig.width} ${chartConfig.height}`);
        background.attr("fill", themeConfig.backgroundColor);
        db12.setTmpSVGG(svg2.append("g").attr("class", "mermaid-tmp-group"));
        const shapes4 = db12.getDrawableElem();
        const groups = {};
        function getGroup(gList) {
          let elem = group2;
          let prefix = "";
          for (const [i2] of gList.entries()) {
            let parent4 = group2;
            if (i2 > 0 && groups[prefix]) {
              parent4 = groups[prefix];
            }
            prefix += gList[i2];
            elem = groups[prefix];
            if (!elem) {
              elem = groups[prefix] = parent4.append("g").attr("class", gList[i2]);
            }
          }
          return elem;
        }
        __name(getGroup, "getGroup");
        for (const shape of shapes4) {
          if (shape.data.length === 0) {
            continue;
          }
          const shapeGroup = getGroup(shape.groupTexts);
          switch (shape.type) {
            case "rect":
              shapeGroup.selectAll("rect").data(shape.data).enter().append("rect").attr("x", (data6) => data6.x).attr("y", (data6) => data6.y).attr("width", (data6) => data6.width).attr("height", (data6) => data6.height).attr("fill", (data6) => data6.fill).attr("stroke", (data6) => data6.strokeFill).attr("stroke-width", (data6) => data6.strokeWidth);
              if (chartConfig.showDataLabel) {
                const showDataLabelOutsideBar = chartConfig.showDataLabelOutsideBar;
                if (chartConfig.chartOrientation === "horizontal") {
                  let fitsHorizontally2 = function(item, fontSize) {
                    const { data: data6, label } = item;
                    const textWidth = fontSize * label.length * charWidthFactor;
                    return textWidth <= data6.width - rightMargin;
                  };
                  var fitsHorizontally = fitsHorizontally2;
                  __name(fitsHorizontally2, "fitsHorizontally");
                  const charWidthFactor = 0.7;
                  const rightMargin = 10;
                  const validItems = shape.data.map((d3, i2) => ({ data: d3, label: labelData[i2].toString() })).filter((item) => item.data.width > 0 && item.data.height > 0);
                  const candidateFontSizes = validItems.map((item) => {
                    const { data: data6 } = item;
                    let fontSize = data6.height * 0.7;
                    while (!fitsHorizontally2(item, fontSize) && fontSize > 0) {
                      fontSize -= 1;
                    }
                    return fontSize;
                  });
                  const uniformFontSize = Math.floor(Math.min(...candidateFontSizes));
                  const determineLabelXPosition = /* @__PURE__ */ __name((item) => {
                    if (showDataLabelOutsideBar) {
                      return item.data.x + item.data.width + rightMargin;
                    } else {
                      return item.data.x + item.data.width - rightMargin;
                    }
                  }, "determineLabelXPosition");
                  shapeGroup.selectAll("text").data(validItems).enter().append("text").attr("x", determineLabelXPosition).attr("y", (item) => item.data.y + item.data.height / 2).attr("text-anchor", showDataLabelOutsideBar ? "start" : "end").attr("dominant-baseline", "middle").attr("fill", themeConfig.dataLabelColor).attr("font-size", `${uniformFontSize}px`).text((item) => item.label);
                } else {
                  let fitsInBar2 = function(item, fontSize, yOffset2) {
                    const { data: data6, label } = item;
                    const charWidthFactor = 0.7;
                    const textWidth = fontSize * label.length * charWidthFactor;
                    const centerX = data6.x + data6.width / 2;
                    const leftEdge = centerX - textWidth / 2;
                    const rightEdge = centerX + textWidth / 2;
                    const horizontalFits = leftEdge >= data6.x && rightEdge <= data6.x + data6.width;
                    const verticalFits = data6.y + yOffset2 + fontSize <= data6.y + data6.height;
                    return horizontalFits && verticalFits;
                  };
                  var fitsInBar = fitsInBar2;
                  __name(fitsInBar2, "fitsInBar");
                  const yOffset = 10;
                  const validItems = shape.data.map((d3, i2) => ({ data: d3, label: labelData[i2].toString() })).filter((item) => item.data.width > 0 && item.data.height > 0);
                  const candidateFontSizes = validItems.map((item) => {
                    const { data: data6, label } = item;
                    let fontSize = data6.width / (label.length * 0.7);
                    while (!fitsInBar2(item, fontSize, yOffset) && fontSize > 0) {
                      fontSize -= 1;
                    }
                    return fontSize;
                  });
                  const uniformFontSize = Math.floor(Math.min(...candidateFontSizes));
                  const determineLabelYPosition = /* @__PURE__ */ __name((item) => {
                    if (showDataLabelOutsideBar) {
                      return item.data.y - yOffset;
                    } else {
                      return item.data.y + yOffset;
                    }
                  }, "determineLabelYPosition");
                  shapeGroup.selectAll("text").data(validItems).enter().append("text").attr("x", (item) => item.data.x + item.data.width / 2).attr("y", determineLabelYPosition).attr("text-anchor", "middle").attr("dominant-baseline", showDataLabelOutsideBar ? "auto" : "hanging").attr("fill", themeConfig.dataLabelColor).attr("font-size", `${uniformFontSize}px`).text((item) => item.label);
                }
              }
              break;
            case "text":
              shapeGroup.selectAll("text").data(shape.data).enter().append("text").attr("x", 0).attr("y", 0).attr("fill", (data6) => data6.fill).attr("font-size", (data6) => data6.fontSize).attr("dominant-baseline", (data6) => getDominantBaseLine(data6.verticalPos)).attr("text-anchor", (data6) => getTextAnchor(data6.horizontalPos)).attr("transform", (data6) => getTextTransformation(data6)).text((data6) => data6.text);
              break;
            case "path":
              shapeGroup.selectAll("path").data(shape.data).enter().append("path").attr("d", (data6) => data6.path).attr("fill", (data6) => data6.fill ? data6.fill : "none").attr("stroke", (data6) => data6.strokeFill).attr("stroke-width", (data6) => data6.strokeWidth);
              break;
          }
        }
      }, "draw");
      xychartRenderer_default = {
        draw: draw9
      };
    }
  });

  // src/diagrams/xychart/xychartDiagram.ts
  var xychartDiagram_exports = {};
  __export(xychartDiagram_exports, {
    diagram: () => diagram10
  });
  var diagram10;
  var init_xychartDiagram = __esm({
    "src/diagrams/xychart/xychartDiagram.ts"() {
      "use strict";
      init_xychart();
      init_xychartDb();
      init_xychartRenderer();
      diagram10 = {
        parser: xychart_default,
        db: xychartDb_default,
        renderer: xychartRenderer_default
      };
    }
  });

  // src/diagrams/requirement/parser/requirementDiagram.jison
  var parser10, requirementDiagram_default;
  var init_requirementDiagram = __esm({
    "src/diagrams/requirement/parser/requirementDiagram.jison"() {
      "use strict";
      parser10 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [5, 6, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 77, 89, 90], $V5 = [1, 22], $V6 = [2, 7], $V7 = [1, 26], $V8 = [1, 27], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 33], $Vc = [1, 34], $Vd = [1, 35], $Ve = [1, 36], $Vf = [1, 37], $Vg = [1, 38], $Vh = [1, 24], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 30], $Vl = [1, 39], $Vm = [1, 40], $Vn = [5, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 77, 89, 90], $Vo = [1, 61], $Vp = [89, 90], $Vq = [5, 8, 9, 11, 13, 21, 22, 23, 24, 27, 29, 41, 42, 43, 44, 45, 46, 54, 61, 63, 72, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], $Vr = [27, 29], $Vs = [1, 70], $Vt = [1, 71], $Vu = [1, 72], $Vv = [1, 73], $Vw = [1, 74], $Vx = [1, 75], $Vy = [1, 76], $Vz = [1, 83], $VA = [1, 80], $VB = [1, 84], $VC = [1, 85], $VD = [1, 86], $VE = [1, 87], $VF = [1, 88], $VG = [1, 89], $VH = [1, 90], $VI = [1, 91], $VJ = [1, 92], $VK = [5, 8, 9, 11, 13, 21, 22, 23, 24, 27, 41, 42, 43, 44, 45, 46, 54, 72, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], $VL = [63, 64], $VM = [1, 101], $VN = [5, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 76, 77, 89, 90], $VO = [5, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], $VP = [1, 110], $VQ = [1, 106], $VR = [1, 107], $VS = [1, 108], $VT = [1, 109], $VU = [1, 111], $VV = [1, 116], $VW = [1, 117], $VX = [1, 114], $VY = [1, 115];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "directive": 4, "NEWLINE": 5, "RD": 6, "diagram": 7, "EOF": 8, "acc_title": 9, "acc_title_value": 10, "acc_descr": 11, "acc_descr_value": 12, "acc_descr_multiline_value": 13, "requirementDef": 14, "elementDef": 15, "relationshipDef": 16, "direction": 17, "styleStatement": 18, "classDefStatement": 19, "classStatement": 20, "direction_tb": 21, "direction_bt": 22, "direction_rl": 23, "direction_lr": 24, "requirementType": 25, "requirementName": 26, "STRUCT_START": 27, "requirementBody": 28, "STYLE_SEPARATOR": 29, "idList": 30, "ID": 31, "COLONSEP": 32, "id": 33, "TEXT": 34, "text": 35, "RISK": 36, "riskLevel": 37, "VERIFYMTHD": 38, "verifyType": 39, "STRUCT_STOP": 40, "REQUIREMENT": 41, "FUNCTIONAL_REQUIREMENT": 42, "INTERFACE_REQUIREMENT": 43, "PERFORMANCE_REQUIREMENT": 44, "PHYSICAL_REQUIREMENT": 45, "DESIGN_CONSTRAINT": 46, "LOW_RISK": 47, "MED_RISK": 48, "HIGH_RISK": 49, "VERIFY_ANALYSIS": 50, "VERIFY_DEMONSTRATION": 51, "VERIFY_INSPECTION": 52, "VERIFY_TEST": 53, "ELEMENT": 54, "elementName": 55, "elementBody": 56, "TYPE": 57, "type": 58, "DOCREF": 59, "ref": 60, "END_ARROW_L": 61, "relationship": 62, "LINE": 63, "END_ARROW_R": 64, "CONTAINS": 65, "COPIES": 66, "DERIVES": 67, "SATISFIES": 68, "VERIFIES": 69, "REFINES": 70, "TRACES": 71, "CLASSDEF": 72, "stylesOpt": 73, "CLASS": 74, "ALPHA": 75, "COMMA": 76, "STYLE": 77, "style": 78, "styleComponent": 79, "NUM": 80, "COLON": 81, "UNIT": 82, "SPACE": 83, "BRKT": 84, "PCT": 85, "MINUS": 86, "LABEL": 87, "SEMICOLON": 88, "unqString": 89, "qString": 90, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 5: "NEWLINE", 6: "RD", 8: "EOF", 9: "acc_title", 10: "acc_title_value", 11: "acc_descr", 12: "acc_descr_value", 13: "acc_descr_multiline_value", 21: "direction_tb", 22: "direction_bt", 23: "direction_rl", 24: "direction_lr", 27: "STRUCT_START", 29: "STYLE_SEPARATOR", 31: "ID", 32: "COLONSEP", 34: "TEXT", 36: "RISK", 38: "VERIFYMTHD", 40: "STRUCT_STOP", 41: "REQUIREMENT", 42: "FUNCTIONAL_REQUIREMENT", 43: "INTERFACE_REQUIREMENT", 44: "PERFORMANCE_REQUIREMENT", 45: "PHYSICAL_REQUIREMENT", 46: "DESIGN_CONSTRAINT", 47: "LOW_RISK", 48: "MED_RISK", 49: "HIGH_RISK", 50: "VERIFY_ANALYSIS", 51: "VERIFY_DEMONSTRATION", 52: "VERIFY_INSPECTION", 53: "VERIFY_TEST", 54: "ELEMENT", 57: "TYPE", 59: "DOCREF", 61: "END_ARROW_L", 63: "LINE", 64: "END_ARROW_R", 65: "CONTAINS", 66: "COPIES", 67: "DERIVES", 68: "SATISFIES", 69: "VERIFIES", 70: "REFINES", 71: "TRACES", 72: "CLASSDEF", 74: "CLASS", 75: "ALPHA", 76: "COMMA", 77: "STYLE", 80: "NUM", 81: "COLON", 82: "UNIT", 83: "SPACE", 84: "BRKT", 85: "PCT", 86: "MINUS", 87: "LABEL", 88: "SEMICOLON", 89: "unqString", 90: "qString" },
          productions_: [0, [3, 3], [3, 2], [3, 4], [4, 2], [4, 2], [4, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [17, 1], [17, 1], [17, 1], [17, 1], [14, 5], [14, 7], [28, 5], [28, 5], [28, 5], [28, 5], [28, 2], [28, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [37, 1], [37, 1], [37, 1], [39, 1], [39, 1], [39, 1], [39, 1], [15, 5], [15, 7], [56, 5], [56, 5], [56, 2], [56, 1], [16, 5], [16, 5], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [19, 3], [20, 3], [20, 3], [30, 1], [30, 3], [30, 1], [30, 3], [18, 3], [73, 1], [73, 3], [78, 1], [78, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [26, 1], [26, 1], [33, 1], [33, 1], [35, 1], [35, 1], [55, 1], [55, 1], [58, 1], [58, 1], [60, 1], [60, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 4:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 5:
              case 6:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 7:
                this.$ = [];
                break;
              case 17:
                yy.setDirection("TB");
                break;
              case 18:
                yy.setDirection("BT");
                break;
              case 19:
                yy.setDirection("RL");
                break;
              case 20:
                yy.setDirection("LR");
                break;
              case 21:
                yy.addRequirement($$[$0 - 3], $$[$0 - 4]);
                break;
              case 22:
                yy.addRequirement($$[$0 - 5], $$[$0 - 6]);
                yy.setClass([$$[$0 - 5]], $$[$0 - 3]);
                break;
              case 23:
                yy.setNewReqId($$[$0 - 2]);
                break;
              case 24:
                yy.setNewReqText($$[$0 - 2]);
                break;
              case 25:
                yy.setNewReqRisk($$[$0 - 2]);
                break;
              case 26:
                yy.setNewReqVerifyMethod($$[$0 - 2]);
                break;
              case 29:
                this.$ = yy.RequirementType.REQUIREMENT;
                break;
              case 30:
                this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT;
                break;
              case 31:
                this.$ = yy.RequirementType.INTERFACE_REQUIREMENT;
                break;
              case 32:
                this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT;
                break;
              case 33:
                this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT;
                break;
              case 34:
                this.$ = yy.RequirementType.DESIGN_CONSTRAINT;
                break;
              case 35:
                this.$ = yy.RiskLevel.LOW_RISK;
                break;
              case 36:
                this.$ = yy.RiskLevel.MED_RISK;
                break;
              case 37:
                this.$ = yy.RiskLevel.HIGH_RISK;
                break;
              case 38:
                this.$ = yy.VerifyType.VERIFY_ANALYSIS;
                break;
              case 39:
                this.$ = yy.VerifyType.VERIFY_DEMONSTRATION;
                break;
              case 40:
                this.$ = yy.VerifyType.VERIFY_INSPECTION;
                break;
              case 41:
                this.$ = yy.VerifyType.VERIFY_TEST;
                break;
              case 42:
                yy.addElement($$[$0 - 3]);
                break;
              case 43:
                yy.addElement($$[$0 - 5]);
                yy.setClass([$$[$0 - 5]], $$[$0 - 3]);
                break;
              case 44:
                yy.setNewElementType($$[$0 - 2]);
                break;
              case 45:
                yy.setNewElementDocRef($$[$0 - 2]);
                break;
              case 48:
                yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]);
                break;
              case 49:
                yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]);
                break;
              case 50:
                this.$ = yy.Relationships.CONTAINS;
                break;
              case 51:
                this.$ = yy.Relationships.COPIES;
                break;
              case 52:
                this.$ = yy.Relationships.DERIVES;
                break;
              case 53:
                this.$ = yy.Relationships.SATISFIES;
                break;
              case 54:
                this.$ = yy.Relationships.VERIFIES;
                break;
              case 55:
                this.$ = yy.Relationships.REFINES;
                break;
              case 56:
                this.$ = yy.Relationships.TRACES;
                break;
              case 57:
                this.$ = $$[$0 - 2];
                yy.defineClass($$[$0 - 1], $$[$0]);
                break;
              case 58:
                yy.setClass($$[$0 - 1], $$[$0]);
                break;
              case 59:
                yy.setClass([$$[$0 - 2]], $$[$0]);
                break;
              case 60:
              case 62:
                this.$ = [$$[$0]];
                break;
              case 61:
              case 63:
                this.$ = $$[$0 - 2].concat([$$[$0]]);
                break;
              case 64:
                this.$ = $$[$0 - 2];
                yy.setCssStyle($$[$0 - 1], $$[$0]);
                break;
              case 65:
                this.$ = [$$[$0]];
                break;
              case 66:
                $$[$0 - 2].push($$[$0]);
                this.$ = $$[$0 - 2];
                break;
              case 68:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [3] }, { 3: 8, 4: 2, 5: [1, 7], 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 5: [1, 9] }, { 10: [1, 10] }, { 12: [1, 11] }, o2($V4, [2, 6]), { 3: 12, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [2, 2] }, { 4: 17, 5: $V5, 7: 13, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, o2($V4, [2, 4]), o2($V4, [2, 5]), { 1: [2, 1] }, { 8: [1, 41] }, { 4: 17, 5: $V5, 7: 42, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 43, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 44, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 45, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 46, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 47, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 48, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 49, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 50, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 26: 51, 89: [1, 52], 90: [1, 53] }, { 55: 54, 89: [1, 55], 90: [1, 56] }, { 29: [1, 59], 61: [1, 57], 63: [1, 58] }, o2($Vn, [2, 17]), o2($Vn, [2, 18]), o2($Vn, [2, 19]), o2($Vn, [2, 20]), { 30: 60, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 30: 63, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 30: 64, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, o2($Vp, [2, 29]), o2($Vp, [2, 30]), o2($Vp, [2, 31]), o2($Vp, [2, 32]), o2($Vp, [2, 33]), o2($Vp, [2, 34]), o2($Vq, [2, 81]), o2($Vq, [2, 82]), { 1: [2, 3] }, { 8: [2, 8] }, { 8: [2, 9] }, { 8: [2, 10] }, { 8: [2, 11] }, { 8: [2, 12] }, { 8: [2, 13] }, { 8: [2, 14] }, { 8: [2, 15] }, { 8: [2, 16] }, { 27: [1, 65], 29: [1, 66] }, o2($Vr, [2, 79]), o2($Vr, [2, 80]), { 27: [1, 67], 29: [1, 68] }, o2($Vr, [2, 85]), o2($Vr, [2, 86]), { 62: 69, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx, 71: $Vy }, { 62: 77, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx, 71: $Vy }, { 30: 78, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 73: 79, 75: $Vz, 76: $VA, 78: 81, 79: 82, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }, o2($VK, [2, 60]), o2($VK, [2, 62]), { 73: 93, 75: $Vz, 76: $VA, 78: 81, 79: 82, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }, { 30: 94, 33: 62, 75: $Vo, 76: $VA, 89: $Vl, 90: $Vm }, { 5: [1, 95] }, { 30: 96, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 5: [1, 97] }, { 30: 98, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 63: [1, 99] }, o2($VL, [2, 50]), o2($VL, [2, 51]), o2($VL, [2, 52]), o2($VL, [2, 53]), o2($VL, [2, 54]), o2($VL, [2, 55]), o2($VL, [2, 56]), { 64: [1, 100] }, o2($Vn, [2, 59], { 76: $VA }), o2($Vn, [2, 64], { 76: $VM }), { 33: 103, 75: [1, 102], 89: $Vl, 90: $Vm }, o2($VN, [2, 65], { 79: 104, 75: $Vz, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }), o2($VO, [2, 67]), o2($VO, [2, 69]), o2($VO, [2, 70]), o2($VO, [2, 71]), o2($VO, [2, 72]), o2($VO, [2, 73]), o2($VO, [2, 74]), o2($VO, [2, 75]), o2($VO, [2, 76]), o2($VO, [2, 77]), o2($VO, [2, 78]), o2($Vn, [2, 57], { 76: $VM }), o2($Vn, [2, 58], { 76: $VA }), { 5: $VP, 28: 105, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 27: [1, 112], 76: $VA }, { 5: $VV, 40: $VW, 56: 113, 57: $VX, 59: $VY }, { 27: [1, 118], 76: $VA }, { 33: 119, 89: $Vl, 90: $Vm }, { 33: 120, 89: $Vl, 90: $Vm }, { 75: $Vz, 78: 121, 79: 82, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }, o2($VK, [2, 61]), o2($VK, [2, 63]), o2($VO, [2, 68]), o2($Vn, [2, 21]), { 32: [1, 122] }, { 32: [1, 123] }, { 32: [1, 124] }, { 32: [1, 125] }, { 5: $VP, 28: 126, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, o2($Vn, [2, 28]), { 5: [1, 127] }, o2($Vn, [2, 42]), { 32: [1, 128] }, { 32: [1, 129] }, { 5: $VV, 40: $VW, 56: 130, 57: $VX, 59: $VY }, o2($Vn, [2, 47]), { 5: [1, 131] }, o2($Vn, [2, 48]), o2($Vn, [2, 49]), o2($VN, [2, 66], { 79: 104, 75: $Vz, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }), { 33: 132, 89: $Vl, 90: $Vm }, { 35: 133, 89: [1, 134], 90: [1, 135] }, { 37: 136, 47: [1, 137], 48: [1, 138], 49: [1, 139] }, { 39: 140, 50: [1, 141], 51: [1, 142], 52: [1, 143], 53: [1, 144] }, o2($Vn, [2, 27]), { 5: $VP, 28: 145, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 58: 146, 89: [1, 147], 90: [1, 148] }, { 60: 149, 89: [1, 150], 90: [1, 151] }, o2($Vn, [2, 46]), { 5: $VV, 40: $VW, 56: 152, 57: $VX, 59: $VY }, { 5: [1, 153] }, { 5: [1, 154] }, { 5: [2, 83] }, { 5: [2, 84] }, { 5: [1, 155] }, { 5: [2, 35] }, { 5: [2, 36] }, { 5: [2, 37] }, { 5: [1, 156] }, { 5: [2, 38] }, { 5: [2, 39] }, { 5: [2, 40] }, { 5: [2, 41] }, o2($Vn, [2, 22]), { 5: [1, 157] }, { 5: [2, 87] }, { 5: [2, 88] }, { 5: [1, 158] }, { 5: [2, 89] }, { 5: [2, 90] }, o2($Vn, [2, 43]), { 5: $VP, 28: 159, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VP, 28: 160, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VP, 28: 161, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VP, 28: 162, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VV, 40: $VW, 56: 163, 57: $VX, 59: $VY }, { 5: $VV, 40: $VW, 56: 164, 57: $VX, 59: $VY }, o2($Vn, [2, 23]), o2($Vn, [2, 24]), o2($Vn, [2, 25]), o2($Vn, [2, 26]), o2($Vn, [2, 44]), o2($Vn, [2, 45])],
          defaultActions: { 8: [2, 2], 12: [2, 1], 41: [2, 3], 42: [2, 8], 43: [2, 9], 44: [2, 10], 45: [2, 11], 46: [2, 12], 47: [2, 13], 48: [2, 14], 49: [2, 15], 50: [2, 16], 134: [2, 83], 135: [2, 84], 137: [2, 35], 138: [2, 36], 139: [2, 37], 141: [2, 38], 142: [2, 39], 143: [2, 40], 144: [2, 41], 147: [2, 87], 148: [2, 88], 150: [2, 89], 151: [2, 90] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  return "title";
                  break;
                case 1:
                  this.begin("acc_title");
                  return 9;
                  break;
                case 2:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 3:
                  this.begin("acc_descr");
                  return 11;
                  break;
                case 4:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 5:
                  this.begin("acc_descr_multiline");
                  break;
                case 6:
                  this.popState();
                  break;
                case 7:
                  return "acc_descr_multiline_value";
                  break;
                case 8:
                  return 21;
                  break;
                case 9:
                  return 22;
                  break;
                case 10:
                  return 23;
                  break;
                case 11:
                  return 24;
                  break;
                case 12:
                  return 5;
                  break;
                case 13:
                  break;
                case 14:
                  break;
                case 15:
                  break;
                case 16:
                  return 8;
                  break;
                case 17:
                  return 6;
                  break;
                case 18:
                  return 27;
                  break;
                case 19:
                  return 40;
                  break;
                case 20:
                  return 29;
                  break;
                case 21:
                  return 32;
                  break;
                case 22:
                  return 31;
                  break;
                case 23:
                  return 34;
                  break;
                case 24:
                  return 36;
                  break;
                case 25:
                  return 38;
                  break;
                case 26:
                  return 41;
                  break;
                case 27:
                  return 42;
                  break;
                case 28:
                  return 43;
                  break;
                case 29:
                  return 44;
                  break;
                case 30:
                  return 45;
                  break;
                case 31:
                  return 46;
                  break;
                case 32:
                  return 47;
                  break;
                case 33:
                  return 48;
                  break;
                case 34:
                  return 49;
                  break;
                case 35:
                  return 50;
                  break;
                case 36:
                  return 51;
                  break;
                case 37:
                  return 52;
                  break;
                case 38:
                  return 53;
                  break;
                case 39:
                  return 54;
                  break;
                case 40:
                  return 65;
                  break;
                case 41:
                  return 66;
                  break;
                case 42:
                  return 67;
                  break;
                case 43:
                  return 68;
                  break;
                case 44:
                  return 69;
                  break;
                case 45:
                  return 70;
                  break;
                case 46:
                  return 71;
                  break;
                case 47:
                  return 57;
                  break;
                case 48:
                  return 59;
                  break;
                case 49:
                  this.begin("style");
                  return 77;
                  break;
                case 50:
                  return 75;
                  break;
                case 51:
                  return 81;
                  break;
                case 52:
                  return 88;
                  break;
                case 53:
                  return "PERCENT";
                  break;
                case 54:
                  return 86;
                  break;
                case 55:
                  return 84;
                  break;
                case 56:
                  break;
                case 57:
                  this.begin("string");
                  break;
                case 58:
                  this.popState();
                  break;
                case 59:
                  this.begin("style");
                  return 72;
                  break;
                case 60:
                  this.begin("style");
                  return 74;
                  break;
                case 61:
                  return 61;
                  break;
                case 62:
                  return 64;
                  break;
                case 63:
                  return 63;
                  break;
                case 64:
                  this.begin("string");
                  break;
                case 65:
                  this.popState();
                  break;
                case 66:
                  return "qString";
                  break;
                case 67:
                  yy_.yytext = yy_.yytext.trim();
                  return 89;
                  break;
                case 68:
                  return 75;
                  break;
                case 69:
                  return 80;
                  break;
                case 70:
                  return 76;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/i, /^(?::{3})/i, /^(?::)/i, /^(?:id\b)/i, /^(?:text\b)/i, /^(?:risk\b)/i, /^(?:verifyMethod\b)/i, /^(?:requirement\b)/i, /^(?:functionalRequirement\b)/i, /^(?:interfaceRequirement\b)/i, /^(?:performanceRequirement\b)/i, /^(?:physicalRequirement\b)/i, /^(?:designConstraint\b)/i, /^(?:low\b)/i, /^(?:medium\b)/i, /^(?:high\b)/i, /^(?:analysis\b)/i, /^(?:demonstration\b)/i, /^(?:inspection\b)/i, /^(?:test\b)/i, /^(?:element\b)/i, /^(?:contains\b)/i, /^(?:copies\b)/i, /^(?:derives\b)/i, /^(?:satisfies\b)/i, /^(?:verifies\b)/i, /^(?:refines\b)/i, /^(?:traces\b)/i, /^(?:type\b)/i, /^(?:docref\b)/i, /^(?:style\b)/i, /^(?:\w+)/i, /^(?::)/i, /^(?:;)/i, /^(?:%)/i, /^(?:-)/i, /^(?:#)/i, /^(?: )/i, /^(?:["])/i, /^(?:\n)/i, /^(?:classDef\b)/i, /^(?:class\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i, /^(?:\w+)/i, /^(?:[0-9]+)/i, /^(?:,)/i],
            conditions: { "acc_descr_multiline": { "rules": [6, 7, 68, 69, 70], "inclusive": false }, "acc_descr": { "rules": [4, 68, 69, 70], "inclusive": false }, "acc_title": { "rules": [2, 68, 69, 70], "inclusive": false }, "style": { "rules": [50, 51, 52, 53, 54, 55, 56, 57, 58, 68, 69, 70], "inclusive": false }, "unqString": { "rules": [68, 69, 70], "inclusive": false }, "token": { "rules": [68, 69, 70], "inclusive": false }, "string": { "rules": [65, 66, 68, 69, 70], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 59, 60, 61, 62, 63, 64, 67, 68, 69, 70], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser10.parser = parser10;
      requirementDiagram_default = parser10;
    }
  });

  // src/diagrams/requirement/requirementDb.ts
  var RequirementDB;
  var init_requirementDb = __esm({
    "src/diagrams/requirement/requirementDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_commonDb();
      RequirementDB = class {
        constructor() {
          this.relations = [];
          this.latestRequirement = this.getInitialRequirement();
          this.requirements = /* @__PURE__ */ new Map();
          this.latestElement = this.getInitialElement();
          this.elements = /* @__PURE__ */ new Map();
          this.classes = /* @__PURE__ */ new Map();
          this.direction = "TB";
          this.RequirementType = {
            REQUIREMENT: "Requirement",
            FUNCTIONAL_REQUIREMENT: "Functional Requirement",
            INTERFACE_REQUIREMENT: "Interface Requirement",
            PERFORMANCE_REQUIREMENT: "Performance Requirement",
            PHYSICAL_REQUIREMENT: "Physical Requirement",
            DESIGN_CONSTRAINT: "Design Constraint"
          };
          this.RiskLevel = {
            LOW_RISK: "Low",
            MED_RISK: "Medium",
            HIGH_RISK: "High"
          };
          this.VerifyType = {
            VERIFY_ANALYSIS: "Analysis",
            VERIFY_DEMONSTRATION: "Demonstration",
            VERIFY_INSPECTION: "Inspection",
            VERIFY_TEST: "Test"
          };
          this.Relationships = {
            CONTAINS: "contains",
            COPIES: "copies",
            DERIVES: "derives",
            SATISFIES: "satisfies",
            VERIFIES: "verifies",
            REFINES: "refines",
            TRACES: "traces"
          };
          this.setAccTitle = setAccTitle;
          this.getAccTitle = getAccTitle;
          this.setAccDescription = setAccDescription;
          this.getAccDescription = getAccDescription;
          this.setDiagramTitle = setDiagramTitle;
          this.getDiagramTitle = getDiagramTitle;
          this.getConfig = /* @__PURE__ */ __name(() => getConfig2().requirement, "getConfig");
          this.clear();
          this.setDirection = this.setDirection.bind(this);
          this.addRequirement = this.addRequirement.bind(this);
          this.setNewReqId = this.setNewReqId.bind(this);
          this.setNewReqRisk = this.setNewReqRisk.bind(this);
          this.setNewReqText = this.setNewReqText.bind(this);
          this.setNewReqVerifyMethod = this.setNewReqVerifyMethod.bind(this);
          this.addElement = this.addElement.bind(this);
          this.setNewElementType = this.setNewElementType.bind(this);
          this.setNewElementDocRef = this.setNewElementDocRef.bind(this);
          this.addRelationship = this.addRelationship.bind(this);
          this.setCssStyle = this.setCssStyle.bind(this);
          this.setClass = this.setClass.bind(this);
          this.defineClass = this.defineClass.bind(this);
          this.setAccTitle = this.setAccTitle.bind(this);
          this.setAccDescription = this.setAccDescription.bind(this);
        }
        static {
          __name(this, "RequirementDB");
        }
        getDirection() {
          return this.direction;
        }
        setDirection(dir2) {
          this.direction = dir2;
        }
        resetLatestRequirement() {
          this.latestRequirement = this.getInitialRequirement();
        }
        resetLatestElement() {
          this.latestElement = this.getInitialElement();
        }
        getInitialRequirement() {
          return {
            requirementId: "",
            text: "",
            risk: "",
            verifyMethod: "",
            name: "",
            type: "",
            cssStyles: [],
            classes: ["default"]
          };
        }
        getInitialElement() {
          return {
            name: "",
            type: "",
            docRef: "",
            cssStyles: [],
            classes: ["default"]
          };
        }
        addRequirement(name, type3) {
          if (!this.requirements.has(name)) {
            this.requirements.set(name, {
              name,
              type: type3,
              requirementId: this.latestRequirement.requirementId,
              text: this.latestRequirement.text,
              risk: this.latestRequirement.risk,
              verifyMethod: this.latestRequirement.verifyMethod,
              cssStyles: [],
              classes: ["default"]
            });
          }
          this.resetLatestRequirement();
          return this.requirements.get(name);
        }
        getRequirements() {
          return this.requirements;
        }
        setNewReqId(id41) {
          if (this.latestRequirement !== void 0) {
            this.latestRequirement.requirementId = id41;
          }
        }
        setNewReqText(text4) {
          if (this.latestRequirement !== void 0) {
            this.latestRequirement.text = text4;
          }
        }
        setNewReqRisk(risk) {
          if (this.latestRequirement !== void 0) {
            this.latestRequirement.risk = risk;
          }
        }
        setNewReqVerifyMethod(verifyMethod) {
          if (this.latestRequirement !== void 0) {
            this.latestRequirement.verifyMethod = verifyMethod;
          }
        }
        addElement(name) {
          if (!this.elements.has(name)) {
            this.elements.set(name, {
              name,
              type: this.latestElement.type,
              docRef: this.latestElement.docRef,
              cssStyles: [],
              classes: ["default"]
            });
            log.info("Added new element: ", name);
          }
          this.resetLatestElement();
          return this.elements.get(name);
        }
        getElements() {
          return this.elements;
        }
        setNewElementType(type3) {
          if (this.latestElement !== void 0) {
            this.latestElement.type = type3;
          }
        }
        setNewElementDocRef(docRef) {
          if (this.latestElement !== void 0) {
            this.latestElement.docRef = docRef;
          }
        }
        addRelationship(type3, src, dst) {
          this.relations.push({
            type: type3,
            src,
            dst
          });
        }
        getRelationships() {
          return this.relations;
        }
        clear() {
          this.relations = [];
          this.resetLatestRequirement();
          this.requirements = /* @__PURE__ */ new Map();
          this.resetLatestElement();
          this.elements = /* @__PURE__ */ new Map();
          this.classes = /* @__PURE__ */ new Map();
          clear();
        }
        setCssStyle(ids, styles7) {
          for (const id41 of ids) {
            const node2 = this.requirements.get(id41) ?? this.elements.get(id41);
            if (!styles7 || !node2) {
              return;
            }
            for (const s2 of styles7) {
              if (s2.includes(",")) {
                node2.cssStyles.push(...s2.split(","));
              } else {
                node2.cssStyles.push(s2);
              }
            }
          }
        }
        setClass(ids, classNames) {
          for (const id41 of ids) {
            const node2 = this.requirements.get(id41) ?? this.elements.get(id41);
            if (node2) {
              for (const _class2 of classNames) {
                node2.classes.push(_class2);
                const styles7 = this.classes.get(_class2)?.styles;
                if (styles7) {
                  node2.cssStyles.push(...styles7);
                }
              }
            }
          }
        }
        defineClass(ids, style3) {
          for (const id41 of ids) {
            let styleClass = this.classes.get(id41);
            if (styleClass === void 0) {
              styleClass = { id: id41, styles: [], textStyles: [] };
              this.classes.set(id41, styleClass);
            }
            if (style3) {
              style3.forEach(function(s2) {
                if (/color/.exec(s2)) {
                  const newStyle = s2.replace("fill", "bgFill");
                  styleClass.textStyles.push(newStyle);
                }
                styleClass.styles.push(s2);
              });
            }
            this.requirements.forEach((value2) => {
              if (value2.classes.includes(id41)) {
                value2.cssStyles.push(...style3.flatMap((s2) => s2.split(",")));
              }
            });
            this.elements.forEach((value2) => {
              if (value2.classes.includes(id41)) {
                value2.cssStyles.push(...style3.flatMap((s2) => s2.split(",")));
              }
            });
          }
        }
        getClasses() {
          return this.classes;
        }
        getData() {
          const config3 = getConfig2();
          const nodes5 = [];
          const edges3 = [];
          for (const requirement of this.requirements.values()) {
            const node2 = requirement;
            node2.id = requirement.name;
            node2.cssStyles = requirement.cssStyles;
            node2.cssClasses = requirement.classes.join(" ");
            node2.shape = "requirementBox";
            node2.look = config3.look;
            node2.colorIndex = nodes5.length;
            nodes5.push(node2);
          }
          for (const element3 of this.elements.values()) {
            const node2 = element3;
            node2.shape = "requirementBox";
            node2.look = config3.look;
            node2.id = element3.name;
            node2.cssStyles = element3.cssStyles;
            node2.cssClasses = element3.classes.join(" ");
            node2.colorIndex = nodes5.length;
            nodes5.push(node2);
          }
          for (const relation of this.relations) {
            let counter2 = 0;
            const isContains = relation.type === this.Relationships.CONTAINS;
            const edge = {
              id: `${relation.src}-${relation.dst}-${counter2}`,
              start: this.requirements.get(relation.src)?.name ?? this.elements.get(relation.src)?.name,
              end: this.requirements.get(relation.dst)?.name ?? this.elements.get(relation.dst)?.name,
              label: `&lt;&lt;${relation.type}&gt;&gt;`,
              classes: "relationshipLine",
              style: ["fill:none", isContains ? "" : "stroke-dasharray: 10,7"],
              labelpos: "c",
              thickness: "normal",
              type: "normal",
              pattern: isContains ? "normal" : "dashed",
              arrowTypeStart: isContains ? "requirement_contains" : "",
              arrowTypeEnd: isContains ? "" : "requirement_arrow",
              look: config3.look,
              labelType: "markdown"
            };
            edges3.push(edge);
            counter2++;
          }
          return { nodes: nodes5, edges: edges3, other: {}, config: config3, direction: this.getDirection() };
        }
      };
    }
  });

  // src/diagrams/requirement/styles.js
  var genColor3, getStyles9, styles_default8;
  var init_styles8 = __esm({
    "src/diagrams/requirement/styles.js"() {
      "use strict";
      init_config();
      genColor3 = /* @__PURE__ */ __name((options2) => {
        const config3 = getConfig();
        const { themeVariables, look } = config3;
        const { bkgColorArray, borderColorArray } = themeVariables;
        if (!borderColorArray?.length) {
          return "";
        }
        let sections6 = "";
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          sections6 += `

    [data-look="${look}"][data-color-id="color-${i2}"].node path {
    stroke: ${borderColorArray[i2]};
    fill: ${bkgColorArray?.length ? bkgColorArray[i2] : ""};
    }

    [data-look="${look}"][data-color-id="color-${i2}"].node  rect {
    stroke: ${borderColorArray[i2]};
    fill: ${bkgColorArray?.length ? bkgColorArray[i2] : ""};
     }
    `;
        }
        return sections6;
      }, "genColor");
      getStyles9 = /* @__PURE__ */ __name((options2) => {
        const config3 = getConfig();
        const { look, themeVariables } = config3;
        const { requirementEdgeLabelBackground } = themeVariables;
        return `
  ${genColor3(options2)}
  marker {
    fill: ${options2.relationColor};
    stroke: ${options2.relationColor};
  }

  marker.cross {
    stroke: ${options2.lineColor};
  }

  svg {
    font-family: ${options2.fontFamily};
    font-size: ${options2.fontSize};
  }

  .reqBox {
    fill: ${options2.requirementBackground};
    fill-opacity: 1.0;
    stroke: ${options2.requirementBorderColor};
    stroke-width: ${options2.requirementBorderSize};
  }
  
  .reqTitle, .reqLabel{
    fill:  ${options2.requirementTextColor};
  }
  .reqLabelBox {
    fill: ${options2.relationLabelBackground};
    fill-opacity: 1.0;
  }

  .req-title-line {
    stroke: ${options2.requirementBorderColor};
    stroke-width: ${options2.requirementBorderSize};
  }
  .relationshipLine {
    stroke: ${options2.relationColor};
    stroke-width: ${look === "neo" ? options2.strokeWidth : "1px"};
  }
  .relationshipLabel {
    fill: ${options2.relationLabelColor};
  }
    .edgeLabel {
    background-color: ${options2.edgeLabelBackground};
  }
  .edgeLabel .label rect {
    fill: ${options2.edgeLabelBackground};
  }
  .edgeLabel .label text {
    fill: ${options2.relationLabelColor};
  }
  .divider {
    stroke: ${options2.nodeBorder};
    stroke-width: 1;
  }
  .label {
    font-family: ${options2.fontFamily};
    color: ${options2.nodeTextColor || options2.textColor};
  }
  .label text,span {
    fill: ${options2.nodeTextColor || options2.textColor};
    color: ${options2.nodeTextColor || options2.textColor};
  }
  .labelBkg {
    background-color: ${requirementEdgeLabelBackground ?? options2.edgeLabelBackground};
  }

`;
      }, "getStyles");
      styles_default8 = getStyles9;
    }
  });

  // src/diagrams/requirement/requirementRenderer.ts
  var requirementRenderer_exports = {};
  __export(requirementRenderer_exports, {
    draw: () => draw10
  });
  var draw10;
  var init_requirementRenderer = __esm({
    "src/diagrams/requirement/requirementRenderer.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_insertElementsForSize();
      init_render2();
      init_setupViewPortForSVG();
      init_utils2();
      draw10 = /* @__PURE__ */ __name(async function(text4, id41, _version, diag) {
        log.info("REF0:");
        log.info("Drawing requirement diagram (unified)", id41);
        const { securityLevel, state: conf5, layout: layout7, look } = getConfig2();
        const data4Layout = diag.db.getData();
        const svg2 = getDiagramElement(id41, securityLevel);
        data4Layout.type = diag.type;
        data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout7);
        data4Layout.nodeSpacing = conf5?.nodeSpacing ?? 50;
        data4Layout.rankSpacing = conf5?.rankSpacing ?? 50;
        data4Layout.markers = look === "neo" ? ["requirement_contains_neo", "requirement_arrow_neo"] : ["requirement_contains", "requirement_arrow"];
        data4Layout.diagramId = id41;
        await render7(data4Layout, svg2);
        const padding = 8;
        utils_default2.insertTitle(
          svg2,
          "requirementDiagramTitleText",
          conf5?.titleTopMargin ?? 25,
          diag.db.getDiagramTitle()
        );
        setupViewPortForSVG(svg2, padding, "requirementDiagram", conf5?.useMaxWidth ?? true);
      }, "draw");
    }
  });

  // src/diagrams/requirement/requirementDiagram.ts
  var requirementDiagram_exports = {};
  __export(requirementDiagram_exports, {
    diagram: () => diagram11
  });
  var diagram11;
  var init_requirementDiagram2 = __esm({
    "src/diagrams/requirement/requirementDiagram.ts"() {
      "use strict";
      init_requirementDiagram();
      init_requirementDb();
      init_styles8();
      init_requirementRenderer();
      diagram11 = {
        parser: requirementDiagram_default,
        get db() {
          return new RequirementDB();
        },
        renderer: requirementRenderer_exports,
        styles: styles_default8
      };
    }
  });

  // src/diagrams/sequence/parser/sequenceDiagram.jison
  var parser11, sequenceDiagram_default;
  var init_sequenceDiagram = __esm({
    "src/diagrams/sequence/parser/sequenceDiagram.jison"() {
      "use strict";
      parser11 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 12], $V7 = [1, 14], $V8 = [1, 15], $V9 = [1, 17], $Va = [1, 18], $Vb = [1, 19], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 30], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 33], $Vl = [1, 34], $Vm = [1, 35], $Vn = [1, 36], $Vo = [1, 37], $Vp = [1, 38], $Vq = [1, 39], $Vr = [1, 40], $Vs = [1, 42], $Vt = [1, 43], $Vu = [1, 44], $Vv = [1, 45], $Vw = [1, 46], $Vx = [1, 47], $Vy = [1, 4, 5, 10, 14, 15, 17, 19, 22, 24, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 44, 45, 47, 48, 49, 50, 51, 53, 54, 56, 61, 62, 63, 64, 73], $Vz = [1, 74], $VA = [1, 80], $VB = [1, 81], $VC = [1, 82], $VD = [1, 83], $VE = [1, 84], $VF = [1, 85], $VG = [1, 86], $VH = [1, 87], $VI = [1, 88], $VJ = [1, 89], $VK = [1, 90], $VL = [1, 91], $VM = [1, 92], $VN = [1, 93], $VO = [1, 94], $VP = [1, 95], $VQ = [1, 96], $VR = [1, 97], $VS = [1, 98], $VT = [1, 99], $VU = [1, 100], $VV = [1, 101], $VW = [1, 102], $VX = [1, 103], $VY = [1, 104], $VZ = [1, 105], $V_ = [2, 78], $V$ = [4, 5, 17, 51, 53, 54], $V01 = [4, 5, 10, 14, 15, 17, 19, 22, 24, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 44, 45, 47, 51, 53, 54, 56, 61, 62, 63, 64, 73], $V11 = [4, 5, 10, 14, 15, 17, 19, 22, 24, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 44, 45, 47, 50, 51, 53, 54, 56, 61, 62, 63, 64, 73], $V21 = [4, 5, 10, 14, 15, 17, 19, 22, 24, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 44, 45, 47, 49, 51, 53, 54, 56, 61, 62, 63, 64, 73], $V31 = [4, 5, 10, 14, 15, 17, 19, 22, 24, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 44, 45, 47, 48, 51, 53, 54, 56, 61, 62, 63, 64, 73], $V41 = [5, 52], $V51 = [70, 71, 72, 73], $V61 = [1, 151];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "INVALID": 10, "box_section": 11, "box_line": 12, "participant_statement": 13, "create": 14, "box": 15, "restOfLine": 16, "end": 17, "signal": 18, "autonumber": 19, "NUM": 20, "off": 21, "activate": 22, "actor": 23, "deactivate": 24, "note_statement": 25, "links_statement": 26, "link_statement": 27, "properties_statement": 28, "details_statement": 29, "title": 30, "legacy_title": 31, "acc_title": 32, "acc_title_value": 33, "acc_descr": 34, "acc_descr_value": 35, "acc_descr_multiline_value": 36, "loop": 37, "rect": 38, "opt": 39, "alt": 40, "else_sections": 41, "par": 42, "par_sections": 43, "par_over": 44, "critical": 45, "option_sections": 46, "break": 47, "option": 48, "and": 49, "else": 50, "participant": 51, "AS": 52, "participant_actor": 53, "destroy": 54, "actor_with_config": 55, "note": 56, "placement": 57, "text2": 58, "over": 59, "actor_pair": 60, "links": 61, "link": 62, "properties": 63, "details": 64, "spaceList": 65, ",": 66, "left_of": 67, "right_of": 68, "signaltype": 69, "+": 70, "-": 71, "()": 72, "ACTOR": 73, "config_object": 74, "CONFIG_START": 75, "CONFIG_CONTENT": 76, "CONFIG_END": 77, "SOLID_OPEN_ARROW": 78, "DOTTED_OPEN_ARROW": 79, "SOLID_ARROW": 80, "SOLID_ARROW_TOP": 81, "SOLID_ARROW_BOTTOM": 82, "STICK_ARROW_TOP": 83, "STICK_ARROW_BOTTOM": 84, "SOLID_ARROW_TOP_DOTTED": 85, "SOLID_ARROW_BOTTOM_DOTTED": 86, "STICK_ARROW_TOP_DOTTED": 87, "STICK_ARROW_BOTTOM_DOTTED": 88, "SOLID_ARROW_TOP_REVERSE": 89, "SOLID_ARROW_BOTTOM_REVERSE": 90, "STICK_ARROW_TOP_REVERSE": 91, "STICK_ARROW_BOTTOM_REVERSE": 92, "SOLID_ARROW_TOP_REVERSE_DOTTED": 93, "SOLID_ARROW_BOTTOM_REVERSE_DOTTED": 94, "STICK_ARROW_TOP_REVERSE_DOTTED": 95, "STICK_ARROW_BOTTOM_REVERSE_DOTTED": 96, "BIDIRECTIONAL_SOLID_ARROW": 97, "DOTTED_ARROW": 98, "BIDIRECTIONAL_DOTTED_ARROW": 99, "SOLID_CROSS": 100, "DOTTED_CROSS": 101, "SOLID_POINT": 102, "DOTTED_POINT": 103, "TXT": 104, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 6: "SD", 10: "INVALID", 14: "create", 15: "box", 16: "restOfLine", 17: "end", 19: "autonumber", 20: "NUM", 21: "off", 22: "activate", 24: "deactivate", 30: "title", 31: "legacy_title", 32: "acc_title", 33: "acc_title_value", 34: "acc_descr", 35: "acc_descr_value", 36: "acc_descr_multiline_value", 37: "loop", 38: "rect", 39: "opt", 40: "alt", 42: "par", 44: "par_over", 45: "critical", 47: "break", 48: "option", 49: "and", 50: "else", 51: "participant", 52: "AS", 53: "participant_actor", 54: "destroy", 56: "note", 59: "over", 61: "links", 62: "link", 63: "properties", 64: "details", 66: ",", 67: "left_of", 68: "right_of", 70: "+", 71: "-", 72: "()", 73: "ACTOR", 75: "CONFIG_START", 76: "CONFIG_CONTENT", 77: "CONFIG_END", 78: "SOLID_OPEN_ARROW", 79: "DOTTED_OPEN_ARROW", 80: "SOLID_ARROW", 81: "SOLID_ARROW_TOP", 82: "SOLID_ARROW_BOTTOM", 83: "STICK_ARROW_TOP", 84: "STICK_ARROW_BOTTOM", 85: "SOLID_ARROW_TOP_DOTTED", 86: "SOLID_ARROW_BOTTOM_DOTTED", 87: "STICK_ARROW_TOP_DOTTED", 88: "STICK_ARROW_BOTTOM_DOTTED", 89: "SOLID_ARROW_TOP_REVERSE", 90: "SOLID_ARROW_BOTTOM_REVERSE", 91: "STICK_ARROW_TOP_REVERSE", 92: "STICK_ARROW_BOTTOM_REVERSE", 93: "SOLID_ARROW_TOP_REVERSE_DOTTED", 94: "SOLID_ARROW_BOTTOM_REVERSE_DOTTED", 95: "STICK_ARROW_TOP_REVERSE_DOTTED", 96: "STICK_ARROW_BOTTOM_REVERSE_DOTTED", 97: "BIDIRECTIONAL_SOLID_ARROW", 98: "DOTTED_ARROW", 99: "BIDIRECTIONAL_DOTTED_ARROW", 100: "SOLID_CROSS", 101: "DOTTED_CROSS", 102: "SOLID_POINT", 103: "DOTTED_POINT", 104: "TXT" },
          productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [8, 1], [11, 0], [11, 2], [12, 2], [12, 1], [12, 1], [9, 1], [9, 2], [9, 4], [9, 2], [9, 4], [9, 3], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [46, 1], [46, 4], [43, 1], [43, 4], [41, 1], [41, 4], [13, 5], [13, 3], [13, 5], [13, 3], [13, 3], [13, 5], [13, 3], [13, 5], [13, 3], [25, 4], [25, 4], [26, 3], [27, 3], [28, 3], [29, 3], [65, 2], [65, 1], [60, 3], [60, 1], [57, 1], [57, 1], [18, 5], [18, 5], [18, 5], [18, 5], [18, 6], [18, 4], [55, 2], [74, 3], [23, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [69, 1], [58, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 3:
                yy.apply($$[$0]);
                return $$[$0];
                break;
              case 4:
              case 10:
                this.$ = [];
                break;
              case 5:
              case 11:
                $$[$0 - 1].push($$[$0]);
                this.$ = $$[$0 - 1];
                break;
              case 6:
              case 7:
              case 12:
              case 13:
                this.$ = $$[$0];
                break;
              case 8:
              case 9:
              case 14:
                this.$ = [];
                break;
              case 16:
                $$[$0].type = "createParticipant";
                this.$ = $$[$0];
                break;
              case 17:
                $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) });
                $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] });
                this.$ = $$[$0 - 1];
                break;
              case 19:
                this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };
                break;
              case 20:
                this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };
                break;
              case 21:
                this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER };
                break;
              case 22:
                this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };
                break;
              case 23:
                this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1].actor };
                break;
              case 24:
                this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1].actor };
                break;
              case 30:
                yy.setDiagramTitle($$[$0].substring(6));
                this.$ = $$[$0].substring(6);
                break;
              case 31:
                yy.setDiagramTitle($$[$0].substring(7));
                this.$ = $$[$0].substring(7);
                break;
              case 32:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 33:
              case 34:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 35:
                $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START });
                $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END });
                this.$ = $$[$0 - 1];
                break;
              case 36:
                $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START });
                $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END });
                this.$ = $$[$0 - 1];
                break;
              case 37:
                $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START });
                $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END });
                this.$ = $$[$0 - 1];
                break;
              case 38:
                $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START });
                $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END });
                this.$ = $$[$0 - 1];
                break;
              case 39:
                $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START });
                $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END });
                this.$ = $$[$0 - 1];
                break;
              case 40:
                $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_OVER_START });
                $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END });
                this.$ = $$[$0 - 1];
                break;
              case 41:
                $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START });
                $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END });
                this.$ = $$[$0 - 1];
                break;
              case 42:
                $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START });
                $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END });
                this.$ = $$[$0 - 1];
                break;
              case 44:
                this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]);
                break;
              case 46:
                this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]);
                break;
              case 48:
                this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]);
                break;
              case 49:
                $$[$0 - 3].draw = "participant";
                $$[$0 - 3].type = "addParticipant";
                $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);
                this.$ = $$[$0 - 3];
                break;
              case 50:
                $$[$0 - 1].draw = "participant";
                $$[$0 - 1].type = "addParticipant";
                this.$ = $$[$0 - 1];
                break;
              case 51:
                $$[$0 - 3].draw = "actor";
                $$[$0 - 3].type = "addParticipant";
                $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);
                this.$ = $$[$0 - 3];
                break;
              case 52:
              case 57:
                $$[$0 - 1].draw = "actor";
                $$[$0 - 1].type = "addParticipant";
                this.$ = $$[$0 - 1];
                break;
              case 53:
                $$[$0 - 1].type = "destroyParticipant";
                this.$ = $$[$0 - 1];
                break;
              case 54:
                $$[$0 - 3].draw = "participant";
                $$[$0 - 3].type = "addParticipant";
                $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);
                this.$ = $$[$0 - 3];
                break;
              case 55:
                $$[$0 - 1].draw = "participant";
                $$[$0 - 1].type = "addParticipant";
                this.$ = $$[$0 - 1];
                break;
              case 56:
                $$[$0 - 3].draw = "actor";
                $$[$0 - 3].type = "addParticipant";
                $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);
                this.$ = $$[$0 - 3];
                break;
              case 58:
                this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }];
                break;
              case 59:
                $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2);
                $$[$0 - 2][0] = $$[$0 - 2][0].actor;
                $$[$0 - 2][1] = $$[$0 - 2][1].actor;
                this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }];
                break;
              case 60:
                this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }];
                break;
              case 61:
                this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }];
                break;
              case 62:
                this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }];
                break;
              case 63:
                this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }];
                break;
              case 66:
                this.$ = [$$[$0 - 2], $$[$0]];
                break;
              case 67:
                this.$ = $$[$0];
                break;
              case 68:
                this.$ = yy.PLACEMENT.LEFTOF;
                break;
              case 69:
                this.$ = yy.PLACEMENT.RIGHTOF;
                break;
              case 70:
                this.$ = [
                  $$[$0 - 4],
                  $$[$0 - 1],
                  { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0], activate: true },
                  { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1].actor }
                ];
                break;
              case 71:
                this.$ = [
                  $$[$0 - 4],
                  $$[$0 - 1],
                  { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] },
                  { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4].actor }
                ];
                break;
              case 72:
                this.$ = [
                  $$[$0 - 4],
                  $$[$0 - 1],
                  { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0], activate: true, centralConnection: yy.LINETYPE.CENTRAL_CONNECTION },
                  { type: "centralConnection", signalType: yy.LINETYPE.CENTRAL_CONNECTION, actor: $$[$0 - 1].actor }
                ];
                break;
              case 73:
                this.$ = [
                  $$[$0 - 4],
                  $$[$0 - 1],
                  { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0], activate: false, centralConnection: yy.LINETYPE.CENTRAL_CONNECTION_REVERSE },
                  { type: "centralConnectionReverse", signalType: yy.LINETYPE.CENTRAL_CONNECTION_REVERSE, actor: $$[$0 - 4].actor }
                ];
                break;
              case 74:
                this.$ = [
                  $$[$0 - 5],
                  $$[$0 - 1],
                  { type: "addMessage", from: $$[$0 - 5].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0], activate: true, centralConnection: yy.LINETYPE.CENTRAL_CONNECTION_DUAL },
                  { type: "centralConnection", signalType: yy.LINETYPE.CENTRAL_CONNECTION, actor: $$[$0 - 1].actor },
                  { type: "centralConnectionReverse", signalType: yy.LINETYPE.CENTRAL_CONNECTION_REVERSE, actor: $$[$0 - 5].actor }
                ];
                break;
              case 75:
                this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }];
                break;
              case 76:
                this.$ = {
                  type: "addParticipant",
                  actor: $$[$0 - 1],
                  config: $$[$0]
                };
                break;
              case 77:
                this.$ = $$[$0 - 1].trim();
                break;
              case 78:
                this.$ = { type: "addParticipant", actor: $$[$0] };
                break;
              case 79:
                this.$ = yy.LINETYPE.SOLID_OPEN;
                break;
              case 80:
                this.$ = yy.LINETYPE.DOTTED_OPEN;
                break;
              case 81:
                this.$ = yy.LINETYPE.SOLID;
                break;
              case 82:
                this.$ = yy.LINETYPE.SOLID_TOP;
                break;
              case 83:
                this.$ = yy.LINETYPE.SOLID_BOTTOM;
                break;
              case 84:
                this.$ = yy.LINETYPE.STICK_TOP;
                break;
              case 85:
                this.$ = yy.LINETYPE.STICK_BOTTOM;
                break;
              case 86:
                this.$ = yy.LINETYPE.SOLID_TOP_DOTTED;
                break;
              case 87:
                this.$ = yy.LINETYPE.SOLID_BOTTOM_DOTTED;
                break;
              case 88:
                this.$ = yy.LINETYPE.STICK_TOP_DOTTED;
                break;
              case 89:
                this.$ = yy.LINETYPE.STICK_BOTTOM_DOTTED;
                break;
              case 90:
                this.$ = yy.LINETYPE.SOLID_ARROW_TOP_REVERSE;
                break;
              case 91:
                this.$ = yy.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE;
                break;
              case 92:
                this.$ = yy.LINETYPE.STICK_ARROW_TOP_REVERSE;
                break;
              case 93:
                this.$ = yy.LINETYPE.STICK_ARROW_BOTTOM_REVERSE;
                break;
              case 94:
                this.$ = yy.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED;
                break;
              case 95:
                this.$ = yy.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED;
                break;
              case 96:
                this.$ = yy.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED;
                break;
              case 97:
                this.$ = yy.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED;
                break;
              case 98:
                this.$ = yy.LINETYPE.BIDIRECTIONAL_SOLID;
                break;
              case 99:
                this.$ = yy.LINETYPE.DOTTED;
                break;
              case 100:
                this.$ = yy.LINETYPE.BIDIRECTIONAL_DOTTED;
                break;
              case 101:
                this.$ = yy.LINETYPE.SOLID_CROSS;
                break;
              case 102:
                this.$ = yy.LINETYPE.DOTTED_CROSS;
                break;
              case 103:
                this.$ = yy.LINETYPE.SOLID_POINT;
                break;
              case 104:
                this.$ = yy.LINETYPE.DOTTED_POINT;
                break;
              case 105:
                this.$ = yy.parseMessage($$[$0].trim().substring(1));
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o2([1, 4, 5, 10, 14, 15, 19, 22, 24, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 44, 45, 47, 51, 53, 54, 56, 61, 62, 63, 64, 73], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, o2($Vy, [2, 5]), { 9: 48, 13: 13, 14: $V7, 15: $V8, 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, o2($Vy, [2, 7]), o2($Vy, [2, 8]), o2($Vy, [2, 9]), o2($Vy, [2, 15]), { 13: 49, 51: $Vp, 53: $Vq, 54: $Vr }, { 16: [1, 50] }, { 5: [1, 51] }, { 5: [1, 54], 20: [1, 52], 21: [1, 53] }, { 23: 55, 73: $Vx }, { 23: 56, 73: $Vx }, { 5: [1, 57] }, { 5: [1, 58] }, { 5: [1, 59] }, { 5: [1, 60] }, { 5: [1, 61] }, o2($Vy, [2, 30]), o2($Vy, [2, 31]), { 33: [1, 62] }, { 35: [1, 63] }, o2($Vy, [2, 34]), { 16: [1, 64] }, { 16: [1, 65] }, { 16: [1, 66] }, { 16: [1, 67] }, { 16: [1, 68] }, { 16: [1, 69] }, { 16: [1, 70] }, { 16: [1, 71] }, { 23: 72, 55: 73, 73: $Vz }, { 23: 75, 55: 76, 73: $Vz }, { 23: 77, 73: $Vx }, { 69: 78, 72: [1, 79], 78: $VA, 79: $VB, 80: $VC, 81: $VD, 82: $VE, 83: $VF, 84: $VG, 85: $VH, 86: $VI, 87: $VJ, 88: $VK, 89: $VL, 90: $VM, 91: $VN, 92: $VO, 93: $VP, 94: $VQ, 95: $VR, 96: $VS, 97: $VT, 98: $VU, 99: $VV, 100: $VW, 101: $VX, 102: $VY, 103: $VZ }, { 57: 106, 59: [1, 107], 67: [1, 108], 68: [1, 109] }, { 23: 110, 73: $Vx }, { 23: 111, 73: $Vx }, { 23: 112, 73: $Vx }, { 23: 113, 73: $Vx }, o2([5, 66, 72, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104], $V_), o2($Vy, [2, 6]), o2($Vy, [2, 16]), o2($V$, [2, 10], { 11: 114 }), o2($Vy, [2, 18]), { 5: [1, 116], 20: [1, 115] }, { 5: [1, 117] }, o2($Vy, [2, 22]), { 5: [1, 118] }, { 5: [1, 119] }, o2($Vy, [2, 25]), o2($Vy, [2, 26]), o2($Vy, [2, 27]), o2($Vy, [2, 28]), o2($Vy, [2, 29]), o2($Vy, [2, 32]), o2($Vy, [2, 33]), o2($V01, $V3, { 7: 120 }), o2($V01, $V3, { 7: 121 }), o2($V01, $V3, { 7: 122 }), o2($V11, $V3, { 41: 123, 7: 124 }), o2($V21, $V3, { 43: 125, 7: 126 }), o2($V21, $V3, { 7: 126, 43: 127 }), o2($V31, $V3, { 46: 128, 7: 129 }), o2($V01, $V3, { 7: 130 }), { 5: [1, 132], 52: [1, 131] }, { 5: [1, 134], 52: [1, 133] }, o2($V41, $V_, { 74: 135, 75: [1, 136] }), { 5: [1, 138], 52: [1, 137] }, { 5: [1, 140], 52: [1, 139] }, { 5: [1, 141] }, { 23: 145, 70: [1, 142], 71: [1, 143], 72: [1, 144], 73: $Vx }, { 69: 146, 78: $VA, 79: $VB, 80: $VC, 81: $VD, 82: $VE, 83: $VF, 84: $VG, 85: $VH, 86: $VI, 87: $VJ, 88: $VK, 89: $VL, 90: $VM, 91: $VN, 92: $VO, 93: $VP, 94: $VQ, 95: $VR, 96: $VS, 97: $VT, 98: $VU, 99: $VV, 100: $VW, 101: $VX, 102: $VY, 103: $VZ }, o2($V51, [2, 79]), o2($V51, [2, 80]), o2($V51, [2, 81]), o2($V51, [2, 82]), o2($V51, [2, 83]), o2($V51, [2, 84]), o2($V51, [2, 85]), o2($V51, [2, 86]), o2($V51, [2, 87]), o2($V51, [2, 88]), o2($V51, [2, 89]), o2($V51, [2, 90]), o2($V51, [2, 91]), o2($V51, [2, 92]), o2($V51, [2, 93]), o2($V51, [2, 94]), o2($V51, [2, 95]), o2($V51, [2, 96]), o2($V51, [2, 97]), o2($V51, [2, 98]), o2($V51, [2, 99]), o2($V51, [2, 100]), o2($V51, [2, 101]), o2($V51, [2, 102]), o2($V51, [2, 103]), o2($V51, [2, 104]), { 23: 147, 73: $Vx }, { 23: 149, 60: 148, 73: $Vx }, { 73: [2, 68] }, { 73: [2, 69] }, { 58: 150, 104: $V61 }, { 58: 152, 104: $V61 }, { 58: 153, 104: $V61 }, { 58: 154, 104: $V61 }, { 4: [1, 157], 5: [1, 159], 12: 156, 13: 158, 17: [1, 155], 51: $Vp, 53: $Vq, 54: $Vr }, { 5: [1, 160] }, o2($Vy, [2, 20]), o2($Vy, [2, 21]), o2($Vy, [2, 23]), o2($Vy, [2, 24]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 17: [1, 161], 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 17: [1, 162], 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 17: [1, 163], 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, { 17: [1, 164] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 17: [2, 47], 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 50: [1, 165], 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, { 17: [1, 166] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 17: [2, 45], 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 49: [1, 167], 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, { 17: [1, 168] }, { 17: [1, 169] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 17: [2, 43], 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 48: [1, 170], 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 13: 13, 14: $V7, 15: $V8, 17: [1, 171], 18: 16, 19: $V9, 22: $Va, 23: 41, 24: $Vb, 25: 20, 26: 21, 27: 22, 28: 23, 29: 24, 30: $Vc, 31: $Vd, 32: $Ve, 34: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 40: $Vk, 42: $Vl, 44: $Vm, 45: $Vn, 47: $Vo, 51: $Vp, 53: $Vq, 54: $Vr, 56: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 73: $Vx }, { 16: [1, 172] }, o2($Vy, [2, 50]), { 16: [1, 173] }, o2($Vy, [2, 55]), o2($V41, [2, 76]), { 76: [1, 174] }, { 16: [1, 175] }, o2($Vy, [2, 52]), { 16: [1, 176] }, o2($Vy, [2, 57]), o2($Vy, [2, 53]), { 23: 177, 73: $Vx }, { 23: 178, 73: $Vx }, { 23: 179, 73: $Vx }, { 58: 180, 104: $V61 }, { 23: 181, 72: [1, 182], 73: $Vx }, { 58: 183, 104: $V61 }, { 58: 184, 104: $V61 }, { 66: [1, 185], 104: [2, 67] }, { 5: [2, 60] }, { 5: [2, 105] }, { 5: [2, 61] }, { 5: [2, 62] }, { 5: [2, 63] }, o2($Vy, [2, 17]), o2($V$, [2, 11]), { 13: 186, 51: $Vp, 53: $Vq, 54: $Vr }, o2($V$, [2, 13]), o2($V$, [2, 14]), o2($Vy, [2, 19]), o2($Vy, [2, 35]), o2($Vy, [2, 36]), o2($Vy, [2, 37]), o2($Vy, [2, 38]), { 16: [1, 187] }, o2($Vy, [2, 39]), { 16: [1, 188] }, o2($Vy, [2, 40]), o2($Vy, [2, 41]), { 16: [1, 189] }, o2($Vy, [2, 42]), { 5: [1, 190] }, { 5: [1, 191] }, { 77: [1, 192] }, { 5: [1, 193] }, { 5: [1, 194] }, { 58: 195, 104: $V61 }, { 58: 196, 104: $V61 }, { 58: 197, 104: $V61 }, { 5: [2, 75] }, { 58: 198, 104: $V61 }, { 23: 199, 73: $Vx }, { 5: [2, 58] }, { 5: [2, 59] }, { 23: 200, 73: $Vx }, o2($V$, [2, 12]), o2($V11, $V3, { 7: 124, 41: 201 }), o2($V21, $V3, { 7: 126, 43: 202 }), o2($V31, $V3, { 7: 129, 46: 203 }), o2($Vy, [2, 49]), o2($Vy, [2, 54]), o2($V41, [2, 77]), o2($Vy, [2, 51]), o2($Vy, [2, 56]), { 5: [2, 70] }, { 5: [2, 71] }, { 5: [2, 72] }, { 5: [2, 73] }, { 58: 204, 104: $V61 }, { 104: [2, 66] }, { 17: [2, 48] }, { 17: [2, 46] }, { 17: [2, 44] }, { 5: [2, 74] }],
          defaultActions: { 5: [2, 1], 6: [2, 2], 108: [2, 68], 109: [2, 69], 150: [2, 60], 151: [2, 105], 152: [2, 61], 153: [2, 62], 154: [2, 63], 180: [2, 75], 183: [2, 58], 184: [2, 59], 195: [2, 70], 196: [2, 71], 197: [2, 72], 198: [2, 73], 200: [2, 66], 201: [2, 48], 202: [2, 46], 203: [2, 44], 204: [2, 74] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  return 5;
                  break;
                case 1:
                  break;
                case 2:
                  break;
                case 3:
                  break;
                case 4:
                  break;
                case 5:
                  break;
                case 6:
                  return 20;
                  break;
                case 7:
                  this.begin("CONFIG");
                  return 75;
                  break;
                case 8:
                  return 76;
                  break;
                case 9:
                  this.popState();
                  this.begin("ALIAS");
                  return 77;
                  break;
                case 10:
                  this.popState();
                  this.popState();
                  return 77;
                  break;
                case 11:
                  yy_.yytext = yy_.yytext.trim();
                  return 73;
                  break;
                case 12:
                  yy_.yytext = yy_.yytext.trim();
                  this.begin("ALIAS");
                  return 73;
                  break;
                case 13:
                  yy_.yytext = yy_.yytext.trim();
                  this.popState();
                  return 73;
                  break;
                case 14:
                  this.popState();
                  return 10;
                  break;
                case 15:
                  yy_.yytext = yy_.yytext.trim();
                  this.popState();
                  return 10;
                  break;
                case 16:
                  this.begin("LINE");
                  return 15;
                  break;
                case 17:
                  this.begin("ID");
                  return 51;
                  break;
                case 18:
                  this.begin("ID");
                  return 53;
                  break;
                case 19:
                  return 14;
                  break;
                case 20:
                  this.begin("ID");
                  return 54;
                  break;
                case 21:
                  this.popState();
                  this.popState();
                  this.begin("LINE");
                  return 52;
                  break;
                case 22:
                  this.popState();
                  this.popState();
                  return 5;
                  break;
                case 23:
                  this.begin("LINE");
                  return 37;
                  break;
                case 24:
                  this.begin("LINE");
                  return 38;
                  break;
                case 25:
                  this.begin("LINE");
                  return 39;
                  break;
                case 26:
                  this.begin("LINE");
                  return 40;
                  break;
                case 27:
                  this.begin("LINE");
                  return 50;
                  break;
                case 28:
                  this.begin("LINE");
                  return 42;
                  break;
                case 29:
                  this.begin("LINE");
                  return 44;
                  break;
                case 30:
                  this.begin("LINE");
                  return 49;
                  break;
                case 31:
                  this.begin("LINE");
                  return 45;
                  break;
                case 32:
                  this.begin("LINE");
                  return 48;
                  break;
                case 33:
                  this.begin("LINE");
                  return 47;
                  break;
                case 34:
                  this.popState();
                  return 16;
                  break;
                case 35:
                  return 17;
                  break;
                case 36:
                  return 67;
                  break;
                case 37:
                  return 68;
                  break;
                case 38:
                  return 61;
                  break;
                case 39:
                  return 62;
                  break;
                case 40:
                  return 63;
                  break;
                case 41:
                  return 64;
                  break;
                case 42:
                  return 59;
                  break;
                case 43:
                  return 56;
                  break;
                case 44:
                  this.begin("ID");
                  return 22;
                  break;
                case 45:
                  this.begin("ID");
                  return 24;
                  break;
                case 46:
                  return 30;
                  break;
                case 47:
                  return 31;
                  break;
                case 48:
                  this.begin("acc_title");
                  return 32;
                  break;
                case 49:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 50:
                  this.begin("acc_descr");
                  return 34;
                  break;
                case 51:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 52:
                  this.begin("acc_descr_multiline");
                  break;
                case 53:
                  this.popState();
                  break;
                case 54:
                  return "acc_descr_multiline_value";
                  break;
                case 55:
                  return 6;
                  break;
                case 56:
                  return 19;
                  break;
                case 57:
                  return 21;
                  break;
                case 58:
                  return 66;
                  break;
                case 59:
                  return 5;
                  break;
                case 60:
                  yy_.yytext = yy_.yytext.trim();
                  return 73;
                  break;
                case 61:
                  return 80;
                  break;
                case 62:
                  return 97;
                  break;
                case 63:
                  return 98;
                  break;
                case 64:
                  return 99;
                  break;
                case 65:
                  return 78;
                  break;
                case 66:
                  return 79;
                  break;
                case 67:
                  return 100;
                  break;
                case 68:
                  return 101;
                  break;
                case 69:
                  return 102;
                  break;
                case 70:
                  return 103;
                  break;
                case 71:
                  return 85;
                  break;
                case 72:
                  return 86;
                  break;
                case 73:
                  return 87;
                  break;
                case 74:
                  return 88;
                  break;
                case 75:
                  return 93;
                  break;
                case 76:
                  return 94;
                  break;
                case 77:
                  return 95;
                  break;
                case 78:
                  return 96;
                  break;
                case 79:
                  return 81;
                  break;
                case 80:
                  return 82;
                  break;
                case 81:
                  return 83;
                  break;
                case 82:
                  return 84;
                  break;
                case 83:
                  return 89;
                  break;
                case 84:
                  return 90;
                  break;
                case 85:
                  return 91;
                  break;
                case 86:
                  return 92;
                  break;
                case 87:
                  return 104;
                  break;
                case 88:
                  return 104;
                  break;
                case 89:
                  return 70;
                  break;
                case 90:
                  return 71;
                  break;
                case 91:
                  return 72;
                  break;
                case 92:
                  return 5;
                  break;
                case 93:
                  return 10;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:([0-9]+(\.[0-9]{1,2})?|\.[0-9]{1,2})(?=[ \n]+))/i, /^(?:@\{)/i, /^(?:[^\}]+)/i, /^(?:\}(?=\s+as\s))/i, /^(?:\})/i, /^(?:[^\<->\->:\n,;@\s]+(?=@\{))/i, /^(?:[^<>:\n,;@\s]+(?=\s+as\s))/i, /^(?:[^<>:\n,;@]+(?=\s*[\n;#]|$))/i, /^(?:[^<>:\n,;@]*<[^\n]*)/i, /^(?:[^\n]+)/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:create\b)/i, /^(?:destroy\b)/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:par_over\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:title:\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\/\\\+\()\+<\->\->:\n,;]+((?!(-x|--x|-\)|--\)|-\|\\|-\\|-\/|-\/\/|-\|\/|\/\|-|\\\|-|\/\/-|\\\\-|\/\|-|--\|\\|--|\(\)))[\-]*[^\+<\->\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:<<->>)/i, /^(?:-->>)/i, /^(?:<<-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?:--\|\\)/i, /^(?:--\|\/)/i, /^(?:--\\\\)/i, /^(?:--\/\/)/i, /^(?:\/\|--)/i, /^(?:\\\|--)/i, /^(?:\/\/--)/i, /^(?:\\\\--)/i, /^(?:-\|\\)/i, /^(?:-\|\/)/i, /^(?:-\\\\)/i, /^(?:-\/\/)/i, /^(?:\/\|-)/i, /^(?:\\\|-)/i, /^(?:\/\/-)/i, /^(?:\\\\-)/i, /^(?::(?:(?:no)?wrap)?[^#\n;]*)/i, /^(?::)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:\(\))/i, /^(?:$)/i, /^(?:.)/i],
            conditions: { "acc_descr_multiline": { "rules": [53, 54], "inclusive": false }, "acc_descr": { "rules": [51], "inclusive": false }, "acc_title": { "rules": [49], "inclusive": false }, "ID": { "rules": [2, 3, 7, 11, 12, 13, 14, 15], "inclusive": false }, "ALIAS": { "rules": [2, 3, 21, 22], "inclusive": false }, "LINE": { "rules": [2, 3, 34], "inclusive": false }, "CONFIG": { "rules": [8, 9, 10], "inclusive": false }, "CONFIG_DATA": { "rules": [], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 4, 5, 6, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 52, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser11.parser = parser11;
      sequenceDiagram_default = parser11;
    }
  });

  // src/diagrams/sequence/sequenceDb.ts
  var LINETYPE2, ARROWTYPE2, PLACEMENT2, PARTICIPANT_TYPE, SequenceDB;
  var init_sequenceDb = __esm({
    "src/diagrams/sequence/sequenceDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_js_yaml();
      init_logger();
      init_imperativeState();
      init_common();
      init_commonDb();
      LINETYPE2 = {
        SOLID: 0,
        DOTTED: 1,
        NOTE: 2,
        SOLID_CROSS: 3,
        DOTTED_CROSS: 4,
        SOLID_OPEN: 5,
        DOTTED_OPEN: 6,
        LOOP_START: 10,
        LOOP_END: 11,
        ALT_START: 12,
        ALT_ELSE: 13,
        ALT_END: 14,
        OPT_START: 15,
        OPT_END: 16,
        ACTIVE_START: 17,
        ACTIVE_END: 18,
        PAR_START: 19,
        PAR_AND: 20,
        PAR_END: 21,
        RECT_START: 22,
        RECT_END: 23,
        SOLID_POINT: 24,
        DOTTED_POINT: 25,
        AUTONUMBER: 26,
        CRITICAL_START: 27,
        CRITICAL_OPTION: 28,
        CRITICAL_END: 29,
        BREAK_START: 30,
        BREAK_END: 31,
        PAR_OVER_START: 32,
        BIDIRECTIONAL_SOLID: 33,
        BIDIRECTIONAL_DOTTED: 34,
        SOLID_TOP: 41,
        SOLID_BOTTOM: 42,
        STICK_TOP: 43,
        STICK_BOTTOM: 44,
        SOLID_ARROW_TOP_REVERSE: 45,
        SOLID_ARROW_BOTTOM_REVERSE: 46,
        STICK_ARROW_TOP_REVERSE: 47,
        STICK_ARROW_BOTTOM_REVERSE: 48,
        SOLID_TOP_DOTTED: 51,
        SOLID_BOTTOM_DOTTED: 52,
        STICK_TOP_DOTTED: 53,
        STICK_BOTTOM_DOTTED: 54,
        SOLID_ARROW_TOP_REVERSE_DOTTED: 55,
        SOLID_ARROW_BOTTOM_REVERSE_DOTTED: 56,
        STICK_ARROW_TOP_REVERSE_DOTTED: 57,
        STICK_ARROW_BOTTOM_REVERSE_DOTTED: 58,
        CENTRAL_CONNECTION: 59,
        CENTRAL_CONNECTION_REVERSE: 60,
        CENTRAL_CONNECTION_DUAL: 61
      };
      ARROWTYPE2 = {
        FILLED: 0,
        OPEN: 1
      };
      PLACEMENT2 = {
        LEFTOF: 0,
        RIGHTOF: 1,
        OVER: 2
      };
      PARTICIPANT_TYPE = {
        ACTOR: "actor",
        BOUNDARY: "boundary",
        COLLECTIONS: "collections",
        CONTROL: "control",
        DATABASE: "database",
        ENTITY: "entity",
        PARTICIPANT: "participant",
        QUEUE: "queue"
      };
      SequenceDB = class {
        constructor() {
          this.state = new ImperativeState(() => ({
            prevActor: void 0,
            actors: /* @__PURE__ */ new Map(),
            createdActors: /* @__PURE__ */ new Map(),
            destroyedActors: /* @__PURE__ */ new Map(),
            boxes: [],
            messages: [],
            notes: [],
            sequenceNumbersEnabled: false,
            wrapEnabled: void 0,
            currentBox: void 0,
            lastCreated: void 0,
            lastDestroyed: void 0
          }));
          this.setAccTitle = setAccTitle;
          this.setAccDescription = setAccDescription;
          this.setDiagramTitle = setDiagramTitle;
          this.getAccTitle = getAccTitle;
          this.getAccDescription = getAccDescription;
          this.getDiagramTitle = getDiagramTitle;
          this.apply = this.apply.bind(this);
          this.parseBoxData = this.parseBoxData.bind(this);
          this.parseMessage = this.parseMessage.bind(this);
          this.clear();
          this.setWrap(getConfig2().wrap);
          this.LINETYPE = LINETYPE2;
          this.ARROWTYPE = ARROWTYPE2;
          this.PLACEMENT = PLACEMENT2;
        }
        static {
          __name(this, "SequenceDB");
        }
        addBox(data6) {
          this.state.records.boxes.push({
            name: data6.text,
            wrap: data6.wrap ?? this.autoWrap(),
            fill: data6.color,
            actorKeys: []
          });
          this.state.records.currentBox = this.state.records.boxes.slice(-1)[0];
        }
        addActor(id41, name, description, type3, metadata) {
          let assignedBox = this.state.records.currentBox;
          let doc;
          if (metadata !== void 0) {
            let yamlData;
            if (!metadata.includes("\n")) {
              yamlData = "{\n" + metadata + "\n}";
            } else {
              yamlData = metadata + "\n";
            }
            doc = load(yamlData, { schema: JSON_SCHEMA });
          }
          type3 = doc?.type ?? type3;
          if (doc?.alias && (!description || description.text === name)) {
            description = { text: doc.alias, wrap: description?.wrap, type: type3 };
          }
          const old = this.state.records.actors.get(id41);
          if (old) {
            if (this.state.records.currentBox && old.box && this.state.records.currentBox !== old.box) {
              throw new Error(
                `A same participant should only be defined in one Box: ${old.name} can't be in '${old.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`
              );
            }
            assignedBox = old.box ? old.box : this.state.records.currentBox;
            old.box = assignedBox;
            if (old && name === old.name && description == null) {
              return;
            }
          }
          if (description?.text == null) {
            description = { text: name, type: type3 };
          }
          if (type3 == null || description.text == null) {
            description = { text: name, type: type3 };
          }
          this.state.records.actors.set(id41, {
            box: assignedBox,
            name,
            description: description.text,
            wrap: description.wrap ?? this.autoWrap(),
            prevActor: this.state.records.prevActor,
            links: {},
            properties: {},
            actorCnt: null,
            rectData: null,
            type: type3 ?? "participant"
          });
          if (this.state.records.prevActor) {
            const prevActorInRecords = this.state.records.actors.get(this.state.records.prevActor);
            if (prevActorInRecords) {
              prevActorInRecords.nextActor = id41;
            }
          }
          if (this.state.records.currentBox) {
            this.state.records.currentBox.actorKeys.push(id41);
          }
          this.state.records.prevActor = id41;
        }
        activationCount(part) {
          let i2;
          let count2 = 0;
          if (!part) {
            return 0;
          }
          for (i2 = 0; i2 < this.state.records.messages.length; i2++) {
            if (this.state.records.messages[i2].type === this.LINETYPE.ACTIVE_START && this.state.records.messages[i2].from === part) {
              count2++;
            }
            if (this.state.records.messages[i2].type === this.LINETYPE.ACTIVE_END && this.state.records.messages[i2].from === part) {
              count2--;
            }
          }
          return count2;
        }
        addMessage(idFrom, idTo, message, answer) {
          this.state.records.messages.push({
            id: this.state.records.messages.length.toString(),
            from: idFrom,
            to: idTo,
            message: message.text,
            wrap: message.wrap ?? this.autoWrap(),
            answer
          });
        }
        addSignal(idFrom, idTo, message, messageType, activate = false, centralConnection) {
          if (messageType === this.LINETYPE.ACTIVE_END) {
            const cnt4 = this.activationCount(idFrom ?? "");
            if (cnt4 < 1) {
              const error3 = new Error("Trying to inactivate an inactive participant (" + idFrom + ")");
              error3.hash = {
                text: "->>-",
                token: "->>-",
                line: "1",
                loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
                expected: ["'ACTIVE_PARTICIPANT'"]
              };
              throw error3;
            }
          }
          this.state.records.messages.push({
            id: this.state.records.messages.length.toString(),
            from: idFrom,
            to: idTo,
            message: message?.text ?? "",
            wrap: message?.wrap ?? this.autoWrap(),
            type: messageType,
            activate,
            centralConnection: centralConnection ?? 0
          });
          return true;
        }
        hasAtLeastOneBox() {
          return this.state.records.boxes.length > 0;
        }
        hasAtLeastOneBoxWithTitle() {
          return this.state.records.boxes.some((b3) => b3.name);
        }
        getMessages() {
          return this.state.records.messages;
        }
        getBoxes() {
          return this.state.records.boxes;
        }
        getActors() {
          return this.state.records.actors;
        }
        getCreatedActors() {
          return this.state.records.createdActors;
        }
        getDestroyedActors() {
          return this.state.records.destroyedActors;
        }
        getActor(id41) {
          return this.state.records.actors.get(id41);
        }
        getActorKeys() {
          return [...this.state.records.actors.keys()];
        }
        enableSequenceNumbers() {
          this.state.records.sequenceNumbersEnabled = true;
        }
        disableSequenceNumbers() {
          this.state.records.sequenceNumbersEnabled = false;
        }
        showSequenceNumbers() {
          return this.state.records.sequenceNumbersEnabled;
        }
        setWrap(wrapSetting) {
          this.state.records.wrapEnabled = wrapSetting;
        }
        extractWrap(text4) {
          if (text4 === void 0) {
            return {};
          }
          text4 = text4.trim();
          const wrap3 = /^:?wrap:/.exec(text4) !== null ? true : /^:?nowrap:/.exec(text4) !== null ? false : void 0;
          const cleanedText = (wrap3 === void 0 ? text4 : text4.replace(/^:?(?:no)?wrap:/, "")).trim();
          return { cleanedText, wrap: wrap3 };
        }
        autoWrap() {
          if (this.state.records.wrapEnabled !== void 0) {
            return this.state.records.wrapEnabled;
          }
          return getConfig2().sequence?.wrap ?? false;
        }
        clear() {
          this.state.reset();
          clear();
        }
        parseMessage(str2) {
          const trimmedStr = str2.trim();
          const { wrap: wrap3, cleanedText } = this.extractWrap(trimmedStr);
          const message = {
            text: cleanedText,
            wrap: wrap3
          };
          log.debug(`parseMessage: ${JSON.stringify(message)}`);
          return message;
        }
        // We expect the box statement to be color first then description
        // The color can be rgb,rgba,hsl,hsla, or css code names  #hex codes are not supported for now because of the way the char # is handled
        // We extract first segment as color, the rest of the line is considered as text
        parseBoxData(str2) {
          const match3 = /^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(str2);
          let color2 = match3?.[1] ? match3[1].trim() : "transparent";
          let title2 = match3?.[2] ? match3[2].trim() : void 0;
          if (window?.CSS) {
            if (!window.CSS.supports("color", color2)) {
              color2 = "transparent";
              title2 = str2.trim();
            }
          } else {
            const style3 = new Option().style;
            style3.color = color2;
            if (style3.color !== color2) {
              color2 = "transparent";
              title2 = str2.trim();
            }
          }
          const { wrap: wrap3, cleanedText } = this.extractWrap(title2);
          return {
            text: cleanedText ? sanitizeText(cleanedText, getConfig2()) : void 0,
            color: color2,
            wrap: wrap3
          };
        }
        addNote(actor, placement, message) {
          const note3 = {
            actor,
            placement,
            message: message.text,
            wrap: message.wrap ?? this.autoWrap()
          };
          const actors2 = [].concat(actor, actor);
          this.state.records.notes.push(note3);
          this.state.records.messages.push({
            id: this.state.records.messages.length.toString(),
            from: actors2[0],
            to: actors2[1],
            message: message.text,
            wrap: message.wrap ?? this.autoWrap(),
            type: this.LINETYPE.NOTE,
            placement
          });
        }
        addLinks(actorId, text4) {
          const actor = this.getActor(actorId);
          try {
            let sanitizedText = sanitizeText(text4.text, getConfig2());
            sanitizedText = sanitizedText.replace(/&equals;/g, "=");
            sanitizedText = sanitizedText.replace(/&amp;/g, "&");
            const links3 = JSON.parse(sanitizedText);
            this.insertLinks(actor, links3);
          } catch (e3) {
            log.error("error while parsing actor link text", e3);
          }
        }
        addALink(actorId, text4) {
          const actor = this.getActor(actorId);
          try {
            const links3 = {};
            let sanitizedText = sanitizeText(text4.text, getConfig2());
            const sep2 = sanitizedText.indexOf("@");
            sanitizedText = sanitizedText.replace(/&equals;/g, "=");
            sanitizedText = sanitizedText.replace(/&amp;/g, "&");
            const label = sanitizedText.slice(0, sep2 - 1).trim();
            const link2 = sanitizedText.slice(sep2 + 1).trim();
            links3[label] = link2;
            this.insertLinks(actor, links3);
          } catch (e3) {
            log.error("error while parsing actor link text", e3);
          }
        }
        insertLinks(actor, links3) {
          if (actor.links == null) {
            actor.links = links3;
          } else {
            for (const key in links3) {
              actor.links[key] = links3[key];
            }
          }
        }
        addProperties(actorId, text4) {
          const actor = this.getActor(actorId);
          try {
            const sanitizedText = sanitizeText(text4.text, getConfig2());
            const properties = JSON.parse(sanitizedText);
            this.insertProperties(actor, properties);
          } catch (e3) {
            log.error("error while parsing actor properties text", e3);
          }
        }
        insertProperties(actor, properties) {
          if (actor.properties == null) {
            actor.properties = properties;
          } else {
            for (const key in properties) {
              actor.properties[key] = properties[key];
            }
          }
        }
        boxEnd() {
          this.state.records.currentBox = void 0;
        }
        addDetails(actorId, text4) {
          const actor = this.getActor(actorId);
          const elem = document.getElementById(text4.text);
          try {
            const text5 = elem.innerHTML;
            const details = JSON.parse(text5);
            if (details.properties) {
              this.insertProperties(actor, details.properties);
            }
            if (details.links) {
              this.insertLinks(actor, details.links);
            }
          } catch (e3) {
            log.error("error while parsing actor details text", e3);
          }
        }
        getActorProperty(actor, key) {
          if (actor?.properties !== void 0) {
            return actor.properties[key];
          }
          return void 0;
        }
        // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents
        apply(param) {
          if (Array.isArray(param)) {
            param.forEach((item) => {
              this.apply(item);
            });
          } else {
            switch (param.type) {
              case "sequenceIndex":
                this.state.records.messages.push({
                  id: this.state.records.messages.length.toString(),
                  from: void 0,
                  to: void 0,
                  message: {
                    start: param.sequenceIndex,
                    step: param.sequenceIndexStep,
                    visible: param.sequenceVisible
                  },
                  wrap: false,
                  type: param.signalType
                });
                break;
              case "addParticipant":
                this.addActor(param.actor, param.actor, param.description, param.draw, param.config);
                break;
              case "createParticipant":
                if (this.state.records.actors.has(param.actor)) {
                  throw new Error(
                    "It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior"
                  );
                }
                this.state.records.lastCreated = param.actor;
                this.addActor(param.actor, param.actor, param.description, param.draw, param.config);
                this.state.records.createdActors.set(param.actor, this.state.records.messages.length);
                break;
              case "destroyParticipant":
                this.state.records.lastDestroyed = param.actor;
                this.state.records.destroyedActors.set(param.actor, this.state.records.messages.length);
                break;
              case "activeStart":
                this.addSignal(param.actor, void 0, void 0, param.signalType);
                break;
              case "centralConnection":
                this.addSignal(param.actor, void 0, void 0, param.signalType);
                break;
              case "centralConnectionReverse":
                this.addSignal(param.actor, void 0, void 0, param.signalType);
                break;
              case "activeEnd":
                this.addSignal(param.actor, void 0, void 0, param.signalType);
                break;
              case "addNote":
                this.addNote(param.actor, param.placement, param.text);
                break;
              case "addLinks":
                this.addLinks(param.actor, param.text);
                break;
              case "addALink":
                this.addALink(param.actor, param.text);
                break;
              case "addProperties":
                this.addProperties(param.actor, param.text);
                break;
              case "addDetails":
                this.addDetails(param.actor, param.text);
                break;
              case "addMessage":
                if (this.state.records.lastCreated) {
                  if (param.to !== this.state.records.lastCreated) {
                    throw new Error(
                      "The created participant " + this.state.records.lastCreated.name + " does not have an associated creating message after its declaration. Please check the sequence diagram."
                    );
                  } else {
                    this.state.records.lastCreated = void 0;
                  }
                } else if (this.state.records.lastDestroyed) {
                  if (param.to !== this.state.records.lastDestroyed && param.from !== this.state.records.lastDestroyed) {
                    throw new Error(
                      "The destroyed participant " + this.state.records.lastDestroyed.name + " does not have an associated destroying message after its declaration. Please check the sequence diagram."
                    );
                  } else {
                    this.state.records.lastDestroyed = void 0;
                  }
                }
                this.addSignal(
                  param.from,
                  param.to,
                  param.msg,
                  param.signalType,
                  param.activate,
                  param.centralConnection
                );
                break;
              case "boxStart":
                this.addBox(param.boxData);
                break;
              case "boxEnd":
                this.boxEnd();
                break;
              case "loopStart":
                this.addSignal(void 0, void 0, param.loopText, param.signalType);
                break;
              case "loopEnd":
                this.addSignal(void 0, void 0, void 0, param.signalType);
                break;
              case "rectStart":
                this.addSignal(void 0, void 0, param.color, param.signalType);
                break;
              case "rectEnd":
                this.addSignal(void 0, void 0, void 0, param.signalType);
                break;
              case "optStart":
                this.addSignal(void 0, void 0, param.optText, param.signalType);
                break;
              case "optEnd":
                this.addSignal(void 0, void 0, void 0, param.signalType);
                break;
              case "altStart":
                this.addSignal(void 0, void 0, param.altText, param.signalType);
                break;
              case "else":
                this.addSignal(void 0, void 0, param.altText, param.signalType);
                break;
              case "altEnd":
                this.addSignal(void 0, void 0, void 0, param.signalType);
                break;
              case "setAccTitle":
                setAccTitle(param.text);
                break;
              case "parStart":
                this.addSignal(void 0, void 0, param.parText, param.signalType);
                break;
              case "and":
                this.addSignal(void 0, void 0, param.parText, param.signalType);
                break;
              case "parEnd":
                this.addSignal(void 0, void 0, void 0, param.signalType);
                break;
              case "criticalStart":
                this.addSignal(void 0, void 0, param.criticalText, param.signalType);
                break;
              case "option":
                this.addSignal(void 0, void 0, param.optionText, param.signalType);
                break;
              case "criticalEnd":
                this.addSignal(void 0, void 0, void 0, param.signalType);
                break;
              case "breakStart":
                this.addSignal(void 0, void 0, param.breakText, param.signalType);
                break;
              case "breakEnd":
                this.addSignal(void 0, void 0, void 0, param.signalType);
                break;
            }
          }
        }
        getConfig() {
          return getConfig2().sequence;
        }
      };
    }
  });

  // src/diagrams/sequence/styles.js
  var getStyles10, styles_default9;
  var init_styles9 = __esm({
    "src/diagrams/sequence/styles.js"() {
      "use strict";
      init_diagramAPI();
      getStyles10 = /* @__PURE__ */ __name((options2) => {
        const dropShadow = options2.dropShadow ?? "none";
        const { look } = getConfig2();
        return `.actor {
    stroke: ${options2.actorBorder};
    fill: ${options2.actorBkg};
    stroke-width: ${options2.strokeWidth ?? 1};
  }

  rect.actor.outer-path[data-look="neo"] {
      filter: ${dropShadow};
  }

  rect.note[data-look="neo"] {
      stroke:${options2.noteBorderColor};
      fill:${options2.noteBkgColor};
      filter: ${dropShadow};
  }

  text.actor > tspan {
    fill: ${options2.actorTextColor};
    stroke: none;
  }

  .actor-line {
    stroke: ${options2.actorLineColor};
  }

  .innerArc {
    stroke-width: 1.5;
    stroke-dasharray: none;
  }

  .messageLine0 {
    stroke-width: 1.5;
    stroke-dasharray: none;
    stroke: ${options2.signalColor};
  }

  .messageLine1 {
    stroke-width: 1.5;
    stroke-dasharray: 2, 2;
    stroke: ${options2.signalColor};
  }

  [id$="-arrowhead"] path {
    fill: ${options2.signalColor};
    stroke: ${options2.signalColor};
  }

  .sequenceNumber {
    fill: ${options2.sequenceNumberColor};
  }

  [id$="-sequencenumber"] {
    fill: ${options2.signalColor};
  }

  [id$="-crosshead"] path {
    fill: ${options2.signalColor};
    stroke: ${options2.signalColor};
  }

  .messageText {
    fill: ${options2.signalTextColor};
    stroke: none;
  }

  .labelBox {
    stroke: ${options2.labelBoxBorderColor};
    fill: ${options2.labelBoxBkgColor};
    filter: ${look === "neo" ? dropShadow : "none"};
  }

  .labelText, .labelText > tspan {
    fill: ${options2.labelTextColor};
    stroke: none;
  }

  .loopText, .loopText > tspan {
    fill: ${options2.loopTextColor};
    stroke: none;
  }

  .sectionTitle, .sectionTitle > tspan {
    fill: ${options2.loopTextColor};
    stroke: none;
  }

  .loopLine {
    stroke-width: 2px;
    stroke-dasharray: 2, 2;
    stroke: ${options2.labelBoxBorderColor};
    fill: ${options2.labelBoxBorderColor};
  }

  .note {
    //stroke: #decc93;
    stroke: ${options2.noteBorderColor};
    fill: ${options2.noteBkgColor};
  }

  .noteText, .noteText > tspan {
    fill: ${options2.noteTextColor};
    stroke: none;
    ${options2.noteFontWeight ? `font-weight: ${options2.noteFontWeight};` : ""}
  }

  .activation0 {
    fill: ${options2.activationBkgColor};
    stroke: ${options2.activationBorderColor};
  }

  .activation1 {
    fill: ${options2.activationBkgColor};
    stroke: ${options2.activationBorderColor};
  }

  .activation2 {
    fill: ${options2.activationBkgColor};
    stroke: ${options2.activationBorderColor};
  }

  .actorPopupMenu {
    position: absolute;
  }

  .actorPopupMenuPanel {
    position: absolute;
    fill: ${options2.actorBkg};
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
    filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));
}
  .actor-man circle, line {
    fill: ${options2.actorBkg};
    stroke-width: 2px;
  }

  g rect.rect {
    filter: ${dropShadow};
    stroke: ${options2.nodeBorder};
  }
`;
      }, "getStyles");
      styles_default9 = getStyles10;
    }
  });

  // src/diagrams/sequence/svgDraw.js
  var import_sanitize_url5, ACTOR_TYPE_WIDTH, TOP_ACTOR_CLASS, BOTTOM_ACTOR_CLASS, ACTOR_BOX_CLASS, ACTOR_MAN_FIGURE_CLASS, COLOR_THEMES5, drawRect4, drawPopup, popupMenuToggle, drawKatex, drawText3, drawLabel, actorCnt, fixLifeLineHeights, drawActorTypeParticipant, drawActorTypeCollections, drawActorTypeQueue, drawActorTypeControl, drawActorTypeEntity, drawActorTypeDatabase, drawActorTypeBoundary, drawActorTypeActor, drawActor, drawBox, anchorElement, drawActivation, drawLoop, drawBackgroundRect2, insertDatabaseIcon2, insertComputerIcon2, insertClockIcon2, insertArrowHead2, insertArrowFilledHead2, insertSequenceNumber, insertArrowCrossHead2, insertDropShadow, getTextObj3, getNoteRect2, _drawTextCandidateFunc2, _drawMenuItemTextCandidateFunc, insertSolidTopArrowHead, insertSolidBottomArrowHead, insertStickTopArrowHead, insertStickBottomArrowHead, svgDraw_default2;
  var init_svgDraw2 = __esm({
    "src/diagrams/sequence/svgDraw.js"() {
      "use strict";
      import_sanitize_url5 = __toESM(require_dist(), 1);
      init_config();
      init_utils2();
      init_common();
      init_svgDrawCommon();
      ACTOR_TYPE_WIDTH = 18 * 2;
      TOP_ACTOR_CLASS = "actor-top";
      BOTTOM_ACTOR_CLASS = "actor-bottom";
      ACTOR_BOX_CLASS = "actor-box";
      ACTOR_MAN_FIGURE_CLASS = "actor-man";
      COLOR_THEMES5 = /* @__PURE__ */ new Set(["redux-color", "redux-dark-color"]);
      drawRect4 = /* @__PURE__ */ __name(function(elem, rectData) {
        const rectElement = drawRect(elem, rectData);
        if (getConfig().look === "neo") {
          rectElement.attr("data-look", "neo");
        }
        return rectElement;
      }, "drawRect");
      drawPopup = /* @__PURE__ */ __name(function(elem, actor, minMenuWidth, textAttrs, forceMenus) {
        if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) {
          return { height: 0, width: 0 };
        }
        const links3 = actor.links;
        const actorCnt2 = actor.actorCnt;
        const rectData = actor.rectData;
        var displayValue = "none";
        if (forceMenus) {
          displayValue = "block !important";
        }
        const g2 = elem.append("g");
        g2.attr("id", "actor" + actorCnt2 + "_popup");
        g2.attr("class", "actorPopupMenu");
        g2.attr("display", displayValue);
        var actorClass = "";
        if (rectData.class !== void 0) {
          actorClass = " " + rectData.class;
        }
        let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth;
        const rectElem = g2.append("rect");
        rectElem.attr("class", "actorPopupMenuPanel" + actorClass);
        rectElem.attr("x", rectData.x);
        rectElem.attr("y", rectData.height);
        rectElem.attr("fill", rectData.fill);
        rectElem.attr("stroke", rectData.stroke);
        rectElem.attr("width", menuWidth);
        rectElem.attr("height", rectData.height);
        rectElem.attr("rx", rectData.rx);
        rectElem.attr("ry", rectData.ry);
        if (links3 != null) {
          var linkY = 20;
          for (let key in links3) {
            var linkElem = g2.append("a");
            var sanitizedLink = (0, import_sanitize_url5.sanitizeUrl)(links3[key]);
            linkElem.attr("xlink:href", sanitizedLink);
            linkElem.attr("target", "_blank");
            _drawMenuItemTextCandidateFunc(textAttrs)(
              key,
              linkElem,
              rectData.x + 10,
              rectData.height + linkY,
              menuWidth,
              20,
              { class: "actor" },
              textAttrs
            );
            linkY += 30;
          }
        }
        rectElem.attr("height", linkY);
        return { height: rectData.height + linkY, width: menuWidth };
      }, "drawPopup");
      popupMenuToggle = /* @__PURE__ */ __name(function(popId) {
        return "var pu = document.getElementById('" + popId + "'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }";
      }, "popupMenuToggle");
      drawKatex = /* @__PURE__ */ __name(async function(elem, textData, msgModel = null) {
        let textElem = elem.append("foreignObject");
        const linesSanitized = await renderKatexSanitized(textData.text, getConfig());
        const divElem = textElem.append("xhtml:div").attr("style", "width: fit-content;").attr("xmlns", "http://www.w3.org/1999/xhtml").html(linesSanitized);
        const dim = divElem.node().getBoundingClientRect();
        textElem.attr("height", Math.round(dim.height)).attr("width", Math.round(dim.width));
        if (textData.class === "noteText") {
          const rectElem = elem.node().firstChild;
          rectElem.setAttribute("height", dim.height + 2 * textData.textMargin);
          const rectDim = rectElem.getBBox();
          textElem.attr("x", Math.round(rectDim.x + rectDim.width / 2 - dim.width / 2)).attr("y", Math.round(rectDim.y + rectDim.height / 2 - dim.height / 2));
        } else if (msgModel) {
          let { startx, stopx, starty } = msgModel;
          if (startx > stopx) {
            const temp = startx;
            startx = stopx;
            stopx = temp;
          }
          textElem.attr("x", Math.round(startx + Math.abs(startx - stopx) / 2 - dim.width / 2));
          if (textData.class === "loopText") {
            textElem.attr("y", Math.round(starty));
          } else {
            textElem.attr("y", Math.round(starty - dim.height));
          }
        }
        return [textElem];
      }, "drawKatex");
      drawText3 = /* @__PURE__ */ __name(function(elem, textData) {
        let prevTextHeight = 0;
        let textHeight = 0;
        const lines = textData.text.split(common_default.lineBreakRegex);
        const [_textFontSize, _textFontSizePx] = parseFontSize(textData.fontSize);
        let textElems = [];
        let dy = 0;
        let yfunc = /* @__PURE__ */ __name(() => textData.y, "yfunc");
        if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) {
          switch (textData.valign) {
            case "top":
            case "start":
              yfunc = /* @__PURE__ */ __name(() => Math.round(textData.y + textData.textMargin), "yfunc");
              break;
            case "middle":
            case "center":
              yfunc = /* @__PURE__ */ __name(() => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2), "yfunc");
              break;
            case "bottom":
            case "end":
              yfunc = /* @__PURE__ */ __name(() => Math.round(
                textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin
              ), "yfunc");
              break;
          }
        }
        if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) {
          switch (textData.anchor) {
            case "left":
            case "start":
              textData.x = Math.round(textData.x + textData.textMargin);
              textData.anchor = "start";
              textData.dominantBaseline = "middle";
              textData.alignmentBaseline = "middle";
              break;
            case "middle":
            case "center":
              textData.x = Math.round(textData.x + textData.width / 2);
              textData.anchor = "middle";
              textData.dominantBaseline = "middle";
              textData.alignmentBaseline = "middle";
              break;
            case "right":
            case "end":
              textData.x = Math.round(textData.x + textData.width - textData.textMargin);
              textData.anchor = "end";
              textData.dominantBaseline = "middle";
              textData.alignmentBaseline = "middle";
              break;
          }
        }
        for (let [i2, line2] of lines.entries()) {
          if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) {
            dy = i2 * _textFontSize;
          }
          const textElem = elem.append("text");
          textElem.attr("x", textData.x);
          textElem.attr("y", yfunc());
          if (textData.anchor !== void 0) {
            textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline);
          }
          if (textData.fontFamily !== void 0) {
            textElem.style("font-family", textData.fontFamily);
          }
          if (_textFontSizePx !== void 0) {
            textElem.style("font-size", _textFontSizePx);
          }
          if (textData.fontWeight !== void 0) {
            textElem.style("font-weight", textData.fontWeight);
          }
          if (textData.fill !== void 0) {
            textElem.attr("fill", textData.fill);
          }
          if (textData.class !== void 0) {
            textElem.attr("class", textData.class);
          }
          if (textData.dy !== void 0) {
            textElem.attr("dy", textData.dy);
          } else if (dy !== 0) {
            textElem.attr("dy", dy);
          }
          const text4 = line2 || ZERO_WIDTH_SPACE;
          if (textData.tspan) {
            const span = textElem.append("tspan");
            span.attr("x", textData.x);
            if (textData.fill !== void 0) {
              span.attr("fill", textData.fill);
            }
            span.text(text4);
          } else {
            textElem.text(text4);
          }
          if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) {
            textHeight += (textElem._groups || textElem)[0][0].getBBox().height;
            prevTextHeight = textHeight;
          }
          textElems.push(textElem);
        }
        return textElems;
      }, "drawText");
      drawLabel = /* @__PURE__ */ __name(function(elem, txtObject) {
        function genPoints(x5, y6, width3, height2, cut) {
          return x5 + "," + y6 + " " + (x5 + width3) + "," + y6 + " " + (x5 + width3) + "," + (y6 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y6 + height2) + " " + x5 + "," + (y6 + height2);
        }
        __name(genPoints, "genPoints");
        const polygon2 = elem.append("polygon");
        polygon2.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));
        polygon2.attr("class", "labelBox");
        txtObject.y = txtObject.y + txtObject.height / 2;
        drawText3(elem, txtObject);
        return polygon2;
      }, "drawLabel");
      actorCnt = -1;
      fixLifeLineHeights = /* @__PURE__ */ __name((diagram38, actors2, actorKeys, conf5) => {
        if (!diagram38.select) {
          return;
        }
        actorKeys.forEach((actorKey) => {
          const actor = actors2.get(actorKey);
          const actorDOM = diagram38.select("#actor" + actor.actorCnt);
          if (!conf5.mirrorActors && actor.stopy) {
            actorDOM.attr("y2", actor.stopy + actor.height / 2);
          } else if (conf5.mirrorActors) {
            actorDOM.attr("y2", actor.stopy);
          }
        });
      }, "fixLifeLineHeights");
      drawActorTypeParticipant = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + actor.height;
        const { look, theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray } = themeVariables;
        const boxplusLineGroup = elem.append("g").lower();
        var g2 = boxplusLineGroup;
        if (!isFooter) {
          actorCnt++;
          if (Object.keys(actor.links || {}).length && !conf5.forceMenus) {
            g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer");
          }
          g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          g2 = boxplusLineGroup.append("g");
          actor.actorCnt = actorCnt;
          if (actor.links != null) {
            g2.attr("id", "root-" + actorCnt);
          }
          if (look === "neo") {
            g2.attr("data-look", "neo");
          }
        }
        const rect3 = getNoteRect();
        var cssclass = "actor";
        if (actor.properties?.class) {
          cssclass = actor.properties.class;
        } else {
          rect3.fill = "#eaeaea";
        }
        if (isFooter) {
          cssclass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssclass += ` ${TOP_ACTOR_CLASS}`;
        }
        rect3.x = actor.x;
        rect3.y = actorY;
        rect3.width = actor.width;
        rect3.height = actor.height;
        rect3.class = cssclass;
        rect3.rx = 3;
        rect3.ry = 3;
        rect3.name = actor.name;
        if (look === "neo") {
          rect3.rx = 6;
          rect3.ry = 6;
        }
        const rectElem = drawRect4(g2, rect3);
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          rectElem.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          rectElem.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        }
        if (look === "neo") {
          rectElem.attr("filter", "url(#drop-shadow)");
        }
        actor.rectData = rect3;
        if (actor.properties?.icon) {
          const iconSrc = actor.properties.icon.trim();
          if (iconSrc.charAt(0) === "@") {
            drawEmbeddedImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc.substr(1));
          } else {
            drawImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc);
          }
        }
        if (!isFooter) {
          g2.attr("data-et", "participant");
          g2.attr("data-type", "participant");
          g2.attr("data-id", actor.name);
        }
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          g2,
          rect3.x,
          rect3.y,
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_BOX_CLASS}` },
          conf5
        );
        let height2 = actor.height;
        if (rectElem.node) {
          const bounds4 = rectElem.node().getBBox();
          actor.height = bounds4.height;
          height2 = bounds4.height;
        }
        return height2;
      }, "drawActorTypeParticipant");
      drawActorTypeCollections = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + actor.height;
        const { look, theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray } = themeVariables;
        const boxplusLineGroup = elem.append("g").lower();
        var g2 = boxplusLineGroup;
        if (!isFooter) {
          actorCnt++;
          if (Object.keys(actor.links || {}).length && !conf5.forceMenus) {
            g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer");
          }
          g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          g2 = boxplusLineGroup.append("g");
          actor.actorCnt = actorCnt;
          if (actor.links != null) {
            g2.attr("id", "root-" + actorCnt);
          }
          if (look === "neo") {
            g2.attr("data-look", "neo");
          }
        }
        const rect3 = getNoteRect();
        var cssclass = "actor";
        if (actor.properties?.class) {
          cssclass = actor.properties.class;
        } else {
          rect3.fill = "#eaeaea";
        }
        if (isFooter) {
          cssclass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssclass += ` ${TOP_ACTOR_CLASS}`;
        }
        rect3.x = actor.x;
        rect3.y = actorY;
        rect3.width = actor.width;
        rect3.height = actor.height;
        rect3.class = cssclass;
        rect3.name = actor.name;
        const offset = 6;
        const shadowRect = {
          ...rect3,
          x: rect3.x + (isFooter ? -offset : -offset),
          y: rect3.y + (isFooter ? +offset : +offset),
          class: "actor"
        };
        const rectElem = drawRect4(g2, rect3);
        const stackedRect = drawRect4(g2, shadowRect);
        actor.rectData = rect3;
        if (look === "neo") {
          g2.attr("filter", "url(#drop-shadow)");
        }
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          rectElem.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          rectElem.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
          stackedRect.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          stackedRect.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        }
        if (actor.properties?.icon) {
          const iconSrc = actor.properties.icon.trim();
          if (iconSrc.charAt(0) === "@") {
            drawEmbeddedImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc.substr(1));
          } else {
            drawImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc);
          }
        }
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          g2,
          rect3.x - offset,
          rect3.y + offset,
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_BOX_CLASS}` },
          conf5
        );
        let height2 = actor.height;
        if (rectElem.node) {
          const bounds4 = rectElem.node().getBBox();
          actor.height = bounds4.height;
          height2 = bounds4.height;
        }
        if (!isFooter) {
          g2.attr("data-et", "participant");
          g2.attr("data-type", "collections");
          g2.attr("data-id", actor.name);
        }
        return height2;
      }, "drawActorTypeCollections");
      drawActorTypeQueue = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + actor.height;
        const { look, theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray } = themeVariables;
        const boxplusLineGroup = elem.append("g").lower();
        let g2 = boxplusLineGroup;
        if (!isFooter) {
          actorCnt++;
          if (Object.keys(actor.links || {}).length && !conf5.forceMenus) {
            g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer");
          }
          g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          g2 = boxplusLineGroup.append("g");
          actor.actorCnt = actorCnt;
          if (actor.links != null) {
            g2.attr("id", "root-" + actorCnt);
          }
          if (look === "neo") {
            g2.attr("data-look", "neo");
          }
        }
        const rect3 = getNoteRect();
        let cssclass = "actor";
        if (actor.properties?.class) {
          cssclass = actor.properties.class;
        } else {
          rect3.fill = "#eaeaea";
        }
        if (isFooter) {
          cssclass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssclass += ` ${TOP_ACTOR_CLASS}`;
        }
        g2.attr("class", cssclass);
        rect3.x = actor.x;
        rect3.y = actorY;
        rect3.width = actor.width;
        rect3.height = actor.height;
        rect3.name = actor.name;
        const ry = rect3.height / 2;
        const rx = ry / (2.5 + rect3.height / 50);
        const cylinderGroup = g2.append("g");
        const cylinderArc = g2.append("g");
        const cylinderPath = `M ${rect3.x},${rect3.y + ry}
    a ${rx},${ry} 0 0 0 0,${rect3.height}
    h ${rect3.width - 2 * rx}
    a ${rx},${ry} 0 0 0 0,-${rect3.height}
    Z
  `;
        cylinderGroup.append("path").attr("d", cylinderPath);
        cylinderArc.append("path").attr(
          "d",
          `M ${rect3.x},${rect3.y + ry}
      a ${rx},${ry} 0 0 0 0,${rect3.height}`
        );
        cylinderGroup.attr("transform", `translate(${rx}, ${-(rect3.height / 2)})`);
        cylinderArc.attr("transform", `translate(${rect3.width - rx}, ${-rect3.height / 2})`);
        actor.rectData = rect3;
        if (look === "neo") {
          cylinderGroup.attr("filter", "url(#drop-shadow)");
        }
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          cylinderGroup.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          cylinderGroup.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
          cylinderArc.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          cylinderArc.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        }
        if (actor.properties?.icon) {
          const iconSrc = actor.properties.icon.trim();
          const iconX = rect3.x + rect3.width - 20;
          const iconY = rect3.y + 10;
          if (iconSrc.charAt(0) === "@") {
            drawEmbeddedImage(g2, iconX, iconY, iconSrc.substr(1));
          } else {
            drawImage(g2, iconX, iconY, iconSrc);
          }
        }
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          g2,
          rect3.x,
          rect3.y,
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_BOX_CLASS}` },
          conf5
        );
        let height2 = actor.height;
        const lastPath = cylinderGroup.select("path:last-child");
        if (lastPath.node()) {
          const bounds4 = lastPath.node().getBBox();
          actor.height = bounds4.height;
          height2 = bounds4.height;
        }
        if (!isFooter) {
          g2.attr("data-et", "participant");
          g2.attr("data-type", "queue");
          g2.attr("data-id", actor.name);
        }
        return height2;
      }, "drawActorTypeQueue");
      drawActorTypeControl = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, diagramId3, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + 75;
        const { look, theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray, actorBorder, actorBkg } = themeVariables;
        const line2 = elem.append("g").lower();
        if (!isFooter) {
          actorCnt++;
          line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          actor.actorCnt = actorCnt;
        }
        const actElem = elem.append("g");
        let cssClass = ACTOR_MAN_FIGURE_CLASS;
        if (isFooter) {
          cssClass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssClass += ` ${TOP_ACTOR_CLASS}`;
        }
        actElem.attr("class", cssClass);
        actElem.attr("name", actor.name);
        const rect3 = getNoteRect();
        rect3.x = actor.x;
        rect3.y = actorY;
        rect3.fill = "#eaeaea";
        rect3.width = actor.width;
        rect3.height = actor.height;
        rect3.class = "actor";
        const cx = actor.x + actor.width / 2;
        const cy = actorY + 32;
        const r2 = 22;
        actElem.append("defs").append("marker").attr("id", diagramId3 + "-filled-head-control").attr("refX", 11).attr("refY", 5.8).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "172.5").attr("stroke-width", 1.2).append("path").attr("d", "M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z");
        actElem.append("circle").attr("cx", cx).attr("cy", cy).attr("r", r2).attr("filter", `${look === "neo" ? "url(#drop-shadow)" : ""}`);
        actElem.append("line").attr("marker-end", "url(#" + diagramId3 + "-filled-head-control)").attr("transform", `translate(${cx}, ${cy - r2})`);
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          actElem.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          actElem.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        } else {
          actElem.style("stroke", actorBorder);
          actElem.style("fill", actorBkg);
        }
        const bounds4 = actElem.node().getBBox();
        actor.height = bounds4.height + 2 * (conf5?.sequence?.labelBoxHeight ?? 0);
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          actElem,
          rect3.x,
          rect3.y + r2 + (!isFooter ? 12 : 5),
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },
          conf5
        );
        if (!isFooter) {
          actElem.attr("data-et", "participant");
          actElem.attr("data-type", "control");
          actElem.attr("data-id", actor.name);
        }
        return actor.height;
      }, "drawActorTypeControl");
      drawActorTypeEntity = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + 75;
        const { look, theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray } = themeVariables;
        const line2 = elem.append("g").lower();
        const actElem = elem.append("g");
        let cssClass = "actor";
        if (isFooter) {
          cssClass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssClass += ` ${TOP_ACTOR_CLASS}`;
        }
        actElem.attr("class", cssClass);
        actElem.attr("name", actor.name);
        const rect3 = getNoteRect();
        rect3.x = actor.x;
        rect3.y = actorY;
        rect3.fill = "#eaeaea";
        rect3.width = actor.width;
        rect3.height = actor.height;
        rect3.class = "actor";
        const cx = actor.x + actor.width / 2;
        const cy = actorY + (!isFooter ? 25 : 10);
        const r2 = 22;
        actElem.append("circle").attr("cx", cx).attr("cy", cy).attr("r", r2).attr("width", actor.width).attr("height", actor.height);
        actElem.append("line").attr("x1", cx - r2).attr("x2", cx + r2).attr("y1", cy + r2).attr("y2", cy + r2).attr("stroke-width", 2);
        if (look === "neo") {
          actElem.attr("filter", "url(#drop-shadow)");
        }
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          actElem.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          actElem.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        }
        const bounds4 = actElem.node().getBBox();
        actor.height = bounds4.height + (conf5?.sequence?.labelBoxHeight ?? 0);
        if (!isFooter) {
          actorCnt++;
          line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          actor.actorCnt = actorCnt;
        }
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          actElem,
          rect3.x,
          rect3.y + (!isFooter ? 30 : 15),
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },
          conf5
        );
        if (!isFooter) {
          actElem.attr("transform", `translate(${0}, ${r2 / 2 - 5})`);
          actElem.attr("data-et", "participant");
          actElem.attr("data-type", "entity");
          actElem.attr("data-id", actor.name);
        } else {
          actElem.attr("transform", `translate(${0}, ${r2})`);
        }
        return actor.height;
      }, "drawActorTypeEntity");
      drawActorTypeDatabase = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + actor.height + 2 * conf5.boxTextMargin;
        const { theme, themeVariables, look } = conf5;
        const { bkgColorArray, borderColorArray, actorBorder } = themeVariables;
        const boxplusLineGroup = elem.append("g").lower();
        let g2 = boxplusLineGroup;
        if (!isFooter) {
          actorCnt++;
          if (Object.keys(actor.links || {}).length && !conf5.forceMenus) {
            g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer");
          }
          g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          g2 = boxplusLineGroup.append("g");
          actor.actorCnt = actorCnt;
          if (actor.links != null) {
            g2.attr("id", "root-" + actorCnt);
          }
          if (look === "neo") {
            g2.attr("data-look", "neo");
          }
        }
        const rect3 = getNoteRect();
        let cssclass = "actor";
        if (actor.properties?.class) {
          cssclass = actor.properties.class;
        } else {
          rect3.fill = "#eaeaea";
        }
        if (isFooter) {
          cssclass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssclass += ` ${TOP_ACTOR_CLASS}`;
        }
        rect3.x = actor.x;
        rect3.y = actorY;
        rect3.width = actor.width;
        rect3.height = actor.height;
        rect3.class = cssclass;
        rect3.name = actor.name;
        rect3.x = actor.x;
        rect3.y = actorY;
        const w4 = rect3.width / 3;
        const h3 = rect3.width / 3;
        const rx = w4 / 2;
        const ry = rx / (2.5 + w4 / 50);
        const cylinderGroup = g2.append("g");
        cylinderGroup.attr("class", cssclass);
        const d3 = `
  M ${rect3.x},${rect3.y + ry}
  a ${rx},${ry} 0 0 0 ${w4},0
  a ${rx},${ry} 0 0 0 -${w4},0
  l 0,${h3 - 2 * ry}
  a ${rx},${ry} 0 0 0 ${w4},0
  l 0,-${h3 - 2 * ry}
`;
        cylinderGroup.append("path").attr("d", d3);
        if (look === "neo") {
          cylinderGroup.attr("filter", "url(#drop-shadow)");
        }
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          cylinderGroup.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          cylinderGroup.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        } else {
          cylinderGroup.style("stroke", actorBorder);
        }
        cylinderGroup.attr("transform", `translate(${w4}, ${ry})`);
        actor.rectData = rect3;
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          g2,
          rect3.x,
          rect3.y + 35,
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_BOX_CLASS}` },
          conf5
        );
        const lastPath = cylinderGroup.select("path:last-child");
        if (lastPath.node()) {
          const bounds4 = lastPath.node().getBBox();
          actor.height = bounds4.height + (conf5.sequence.labelBoxHeight ?? 0);
        }
        if (!isFooter) {
          g2.attr("data-et", "participant");
          g2.attr("data-type", "database");
          g2.attr("data-id", actor.name);
        }
        return actor.height;
      }, "drawActorTypeDatabase");
      drawActorTypeBoundary = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + 80;
        const radius2 = 22;
        const line2 = elem.append("g").lower();
        const { look, theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray, actorBorder } = themeVariables;
        if (!isFooter) {
          actorCnt++;
          line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          actor.actorCnt = actorCnt;
        }
        const actElem = elem.append("g");
        let cssClass = ACTOR_MAN_FIGURE_CLASS;
        if (isFooter) {
          cssClass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssClass += ` ${TOP_ACTOR_CLASS}`;
        }
        actElem.attr("class", cssClass);
        actElem.attr("name", actor.name);
        const rect3 = getNoteRect();
        rect3.x = actor.x;
        rect3.y = actorY;
        rect3.fill = "#eaeaea";
        rect3.width = actor.width;
        rect3.height = actor.height;
        rect3.class = "actor";
        actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", actor.x + actor.width / 2 - radius2 * 2.5).attr("y1", actorY + 12).attr("x2", actor.x + actor.width / 2 - 15).attr("y2", actorY + 12);
        actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", actor.x + actor.width / 2 - radius2 * 2.5).attr("y1", actorY + 2).attr("x2", actor.x + actor.width / 2 - radius2 * 2.5).attr("y2", actorY + 22);
        actElem.append("circle").attr("cx", actor.x + actor.width / 2).attr("cy", actorY + 12).attr("r", radius2);
        if (look === "neo") {
          actElem.attr("filter", "url(#drop-shadow)");
        }
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          actElem.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          actElem.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        } else {
          actElem.style("stroke", actorBorder);
        }
        const bounds4 = actElem.node().getBBox();
        actor.height = bounds4.height + (conf5.sequence.labelBoxHeight ?? 0);
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          actElem,
          rect3.x,
          rect3.y + 15,
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },
          conf5
        );
        actElem.attr("transform", `translate(0,${radius2 / 2 + 10})`);
        if (!isFooter) {
          actElem.attr("data-et", "participant");
          actElem.attr("data-type", "boundary");
          actElem.attr("data-id", actor.name);
        }
        return actor.height;
      }, "drawActorTypeBoundary");
      drawActorTypeActor = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter, actorIndexMap) {
        const actorY = isFooter ? actor.stopy : actor.starty;
        const center4 = actor.x + actor.width / 2;
        const centerY = actorY + 80;
        const { look, theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray, actorBorder } = themeVariables;
        const line2 = elem.append("g").lower();
        if (!isFooter) {
          actorCnt++;
          line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name).attr("data-et", "life-line").attr("data-id", actor.name);
          actor.actorCnt = actorCnt;
        }
        const actElem = elem.append("g");
        let cssClass = ACTOR_MAN_FIGURE_CLASS;
        if (isFooter) {
          cssClass += ` ${BOTTOM_ACTOR_CLASS}`;
        } else {
          cssClass += ` ${TOP_ACTOR_CLASS}`;
        }
        actElem.attr("class", cssClass);
        actElem.attr("name", actor.name);
        if (!isFooter) {
          actElem.attr("data-et", "participant").attr("data-type", "actor").attr("data-id", actor.name);
        }
        const scale3 = look === "neo" ? 0.5 : 1;
        const adjustedActorY = look === "neo" ? actorY + (1 - scale3) * 30 : actorY;
        actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center4).attr("y1", adjustedActorY + 25 * scale3).attr("x2", center4).attr("y2", adjustedActorY + 45 * scale3);
        actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center4 - ACTOR_TYPE_WIDTH / 2 * scale3).attr("y1", adjustedActorY + 33 * scale3).attr("x2", center4 + ACTOR_TYPE_WIDTH / 2 * scale3).attr("y2", adjustedActorY + 33 * scale3);
        actElem.append("line").attr("x1", center4 - ACTOR_TYPE_WIDTH / 2 * scale3).attr("y1", adjustedActorY + 60 * scale3).attr("x2", center4).attr("y2", adjustedActorY + 45 * scale3);
        actElem.append("line").attr("x1", center4).attr("y1", adjustedActorY + 45 * scale3).attr("x2", center4 + (ACTOR_TYPE_WIDTH / 2 - 2) * scale3).attr("y2", adjustedActorY + 60 * scale3);
        const circle6 = actElem.append("circle");
        circle6.attr("cx", actor.x + actor.width / 2);
        circle6.attr("cy", adjustedActorY + 10 * scale3);
        circle6.attr("r", 15 * scale3);
        circle6.attr("width", actor.width * scale3);
        circle6.attr("height", actor.height * scale3);
        const bounds4 = actElem.node().getBBox();
        actor.height = bounds4.height;
        const rect3 = getNoteRect();
        rect3.x = actor.x;
        rect3.y = adjustedActorY;
        rect3.fill = "#eaeaea";
        rect3.width = actor.width;
        rect3.height = actor.height / scale3;
        rect3.class = "actor";
        rect3.rx = 3;
        rect3.ry = 3;
        const actorCount = actorIndexMap.get(actor.name) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          actElem.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          actElem.style("fill", bkgColorArray[actorCount % borderColorArray.length]);
        } else {
          actElem.style("stroke", actorBorder);
        }
        _drawTextCandidateFunc2(conf5, hasKatex(actor.description))(
          actor.description,
          actElem,
          rect3.x,
          adjustedActorY + 35 * scale3 - (look === "neo" ? 10 : 0),
          rect3.width,
          rect3.height,
          { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },
          conf5
        );
        return actor.height;
      }, "drawActorTypeActor");
      drawActor = /* @__PURE__ */ __name(async function(elem, actor, conf5, isFooter, diagramId3, diagObj, actorIndexMap) {
        const resolvedActorIndexMap = actorIndexMap ?? new Map(
          [...diagObj.db.getActors().values()].map((participant, index) => [participant.name, index])
        );
        switch (actor.type) {
          case "actor":
            return await drawActorTypeActor(elem, actor, conf5, isFooter, resolvedActorIndexMap);
          case "participant":
            return await drawActorTypeParticipant(elem, actor, conf5, isFooter, resolvedActorIndexMap);
          case "boundary":
            return await drawActorTypeBoundary(elem, actor, conf5, isFooter, resolvedActorIndexMap);
          case "control":
            return await drawActorTypeControl(
              elem,
              actor,
              conf5,
              isFooter,
              diagramId3,
              resolvedActorIndexMap
            );
          case "entity":
            return await drawActorTypeEntity(elem, actor, conf5, isFooter, resolvedActorIndexMap);
          case "database":
            return await drawActorTypeDatabase(elem, actor, conf5, isFooter, resolvedActorIndexMap);
          case "collections":
            return await drawActorTypeCollections(elem, actor, conf5, isFooter, resolvedActorIndexMap);
          case "queue":
            return await drawActorTypeQueue(elem, actor, conf5, isFooter, resolvedActorIndexMap);
        }
      }, "drawActor");
      drawBox = /* @__PURE__ */ __name(function(elem, box, conf5) {
        const boxplusTextGroup = elem.append("g");
        const g2 = boxplusTextGroup;
        drawBackgroundRect2(g2, box);
        if (box.name) {
          _drawTextCandidateFunc2(conf5)(
            box.name,
            g2,
            box.x,
            box.y + conf5.boxTextMargin + (box.textMaxHeight || 0) / 2,
            box.width,
            0,
            { class: "text" },
            conf5
          );
        }
        g2.lower();
      }, "drawBox");
      anchorElement = /* @__PURE__ */ __name(function(elem) {
        return elem.append("g");
      }, "anchorElement");
      drawActivation = /* @__PURE__ */ __name(function(_elem, bounds4, verticalPos, conf5, actorActivations2, diagObj, actorIndexMap) {
        const { theme, themeVariables } = conf5;
        const { bkgColorArray, borderColorArray, mainBkg } = themeVariables;
        const rect3 = getNoteRect();
        const g2 = bounds4.anchored;
        const actor = bounds4.actor;
        rect3.x = bounds4.startx;
        rect3.y = bounds4.starty;
        rect3.class = "activation" + actorActivations2 % 3;
        rect3.width = bounds4.stopx - bounds4.startx;
        rect3.height = verticalPos - bounds4.starty;
        const rectElem = drawRect4(g2, rect3);
        const resolvedActorIndexMap = actorIndexMap ?? new Map(
          [...diagObj.db.getActors().values()].map((participant, index) => [participant.name, index])
        );
        const actorCount = resolvedActorIndexMap.get(actor) ?? 0;
        if (COLOR_THEMES5.has(theme)) {
          rectElem.style("stroke", borderColorArray[actorCount % borderColorArray.length]);
          rectElem.style("fill", bkgColorArray[actorCount % borderColorArray.length] ?? mainBkg);
        }
      }, "drawActivation");
      drawLoop = /* @__PURE__ */ __name(async function(elem, loopModel, labelText, conf5, msg) {
        const {
          boxMargin,
          boxTextMargin,
          labelBoxHeight,
          labelBoxWidth,
          messageFontFamily: fontFamily,
          messageFontSize: fontSize,
          messageFontWeight: fontWeight
        } = conf5;
        const g2 = elem.append("g").attr("data-et", "control-structure").attr("data-id", "i" + msg.id);
        const drawLoopLine = /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) {
          return g2.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine");
        }, "drawLoopLine");
        drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty);
        drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy);
        drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy);
        drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy);
        if (loopModel.sections !== void 0) {
          loopModel.sections.forEach(function(item) {
            drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style(
              "stroke-dasharray",
              "3, 3"
            );
          });
        }
        let txt = getTextObj();
        txt.text = labelText;
        txt.x = loopModel.startx;
        txt.y = loopModel.starty;
        txt.fontFamily = fontFamily;
        txt.fontSize = fontSize;
        txt.fontWeight = fontWeight;
        txt.anchor = "middle";
        txt.valign = "middle";
        txt.tspan = false;
        txt.width = Math.max(labelBoxWidth ?? 0, 50);
        txt.height = labelBoxHeight + (conf5.look === "neo" ? 15 : 0) || 20;
        txt.textMargin = boxTextMargin;
        txt.class = "labelText";
        drawLabel(g2, txt);
        txt = getTextObj3();
        txt.text = loopModel.title;
        txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2;
        txt.y = loopModel.starty + boxMargin + boxTextMargin;
        txt.anchor = "middle";
        txt.valign = "middle";
        txt.textMargin = boxTextMargin;
        txt.class = "loopText";
        txt.fontFamily = fontFamily;
        txt.fontSize = fontSize;
        txt.fontWeight = fontWeight;
        txt.wrap = true;
        let textElem = hasKatex(txt.text) ? await drawKatex(g2, txt, loopModel) : drawText3(g2, txt);
        if (loopModel.sectionTitles !== void 0) {
          for (const [idx, item] of Object.entries(loopModel.sectionTitles)) {
            if (item.message) {
              txt.text = item.message;
              txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2;
              txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin;
              txt.class = "sectionTitle";
              txt.anchor = "middle";
              txt.valign = "middle";
              txt.tspan = false;
              txt.fontFamily = fontFamily;
              txt.fontSize = fontSize;
              txt.fontWeight = fontWeight;
              txt.wrap = loopModel.wrap;
              if (hasKatex(txt.text)) {
                loopModel.starty = loopModel.sections[idx].y;
                await drawKatex(g2, txt, loopModel);
              } else {
                drawText3(g2, txt);
              }
              let sectionHeight = Math.round(
                textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr)
              );
              loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin);
            }
          }
        }
        loopModel.height = Math.round(loopModel.stopy - loopModel.starty);
        return g2;
      }, "drawLoop");
      drawBackgroundRect2 = /* @__PURE__ */ __name(function(elem, bounds4) {
        drawBackgroundRect(elem, bounds4);
      }, "drawBackgroundRect");
      insertDatabaseIcon2 = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("symbol").attr("id", id41 + "-database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr(
          "d",
          "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"
        );
      }, "insertDatabaseIcon");
      insertComputerIcon2 = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("symbol").attr("id", id41 + "-computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
          "d",
          "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"
        );
      }, "insertComputerIcon");
      insertClockIcon2 = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("symbol").attr("id", id41 + "-clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
          "d",
          "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"
        );
      }, "insertClockIcon");
      insertArrowHead2 = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-arrowhead").attr("refX", 7.9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto-start-reverse").append("path").attr("d", "M -1 0 L 10 5 L 0 10 z");
      }, "insertArrowHead");
      insertArrowFilledHead2 = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-filled-head").attr("refX", 15.5).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
      }, "insertArrowFilledHead");
      insertSequenceNumber = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6);
      }, "insertSequenceNumber");
      insertArrowCrossHead2 = /* @__PURE__ */ __name(function(elem, id41) {
        const defs2 = elem.append("defs");
        const marker = defs2.append("marker").attr("id", id41 + "-crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 4.5);
        marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7");
      }, "insertArrowCrossHead");
      insertDropShadow = /* @__PURE__ */ __name(function(elem, conf5) {
        const { theme } = conf5;
        elem.append("defs").append("filter").attr("id", "drop-shadow").attr("height", "130%").attr("width", "130%").append("feDropShadow").attr("dx", "4").attr("dy", "4").attr("stdDeviation", 0).attr("flood-opacity", "0.06").attr("flood-color", `${theme === "redux" || theme === "redux-color" ? "#000000" : "#FFFFFF"}`);
      }, "insertDropShadow");
      getTextObj3 = /* @__PURE__ */ __name(function() {
        return {
          x: 0,
          y: 0,
          fill: void 0,
          anchor: void 0,
          style: "#666",
          width: void 0,
          height: void 0,
          textMargin: 0,
          rx: 0,
          ry: 0,
          tspan: true,
          valign: void 0
        };
      }, "getTextObj");
      getNoteRect2 = /* @__PURE__ */ __name(function() {
        return {
          x: 0,
          y: 0,
          fill: "#EDF2AE",
          stroke: "#666",
          width: 100,
          anchor: "start",
          height: 100,
          rx: 0,
          ry: 0
        };
      }, "getNoteRect");
      _drawTextCandidateFunc2 = /* @__PURE__ */ (function() {
        function byText(content, g2, x5, y6, width3, height2, textAttrs) {
          const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6 + height2 / 2 + 5).style("text-anchor", "middle").text(content);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byText, "byText");
        function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const { actorFontSize, actorFontFamily, actorFontWeight } = conf5;
          const [_actorFontSize, _actorFontSizePx] = parseFontSize(actorFontSize);
          const lines = content.split(common_default.lineBreakRegex);
          for (let i2 = 0; i2 < lines.length; i2++) {
            const dy = i2 * _actorFontSize - _actorFontSize * (lines.length - 1) / 2;
            const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily);
            text4.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]);
            text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
            _setTextAttrs(text4, textAttrs);
          }
        }
        __name(byTspan, "byTspan");
        function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const s2 = g2.append("switch");
          const f2 = s2.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2);
          const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
          text4.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
          byTspan(content, s2, x5, y6, width3, height2, textAttrs, conf5);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byFo, "byFo");
        async function byKatex(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const dim = await calculateMathMLDimensions(content, getConfig());
          const s2 = g2.append("switch");
          const f2 = s2.append("foreignObject").attr("x", x5 + width3 / 2 - dim.width / 2).attr("y", y6 + height2 / 2 - dim.height / 2).attr("width", dim.width).attr("height", dim.height);
          const text4 = f2.append("xhtml:div").style("height", "100%").style("width", "100%");
          text4.append("div").style("text-align", "center").style("vertical-align", "middle").html(await renderKatexSanitized(content, getConfig()));
          byTspan(content, s2, x5, y6, width3, height2, textAttrs, conf5);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byKatex, "byKatex");
        function _setTextAttrs(toText, fromTextAttrsDict) {
          for (const key in fromTextAttrsDict) {
            if (fromTextAttrsDict.hasOwnProperty(key)) {
              toText.attr(key, fromTextAttrsDict[key]);
            }
          }
        }
        __name(_setTextAttrs, "_setTextAttrs");
        return function(conf5, hasKatex2 = false) {
          if (hasKatex2) {
            return byKatex;
          }
          return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan;
        };
      })();
      _drawMenuItemTextCandidateFunc = /* @__PURE__ */ (function() {
        function byText(content, g2, x5, y6, width3, height2, textAttrs) {
          const text4 = g2.append("text").attr("x", x5).attr("y", y6).style("text-anchor", "start").text(content);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byText, "byText");
        function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const { actorFontSize, actorFontFamily, actorFontWeight } = conf5;
          const lines = content.split(common_default.lineBreakRegex);
          for (let i2 = 0; i2 < lines.length; i2++) {
            const dy = i2 * actorFontSize - actorFontSize * (lines.length - 1) / 2;
            const text4 = g2.append("text").attr("x", x5).attr("y", y6).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily);
            text4.append("tspan").attr("x", x5).attr("dy", dy).text(lines[i2]);
            text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
            _setTextAttrs(text4, textAttrs);
          }
        }
        __name(byTspan, "byTspan");
        function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const s2 = g2.append("switch");
          const f2 = s2.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2);
          const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
          text4.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
          byTspan(content, s2, x5, y6, width3, height2, textAttrs, conf5);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byFo, "byFo");
        function _setTextAttrs(toText, fromTextAttrsDict) {
          for (const key in fromTextAttrsDict) {
            if (fromTextAttrsDict.hasOwnProperty(key)) {
              toText.attr(key, fromTextAttrsDict[key]);
            }
          }
        }
        __name(_setTextAttrs, "_setTextAttrs");
        return function(conf5) {
          return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan;
        };
      })();
      insertSolidTopArrowHead = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-solidTopArrowHead").attr("refX", 7.9).attr("refY", 7.25).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto-start-reverse").append("path").attr("d", "M 0 0 L 10 8 L 0 8 z");
      }, "insertSolidTopArrowHead");
      insertSolidBottomArrowHead = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-solidBottomArrowHead").attr("refX", 7.9).attr("refY", 0.75).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto-start-reverse").append("path").attr("d", "M 0 0 L 10 0 L 0 8 z");
      }, "insertSolidBottomArrowHead");
      insertStickTopArrowHead = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-stickTopArrowHead").attr("refX", 7.5).attr("refY", 7).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto-start-reverse").append("path").attr("d", "M 0 0 L 7 7").attr("stroke", "black").attr("stroke-width", 1.5).attr("fill", "none");
      }, "insertStickTopArrowHead");
      insertStickBottomArrowHead = /* @__PURE__ */ __name(function(elem, id41) {
        elem.append("defs").append("marker").attr("id", id41 + "-stickBottomArrowHead").attr("refX", 7.5).attr("refY", 0).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto-start-reverse").append("path").attr("d", "M 0 7 L 7 0").attr("stroke", "black").attr("stroke-width", 1.5).attr("fill", "none");
      }, "insertStickBottomArrowHead");
      svgDraw_default2 = {
        drawRect: drawRect4,
        drawText: drawText3,
        drawLabel,
        drawActor,
        drawBox,
        drawPopup,
        anchorElement,
        drawActivation,
        drawLoop,
        drawBackgroundRect: drawBackgroundRect2,
        insertArrowHead: insertArrowHead2,
        insertArrowFilledHead: insertArrowFilledHead2,
        insertSequenceNumber,
        insertArrowCrossHead: insertArrowCrossHead2,
        insertDatabaseIcon: insertDatabaseIcon2,
        insertComputerIcon: insertComputerIcon2,
        insertClockIcon: insertClockIcon2,
        getTextObj: getTextObj3,
        getNoteRect: getNoteRect2,
        fixLifeLineHeights,
        sanitizeUrl: import_sanitize_url5.sanitizeUrl,
        insertDropShadow,
        insertSolidTopArrowHead,
        insertSolidBottomArrowHead,
        insertStickTopArrowHead,
        insertStickBottomArrowHead
      };
    }
  });

  // src/diagrams/sequence/sequenceRenderer.ts
  async function boundMessage(_diagram, msgModel) {
    bounds2.bumpVerticalPos(10);
    const { startx, stopx, message } = msgModel;
    const lines = common_default.splitBreaks(message).length;
    const isKatexMsg = hasKatex(message);
    const textDims = isKatexMsg ? await calculateMathMLDimensions(message, getConfig2()) : utils_default2.calculateTextDimensions(message, messageFont2(conf2));
    if (!isKatexMsg) {
      const lineHeight = textDims.height / lines;
      msgModel.height += lineHeight;
      bounds2.bumpVerticalPos(lineHeight);
    }
    let lineStartY;
    let totalOffset = textDims.height - 10;
    const textWidth = textDims.width;
    if (startx === stopx) {
      lineStartY = bounds2.getVerticalPos() + totalOffset;
      if (!conf2.rightAngles) {
        totalOffset += conf2.boxMargin;
        lineStartY = bounds2.getVerticalPos() + totalOffset;
      }
      totalOffset += 30;
      const dx = common_default.getMax(textWidth / 2, conf2.width / 2);
      bounds2.insert(
        startx - dx,
        bounds2.getVerticalPos() - 10 + totalOffset,
        stopx + dx,
        bounds2.getVerticalPos() + 30 + totalOffset
      );
    } else {
      totalOffset += conf2.boxMargin;
      lineStartY = bounds2.getVerticalPos() + totalOffset;
      bounds2.insert(startx, lineStartY - 10, stopx, lineStartY);
    }
    bounds2.bumpVerticalPos(totalOffset);
    msgModel.height += totalOffset;
    msgModel.stopy = msgModel.starty + msgModel.height;
    bounds2.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy);
    return lineStartY;
  }
  function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) {
    bounds2.bumpVerticalPos(preMargin);
    let heightAdjust = postMargin;
    if (msg.id && msg.message && loopWidths[msg.id]) {
      const loopWidth = loopWidths[msg.id].width;
      const textConf = messageFont2(conf2);
      msg.message = utils_default2.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf2.wrapPadding, textConf);
      msg.width = loopWidth;
      msg.wrap = true;
      const textDims = utils_default2.calculateTextDimensions(msg.message, textConf);
      const totalOffset = common_default.getMax(textDims.height, conf2.labelBoxHeight);
      heightAdjust = postMargin + totalOffset;
      log.debug(`${totalOffset} - ${msg.message}`);
    }
    addLoopFn(msg);
    bounds2.bumpVerticalPos(heightAdjust);
  }
  function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors2, createdActors, destroyedActors) {
    function receiverAdjustment(actor, adjustment) {
      if (actor.x < actors2.get(msg.from).x) {
        bounds2.insert(
          msgModel.stopx - adjustment,
          msgModel.starty,
          msgModel.startx,
          msgModel.stopy + actor.height / 2 + conf2.noteMargin
        );
        msgModel.stopx = msgModel.stopx + adjustment;
      } else {
        bounds2.insert(
          msgModel.startx,
          msgModel.starty,
          msgModel.stopx + adjustment,
          msgModel.stopy + actor.height / 2 + conf2.noteMargin
        );
        msgModel.stopx = msgModel.stopx - adjustment;
      }
    }
    __name(receiverAdjustment, "receiverAdjustment");
    function senderAdjustment(actor, adjustment) {
      if (actor.x < actors2.get(msg.to).x) {
        bounds2.insert(
          msgModel.startx - adjustment,
          msgModel.starty,
          msgModel.stopx,
          msgModel.stopy + actor.height / 2 + conf2.noteMargin
        );
        msgModel.startx = msgModel.startx + adjustment;
      } else {
        bounds2.insert(
          msgModel.stopx,
          msgModel.starty,
          msgModel.startx + adjustment,
          msgModel.stopy + actor.height / 2 + conf2.noteMargin
        );
        msgModel.startx = msgModel.startx - adjustment;
      }
    }
    __name(senderAdjustment, "senderAdjustment");
    const actorArray = [
      PARTICIPANT_TYPE.ACTOR,
      PARTICIPANT_TYPE.CONTROL,
      PARTICIPANT_TYPE.ENTITY,
      PARTICIPANT_TYPE.DATABASE
    ];
    if (createdActors.get(msg.to) == index) {
      const actor = actors2.get(msg.to);
      const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3;
      receiverAdjustment(actor, adjustment);
      actor.starty = lineStartY - actor.height / 2;
      bounds2.bumpVerticalPos(actor.height / 2);
    } else if (destroyedActors.get(msg.from) == index) {
      const actor = actors2.get(msg.from);
      if (conf2.mirrorActors) {
        const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2;
        senderAdjustment(actor, adjustment);
      }
      actor.stopy = lineStartY - actor.height / 2;
      bounds2.bumpVerticalPos(actor.height / 2);
    } else if (destroyedActors.get(msg.to) == index) {
      const actor = actors2.get(msg.to);
      if (conf2.mirrorActors) {
        const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3;
        receiverAdjustment(actor, adjustment);
      }
      actor.stopy = lineStartY - actor.height / 2;
      bounds2.bumpVerticalPos(actor.height / 2);
    }
  }
  async function getMaxMessageWidthPerActor(actors2, messages, diagObj) {
    const maxMessageWidthPerActor = {};
    for (const msg of messages) {
      if (actors2.get(msg.to) && actors2.get(msg.from)) {
        const actor = actors2.get(msg.to);
        if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) {
          continue;
        }
        if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) {
          continue;
        }
        const isNote = msg.placement !== void 0;
        const isMessage = !isNote;
        const textFont = isNote ? noteFont(conf2) : messageFont2(conf2);
        const wrappedMessage = msg.wrap ? utils_default2.wrapLabel(msg.message, conf2.width - 2 * conf2.wrapPadding, textFont) : msg.message;
        const messageDimensions = hasKatex(wrappedMessage) ? await calculateMathMLDimensions(msg.message, getConfig2()) : utils_default2.calculateTextDimensions(wrappedMessage, textFont);
        const messageWidth = messageDimensions.width + 2 * conf2.wrapPadding;
        if (isMessage && msg.from === actor.nextActor) {
          maxMessageWidthPerActor[msg.to] = common_default.getMax(
            maxMessageWidthPerActor[msg.to] || 0,
            messageWidth
          );
        } else if (isMessage && msg.from === actor.prevActor) {
          maxMessageWidthPerActor[msg.from] = common_default.getMax(
            maxMessageWidthPerActor[msg.from] || 0,
            messageWidth
          );
        } else if (isMessage && msg.from === msg.to) {
          maxMessageWidthPerActor[msg.from] = common_default.getMax(
            maxMessageWidthPerActor[msg.from] || 0,
            messageWidth / 2
          );
          maxMessageWidthPerActor[msg.to] = common_default.getMax(
            maxMessageWidthPerActor[msg.to] || 0,
            messageWidth / 2
          );
        } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {
          maxMessageWidthPerActor[msg.from] = common_default.getMax(
            maxMessageWidthPerActor[msg.from] || 0,
            messageWidth
          );
        } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {
          maxMessageWidthPerActor[actor.prevActor] = common_default.getMax(
            maxMessageWidthPerActor[actor.prevActor] || 0,
            messageWidth
          );
        } else if (msg.placement === diagObj.db.PLACEMENT.OVER) {
          if (actor.prevActor) {
            maxMessageWidthPerActor[actor.prevActor] = common_default.getMax(
              maxMessageWidthPerActor[actor.prevActor] || 0,
              messageWidth / 2
            );
          }
          if (actor.nextActor) {
            maxMessageWidthPerActor[msg.from] = common_default.getMax(
              maxMessageWidthPerActor[msg.from] || 0,
              messageWidth / 2
            );
          }
        }
      }
    }
    log.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor);
    return maxMessageWidthPerActor;
  }
  async function calculateActorMargins(actors2, actorToMessageWidth, boxes) {
    let maxHeight = 0;
    for (const prop of actors2.keys()) {
      const actor = actors2.get(prop);
      if (actor.wrap) {
        actor.description = utils_default2.wrapLabel(
          actor.description,
          conf2.width - 2 * conf2.wrapPadding,
          actorFont(conf2)
        );
      }
      const actDims = hasKatex(actor.description) ? await calculateMathMLDimensions(actor.description, getConfig2()) : utils_default2.calculateTextDimensions(actor.description, actorFont(conf2));
      actor.width = actor.wrap ? conf2.width : common_default.getMax(conf2.width, actDims.width + 2 * conf2.wrapPadding);
      actor.height = actor.wrap ? common_default.getMax(actDims.height, conf2.height) : conf2.height;
      maxHeight = common_default.getMax(maxHeight, actor.height);
    }
    for (const actorKey in actorToMessageWidth) {
      const actor = actors2.get(actorKey);
      if (!actor) {
        continue;
      }
      const nextActor = actors2.get(actor.nextActor);
      if (!nextActor) {
        const messageWidth2 = actorToMessageWidth[actorKey];
        const actorWidth2 = messageWidth2 + conf2.actorMargin - actor.width / 2;
        actor.margin = common_default.getMax(actorWidth2, conf2.actorMargin);
        continue;
      }
      const messageWidth = actorToMessageWidth[actorKey];
      const actorWidth = messageWidth + conf2.actorMargin - actor.width / 2 - nextActor.width / 2;
      actor.margin = common_default.getMax(actorWidth, conf2.actorMargin);
    }
    let maxBoxHeight = 0;
    boxes.forEach((box) => {
      const textFont = messageFont2(conf2);
      let totalWidth = box.actorKeys.reduce((total, aKey) => {
        return total += actors2.get(aKey).width + (actors2.get(aKey).margin || 0);
      }, 0);
      const standardBoxPadding = conf2.boxMargin * 8;
      totalWidth += standardBoxPadding;
      totalWidth -= 2 * conf2.boxTextMargin;
      if (box.wrap) {
        box.name = utils_default2.wrapLabel(box.name, totalWidth - 2 * conf2.wrapPadding, textFont);
      }
      const boxMsgDimensions = utils_default2.calculateTextDimensions(box.name, textFont);
      maxBoxHeight = common_default.getMax(boxMsgDimensions.height, maxBoxHeight);
      const minWidth = common_default.getMax(totalWidth, boxMsgDimensions.width + 2 * conf2.wrapPadding);
      box.margin = conf2.boxTextMargin;
      if (totalWidth < minWidth) {
        const missing = (minWidth - totalWidth) / 2;
        box.margin += missing;
      }
    });
    boxes.forEach((box) => box.textMaxHeight = maxBoxHeight);
    return common_default.getMax(maxHeight, conf2.height);
  }
  var conf2, bounds2, drawNote, drawCentralConnection, messageFont2, noteFont, actorFont, drawMessage, addActorRenderingData, drawActors, drawActorsPopup, setConf3, actorActivations, activationBounds, draw11, getRequiredPopupWidth, buildNoteModel, CENTRAL_CONNECTION_BASE_OFFSET, CENTRAL_CONNECTION_BIDIRECTIONAL_OFFSET, hasCentralConnection, calculateCentralConnectionOffset, isReverseArrowType, isBidirectionalArrowType, buildMessageModel, calculateLoopBounds, sequenceRenderer_default;
  var init_sequenceRenderer = __esm({
    "src/diagrams/sequence/sequenceRenderer.ts"() {
      "use strict";
      init_src32();
      init_svgDraw2();
      init_logger();
      init_common();
      init_common();
      init_svgDrawCommon();
      init_diagramAPI();
      init_assignWithDepth();
      init_utils2();
      init_setupGraphViewbox();
      init_sequenceDb();
      conf2 = {};
      bounds2 = {
        data: {
          startx: void 0,
          stopx: void 0,
          starty: void 0,
          stopy: void 0
        },
        verticalPos: 0,
        sequenceItems: [],
        activations: [],
        models: {
          getHeight: /* @__PURE__ */ __name(function() {
            return Math.max.apply(
              null,
              this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0)
            ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h3) => acc + h3)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h3) => acc + h3)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h3) => acc + h3));
          }, "getHeight"),
          clear: /* @__PURE__ */ __name(function() {
            this.actors = [];
            this.boxes = [];
            this.loops = [];
            this.messages = [];
            this.notes = [];
          }, "clear"),
          addBox: /* @__PURE__ */ __name(function(boxModel) {
            this.boxes.push(boxModel);
          }, "addBox"),
          addActor: /* @__PURE__ */ __name(function(actorModel) {
            this.actors.push(actorModel);
          }, "addActor"),
          addLoop: /* @__PURE__ */ __name(function(loopModel) {
            this.loops.push(loopModel);
          }, "addLoop"),
          addMessage: /* @__PURE__ */ __name(function(msgModel) {
            this.messages.push(msgModel);
          }, "addMessage"),
          addNote: /* @__PURE__ */ __name(function(noteModel) {
            this.notes.push(noteModel);
          }, "addNote"),
          lastActor: /* @__PURE__ */ __name(function() {
            return this.actors[this.actors.length - 1];
          }, "lastActor"),
          lastLoop: /* @__PURE__ */ __name(function() {
            return this.loops[this.loops.length - 1];
          }, "lastLoop"),
          lastMessage: /* @__PURE__ */ __name(function() {
            return this.messages[this.messages.length - 1];
          }, "lastMessage"),
          lastNote: /* @__PURE__ */ __name(function() {
            return this.notes[this.notes.length - 1];
          }, "lastNote"),
          actors: [],
          boxes: [],
          loops: [],
          messages: [],
          notes: []
        },
        init: /* @__PURE__ */ __name(function() {
          this.sequenceItems = [];
          this.activations = [];
          this.models.clear();
          this.data = {
            startx: void 0,
            stopx: void 0,
            starty: void 0,
            stopy: void 0
          };
          this.verticalPos = 0;
          setConf3(getConfig2());
        }, "init"),
        updateVal: /* @__PURE__ */ __name(function(obj, key, val, fun) {
          if (obj[key] === void 0) {
            obj[key] = val;
          } else {
            obj[key] = fun(val, obj[key]);
          }
        }, "updateVal"),
        updateBounds: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) {
          const _self = this;
          let cnt4 = 0;
          function updateFn(type3) {
            return /* @__PURE__ */ __name(function updateItemBounds(item) {
              cnt4++;
              const n2 = _self.sequenceItems.length - cnt4 + 1;
              _self.updateVal(item, "starty", starty - n2 * conf2.boxMargin, Math.min);
              _self.updateVal(item, "stopy", stopy + n2 * conf2.boxMargin, Math.max);
              _self.updateVal(bounds2.data, "startx", startx - n2 * conf2.boxMargin, Math.min);
              _self.updateVal(bounds2.data, "stopx", stopx + n2 * conf2.boxMargin, Math.max);
              if (!(type3 === "activation")) {
                _self.updateVal(item, "startx", startx - n2 * conf2.boxMargin, Math.min);
                _self.updateVal(item, "stopx", stopx + n2 * conf2.boxMargin, Math.max);
                _self.updateVal(bounds2.data, "starty", starty - n2 * conf2.boxMargin, Math.min);
                _self.updateVal(bounds2.data, "stopy", stopy + n2 * conf2.boxMargin, Math.max);
              }
            }, "updateItemBounds");
          }
          __name(updateFn, "updateFn");
          this.sequenceItems.forEach(updateFn());
          this.activations.forEach(updateFn("activation"));
        }, "updateBounds"),
        insert: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) {
          const _startx = common_default.getMin(startx, stopx);
          const _stopx = common_default.getMax(startx, stopx);
          const _starty = common_default.getMin(starty, stopy);
          const _stopy = common_default.getMax(starty, stopy);
          this.updateVal(bounds2.data, "startx", _startx, Math.min);
          this.updateVal(bounds2.data, "starty", _starty, Math.min);
          this.updateVal(bounds2.data, "stopx", _stopx, Math.max);
          this.updateVal(bounds2.data, "stopy", _stopy, Math.max);
          this.updateBounds(_startx, _starty, _stopx, _stopy);
        }, "insert"),
        newActivation: /* @__PURE__ */ __name(function(message, diagram38, actors2) {
          const actorRect = actors2.get(message.from);
          const stackedSize = actorActivations(message.from).length || 0;
          const x5 = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf2.activationWidth / 2;
          this.activations.push({
            startx: x5,
            starty: this.verticalPos + 2,
            stopx: x5 + conf2.activationWidth,
            stopy: void 0,
            actor: message.from,
            anchored: svgDraw_default2.anchorElement(diagram38)
          });
        }, "newActivation"),
        endActivation: /* @__PURE__ */ __name(function(message) {
          const lastActorActivationIdx = this.activations.map(function(activation) {
            return activation.actor;
          }).lastIndexOf(message.from);
          return this.activations.splice(lastActorActivationIdx, 1)[0];
        }, "endActivation"),
        createLoop: /* @__PURE__ */ __name(function(title2 = { message: void 0, wrap: false, width: void 0 }, fill) {
          return {
            startx: void 0,
            starty: this.verticalPos,
            stopx: void 0,
            stopy: void 0,
            title: title2.message,
            wrap: title2.wrap,
            width: title2.width,
            height: 0,
            fill
          };
        }, "createLoop"),
        newLoop: /* @__PURE__ */ __name(function(title2 = { message: void 0, wrap: false, width: void 0 }, fill) {
          this.sequenceItems.push(this.createLoop(title2, fill));
        }, "newLoop"),
        endLoop: /* @__PURE__ */ __name(function() {
          return this.sequenceItems.pop();
        }, "endLoop"),
        isLoopOverlap: /* @__PURE__ */ __name(function() {
          return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false;
        }, "isLoopOverlap"),
        addSectionToLoop: /* @__PURE__ */ __name(function(message) {
          const loop = this.sequenceItems.pop();
          loop.sections = loop.sections || [];
          loop.sectionTitles = loop.sectionTitles || [];
          loop.sections.push({ y: bounds2.getVerticalPos(), height: 0 });
          loop.sectionTitles.push(message);
          this.sequenceItems.push(loop);
        }, "addSectionToLoop"),
        saveVerticalPos: /* @__PURE__ */ __name(function() {
          if (this.isLoopOverlap()) {
            this.savedVerticalPos = this.verticalPos;
          }
        }, "saveVerticalPos"),
        resetVerticalPos: /* @__PURE__ */ __name(function() {
          if (this.isLoopOverlap()) {
            this.verticalPos = this.savedVerticalPos;
          }
        }, "resetVerticalPos"),
        bumpVerticalPos: /* @__PURE__ */ __name(function(bump) {
          this.verticalPos = this.verticalPos + bump;
          this.data.stopy = common_default.getMax(this.data.stopy, this.verticalPos);
        }, "bumpVerticalPos"),
        getVerticalPos: /* @__PURE__ */ __name(function() {
          return this.verticalPos;
        }, "getVerticalPos"),
        getBounds: /* @__PURE__ */ __name(function() {
          return { bounds: this.data, models: this.models };
        }, "getBounds")
      };
      drawNote = /* @__PURE__ */ __name(async function(elem, noteModel, id41) {
        bounds2.bumpVerticalPos(conf2.boxMargin);
        noteModel.height = conf2.boxMargin;
        noteModel.starty = bounds2.getVerticalPos();
        const rect3 = getNoteRect();
        rect3.x = noteModel.startx;
        rect3.y = noteModel.starty;
        rect3.width = noteModel.width || conf2.width;
        rect3.class = "note";
        const g2 = elem.append("g");
        g2.attr("data-et", "note");
        g2.attr("data-id", "i" + id41);
        const rectElem = svgDraw_default2.drawRect(g2, rect3);
        const textObj = getTextObj();
        textObj.x = noteModel.startx;
        textObj.y = noteModel.starty;
        textObj.width = rect3.width;
        textObj.dy = "1em";
        textObj.text = noteModel.message;
        textObj.class = "noteText";
        textObj.fontFamily = conf2.noteFontFamily;
        textObj.fontSize = conf2.noteFontSize;
        textObj.fontWeight = conf2.noteFontWeight;
        textObj.anchor = conf2.noteAlign;
        textObj.textMargin = conf2.noteMargin;
        textObj.valign = "center";
        const textElem = hasKatex(textObj.text) ? await drawKatex(g2, textObj) : drawText3(g2, textObj);
        const textHeight = Math.round(
          textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr)
        );
        rectElem.attr("height", textHeight + 2 * conf2.noteMargin);
        noteModel.height += textHeight + 2 * conf2.noteMargin;
        bounds2.bumpVerticalPos(textHeight + 2 * conf2.noteMargin);
        noteModel.stopy = noteModel.starty + textHeight + 2 * conf2.noteMargin;
        noteModel.stopx = noteModel.startx + rect3.width;
        bounds2.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy);
        bounds2.models.addNote(noteModel);
      }, "drawNote");
      drawCentralConnection = /* @__PURE__ */ __name(function(elem, msg, msgModel, diagObj, startx, stopx, lineStartY) {
        const actors2 = diagObj.db.getActors();
        const fromActor = actors2.get(msg.from);
        const toActor = actors2.get(msg.to);
        const isAutoNumberOn = msgModel.sequenceVisible;
        let fromCenter = fromActor.x + fromActor.width / 2;
        let toCenter = toActor.x + toActor.width / 2;
        const isLeftToRight = fromCenter <= toCenter;
        const isReverse = isReverseArrowType(msg, diagObj);
        const g2 = elem.append("g");
        const CENTRAL_CONNECTION_CIRCLE_OFFSET = 16.5;
        const getCircleOffset = /* @__PURE__ */ __name((isLeftToRight2, isReverse2) => {
          const baseOffset = isLeftToRight2 ? CENTRAL_CONNECTION_CIRCLE_OFFSET : -CENTRAL_CONNECTION_CIRCLE_OFFSET;
          return isReverse2 ? -baseOffset : baseOffset;
        }, "getCircleOffset");
        const drawCircle3 = /* @__PURE__ */ __name((cx) => {
          g2.append("circle").attr("cx", cx).attr("cy", lineStartY).attr("r", 5).attr("width", 10).attr("height", 10);
        }, "drawCircle");
        const { CENTRAL_CONNECTION, CENTRAL_CONNECTION_REVERSE, CENTRAL_CONNECTION_DUAL } = diagObj.db.LINETYPE;
        if (isAutoNumberOn) {
          switch (msg.centralConnection) {
            case CENTRAL_CONNECTION:
              if (isReverse) {
                toCenter += getCircleOffset(isLeftToRight, true);
              }
              break;
            case CENTRAL_CONNECTION_REVERSE:
              if (!isReverse) {
                fromCenter += getCircleOffset(isLeftToRight, false);
              }
              break;
            case CENTRAL_CONNECTION_DUAL:
              if (isReverse) {
                toCenter += getCircleOffset(isLeftToRight, true);
              } else {
                fromCenter += getCircleOffset(isLeftToRight, false);
              }
              break;
          }
        }
        switch (msg.centralConnection) {
          case CENTRAL_CONNECTION:
            drawCircle3(toCenter);
            break;
          case CENTRAL_CONNECTION_REVERSE:
            drawCircle3(fromCenter);
            break;
          case CENTRAL_CONNECTION_DUAL:
            drawCircle3(fromCenter);
            drawCircle3(toCenter);
            break;
        }
      }, "drawCentralConnection");
      messageFont2 = /* @__PURE__ */ __name((cnf) => {
        return {
          fontFamily: cnf.messageFontFamily,
          fontSize: cnf.messageFontSize,
          fontWeight: cnf.messageFontWeight
        };
      }, "messageFont");
      noteFont = /* @__PURE__ */ __name((cnf) => {
        return {
          fontFamily: cnf.noteFontFamily,
          fontSize: cnf.noteFontSize,
          fontWeight: cnf.noteFontWeight
        };
      }, "noteFont");
      actorFont = /* @__PURE__ */ __name((cnf) => {
        return {
          fontFamily: cnf.actorFontFamily,
          fontSize: cnf.actorFontSize,
          fontWeight: cnf.actorFontWeight
        };
      }, "actorFont");
      __name(boundMessage, "boundMessage");
      drawMessage = /* @__PURE__ */ __name(async function(diagram38, msgModel, lineStartY, diagObj, msg, diagramId3) {
        const { startx, stopx, starty, message, type: type3, sequenceIndex, sequenceVisible } = msgModel;
        const textDims = utils_default2.calculateTextDimensions(message, messageFont2(conf2));
        const textObj = getTextObj();
        textObj.x = Math.min(startx, stopx);
        textObj.y = starty + 10;
        textObj.width = Math.abs(stopx - startx);
        textObj.class = "messageText";
        textObj.dy = "1em";
        textObj.text = message;
        textObj.fontFamily = conf2.messageFontFamily;
        textObj.fontSize = conf2.messageFontSize;
        textObj.fontWeight = conf2.messageFontWeight;
        textObj.anchor = conf2.messageAlign;
        textObj.valign = "center";
        textObj.textMargin = conf2.wrapPadding;
        textObj.tspan = false;
        if (hasKatex(textObj.text)) {
          await drawKatex(diagram38, textObj, { startx, stopx, starty: lineStartY });
        } else {
          drawText3(diagram38, textObj);
        }
        const textWidth = textDims.width;
        let line2;
        if (startx === stopx) {
          const isAutoNumberOn = sequenceVisible || conf2.showSequenceNumbers;
          const isReverse = isReverseArrowType(msg, diagObj);
          const isBidirectional = isBidirectionalArrowType(msg, diagObj);
          const lineStartX = startx + (isAutoNumberOn && (isReverse || isBidirectional) ? 10 : 0);
          if (conf2.rightAngles) {
            line2 = diagram38.append("path").attr(
              "d",
              `M  ${lineStartX},${lineStartY} H ${startx + common_default.getMax(conf2.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}`
            );
          } else {
            line2 = diagram38.append("path").attr(
              "d",
              "M " + lineStartX + "," + lineStartY + " C " + (lineStartX + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20)
            );
          }
          if (hasCentralConnection(msg, diagObj)) {
            drawCentralConnection(diagram38, msg, msgModel, diagObj, startx, stopx, lineStartY);
          }
        } else {
          line2 = diagram38.append("line");
          line2.attr("x1", startx);
          line2.attr("y1", lineStartY);
          line2.attr("x2", stopx);
          line2.attr("y2", lineStartY);
          if (hasCentralConnection(msg, diagObj)) {
            drawCentralConnection(diagram38, msg, msgModel, diagObj, startx, stopx, lineStartY);
          }
        }
        if (type3 === diagObj.db.LINETYPE.DOTTED || type3 === diagObj.db.LINETYPE.DOTTED_CROSS || type3 === diagObj.db.LINETYPE.DOTTED_POINT || type3 === diagObj.db.LINETYPE.DOTTED_OPEN || type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED || type3 === diagObj.db.LINETYPE.SOLID_TOP_DOTTED || type3 === diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED || type3 === diagObj.db.LINETYPE.STICK_TOP_DOTTED || type3 === diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED || type3 === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED || type3 === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED || type3 === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED || type3 === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED) {
          line2.style("stroke-dasharray", "3, 3");
          line2.attr("class", "messageLine1");
        } else {
          line2.attr("class", "messageLine0");
        }
        line2.attr("data-et", "message");
        line2.attr("data-id", "i" + msgModel.id);
        line2.attr("data-from", msgModel.from);
        line2.attr("data-to", msgModel.to);
        let url = "";
        if (conf2.arrowMarkerAbsolute) {
          url = getUrl(true);
        }
        line2.attr("stroke-width", 2);
        line2.attr("stroke", "none");
        line2.style("fill", "none");
        if (type3 === diagObj.db.LINETYPE.SOLID_TOP || type3 === diagObj.db.LINETYPE.SOLID_TOP_DOTTED) {
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-solidTopArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.SOLID_BOTTOM || type3 === diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED) {
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-solidBottomArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.STICK_TOP || type3 === diagObj.db.LINETYPE.STICK_TOP_DOTTED) {
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-stickTopArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.STICK_BOTTOM || type3 === diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED) {
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-stickBottomArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE || type3 === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED) {
          line2.attr("marker-start", "url(" + url + "#" + diagramId3 + "-solidBottomArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE || type3 === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED) {
          line2.attr("marker-start", "url(" + url + "#" + diagramId3 + "-solidTopArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE || type3 === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED) {
          line2.attr("marker-start", "url(" + url + "#" + diagramId3 + "-stickBottomArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE || type3 === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED) {
          line2.attr("marker-start", "url(" + url + "#" + diagramId3 + "-stickTopArrowHead)");
        }
        if (type3 === diagObj.db.LINETYPE.SOLID || type3 === diagObj.db.LINETYPE.DOTTED) {
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-arrowhead)");
        }
        if (type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID || type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED) {
          line2.attr("marker-start", "url(" + url + "#" + diagramId3 + "-arrowhead)");
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-arrowhead)");
        }
        if (type3 === diagObj.db.LINETYPE.SOLID_POINT || type3 === diagObj.db.LINETYPE.DOTTED_POINT) {
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-filled-head)");
        }
        if (type3 === diagObj.db.LINETYPE.SOLID_CROSS || type3 === diagObj.db.LINETYPE.DOTTED_CROSS) {
          line2.attr("marker-end", "url(" + url + "#" + diagramId3 + "-crosshead)");
        }
        if (sequenceVisible || conf2.showSequenceNumbers) {
          const isBidirectional = type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID || type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED;
          const isReverseArrowType2 = type3 === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE || type3 === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED || type3 === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE || type3 === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED || type3 === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE || type3 === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED || type3 === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE || type3 === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED;
          const SEQUENCE_NUMBER_RADIUS = 6;
          const hasCentralConn = hasCentralConnection(msg, diagObj);
          let lineStartX = startx;
          let lineStopX = stopx;
          if (isBidirectional) {
            if (startx < stopx) {
              lineStartX = startx + SEQUENCE_NUMBER_RADIUS * 2;
            } else {
              lineStartX = startx - SEQUENCE_NUMBER_RADIUS + (hasCentralConn ? -5 : 0);
              lineStartX += msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_DUAL || msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_REVERSE ? -7.5 : 0;
            }
            line2.attr("x1", lineStartX);
          } else if (isReverseArrowType2) {
            if (stopx > startx) {
              lineStopX = stopx - 2 * SEQUENCE_NUMBER_RADIUS;
            } else {
              lineStopX = stopx - SEQUENCE_NUMBER_RADIUS;
              lineStartX += msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_DUAL || msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_REVERSE ? -7.5 : 0;
            }
            lineStopX += hasCentralConn ? 15 : 0;
            line2.attr("x2", lineStopX);
            line2.attr("x1", lineStartX);
          } else {
            line2.attr("x1", startx + SEQUENCE_NUMBER_RADIUS);
          }
          let autonumberX = 0;
          const isSelfMessage = startx === stopx;
          const isLeftToRight = startx <= stopx;
          if (isSelfMessage) {
            autonumberX = msgModel.fromBounds + 1;
          } else if (isReverseArrowType2) {
            autonumberX = isLeftToRight ? msgModel.toBounds - 1 : msgModel.fromBounds + 1;
          } else {
            autonumberX = isLeftToRight ? msgModel.fromBounds + 1 : msgModel.toBounds - 1;
          }
          let fontSize = "12px";
          const sequenceIndexLength = sequenceIndex.toString().length;
          if (sequenceIndexLength > 5) {
            fontSize = "7px";
          } else if (sequenceIndexLength > 3) {
            fontSize = "9px";
          }
          diagram38.append("line").attr("x1", autonumberX).attr("y1", lineStartY).attr("x2", autonumberX).attr("y2", lineStartY).attr("stroke-width", 0).attr("marker-start", "url(" + url + "#" + diagramId3 + "-sequencenumber)");
          diagram38.append("text").attr("x", autonumberX).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", fontSize).attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex);
        }
      }, "drawMessage");
      addActorRenderingData = /* @__PURE__ */ __name(function(diagram38, actors2, createdActors, actorKeys, verticalPos, messages, isFooter) {
        let prevWidth = 0;
        let prevMargin = 0;
        let prevBox = void 0;
        let maxHeight = 0;
        for (const actorKey of actorKeys) {
          const actor = actors2.get(actorKey);
          const box = actor.box;
          if (prevBox && prevBox != box) {
            if (!isFooter) {
              bounds2.models.addBox(prevBox);
            }
            prevMargin += conf2.boxMargin + prevBox.margin;
          }
          if (box && box != prevBox) {
            if (!isFooter) {
              box.x = prevWidth + prevMargin;
              box.y = verticalPos;
            }
            prevMargin += box.margin;
          }
          actor.width = common_default.getMax(actor.width || conf2.width, conf2.width);
          actor.height = common_default.getMax(actor.height || conf2.height, conf2.height);
          actor.margin = actor.margin || conf2.actorMargin;
          maxHeight = common_default.getMax(maxHeight, actor.height);
          if (createdActors.get(actor.name)) {
            prevMargin += actor.width / 2;
          }
          actor.x = prevWidth + prevMargin;
          actor.starty = bounds2.getVerticalPos();
          bounds2.insert(actor.x, verticalPos, actor.x + actor.width, actor.height);
          prevWidth += actor.width + prevMargin;
          if (actor.box) {
            actor.box.width = prevWidth + box.margin - actor.box.x;
          }
          prevMargin = actor.margin;
          prevBox = actor.box;
          bounds2.models.addActor(actor);
        }
        if (prevBox && !isFooter) {
          bounds2.models.addBox(prevBox);
        }
        bounds2.bumpVerticalPos(maxHeight);
      }, "addActorRenderingData");
      drawActors = /* @__PURE__ */ __name(async function(diagram38, actors2, actorKeys, isFooter, diagramId3, diagObj, actorIndexMap) {
        if (!isFooter) {
          for (const actorKey of actorKeys) {
            const actor = actors2.get(actorKey);
            await svgDraw_default2.drawActor(diagram38, actor, conf2, false, diagramId3, diagObj, actorIndexMap);
          }
        } else {
          let maxHeight = 0;
          bounds2.bumpVerticalPos(conf2.boxMargin * 2);
          for (const actorKey of actorKeys) {
            const actor = actors2.get(actorKey);
            if (!actor.stopy) {
              actor.stopy = bounds2.getVerticalPos();
            }
            const height2 = await svgDraw_default2.drawActor(
              diagram38,
              actor,
              conf2,
              true,
              diagramId3,
              diagObj,
              actorIndexMap
            );
            maxHeight = common_default.getMax(maxHeight, height2);
          }
          bounds2.bumpVerticalPos(maxHeight + conf2.boxMargin);
        }
      }, "drawActors");
      drawActorsPopup = /* @__PURE__ */ __name(function(diagram38, actors2, actorKeys, doc) {
        let maxHeight = 0;
        let maxWidth2 = 0;
        for (const actorKey of actorKeys) {
          const actor = actors2.get(actorKey);
          const minMenuWidth = getRequiredPopupWidth(actor);
          const menuDimensions = svgDraw_default2.drawPopup(
            diagram38,
            actor,
            minMenuWidth,
            conf2,
            conf2.forceMenus,
            doc
          );
          if (menuDimensions.height > maxHeight) {
            maxHeight = menuDimensions.height;
          }
          if (menuDimensions.width + actor.x > maxWidth2) {
            maxWidth2 = menuDimensions.width + actor.x;
          }
        }
        return { maxHeight, maxWidth: maxWidth2 };
      }, "drawActorsPopup");
      setConf3 = /* @__PURE__ */ __name(function(cnf) {
        assignWithDepth_default(conf2, cnf);
        if (cnf.fontFamily) {
          conf2.actorFontFamily = conf2.noteFontFamily = conf2.messageFontFamily = cnf.fontFamily;
        }
        if (cnf.fontSize) {
          conf2.actorFontSize = conf2.noteFontSize = conf2.messageFontSize = cnf.fontSize;
        }
        if (cnf.fontWeight) {
          conf2.actorFontWeight = conf2.noteFontWeight = conf2.messageFontWeight = cnf.fontWeight;
        }
      }, "setConf");
      actorActivations = /* @__PURE__ */ __name(function(actor) {
        return bounds2.activations.filter(function(activation) {
          return activation.actor === actor;
        });
      }, "actorActivations");
      activationBounds = /* @__PURE__ */ __name(function(actor, actors2) {
        const actorObj = actors2.get(actor);
        const activations = actorActivations(actor);
        const left3 = activations.reduce(
          function(acc, activation) {
            return common_default.getMin(acc, activation.startx);
          },
          actorObj.x + actorObj.width / 2 - 1
        );
        const right3 = activations.reduce(
          function(acc, activation) {
            return common_default.getMax(acc, activation.stopx);
          },
          actorObj.x + actorObj.width / 2 + 1
        );
        return [left3, right3];
      }, "activationBounds");
      __name(adjustLoopHeightForWrap, "adjustLoopHeightForWrap");
      __name(adjustCreatedDestroyedData, "adjustCreatedDestroyedData");
      draw11 = /* @__PURE__ */ __name(async function(_text, id41, _version, diagObj) {
        const { securityLevel, sequence, look, themeVariables } = getConfig2();
        conf2 = sequence;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
        bounds2.init();
        log.debug(diagObj.db);
        const diagram38 = securityLevel === "sandbox" ? root4.select(`[id="${id41}"]`) : select_default2(`[id="${id41}"]`);
        const actors2 = diagObj.db.getActors();
        const createdActors = diagObj.db.getCreatedActors();
        const destroyedActors = diagObj.db.getDestroyedActors();
        const boxes = diagObj.db.getBoxes();
        let actorKeys = diagObj.db.getActorKeys();
        const messages = diagObj.db.getMessages();
        const title2 = diagObj.db.getDiagramTitle();
        const hasBoxes = diagObj.db.hasAtLeastOneBox();
        const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle();
        const maxMessageWidthPerActor = await getMaxMessageWidthPerActor(actors2, messages, diagObj);
        conf2.height = await calculateActorMargins(actors2, maxMessageWidthPerActor, boxes);
        svgDraw_default2.insertComputerIcon(diagram38, id41);
        svgDraw_default2.insertDatabaseIcon(diagram38, id41);
        svgDraw_default2.insertClockIcon(diagram38, id41);
        if (hasBoxes) {
          bounds2.bumpVerticalPos(conf2.boxMargin);
          if (hasBoxTitles) {
            bounds2.bumpVerticalPos(boxes[0].textMaxHeight);
          }
        }
        if (conf2.hideUnusedParticipants === true) {
          const newActors = /* @__PURE__ */ new Set();
          messages.forEach((message) => {
            newActors.add(message.from);
            newActors.add(message.to);
          });
          actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));
        }
        const actorIndexMap = new Map(
          actorKeys.map((actorKey, index2) => [actors2.get(actorKey)?.name ?? actorKey, index2])
        );
        addActorRenderingData(diagram38, actors2, createdActors, actorKeys, 0, messages, false);
        const loopWidths = await calculateLoopBounds(messages, actors2, maxMessageWidthPerActor, diagObj);
        svgDraw_default2.insertArrowHead(diagram38, id41);
        svgDraw_default2.insertArrowCrossHead(diagram38, id41);
        svgDraw_default2.insertArrowFilledHead(diagram38, id41);
        svgDraw_default2.insertSequenceNumber(diagram38, id41);
        svgDraw_default2.insertSolidTopArrowHead(diagram38, id41);
        svgDraw_default2.insertSolidBottomArrowHead(diagram38, id41);
        svgDraw_default2.insertStickTopArrowHead(diagram38, id41);
        svgDraw_default2.insertStickBottomArrowHead(diagram38, id41);
        if (look === "neo") {
          svgDraw_default2.insertDropShadow(diagram38, conf2);
        }
        function activeEnd(msg, verticalPos) {
          const activationData = bounds2.endActivation(msg);
          if (activationData.starty + 18 > verticalPos) {
            activationData.starty = verticalPos - 6;
            verticalPos += 12;
          }
          svgDraw_default2.drawActivation(
            diagram38,
            activationData,
            verticalPos,
            conf2,
            actorActivations(msg.from).length,
            diagObj,
            actorIndexMap
          );
          bounds2.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);
        }
        __name(activeEnd, "activeEnd");
        let sequenceIndex = 1;
        let sequenceIndexStep = 1;
        const messagesToDraw = [];
        const backgrounds = [];
        let index = 0;
        for (const msg of messages) {
          let loopModel, noteModel, msgModel;
          switch (msg.type) {
            case diagObj.db.LINETYPE.NOTE:
              bounds2.resetVerticalPos();
              noteModel = msg.noteModel;
              await drawNote(diagram38, noteModel, msg.id);
              break;
            case diagObj.db.LINETYPE.ACTIVE_START:
              bounds2.newActivation(msg, diagram38, actors2);
              break;
            case diagObj.db.LINETYPE.CENTRAL_CONNECTION:
              bounds2.newActivation(msg, diagram38, actors2);
              break;
            case diagObj.db.LINETYPE.CENTRAL_CONNECTION_REVERSE:
              bounds2.newActivation(msg, diagram38, actors2);
              break;
            case diagObj.db.LINETYPE.ACTIVE_END:
              activeEnd(msg, bounds2.getVerticalPos());
              break;
            case diagObj.db.LINETYPE.LOOP_START:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin,
                conf2.boxMargin + conf2.boxTextMargin,
                (message) => bounds2.newLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.LOOP_END:
              loopModel = bounds2.endLoop();
              await svgDraw_default2.drawLoop(diagram38, loopModel, "loop", conf2, msg);
              bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos());
              bounds2.models.addLoop(loopModel);
              break;
            case diagObj.db.LINETYPE.RECT_START:
              adjustLoopHeightForWrap(loopWidths, msg, conf2.boxMargin, conf2.boxMargin, (message) => {
                let fill = message.message;
                if (!fill) {
                  fill = themeVariables?.rectBkgColor || themeVariables?.actorBkg || "rgba(128, 128, 128, 0.5)";
                }
                bounds2.newLoop(void 0, fill);
              });
              break;
            case diagObj.db.LINETYPE.RECT_END:
              loopModel = bounds2.endLoop();
              backgrounds.push(loopModel);
              bounds2.models.addLoop(loopModel);
              bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos());
              break;
            case diagObj.db.LINETYPE.OPT_START:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin,
                conf2.boxMargin + conf2.boxTextMargin,
                (message) => bounds2.newLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.OPT_END:
              loopModel = bounds2.endLoop();
              await svgDraw_default2.drawLoop(diagram38, loopModel, "opt", conf2, msg);
              bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos());
              bounds2.models.addLoop(loopModel);
              break;
            case diagObj.db.LINETYPE.ALT_START:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin,
                conf2.boxMargin + conf2.boxTextMargin,
                (message) => bounds2.newLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.ALT_ELSE:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin + conf2.boxTextMargin,
                conf2.boxMargin,
                (message) => bounds2.addSectionToLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.ALT_END:
              loopModel = bounds2.endLoop();
              await svgDraw_default2.drawLoop(diagram38, loopModel, "alt", conf2, msg);
              bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos());
              bounds2.models.addLoop(loopModel);
              break;
            case diagObj.db.LINETYPE.PAR_START:
            case diagObj.db.LINETYPE.PAR_OVER_START:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin,
                conf2.boxMargin + conf2.boxTextMargin,
                (message) => bounds2.newLoop(message)
              );
              bounds2.saveVerticalPos();
              break;
            case diagObj.db.LINETYPE.PAR_AND:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin + conf2.boxTextMargin,
                conf2.boxMargin,
                (message) => bounds2.addSectionToLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.PAR_END:
              loopModel = bounds2.endLoop();
              await svgDraw_default2.drawLoop(diagram38, loopModel, "par", conf2, msg);
              bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos());
              bounds2.models.addLoop(loopModel);
              break;
            case diagObj.db.LINETYPE.AUTONUMBER:
              sequenceIndex = msg.message.start || sequenceIndex;
              sequenceIndexStep = msg.message.step || sequenceIndexStep;
              if (msg.message.visible) {
                diagObj.db.enableSequenceNumbers();
              } else {
                diagObj.db.disableSequenceNumbers();
              }
              break;
            case diagObj.db.LINETYPE.CRITICAL_START:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin,
                conf2.boxMargin + conf2.boxTextMargin,
                (message) => bounds2.newLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.CRITICAL_OPTION:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin + conf2.boxTextMargin,
                conf2.boxMargin,
                (message) => bounds2.addSectionToLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.CRITICAL_END:
              loopModel = bounds2.endLoop();
              await svgDraw_default2.drawLoop(diagram38, loopModel, "critical", conf2, msg);
              bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos());
              bounds2.models.addLoop(loopModel);
              break;
            case diagObj.db.LINETYPE.BREAK_START:
              adjustLoopHeightForWrap(
                loopWidths,
                msg,
                conf2.boxMargin,
                conf2.boxMargin + conf2.boxTextMargin,
                (message) => bounds2.newLoop(message)
              );
              break;
            case diagObj.db.LINETYPE.BREAK_END:
              loopModel = bounds2.endLoop();
              await svgDraw_default2.drawLoop(diagram38, loopModel, "break", conf2, msg);
              bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos());
              bounds2.models.addLoop(loopModel);
              break;
            default:
              try {
                msgModel = msg.msgModel;
                msgModel.starty = bounds2.getVerticalPos();
                msgModel.sequenceIndex = sequenceIndex;
                msgModel.sequenceVisible = diagObj.db.showSequenceNumbers();
                msgModel.id = msg.id;
                msgModel.from = msg.from;
                msgModel.to = msg.to;
                const lineStartY = await boundMessage(diagram38, msgModel);
                adjustCreatedDestroyedData(
                  msg,
                  msgModel,
                  lineStartY,
                  index,
                  actors2,
                  createdActors,
                  destroyedActors
                );
                messagesToDraw.push({ messageModel: msgModel, lineStartY, msg });
                bounds2.models.addMessage(msgModel);
              } catch (e3) {
                log.error("error while drawing message", e3);
              }
          }
          if ([
            diagObj.db.LINETYPE.SOLID_OPEN,
            diagObj.db.LINETYPE.DOTTED_OPEN,
            diagObj.db.LINETYPE.SOLID,
            diagObj.db.LINETYPE.SOLID_TOP,
            diagObj.db.LINETYPE.SOLID_BOTTOM,
            diagObj.db.LINETYPE.STICK_TOP,
            diagObj.db.LINETYPE.STICK_BOTTOM,
            diagObj.db.LINETYPE.SOLID_TOP_DOTTED,
            diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED,
            diagObj.db.LINETYPE.STICK_TOP_DOTTED,
            diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,
            diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,
            diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE,
            diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,
            diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,
            diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,
            diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,
            diagObj.db.LINETYPE.DOTTED,
            diagObj.db.LINETYPE.SOLID_CROSS,
            diagObj.db.LINETYPE.DOTTED_CROSS,
            diagObj.db.LINETYPE.SOLID_POINT,
            diagObj.db.LINETYPE.DOTTED_POINT,
            diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,
            diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED
          ].includes(msg.type)) {
            sequenceIndex = Math.round((sequenceIndex + sequenceIndexStep) * 100) / 100;
          }
          index++;
        }
        log.debug("createdActors", createdActors);
        log.debug("destroyedActors", destroyedActors);
        await drawActors(diagram38, actors2, actorKeys, false, id41, diagObj, actorIndexMap);
        for (const e3 of messagesToDraw) {
          await drawMessage(diagram38, e3.messageModel, e3.lineStartY, diagObj, e3.msg, id41);
        }
        if (conf2.mirrorActors) {
          await drawActors(diagram38, actors2, actorKeys, true, id41, diagObj, actorIndexMap);
        }
        backgrounds.forEach((e3) => svgDraw_default2.drawBackgroundRect(diagram38, e3));
        fixLifeLineHeights(diagram38, actors2, actorKeys, conf2);
        for (const box2 of bounds2.models.boxes) {
          box2.height = bounds2.getVerticalPos() - box2.y;
          bounds2.insert(box2.x, box2.y, box2.x + box2.width, box2.height);
          const boxPadding = conf2.boxMargin * 2;
          box2.startx = box2.x - boxPadding;
          box2.starty = box2.y - boxPadding * 0.25;
          box2.stopx = box2.startx + box2.width + 2 * boxPadding;
          box2.stopy = box2.starty + box2.height + boxPadding * 0.75;
          box2.stroke = "rgb(0,0,0, 0.5)";
          svgDraw_default2.drawBox(diagram38, box2, conf2);
        }
        if (hasBoxes) {
          bounds2.bumpVerticalPos(conf2.boxMargin);
        }
        const requiredBoxSize = drawActorsPopup(diagram38, actors2, actorKeys, doc);
        const { bounds: box } = bounds2.getBounds();
        if (box.startx === void 0) {
          box.startx = 0;
        }
        if (box.starty === void 0) {
          box.starty = 0;
        }
        if (box.stopx === void 0) {
          box.stopx = 0;
        }
        if (box.stopy === void 0) {
          box.stopy = 0;
        }
        let boxHeight = box.stopy - box.starty;
        if (boxHeight < requiredBoxSize.maxHeight) {
          boxHeight = requiredBoxSize.maxHeight;
        }
        let height2 = boxHeight + 2 * conf2.diagramMarginY;
        if (conf2.mirrorActors) {
          height2 = height2 - conf2.boxMargin + conf2.bottomMarginAdj;
        }
        let boxWidth = box.stopx - box.startx;
        if (boxWidth < requiredBoxSize.maxWidth) {
          boxWidth = requiredBoxSize.maxWidth;
        }
        const width3 = boxWidth + 2 * conf2.diagramMarginX;
        if (title2) {
          diagram38.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 2 * conf2.diagramMarginX).attr("y", -25);
        }
        configureSvgSize(diagram38, height2, width3, conf2.useMaxWidth);
        const extraVertForTitle = title2 ? 40 : 0;
        const extraHeightForNeoActors = actors2.size && look === "neo" ? 30 : 0;
        diagram38.attr(
          "viewBox",
          box.startx - conf2.diagramMarginX + " -" + (conf2.diagramMarginY + extraVertForTitle) + " " + width3 + " " + (height2 + extraVertForTitle + extraHeightForNeoActors)
        );
        log.debug(`models:`, bounds2.models);
      }, "draw");
      __name(getMaxMessageWidthPerActor, "getMaxMessageWidthPerActor");
      getRequiredPopupWidth = /* @__PURE__ */ __name(function(actor) {
        let requiredPopupWidth = 0;
        const textFont = actorFont(conf2);
        for (const key in actor.links) {
          const labelDimensions = utils_default2.calculateTextDimensions(key, textFont);
          const labelWidth = labelDimensions.width + 2 * conf2.wrapPadding + 2 * conf2.boxMargin;
          if (requiredPopupWidth < labelWidth) {
            requiredPopupWidth = labelWidth;
          }
        }
        return requiredPopupWidth;
      }, "getRequiredPopupWidth");
      __name(calculateActorMargins, "calculateActorMargins");
      buildNoteModel = /* @__PURE__ */ __name(async function(msg, actors2, diagObj) {
        const fromActor = actors2.get(msg.from);
        const toActor = actors2.get(msg.to);
        const startx = fromActor.x;
        const stopx = toActor.x;
        const shouldWrap = msg.wrap && msg.message;
        let textDimensions = hasKatex(msg.message) ? await calculateMathMLDimensions(msg.message, getConfig2()) : utils_default2.calculateTextDimensions(
          shouldWrap ? utils_default2.wrapLabel(msg.message, conf2.width, noteFont(conf2)) : msg.message,
          noteFont(conf2)
        );
        const noteModel = {
          width: shouldWrap ? conf2.width : common_default.getMax(conf2.width, textDimensions.width + 2 * conf2.noteMargin),
          height: 0,
          startx: fromActor.x,
          stopx: 0,
          starty: 0,
          stopy: 0,
          message: msg.message
        };
        if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {
          noteModel.width = shouldWrap ? common_default.getMax(conf2.width, textDimensions.width) : common_default.getMax(
            fromActor.width / 2 + toActor.width / 2,
            textDimensions.width + 2 * conf2.noteMargin
          );
          noteModel.startx = startx + (fromActor.width + conf2.actorMargin) / 2;
        } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {
          noteModel.width = shouldWrap ? common_default.getMax(conf2.width, textDimensions.width + 2 * conf2.noteMargin) : common_default.getMax(
            fromActor.width / 2 + toActor.width / 2,
            textDimensions.width + 2 * conf2.noteMargin
          );
          noteModel.startx = startx - noteModel.width + (fromActor.width - conf2.actorMargin) / 2;
        } else if (msg.to === msg.from) {
          textDimensions = utils_default2.calculateTextDimensions(
            shouldWrap ? utils_default2.wrapLabel(msg.message, common_default.getMax(conf2.width, fromActor.width), noteFont(conf2)) : msg.message,
            noteFont(conf2)
          );
          noteModel.width = shouldWrap ? common_default.getMax(conf2.width, fromActor.width) : common_default.getMax(fromActor.width, conf2.width, textDimensions.width + 2 * conf2.noteMargin);
          noteModel.startx = startx + (fromActor.width - noteModel.width) / 2;
        } else {
          noteModel.width = Math.abs(startx + fromActor.width / 2 - (stopx + toActor.width / 2)) + conf2.actorMargin;
          noteModel.startx = startx < stopx ? startx + fromActor.width / 2 - conf2.actorMargin / 2 : stopx + toActor.width / 2 - conf2.actorMargin / 2;
        }
        if (shouldWrap) {
          noteModel.message = utils_default2.wrapLabel(
            msg.message,
            noteModel.width - 2 * conf2.wrapPadding,
            noteFont(conf2)
          );
        }
        log.debug(
          `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]`
        );
        return noteModel;
      }, "buildNoteModel");
      CENTRAL_CONNECTION_BASE_OFFSET = 4;
      CENTRAL_CONNECTION_BIDIRECTIONAL_OFFSET = 6;
      hasCentralConnection = /* @__PURE__ */ __name(function(msg, diagObj) {
        const { CENTRAL_CONNECTION, CENTRAL_CONNECTION_REVERSE, CENTRAL_CONNECTION_DUAL } = diagObj.db.LINETYPE;
        return [CENTRAL_CONNECTION, CENTRAL_CONNECTION_REVERSE, CENTRAL_CONNECTION_DUAL].includes(
          msg.centralConnection
        );
      }, "hasCentralConnection");
      calculateCentralConnectionOffset = /* @__PURE__ */ __name(function(msg, diagObj, isArrowToRight) {
        const {
          CENTRAL_CONNECTION_REVERSE,
          CENTRAL_CONNECTION_DUAL,
          BIDIRECTIONAL_SOLID,
          BIDIRECTIONAL_DOTTED
        } = diagObj.db.LINETYPE;
        let offset = 0;
        if (msg.centralConnection === CENTRAL_CONNECTION_REVERSE || msg.centralConnection === CENTRAL_CONNECTION_DUAL) {
          offset += CENTRAL_CONNECTION_BASE_OFFSET;
        }
        if ((msg.centralConnection === CENTRAL_CONNECTION_REVERSE || msg.centralConnection === CENTRAL_CONNECTION_DUAL) && (msg.type === BIDIRECTIONAL_SOLID || msg.type === BIDIRECTIONAL_DOTTED)) {
          offset += isArrowToRight ? 0 : -CENTRAL_CONNECTION_BIDIRECTIONAL_OFFSET;
        }
        return offset;
      }, "calculateCentralConnectionOffset");
      isReverseArrowType = /* @__PURE__ */ __name(function(msg, diagObj) {
        const {
          SOLID_ARROW_TOP_REVERSE,
          SOLID_ARROW_TOP_REVERSE_DOTTED,
          SOLID_ARROW_BOTTOM_REVERSE,
          SOLID_ARROW_BOTTOM_REVERSE_DOTTED,
          STICK_ARROW_TOP_REVERSE,
          STICK_ARROW_TOP_REVERSE_DOTTED,
          STICK_ARROW_BOTTOM_REVERSE,
          STICK_ARROW_BOTTOM_REVERSE_DOTTED
        } = diagObj.db.LINETYPE;
        return [
          SOLID_ARROW_TOP_REVERSE,
          SOLID_ARROW_TOP_REVERSE_DOTTED,
          SOLID_ARROW_BOTTOM_REVERSE,
          SOLID_ARROW_BOTTOM_REVERSE_DOTTED,
          STICK_ARROW_TOP_REVERSE,
          STICK_ARROW_TOP_REVERSE_DOTTED,
          STICK_ARROW_BOTTOM_REVERSE,
          STICK_ARROW_BOTTOM_REVERSE_DOTTED
        ].includes(msg.type);
      }, "isReverseArrowType");
      isBidirectionalArrowType = /* @__PURE__ */ __name(function(msg, diagObj) {
        const { BIDIRECTIONAL_SOLID, BIDIRECTIONAL_DOTTED } = diagObj.db.LINETYPE;
        return [BIDIRECTIONAL_SOLID, BIDIRECTIONAL_DOTTED].includes(msg.type);
      }, "isBidirectionalArrowType");
      buildMessageModel = /* @__PURE__ */ __name(function(msg, actors2, diagObj) {
        const { look } = getConfig2();
        if (![
          diagObj.db.LINETYPE.SOLID_OPEN,
          diagObj.db.LINETYPE.DOTTED_OPEN,
          diagObj.db.LINETYPE.SOLID,
          diagObj.db.LINETYPE.SOLID_TOP,
          diagObj.db.LINETYPE.SOLID_BOTTOM,
          diagObj.db.LINETYPE.STICK_TOP,
          diagObj.db.LINETYPE.STICK_BOTTOM,
          diagObj.db.LINETYPE.SOLID_TOP_DOTTED,
          diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED,
          diagObj.db.LINETYPE.STICK_TOP_DOTTED,
          diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED,
          diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,
          diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,
          diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE,
          diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,
          diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,
          diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,
          diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,
          diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,
          diagObj.db.LINETYPE.DOTTED,
          diagObj.db.LINETYPE.SOLID_CROSS,
          diagObj.db.LINETYPE.DOTTED_CROSS,
          diagObj.db.LINETYPE.SOLID_POINT,
          diagObj.db.LINETYPE.DOTTED_POINT,
          diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,
          diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED
        ].includes(msg.type)) {
          return {};
        }
        const [fromLeft, fromRight] = activationBounds(msg.from, actors2);
        const [toLeft, toRight] = activationBounds(msg.to, actors2);
        const isArrowToRight = fromLeft <= toLeft;
        let startx = isArrowToRight ? fromRight : fromLeft;
        let stopx = isArrowToRight ? toLeft : toRight;
        if (look === "neo") {
          const offset = 3;
          if (msg.type !== diagObj.db.LINETYPE.SOLID_OPEN) {
            stopx += isArrowToRight ? -offset : offset;
          }
          if (msg.type === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID || msg.type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED) {
            startx += isArrowToRight ? offset : -offset;
          }
        }
        startx += calculateCentralConnectionOffset(msg, diagObj, isArrowToRight);
        const isArrowToActivation = Math.abs(toLeft - toRight) > 2;
        const adjustValue = /* @__PURE__ */ __name((value2) => {
          return isArrowToRight ? -value2 : value2;
        }, "adjustValue");
        if (msg.from === msg.to) {
          stopx = startx;
        } else {
          if (msg.activate && !isArrowToActivation) {
            stopx += adjustValue(conf2.activationWidth / 2 - 1);
          }
          if (![
            diagObj.db.LINETYPE.SOLID_OPEN,
            diagObj.db.LINETYPE.DOTTED_OPEN,
            diagObj.db.LINETYPE.STICK_TOP,
            diagObj.db.LINETYPE.STICK_BOTTOM,
            diagObj.db.LINETYPE.STICK_TOP_DOTTED,
            diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,
            diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE,
            diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,
            diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,
            diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,
            diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE
          ].includes(msg.type)) {
            stopx += adjustValue(3);
          }
          if ([
            diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,
            diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,
            diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,
            diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE
          ].includes(msg.type)) {
            startx -= adjustValue(3);
          }
        }
        const allBounds = [fromLeft, fromRight, toLeft, toRight];
        const boundedWidth = Math.abs(startx - stopx);
        if (msg.wrap && msg.message) {
          msg.message = utils_default2.wrapLabel(
            msg.message,
            common_default.getMax(boundedWidth + 2 * conf2.wrapPadding, conf2.width),
            messageFont2(conf2)
          );
        }
        const msgDims = utils_default2.calculateTextDimensions(msg.message, messageFont2(conf2));
        return {
          width: common_default.getMax(
            msg.wrap ? 0 : msgDims.width + 2 * conf2.wrapPadding,
            boundedWidth + 2 * conf2.wrapPadding,
            conf2.width
          ),
          height: 0,
          startx,
          stopx,
          starty: 0,
          stopy: 0,
          message: msg.message,
          type: msg.type,
          wrap: msg.wrap,
          fromBounds: Math.min.apply(null, allBounds),
          toBounds: Math.max.apply(null, allBounds)
        };
      }, "buildMessageModel");
      calculateLoopBounds = /* @__PURE__ */ __name(async function(messages, actors2, _maxWidthPerActor, diagObj) {
        const loops = {};
        const stack = [];
        let current, noteModel, msgModel;
        for (const msg of messages) {
          switch (msg.type) {
            case diagObj.db.LINETYPE.LOOP_START:
            case diagObj.db.LINETYPE.ALT_START:
            case diagObj.db.LINETYPE.OPT_START:
            case diagObj.db.LINETYPE.PAR_START:
            case diagObj.db.LINETYPE.PAR_OVER_START:
            case diagObj.db.LINETYPE.CRITICAL_START:
            case diagObj.db.LINETYPE.BREAK_START:
              stack.push({
                id: msg.id,
                msg: msg.message,
                from: Number.MAX_SAFE_INTEGER,
                to: Number.MIN_SAFE_INTEGER,
                width: 0
              });
              break;
            case diagObj.db.LINETYPE.ALT_ELSE:
            case diagObj.db.LINETYPE.PAR_AND:
            case diagObj.db.LINETYPE.CRITICAL_OPTION:
              if (msg.message) {
                current = stack.pop();
                loops[current.id] = current;
                loops[msg.id] = current;
                stack.push(current);
              }
              break;
            case diagObj.db.LINETYPE.LOOP_END:
            case diagObj.db.LINETYPE.ALT_END:
            case diagObj.db.LINETYPE.OPT_END:
            case diagObj.db.LINETYPE.PAR_END:
            case diagObj.db.LINETYPE.CRITICAL_END:
            case diagObj.db.LINETYPE.BREAK_END:
              current = stack.pop();
              loops[current.id] = current;
              break;
            case diagObj.db.LINETYPE.ACTIVE_START:
              {
                const actorRect = actors2.get(msg.from ? msg.from : msg.to.actor);
                const stackedSize = actorActivations(msg.from ? msg.from : msg.to.actor).length;
                const x5 = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf2.activationWidth / 2;
                const toAdd = {
                  startx: x5,
                  stopx: x5 + conf2.activationWidth,
                  actor: msg.from,
                  enabled: true
                };
                bounds2.activations.push(toAdd);
              }
              break;
            case diagObj.db.LINETYPE.ACTIVE_END:
              {
                const lastActorActivationIdx = bounds2.activations.map((a2) => a2.actor).lastIndexOf(msg.from);
                bounds2.activations.splice(lastActorActivationIdx, 1).splice(0, 1);
              }
              break;
          }
          const isNote = msg.placement !== void 0;
          if (isNote) {
            noteModel = await buildNoteModel(msg, actors2, diagObj);
            msg.noteModel = noteModel;
            stack.forEach((stk) => {
              current = stk;
              current.from = common_default.getMin(current.from, noteModel.startx);
              current.to = common_default.getMax(current.to, noteModel.startx + noteModel.width);
              current.width = common_default.getMax(current.width, Math.abs(current.from - current.to)) - conf2.labelBoxWidth;
            });
          } else {
            msgModel = buildMessageModel(msg, actors2, diagObj);
            msg.msgModel = msgModel;
            if (msgModel.startx && msgModel.stopx && stack.length > 0) {
              stack.forEach((stk) => {
                current = stk;
                if (msgModel.startx === msgModel.stopx) {
                  const from2 = actors2.get(msg.from);
                  const to = actors2.get(msg.to);
                  current.from = common_default.getMin(
                    from2.x - msgModel.width / 2,
                    from2.x - from2.width / 2,
                    current.from
                  );
                  current.to = common_default.getMax(
                    to.x + msgModel.width / 2,
                    to.x + from2.width / 2,
                    current.to
                  );
                  current.width = common_default.getMax(current.width, Math.abs(current.to - current.from)) - conf2.labelBoxWidth;
                } else {
                  current.from = common_default.getMin(msgModel.startx, current.from);
                  current.to = common_default.getMax(msgModel.stopx, current.to);
                  current.width = common_default.getMax(current.width, msgModel.width) - conf2.labelBoxWidth;
                }
              });
            }
          }
        }
        bounds2.activations = [];
        log.debug("Loop type widths:", loops);
        return loops;
      }, "calculateLoopBounds");
      sequenceRenderer_default = {
        bounds: bounds2,
        drawActors,
        drawActorsPopup,
        setConf: setConf3,
        draw: draw11
      };
    }
  });

  // src/diagrams/sequence/sequenceDiagram.ts
  var sequenceDiagram_exports = {};
  __export(sequenceDiagram_exports, {
    diagram: () => diagram12
  });
  var diagram12;
  var init_sequenceDiagram2 = __esm({
    "src/diagrams/sequence/sequenceDiagram.ts"() {
      "use strict";
      init_sequenceDiagram();
      init_sequenceDb();
      init_styles9();
      init_diagramAPI();
      init_sequenceRenderer();
      diagram12 = {
        parser: sequenceDiagram_default,
        get db() {
          return new SequenceDB();
        },
        renderer: sequenceRenderer_default,
        styles: styles_default9,
        init: /* @__PURE__ */ __name((cnf) => {
          if (!cnf.sequence) {
            cnf.sequence = {};
          }
          if (cnf.wrap) {
            cnf.sequence.wrap = cnf.wrap;
            setConfig2({ sequence: { wrap: cnf.wrap } });
          }
        }, "init")
      };
    }
  });

  // src/diagrams/class/parser/classDiagram.jison
  var parser12, classDiagram_default;
  var init_classDiagram = __esm({
    "src/diagrams/class/parser/classDiagram.jison"() {
      "use strict";
      parser12 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 18], $V1 = [1, 19], $V2 = [1, 20], $V3 = [1, 41], $V4 = [1, 26], $V5 = [1, 42], $V6 = [1, 24], $V7 = [1, 25], $V8 = [1, 32], $V9 = [1, 33], $Va = [1, 34], $Vb = [1, 45], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 37], $Vf = [1, 38], $Vg = [1, 27], $Vh = [1, 28], $Vi = [1, 29], $Vj = [1, 30], $Vk = [1, 31], $Vl = [1, 44], $Vm = [1, 46], $Vn = [1, 43], $Vo = [1, 47], $Vp = [1, 9], $Vq = [1, 8, 9], $Vr = [1, 58], $Vs = [1, 59], $Vt = [1, 60], $Vu = [1, 61], $Vv = [1, 62], $Vw = [1, 63], $Vx = [1, 64], $Vy = [1, 8, 9, 41], $Vz = [1, 77], $VA = [1, 8, 9, 12, 13, 22, 39, 41, 44, 46, 68, 69, 70, 71, 72, 73, 74, 79, 81], $VB = [1, 8, 9, 12, 13, 18, 20, 22, 39, 41, 44, 46, 47, 60, 68, 69, 70, 71, 72, 73, 74, 79, 81, 86, 100, 102, 103], $VC = [13, 60, 86, 100, 102, 103], $VD = [13, 60, 73, 74, 86, 100, 102, 103], $VE = [13, 60, 68, 69, 70, 71, 72, 86, 100, 102, 103], $VF = [1, 103], $VG = [1, 121], $VH = [1, 117], $VI = [1, 113], $VJ = [1, 119], $VK = [1, 114], $VL = [1, 115], $VM = [1, 116], $VN = [1, 118], $VO = [1, 120], $VP = [22, 50, 60, 61, 82, 86, 87, 88, 89, 90], $VQ = [1, 128], $VR = [12, 39], $VS = [1, 8, 9, 39, 41, 44, 46], $VT = [1, 8, 9, 22], $VU = [1, 153], $VV = [1, 8, 9, 61], $VW = [1, 8, 9, 22, 50, 60, 61, 82, 86, 87, 88, 89, 90];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statements": 5, "graphConfig": 6, "CLASS_DIAGRAM": 7, "NEWLINE": 8, "EOF": 9, "statement": 10, "classLabel": 11, "SQS": 12, "STR": 13, "SQE": 14, "namespaceName": 15, "alphaNumToken": 16, "classLiteralName": 17, "DOT": 18, "className": 19, "GENERICTYPE": 20, "relationStatement": 21, "LABEL": 22, "namespaceStatement": 23, "classStatement": 24, "memberStatement": 25, "annotationStatement": 26, "clickStatement": 27, "styleStatement": 28, "cssClassStatement": 29, "noteStatement": 30, "classDefStatement": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "namespaceIdentifier": 38, "STRUCT_START": 39, "classStatements": 40, "STRUCT_STOP": 41, "NAMESPACE": 42, "classIdentifier": 43, "STYLE_SEPARATOR": 44, "members": 45, "ANNOTATION_START": 46, "ANNOTATION_END": 47, "CLASS": 48, "emptyBody": 49, "SPACE": 50, "MEMBER": 51, "SEPARATOR": 52, "relation": 53, "NOTE_FOR": 54, "noteText": 55, "NOTE": 56, "CLASSDEF": 57, "classList": 58, "stylesOpt": 59, "ALPHA": 60, "COMMA": 61, "direction_tb": 62, "direction_bt": 63, "direction_rl": 64, "direction_lr": 65, "relationType": 66, "lineType": 67, "AGGREGATION": 68, "EXTENSION": 69, "COMPOSITION": 70, "DEPENDENCY": 71, "LOLLIPOP": 72, "LINE": 73, "DOTTED_LINE": 74, "CALLBACK": 75, "LINK": 76, "LINK_TARGET": 77, "CLICK": 78, "CALLBACK_NAME": 79, "CALLBACK_ARGS": 80, "HREF": 81, "STYLE": 82, "CSSCLASS": 83, "style": 84, "styleComponent": 85, "NUM": 86, "COLON": 87, "UNIT": 88, "BRKT": 89, "PCT": 90, "commentToken": 91, "textToken": 92, "graphCodeTokens": 93, "textNoTagsToken": 94, "TAGSTART": 95, "TAGEND": 96, "==": 97, "--": 98, "DEFAULT": 99, "MINUS": 100, "keywords": 101, "UNICODE_TEXT": 102, "BQUOTE_STR": 103, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 18: "DOT", 20: "GENERICTYPE", 22: "LABEL", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 39: "STRUCT_START", 41: "STRUCT_STOP", 42: "NAMESPACE", 44: "STYLE_SEPARATOR", 46: "ANNOTATION_START", 47: "ANNOTATION_END", 48: "CLASS", 50: "SPACE", 51: "MEMBER", 52: "SEPARATOR", 54: "NOTE_FOR", 56: "NOTE", 57: "CLASSDEF", 60: "ALPHA", 61: "COMMA", 62: "direction_tb", 63: "direction_bt", 64: "direction_rl", 65: "direction_lr", 68: "AGGREGATION", 69: "EXTENSION", 70: "COMPOSITION", 71: "DEPENDENCY", 72: "LOLLIPOP", 73: "LINE", 74: "DOTTED_LINE", 75: "CALLBACK", 76: "LINK", 77: "LINK_TARGET", 78: "CLICK", 79: "CALLBACK_NAME", 80: "CALLBACK_ARGS", 81: "HREF", 82: "STYLE", 83: "CSSCLASS", 86: "NUM", 87: "COLON", 88: "UNIT", 89: "BRKT", 90: "PCT", 93: "graphCodeTokens", 95: "TAGSTART", 96: "TAGEND", 97: "==", 98: "--", 99: "DEFAULT", 100: "MINUS", 101: "keywords", 102: "UNICODE_TEXT", 103: "BQUOTE_STR" },
          productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 1], [15, 3], [15, 2], [19, 1], [19, 3], [19, 1], [19, 2], [19, 2], [19, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [23, 4], [23, 5], [38, 2], [38, 3], [40, 1], [40, 2], [40, 3], [40, 1], [40, 2], [40, 3], [40, 1], [40, 2], [40, 3], [24, 1], [24, 3], [24, 4], [24, 3], [24, 6], [24, 4], [24, 7], [24, 6], [43, 2], [43, 3], [49, 0], [49, 2], [49, 2], [26, 4], [45, 1], [45, 2], [25, 1], [25, 2], [25, 1], [25, 1], [21, 3], [21, 4], [21, 4], [21, 5], [30, 3], [30, 2], [31, 3], [58, 1], [58, 3], [32, 1], [32, 1], [32, 1], [32, 1], [53, 3], [53, 2], [53, 2], [53, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [67, 1], [67, 1], [27, 3], [27, 4], [27, 3], [27, 4], [27, 4], [27, 5], [27, 3], [27, 4], [27, 4], [27, 5], [27, 4], [27, 5], [27, 5], [27, 6], [28, 3], [29, 3], [59, 1], [59, 3], [84, 1], [84, 2], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [91, 1], [91, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [94, 1], [94, 1], [94, 1], [94, 1], [16, 1], [16, 1], [16, 1], [16, 1], [17, 1], [55, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 8:
                this.$ = $$[$0 - 1];
                break;
              case 9:
              case 10:
              case 13:
              case 15:
                this.$ = $$[$0];
                break;
              case 11:
              case 14:
                this.$ = $$[$0 - 2] + "." + $$[$0];
                break;
              case 12:
              case 16:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
              case 17:
              case 18:
                this.$ = $$[$0 - 1] + "~" + $$[$0] + "~";
                break;
              case 19:
                yy.addRelation($$[$0]);
                break;
              case 20:
                $$[$0 - 1].title = yy.cleanupLabel($$[$0]);
                yy.addRelation($$[$0 - 1]);
                break;
              case 31:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 32:
              case 33:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 34:
                yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1][0], $$[$0 - 1][1]);
                yy.popNamespace();
                break;
              case 35:
                yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1][0], $$[$0 - 1][1]);
                yy.popNamespace();
                break;
              case 36:
                this.$ = yy.addNamespace($$[$0]);
                break;
              case 37:
                this.$ = yy.addNamespace($$[$0 - 1], $$[$0]);
                break;
              case 38:
                this.$ = [[$$[$0]], []];
                break;
              case 39:
                this.$ = [[$$[$0 - 1]], []];
                break;
              case 40:
                $$[$0][0].unshift($$[$0 - 2]);
                this.$ = $$[$0];
                break;
              case 41:
                this.$ = [[], [$$[$0]]];
                break;
              case 42:
                this.$ = [[], [$$[$0 - 1]]];
                break;
              case 43:
                $$[$0][1].unshift($$[$0 - 2]);
                this.$ = $$[$0];
                break;
              case 44:
              case 45:
                this.$ = [[], []];
                break;
              case 46:
                this.$ = $$[$0];
                break;
              case 48:
                yy.setCssClass($$[$0 - 2], $$[$0]);
                break;
              case 49:
                yy.addMembers($$[$0 - 3], $$[$0 - 1]);
                break;
              case 51:
                yy.setCssClass($$[$0 - 5], $$[$0 - 3]);
                yy.addMembers($$[$0 - 5], $$[$0 - 1]);
                break;
              case 52:
                yy.addAnnotation($$[$0 - 3], $$[$0 - 1]);
                break;
              case 53:
                yy.addAnnotation($$[$0 - 6], $$[$0 - 4]);
                yy.addMembers($$[$0 - 6], $$[$0 - 1]);
                break;
              case 54:
                yy.addAnnotation($$[$0 - 5], $$[$0 - 3]);
                break;
              case 55:
                this.$ = $$[$0];
                yy.addClass($$[$0]);
                break;
              case 56:
                this.$ = $$[$0 - 1];
                yy.addClass($$[$0 - 1]);
                yy.setClassLabel($$[$0 - 1], $$[$0]);
                break;
              case 60:
                yy.addAnnotation($$[$0], $$[$0 - 2]);
                break;
              case 61:
              case 74:
                this.$ = [$$[$0]];
                break;
              case 62:
                $$[$0].push($$[$0 - 1]);
                this.$ = $$[$0];
                break;
              case 63:
                break;
              case 64:
                yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0]));
                break;
              case 65:
                break;
              case 66:
                break;
              case 67:
                this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" };
                break;
              case 68:
                this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" };
                break;
              case 69:
                this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] };
                break;
              case 70:
                this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] };
                break;
              case 71:
                this.$ = yy.addNote($$[$0], $$[$0 - 1]);
                break;
              case 72:
                this.$ = yy.addNote($$[$0]);
                break;
              case 73:
                this.$ = $$[$0 - 2];
                yy.defineClass($$[$0 - 1], $$[$0]);
                break;
              case 75:
                this.$ = $$[$0 - 2].concat([$$[$0]]);
                break;
              case 76:
                yy.setDirection("TB");
                break;
              case 77:
                yy.setDirection("BT");
                break;
              case 78:
                yy.setDirection("RL");
                break;
              case 79:
                yy.setDirection("LR");
                break;
              case 80:
                this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] };
                break;
              case 81:
                this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] };
                break;
              case 82:
                this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] };
                break;
              case 83:
                this.$ = { type1: "none", type2: "none", lineType: $$[$0] };
                break;
              case 84:
                this.$ = yy.relationType.AGGREGATION;
                break;
              case 85:
                this.$ = yy.relationType.EXTENSION;
                break;
              case 86:
                this.$ = yy.relationType.COMPOSITION;
                break;
              case 87:
                this.$ = yy.relationType.DEPENDENCY;
                break;
              case 88:
                this.$ = yy.relationType.LOLLIPOP;
                break;
              case 89:
                this.$ = yy.lineType.LINE;
                break;
              case 90:
                this.$ = yy.lineType.DOTTED_LINE;
                break;
              case 91:
              case 97:
                this.$ = $$[$0 - 2];
                yy.setClickEvent($$[$0 - 1], $$[$0]);
                break;
              case 92:
              case 98:
                this.$ = $$[$0 - 3];
                yy.setClickEvent($$[$0 - 2], $$[$0 - 1]);
                yy.setTooltip($$[$0 - 2], $$[$0]);
                break;
              case 93:
                this.$ = $$[$0 - 2];
                yy.setLink($$[$0 - 1], $$[$0]);
                break;
              case 94:
                this.$ = $$[$0 - 3];
                yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);
                break;
              case 95:
                this.$ = $$[$0 - 3];
                yy.setLink($$[$0 - 2], $$[$0 - 1]);
                yy.setTooltip($$[$0 - 2], $$[$0]);
                break;
              case 96:
                this.$ = $$[$0 - 4];
                yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);
                yy.setTooltip($$[$0 - 3], $$[$0 - 1]);
                break;
              case 99:
                this.$ = $$[$0 - 3];
                yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);
                break;
              case 100:
                this.$ = $$[$0 - 4];
                yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);
                yy.setTooltip($$[$0 - 3], $$[$0]);
                break;
              case 101:
                this.$ = $$[$0 - 3];
                yy.setLink($$[$0 - 2], $$[$0]);
                break;
              case 102:
                this.$ = $$[$0 - 4];
                yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]);
                break;
              case 103:
                this.$ = $$[$0 - 4];
                yy.setLink($$[$0 - 3], $$[$0 - 1]);
                yy.setTooltip($$[$0 - 3], $$[$0]);
                break;
              case 104:
                this.$ = $$[$0 - 5];
                yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);
                yy.setTooltip($$[$0 - 4], $$[$0 - 1]);
                break;
              case 105:
                this.$ = $$[$0 - 2];
                yy.setCssStyle($$[$0 - 1], $$[$0]);
                break;
              case 106:
                yy.setCssClass($$[$0 - 1], $$[$0]);
                break;
              case 107:
                this.$ = [$$[$0]];
                break;
              case 108:
                $$[$0 - 2].push($$[$0]);
                this.$ = $$[$0 - 2];
                break;
              case 110:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 48: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o2($Vp, [2, 5], { 8: [1, 48] }), { 8: [1, 49] }, o2($Vq, [2, 19], { 22: [1, 50] }), o2($Vq, [2, 21]), o2($Vq, [2, 22]), o2($Vq, [2, 23]), o2($Vq, [2, 24]), o2($Vq, [2, 25]), o2($Vq, [2, 26]), o2($Vq, [2, 27]), o2($Vq, [2, 28]), o2($Vq, [2, 29]), o2($Vq, [2, 30]), { 34: [1, 51] }, { 36: [1, 52] }, o2($Vq, [2, 33]), o2($Vq, [2, 63], { 53: 53, 66: 56, 67: 57, 13: [1, 54], 22: [1, 55], 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }), { 39: [1, 65] }, o2($Vy, [2, 47], { 39: [1, 67], 44: [1, 66], 46: [1, 68] }), o2($Vq, [2, 65]), o2($Vq, [2, 66]), { 16: 69, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 16: 39, 17: 40, 19: 70, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 71, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 72, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 60: [1, 73] }, { 13: [1, 74] }, { 16: 39, 17: 40, 19: 75, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: $Vz, 55: 76 }, { 58: 78, 60: [1, 79] }, o2($Vq, [2, 76]), o2($Vq, [2, 77]), o2($Vq, [2, 78]), o2($Vq, [2, 79]), o2($VA, [2, 13], { 16: 39, 17: 40, 19: 81, 18: [1, 80], 20: [1, 82], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), o2($VA, [2, 15], { 20: [1, 83] }), { 15: 84, 16: 85, 17: 86, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 87, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VB, [2, 133]), o2($VB, [2, 134]), o2($VB, [2, 135]), o2($VB, [2, 136]), o2([1, 8, 9, 12, 13, 20, 22, 39, 41, 44, 46, 68, 69, 70, 71, 72, 73, 74, 79, 81], [2, 137]), o2($Vp, [2, 6], { 10: 5, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 19: 21, 38: 22, 43: 23, 16: 39, 17: 40, 5: 88, 33: $V0, 35: $V1, 37: $V2, 42: $V3, 46: $V4, 48: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), { 5: 89, 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 48: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($Vq, [2, 20]), o2($Vq, [2, 31]), o2($Vq, [2, 32]), { 13: [1, 91], 16: 39, 17: 40, 19: 90, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 53: 92, 66: 56, 67: 57, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }, o2($Vq, [2, 64]), { 67: 93, 73: $Vw, 74: $Vx }, o2($VC, [2, 83], { 66: 94, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o2($VD, [2, 84]), o2($VD, [2, 85]), o2($VD, [2, 86]), o2($VD, [2, 87]), o2($VD, [2, 88]), o2($VE, [2, 89]), o2($VE, [2, 90]), { 8: [1, 96], 23: 99, 24: 97, 30: 98, 38: 22, 40: 95, 42: $V3, 43: 23, 48: $V5, 54: $V8, 56: $V9 }, { 16: 100, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 41: [1, 102], 45: 101, 51: $VF }, { 16: 104, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 47: [1, 105] }, { 13: [1, 106] }, { 13: [1, 107] }, { 79: [1, 108], 81: [1, 109] }, { 22: $VG, 50: $VH, 59: 110, 60: $VI, 82: $VJ, 84: 111, 85: 112, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, { 60: [1, 122] }, { 13: $Vz, 55: 123 }, o2($Vy, [2, 72]), o2($Vy, [2, 138]), { 22: $VG, 50: $VH, 59: 124, 60: $VI, 61: [1, 125], 82: $VJ, 84: 111, 85: 112, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o2($VP, [2, 74]), { 16: 39, 17: 40, 19: 126, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VA, [2, 16]), o2($VA, [2, 17]), o2($VA, [2, 18]), { 11: 127, 12: $VQ, 39: [2, 36] }, o2($VR, [2, 9], { 16: 85, 17: 86, 15: 130, 18: [1, 129], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), o2($VR, [2, 10]), o2($VS, [2, 55], { 11: 131, 12: $VQ }), o2($Vp, [2, 7]), { 9: [1, 132] }, o2($VT, [2, 67]), { 16: 39, 17: 40, 19: 133, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: [1, 135], 16: 39, 17: 40, 19: 134, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VC, [2, 82], { 66: 136, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o2($VC, [2, 81]), { 41: [1, 137] }, { 23: 99, 24: 97, 30: 98, 38: 22, 40: 138, 42: $V3, 43: 23, 48: $V5, 54: $V8, 56: $V9 }, { 8: [1, 139], 41: [2, 38] }, { 8: [1, 140], 41: [2, 41] }, { 8: [1, 141], 41: [2, 44] }, o2($Vy, [2, 48], { 39: [1, 142] }), { 41: [1, 143] }, o2($Vy, [2, 50]), { 41: [2, 61], 45: 144, 51: $VF }, { 47: [1, 145] }, { 16: 39, 17: 40, 19: 146, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($Vq, [2, 91], { 13: [1, 147] }), o2($Vq, [2, 93], { 13: [1, 149], 77: [1, 148] }), o2($Vq, [2, 97], { 13: [1, 150], 80: [1, 151] }), { 13: [1, 152] }, o2($Vq, [2, 105], { 61: $VU }), o2($VV, [2, 107], { 85: 154, 22: $VG, 50: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o2($VW, [2, 109]), o2($VW, [2, 111]), o2($VW, [2, 112]), o2($VW, [2, 113]), o2($VW, [2, 114]), o2($VW, [2, 115]), o2($VW, [2, 116]), o2($VW, [2, 117]), o2($VW, [2, 118]), o2($VW, [2, 119]), o2($Vq, [2, 106]), o2($Vy, [2, 71]), o2($Vq, [2, 73], { 61: $VU }), { 60: [1, 155] }, o2($VA, [2, 14]), { 39: [2, 37] }, { 13: [1, 156] }, { 15: 157, 16: 85, 17: 86, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VR, [2, 12]), o2($VS, [2, 56]), { 1: [2, 4] }, o2($VT, [2, 69]), o2($VT, [2, 68]), { 16: 39, 17: 40, 19: 158, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VC, [2, 80]), o2($Vy, [2, 34]), { 41: [1, 159] }, { 23: 99, 24: 97, 30: 98, 38: 22, 40: 160, 41: [2, 39], 42: $V3, 43: 23, 48: $V5, 54: $V8, 56: $V9 }, { 23: 99, 24: 97, 30: 98, 38: 22, 40: 161, 41: [2, 42], 42: $V3, 43: 23, 48: $V5, 54: $V8, 56: $V9 }, { 23: 99, 24: 97, 30: 98, 38: 22, 40: 162, 41: [2, 45], 42: $V3, 43: 23, 48: $V5, 54: $V8, 56: $V9 }, { 45: 163, 51: $VF }, o2($Vy, [2, 49]), { 41: [2, 62] }, o2($Vy, [2, 52], { 39: [1, 164] }), o2($Vq, [2, 60]), o2($Vq, [2, 92]), o2($Vq, [2, 94]), o2($Vq, [2, 95], { 77: [1, 165] }), o2($Vq, [2, 98]), o2($Vq, [2, 99], { 13: [1, 166] }), o2($Vq, [2, 101], { 13: [1, 168], 77: [1, 167] }), { 22: $VG, 50: $VH, 60: $VI, 82: $VJ, 84: 169, 85: 112, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o2($VW, [2, 110]), o2($VP, [2, 75]), { 14: [1, 170] }, o2($VR, [2, 11]), o2($VT, [2, 70]), o2($Vy, [2, 35]), { 41: [2, 40] }, { 41: [2, 43] }, { 41: [2, 46] }, { 41: [1, 171] }, { 41: [1, 173], 45: 172, 51: $VF }, o2($Vq, [2, 96]), o2($Vq, [2, 100]), o2($Vq, [2, 102]), o2($Vq, [2, 103], { 77: [1, 174] }), o2($VV, [2, 108], { 85: 154, 22: $VG, 50: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o2($VS, [2, 8]), o2($Vy, [2, 51]), { 41: [1, 175] }, o2($Vy, [2, 54]), o2($Vq, [2, 104]), o2($Vy, [2, 53])],
          defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 127: [2, 37], 132: [2, 4], 144: [2, 62], 160: [2, 40], 161: [2, 43], 162: [2, 46] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: {},
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  return 62;
                  break;
                case 1:
                  return 63;
                  break;
                case 2:
                  return 64;
                  break;
                case 3:
                  return 65;
                  break;
                case 4:
                  break;
                case 5:
                  break;
                case 6:
                  this.begin("acc_title");
                  return 33;
                  break;
                case 7:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 8:
                  this.begin("acc_descr");
                  return 35;
                  break;
                case 9:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 10:
                  this.begin("acc_descr_multiline");
                  break;
                case 11:
                  this.popState();
                  break;
                case 12:
                  return "acc_descr_multiline_value";
                  break;
                case 13:
                  return 8;
                  break;
                case 14:
                  break;
                case 15:
                  return 7;
                  break;
                case 16:
                  return 7;
                  break;
                case 17:
                  return "EDGE_STATE";
                  break;
                case 18:
                  this.begin("callback_name");
                  break;
                case 19:
                  this.popState();
                  break;
                case 20:
                  this.popState();
                  this.begin("callback_args");
                  break;
                case 21:
                  return 79;
                  break;
                case 22:
                  this.popState();
                  break;
                case 23:
                  return 80;
                  break;
                case 24:
                  this.popState();
                  break;
                case 25:
                  return "STR";
                  break;
                case 26:
                  this.begin("string");
                  break;
                case 27:
                  return 82;
                  break;
                case 28:
                  return 57;
                  break;
                case 29:
                  this.begin("namespace");
                  return 42;
                  break;
                case 30:
                  this.popState();
                  return 8;
                  break;
                case 31:
                  break;
                case 32:
                  this.begin("namespace-body");
                  return 39;
                  break;
                case 33:
                  this.popState();
                  this.less(0);
                  break;
                case 34:
                  this.popState();
                  return 41;
                  break;
                case 35:
                  return "EOF_IN_STRUCT";
                  break;
                case 36:
                  return 8;
                  break;
                case 37:
                  break;
                case 38:
                  return "EDGE_STATE";
                  break;
                case 39:
                  this.begin("class");
                  return 48;
                  break;
                case 40:
                  this.popState();
                  return 8;
                  break;
                case 41:
                  break;
                case 42:
                  this.popState();
                  this.popState();
                  return 41;
                  break;
                case 43:
                  this.begin("class-body");
                  return 39;
                  break;
                case 44:
                  this.popState();
                  return 41;
                  break;
                case 45:
                  return "EOF_IN_STRUCT";
                  break;
                case 46:
                  return "EDGE_STATE";
                  break;
                case 47:
                  return "OPEN_IN_STRUCT";
                  break;
                case 48:
                  break;
                case 49:
                  return "MEMBER";
                  break;
                case 50:
                  return 83;
                  break;
                case 51:
                  return 75;
                  break;
                case 52:
                  return 76;
                  break;
                case 53:
                  return 78;
                  break;
                case 54:
                  return 54;
                  break;
                case 55:
                  return 56;
                  break;
                case 56:
                  return 46;
                  break;
                case 57:
                  return 47;
                  break;
                case 58:
                  return 81;
                  break;
                case 59:
                  this.popState();
                  break;
                case 60:
                  return "GENERICTYPE";
                  break;
                case 61:
                  this.begin("generic");
                  break;
                case 62:
                  this.popState();
                  break;
                case 63:
                  return "BQUOTE_STR";
                  break;
                case 64:
                  this.begin("bqstring");
                  break;
                case 65:
                  return 77;
                  break;
                case 66:
                  return 77;
                  break;
                case 67:
                  return 77;
                  break;
                case 68:
                  return 77;
                  break;
                case 69:
                  return 69;
                  break;
                case 70:
                  return 69;
                  break;
                case 71:
                  return 71;
                  break;
                case 72:
                  return 71;
                  break;
                case 73:
                  return 70;
                  break;
                case 74:
                  return 68;
                  break;
                case 75:
                  return 72;
                  break;
                case 76:
                  return 73;
                  break;
                case 77:
                  return 74;
                  break;
                case 78:
                  return 22;
                  break;
                case 79:
                  return 44;
                  break;
                case 80:
                  return 100;
                  break;
                case 81:
                  return 18;
                  break;
                case 82:
                  return "PLUS";
                  break;
                case 83:
                  return 87;
                  break;
                case 84:
                  return 61;
                  break;
                case 85:
                  return 89;
                  break;
                case 86:
                  return 89;
                  break;
                case 87:
                  return 90;
                  break;
                case 88:
                  return "EQUALS";
                  break;
                case 89:
                  return "EQUALS";
                  break;
                case 90:
                  return 60;
                  break;
                case 91:
                  return 12;
                  break;
                case 92:
                  return 14;
                  break;
                case 93:
                  return "PUNCTUATION";
                  break;
                case 94:
                  return 86;
                  break;
                case 95:
                  return 102;
                  break;
                case 96:
                  return 50;
                  break;
                case 97:
                  return 50;
                  break;
                case 98:
                  return 9;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:style\b)/, /^(?:classDef\b)/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:\s)/, /^(?:$)/],
            conditions: { "namespace-body": { "rules": [26, 29, 34, 35, 36, 37, 38, 39, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "namespace": { "rules": [26, 29, 30, 31, 32, 33, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "class-body": { "rules": [26, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "class": { "rules": [26, 40, 41, 42, 43, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "acc_descr": { "rules": [9, 26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "acc_title": { "rules": [7, 26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "href": { "rules": [26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "struct": { "rules": [26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "generic": { "rules": [26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "bqstring": { "rules": [26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "string": { "rules": [24, 25, 26, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 39, 50, 51, 52, 53, 54, 55, 56, 57, 58, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser12.parser = parser12;
      classDiagram_default = parser12;
    }
  });

  // src/diagrams/class/classTypes.ts
  var visibilityValues, ClassMember;
  var init_classTypes = __esm({
    "src/diagrams/class/classTypes.ts"() {
      "use strict";
      init_diagramAPI();
      init_common();
      visibilityValues = ["#", "+", "~", "-", ""];
      ClassMember = class {
        static {
          __name(this, "ClassMember");
        }
        constructor(input, memberType) {
          this.memberType = memberType;
          this.visibility = "";
          this.classifier = "";
          this.text = "";
          const sanitizedInput = sanitizeText(input, getConfig2());
          this.parseMember(sanitizedInput);
        }
        getDisplayDetails() {
          let displayText = this.visibility + parseGenericTypes(this.id);
          if (this.memberType === "method") {
            displayText += `(${parseGenericTypes(this.parameters.trim())})`;
            if (this.returnType) {
              displayText += " : " + parseGenericTypes(this.returnType);
            }
          }
          displayText = displayText.trim();
          const cssStyle = this.parseClassifier();
          return {
            displayText,
            cssStyle
          };
        }
        parseMember(input) {
          let potentialClassifier = "";
          if (this.memberType === "method") {
            const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/;
            const match3 = methodRegEx.exec(input);
            if (match3) {
              const detectedVisibility = match3[1] ? match3[1].trim() : "";
              if (visibilityValues.includes(detectedVisibility)) {
                this.visibility = detectedVisibility;
              }
              this.id = match3[2];
              this.parameters = match3[3] ? match3[3].trim() : "";
              potentialClassifier = match3[4] ? match3[4].trim() : "";
              this.returnType = match3[5] ? match3[5].trim() : "";
              if (potentialClassifier === "") {
                const lastChar = this.returnType.substring(this.returnType.length - 1);
                if (/[$*]/.exec(lastChar)) {
                  potentialClassifier = lastChar;
                  this.returnType = this.returnType.substring(0, this.returnType.length - 1);
                }
              }
            }
          } else {
            const length2 = input.length;
            const firstChar = input.substring(0, 1);
            const lastChar = input.substring(length2 - 1);
            if (visibilityValues.includes(firstChar)) {
              this.visibility = firstChar;
            }
            if (/[$*]/.exec(lastChar)) {
              potentialClassifier = lastChar;
            }
            this.id = input.substring(
              this.visibility === "" ? 0 : 1,
              potentialClassifier === "" ? length2 : length2 - 1
            );
          }
          this.classifier = potentialClassifier;
          this.id = this.id.startsWith(" ") ? " " + this.id.trim() : this.id.trim();
          const combinedText = `${this.visibility ? "\\" + this.visibility : ""}${parseGenericTypes(this.id)}${this.memberType === "method" ? `(${parseGenericTypes(this.parameters)})${this.returnType ? " : " + parseGenericTypes(this.returnType) : ""}` : ""}`;
          this.text = combinedText.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
          if (this.text.startsWith("\\&lt;")) {
            this.text = this.text.replace("\\&lt;", "~");
          }
        }
        parseClassifier() {
          switch (this.classifier) {
            case "*":
              return "font-style:italic;";
            case "$":
              return "text-decoration:underline;";
            default:
              return "";
          }
        }
      };
    }
  });

  // src/diagrams/class/classDb.ts
  var MERMAID_DOM_ID_PREFIX2, classCounter, sanitizeText4, ClassDB;
  var init_classDb = __esm({
    "src/diagrams/class/classDb.ts"() {
      "use strict";
      init_src32();
      init_logger();
      init_diagramAPI();
      init_common();
      init_utils2();
      init_commonDb();
      init_svgDrawCommon();
      init_classTypes();
      init_purify_es();
      MERMAID_DOM_ID_PREFIX2 = "classId-";
      classCounter = 0;
      sanitizeText4 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, getConfig2()), "sanitizeText");
      ClassDB = class _ClassDB {
        constructor() {
          this.relations = [];
          this.classes = /* @__PURE__ */ new Map();
          this.styleClasses = /* @__PURE__ */ new Map();
          this.notes = /* @__PURE__ */ new Map();
          this.interfaces = [];
          // private static classCounter = 0;
          this.namespaces = /* @__PURE__ */ new Map();
          this.namespaceCounter = 0;
          this.namespaceStack = [];
          this.diagramId = "";
          // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
          this.functions = [];
          this.lineType = {
            LINE: 0,
            DOTTED_LINE: 1
          };
          this.relationType = {
            AGGREGATION: 0,
            EXTENSION: 1,
            COMPOSITION: 2,
            DEPENDENCY: 3,
            LOLLIPOP: 4
          };
          this.setupToolTips = /* @__PURE__ */ __name((element3) => {
            const tooltipElem = createTooltip();
            const svg2 = select_default2(element3).select("svg");
            const nodes5 = svg2.selectAll("g").filter(function() {
              return select_default2(this).attr("title") !== null;
            });
            nodes5.on("mouseover", (event3) => {
              const el = select_default2(event3.currentTarget);
              const title2 = el.attr("title");
              if (!title2) {
                return;
              }
              const rect3 = event3.currentTarget.getBoundingClientRect();
              tooltipElem.transition().duration(200).style("opacity", ".9");
              tooltipElem.html(purify.sanitize(title2)).style("left", `${window.scrollX + rect3.left + rect3.width / 2}px`).style("top", `${window.scrollY + rect3.bottom + 4}px`);
              el.classed("hover", true);
            }).on("mouseout", (event3) => {
              tooltipElem.transition().duration(500).style("opacity", 0);
              select_default2(event3.currentTarget).classed("hover", false);
            });
          }, "setupToolTips");
          this.direction = "TB";
          this.setAccTitle = setAccTitle;
          this.getAccTitle = getAccTitle;
          this.setAccDescription = setAccDescription;
          this.getAccDescription = getAccDescription;
          this.setDiagramTitle = setDiagramTitle;
          this.getDiagramTitle = getDiagramTitle;
          this.getConfig = /* @__PURE__ */ __name(() => getConfig2().class, "getConfig");
          this.functions.push(this.setupToolTips.bind(this));
          this.clear();
          this.addRelation = this.addRelation.bind(this);
          this.addClassesToNamespace = this.addClassesToNamespace.bind(this);
          this.addNamespace = this.addNamespace.bind(this);
          this.popNamespace = this.popNamespace.bind(this);
          this.setCssClass = this.setCssClass.bind(this);
          this.addMembers = this.addMembers.bind(this);
          this.addClass = this.addClass.bind(this);
          this.setClassLabel = this.setClassLabel.bind(this);
          this.addAnnotation = this.addAnnotation.bind(this);
          this.addMember = this.addMember.bind(this);
          this.cleanupLabel = this.cleanupLabel.bind(this);
          this.addNote = this.addNote.bind(this);
          this.defineClass = this.defineClass.bind(this);
          this.setDirection = this.setDirection.bind(this);
          this.setLink = this.setLink.bind(this);
          this.bindFunctions = this.bindFunctions.bind(this);
          this.clear = this.clear.bind(this);
          this.setTooltip = this.setTooltip.bind(this);
          this.setClickEvent = this.setClickEvent.bind(this);
          this.setCssStyle = this.setCssStyle.bind(this);
        }
        static {
          __name(this, "ClassDB");
        }
        splitClassNameAndType(_id) {
          const id41 = common_default.sanitizeText(_id, getConfig2());
          let genericType = "";
          let className = id41;
          if (id41.indexOf("~") > 0) {
            const split = id41.split("~");
            className = sanitizeText4(split[0]);
            genericType = sanitizeText4(split[1]);
          }
          return { className, type: genericType };
        }
        setClassLabel(_id, label) {
          const id41 = common_default.sanitizeText(_id, getConfig2());
          if (label) {
            label = sanitizeText4(label);
          }
          const { className } = this.splitClassNameAndType(id41);
          this.classes.get(className).label = label;
          this.classes.get(className).text = `${label}${this.classes.get(className).type ? `<${this.classes.get(className).type}>` : ""}`;
        }
        /**
         * Function called by parser when a node definition has been found.
         *
         * @param id - ID of the class to add
         * @public
         */
        addClass(_id) {
          const id41 = common_default.sanitizeText(_id, getConfig2());
          const { className, type: type3 } = this.splitClassNameAndType(id41);
          if (this.classes.has(className)) {
            return;
          }
          const name = common_default.sanitizeText(className, getConfig2());
          this.classes.set(name, {
            id: name,
            type: type3,
            label: name,
            text: `${name}${type3 ? `&lt;${type3}&gt;` : ""}`,
            shape: "classBox",
            cssClasses: "default",
            methods: [],
            members: [],
            annotations: [],
            styles: [],
            domId: MERMAID_DOM_ID_PREFIX2 + name + "-" + classCounter
          });
          classCounter++;
        }
        addInterface(label, classId) {
          const classInterface = {
            id: `interface${this.interfaces.length}`,
            label,
            classId
          };
          this.interfaces.push(classInterface);
        }
        /**
         * Sets the diagram's SVG element ID, used to prefix domIds for uniqueness
         * across multiple diagrams on the same page.
         */
        setDiagramId(svgElementId) {
          this.diagramId = svgElementId;
        }
        /**
         * Function to lookup domId from id in the graph definition.
         * When diagramId is set, returns the prefixed version for DOM uniqueness.
         *
         * @param id - class ID to lookup
         * @public
         */
        lookUpDomId(_id) {
          const id41 = common_default.sanitizeText(_id, getConfig2());
          if (this.classes.has(id41)) {
            const domId = this.classes.get(id41).domId;
            return this.diagramId ? `${this.diagramId}-${domId}` : domId;
          }
          throw new Error("Class not found: " + id41);
        }
        clear() {
          this.relations = [];
          this.classes = /* @__PURE__ */ new Map();
          this.notes = /* @__PURE__ */ new Map();
          this.interfaces = [];
          this.functions = [];
          this.functions.push(this.setupToolTips.bind(this));
          this.namespaces = /* @__PURE__ */ new Map();
          this.namespaceCounter = 0;
          this.namespaceStack = [];
          this.diagramId = "";
          this.direction = "TB";
          clear();
        }
        getClass(id41) {
          return this.classes.get(id41);
        }
        getClasses() {
          return this.classes;
        }
        getRelations() {
          return this.relations;
        }
        getNote(id41) {
          const key = typeof id41 === "number" ? `note${id41}` : id41;
          return this.notes.get(key);
        }
        getNotes() {
          return this.notes;
        }
        addRelation(classRelation) {
          log.debug("Adding relation: " + JSON.stringify(classRelation));
          const invalidTypes = [
            this.relationType.LOLLIPOP,
            this.relationType.AGGREGATION,
            this.relationType.COMPOSITION,
            this.relationType.DEPENDENCY,
            this.relationType.EXTENSION
          ];
          if (classRelation.relation.type1 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type2)) {
            this.addClass(classRelation.id2);
            this.addInterface(classRelation.id1, classRelation.id2);
            classRelation.id1 = `interface${this.interfaces.length - 1}`;
          } else if (classRelation.relation.type2 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type1)) {
            this.addClass(classRelation.id1);
            this.addInterface(classRelation.id2, classRelation.id1);
            classRelation.id2 = `interface${this.interfaces.length - 1}`;
          } else {
            this.addClass(classRelation.id1);
            this.addClass(classRelation.id2);
          }
          classRelation.id1 = this.splitClassNameAndType(classRelation.id1).className;
          classRelation.id2 = this.splitClassNameAndType(classRelation.id2).className;
          classRelation.relationTitle1 = common_default.sanitizeText(
            classRelation.relationTitle1.trim(),
            getConfig2()
          );
          classRelation.relationTitle2 = common_default.sanitizeText(
            classRelation.relationTitle2.trim(),
            getConfig2()
          );
          this.relations.push(classRelation);
        }
        /**
         * Adds an annotation to the specified class Annotations mark special properties of the given type
         * (like 'interface' or 'service')
         *
         * @param className - The class name
         * @param annotation - The name of the annotation without any brackets
         * @public
         */
        addAnnotation(className, annotation) {
          const validatedClassName = this.splitClassNameAndType(className).className;
          this.classes.get(validatedClassName).annotations.push(annotation);
        }
        /**
         * Adds a member to the specified class
         *
         * @param className - The class name
         * @param member - The full name of the member. If the member is enclosed in `<<brackets>>` it is
         *   treated as an annotation If the member is ending with a closing bracket ) it is treated as a
         *   method Otherwise the member will be treated as a normal property
         * @public
         */
        addMember(className, member) {
          this.addClass(className);
          const validatedClassName = this.splitClassNameAndType(className).className;
          const theClass = this.classes.get(validatedClassName);
          if (typeof member === "string") {
            const memberString = member.trim();
            if (memberString.startsWith("<<") && memberString.endsWith(">>")) {
              theClass.annotations.push(sanitizeText4(memberString.substring(2, memberString.length - 2)));
            } else if (memberString.indexOf(")") > 0) {
              theClass.methods.push(new ClassMember(memberString, "method"));
            } else if (memberString) {
              theClass.members.push(new ClassMember(memberString, "attribute"));
            }
          }
        }
        addMembers(className, members) {
          if (Array.isArray(members)) {
            members.reverse();
            members.forEach((member) => this.addMember(className, member));
          }
        }
        addNote(text4, className) {
          const index = this.notes.size;
          const note3 = {
            id: `note${index}`,
            class: className,
            text: text4,
            index
          };
          this.notes.set(note3.id, note3);
          return note3.id;
        }
        cleanupLabel(label) {
          if (label.startsWith(":")) {
            label = label.substring(1);
          }
          return sanitizeText4(label.trim());
        }
        /**
         * Called by parser when assigning cssClass to a class
         *
         * @param ids - Comma separated list of ids
         * @param className - Class to add
         */
        setCssClass(ids, className) {
          ids.split(",").forEach((_id) => {
            let id41 = _id;
            if (/\d/.exec(_id[0])) {
              id41 = MERMAID_DOM_ID_PREFIX2 + id41;
            }
            id41 = this.splitClassNameAndType(id41).className;
            const classNode = this.classes.get(id41);
            if (classNode) {
              classNode.cssClasses += " " + className;
            }
          });
        }
        defineClass(ids, style3) {
          for (const id41 of ids) {
            let styleClass = this.styleClasses.get(id41);
            if (styleClass === void 0) {
              styleClass = { id: id41, styles: [], textStyles: [] };
              this.styleClasses.set(id41, styleClass);
            }
            if (style3) {
              style3.forEach((s2) => {
                if (/color/.exec(s2)) {
                  const newStyle = s2.replace("fill", "bgFill");
                  styleClass.textStyles.push(newStyle);
                }
                styleClass.styles.push(s2);
              });
            }
            this.classes.forEach((value2) => {
              if (value2.cssClasses.includes(id41)) {
                value2.styles.push(...style3.flatMap((s2) => s2.split(",")));
              }
            });
          }
        }
        /**
         * Called by parser when a tooltip is found, e.g. a clickable element.
         *
         * @param ids - Comma separated list of ids
         * @param tooltip - Tooltip to add
         */
        setTooltip(ids, tooltip) {
          ids.split(",").forEach((id41) => {
            if (tooltip !== void 0) {
              const className = this.splitClassNameAndType(id41).className;
              const classNode = this.classes.get(className);
              if (classNode) {
                classNode.tooltip = sanitizeText4(tooltip);
              }
            }
          });
        }
        getTooltip(id41, namespace) {
          if (namespace && this.namespaces.has(namespace)) {
            return this.namespaces.get(namespace).classes.get(id41).tooltip;
          }
          return this.classes.get(id41).tooltip;
        }
        /**
         * Called by parser when a link is found. Adds the URL to the vertex data.
         *
         * @param ids - Comma separated list of ids
         * @param linkStr - URL to create a link for
         * @param target - Target of the link, _blank by default as originally defined in the svgDraw.js file
         */
        setLink(ids, linkStr, target) {
          const config3 = getConfig2();
          ids.split(",").forEach((_id) => {
            let id41 = _id;
            if (/\d/.exec(_id[0])) {
              id41 = MERMAID_DOM_ID_PREFIX2 + id41;
            }
            id41 = this.splitClassNameAndType(id41).className;
            const theClass = this.classes.get(id41);
            if (theClass) {
              theClass.link = utils_default2.formatUrl(linkStr, config3);
              if (config3.securityLevel === "sandbox") {
                theClass.linkTarget = "_top";
              } else if (typeof target === "string") {
                theClass.linkTarget = sanitizeText4(target);
              } else {
                theClass.linkTarget = "_blank";
              }
            }
          });
          this.setCssClass(ids, "clickable");
        }
        /**
         * Called by parser when a click definition is found. Registers an event handler.
         *
         * @param ids - Comma separated list of ids
         * @param functionName - Function to be called on click
         * @param functionArgs - Function args the function should be called with
         */
        setClickEvent(ids, functionName, functionArgs) {
          ids.split(",").forEach((id41) => {
            this.setClickFunc(id41, functionName, functionArgs);
            const className = this.splitClassNameAndType(id41).className;
            const classNode = this.classes.get(className);
            if (classNode) {
              classNode.haveCallback = true;
            }
          });
          this.setCssClass(ids, "clickable");
        }
        setClickFunc(_domId, functionName, functionArgs) {
          const domId = common_default.sanitizeText(_domId, getConfig2());
          const config3 = getConfig2();
          if (config3.securityLevel !== "loose") {
            return;
          }
          if (functionName === void 0) {
            return;
          }
          const id41 = this.splitClassNameAndType(domId).className;
          if (this.classes.has(id41)) {
            let argList = [];
            if (typeof functionArgs === "string") {
              argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
              for (let i2 = 0; i2 < argList.length; i2++) {
                let item = argList[i2].trim();
                if (item.startsWith('"') && item.endsWith('"')) {
                  item = item.substr(1, item.length - 2);
                }
                argList[i2] = item;
              }
            }
            if (argList.length === 0) {
              argList.push(id41);
            }
            this.functions.push(() => {
              const elemId = this.lookUpDomId(id41);
              const elem = document.querySelector(`[id="${elemId}"]`);
              if (elem !== null) {
                elem.addEventListener(
                  "click",
                  () => {
                    utils_default2.runFunc(functionName, ...argList);
                  },
                  false
                );
              }
            });
          }
        }
        bindFunctions(element3) {
          this.functions.forEach((fun) => {
            fun(element3);
          });
        }
        // Utility function to escape HTML meta-characters
        escapeHtml(str2) {
          return str2.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
        }
        getDirection() {
          return this.direction;
        }
        setDirection(dir2) {
          this.direction = dir2;
        }
        static resolveQualifiedId(id41, stack) {
          const prefix = stack.at(-1);
          return prefix ? `${prefix}.${id41}` : id41;
        }
        static getAncestorIds(qualifiedId) {
          const parts = qualifiedId.split(".");
          const ids = new Array(parts.length);
          ids[0] = parts[0];
          for (let i2 = 1; i2 < parts.length; i2++) {
            ids[i2] = `${ids[i2 - 1]}.${parts[i2]}`;
          }
          return ids;
        }
        createNamespaceNode(id41, label, parentId, explicit = false) {
          return {
            id: id41,
            label,
            classes: /* @__PURE__ */ new Map(),
            notes: /* @__PURE__ */ new Map(),
            children: /* @__PURE__ */ new Map(),
            domId: MERMAID_DOM_ID_PREFIX2 + id41 + "-" + this.namespaceCounter++,
            parent: parentId,
            explicit
          };
        }
        linkParentChild(parentId, childId) {
          const parent4 = this.namespaces.get(parentId);
          const child = this.namespaces.get(childId);
          if (!parent4 || !child) {
            return;
          }
          if (!parent4.children.has(childId)) {
            parent4.children.set(childId, child);
          }
          child.parent ??= parentId;
        }
        addNamespace(id41, label) {
          const qualifiedId = _ClassDB.resolveQualifiedId(id41, this.namespaceStack);
          this.namespaceStack.push(qualifiedId);
          if (this.namespaces.has(qualifiedId)) {
            const existing = this.namespaces.get(qualifiedId);
            existing.explicit = true;
            if (label) {
              existing.label = label;
            }
            return qualifiedId;
          }
          const parts = qualifiedId.split(".");
          const ancestorIds = _ClassDB.getAncestorIds(qualifiedId);
          for (let i2 = 0; i2 < ancestorIds.length; i2++) {
            const currentId = ancestorIds[i2];
            const parentId = i2 > 0 ? ancestorIds[i2 - 1] : void 0;
            const isLeaf = i2 === ancestorIds.length - 1;
            const nodeLabel = isLeaf && label ? label : parts[i2];
            if (!this.namespaces.has(currentId)) {
              this.namespaces.set(
                currentId,
                this.createNamespaceNode(currentId, nodeLabel, parentId, isLeaf)
              );
            } else if (isLeaf) {
              this.namespaces.get(currentId).explicit = true;
            }
            if (parentId) {
              this.linkParentChild(parentId, currentId);
            }
          }
          return qualifiedId;
        }
        popNamespace() {
          this.namespaceStack.pop();
        }
        getNamespace(name) {
          return this.namespaces.get(name);
        }
        getNamespaces() {
          return this.namespaces;
        }
        /**
         * Function called by parser when a namespace definition has been found.
         *
         * @param id - ID of the namespace to add
         * @param classNames - IDs of the class to add
         * @param noteNames - IDs of the notes to add
         * @public
         */
        addClassesToNamespace(id41, classNames, noteNames) {
          if (!this.namespaces.has(id41)) {
            return;
          }
          for (const name of classNames) {
            const { className } = this.splitClassNameAndType(name);
            const classNode = this.getClass(className);
            classNode.parent = id41;
            this.namespaces.get(id41).classes.set(className, classNode);
          }
          for (const noteName of noteNames) {
            const noteNode = this.getNote(noteName);
            noteNode.parent = id41;
            this.namespaces.get(id41).notes.set(noteName, noteNode);
          }
        }
        setCssStyle(id41, styles7) {
          const thisClass = this.classes.get(id41);
          if (!styles7 || !thisClass) {
            return;
          }
          for (const s2 of styles7) {
            if (s2.includes(",")) {
              thisClass.styles.push(...s2.split(","));
            } else {
              thisClass.styles.push(s2);
            }
          }
        }
        /**
         * Gets the arrow marker for a type index
         *
         * @param type - The type to look for
         * @returns The arrow marker
         */
        getArrowMarker(type3) {
          let marker;
          switch (type3) {
            case 0:
              marker = "aggregation";
              break;
            case 1:
              marker = "extension";
              break;
            case 2:
              marker = "composition";
              break;
            case 3:
              marker = "dependency";
              break;
            case 4:
              marker = "lollipop";
              break;
            default:
              marker = "none";
          }
          return marker;
        }
        /**
         * Walks up the namespace tree from the given id and returns the nearest ancestor
         * (or the id itself) that is marked as explicit. Used by compact rendering mode
         * to reassign children to the nearest user-declared namespace.
         */
        resolveExplicitAncestor(id41) {
          let current = id41;
          while (current) {
            const ns = this.namespaces.get(current);
            if (!ns) {
              return void 0;
            }
            if (ns.explicit) {
              return current;
            }
            current = ns.parent;
          }
          return void 0;
        }
        getData() {
          const nodes5 = [];
          const edges3 = [];
          const config3 = getConfig2();
          const hierarchical = config3.class?.hierarchicalNamespaces ?? true;
          for (const namespace of this.namespaces.values()) {
            if (!hierarchical && !namespace.explicit) {
              continue;
            }
            const node2 = {
              id: namespace.id,
              label: hierarchical ? namespace.label : namespace.id,
              isGroup: true,
              padding: config3.class.padding ?? 16,
              // parent node must be one of [rect, roundedWithTitle, noteGroup, divider]
              shape: "rect",
              cssStyles: [],
              look: config3.look,
              parentId: hierarchical ? namespace.parent : void 0
            };
            nodes5.push(node2);
          }
          for (const classNode of this.classes.values()) {
            const parentId = hierarchical ? classNode.parent : this.resolveExplicitAncestor(classNode.parent);
            const node2 = {
              ...classNode,
              type: void 0,
              isGroup: false,
              parentId,
              look: config3.look
            };
            nodes5.push(node2);
          }
          for (const note3 of this.notes.values()) {
            const noteParentId = hierarchical ? note3.parent : this.resolveExplicitAncestor(note3.parent);
            const noteNode = {
              id: note3.id,
              label: note3.text,
              isGroup: false,
              shape: "note",
              padding: config3.class.padding ?? 6,
              cssStyles: [
                "text-align: left",
                "white-space: nowrap",
                `fill: ${config3.themeVariables.noteBkgColor}`,
                `stroke: ${config3.themeVariables.noteBorderColor}`
              ],
              look: config3.look,
              parentId: noteParentId,
              labelType: "markdown"
            };
            nodes5.push(noteNode);
            const noteClassId = this.classes.get(note3.class)?.id;
            if (noteClassId) {
              const edge = {
                id: `edgeNote${note3.index}`,
                start: note3.id,
                end: noteClassId,
                type: "normal",
                thickness: "normal",
                classes: "relation",
                arrowTypeStart: "none",
                arrowTypeEnd: "none",
                arrowheadStyle: "",
                labelStyle: [""],
                style: ["fill: none"],
                pattern: "dotted",
                look: config3.look
              };
              edges3.push(edge);
            }
          }
          for (const _interface of this.interfaces) {
            const interfaceNode = {
              id: _interface.id,
              label: _interface.label,
              isGroup: false,
              shape: "rect",
              cssStyles: ["opacity: 0;"],
              look: config3.look
            };
            nodes5.push(interfaceNode);
          }
          let cnt4 = 0;
          for (const classRelation of this.relations) {
            cnt4++;
            const edge = {
              id: getEdgeId(classRelation.id1, classRelation.id2, {
                prefix: "id",
                counter: cnt4
              }),
              start: classRelation.id1,
              end: classRelation.id2,
              type: "normal",
              label: classRelation.title,
              labelpos: "c",
              thickness: "normal",
              classes: "relation",
              arrowTypeStart: this.getArrowMarker(classRelation.relation.type1),
              arrowTypeEnd: this.getArrowMarker(classRelation.relation.type2),
              startLabelRight: classRelation.relationTitle1 === "none" ? "" : classRelation.relationTitle1,
              endLabelLeft: classRelation.relationTitle2 === "none" ? "" : classRelation.relationTitle2,
              arrowheadStyle: "",
              labelStyle: ["display: inline-block"],
              style: classRelation.style || "",
              pattern: classRelation.relation.lineType == 1 ? "dashed" : "solid",
              look: config3.look,
              labelType: "markdown"
            };
            edges3.push(edge);
          }
          return { nodes: nodes5, edges: edges3, other: {}, config: config3, direction: this.getDirection() };
        }
      };
    }
  });

  // src/diagrams/class/styles.js
  var getStyles11, styles_default10;
  var init_styles10 = __esm({
    "src/diagrams/class/styles.js"() {
      "use strict";
      init_globalStyles();
      getStyles11 = /* @__PURE__ */ __name((options2) => `g.classGroup text {
  fill: ${options2.nodeBorder || options2.classText};
  stroke: none;
  font-family: ${options2.fontFamily};
  font-size: 10px;

  .title {
    font-weight: bolder;
  }

}

  .cluster-label text {
    fill: ${options2.titleColor};
  }
  .cluster-label span {
    color: ${options2.titleColor};
  }
  .cluster-label span p {
    background-color: transparent;
  }

  .cluster rect {
    fill: ${options2.clusterBkg};
    stroke: ${options2.clusterBorder};
    stroke-width: 1px;
  }

  .cluster text {
    fill: ${options2.titleColor};
  }

  .cluster span {
    color: ${options2.titleColor};
  }

.nodeLabel, .edgeLabel {
  color: ${options2.classText};
}

.noteLabel .nodeLabel, .noteLabel .edgeLabel {
  color: ${options2.noteTextColor};
}
.edgeLabel .label rect {
  fill: ${options2.mainBkg};
}
.label text {
  fill: ${options2.classText};
}

.labelBkg {
  background: ${options2.mainBkg};
}
.edgeLabel .label span {
  background: ${options2.mainBkg};
}

.classTitle {
  font-weight: bolder;
}
.node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${options2.mainBkg};
    stroke: ${options2.nodeBorder};
    stroke-width: ${options2.strokeWidth};
  }


.divider {
  stroke: ${options2.nodeBorder};
  stroke-width: 1;
}

g.clickable {
  cursor: pointer;
}

g.classGroup rect {
  fill: ${options2.mainBkg};
  stroke: ${options2.nodeBorder};
}

g.classGroup line {
  stroke: ${options2.nodeBorder};
  stroke-width: 1;
}

.classLabel .box {
  stroke: none;
  stroke-width: 0;
  fill: ${options2.mainBkg};
  opacity: 0.5;
}

.classLabel .label {
  fill: ${options2.nodeBorder};
  font-size: 10px;
}

.relation {
  stroke: ${options2.lineColor};
  stroke-width: ${options2.strokeWidth};
  fill: none;
}

.dashed-line{
  stroke-dasharray: 3;
}

.dotted-line{
  stroke-dasharray: 1 2;
}

[id$="-compositionStart"], .composition {
  fill: ${options2.lineColor} !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-compositionEnd"], .composition {
  fill: ${options2.lineColor} !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-dependencyStart"], .dependency {
  fill: ${options2.lineColor} !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-dependencyEnd"], .dependency {
  fill: ${options2.lineColor} !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-extensionStart"], .extension {
  fill: transparent !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-extensionEnd"], .extension {
  fill: transparent !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-aggregationStart"], .aggregation {
  fill: transparent !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-aggregationEnd"], .aggregation {
  fill: transparent !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-lollipopStart"], .lollipop {
  fill: ${options2.mainBkg} !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

[id$="-lollipopEnd"], .lollipop {
  fill: ${options2.mainBkg} !important;
  stroke: ${options2.lineColor} !important;
  stroke-width: 1;
}

.edgeTerminals {
  font-size: 11px;
  line-height: initial;
}

.classTitleText {
  text-anchor: middle;
  font-size: 18px;
  fill: ${options2.textColor};
}

.edgeLabel[data-look="neo"] {
  background-color: ${options2.edgeLabelBackground};
  p {
    background-color: ${options2.edgeLabelBackground};
  }
  rect {
    opacity: 0.5;
    background-color: ${options2.edgeLabelBackground};
    fill: ${options2.edgeLabelBackground};
  }
  text-align: center;
}
  ${getIconStyles()}
`, "getStyles");
      styles_default10 = getStyles11;
    }
  });

  // src/diagrams/class/classRenderer-v3-unified.ts
  var getDir, getClasses2, draw12, classRenderer_v3_unified_default;
  var init_classRenderer_v3_unified = __esm({
    "src/diagrams/class/classRenderer-v3-unified.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_insertElementsForSize();
      init_render2();
      init_setupViewPortForSVG();
      init_utils2();
      getDir = /* @__PURE__ */ __name((parsedItem, defaultDir = "TB") => {
        if (!parsedItem.doc) {
          return defaultDir;
        }
        let dir2 = defaultDir;
        for (const parsedItemDoc of parsedItem.doc) {
          if (parsedItemDoc.stmt === "dir") {
            dir2 = parsedItemDoc.value;
          }
        }
        return dir2;
      }, "getDir");
      getClasses2 = /* @__PURE__ */ __name(function(text4, diagramObj) {
        return diagramObj.db.getClasses();
      }, "getClasses");
      draw12 = /* @__PURE__ */ __name(async function(text4, id41, _version, diag) {
        log.info("REF0:");
        log.info("Drawing class diagram (v3)", id41);
        const { securityLevel, state: conf5, layout: layout7 } = getConfig2();
        diag.db.setDiagramId(id41);
        const data4Layout = diag.db.getData();
        const svg2 = getDiagramElement(id41, securityLevel);
        data4Layout.type = diag.type;
        data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout7);
        data4Layout.nodeSpacing = conf5?.nodeSpacing || 50;
        data4Layout.rankSpacing = conf5?.rankSpacing || 50;
        data4Layout.markers = ["aggregation", "extension", "composition", "dependency", "lollipop"];
        data4Layout.diagramId = id41;
        await render7(data4Layout, svg2);
        const padding = 8;
        utils_default2.insertTitle(
          svg2,
          "classDiagramTitleText",
          conf5?.titleTopMargin ?? 25,
          diag.db.getDiagramTitle()
        );
        setupViewPortForSVG(svg2, padding, "classDiagram", conf5?.useMaxWidth ?? true);
      }, "draw");
      classRenderer_v3_unified_default = {
        getClasses: getClasses2,
        draw: draw12,
        getDir
      };
    }
  });

  // src/diagrams/class/classDiagram.ts
  var classDiagram_exports = {};
  __export(classDiagram_exports, {
    diagram: () => diagram13
  });
  var diagram13;
  var init_classDiagram2 = __esm({
    "src/diagrams/class/classDiagram.ts"() {
      "use strict";
      init_classDiagram();
      init_classDb();
      init_styles10();
      init_classRenderer_v3_unified();
      diagram13 = {
        parser: classDiagram_default,
        get db() {
          return new ClassDB();
        },
        renderer: classRenderer_v3_unified_default,
        styles: styles_default10,
        init: /* @__PURE__ */ __name((cnf) => {
          if (!cnf.class) {
            cnf.class = {};
          }
          cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
        }, "init")
      };
    }
  });

  // src/diagrams/class/classDiagram-v2.ts
  var classDiagram_v2_exports = {};
  __export(classDiagram_v2_exports, {
    diagram: () => diagram14
  });
  var diagram14;
  var init_classDiagram_v2 = __esm({
    "src/diagrams/class/classDiagram-v2.ts"() {
      "use strict";
      init_classDiagram();
      init_classDb();
      init_styles10();
      init_classRenderer_v3_unified();
      diagram14 = {
        parser: classDiagram_default,
        get db() {
          return new ClassDB();
        },
        renderer: classRenderer_v3_unified_default,
        styles: styles_default10,
        init: /* @__PURE__ */ __name((cnf) => {
          if (!cnf.class) {
            cnf.class = {};
          }
          cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
        }, "init")
      };
    }
  });

  // src/diagrams/state/parser/stateDiagram.jison
  var parser13, stateDiagram_default;
  var init_stateDiagram = __esm({
    "src/diagrams/state/parser/stateDiagram.jison"() {
      "use strict";
      parser13 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 16], $V7 = [1, 17], $V8 = [1, 18], $V9 = [1, 19], $Va = [1, 33], $Vb = [1, 20], $Vc = [1, 21], $Vd = [1, 22], $Ve = [1, 23], $Vf = [1, 24], $Vg = [1, 26], $Vh = [1, 27], $Vi = [1, 28], $Vj = [1, 29], $Vk = [1, 30], $Vl = [1, 31], $Vm = [1, 32], $Vn = [1, 35], $Vo = [1, 36], $Vp = [1, 37], $Vq = [1, 38], $Vr = [1, 34], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 39, 40, 41, 45, 48, 51, 52, 53, 54, 57], $Vu = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "classDefStatement": 10, "styleStatement": 11, "cssClassStatement": 12, "idStatement": 13, "DESCR": 14, "-->": 15, "HIDE_EMPTY": 16, "scale": 17, "WIDTH": 18, "COMPOSIT_STATE": 19, "STRUCT_START": 20, "STRUCT_STOP": 21, "STATE_DESCR": 22, "AS": 23, "ID": 24, "FORK": 25, "JOIN": 26, "CHOICE": 27, "CONCURRENT": 28, "note": 29, "notePosition": 30, "NOTE_TEXT": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "CLICK": 38, "STRING": 39, "HREF": 40, "classDef": 41, "CLASSDEF_ID": 42, "CLASSDEF_STYLEOPTS": 43, "DEFAULT": 44, "style": 45, "STYLE_IDS": 46, "STYLEDEF_STYLEOPTS": 47, "class": 48, "CLASSENTITY_IDS": 49, "STYLECLASS": 50, "direction_tb": 51, "direction_bt": 52, "direction_rl": 53, "direction_lr": 54, "eol": 55, ";": 56, "EDGE_STATE": 57, "STYLE_SEPARATOR": 58, "left_of": 59, "right_of": 60, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "SPACE", 5: "NL", 6: "SD", 14: "DESCR", 15: "-->", 16: "HIDE_EMPTY", 17: "scale", 18: "WIDTH", 19: "COMPOSIT_STATE", 20: "STRUCT_START", 21: "STRUCT_STOP", 22: "STATE_DESCR", 23: "AS", 24: "ID", 25: "FORK", 26: "JOIN", 27: "CHOICE", 28: "CONCURRENT", 29: "note", 31: "NOTE_TEXT", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 38: "CLICK", 39: "STRING", 40: "HREF", 41: "classDef", 42: "CLASSDEF_ID", 43: "CLASSDEF_STYLEOPTS", 44: "DEFAULT", 45: "style", 46: "STYLE_IDS", 47: "STYLEDEF_STYLEOPTS", 48: "class", 49: "CLASSENTITY_IDS", 50: "STYLECLASS", 51: "direction_tb", 52: "direction_bt", 53: "direction_rl", 54: "direction_lr", 56: ";", 57: "EDGE_STATE", 58: "STYLE_SEPARATOR", 59: "left_of", 60: "right_of" },
          productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [9, 5], [9, 5], [10, 3], [10, 3], [11, 3], [12, 3], [32, 1], [32, 1], [32, 1], [32, 1], [55, 1], [55, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 3:
                yy.setRootDoc($$[$0]);
                return $$[$0];
                break;
              case 4:
                this.$ = [];
                break;
              case 5:
                if ($$[$0] != "nl") {
                  $$[$0 - 1].push($$[$0]);
                  this.$ = $$[$0 - 1];
                }
                break;
              case 6:
              case 7:
                this.$ = $$[$0];
                break;
              case 8:
                this.$ = "nl";
                break;
              case 12:
                this.$ = $$[$0];
                break;
              case 13:
                const stateStmt = $$[$0 - 1];
                stateStmt.description = yy.trimColon($$[$0]);
                this.$ = stateStmt;
                break;
              case 14:
                this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] };
                break;
              case 15:
                const relDescription = yy.trimColon($$[$0]);
                this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription };
                break;
              case 19:
                this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] };
                break;
              case 20:
                var id41 = $$[$0];
                var description = $$[$0 - 2].trim();
                if ($$[$0].match(":")) {
                  var parts = $$[$0].split(":");
                  id41 = parts[0];
                  description = [description, parts[1]];
                }
                this.$ = { stmt: "state", id: id41, type: "default", description };
                break;
              case 21:
                this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] };
                break;
              case 22:
                this.$ = { stmt: "state", id: $$[$0], type: "fork" };
                break;
              case 23:
                this.$ = { stmt: "state", id: $$[$0], type: "join" };
                break;
              case 24:
                this.$ = { stmt: "state", id: $$[$0], type: "choice" };
                break;
              case 25:
                this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" };
                break;
              case 26:
                this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } };
                break;
              case 29:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 30:
              case 31:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 32:
                this.$ = {
                  stmt: "click",
                  id: $$[$0 - 3],
                  url: $$[$0 - 2],
                  tooltip: $$[$0 - 1]
                };
                break;
              case 33:
                this.$ = {
                  stmt: "click",
                  id: $$[$0 - 3],
                  url: $$[$0 - 1],
                  tooltip: ""
                };
                break;
              case 34:
              case 35:
                this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() };
                break;
              case 36:
                this.$ = { stmt: "style", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };
                break;
              case 37:
                this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };
                break;
              case 38:
                yy.setDirection("TB");
                this.$ = { stmt: "dir", value: "TB" };
                break;
              case 39:
                yy.setDirection("BT");
                this.$ = { stmt: "dir", value: "BT" };
                break;
              case 40:
                yy.setDirection("RL");
                this.$ = { stmt: "dir", value: "RL" };
                break;
              case 41:
                yy.setDirection("LR");
                this.$ = { stmt: "dir", value: "LR" };
                break;
              case 44:
              case 45:
                this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" };
                break;
              case 46:
                this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" };
                break;
              case 47:
                this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" };
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o2([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 5]), { 9: 39, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 7]), o2($Vs, [2, 8]), o2($Vs, [2, 9]), o2($Vs, [2, 10]), o2($Vs, [2, 11]), o2($Vs, [2, 12], { 14: [1, 40], 15: [1, 41] }), o2($Vs, [2, 16]), { 18: [1, 42] }, o2($Vs, [2, 18], { 20: [1, 43] }), { 23: [1, 44] }, o2($Vs, [2, 22]), o2($Vs, [2, 23]), o2($Vs, [2, 24]), o2($Vs, [2, 25]), { 30: 45, 31: [1, 46], 59: [1, 47], 60: [1, 48] }, o2($Vs, [2, 28]), { 34: [1, 49] }, { 36: [1, 50] }, o2($Vs, [2, 31]), { 13: 51, 24: $Va, 57: $Vr }, { 42: [1, 52], 44: [1, 53] }, { 46: [1, 54] }, { 49: [1, 55] }, o2($Vt, [2, 44], { 58: [1, 56] }), o2($Vt, [2, 45], { 58: [1, 57] }), o2($Vs, [2, 38]), o2($Vs, [2, 39]), o2($Vs, [2, 40]), o2($Vs, [2, 41]), o2($Vs, [2, 6]), o2($Vs, [2, 13]), { 13: 58, 24: $Va, 57: $Vr }, o2($Vs, [2, 17]), o2($Vu, $V3, { 7: 59 }), { 24: [1, 60] }, { 24: [1, 61] }, { 23: [1, 62] }, { 24: [2, 48] }, { 24: [2, 49] }, o2($Vs, [2, 29]), o2($Vs, [2, 30]), { 39: [1, 63], 40: [1, 64] }, { 43: [1, 65] }, { 43: [1, 66] }, { 47: [1, 67] }, { 50: [1, 68] }, { 24: [1, 69] }, { 24: [1, 70] }, o2($Vs, [2, 14], { 14: [1, 71] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 72], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 20], { 20: [1, 73] }), { 31: [1, 74] }, { 24: [1, 75] }, { 39: [1, 76] }, { 39: [1, 77] }, o2($Vs, [2, 34]), o2($Vs, [2, 35]), o2($Vs, [2, 36]), o2($Vs, [2, 37]), o2($Vt, [2, 46]), o2($Vt, [2, 47]), o2($Vs, [2, 15]), o2($Vs, [2, 19]), o2($Vu, $V3, { 7: 78 }), o2($Vs, [2, 26]), o2($Vs, [2, 27]), { 5: [1, 79] }, { 5: [1, 80] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 81], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 32]), o2($Vs, [2, 33]), o2($Vs, [2, 21])],
          defaultActions: { 5: [2, 1], 6: [2, 2], 47: [2, 48], 48: [2, 49] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              function processId() {
                const idx = yy_.yytext.indexOf("%%");
                if (idx === 0) {
                  return false;
                }
                if (idx > 0) {
                  const before = yy_.yytext.slice(0, idx);
                  const after = yy_.yytext.slice(idx);
                  if (after) {
                    yy.lexer.unput(after);
                  }
                  yy_.yytext = before;
                }
                return true;
              }
              __name(processId, "processId");
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  return 38;
                  break;
                case 1:
                  return 40;
                  break;
                case 2:
                  return 39;
                  break;
                case 3:
                  return 44;
                  break;
                case 4:
                  return 51;
                  break;
                case 5:
                  return 52;
                  break;
                case 6:
                  return 53;
                  break;
                case 7:
                  return 54;
                  break;
                case 8:
                  return 5;
                  break;
                case 9:
                  break;
                case 10:
                  break;
                case 11:
                  break;
                case 12:
                  break;
                case 13:
                  this.pushState("SCALE");
                  return 17;
                  break;
                case 14:
                  return 18;
                  break;
                case 15:
                  this.popState();
                  break;
                case 16:
                  this.begin("acc_title");
                  return 33;
                  break;
                case 17:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 18:
                  this.begin("acc_descr");
                  return 35;
                  break;
                case 19:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 20:
                  this.begin("acc_descr_multiline");
                  break;
                case 21:
                  this.popState();
                  break;
                case 22:
                  return "acc_descr_multiline_value";
                  break;
                case 23:
                  this.pushState("CLASSDEF");
                  return 41;
                  break;
                case 24:
                  this.popState();
                  this.pushState("CLASSDEFID");
                  return "DEFAULT_CLASSDEF_ID";
                  break;
                case 25:
                  this.popState();
                  this.pushState("CLASSDEFID");
                  return 42;
                  break;
                case 26:
                  this.popState();
                  return 43;
                  break;
                case 27:
                  this.pushState("CLASS");
                  return 48;
                  break;
                case 28:
                  this.popState();
                  this.pushState("CLASS_STYLE");
                  return 49;
                  break;
                case 29:
                  this.popState();
                  return 50;
                  break;
                case 30:
                  this.pushState("STYLE");
                  return 45;
                  break;
                case 31:
                  this.popState();
                  this.pushState("STYLEDEF_STYLES");
                  return 46;
                  break;
                case 32:
                  this.popState();
                  return 47;
                  break;
                case 33:
                  this.pushState("SCALE");
                  return 17;
                  break;
                case 34:
                  return 18;
                  break;
                case 35:
                  this.popState();
                  break;
                case 36:
                  this.pushState("STATE");
                  break;
                case 37:
                  this.popState();
                  yy_.yytext = yy_.yytext.slice(0, -8).trim();
                  return 25;
                  break;
                case 38:
                  this.popState();
                  yy_.yytext = yy_.yytext.slice(0, -8).trim();
                  return 26;
                  break;
                case 39:
                  this.popState();
                  yy_.yytext = yy_.yytext.slice(0, -10).trim();
                  return 27;
                  break;
                case 40:
                  this.popState();
                  yy_.yytext = yy_.yytext.slice(0, -8).trim();
                  return 25;
                  break;
                case 41:
                  this.popState();
                  yy_.yytext = yy_.yytext.slice(0, -8).trim();
                  return 26;
                  break;
                case 42:
                  this.popState();
                  yy_.yytext = yy_.yytext.slice(0, -10).trim();
                  return 27;
                  break;
                case 43:
                  return 51;
                  break;
                case 44:
                  return 52;
                  break;
                case 45:
                  return 53;
                  break;
                case 46:
                  return 54;
                  break;
                case 47:
                  this.pushState("STATE_STRING");
                  break;
                case 48:
                  this.pushState("STATE_ID");
                  return "AS";
                  break;
                case 49:
                  if (!processId()) return;
                  this.popState();
                  return "ID";
                  break;
                case 50:
                  this.popState();
                  break;
                case 51:
                  return "STATE_DESCR";
                  break;
                case 52:
                  throw new Error('Error: State name must be a single word. Found: "' + yy_.yytext.trim() + '"');
                  break;
                case 53:
                  return 19;
                  break;
                case 54:
                  this.popState();
                  break;
                case 55:
                  this.popState();
                  this.pushState("struct");
                  return 20;
                  break;
                case 56:
                  this.popState();
                  return 21;
                  break;
                case 57:
                  break;
                case 58:
                  this.begin("NOTE");
                  return 29;
                  break;
                case 59:
                  this.popState();
                  this.pushState("NOTE_ID");
                  return 59;
                  break;
                case 60:
                  this.popState();
                  this.pushState("NOTE_ID");
                  return 60;
                  break;
                case 61:
                  this.popState();
                  this.pushState("FLOATING_NOTE");
                  break;
                case 62:
                  this.popState();
                  this.pushState("FLOATING_NOTE_ID");
                  return "AS";
                  break;
                case 63:
                  break;
                case 64:
                  return "NOTE_TEXT";
                  break;
                case 65:
                  if (!processId()) return;
                  this.popState();
                  return "ID";
                  break;
                case 66:
                  if (!processId()) return;
                  this.popState();
                  this.pushState("NOTE_TEXT");
                  return 24;
                  break;
                case 67:
                  this.popState();
                  yy_.yytext = yy_.yytext.substr(2).trim();
                  return 31;
                  break;
                case 68:
                  this.popState();
                  yy_.yytext = yy_.yytext.slice(0, -8).trim();
                  return 31;
                  break;
                case 69:
                  return 6;
                  break;
                case 70:
                  return 6;
                  break;
                case 71:
                  return 16;
                  break;
                case 72:
                  return 57;
                  break;
                case 73:
                  if (!processId()) return;
                  return 24;
                  break;
                case 74:
                  yy_.yytext = yy_.yytext.trim();
                  return 14;
                  break;
                case 75:
                  return 15;
                  break;
                case 76:
                  return 28;
                  break;
                case 77:
                  return 58;
                  break;
                case 78:
                  return 5;
                  break;
                case 79:
                  return "INVALID";
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:click\b)/i, /^(?:href\b)/i, /^(?:"[^"]*")/i, /^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:style\s+)/i, /^(?:[\w,]+\s+)/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\w+\s+\w+.*?\{)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?\n\s*end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:(?:[^:\n;]|:[^:\n;])+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i],
            conditions: { "LINE": { "rules": [10, 11, 12], "inclusive": false }, "struct": { "rules": [10, 11, 12, 23, 27, 30, 36, 43, 44, 45, 46, 56, 57, 58, 72, 73, 74, 75, 76, 77], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [65], "inclusive": false }, "FLOATING_NOTE": { "rules": [62, 63, 64], "inclusive": false }, "NOTE_TEXT": { "rules": [67, 68], "inclusive": false }, "NOTE_ID": { "rules": [66], "inclusive": false }, "NOTE": { "rules": [59, 60, 61], "inclusive": false }, "STYLEDEF_STYLEOPTS": { "rules": [], "inclusive": false }, "STYLEDEF_STYLES": { "rules": [32], "inclusive": false }, "STYLE_IDS": { "rules": [], "inclusive": false }, "STYLE": { "rules": [31], "inclusive": false }, "CLASS_STYLE": { "rules": [29], "inclusive": false }, "CLASS": { "rules": [28], "inclusive": false }, "CLASSDEFID": { "rules": [26], "inclusive": false }, "CLASSDEF": { "rules": [24, 25], "inclusive": false }, "acc_descr_multiline": { "rules": [21, 22], "inclusive": false }, "acc_descr": { "rules": [19], "inclusive": false }, "acc_title": { "rules": [17], "inclusive": false }, "SCALE": { "rules": [14, 15, 34, 35], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [49], "inclusive": false }, "STATE_STRING": { "rules": [50, 51], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [10, 11, 12, 37, 38, 39, 40, 41, 42, 47, 48, 52, 53, 54, 55], "inclusive": false }, "ID": { "rules": [10, 11, 12], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 16, 18, 20, 23, 27, 30, 33, 36, 55, 58, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser13.parser = parser13;
      stateDiagram_default = parser13;
    }
  });

  // src/diagrams/state/stateCommon.ts
  var DEFAULT_DIAGRAM_DIRECTION, DEFAULT_NESTED_DOC_DIR, STMT_DIRECTION, STMT_STATE, STMT_ROOT, STMT_RELATION, STMT_CLASSDEF, STMT_STYLEDEF, STMT_APPLYCLASS, DEFAULT_STATE_TYPE, DIVIDER_TYPE, G_EDGE_STYLE, G_EDGE_ARROWHEADSTYLE, G_EDGE_LABELPOS, G_EDGE_LABELTYPE, G_EDGE_THICKNESS, SHAPE_STATE, SHAPE_STATE_WITH_DESC, SHAPE_START, SHAPE_END, SHAPE_DIVIDER, SHAPE_GROUP, SHAPE_NOTE, SHAPE_NOTEGROUP, CSS_DIAGRAM, CSS_STATE, CSS_DIAGRAM_STATE, CSS_EDGE, CSS_NOTE, CSS_NOTE_EDGE, CSS_EDGE_NOTE_EDGE, CSS_DIAGRAM_NOTE, CSS_CLUSTER, CSS_DIAGRAM_CLUSTER, CSS_CLUSTER_ALT, CSS_DIAGRAM_CLUSTER_ALT, PARENT2, NOTE, DOMID_STATE, DOMID_TYPE_SPACER, NOTE_ID, PARENT_ID;
  var init_stateCommon = __esm({
    "src/diagrams/state/stateCommon.ts"() {
      "use strict";
      DEFAULT_DIAGRAM_DIRECTION = "TB";
      DEFAULT_NESTED_DOC_DIR = "TB";
      STMT_DIRECTION = "dir";
      STMT_STATE = "state";
      STMT_ROOT = "root";
      STMT_RELATION = "relation";
      STMT_CLASSDEF = "classDef";
      STMT_STYLEDEF = "style";
      STMT_APPLYCLASS = "applyClass";
      DEFAULT_STATE_TYPE = "default";
      DIVIDER_TYPE = "divider";
      G_EDGE_STYLE = "fill:none";
      G_EDGE_ARROWHEADSTYLE = "fill: #333";
      G_EDGE_LABELPOS = "c";
      G_EDGE_LABELTYPE = "markdown";
      G_EDGE_THICKNESS = "normal";
      SHAPE_STATE = "rect";
      SHAPE_STATE_WITH_DESC = "rectWithTitle";
      SHAPE_START = "stateStart";
      SHAPE_END = "stateEnd";
      SHAPE_DIVIDER = "divider";
      SHAPE_GROUP = "roundedWithTitle";
      SHAPE_NOTE = "note";
      SHAPE_NOTEGROUP = "noteGroup";
      CSS_DIAGRAM = "statediagram";
      CSS_STATE = "state";
      CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`;
      CSS_EDGE = "transition";
      CSS_NOTE = "note";
      CSS_NOTE_EDGE = "note-edge";
      CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`;
      CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`;
      CSS_CLUSTER = "cluster";
      CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`;
      CSS_CLUSTER_ALT = "cluster-alt";
      CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`;
      PARENT2 = "parent";
      NOTE = "note";
      DOMID_STATE = "state";
      DOMID_TYPE_SPACER = "----";
      NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`;
      PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT2}`;
    }
  });

  // src/diagrams/state/dataFetcher.ts
  function stateDomId(itemId = "", counter2 = 0, type3 = "", typeSpacer = DOMID_TYPE_SPACER) {
    const typeStr = type3 !== null && type3.length > 0 ? `${typeSpacer}${type3}` : "";
    return `${DOMID_STATE}-${itemId}${typeStr}-${counter2}`;
  }
  function insertOrUpdateNode(nodes5, nodeData2, classes3) {
    if (!nodeData2.id || nodeData2.id === "</join></fork>" || nodeData2.id === "</choice>") {
      return;
    }
    if (nodeData2.cssClasses) {
      if (!Array.isArray(nodeData2.cssCompiledStyles)) {
        nodeData2.cssCompiledStyles = [];
      }
      nodeData2.cssClasses.split(" ").forEach((cssClass) => {
        const classDef = classes3.get(cssClass);
        if (classDef) {
          nodeData2.cssCompiledStyles = [...nodeData2.cssCompiledStyles ?? [], ...classDef.styles];
        }
      });
    }
    const existingNodeData = nodes5.find((node2) => node2.id === nodeData2.id);
    if (existingNodeData) {
      Object.assign(existingNodeData, nodeData2);
    } else {
      nodes5.push(nodeData2);
    }
  }
  function getClassesFromDbInfo(dbInfoItem) {
    return dbInfoItem?.classes?.join(" ") ?? "";
  }
  function getStylesFromDbInfo(dbInfoItem) {
    return dbInfoItem?.styles ?? [];
  }
  var nodeDb, graphItemCount, setupDoc, getDir2, dataFetcher, reset3;
  var init_dataFetcher = __esm({
    "src/diagrams/state/dataFetcher.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_common();
      init_stateCommon();
      nodeDb = /* @__PURE__ */ new Map();
      graphItemCount = 0;
      __name(stateDomId, "stateDomId");
      setupDoc = /* @__PURE__ */ __name((parentParsedItem, doc, diagramStates, nodes5, edges3, altFlag, look, classes3) => {
        log.trace("items", doc);
        doc.forEach((item) => {
          switch (item.stmt) {
            case STMT_STATE:
              dataFetcher(parentParsedItem, item, diagramStates, nodes5, edges3, altFlag, look, classes3);
              break;
            case DEFAULT_STATE_TYPE:
              dataFetcher(parentParsedItem, item, diagramStates, nodes5, edges3, altFlag, look, classes3);
              break;
            case STMT_RELATION:
              {
                dataFetcher(
                  parentParsedItem,
                  item.state1,
                  diagramStates,
                  nodes5,
                  edges3,
                  altFlag,
                  look,
                  classes3
                );
                dataFetcher(
                  parentParsedItem,
                  item.state2,
                  diagramStates,
                  nodes5,
                  edges3,
                  altFlag,
                  look,
                  classes3
                );
                const isNeo = look === "neo";
                const edgeData2 = {
                  id: "edge" + graphItemCount,
                  start: item.state1.id,
                  end: item.state2.id,
                  arrowhead: "normal",
                  arrowTypeEnd: isNeo ? "arrow_barb_neo" : "arrow_barb",
                  style: G_EDGE_STYLE,
                  labelStyle: "",
                  label: common_default.sanitizeText(item.description ?? "", getConfig2()),
                  arrowheadStyle: G_EDGE_ARROWHEADSTYLE,
                  labelpos: G_EDGE_LABELPOS,
                  labelType: G_EDGE_LABELTYPE,
                  thickness: G_EDGE_THICKNESS,
                  classes: CSS_EDGE,
                  look
                };
                edges3.push(edgeData2);
                graphItemCount++;
              }
              break;
          }
        });
      }, "setupDoc");
      getDir2 = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {
        let dir2 = defaultDir;
        if (parsedItem.doc) {
          for (const parsedItemDoc of parsedItem.doc) {
            if (parsedItemDoc.stmt === "dir") {
              dir2 = parsedItemDoc.value;
            }
          }
        }
        return dir2;
      }, "getDir");
      __name(insertOrUpdateNode, "insertOrUpdateNode");
      __name(getClassesFromDbInfo, "getClassesFromDbInfo");
      __name(getStylesFromDbInfo, "getStylesFromDbInfo");
      dataFetcher = /* @__PURE__ */ __name((parent4, parsedItem, diagramStates, nodes5, edges3, altFlag, look, classes3) => {
        const itemId = parsedItem.id;
        const dbState = diagramStates.get(itemId);
        const classStr = getClassesFromDbInfo(dbState);
        const style3 = getStylesFromDbInfo(dbState);
        const config3 = getConfig2();
        log.info("dataFetcher parsedItem", parsedItem, dbState, style3);
        if (itemId !== "root") {
          let shape = SHAPE_STATE;
          if (parsedItem.start === true) {
            shape = SHAPE_START;
          } else if (parsedItem.start === false) {
            shape = SHAPE_END;
          }
          if (parsedItem.type !== DEFAULT_STATE_TYPE) {
            shape = parsedItem.type;
          }
          if (!nodeDb.get(itemId)) {
            nodeDb.set(itemId, {
              id: itemId,
              shape,
              description: common_default.sanitizeText(itemId, config3),
              cssClasses: `${classStr} ${CSS_DIAGRAM_STATE}`,
              cssStyles: style3
            });
          }
          const newNode = nodeDb.get(itemId);
          if (parsedItem.description) {
            if (Array.isArray(newNode.description)) {
              newNode.shape = SHAPE_STATE_WITH_DESC;
              newNode.description.push(parsedItem.description);
            } else {
              if (newNode.description?.length && newNode.description.length > 0) {
                newNode.shape = SHAPE_STATE_WITH_DESC;
                if (newNode.description === itemId) {
                  newNode.description = [parsedItem.description];
                } else {
                  newNode.description = [newNode.description, parsedItem.description];
                }
              } else {
                newNode.shape = SHAPE_STATE;
                newNode.description = parsedItem.description;
              }
            }
            newNode.description = common_default.sanitizeTextOrArray(newNode.description, config3);
          }
          if (newNode.description?.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) {
            if (newNode.type === "group") {
              newNode.shape = SHAPE_GROUP;
            } else {
              newNode.shape = SHAPE_STATE;
            }
          }
          if (!newNode.type && parsedItem.doc) {
            log.info("Setting cluster for XCX", itemId, getDir2(parsedItem));
            newNode.type = "group";
            newNode.isGroup = true;
            newNode.dir = getDir2(parsedItem);
            newNode.explicitDir = parsedItem.doc.some((s2) => s2.stmt === "dir");
            newNode.shape = parsedItem.type === DIVIDER_TYPE ? SHAPE_DIVIDER : SHAPE_GROUP;
            newNode.cssClasses = `${newNode.cssClasses} ${CSS_DIAGRAM_CLUSTER} ${altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ""}`;
          }
          const nodeData2 = {
            labelStyle: "",
            shape: newNode.shape,
            label: newNode.description,
            cssClasses: newNode.cssClasses,
            cssCompiledStyles: [],
            cssStyles: newNode.cssStyles,
            id: itemId,
            dir: newNode.dir,
            domId: stateDomId(itemId, graphItemCount),
            type: newNode.type,
            isGroup: newNode.type === "group",
            padding: 8,
            rx: 10,
            ry: 10,
            look,
            labelType: "markdown"
          };
          if (nodeData2.shape === SHAPE_DIVIDER) {
            nodeData2.label = "";
          }
          if (parent4 && parent4.id !== "root") {
            log.trace("Setting node ", itemId, " to be child of its parent ", parent4.id);
            nodeData2.parentId = parent4.id;
          }
          nodeData2.centerLabel = true;
          if (parsedItem.note) {
            const noteData = {
              labelStyle: "",
              shape: SHAPE_NOTE,
              label: parsedItem.note.text,
              labelType: "markdown",
              cssClasses: CSS_DIAGRAM_NOTE,
              // useHtmlLabels: false,
              cssStyles: [],
              cssCompiledStyles: [],
              id: itemId + NOTE_ID + "-" + graphItemCount,
              domId: stateDomId(itemId, graphItemCount, NOTE),
              type: newNode.type,
              isGroup: newNode.type === "group",
              padding: config3.flowchart?.padding,
              look,
              position: parsedItem.note.position
            };
            const parentNodeId = itemId + PARENT_ID;
            const groupData = {
              labelStyle: "",
              shape: SHAPE_NOTEGROUP,
              label: parsedItem.note.text,
              cssClasses: newNode.cssClasses,
              cssStyles: [],
              id: itemId + PARENT_ID,
              domId: stateDomId(itemId, graphItemCount, PARENT2),
              type: "group",
              isGroup: true,
              padding: 16,
              //getConfig().flowchart.padding
              look,
              position: parsedItem.note.position
            };
            graphItemCount++;
            groupData.id = parentNodeId;
            noteData.parentId = parentNodeId;
            insertOrUpdateNode(nodes5, groupData, classes3);
            insertOrUpdateNode(nodes5, noteData, classes3);
            insertOrUpdateNode(nodes5, nodeData2, classes3);
            let from2 = itemId;
            let to = noteData.id;
            if (parsedItem.note.position === "left of") {
              from2 = noteData.id;
              to = itemId;
            }
            edges3.push({
              id: from2 + "-" + to,
              start: from2,
              end: to,
              arrowhead: "none",
              arrowTypeEnd: "",
              style: G_EDGE_STYLE,
              labelStyle: "",
              classes: CSS_EDGE_NOTE_EDGE,
              arrowheadStyle: G_EDGE_ARROWHEADSTYLE,
              labelpos: G_EDGE_LABELPOS,
              labelType: G_EDGE_LABELTYPE,
              thickness: G_EDGE_THICKNESS,
              look
            });
          } else {
            insertOrUpdateNode(nodes5, nodeData2, classes3);
          }
        }
        if (parsedItem.doc) {
          log.trace("Adding nodes children ");
          setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes5, edges3, !altFlag, look, classes3);
        }
      }, "dataFetcher");
      reset3 = /* @__PURE__ */ __name(() => {
        nodeDb.clear();
        graphItemCount = 0;
      }, "reset");
    }
  });

  // src/diagrams/state/stateRenderer-v3-unified.ts
  var getDir3, getClasses3, draw13, stateRenderer_v3_unified_default;
  var init_stateRenderer_v3_unified = __esm({
    "src/diagrams/state/stateRenderer-v3-unified.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_insertElementsForSize();
      init_render2();
      init_setupViewPortForSVG();
      init_utils2();
      init_stateCommon();
      getDir3 = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {
        if (!parsedItem.doc) {
          return defaultDir;
        }
        let dir2 = defaultDir;
        for (const parsedItemDoc of parsedItem.doc) {
          if (parsedItemDoc.stmt === "dir") {
            dir2 = parsedItemDoc.value;
          }
        }
        return dir2;
      }, "getDir");
      getClasses3 = /* @__PURE__ */ __name(function(text4, diagramObj) {
        return diagramObj.db.getClasses();
      }, "getClasses");
      draw13 = /* @__PURE__ */ __name(async function(text4, id41, _version, diag) {
        log.info("REF0:");
        log.info("Drawing state diagram (v2)", id41);
        const { securityLevel, state: conf5, layout: layout7 } = getConfig2();
        diag.db.extract(diag.db.getRootDocV2());
        const data4Layout = diag.db.getData();
        const svg2 = getDiagramElement(id41, securityLevel);
        data4Layout.type = diag.type;
        data4Layout.layoutAlgorithm = layout7;
        data4Layout.nodeSpacing = conf5?.nodeSpacing || 50;
        data4Layout.rankSpacing = conf5?.rankSpacing || 50;
        const config3 = getConfig2();
        if (config3.look === "neo") {
          data4Layout.markers = ["barbNeo"];
        } else {
          data4Layout.markers = ["barb"];
        }
        data4Layout.diagramId = id41;
        await render7(data4Layout, svg2);
        const padding = 8;
        try {
          const links3 = typeof diag.db.getLinks === "function" ? diag.db.getLinks() : /* @__PURE__ */ new Map();
          links3.forEach((linkInfo, key) => {
            const stateId = typeof key === "string" ? key : typeof key?.id === "string" ? key.id : "";
            const stateNode = data4Layout.nodes.find((node2) => node2.id === stateId);
            if (!stateId) {
              log.warn("\u26A0\uFE0F Invalid or missing stateId from key:", JSON.stringify(key));
              return;
            }
            const allNodes = svg2.node()?.querySelectorAll("g.node, g.rough-node");
            let matchedElem;
            allNodes?.forEach((g2) => {
              const text5 = g2.textContent?.trim();
              if (g2.id === stateNode?.domId || text5 === stateId) {
                matchedElem = g2;
              }
            });
            if (!matchedElem) {
              log.warn("\u26A0\uFE0F Could not find node matching text:", stateId);
              return;
            }
            const parent4 = matchedElem.parentNode;
            if (!parent4) {
              log.warn("\u26A0\uFE0F Node has no parent, cannot wrap:", stateId);
              return;
            }
            const a2 = document.createElementNS("http://www.w3.org/2000/svg", "a");
            const cleanedUrl = linkInfo.url.replace(/^"+|"+$/g, "");
            a2.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", cleanedUrl);
            a2.setAttribute("target", "_blank");
            if (linkInfo.tooltip) {
              const tooltip = linkInfo.tooltip.replace(/^"+|"+$/g, "");
              a2.setAttribute("title", tooltip);
              matchedElem.setAttribute("title", tooltip);
            }
            parent4.replaceChild(a2, matchedElem);
            a2.appendChild(matchedElem);
            log.info("\u{1F517} Wrapped node in <a> tag for:", stateId, linkInfo.url);
          });
        } catch (err) {
          log.error("\u274C Error injecting clickable links:", err);
        }
        utils_default2.insertTitle(
          svg2,
          "statediagramTitleText",
          conf5?.titleTopMargin ?? 25,
          diag.db.getDiagramTitle()
        );
        setupViewPortForSVG(svg2, padding, CSS_DIAGRAM, conf5?.useMaxWidth ?? true);
      }, "draw");
      stateRenderer_v3_unified_default = {
        getClasses: getClasses3,
        draw: draw13,
        getDir: getDir3
      };
    }
  });

  // src/diagrams/state/stateDb.ts
  var CONSTANTS, newClassesList, newDoc, clone8, StateDB;
  var init_stateDb = __esm({
    "src/diagrams/state/stateDb.ts"() {
      "use strict";
      init_src32();
      init_purify_es();
      init_diagramAPI();
      init_logger();
      init_utils2();
      init_common();
      init_commonDb();
      init_svgDrawCommon();
      init_dataFetcher();
      init_stateRenderer_v3_unified();
      init_stateCommon();
      CONSTANTS = {
        START_NODE: "[*]",
        START_TYPE: "start",
        END_NODE: "[*]",
        END_TYPE: "end",
        COLOR_KEYWORD: "color",
        FILL_KEYWORD: "fill",
        BG_FILL: "bgFill",
        STYLECLASS_SEP: ","
      };
      newClassesList = /* @__PURE__ */ __name(() => /* @__PURE__ */ new Map(), "newClassesList");
      newDoc = /* @__PURE__ */ __name(() => ({
        relations: [],
        states: /* @__PURE__ */ new Map(),
        documents: {}
      }), "newDoc");
      clone8 = /* @__PURE__ */ __name((o2) => JSON.parse(JSON.stringify(o2)), "clone");
      StateDB = class {
        constructor(version3) {
          this.version = version3;
          this.nodes = [];
          this.edges = [];
          this.rootDoc = [];
          this.classes = newClassesList();
          this.documents = { root: newDoc() };
          this.currentDocument = this.documents.root;
          this.startEndCount = 0;
          this.dividerCnt = 0;
          this.links = /* @__PURE__ */ new Map();
          this.funs = [];
          this.getAccTitle = getAccTitle;
          this.setAccTitle = setAccTitle;
          this.getAccDescription = getAccDescription;
          this.setAccDescription = setAccDescription;
          this.setDiagramTitle = setDiagramTitle;
          this.getDiagramTitle = getDiagramTitle;
          this.clear();
          this.setRootDoc = this.setRootDoc.bind(this);
          this.getDividerId = this.getDividerId.bind(this);
          this.setDirection = this.setDirection.bind(this);
          this.trimColon = this.trimColon.bind(this);
          this.bindFunctions = this.bindFunctions.bind(this);
        }
        static {
          __name(this, "StateDB");
        }
        static {
          // cspell:ignore funs
          this.relationType = {
            AGGREGATION: 0,
            EXTENSION: 1,
            COMPOSITION: 2,
            DEPENDENCY: 3
          };
        }
        /**
         * Convert all of the statements (stmts) that were parsed into states and relationships.
         * This is done because a state diagram may have nested sections,
         * where each section is a 'document' and has its own set of statements.
         * Ex: the section within a fork has its own statements, and incoming and outgoing statements
         * refer to the fork as a whole (document).
         * See the parser grammar:  the definition of a document is a document then a 'line', where a line can be a statement.
         * This will push the statement into the list of statements for the current document.
         */
        extract(statements) {
          this.clear(true);
          for (const item of Array.isArray(statements) ? statements : statements.doc) {
            switch (item.stmt) {
              case STMT_STATE:
                this.addState(item.id.trim(), item.type, item.doc, item.description, item.note);
                break;
              case STMT_RELATION:
                this.addRelation(item.state1, item.state2, item.description);
                break;
              case STMT_CLASSDEF:
                this.addStyleClass(item.id.trim(), item.classes);
                break;
              case STMT_STYLEDEF:
                this.handleStyleDef(item);
                break;
              case STMT_APPLYCLASS:
                this.setCssClass(item.id.trim(), item.styleClass);
                break;
              case "click":
                this.addLink(item.id, item.url, item.tooltip);
                break;
            }
          }
          const diagramStates = this.getStates();
          const config3 = getConfig2();
          reset3();
          dataFetcher(
            void 0,
            this.getRootDocV2(),
            diagramStates,
            this.nodes,
            this.edges,
            true,
            config3.look,
            this.classes
          );
          for (const node2 of this.nodes) {
            if (!Array.isArray(node2.label)) {
              continue;
            }
            node2.description = node2.label.slice(1);
            if (node2.isGroup && node2.description.length > 0) {
              throw new Error(
                `Group nodes can only have label. Remove the additional description for node [${node2.id}]`
              );
            }
            node2.label = node2.label[0];
          }
        }
        handleStyleDef(item) {
          const ids = item.id.trim().split(",");
          const styles7 = item.styleClass.split(",");
          for (const id41 of ids) {
            let state4 = this.getState(id41);
            if (!state4) {
              const trimmedId = id41.trim();
              this.addState(trimmedId);
              state4 = this.getState(trimmedId);
            }
            if (state4) {
              state4.styles = styles7.map((s2) => s2.replace(/;/g, "")?.trim());
            }
          }
        }
        setRootDoc(o2) {
          log.info("Setting root doc", o2);
          this.rootDoc = o2;
          if (this.version === 1) {
            this.extract(o2);
          } else {
            this.extract(this.getRootDocV2());
          }
        }
        docTranslator(parent4, node2, first3) {
          if (node2.stmt === STMT_RELATION) {
            this.docTranslator(parent4, node2.state1, true);
            this.docTranslator(parent4, node2.state2, false);
            return;
          }
          if (node2.stmt === STMT_STATE) {
            if (node2.id === CONSTANTS.START_NODE) {
              node2.id = parent4.id + (first3 ? "_start" : "_end");
              node2.start = first3;
            } else {
              node2.id = node2.id.trim();
            }
          }
          if (node2.stmt !== STMT_ROOT && node2.stmt !== STMT_STATE || !node2.doc) {
            return;
          }
          const doc = [];
          let currentDoc = [];
          for (const stmt of node2.doc) {
            if (stmt.type === DIVIDER_TYPE) {
              const newNode = clone8(stmt);
              newNode.doc = clone8(currentDoc);
              doc.push(newNode);
              currentDoc = [];
            } else {
              currentDoc.push(stmt);
            }
          }
          if (doc.length > 0 && currentDoc.length > 0) {
            const newNode = {
              stmt: STMT_STATE,
              id: generateId(),
              type: "divider",
              doc: clone8(currentDoc)
            };
            doc.push(clone8(newNode));
            node2.doc = doc;
          }
          node2.doc.forEach((docNode) => this.docTranslator(node2, docNode, true));
        }
        getRootDocV2() {
          this.docTranslator(
            { id: STMT_ROOT, stmt: STMT_ROOT },
            { id: STMT_ROOT, stmt: STMT_ROOT, doc: this.rootDoc },
            true
          );
          return { id: STMT_ROOT, doc: this.rootDoc };
        }
        /**
         * Function called by parser when a node definition has been found.
         *
         * @param descr - description for the state. Can be a string or a list or strings
         * @param classes - class styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 class, convert it to an array of that 1 class.
         * @param styles - styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 style, convert it to an array of that 1 style.
         * @param textStyles - text styles to apply to this state. Can be a string (1 text test) or an array of text styles. If it's just 1 text style, convert it to an array of that 1 text style.
         */
        addState(id41, type3 = DEFAULT_STATE_TYPE, doc = void 0, descr = void 0, note3 = void 0, classes3 = void 0, styles7 = void 0, textStyles = void 0) {
          const trimmedId = id41?.trim();
          if (!this.currentDocument.states.has(trimmedId)) {
            log.info("Adding state ", trimmedId, descr);
            this.currentDocument.states.set(trimmedId, {
              stmt: STMT_STATE,
              id: trimmedId,
              descriptions: [],
              type: type3,
              doc,
              note: note3,
              classes: [],
              styles: [],
              textStyles: []
            });
          } else {
            const state4 = this.currentDocument.states.get(trimmedId);
            if (!state4) {
              throw new Error(`State not found: ${trimmedId}`);
            }
            if (!state4.doc) {
              state4.doc = doc;
            }
            if (!state4.type) {
              state4.type = type3;
            }
          }
          if (descr) {
            log.info("Setting state description", trimmedId, descr);
            const descriptions = Array.isArray(descr) ? descr : [descr];
            descriptions.forEach((des) => this.addDescription(trimmedId, des.trim()));
          }
          if (note3) {
            const doc2 = this.currentDocument.states.get(trimmedId);
            if (!doc2) {
              throw new Error(`State not found: ${trimmedId}`);
            }
            doc2.note = note3;
            doc2.note.text = common_default.sanitizeText(doc2.note.text, getConfig2());
          }
          if (classes3) {
            log.info("Setting state classes", trimmedId, classes3);
            const classesList = Array.isArray(classes3) ? classes3 : [classes3];
            classesList.forEach((cssClass) => this.setCssClass(trimmedId, cssClass.trim()));
          }
          if (styles7) {
            log.info("Setting state styles", trimmedId, styles7);
            const stylesList = Array.isArray(styles7) ? styles7 : [styles7];
            stylesList.forEach((style3) => this.setStyle(trimmedId, style3.trim()));
          }
          if (textStyles) {
            log.info("Setting state styles", trimmedId, styles7);
            const textStylesList = Array.isArray(textStyles) ? textStyles : [textStyles];
            textStylesList.forEach((textStyle) => this.setTextStyle(trimmedId, textStyle.trim()));
          }
        }
        clear(saveCommon) {
          this.nodes = [];
          this.edges = [];
          this.funs = [this.setupToolTips.bind(this)];
          this.documents = { root: newDoc() };
          this.currentDocument = this.documents.root;
          this.startEndCount = 0;
          this.classes = newClassesList();
          if (!saveCommon) {
            this.links = /* @__PURE__ */ new Map();
            clear();
          }
        }
        getState(id41) {
          return this.currentDocument.states.get(id41);
        }
        getStates() {
          return this.currentDocument.states;
        }
        logDocuments() {
          log.info("Documents = ", this.documents);
        }
        getRelations() {
          return this.currentDocument.relations;
        }
        /**
         * Adds a clickable link to a state.
         */
        addLink(stateId, url, tooltip) {
          this.links.set(stateId, { url, tooltip });
          log.warn("Adding link", stateId, url, tooltip);
        }
        /**
         * Get all registered links.
         */
        getLinks() {
          return this.links;
        }
        /**
         * If the id is a start node ( [*] ), then return a new id constructed from
         * the start node name and the current start node count.
         * else return the given id
         */
        startIdIfNeeded(id41 = "") {
          if (id41 === CONSTANTS.START_NODE) {
            this.startEndCount++;
            return `${CONSTANTS.START_TYPE}${this.startEndCount}`;
          }
          return id41;
        }
        /**
         * If the id is a start node ( [*] ), then return the start type ('start')
         * else return the given type
         */
        startTypeIfNeeded(id41 = "", type3 = DEFAULT_STATE_TYPE) {
          return id41 === CONSTANTS.START_NODE ? CONSTANTS.START_TYPE : type3;
        }
        /**
         * If the id is an end node ( [*] ), then return a new id constructed from
         * the end node name and the current start_end node count.
         * else return the given id
         */
        endIdIfNeeded(id41 = "") {
          if (id41 === CONSTANTS.END_NODE) {
            this.startEndCount++;
            return `${CONSTANTS.END_TYPE}${this.startEndCount}`;
          }
          return id41;
        }
        /**
         * If the id is an end node ( [*] ), then return the end type
         * else return the given type
         *
         */
        endTypeIfNeeded(id41 = "", type3 = DEFAULT_STATE_TYPE) {
          return id41 === CONSTANTS.END_NODE ? CONSTANTS.END_TYPE : type3;
        }
        addRelationObjs(item1, item2, relationTitle = "") {
          const id1 = this.startIdIfNeeded(item1.id.trim());
          const type1 = this.startTypeIfNeeded(item1.id.trim(), item1.type);
          const id210 = this.startIdIfNeeded(item2.id.trim());
          const type22 = this.startTypeIfNeeded(item2.id.trim(), item2.type);
          this.addState(
            id1,
            type1,
            item1.doc,
            item1.description,
            item1.note,
            item1.classes,
            item1.styles,
            item1.textStyles
          );
          this.addState(
            id210,
            type22,
            item2.doc,
            item2.description,
            item2.note,
            item2.classes,
            item2.styles,
            item2.textStyles
          );
          this.currentDocument.relations.push({
            id1,
            id2: id210,
            relationTitle: common_default.sanitizeText(relationTitle, getConfig2())
          });
        }
        /**
         * Add a relation between two items.  The items may be full objects or just the string id of a state.
         */
        addRelation(item1, item2, title2) {
          if (typeof item1 === "object" && typeof item2 === "object") {
            this.addRelationObjs(item1, item2, title2);
          } else if (typeof item1 === "string" && typeof item2 === "string") {
            const id1 = this.startIdIfNeeded(item1.trim());
            const type1 = this.startTypeIfNeeded(item1);
            const id210 = this.endIdIfNeeded(item2.trim());
            const type22 = this.endTypeIfNeeded(item2);
            this.addState(id1, type1);
            this.addState(id210, type22);
            this.currentDocument.relations.push({
              id1,
              id2: id210,
              relationTitle: title2 ? common_default.sanitizeText(title2, getConfig2()) : void 0
            });
          }
        }
        addDescription(id41, descr) {
          const theState = this.currentDocument.states.get(id41);
          const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr;
          theState?.descriptions?.push(common_default.sanitizeText(_descr, getConfig2()));
        }
        cleanupLabel(label) {
          return label.startsWith(":") ? label.slice(2).trim() : label.trim();
        }
        getDividerId() {
          this.dividerCnt++;
          return `divider-id-${this.dividerCnt}`;
        }
        /**
         * Called when the parser comes across a (style) class definition
         * @example classDef my-style fill:#f96;
         *
         * @param id - the id of this (style) class
         * @param styleAttributes - the string with 1 or more style attributes (each separated by a comma)
         */
        addStyleClass(id41, styleAttributes = "") {
          if (!this.classes.has(id41)) {
            this.classes.set(id41, { id: id41, styles: [], textStyles: [] });
          }
          const foundClass = this.classes.get(id41);
          if (styleAttributes && foundClass) {
            styleAttributes.split(CONSTANTS.STYLECLASS_SEP).forEach((attrib) => {
              const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim();
              if (RegExp(CONSTANTS.COLOR_KEYWORD).exec(attrib)) {
                const newStyle1 = fixedAttrib.replace(CONSTANTS.FILL_KEYWORD, CONSTANTS.BG_FILL);
                const newStyle2 = newStyle1.replace(CONSTANTS.COLOR_KEYWORD, CONSTANTS.FILL_KEYWORD);
                foundClass.textStyles.push(newStyle2);
              }
              foundClass.styles.push(fixedAttrib);
            });
          }
        }
        getClasses() {
          return this.classes;
        }
        setupToolTips(element3) {
          const tooltipElem = createTooltip();
          const svg2 = select_default2(element3).select("svg");
          const nodes5 = svg2.selectAll("g.node, g.rough-node");
          nodes5.on("mouseover", (e3) => {
            const el = select_default2(e3.currentTarget);
            const title2 = el.attr("title");
            if (title2 === null) {
              return;
            }
            const rect3 = e3.currentTarget?.getBoundingClientRect();
            tooltipElem.transition().duration(200).style("opacity", ".9");
            tooltipElem.style("left", window.scrollX + rect3.left + (rect3.right - rect3.left) / 2 + "px").style("top", window.scrollY + rect3.bottom + "px");
            tooltipElem.html(purify.sanitize(title2));
            el.classed("hover", true);
          }).on("mouseout", (e3) => {
            tooltipElem.transition().duration(500).style("opacity", 0);
            const el = select_default2(e3.currentTarget);
            el.classed("hover", false);
          });
        }
        /**
         * Add a (style) class or css class to a state with the given id.
         * If the state isn't already in the list of known states, add it.
         * Might be called by parser when a style class or CSS class should be applied to a state
         *
         * @param itemIds - The id or a list of ids of the item(s) to apply the css class to
         * @param cssClassName - CSS class name
         */
        setCssClass(itemIds, cssClassName) {
          itemIds.split(",").forEach((id41) => {
            let foundState = this.getState(id41);
            if (!foundState) {
              const trimmedId = id41.trim();
              this.addState(trimmedId);
              foundState = this.getState(trimmedId);
            }
            foundState?.classes?.push(cssClassName);
          });
        }
        /**
         * Add a style to a state with the given id.
         * @example style stateId fill:#f9f,stroke:#333,stroke-width:4px
         *   where 'style' is the keyword
         *   stateId is the id of a state
         *   the rest of the string is the styleText (all of the attributes to be applied to the state)
         *
         * @param itemId - The id of item to apply the style to
         * @param styleText - the text of the attributes for the style
         */
        setStyle(itemId, styleText) {
          this.getState(itemId)?.styles?.push(styleText);
        }
        /**
         * Add a text style to a state with the given id
         *
         * @param itemId - The id of item to apply the css class to
         * @param cssClassName - CSS class name
         */
        setTextStyle(itemId, cssClassName) {
          this.getState(itemId)?.textStyles?.push(cssClassName);
        }
        bindFunctions(element3) {
          this.funs.forEach((fun) => {
            fun(element3);
          });
        }
        /**
         * Finds the direction statement in the root document.
         * @returns the direction statement if present
         */
        getDirectionStatement() {
          return this.rootDoc.find((doc) => doc.stmt === STMT_DIRECTION);
        }
        getDirection() {
          return this.getDirectionStatement()?.value ?? DEFAULT_DIAGRAM_DIRECTION;
        }
        setDirection(dir2) {
          const doc = this.getDirectionStatement();
          if (doc) {
            doc.value = dir2;
          } else {
            this.rootDoc.unshift({ stmt: STMT_DIRECTION, value: dir2 });
          }
        }
        trimColon(str2) {
          return str2.startsWith(":") ? str2.slice(1).trim() : str2.trim();
        }
        getData() {
          const config3 = getConfig2();
          return {
            nodes: this.nodes,
            edges: this.edges,
            other: {},
            config: config3,
            direction: getDir3(this.getRootDocV2())
          };
        }
        getConfig() {
          return getConfig2().state;
        }
      };
    }
  });

  // src/diagrams/state/styles.js
  var getStyles12, styles_default11;
  var init_styles11 = __esm({
    "src/diagrams/state/styles.js"() {
      "use strict";
      getStyles12 = /* @__PURE__ */ __name((options2) => `
defs [id$="-barbEnd"] {
    fill: ${options2.transitionColor};
    stroke: ${options2.transitionColor};
  }
g.stateGroup text {
  fill: ${options2.nodeBorder};
  stroke: none;
  font-size: 10px;
}
g.stateGroup text {
  fill: ${options2.textColor};
  stroke: none;
  font-size: 10px;

}
g.stateGroup .state-title {
  font-weight: bolder;
  fill: ${options2.stateLabelColor};
}

g.stateGroup rect {
  fill: ${options2.mainBkg};
  stroke: ${options2.nodeBorder};
}

g.stateGroup line {
  stroke: ${options2.lineColor};
  stroke-width: ${options2.strokeWidth || 1};
}

.transition {
  stroke: ${options2.transitionColor};
  stroke-width: ${options2.strokeWidth || 1};
  fill: none;
}

.stateGroup .composit {
  fill: ${options2.background};
  border-bottom: 1px
}

.stateGroup .alt-composit {
  fill: #e0e0e0;
  border-bottom: 1px
}

.state-note {
  stroke: ${options2.noteBorderColor};
  fill: ${options2.noteBkgColor};

  text {
    fill: ${options2.noteTextColor};
    stroke: none;
    font-size: 10px;
  }
}

.stateLabel .box {
  stroke: none;
  stroke-width: 0;
  fill: ${options2.mainBkg};
  opacity: 0.5;
}

.edgeLabel .label rect {
  fill: ${options2.labelBackgroundColor};
  opacity: 0.5;
}
.edgeLabel {
  background-color: ${options2.edgeLabelBackground};
  p {
    background-color: ${options2.edgeLabelBackground};
  }
  rect {
    opacity: 0.5;
    background-color: ${options2.edgeLabelBackground};
    fill: ${options2.edgeLabelBackground};
  }
  text-align: center;
}
.edgeLabel .label text {
  fill: ${options2.transitionLabelColor || options2.tertiaryTextColor};
}
.label div .edgeLabel {
  color: ${options2.transitionLabelColor || options2.tertiaryTextColor};
}

.stateLabel text {
  fill: ${options2.stateLabelColor};
  font-size: 10px;
  font-weight: bold;
}

.node circle.state-start {
  fill: ${options2.specialStateColor};
  stroke: ${options2.specialStateColor};
}

.node .fork-join {
  fill: ${options2.specialStateColor};
  stroke: ${options2.specialStateColor};
}

.node circle.state-end {
  fill: ${options2.innerEndBackground};
  stroke: ${options2.background};
  stroke-width: 1.5
}
.end-state-inner {
  fill: ${options2.compositeBackground || options2.background};
  // stroke: ${options2.background};
  stroke-width: 1.5
}

.node rect {
  fill: ${options2.stateBkg || options2.mainBkg};
  stroke: ${options2.stateBorder || options2.nodeBorder};
  stroke-width: ${options2.strokeWidth || 1}px;
}
.node polygon {
  fill: ${options2.mainBkg};
  stroke: ${options2.stateBorder || options2.nodeBorder};;
  stroke-width: ${options2.strokeWidth || 1}px;
}
[id$="-barbEnd"] {
  fill: ${options2.lineColor};
}

.statediagram-cluster rect {
  fill: ${options2.compositeTitleBackground};
  stroke: ${options2.stateBorder || options2.nodeBorder};
  stroke-width: ${options2.strokeWidth || 1}px;
}

.cluster-label, .nodeLabel {
  color: ${options2.stateLabelColor};
  // line-height: 1;
}

.statediagram-cluster rect.outer {
  rx: 5px;
  ry: 5px;
}
.statediagram-state .divider {
  stroke: ${options2.stateBorder || options2.nodeBorder};
}

.statediagram-state .title-state {
  rx: 5px;
  ry: 5px;
}
.statediagram-cluster.statediagram-cluster .inner {
  fill: ${options2.compositeBackground || options2.background};
}
.statediagram-cluster.statediagram-cluster-alt .inner {
  fill: ${options2.altBackground ? options2.altBackground : "#efefef"};
}

.statediagram-cluster .inner {
  rx:0;
  ry:0;
}

.statediagram-state rect.basic {
  rx: 5px;
  ry: 5px;
}
.statediagram-state rect.divider {
  stroke-dasharray: 10,10;
  fill: ${options2.altBackground ? options2.altBackground : "#efefef"};
}

.note-edge {
  stroke-dasharray: 5;
}

.statediagram-note rect {
  fill: ${options2.noteBkgColor};
  stroke: ${options2.noteBorderColor};
  stroke-width: 1px;
  rx: 0;
  ry: 0;
}
.statediagram-note rect {
  fill: ${options2.noteBkgColor};
  stroke: ${options2.noteBorderColor};
  stroke-width: 1px;
  rx: 0;
  ry: 0;
}

.statediagram-note text {
  fill: ${options2.noteTextColor};
}

.statediagram-note .nodeLabel {
  color: ${options2.noteTextColor};
}
.statediagram .edgeLabel {
  color: red; // ${options2.noteTextColor};
}

[id$="-dependencyStart"], [id$="-dependencyEnd"] {
  fill: ${options2.lineColor};
  stroke: ${options2.lineColor};
  stroke-width: ${options2.strokeWidth || 1};
}

.statediagramTitleText {
  text-anchor: middle;
  font-size: 18px;
  fill: ${options2.textColor};
}

[data-look="neo"].statediagram-cluster rect {
  fill: ${options2.mainBkg};
  stroke: ${options2.useGradient ? "url(" + options2.svgId + "-gradient)" : options2.stateBorder || options2.nodeBorder};
  stroke-width: ${options2.strokeWidth ?? 1};
}
[data-look="neo"].statediagram-cluster rect.outer {
  rx: ${options2.radius}px;
  ry: ${options2.radius}px;
  filter: ${options2.dropShadow ? options2.dropShadow.replace("url(#drop-shadow)", `url(${options2.svgId}-drop-shadow)`) : "none"}
}
`, "getStyles");
      styles_default11 = getStyles12;
    }
  });

  // src/diagrams/state/shapes.js
  var drawStartState, drawDivider, drawSimpleState, drawDescrState, addTitleAndBox, drawEndState, drawForkJoinState, _drawLongText, drawNote2, drawState, edgeCount, drawEdge;
  var init_shapes2 = __esm({
    "src/diagrams/state/shapes.js"() {
      "use strict";
      init_src32();
      init_stateDb();
      init_utils2();
      init_common();
      init_diagramAPI();
      init_logger();
      drawStartState = /* @__PURE__ */ __name((g2) => g2.append("circle").attr("class", "start-state").attr("r", getConfig2().state.sizeUnit).attr("cx", getConfig2().state.padding + getConfig2().state.sizeUnit).attr("cy", getConfig2().state.padding + getConfig2().state.sizeUnit), "drawStartState");
      drawDivider = /* @__PURE__ */ __name((g2) => g2.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", getConfig2().state.textHeight).attr("class", "divider").attr("x2", getConfig2().state.textHeight * 2).attr("y1", 0).attr("y2", 0), "drawDivider");
      drawSimpleState = /* @__PURE__ */ __name((g2, stateDef) => {
        const state4 = g2.append("text").attr("x", 2 * getConfig2().state.padding).attr("y", getConfig2().state.textHeight + 2 * getConfig2().state.padding).attr("font-size", getConfig2().state.fontSize).attr("class", "state-title").text(stateDef.id);
        const classBox2 = state4.node().getBBox();
        g2.insert("rect", ":first-child").attr("x", getConfig2().state.padding).attr("y", getConfig2().state.padding).attr("width", classBox2.width + 2 * getConfig2().state.padding).attr("height", classBox2.height + 2 * getConfig2().state.padding).attr("rx", getConfig2().state.radius);
        return state4;
      }, "drawSimpleState");
      drawDescrState = /* @__PURE__ */ __name((g2, stateDef) => {
        const addTspan = /* @__PURE__ */ __name(function(textEl, txt, isFirst2) {
          const tSpan = textEl.append("tspan").attr("x", 2 * getConfig2().state.padding).text(txt);
          if (!isFirst2) {
            tSpan.attr("dy", getConfig2().state.textHeight);
          }
        }, "addTspan");
        const title2 = g2.append("text").attr("x", 2 * getConfig2().state.padding).attr("y", getConfig2().state.textHeight + 1.3 * getConfig2().state.padding).attr("font-size", getConfig2().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]);
        const titleBox = title2.node().getBBox();
        const titleHeight = titleBox.height;
        const description = g2.append("text").attr("x", getConfig2().state.padding).attr(
          "y",
          titleHeight + getConfig2().state.padding * 0.4 + getConfig2().state.dividerMargin + getConfig2().state.textHeight
        ).attr("class", "state-description");
        let isFirst = true;
        let isSecond = true;
        stateDef.descriptions.forEach(function(descr) {
          if (!isFirst) {
            addTspan(description, descr, isSecond);
            isSecond = false;
          }
          isFirst = false;
        });
        const descrLine = g2.append("line").attr("x1", getConfig2().state.padding).attr("y1", getConfig2().state.padding + titleHeight + getConfig2().state.dividerMargin / 2).attr("y2", getConfig2().state.padding + titleHeight + getConfig2().state.dividerMargin / 2).attr("class", "descr-divider");
        const descrBox = description.node().getBBox();
        const width3 = Math.max(descrBox.width, titleBox.width);
        descrLine.attr("x2", width3 + 3 * getConfig2().state.padding);
        g2.insert("rect", ":first-child").attr("x", getConfig2().state.padding).attr("y", getConfig2().state.padding).attr("width", width3 + 2 * getConfig2().state.padding).attr("height", descrBox.height + titleHeight + 2 * getConfig2().state.padding).attr("rx", getConfig2().state.radius);
        return g2;
      }, "drawDescrState");
      addTitleAndBox = /* @__PURE__ */ __name((g2, stateDef, altBkg) => {
        const pad3 = getConfig2().state.padding;
        const dblPad = 2 * getConfig2().state.padding;
        const orgBox = g2.node().getBBox();
        const orgWidth = orgBox.width;
        const orgX = orgBox.x;
        const title2 = g2.append("text").attr("x", 0).attr("y", getConfig2().state.titleShift).attr("font-size", getConfig2().state.fontSize).attr("class", "state-title").text(stateDef.id);
        const titleBox = title2.node().getBBox();
        const titleWidth = titleBox.width + dblPad;
        let width3 = Math.max(titleWidth, orgWidth);
        if (width3 === orgWidth) {
          width3 = width3 + dblPad;
        }
        let startX2;
        const graphBox = g2.node().getBBox();
        if (stateDef.doc) {
        }
        startX2 = orgX - pad3;
        if (titleWidth > orgWidth) {
          startX2 = (orgWidth - width3) / 2 + pad3;
        }
        if (Math.abs(orgX - graphBox.x) < pad3 && titleWidth > orgWidth) {
          startX2 = orgX - (titleWidth - orgWidth) / 2;
        }
        const lineY = 1 - getConfig2().state.textHeight;
        g2.insert("rect", ":first-child").attr("x", startX2).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width3).attr(
          "height",
          graphBox.height + getConfig2().state.textHeight + getConfig2().state.titleShift + 1
        ).attr("rx", "0");
        title2.attr("x", startX2 + pad3);
        if (titleWidth <= orgWidth) {
          title2.attr("x", orgX + (width3 - dblPad) / 2 - titleWidth / 2 + pad3);
        }
        g2.insert("rect", ":first-child").attr("x", startX2).attr(
          "y",
          getConfig2().state.titleShift - getConfig2().state.textHeight - getConfig2().state.padding
        ).attr("width", width3).attr("height", getConfig2().state.textHeight * 3).attr("rx", getConfig2().state.radius);
        g2.insert("rect", ":first-child").attr("x", startX2).attr(
          "y",
          getConfig2().state.titleShift - getConfig2().state.textHeight - getConfig2().state.padding
        ).attr("width", width3).attr("height", graphBox.height + 3 + 2 * getConfig2().state.textHeight).attr("rx", getConfig2().state.radius);
        return g2;
      }, "addTitleAndBox");
      drawEndState = /* @__PURE__ */ __name((g2) => {
        g2.append("circle").attr("class", "end-state-outer").attr("r", getConfig2().state.sizeUnit + getConfig2().state.miniPadding).attr(
          "cx",
          getConfig2().state.padding + getConfig2().state.sizeUnit + getConfig2().state.miniPadding
        ).attr(
          "cy",
          getConfig2().state.padding + getConfig2().state.sizeUnit + getConfig2().state.miniPadding
        );
        return g2.append("circle").attr("class", "end-state-inner").attr("r", getConfig2().state.sizeUnit).attr("cx", getConfig2().state.padding + getConfig2().state.sizeUnit + 2).attr("cy", getConfig2().state.padding + getConfig2().state.sizeUnit + 2);
      }, "drawEndState");
      drawForkJoinState = /* @__PURE__ */ __name((g2, stateDef) => {
        let width3 = getConfig2().state.forkWidth;
        let height2 = getConfig2().state.forkHeight;
        if (stateDef.parentId) {
          let tmp = width3;
          width3 = height2;
          height2 = tmp;
        }
        return g2.append("rect").style("stroke", "black").style("fill", "black").attr("width", width3).attr("height", height2).attr("x", getConfig2().state.padding).attr("y", getConfig2().state.padding);
      }, "drawForkJoinState");
      _drawLongText = /* @__PURE__ */ __name((_text, x5, y6, g2) => {
        let textHeight = 0;
        const textElem = g2.append("text");
        textElem.style("text-anchor", "start");
        textElem.attr("class", "noteText");
        let text4 = _text.replace(/\r\n/g, "<br/>");
        text4 = text4.replace(/\n/g, "<br/>");
        const lines = text4.split(common_default.lineBreakRegex);
        let tHeight = 1.25 * getConfig2().state.noteMargin;
        for (const line2 of lines) {
          const txt = line2.trim();
          if (txt.length > 0) {
            const span = textElem.append("tspan");
            span.text(txt);
            if (tHeight === 0) {
              const textBounds = span.node().getBBox();
              tHeight += textBounds.height;
            }
            textHeight += tHeight;
            span.attr("x", x5 + getConfig2().state.noteMargin);
            span.attr("y", y6 + textHeight + 1.25 * getConfig2().state.noteMargin);
          }
        }
        return { textWidth: textElem.node().getBBox().width, textHeight };
      }, "_drawLongText");
      drawNote2 = /* @__PURE__ */ __name((text4, g2) => {
        g2.attr("class", "state-note");
        const note3 = g2.append("rect").attr("x", 0).attr("y", getConfig2().state.padding);
        const rectElem = g2.append("g");
        const { textWidth, textHeight } = _drawLongText(text4, 0, 0, rectElem);
        note3.attr("height", textHeight + 2 * getConfig2().state.noteMargin);
        note3.attr("width", textWidth + getConfig2().state.noteMargin * 2);
        return note3;
      }, "drawNote");
      drawState = /* @__PURE__ */ __name(function(elem, stateDef) {
        const id41 = stateDef.id;
        const stateInfo = {
          id: id41,
          label: stateDef.id,
          width: 0,
          height: 0
        };
        const g2 = elem.append("g").attr("id", id41).attr("class", "stateGroup");
        if (stateDef.type === "start") {
          drawStartState(g2);
        }
        if (stateDef.type === "end") {
          drawEndState(g2);
        }
        if (stateDef.type === "fork" || stateDef.type === "join") {
          drawForkJoinState(g2, stateDef);
        }
        if (stateDef.type === "note") {
          drawNote2(stateDef.note.text, g2);
        }
        if (stateDef.type === "divider") {
          drawDivider(g2);
        }
        if (stateDef.type === "default" && stateDef.descriptions.length === 0) {
          drawSimpleState(g2, stateDef);
        }
        if (stateDef.type === "default" && stateDef.descriptions.length > 0) {
          drawDescrState(g2, stateDef);
        }
        const stateBox = g2.node().getBBox();
        stateInfo.width = stateBox.width + 2 * getConfig2().state.padding;
        stateInfo.height = stateBox.height + 2 * getConfig2().state.padding;
        return stateInfo;
      }, "drawState");
      edgeCount = 0;
      drawEdge = /* @__PURE__ */ __name(function(elem, path4, relation) {
        const getRelationType = /* @__PURE__ */ __name(function(type3) {
          switch (type3) {
            case StateDB.relationType.AGGREGATION:
              return "aggregation";
            case StateDB.relationType.EXTENSION:
              return "extension";
            case StateDB.relationType.COMPOSITION:
              return "composition";
            case StateDB.relationType.DEPENDENCY:
              return "dependency";
          }
        }, "getRelationType");
        path4.points = path4.points.filter((p3) => !Number.isNaN(p3.y));
        const lineData = path4.points;
        const lineFunction = line_default().x(function(d3) {
          return d3.x;
        }).y(function(d3) {
          return d3.y;
        }).curve(basis_default2);
        const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition");
        let url = "";
        if (getConfig2().state.arrowMarkerAbsolute) {
          url = getUrl(true);
        }
        svgPath.attr(
          "marker-end",
          "url(" + url + "#" + getRelationType(StateDB.relationType.DEPENDENCY) + "End)"
        );
        if (relation.title !== void 0) {
          const label = elem.append("g").attr("class", "stateLabel");
          const { x: x5, y: y6 } = utils_default2.calcLabelPosition(path4.points);
          const rows = common_default.getRows(relation.title);
          let titleHeight = 0;
          const titleRows = [];
          let maxWidth2 = 0;
          let minX = 0;
          for (let i2 = 0; i2 <= rows.length; i2++) {
            const title2 = label.append("text").attr("text-anchor", "middle").text(rows[i2]).attr("x", x5).attr("y", y6 + titleHeight);
            const boundsTmp = title2.node().getBBox();
            maxWidth2 = Math.max(maxWidth2, boundsTmp.width);
            minX = Math.min(minX, boundsTmp.x);
            log.info(boundsTmp.x, x5, y6 + titleHeight);
            if (titleHeight === 0) {
              const titleBox = title2.node().getBBox();
              titleHeight = titleBox.height;
              log.info("Title height", titleHeight, y6);
            }
            titleRows.push(title2);
          }
          let boxHeight = titleHeight * rows.length;
          if (rows.length > 1) {
            const heightAdj = (rows.length - 1) * titleHeight * 0.5;
            titleRows.forEach((title2, i2) => title2.attr("y", y6 + i2 * titleHeight - heightAdj));
            boxHeight = titleHeight * rows.length;
          }
          const bounds4 = label.node().getBBox();
          label.insert("rect", ":first-child").attr("class", "box").attr("x", x5 - maxWidth2 / 2 - getConfig2().state.padding / 2).attr("y", y6 - boxHeight / 2 - getConfig2().state.padding / 2 - 3.5).attr("width", maxWidth2 + getConfig2().state.padding).attr("height", boxHeight + getConfig2().state.padding);
          log.info(bounds4);
        }
        edgeCount++;
      }, "drawEdge");
    }
  });

  // src/diagrams/state/stateRenderer.js
  var conf3, transformationLog, setConf4, insertMarkers2, draw14, getLabelWidth, renderDoc, stateRenderer_default;
  var init_stateRenderer = __esm({
    "src/diagrams/state/stateRenderer.js"() {
      "use strict";
      init_src32();
      init_dagre();
      init_graphlib();
      init_logger();
      init_common();
      init_shapes2();
      init_diagramAPI();
      init_setupGraphViewbox();
      transformationLog = {};
      setConf4 = /* @__PURE__ */ __name(function() {
      }, "setConf");
      insertMarkers2 = /* @__PURE__ */ __name(function(elem) {
        elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z");
      }, "insertMarkers");
      draw14 = /* @__PURE__ */ __name(function(text4, id41, _version, diagObj) {
        conf3 = getConfig2().state;
        const securityLevel = getConfig2().securityLevel;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
        log.debug("Rendering diagram " + text4);
        const diagram38 = root4.select(`[id='${id41}']`);
        insertMarkers2(diagram38);
        const rootDoc = diagObj.db.getRootDoc();
        const rootG = diagram38.append("g").attr("id", id41 + "-root");
        renderDoc(rootDoc, rootG, void 0, false, root4, doc, diagObj);
        const padding = conf3.padding;
        const bounds4 = diagram38.node().getBBox();
        const width3 = bounds4.width + padding * 2;
        const height2 = bounds4.height + padding * 2;
        const svgWidth = width3 * 1.75;
        configureSvgSize(diagram38, height2, svgWidth, conf3.useMaxWidth);
        diagram38.attr(
          "viewBox",
          `${bounds4.x - conf3.padding}  ${bounds4.y - conf3.padding} ` + width3 + " " + height2
        );
      }, "draw");
      getLabelWidth = /* @__PURE__ */ __name((text4) => {
        return text4 ? text4.length * conf3.fontSizeFactor : 1;
      }, "getLabelWidth");
      renderDoc = /* @__PURE__ */ __name((doc, diagram38, parentId, altBkg, root4, domDocument, diagObj) => {
        const graph = new Graph({
          compound: true,
          multigraph: true
        });
        let i2;
        let edgeFreeDoc = true;
        for (i2 = 0; i2 < doc.length; i2++) {
          if (doc[i2].stmt === "relation") {
            edgeFreeDoc = false;
            break;
          }
        }
        if (parentId) {
          graph.setGraph({
            rankdir: "LR",
            multigraph: true,
            compound: true,
            // acyclicer: 'greedy',
            ranker: "tight-tree",
            ranksep: edgeFreeDoc ? 1 : conf3.edgeLengthFactor,
            nodeSep: edgeFreeDoc ? 1 : 50,
            isMultiGraph: true
            // ranksep: 5,
            // nodesep: 1
          });
        } else {
          graph.setGraph({
            rankdir: "TB",
            multigraph: true,
            compound: true,
            // isCompound: true,
            // acyclicer: 'greedy',
            // ranker: 'longest-path'
            ranksep: edgeFreeDoc ? 1 : conf3.edgeLengthFactor,
            nodeSep: edgeFreeDoc ? 1 : 50,
            ranker: "tight-tree",
            // ranker: 'network-simplex'
            isMultiGraph: true
          });
        }
        graph.setDefaultEdgeLabel(function() {
          return {};
        });
        const states = diagObj.db.getStates();
        const relations = diagObj.db.getRelations();
        const keys3 = Object.keys(states);
        let first3 = true;
        for (const key of keys3) {
          const stateDef = states[key];
          if (parentId) {
            stateDef.parentId = parentId;
          }
          let node2;
          if (stateDef.doc) {
            let sub2 = diagram38.append("g").attr("id", stateDef.id).attr("class", "stateGroup");
            node2 = renderDoc(stateDef.doc, sub2, stateDef.id, !altBkg, root4, domDocument, diagObj);
            if (first3) {
              sub2 = addTitleAndBox(sub2, stateDef, altBkg);
              let boxBounds = sub2.node().getBBox();
              node2.width = boxBounds.width;
              node2.height = boxBounds.height + conf3.padding / 2;
              transformationLog[stateDef.id] = { y: conf3.compositTitleSize };
            } else {
              let boxBounds = sub2.node().getBBox();
              node2.width = boxBounds.width;
              node2.height = boxBounds.height;
            }
          } else {
            node2 = drawState(diagram38, stateDef, graph);
          }
          if (stateDef.note) {
            const noteDef = {
              descriptions: [],
              id: stateDef.id + "-note",
              note: stateDef.note,
              type: "note"
            };
            const note3 = drawState(diagram38, noteDef, graph);
            if (stateDef.note.position === "left of") {
              graph.setNode(node2.id + "-note", note3);
              graph.setNode(node2.id, node2);
            } else {
              graph.setNode(node2.id, node2);
              graph.setNode(node2.id + "-note", note3);
            }
            graph.setParent(node2.id, node2.id + "-group");
            graph.setParent(node2.id + "-note", node2.id + "-group");
          } else {
            graph.setNode(node2.id, node2);
          }
        }
        log.debug("Count=", graph.nodeCount(), graph);
        let cnt4 = 0;
        relations.forEach(function(relation) {
          cnt4++;
          log.debug("Setting edge", relation);
          graph.setEdge(
            relation.id1,
            relation.id2,
            {
              relation,
              width: getLabelWidth(relation.title),
              height: conf3.labelHeight * common_default.getRows(relation.title).length,
              labelpos: "c"
            },
            "id" + cnt4
          );
        });
        layout(graph);
        log.debug("Graph after layout", graph.nodes());
        const svgElem = diagram38.node();
        graph.nodes().forEach(function(v3) {
          if (v3 !== void 0 && graph.node(v3) !== void 0) {
            log.warn("Node " + v3 + ": " + JSON.stringify(graph.node(v3)));
            root4.select("#" + svgElem.id + " #" + v3).attr(
              "transform",
              "translate(" + (graph.node(v3).x - graph.node(v3).width / 2) + "," + (graph.node(v3).y + (transformationLog[v3] ? transformationLog[v3].y : 0) - graph.node(v3).height / 2) + " )"
            );
            root4.select("#" + svgElem.id + " #" + v3).attr("data-x-shift", graph.node(v3).x - graph.node(v3).width / 2);
            const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v3 + " .divider");
            dividers.forEach((divider2) => {
              const parent4 = divider2.parentElement;
              let pWidth = 0;
              let pShift = 0;
              if (parent4) {
                if (parent4.parentElement) {
                  pWidth = parent4.parentElement.getBBox().width;
                }
                pShift = parseInt(parent4.getAttribute("data-x-shift"), 10);
                if (Number.isNaN(pShift)) {
                  pShift = 0;
                }
              }
              divider2.setAttribute("x1", 0 - pShift + 8);
              divider2.setAttribute("x2", pWidth - pShift - 8);
            });
          } else {
            log.debug("No Node " + v3 + ": " + JSON.stringify(graph.node(v3)));
          }
        });
        let stateBox = svgElem.getBBox();
        graph.edges().forEach(function(e3) {
          if (e3 !== void 0 && graph.edge(e3) !== void 0) {
            log.debug("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(graph.edge(e3)));
            drawEdge(diagram38, graph.edge(e3), graph.edge(e3).relation);
          }
        });
        stateBox = svgElem.getBBox();
        const stateInfo = {
          id: parentId ? parentId : "root",
          label: parentId ? parentId : "root",
          width: 0,
          height: 0
        };
        stateInfo.width = stateBox.width + 2 * conf3.padding;
        stateInfo.height = stateBox.height + 2 * conf3.padding;
        log.debug("Doc rendered", stateInfo, graph);
        return stateInfo;
      }, "renderDoc");
      stateRenderer_default = {
        setConf: setConf4,
        draw: draw14
      };
    }
  });

  // src/diagrams/state/stateDiagram.ts
  var stateDiagram_exports = {};
  __export(stateDiagram_exports, {
    diagram: () => diagram15
  });
  var diagram15;
  var init_stateDiagram2 = __esm({
    "src/diagrams/state/stateDiagram.ts"() {
      "use strict";
      init_stateDiagram();
      init_stateDb();
      init_styles11();
      init_stateRenderer();
      diagram15 = {
        parser: stateDiagram_default,
        get db() {
          return new StateDB(1);
        },
        renderer: stateRenderer_default,
        styles: styles_default11,
        init: /* @__PURE__ */ __name((cnf) => {
          if (!cnf.state) {
            cnf.state = {};
          }
          cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
        }, "init")
      };
    }
  });

  // src/diagrams/state/stateDiagram-v2.ts
  var stateDiagram_v2_exports = {};
  __export(stateDiagram_v2_exports, {
    diagram: () => diagram16
  });
  var diagram16;
  var init_stateDiagram_v2 = __esm({
    "src/diagrams/state/stateDiagram-v2.ts"() {
      "use strict";
      init_stateDiagram();
      init_stateDb();
      init_styles11();
      init_stateRenderer_v3_unified();
      diagram16 = {
        parser: stateDiagram_default,
        get db() {
          return new StateDB(2);
        },
        renderer: stateRenderer_v3_unified_default,
        styles: styles_default11,
        init: /* @__PURE__ */ __name((cnf) => {
          if (!cnf.state) {
            cnf.state = {};
          }
          cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
        }, "init")
      };
    }
  });

  // src/diagrams/user-journey/parser/journey.jison
  var parser14, journey_default;
  var init_journey = __esm({
    "src/diagrams/user-journey/parser/journey.jison"() {
      "use strict";
      parser14 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 18], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 14];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "taskName": 18, "taskData": 19, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "journey", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 18: "taskName", 19: "taskData" },
          productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 1:
                return $$[$0 - 1];
                break;
              case 2:
                this.$ = [];
                break;
              case 3:
                $$[$0 - 1].push($$[$0]);
                this.$ = $$[$0 - 1];
                break;
              case 4:
              case 5:
                this.$ = $$[$0];
                break;
              case 6:
              case 7:
                this.$ = [];
                break;
              case 8:
                yy.setDiagramTitle($$[$0].substr(6));
                this.$ = $$[$0].substr(6);
                break;
              case 9:
                this.$ = $$[$0].trim();
                yy.setAccTitle(this.$);
                break;
              case 10:
              case 11:
                this.$ = $$[$0].trim();
                yy.setAccDescription(this.$);
                break;
              case 12:
                yy.addSection($$[$0].substr(8));
                this.$ = $$[$0].substr(8);
                break;
              case 13:
                yy.addTask($$[$0 - 1], $$[$0]);
                this.$ = "task";
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o2($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 15, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 8]), { 13: [1, 16] }, { 15: [1, 17] }, o2($V0, [2, 11]), o2($V0, [2, 12]), { 19: [1, 18] }, o2($V0, [2, 4]), o2($V0, [2, 9]), o2($V0, [2, 10]), o2($V0, [2, 13])],
          defaultActions: {},
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  break;
                case 1:
                  break;
                case 2:
                  return 10;
                  break;
                case 3:
                  break;
                case 4:
                  break;
                case 5:
                  return 4;
                  break;
                case 6:
                  return 11;
                  break;
                case 7:
                  this.begin("acc_title");
                  return 12;
                  break;
                case 8:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 9:
                  this.begin("acc_descr");
                  return 14;
                  break;
                case 10:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 11:
                  this.begin("acc_descr_multiline");
                  break;
                case 12:
                  this.popState();
                  break;
                case 13:
                  return "acc_descr_multiline_value";
                  break;
                case 14:
                  return 17;
                  break;
                case 15:
                  return 18;
                  break;
                case 16:
                  return 19;
                  break;
                case 17:
                  return ":";
                  break;
                case 18:
                  return 6;
                  break;
                case 19:
                  return "INVALID";
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],
            conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser14.parser = parser14;
      journey_default = parser14;
    }
  });

  // src/diagrams/user-journey/journeyDb.js
  var currentSection2, sections3, tasks2, rawTasks2, clear13, addSection3, getSections3, getTasks2, updateActors, addTask2, addTaskOrg2, compileTasks2, getActors, journeyDb_default;
  var init_journeyDb = __esm({
    "src/diagrams/user-journey/journeyDb.js"() {
      "use strict";
      init_diagramAPI();
      init_commonDb();
      currentSection2 = "";
      sections3 = [];
      tasks2 = [];
      rawTasks2 = [];
      clear13 = /* @__PURE__ */ __name(function() {
        sections3.length = 0;
        tasks2.length = 0;
        currentSection2 = "";
        rawTasks2.length = 0;
        clear();
      }, "clear");
      addSection3 = /* @__PURE__ */ __name(function(txt) {
        currentSection2 = txt;
        sections3.push(txt);
      }, "addSection");
      getSections3 = /* @__PURE__ */ __name(function() {
        return sections3;
      }, "getSections");
      getTasks2 = /* @__PURE__ */ __name(function() {
        let allItemsProcessed = compileTasks2();
        const maxDepth = 100;
        let iterationCount = 0;
        while (!allItemsProcessed && iterationCount < maxDepth) {
          allItemsProcessed = compileTasks2();
          iterationCount++;
        }
        tasks2.push(...rawTasks2);
        return tasks2;
      }, "getTasks");
      updateActors = /* @__PURE__ */ __name(function() {
        const tempActors = [];
        tasks2.forEach((task) => {
          if (task.people) {
            tempActors.push(...task.people);
          }
        });
        const unique = new Set(tempActors);
        return [...unique].sort();
      }, "updateActors");
      addTask2 = /* @__PURE__ */ __name(function(descr, taskData) {
        const pieces = taskData.substr(1).split(":");
        let score = 0;
        let peeps = [];
        if (pieces.length === 1) {
          score = Number(pieces[0]);
          peeps = [];
        } else {
          score = Number(pieces[0]);
          peeps = pieces[1].split(",");
        }
        const peopleList = peeps.map((s2) => s2.trim());
        const rawTask = {
          section: currentSection2,
          type: currentSection2,
          people: peopleList,
          task: descr,
          score
        };
        rawTasks2.push(rawTask);
      }, "addTask");
      addTaskOrg2 = /* @__PURE__ */ __name(function(descr) {
        const newTask = {
          section: currentSection2,
          type: currentSection2,
          description: descr,
          task: descr,
          classes: []
        };
        tasks2.push(newTask);
      }, "addTaskOrg");
      compileTasks2 = /* @__PURE__ */ __name(function() {
        const compileTask = /* @__PURE__ */ __name(function(pos) {
          return rawTasks2[pos].processed;
        }, "compileTask");
        let allProcessed = true;
        for (const [i2, rawTask] of rawTasks2.entries()) {
          compileTask(i2);
          allProcessed = allProcessed && rawTask.processed;
        }
        return allProcessed;
      }, "compileTasks");
      getActors = /* @__PURE__ */ __name(function() {
        return updateActors();
      }, "getActors");
      journeyDb_default = {
        getConfig: /* @__PURE__ */ __name(() => getConfig2().journey, "getConfig"),
        clear: clear13,
        setDiagramTitle,
        getDiagramTitle,
        setAccTitle,
        getAccTitle,
        setAccDescription,
        getAccDescription,
        addSection: addSection3,
        getSections: getSections3,
        getTasks: getTasks2,
        addTask: addTask2,
        addTaskOrg: addTaskOrg2,
        getActors
      };
    }
  });

  // src/diagrams/user-journey/styles.js
  var getStyles13, styles_default12;
  var init_styles12 = __esm({
    "src/diagrams/user-journey/styles.js"() {
      "use strict";
      init_globalStyles();
      getStyles13 = /* @__PURE__ */ __name((options2) => `.label {
    font-family: ${options2.fontFamily};
    color: ${options2.textColor};
  }
  .mouth {
    stroke: #666;
  }

  line {
    stroke: ${options2.textColor}
  }

  .legend {
    fill: ${options2.textColor};
    font-family: ${options2.fontFamily};
  }

  .label text {
    fill: #333;
  }
  .label {
    color: ${options2.textColor}
  }

  .face {
    ${options2.faceColor ? `fill: ${options2.faceColor}` : "fill: #FFF8DC"};
    stroke: #999;
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${options2.mainBkg};
    stroke: ${options2.nodeBorder};
    stroke-width: 1px;
  }

  .node .label {
    text-align: center;
  }
  .node.clickable {
    cursor: pointer;
  }

  .arrowheadPath {
    fill: ${options2.arrowheadColor};
  }

  .edgePath .path {
    stroke: ${options2.lineColor};
    stroke-width: 1.5px;
  }

  .flowchart-link {
    stroke: ${options2.lineColor};
    fill: none;
  }

  .edgeLabel {
    background-color: ${options2.edgeLabelBackground};
    rect {
      opacity: 0.5;
    }
    text-align: center;
  }

  .cluster rect {
  }

  .cluster text {
    fill: ${options2.titleColor};
  }

  div.mermaidTooltip {
    position: absolute;
    text-align: center;
    max-width: 200px;
    padding: 2px;
    font-family: ${options2.fontFamily};
    font-size: 12px;
    background: ${options2.tertiaryColor};
    border: 1px solid ${options2.border2};
    border-radius: 2px;
    pointer-events: none;
    z-index: 100;
  }

  .task-type-0, .section-type-0  {
    ${options2.fillType0 ? `fill: ${options2.fillType0}` : ""};
  }
  .task-type-1, .section-type-1  {
    ${options2.fillType0 ? `fill: ${options2.fillType1}` : ""};
  }
  .task-type-2, .section-type-2  {
    ${options2.fillType0 ? `fill: ${options2.fillType2}` : ""};
  }
  .task-type-3, .section-type-3  {
    ${options2.fillType0 ? `fill: ${options2.fillType3}` : ""};
  }
  .task-type-4, .section-type-4  {
    ${options2.fillType0 ? `fill: ${options2.fillType4}` : ""};
  }
  .task-type-5, .section-type-5  {
    ${options2.fillType0 ? `fill: ${options2.fillType5}` : ""};
  }
  .task-type-6, .section-type-6  {
    ${options2.fillType0 ? `fill: ${options2.fillType6}` : ""};
  }
  .task-type-7, .section-type-7  {
    ${options2.fillType0 ? `fill: ${options2.fillType7}` : ""};
  }

  .actor-0 {
    ${options2.actor0 ? `fill: ${options2.actor0}` : ""};
  }
  .actor-1 {
    ${options2.actor1 ? `fill: ${options2.actor1}` : ""};
  }
  .actor-2 {
    ${options2.actor2 ? `fill: ${options2.actor2}` : ""};
  }
  .actor-3 {
    ${options2.actor3 ? `fill: ${options2.actor3}` : ""};
  }
  .actor-4 {
    ${options2.actor4 ? `fill: ${options2.actor4}` : ""};
  }
  .actor-5 {
    ${options2.actor5 ? `fill: ${options2.actor5}` : ""};
  }
  ${getIconStyles()}
`, "getStyles");
      styles_default12 = getStyles13;
    }
  });

  // src/diagrams/user-journey/svgDraw.js
  var drawRect5, drawFace, drawCircle, drawText4, drawLabel2, drawSection, taskCount, drawTask, drawBackgroundRect3, _drawTextCandidateFunc3, initGraphics, svgDraw_default3;
  var init_svgDraw3 = __esm({
    "src/diagrams/user-journey/svgDraw.js"() {
      "use strict";
      init_src32();
      init_svgDrawCommon();
      drawRect5 = /* @__PURE__ */ __name(function(elem, rectData) {
        return drawRect(elem, rectData);
      }, "drawRect");
      drawFace = /* @__PURE__ */ __name(function(element3, faceData) {
        const radius2 = 15;
        const circleElement = element3.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius2).attr("stroke-width", 2).attr("overflow", "visible");
        const face = element3.append("g");
        face.append("circle").attr("cx", faceData.cx - radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
        face.append("circle").attr("cx", faceData.cx + radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
        function smile(face2) {
          const arc = arc_default().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2);
          face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")");
        }
        __name(smile, "smile");
        function sad(face2) {
          const arc = arc_default().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2);
          face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")");
        }
        __name(sad, "sad");
        function ambivalent(face2) {
          face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666");
        }
        __name(ambivalent, "ambivalent");
        if (faceData.score > 3) {
          smile(face);
        } else if (faceData.score < 3) {
          sad(face);
        } else {
          ambivalent(face);
        }
        return circleElement;
      }, "drawFace");
      drawCircle = /* @__PURE__ */ __name(function(element3, circleData) {
        const circleElement = element3.append("circle");
        circleElement.attr("cx", circleData.cx);
        circleElement.attr("cy", circleData.cy);
        circleElement.attr("class", "actor-" + circleData.pos);
        circleElement.attr("fill", circleData.fill);
        circleElement.attr("stroke", circleData.stroke);
        circleElement.attr("r", circleData.r);
        if (circleElement.class !== void 0) {
          circleElement.attr("class", circleElement.class);
        }
        if (circleData.title !== void 0) {
          circleElement.append("title").text(circleData.title);
        }
        return circleElement;
      }, "drawCircle");
      drawText4 = /* @__PURE__ */ __name(function(elem, textData) {
        return drawText(elem, textData);
      }, "drawText");
      drawLabel2 = /* @__PURE__ */ __name(function(elem, txtObject) {
        function genPoints(x5, y6, width3, height2, cut) {
          return x5 + "," + y6 + " " + (x5 + width3) + "," + y6 + " " + (x5 + width3) + "," + (y6 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y6 + height2) + " " + x5 + "," + (y6 + height2);
        }
        __name(genPoints, "genPoints");
        const polygon2 = elem.append("polygon");
        polygon2.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7));
        polygon2.attr("class", "labelBox");
        txtObject.y = txtObject.y + txtObject.labelMargin;
        txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;
        drawText4(elem, txtObject);
      }, "drawLabel");
      drawSection = /* @__PURE__ */ __name(function(elem, section, conf5) {
        const g2 = elem.append("g");
        const rect3 = getNoteRect();
        rect3.x = section.x;
        rect3.y = section.y;
        rect3.fill = section.fill;
        rect3.width = conf5.width * section.taskCount + // width of the tasks
        conf5.diagramMarginX * (section.taskCount - 1);
        rect3.height = conf5.height;
        rect3.class = "journey-section section-type-" + section.num;
        rect3.rx = 3;
        rect3.ry = 3;
        drawRect5(g2, rect3);
        _drawTextCandidateFunc3(conf5)(
          section.text,
          g2,
          rect3.x,
          rect3.y,
          rect3.width,
          rect3.height,
          { class: "journey-section section-type-" + section.num },
          conf5,
          section.colour
        );
      }, "drawSection");
      taskCount = -1;
      drawTask = /* @__PURE__ */ __name(function(elem, task, conf5, diagramId3) {
        const center4 = task.x + conf5.width / 2;
        const g2 = elem.append("g");
        taskCount++;
        const maxHeight = 300 + 5 * 30;
        g2.append("line").attr("id", diagramId3 + "-task" + taskCount).attr("x1", center4).attr("y1", task.y).attr("x2", center4).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666");
        drawFace(g2, {
          cx: center4,
          cy: 300 + (5 - task.score) * 30,
          score: task.score
        });
        const rect3 = getNoteRect();
        rect3.x = task.x;
        rect3.y = task.y;
        rect3.fill = task.fill;
        rect3.width = conf5.width;
        rect3.height = conf5.height;
        rect3.class = "task task-type-" + task.num;
        rect3.rx = 3;
        rect3.ry = 3;
        drawRect5(g2, rect3);
        let xPos = task.x + 14;
        task.people.forEach((person) => {
          const colour = task.actors[person].color;
          const circle6 = {
            cx: xPos,
            cy: task.y,
            r: 7,
            fill: colour,
            stroke: "#000",
            title: person,
            pos: task.actors[person].position
          };
          drawCircle(g2, circle6);
          xPos += 10;
        });
        _drawTextCandidateFunc3(conf5)(
          task.task,
          g2,
          rect3.x,
          rect3.y,
          rect3.width,
          rect3.height,
          { class: "task" },
          conf5,
          task.colour
        );
      }, "drawTask");
      drawBackgroundRect3 = /* @__PURE__ */ __name(function(elem, bounds4) {
        drawBackgroundRect(elem, bounds4);
      }, "drawBackgroundRect");
      _drawTextCandidateFunc3 = /* @__PURE__ */ (function() {
        function byText(content, g2, x5, y6, width3, height2, textAttrs, colour) {
          const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6 + height2 / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byText, "byText");
        function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5, colour) {
          const { taskFontSize, taskFontFamily } = conf5;
          const lines = content.split(/<br\s*\/?>/gi);
          for (let i2 = 0; i2 < lines.length; i2++) {
            const dy = i2 * taskFontSize - taskFontSize * (lines.length - 1) / 2;
            const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily);
            text4.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]);
            text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
            _setTextAttrs(text4, textAttrs);
          }
        }
        __name(byTspan, "byTspan");
        function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const body = g2.append("switch");
          const f2 = body.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2).attr("position", "fixed");
          const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
          text4.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
          byTspan(content, body, x5, y6, width3, height2, textAttrs, conf5);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byFo, "byFo");
        function _setTextAttrs(toText, fromTextAttrsDict) {
          for (const key in fromTextAttrsDict) {
            if (key in fromTextAttrsDict) {
              toText.attr(key, fromTextAttrsDict[key]);
            }
          }
        }
        __name(_setTextAttrs, "_setTextAttrs");
        return function(conf5) {
          return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan;
        };
      })();
      initGraphics = /* @__PURE__ */ __name(function(graphics, id41) {
        taskCount = -1;
        graphics.append("defs").append("marker").attr("id", id41 + "-arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z");
      }, "initGraphics");
      svgDraw_default3 = {
        drawRect: drawRect5,
        drawCircle,
        drawSection,
        drawText: drawText4,
        drawLabel: drawLabel2,
        drawTask,
        drawBackgroundRect: drawBackgroundRect3,
        initGraphics
      };
    }
  });

  // src/diagrams/user-journey/journeyRenderer.ts
  function drawActorLegend(diagram38) {
    const conf5 = getConfig2().journey;
    const maxLabelWidth = conf5.maxLabelWidth;
    maxWidth = 0;
    let yPos = 60;
    Object.keys(actors).forEach((person) => {
      const colour = actors[person].color;
      const circleData = {
        cx: 20,
        cy: yPos,
        r: 7,
        fill: colour,
        stroke: "#000",
        pos: actors[person].position
      };
      svgDraw_default3.drawCircle(diagram38, circleData);
      let measureText = diagram38.append("text").attr("visibility", "hidden").text(person);
      const fullTextWidth = measureText.node().getBoundingClientRect().width;
      measureText.remove();
      let lines = [];
      if (fullTextWidth <= maxLabelWidth) {
        lines = [person];
      } else {
        const words = person.split(" ");
        let currentLine = "";
        measureText = diagram38.append("text").attr("visibility", "hidden");
        words.forEach((word) => {
          const testLine = currentLine ? `${currentLine} ${word}` : word;
          measureText.text(testLine);
          const textWidth = measureText.node().getBoundingClientRect().width;
          if (textWidth > maxLabelWidth) {
            if (currentLine) {
              lines.push(currentLine);
            }
            currentLine = word;
            measureText.text(word);
            if (measureText.node().getBoundingClientRect().width > maxLabelWidth) {
              let brokenWord = "";
              for (const char2 of word) {
                brokenWord += char2;
                measureText.text(brokenWord + "-");
                if (measureText.node().getBoundingClientRect().width > maxLabelWidth) {
                  lines.push(brokenWord.slice(0, -1) + "-");
                  brokenWord = char2;
                }
              }
              currentLine = brokenWord;
            }
          } else {
            currentLine = testLine;
          }
        });
        if (currentLine) {
          lines.push(currentLine);
        }
        measureText.remove();
      }
      lines.forEach((line2, index) => {
        const labelData = {
          x: 40,
          y: yPos + 7 + index * 20,
          fill: "#666",
          text: line2,
          textMargin: conf5.boxTextMargin ?? 5
        };
        const textElement = svgDraw_default3.drawText(diagram38, labelData);
        const lineWidth = textElement.node().getBoundingClientRect().width;
        if (lineWidth > maxWidth && lineWidth > conf5.leftMargin - lineWidth) {
          maxWidth = lineWidth;
        }
      });
      yPos += Math.max(20, lines.length * 20);
    });
  }
  var setConf5, actors, maxWidth, conf4, leftMargin, draw15, bounds3, fills, textColours, drawTasks, journeyRenderer_default;
  var init_journeyRenderer = __esm({
    "src/diagrams/user-journey/journeyRenderer.ts"() {
      "use strict";
      init_src32();
      init_svgDraw3();
      init_diagramAPI();
      init_setupGraphViewbox();
      setConf5 = /* @__PURE__ */ __name(function(cnf) {
        const keys3 = Object.keys(cnf);
        keys3.forEach(function(key) {
          conf4[key] = cnf[key];
        });
      }, "setConf");
      actors = {};
      maxWidth = 0;
      __name(drawActorLegend, "drawActorLegend");
      conf4 = getConfig2().journey;
      leftMargin = 0;
      draw15 = /* @__PURE__ */ __name(function(text4, id41, version3, diagObj) {
        const configObject = getConfig2();
        const titleColor = configObject.journey.titleColor;
        const titleFontSize = configObject.journey.titleFontSize;
        const titleFontFamily = configObject.journey.titleFontFamily;
        const securityLevel = configObject.securityLevel;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        bounds3.init();
        const diagram38 = root4.select("#" + id41);
        svgDraw_default3.initGraphics(diagram38, id41);
        const tasks4 = diagObj.db.getTasks();
        const title2 = diagObj.db.getDiagramTitle();
        const actorNames = diagObj.db.getActors();
        for (const member in actors) {
          delete actors[member];
        }
        let actorPos = 0;
        actorNames.forEach((actorName) => {
          actors[actorName] = {
            color: conf4.actorColours[actorPos % conf4.actorColours.length],
            position: actorPos
          };
          actorPos++;
        });
        drawActorLegend(diagram38);
        leftMargin = conf4.leftMargin + maxWidth;
        bounds3.insert(0, 0, leftMargin, Object.keys(actors).length * 50);
        drawTasks(diagram38, tasks4, 0, id41);
        const box = bounds3.getBounds();
        if (title2) {
          diagram38.append("text").text(title2).attr("x", leftMargin).attr("font-size", titleFontSize).attr("font-weight", "bold").attr("y", 25).attr("fill", titleColor).attr("font-family", titleFontFamily);
        }
        const height2 = box.stopy - box.starty + 2 * conf4.diagramMarginY;
        const width3 = leftMargin + box.stopx + 2 * conf4.diagramMarginX;
        configureSvgSize(diagram38, height2, width3, conf4.useMaxWidth);
        diagram38.append("line").attr("x1", leftMargin).attr("y1", conf4.height * 4).attr("x2", width3 - leftMargin - 4).attr("y2", conf4.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#" + id41 + "-arrowhead)");
        const extraVertForTitle = title2 ? 70 : 0;
        diagram38.attr("viewBox", `${box.startx} -25 ${width3} ${height2 + extraVertForTitle}`);
        diagram38.attr("preserveAspectRatio", "xMinYMin meet");
        diagram38.attr("height", height2 + extraVertForTitle + 25);
      }, "draw");
      bounds3 = {
        data: {
          startx: void 0,
          stopx: void 0,
          starty: void 0,
          stopy: void 0
        },
        verticalPos: 0,
        sequenceItems: [],
        init: /* @__PURE__ */ __name(function() {
          this.sequenceItems = [];
          this.data = {
            startx: void 0,
            stopx: void 0,
            starty: void 0,
            stopy: void 0
          };
          this.verticalPos = 0;
        }, "init"),
        updateVal: /* @__PURE__ */ __name(function(obj, key, val, fun) {
          if (obj[key] === void 0) {
            obj[key] = val;
          } else {
            obj[key] = fun(val, obj[key]);
          }
        }, "updateVal"),
        updateBounds: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) {
          const conf5 = getConfig2().journey;
          const _self = this;
          let cnt4 = 0;
          function updateFn(type3) {
            return /* @__PURE__ */ __name(function updateItemBounds(item) {
              cnt4++;
              const n2 = _self.sequenceItems.length - cnt4 + 1;
              _self.updateVal(item, "starty", starty - n2 * conf5.boxMargin, Math.min);
              _self.updateVal(item, "stopy", stopy + n2 * conf5.boxMargin, Math.max);
              _self.updateVal(bounds3.data, "startx", startx - n2 * conf5.boxMargin, Math.min);
              _self.updateVal(bounds3.data, "stopx", stopx + n2 * conf5.boxMargin, Math.max);
              if (!(type3 === "activation")) {
                _self.updateVal(item, "startx", startx - n2 * conf5.boxMargin, Math.min);
                _self.updateVal(item, "stopx", stopx + n2 * conf5.boxMargin, Math.max);
                _self.updateVal(bounds3.data, "starty", starty - n2 * conf5.boxMargin, Math.min);
                _self.updateVal(bounds3.data, "stopy", stopy + n2 * conf5.boxMargin, Math.max);
              }
            }, "updateItemBounds");
          }
          __name(updateFn, "updateFn");
          this.sequenceItems.forEach(updateFn());
        }, "updateBounds"),
        insert: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) {
          const _startx = Math.min(startx, stopx);
          const _stopx = Math.max(startx, stopx);
          const _starty = Math.min(starty, stopy);
          const _stopy = Math.max(starty, stopy);
          this.updateVal(bounds3.data, "startx", _startx, Math.min);
          this.updateVal(bounds3.data, "starty", _starty, Math.min);
          this.updateVal(bounds3.data, "stopx", _stopx, Math.max);
          this.updateVal(bounds3.data, "stopy", _stopy, Math.max);
          this.updateBounds(_startx, _starty, _stopx, _stopy);
        }, "insert"),
        bumpVerticalPos: /* @__PURE__ */ __name(function(bump) {
          this.verticalPos = this.verticalPos + bump;
          this.data.stopy = this.verticalPos;
        }, "bumpVerticalPos"),
        getVerticalPos: /* @__PURE__ */ __name(function() {
          return this.verticalPos;
        }, "getVerticalPos"),
        getBounds: /* @__PURE__ */ __name(function() {
          return this.data;
        }, "getBounds")
      };
      fills = conf4.sectionFills;
      textColours = conf4.sectionColours;
      drawTasks = /* @__PURE__ */ __name(function(diagram38, tasks4, verticalPos, diagramId3) {
        const conf5 = getConfig2().journey;
        let lastSection = "";
        const sectionVHeight = conf5.height * 2 + conf5.diagramMarginY;
        const taskPos = verticalPos + sectionVHeight;
        let sectionNumber = 0;
        let fill = "#CCC";
        let colour = "black";
        let num = 0;
        for (const [i2, task] of tasks4.entries()) {
          if (lastSection !== task.section) {
            fill = fills[sectionNumber % fills.length];
            num = sectionNumber % fills.length;
            colour = textColours[sectionNumber % textColours.length];
            let taskInSectionCount = 0;
            const currentSection4 = task.section;
            for (let taskIndex = i2; taskIndex < tasks4.length; taskIndex++) {
              if (tasks4[taskIndex].section == currentSection4) {
                taskInSectionCount = taskInSectionCount + 1;
              } else {
                break;
              }
            }
            const section = {
              x: i2 * conf5.taskMargin + i2 * conf5.width + leftMargin,
              y: 50,
              text: task.section,
              fill,
              num,
              colour,
              taskCount: taskInSectionCount
            };
            svgDraw_default3.drawSection(diagram38, section, conf5);
            lastSection = task.section;
            sectionNumber++;
          }
          const taskActors = task.people.reduce((acc, actorName) => {
            if (actors[actorName]) {
              acc[actorName] = actors[actorName];
            }
            return acc;
          }, {});
          task.x = i2 * conf5.taskMargin + i2 * conf5.width + leftMargin;
          task.y = taskPos;
          task.width = conf5.diagramMarginX;
          task.height = conf5.diagramMarginY;
          task.colour = colour;
          task.fill = fill;
          task.num = num;
          task.actors = taskActors;
          svgDraw_default3.drawTask(diagram38, task, conf5, diagramId3);
          bounds3.insert(task.x, task.y, task.x + task.width + conf5.taskMargin, 300 + 5 * 30);
        }
      }, "drawTasks");
      journeyRenderer_default = {
        setConf: setConf5,
        draw: draw15
      };
    }
  });

  // src/diagrams/user-journey/journeyDiagram.ts
  var journeyDiagram_exports = {};
  __export(journeyDiagram_exports, {
    diagram: () => diagram17
  });
  var diagram17;
  var init_journeyDiagram = __esm({
    "src/diagrams/user-journey/journeyDiagram.ts"() {
      "use strict";
      init_journey();
      init_journeyDb();
      init_styles12();
      init_journeyRenderer();
      diagram17 = {
        parser: journey_default,
        db: journeyDb_default,
        renderer: journeyRenderer_default,
        styles: styles_default12,
        init: /* @__PURE__ */ __name((cnf) => {
          journeyRenderer_default.setConf(cnf.journey);
          journeyDb_default.clear();
        }, "init")
      };
    }
  });

  // src/diagrams/timeline/parser/timeline.jison
  var parser15, timeline_default;
  var init_timeline = __esm({
    "src/diagrams/timeline/parser/timeline.jison"() {
      "use strict";
      parser15 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [6, 11, 13, 14, 15, 17, 19, 20, 23, 24], $V1 = [1, 12], $V2 = [1, 13], $V3 = [1, 14], $V4 = [1, 15], $V5 = [1, 16], $V6 = [1, 19], $V7 = [1, 20];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "timeline_header": 4, "document": 5, "EOF": 6, "timeline": 7, "timeline_lr": 8, "timeline_td": 9, "line": 10, "SPACE": 11, "statement": 12, "NEWLINE": 13, "title": 14, "acc_title": 15, "acc_title_value": 16, "acc_descr": 17, "acc_descr_value": 18, "acc_descr_multiline_value": 19, "section": 20, "period_statement": 21, "event_statement": 22, "period": 23, "event": 24, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 6: "EOF", 7: "timeline", 8: "timeline_lr", 9: "timeline_td", 11: "SPACE", 13: "NEWLINE", 14: "title", 15: "acc_title", 16: "acc_title_value", 17: "acc_descr", 18: "acc_descr_value", 19: "acc_descr_multiline_value", 20: "section", 23: "period", 24: "event" },
          productions_: [0, [3, 3], [4, 1], [4, 1], [4, 1], [5, 0], [5, 2], [10, 2], [10, 1], [10, 1], [10, 1], [12, 1], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [21, 1], [22, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 1:
                return $$[$0 - 1];
                break;
              case 3:
                yy.setDirection("LR");
                break;
              case 4:
                yy.setDirection("TD");
                break;
              case 5:
                this.$ = [];
                break;
              case 6:
                $$[$0 - 1].push($$[$0]);
                this.$ = $$[$0 - 1];
                break;
              case 7:
              case 8:
                this.$ = $$[$0];
                break;
              case 9:
              case 10:
                this.$ = [];
                break;
              case 11:
                yy.getCommonDb().setDiagramTitle($$[$0].substr(6));
                this.$ = $$[$0].substr(6);
                break;
              case 12:
                this.$ = $$[$0].trim();
                yy.getCommonDb().setAccTitle(this.$);
                break;
              case 13:
              case 14:
                this.$ = $$[$0].trim();
                yy.getCommonDb().setAccDescription(this.$);
                break;
              case 15:
                yy.addSection($$[$0].substr(8));
                this.$ = $$[$0].substr(8);
                break;
              case 18:
                yy.addTask($$[$0], 0, "");
                this.$ = $$[$0];
                break;
              case 19:
                yy.addEvent($$[$0].substr(2));
                this.$ = $$[$0];
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 7: [1, 3], 8: [1, 4], 9: [1, 5] }, { 1: [3] }, o2($V0, [2, 5], { 5: 6 }), o2($V0, [2, 2]), o2($V0, [2, 3]), o2($V0, [2, 4]), { 6: [1, 7], 10: 8, 11: [1, 9], 12: 10, 13: [1, 11], 14: $V1, 15: $V2, 17: $V3, 19: $V4, 20: $V5, 21: 17, 22: 18, 23: $V6, 24: $V7 }, o2($V0, [2, 10], { 1: [2, 1] }), o2($V0, [2, 6]), { 12: 21, 14: $V1, 15: $V2, 17: $V3, 19: $V4, 20: $V5, 21: 17, 22: 18, 23: $V6, 24: $V7 }, o2($V0, [2, 8]), o2($V0, [2, 9]), o2($V0, [2, 11]), { 16: [1, 22] }, { 18: [1, 23] }, o2($V0, [2, 14]), o2($V0, [2, 15]), o2($V0, [2, 16]), o2($V0, [2, 17]), o2($V0, [2, 18]), o2($V0, [2, 19]), o2($V0, [2, 7]), o2($V0, [2, 12]), o2($V0, [2, 13])],
          defaultActions: {},
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  break;
                case 1:
                  break;
                case 2:
                  return 13;
                  break;
                case 3:
                  break;
                case 4:
                  break;
                case 5:
                  return 8;
                  break;
                case 6:
                  return 9;
                  break;
                case 7:
                  return 7;
                  break;
                case 8:
                  return 14;
                  break;
                case 9:
                  this.begin("acc_title");
                  return 15;
                  break;
                case 10:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 11:
                  this.begin("acc_descr");
                  return 17;
                  break;
                case 12:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 13:
                  this.begin("acc_descr_multiline");
                  break;
                case 14:
                  this.popState();
                  break;
                case 15:
                  return "acc_descr_multiline_value";
                  break;
                case 16:
                  return 20;
                  break;
                case 17:
                  return 24;
                  break;
                case 18:
                  return 23;
                  break;
                case 19:
                  return 6;
                  break;
                case 20:
                  return "INVALID";
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline[ \t]+LR\b)/i, /^(?:timeline[ \t]+TD\b)/i, /^(?:timeline\b)/i, /^(?:title\s[^\n]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^:\n]+)/i, /^(?::\s(?:[^:\n]|:(?!\s))+)/i, /^(?:[^#:\n]+)/i, /^(?:$)/i, /^(?:.)/i],
            conditions: { "acc_descr_multiline": { "rules": [14, 15], "inclusive": false }, "acc_descr": { "rules": [12], "inclusive": false }, "acc_title": { "rules": [10], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 16, 17, 18, 19, 20], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser15.parser = parser15;
      timeline_default = parser15;
    }
  });

  // src/diagrams/timeline/timelineDb.js
  var timelineDb_exports = {};
  __export(timelineDb_exports, {
    addEvent: () => addEvent,
    addSection: () => addSection4,
    addTask: () => addTask3,
    addTaskOrg: () => addTaskOrg3,
    clear: () => clear14,
    default: () => timelineDb_default,
    getCommonDb: () => getCommonDb2,
    getDirection: () => getDirection2,
    getSections: () => getSections4,
    getTasks: () => getTasks3,
    setDirection: () => setDirection2
  });
  var currentSection3, currentTaskId, direction, sections4, tasks3, rawTasks3, getCommonDb2, clear14, setDirection2, getDirection2, addSection4, getSections4, getTasks3, addTask3, addEvent, addTaskOrg3, compileTasks3, timelineDb_default;
  var init_timelineDb = __esm({
    "src/diagrams/timeline/timelineDb.js"() {
      "use strict";
      init_commonDb();
      currentSection3 = "";
      currentTaskId = 0;
      direction = "LR";
      sections4 = [];
      tasks3 = [];
      rawTasks3 = [];
      getCommonDb2 = /* @__PURE__ */ __name(() => commonDb_exports, "getCommonDb");
      clear14 = /* @__PURE__ */ __name(function() {
        sections4.length = 0;
        tasks3.length = 0;
        currentSection3 = "";
        rawTasks3.length = 0;
        direction = "LR";
        clear();
      }, "clear");
      setDirection2 = /* @__PURE__ */ __name(function(dir2) {
        direction = dir2;
      }, "setDirection");
      getDirection2 = /* @__PURE__ */ __name(function() {
        return direction;
      }, "getDirection");
      addSection4 = /* @__PURE__ */ __name(function(txt) {
        currentSection3 = txt;
        sections4.push(txt);
      }, "addSection");
      getSections4 = /* @__PURE__ */ __name(function() {
        return sections4;
      }, "getSections");
      getTasks3 = /* @__PURE__ */ __name(function() {
        let allItemsProcessed = compileTasks3();
        const maxDepth = 100;
        let iterationCount = 0;
        while (!allItemsProcessed && iterationCount < maxDepth) {
          allItemsProcessed = compileTasks3();
          iterationCount++;
        }
        tasks3.push(...rawTasks3);
        return tasks3;
      }, "getTasks");
      addTask3 = /* @__PURE__ */ __name(function(period, length2, event3) {
        const rawTask = {
          id: currentTaskId++,
          section: currentSection3,
          type: currentSection3,
          task: period,
          score: length2 ? length2 : 0,
          //if event is defined, then add it the events array
          events: event3 ? [event3] : []
        };
        rawTasks3.push(rawTask);
      }, "addTask");
      addEvent = /* @__PURE__ */ __name(function(event3) {
        const currentTask = rawTasks3.find((task) => task.id === currentTaskId - 1);
        currentTask.events.push(event3);
      }, "addEvent");
      addTaskOrg3 = /* @__PURE__ */ __name(function(descr) {
        const newTask = {
          section: currentSection3,
          type: currentSection3,
          description: descr,
          task: descr,
          classes: []
        };
        tasks3.push(newTask);
      }, "addTaskOrg");
      compileTasks3 = /* @__PURE__ */ __name(function() {
        const compileTask = /* @__PURE__ */ __name(function(pos) {
          return rawTasks3[pos].processed;
        }, "compileTask");
        let allProcessed = true;
        for (const [i2, rawTask] of rawTasks3.entries()) {
          compileTask(i2);
          allProcessed = allProcessed && rawTask.processed;
        }
        return allProcessed;
      }, "compileTasks");
      timelineDb_default = {
        clear: clear14,
        getCommonDb: getCommonDb2,
        getDirection: getDirection2,
        setDirection: setDirection2,
        addSection: addSection4,
        getSections: getSections4,
        getTasks: getTasks3,
        addTask: addTask3,
        addTaskOrg: addTaskOrg3,
        addEvent
      };
    }
  });

  // src/diagrams/timeline/svgDraw.js
  function wrap2(text4, width3) {
    text4.each(function() {
      var text5 = select_default2(this), words = text5.text().split(/(\s+|<br>)/).reverse(), word, line2 = [], lineHeight = 1.1, y6 = text5.attr("y"), dy = parseFloat(text5.attr("dy")), tspan = text5.text(null).append("tspan").attr("x", 0).attr("y", y6).attr("dy", dy + "em");
      for (let j3 = 0; j3 < words.length; j3++) {
        word = words[words.length - 1 - j3];
        line2.push(word);
        tspan.text(line2.join(" ").trim());
        if (tspan.node().getComputedTextLength() > width3 || word === "<br>") {
          line2.pop();
          tspan.text(line2.join(" ").trim());
          if (word === "<br>") {
            line2 = [""];
          } else {
            line2 = [word];
          }
          tspan = text5.append("tspan").attr("x", 0).attr("y", y6).attr("dy", lineHeight + "em").text(word);
        }
      }
    });
  }
  var nodeCount, drawRect6, drawFace2, drawCircle2, drawText5, drawLabel3, drawSection2, taskCount2, drawTask2, drawBackgroundRect4, getTextObj4, getNoteRect3, _drawTextCandidateFunc4, initGraphics2, drawNode, getVirtualNodeHeight, defaultBkg, svgDraw_default4;
  var init_svgDraw4 = __esm({
    "src/diagrams/timeline/svgDraw.js"() {
      "use strict";
      init_src32();
      nodeCount = 0;
      drawRect6 = /* @__PURE__ */ __name(function(elem, rectData) {
        const rectElem = elem.append("rect");
        rectElem.attr("x", rectData.x);
        rectElem.attr("y", rectData.y);
        rectElem.attr("fill", rectData.fill);
        rectElem.attr("stroke", rectData.stroke);
        rectElem.attr("width", rectData.width);
        rectElem.attr("height", rectData.height);
        rectElem.attr("rx", rectData.rx);
        rectElem.attr("ry", rectData.ry);
        if (rectData.class !== void 0) {
          rectElem.attr("class", rectData.class);
        }
        return rectElem;
      }, "drawRect");
      drawFace2 = /* @__PURE__ */ __name(function(element3, faceData) {
        const radius2 = 15;
        const circleElement = element3.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius2).attr("stroke-width", 2).attr("overflow", "visible");
        const face = element3.append("g");
        face.append("circle").attr("cx", faceData.cx - radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
        face.append("circle").attr("cx", faceData.cx + radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
        function smile(face2) {
          const arc = arc_default().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2);
          face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")");
        }
        __name(smile, "smile");
        function sad(face2) {
          const arc = arc_default().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2);
          face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")");
        }
        __name(sad, "sad");
        function ambivalent(face2) {
          face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666");
        }
        __name(ambivalent, "ambivalent");
        if (faceData.score > 3) {
          smile(face);
        } else if (faceData.score < 3) {
          sad(face);
        } else {
          ambivalent(face);
        }
        return circleElement;
      }, "drawFace");
      drawCircle2 = /* @__PURE__ */ __name(function(element3, circleData) {
        const circleElement = element3.append("circle");
        circleElement.attr("cx", circleData.cx);
        circleElement.attr("cy", circleData.cy);
        circleElement.attr("class", "actor-" + circleData.pos);
        circleElement.attr("fill", circleData.fill);
        circleElement.attr("stroke", circleData.stroke);
        circleElement.attr("r", circleData.r);
        if (circleElement.class !== void 0) {
          circleElement.attr("class", circleElement.class);
        }
        if (circleData.title !== void 0) {
          circleElement.append("title").text(circleData.title);
        }
        return circleElement;
      }, "drawCircle");
      drawText5 = /* @__PURE__ */ __name(function(elem, textData) {
        const nText = textData.text.replace(/<br\s*\/?>/gi, " ");
        const textElem = elem.append("text");
        textElem.attr("x", textData.x);
        textElem.attr("y", textData.y);
        textElem.attr("class", "legend");
        textElem.style("text-anchor", textData.anchor);
        if (textData.class !== void 0) {
          textElem.attr("class", textData.class);
        }
        const span = textElem.append("tspan");
        span.attr("x", textData.x + textData.textMargin * 2);
        span.text(nText);
        return textElem;
      }, "drawText");
      drawLabel3 = /* @__PURE__ */ __name(function(elem, txtObject) {
        function genPoints(x5, y6, width3, height2, cut) {
          return x5 + "," + y6 + " " + (x5 + width3) + "," + y6 + " " + (x5 + width3) + "," + (y6 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y6 + height2) + " " + x5 + "," + (y6 + height2);
        }
        __name(genPoints, "genPoints");
        const polygon2 = elem.append("polygon");
        polygon2.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7));
        polygon2.attr("class", "labelBox");
        txtObject.y = txtObject.y + txtObject.labelMargin;
        txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;
        drawText5(elem, txtObject);
      }, "drawLabel");
      drawSection2 = /* @__PURE__ */ __name(function(elem, section, conf5) {
        const g2 = elem.append("g");
        const rect3 = getNoteRect3();
        rect3.x = section.x;
        rect3.y = section.y;
        rect3.fill = section.fill;
        rect3.width = conf5.width;
        rect3.height = conf5.height;
        rect3.class = "journey-section section-type-" + section.num;
        rect3.rx = 3;
        rect3.ry = 3;
        drawRect6(g2, rect3);
        _drawTextCandidateFunc4(conf5)(
          section.text,
          g2,
          rect3.x,
          rect3.y,
          rect3.width,
          rect3.height,
          { class: "journey-section section-type-" + section.num },
          conf5,
          section.colour
        );
      }, "drawSection");
      taskCount2 = -1;
      drawTask2 = /* @__PURE__ */ __name(function(elem, task, conf5, diagramId3) {
        const center4 = task.x + conf5.width / 2;
        const g2 = elem.append("g");
        taskCount2++;
        const maxHeight = 300 + 5 * 30;
        g2.append("line").attr("id", diagramId3 + "-task" + taskCount2).attr("x1", center4).attr("y1", task.y).attr("x2", center4).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666");
        drawFace2(g2, {
          cx: center4,
          cy: 300 + (5 - task.score) * 30,
          score: task.score
        });
        const rect3 = getNoteRect3();
        rect3.x = task.x;
        rect3.y = task.y;
        rect3.fill = task.fill;
        rect3.width = conf5.width;
        rect3.height = conf5.height;
        rect3.class = "task task-type-" + task.num;
        rect3.rx = 3;
        rect3.ry = 3;
        drawRect6(g2, rect3);
        _drawTextCandidateFunc4(conf5)(
          task.task,
          g2,
          rect3.x,
          rect3.y,
          rect3.width,
          rect3.height,
          { class: "task" },
          conf5,
          task.colour
        );
      }, "drawTask");
      drawBackgroundRect4 = /* @__PURE__ */ __name(function(elem, bounds4) {
        const rectElem = drawRect6(elem, {
          x: bounds4.startx,
          y: bounds4.starty,
          width: bounds4.stopx - bounds4.startx,
          height: bounds4.stopy - bounds4.starty,
          fill: bounds4.fill,
          class: "rect"
        });
        rectElem.lower();
      }, "drawBackgroundRect");
      getTextObj4 = /* @__PURE__ */ __name(function() {
        return {
          x: 0,
          y: 0,
          fill: void 0,
          "text-anchor": "start",
          width: 100,
          height: 100,
          textMargin: 0,
          rx: 0,
          ry: 0
        };
      }, "getTextObj");
      getNoteRect3 = /* @__PURE__ */ __name(function() {
        return {
          x: 0,
          y: 0,
          width: 100,
          anchor: "start",
          height: 100,
          rx: 0,
          ry: 0
        };
      }, "getNoteRect");
      _drawTextCandidateFunc4 = /* @__PURE__ */ (function() {
        function byText(content, g2, x5, y6, width3, height2, textAttrs, colour) {
          const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6 + height2 / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byText, "byText");
        function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5, colour) {
          const { taskFontSize, taskFontFamily } = conf5;
          const lines = content.split(/<br\s*\/?>/gi);
          for (let i2 = 0; i2 < lines.length; i2++) {
            const dy = i2 * taskFontSize - taskFontSize * (lines.length - 1) / 2;
            const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily);
            text4.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]);
            text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
            _setTextAttrs(text4, textAttrs);
          }
        }
        __name(byTspan, "byTspan");
        function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) {
          const body = g2.append("switch");
          const f2 = body.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2).attr("position", "fixed");
          const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
          text4.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
          byTspan(content, body, x5, y6, width3, height2, textAttrs, conf5);
          _setTextAttrs(text4, textAttrs);
        }
        __name(byFo, "byFo");
        function _setTextAttrs(toText, fromTextAttrsDict) {
          for (const key in fromTextAttrsDict) {
            if (key in fromTextAttrsDict) {
              toText.attr(key, fromTextAttrsDict[key]);
            }
          }
        }
        __name(_setTextAttrs, "_setTextAttrs");
        return function(conf5) {
          return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan;
        };
      })();
      initGraphics2 = /* @__PURE__ */ __name(function(graphics, id41) {
        nodeCount = 0;
        taskCount2 = -1;
        graphics.append("defs").append("marker").attr("id", id41 + "-arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z");
      }, "initGraphics");
      __name(wrap2, "wrap");
      drawNode = /* @__PURE__ */ __name(function(elem, node2, fullSection, conf5, diagramId3, isEvent = false) {
        const { theme, look } = conf5;
        const isReduxTheme = theme?.includes("redux");
        const maxSections = conf5?.themeVariables?.THEME_COLOR_LIMIT ?? 12;
        const section = fullSection % maxSections - 1;
        const nodeElem = elem.append("g");
        node2.section = section;
        nodeElem.attr(
          "class",
          (node2.class ? node2.class + " " : "") + "timeline-node " + ("section-" + section)
        );
        const bkgElem = nodeElem.append("g");
        const textElem = nodeElem.append("g");
        const txt = textElem.append("text").text(node2.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap2, node2.width);
        const bbox = txt.node().getBBox();
        const fontSize = conf5.fontSize?.replace ? conf5.fontSize.replace("px", "") : conf5.fontSize;
        node2.height = bbox.height + fontSize * 1.1 * 0.5 + node2.padding;
        node2.height = Math.max(node2.height, node2.maxHeight);
        node2.width = node2.width + 2 * node2.padding;
        textElem.attr("transform", "translate(" + node2.width / 2 + ", " + node2.padding / 2 + ")");
        if (isReduxTheme) {
          textElem.attr(
            "transform",
            `translate(${node2.width / 2}, ${isEvent ? node2.padding / 2 + 3 : node2.padding})`
          );
        }
        defaultBkg(bkgElem, node2, section, diagramId3, conf5);
        if (look === "neo") {
          nodeElem.attr("data-look", `neo`);
          if (isReduxTheme) {
            const isDark2 = theme.includes("dark");
            const rootSvgNode = elem.node()?.ownerSVGElement ?? elem.node();
            const rootSvg = select_default2(rootSvgNode);
            const svgId = rootSvg.attr("id") ?? "";
            const dropShadowId = svgId ? `${svgId}-drop-shadow` : "drop-shadow";
            if (rootSvg.select(`#${dropShadowId}`).empty()) {
              const existingDefs = rootSvg.select("defs");
              const defsEl = existingDefs.empty() ? rootSvg.append("defs") : existingDefs;
              defsEl.append("filter").attr("id", dropShadowId).attr("height", "130%").attr("width", "130%").append("feDropShadow").attr("dx", "4").attr("dy", "4").attr("stdDeviation", 0).attr("flood-opacity", isDark2 ? "0.2" : "0.06").attr("flood-color", isDark2 ? "#FFFFFF" : "#000000");
            }
          }
        }
        return node2;
      }, "drawNode");
      getVirtualNodeHeight = /* @__PURE__ */ __name(function(elem, node2, conf5) {
        const textElem = elem.append("g");
        const txt = textElem.append("text").text(node2.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap2, node2.width);
        const bbox = txt.node().getBBox();
        const fontSize = conf5.fontSize?.replace ? conf5.fontSize.replace("px", "") : conf5.fontSize;
        textElem.remove();
        return bbox.height + fontSize * 1.1 * 0.5 + node2.padding;
      }, "getVirtualNodeHeight");
      defaultBkg = /* @__PURE__ */ __name(function(elem, node2, section, diagramId3, config3) {
        const { theme } = config3;
        const r2 = theme?.includes("redux") ? 0 : 5;
        const rd = 5;
        const d3 = r2 > 0 ? `M0 ${node2.height - rd} v${-node2.height + 2 * rd} q0,-${r2},${r2},-${r2} h${node2.width - 2 * rd} q${r2},0,${r2},${r2} v${node2.height - rd} H0 Z` : `M0 ${node2.height - rd} v${-(node2.height - rd)} h${node2.width} v${node2.height} H0 Z`;
        elem.append("path").attr("id", diagramId3 + "-node-" + nodeCount++).attr("class", "node-bkg node-" + node2.type).attr("d", d3);
        if (!theme?.includes("redux")) {
          elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node2.height).attr("x2", node2.width).attr("y2", node2.height);
        }
      }, "defaultBkg");
      svgDraw_default4 = {
        drawRect: drawRect6,
        drawCircle: drawCircle2,
        drawSection: drawSection2,
        drawText: drawText5,
        drawLabel: drawLabel3,
        drawTask: drawTask2,
        drawBackgroundRect: drawBackgroundRect4,
        getTextObj: getTextObj4,
        getNoteRect: getNoteRect3,
        initGraphics: initGraphics2,
        drawNode,
        getVirtualNodeHeight
      };
    }
  });

  // src/diagrams/timeline/timelineRenderer.ts
  var draw17, drawTasks2, drawEvents, timelineRenderer_default;
  var init_timelineRenderer = __esm({
    "src/diagrams/timeline/timelineRenderer.ts"() {
      "use strict";
      init_src32();
      init_svgDraw4();
      init_logger();
      init_diagramAPI();
      init_setupGraphViewbox();
      draw17 = /* @__PURE__ */ __name(function(text4, id41, version3, diagObj) {
        const conf5 = getConfig2();
        const { look, theme, themeVariables } = conf5;
        const { useGradient, gradientStart, gradientStop } = themeVariables;
        const LEFT_MARGIN = conf5.timeline?.leftMargin ?? 50;
        log.debug("timeline", diagObj.db);
        const securityLevel = conf5.securityLevel;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const svg2 = root4.select("#" + id41);
        svg2.append("g");
        const tasks4 = diagObj.db.getTasks();
        const title2 = diagObj.db.getCommonDb().getDiagramTitle();
        log.debug("task", tasks4);
        svgDraw_default4.initGraphics(svg2, id41);
        const sections6 = diagObj.db.getSections();
        log.debug("sections", sections6);
        let maxSectionHeight = 0;
        let maxTaskHeight = 0;
        let depthY = 0;
        let sectionBeginY = 0;
        let masterX = 50 + LEFT_MARGIN;
        let masterY = 50;
        sectionBeginY = 50;
        let sectionNumber = 0;
        let hasSections = true;
        sections6.forEach(function(section) {
          const sectionNode = {
            number: sectionNumber,
            descr: section,
            section: sectionNumber,
            width: 150,
            padding: 20,
            maxHeight: maxSectionHeight
          };
          const sectionHeight = svgDraw_default4.getVirtualNodeHeight(svg2, sectionNode, conf5);
          log.debug("sectionHeight before draw", sectionHeight);
          maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20);
        });
        let maxEventCount = 0;
        let maxEventLineLength = 0;
        log.debug("tasks.length", tasks4.length);
        for (const [i2, task] of tasks4.entries()) {
          const taskNode = {
            number: i2,
            descr: task,
            section: task.section,
            width: 150,
            padding: 20,
            maxHeight: maxTaskHeight
          };
          const taskHeight = svgDraw_default4.getVirtualNodeHeight(svg2, taskNode, conf5);
          log.debug("taskHeight before draw", taskHeight);
          maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20);
          maxEventCount = Math.max(maxEventCount, task.events.length);
          let maxEventLineLengthTemp = 0;
          for (const event3 of task.events) {
            const eventNode = {
              descr: event3,
              section: task.section,
              number: task.section,
              width: 150,
              padding: 20,
              maxHeight: 50
            };
            maxEventLineLengthTemp += svgDraw_default4.getVirtualNodeHeight(svg2, eventNode, conf5);
          }
          if (task.events.length > 0) {
            maxEventLineLengthTemp += (task.events.length - 1) * 10;
          }
          maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp);
        }
        log.debug("maxSectionHeight before draw", maxSectionHeight);
        log.debug("maxTaskHeight before draw", maxTaskHeight);
        if (sections6 && sections6.length > 0) {
          sections6.forEach((section) => {
            const tasksForSection = tasks4.filter((task) => task.section === section);
            const sectionNode = {
              number: sectionNumber,
              descr: section,
              section: sectionNumber,
              width: 200 * Math.max(tasksForSection.length, 1) - 50,
              padding: 20,
              maxHeight: maxSectionHeight
            };
            log.debug("sectionNode", sectionNode);
            const sectionNodeWrapper = svg2.append("g");
            const node2 = svgDraw_default4.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf5, id41);
            log.debug("sectionNode output", node2);
            sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`);
            masterY += maxSectionHeight + 50;
            if (tasksForSection.length > 0) {
              drawTasks2(
                svg2,
                tasksForSection,
                sectionNumber,
                masterX,
                masterY,
                maxTaskHeight,
                conf5,
                maxEventCount,
                maxEventLineLength,
                maxSectionHeight,
                false,
                id41
              );
            }
            masterX += 200 * Math.max(tasksForSection.length, 1);
            masterY = sectionBeginY;
            sectionNumber++;
          });
        } else {
          hasSections = false;
          drawTasks2(
            svg2,
            tasks4,
            sectionNumber,
            masterX,
            masterY,
            maxTaskHeight,
            conf5,
            maxEventCount,
            maxEventLineLength,
            maxSectionHeight,
            true,
            id41
          );
        }
        const box = svg2.node().getBBox();
        log.debug("bounds", box);
        if (title2) {
          svg2.append("text").text(title2).attr("x", look === "neo" ? box.x * 2 + LEFT_MARGIN : box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20);
        }
        depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100;
        const lineWrapper = svg2.append("g").attr("class", "lineWrapper");
        lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", `url(#${id41}-arrowhead)`);
        if (look === "neo" && useGradient && theme !== "neutral") {
          const existingDefs = svg2.select("defs");
          const defsEl = existingDefs.empty() ? svg2.append("defs") : existingDefs;
          const gradient = defsEl.append("linearGradient").attr("id", svg2.attr("id") + "-gradient").attr("gradientUnits", "objectBoundingBox").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%");
          gradient.append("stop").attr("offset", "0%").attr("stop-color", gradientStart).attr("stop-opacity", 1);
          gradient.append("stop").attr("offset", "100%").attr("stop-color", gradientStop).attr("stop-opacity", 1);
        }
        setupGraphViewbox(
          void 0,
          svg2,
          conf5.timeline?.padding ?? 50,
          conf5.timeline?.useMaxWidth ?? false
        );
      }, "draw");
      drawTasks2 = /* @__PURE__ */ __name(function(diagram38, tasks4, sectionColor, masterX, masterY, maxTaskHeight, conf5, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections, diagramId3) {
        for (const task of tasks4) {
          const taskNode = {
            descr: task.task,
            section: sectionColor,
            number: sectionColor,
            width: 150,
            padding: 20,
            maxHeight: maxTaskHeight
          };
          log.debug("taskNode", taskNode);
          const taskWrapper = diagram38.append("g").attr("class", "taskWrapper");
          const node2 = svgDraw_default4.drawNode(taskWrapper, taskNode, sectionColor, conf5, diagramId3);
          const taskHeight = node2.height;
          log.debug("taskHeight after draw", taskHeight);
          taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`);
          maxTaskHeight = Math.max(maxTaskHeight, taskHeight);
          if (task.events) {
            const lineWrapper = diagram38.append("g").attr("class", "lineWrapper");
            let lineLength = maxTaskHeight;
            masterY += 100;
            lineLength = lineLength + drawEvents(diagram38, task.events, sectionColor, masterX, masterY, conf5, diagramId3);
            masterY -= 100;
            lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr("y2", masterY + maxTaskHeight + 100 + maxEventLineLength + 100).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", `url(#${diagramId3}-arrowhead)`).attr("stroke-dasharray", "5,5");
          }
          masterX = masterX + 200;
          if (isWithoutSections && !conf5.timeline?.disableMulticolor) {
            sectionColor++;
          }
        }
        masterY = masterY - 10;
      }, "drawTasks");
      drawEvents = /* @__PURE__ */ __name(function(diagram38, events, sectionColor, masterX, masterY, conf5, diagramId3) {
        let maxEventHeight = 0;
        const eventBeginY = masterY;
        masterY = masterY + 100;
        for (const event3 of events) {
          const eventNode = {
            descr: event3,
            section: sectionColor,
            number: sectionColor,
            width: 150,
            padding: 20,
            maxHeight: 50
          };
          log.debug("eventNode", eventNode);
          const eventWrapper = diagram38.append("g").attr("class", "eventWrapper");
          const node2 = svgDraw_default4.drawNode(eventWrapper, eventNode, sectionColor, conf5, diagramId3, true);
          const eventHeight = node2.height;
          maxEventHeight = maxEventHeight + eventHeight;
          eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`);
          masterY = masterY + 10 + eventHeight;
        }
        masterY = eventBeginY;
        return maxEventHeight;
      }, "drawEvents");
      timelineRenderer_default = {
        setConf: /* @__PURE__ */ __name(() => {
        }, "setConf"),
        draw: draw17
      };
    }
  });

  // src/diagrams/timeline/timelineRendererVertical.ts
  var NODE_WIDTH, NODE_PADDING2, NODE_TOTAL_WIDTH, EVENT_WIDTH, EVENT_TOTAL_WIDTH, EVENT_SPACING, EVENT_VERTICAL_GAP, SECTION_TASK_GAP, TASK_AXIS_GAP, TASK_VERTICAL_GAP, EVENT_AXIS_GAP, draw18, drawTasks3, drawEvents2, timelineRendererVertical_default;
  var init_timelineRendererVertical = __esm({
    "src/diagrams/timeline/timelineRendererVertical.ts"() {
      "use strict";
      init_svgDraw4();
      init_logger();
      init_diagramAPI();
      init_setupGraphViewbox();
      init_selectSvgElement();
      init_utils2();
      NODE_WIDTH = 200;
      NODE_PADDING2 = 5;
      NODE_TOTAL_WIDTH = NODE_WIDTH + NODE_PADDING2 * 2;
      EVENT_WIDTH = NODE_WIDTH + 100;
      EVENT_TOTAL_WIDTH = EVENT_WIDTH + NODE_PADDING2 * 2;
      EVENT_SPACING = 10;
      EVENT_VERTICAL_GAP = 0;
      SECTION_TASK_GAP = 20;
      TASK_AXIS_GAP = 20;
      TASK_VERTICAL_GAP = 30;
      EVENT_AXIS_GAP = 50;
      draw18 = /* @__PURE__ */ __name(function(text4, id41, version3, diagObj) {
        const conf5 = getConfig2();
        const LEFT_MARGIN = conf5.timeline?.leftMargin ?? 50;
        log.debug("timeline", diagObj.db);
        const svg2 = selectSvgElement(id41);
        svg2.append("g");
        const tasks4 = diagObj.db.getTasks();
        const title2 = diagObj.db.getCommonDb().getDiagramTitle();
        log.debug("task", tasks4);
        svgDraw_default4.initGraphics(svg2);
        const sections6 = diagObj.db.getSections();
        log.debug("sections", sections6);
        let maxSectionHeight = 0;
        let maxTaskHeight = 0;
        const masterX = 50 + LEFT_MARGIN;
        let masterY = 50;
        const contentTopY = masterY;
        const sectionBeginX = masterX;
        const leftWidth = NODE_TOTAL_WIDTH + TASK_AXIS_GAP;
        const rightWidth = EVENT_TOTAL_WIDTH + EVENT_AXIS_GAP;
        const axisX = sectionBeginX + leftWidth;
        let sectionNumber = 0;
        const hasSections = sections6 && sections6.length > 0;
        const timelineX = hasSections ? axisX : masterX + leftWidth;
        const sectionWidth = Math.max(50, leftWidth + rightWidth - NODE_PADDING2 * 2);
        sections6.forEach(function(section) {
          const sectionNode = {
            number: sectionNumber,
            descr: section,
            section: sectionNumber,
            width: sectionWidth,
            padding: NODE_PADDING2,
            maxHeight: maxSectionHeight
          };
          const sectionHeight = svgDraw_default4.getVirtualNodeHeight(svg2, sectionNode, conf5);
          log.debug("sectionHeight before draw", sectionHeight);
          maxSectionHeight = Math.max(maxSectionHeight, sectionHeight);
        });
        let maxEventStackHeight = 0;
        log.debug("tasks.length", tasks4.length);
        for (const [i2, task] of tasks4.entries()) {
          const taskNode = {
            number: i2,
            descr: task,
            section: task.section,
            width: NODE_WIDTH,
            padding: NODE_PADDING2,
            maxHeight: maxTaskHeight
          };
          const taskHeight = svgDraw_default4.getVirtualNodeHeight(svg2, taskNode, conf5);
          log.debug("taskHeight before draw", taskHeight);
          maxTaskHeight = Math.max(maxTaskHeight, taskHeight);
          let maxEventStackHeightTemp = 0;
          for (const event3 of task.events) {
            const eventNode = {
              descr: event3,
              section: task.section,
              number: task.section,
              width: EVENT_WIDTH,
              padding: NODE_PADDING2,
              maxHeight: 50
            };
            maxEventStackHeightTemp += svgDraw_default4.getVirtualNodeHeight(svg2, eventNode, conf5);
          }
          if (task.events.length > 0) {
            maxEventStackHeightTemp += (task.events.length - 1) * EVENT_SPACING;
          }
          maxEventStackHeight = Math.max(maxEventStackHeight, maxEventStackHeightTemp) + EVENT_VERTICAL_GAP;
        }
        log.debug("maxSectionHeight before draw", maxSectionHeight);
        log.debug("maxTaskHeight before draw", maxTaskHeight);
        const taskBlockHeight = Math.max(maxTaskHeight, maxEventStackHeight);
        const taskSpacing = taskBlockHeight + TASK_VERTICAL_GAP;
        if (hasSections) {
          sections6.forEach((section) => {
            const tasksForSection = tasks4.filter((task) => task.section === section);
            const sectionNode = {
              number: sectionNumber,
              descr: section,
              section: sectionNumber,
              width: sectionWidth,
              padding: NODE_PADDING2,
              maxHeight: maxSectionHeight
            };
            log.debug("sectionNode", sectionNode);
            const sectionNodeWrapper = svg2.append("g");
            const node2 = svgDraw_default4.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf5);
            log.debug("sectionNode output", node2);
            const sectionX = timelineX - leftWidth;
            sectionNodeWrapper.attr("transform", `translate(${sectionX}, ${masterY})`);
            const taskStartY = masterY + node2.height + SECTION_TASK_GAP;
            if (tasksForSection.length > 0) {
              drawTasks3(
                svg2,
                tasksForSection,
                sectionNumber,
                timelineX,
                taskStartY,
                maxTaskHeight,
                conf5,
                taskSpacing,
                false
              );
            }
            const taskCount3 = tasksForSection.length;
            const sectionHeight = node2.height + SECTION_TASK_GAP + taskSpacing * Math.max(taskCount3, 1) - (taskCount3 > 0 ? TASK_VERTICAL_GAP * 2 : 0);
            masterY += sectionHeight;
            sectionNumber++;
          });
        } else {
          drawTasks3(
            svg2,
            tasks4,
            sectionNumber,
            timelineX,
            masterY,
            maxTaskHeight,
            conf5,
            taskSpacing,
            true
          );
        }
        let box = svg2.node()?.getBBox();
        if (!box) {
          throw new Error("bbox not found");
        }
        log.debug("bounds", box);
        if (title2) {
          svg2.append("text").text(title2).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20);
          box = svg2.node()?.getBBox();
          if (!box) {
            throw new Error("bbox not found");
          }
          log.debug("bounds after title", box);
        }
        const [fontSize] = parseFontSize(conf5.fontSize);
        const arrowTopOffset = (fontSize ?? 16) * 2;
        const arrowBottomPadding = (fontSize ?? 16) * 0.5 + 20;
        const lineWrapper = svg2.append("g").attr("class", "lineWrapper");
        lineWrapper.append("line").attr("x1", timelineX).attr("y1", contentTopY - arrowTopOffset).attr("x2", timelineX).attr("y2", box.y + box.height + arrowBottomPadding).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)");
        lineWrapper.lower();
        setupGraphViewbox(
          void 0,
          svg2,
          conf5.timeline?.padding ?? 50,
          conf5.timeline?.useMaxWidth ?? false
        );
      }, "draw");
      drawTasks3 = /* @__PURE__ */ __name(function(diagram38, tasks4, sectionColor, timelineX, masterY, maxTaskHeight, conf5, taskSpacing, isWithoutSections) {
        for (const task of tasks4) {
          const taskNode = {
            descr: task.task,
            section: sectionColor,
            number: sectionColor,
            width: NODE_WIDTH,
            padding: NODE_PADDING2,
            maxHeight: maxTaskHeight
          };
          log.debug("taskNode", taskNode);
          const taskWrapper = diagram38.append("g").attr("class", "taskWrapper");
          const node2 = svgDraw_default4.drawNode(taskWrapper, taskNode, sectionColor, conf5);
          const taskHeight = node2.height;
          log.debug("taskHeight after draw", taskHeight);
          const taskX = timelineX - TASK_AXIS_GAP - node2.width;
          taskWrapper.attr("transform", `translate(${taskX}, ${masterY})`);
          maxTaskHeight = Math.max(maxTaskHeight, taskHeight);
          if (task.events && task.events.length > 0) {
            const eventsStartY = masterY;
            const eventsX = timelineX + EVENT_AXIS_GAP;
            drawEvents2(diagram38, task.events, sectionColor, timelineX, eventsX, eventsStartY, conf5);
          }
          masterY = masterY + taskSpacing;
          if (isWithoutSections && !conf5.timeline?.disableMulticolor) {
            sectionColor++;
          }
        }
      }, "drawTasks");
      drawEvents2 = /* @__PURE__ */ __name(function(diagram38, events, sectionColor, axisX, eventsX, startY2, conf5) {
        let currentY = startY2;
        for (const event3 of events) {
          const eventNode = {
            descr: event3,
            section: sectionColor,
            number: sectionColor,
            width: EVENT_WIDTH,
            padding: NODE_PADDING2,
            maxHeight: 0
          };
          log.debug("eventNode", eventNode);
          const eventWrapper = diagram38.append("g").attr("class", "eventWrapper");
          const node2 = svgDraw_default4.drawNode(eventWrapper, eventNode, sectionColor, conf5);
          const eventHeight = node2.height;
          eventWrapper.attr("transform", `translate(${eventsX}, ${currentY})`);
          const lineWrapper = diagram38.append("g").attr("class", "lineWrapper");
          const lineY = currentY + eventHeight / 2;
          lineWrapper.append("line").attr("x1", axisX).attr("y1", lineY).attr("x2", eventsX).attr("y2", lineY).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5");
          currentY = currentY + eventHeight + EVENT_SPACING;
        }
        return currentY - startY2;
      }, "drawEvents");
      timelineRendererVertical_default = {
        setConf: /* @__PURE__ */ __name(() => {
        }, "setConf"),
        draw: draw18
      };
    }
  });

  // src/diagrams/timeline/styles.js
  var genReduxSections, genSections, getStyles14, styles_default13;
  var init_styles13 = __esm({
    "src/diagrams/timeline/styles.js"() {
      "use strict";
      init_dist();
      init_config();
      genReduxSections = /* @__PURE__ */ __name((options2) => {
        const { theme } = getConfig();
        const isDarkTheme = theme?.includes("dark");
        const isColorTheme = theme?.includes("color");
        const rawSvgId = options2.svgId?.replace(/^#/, "") ?? "";
        const scopedDropShadow = rawSvgId ? `url(#${rawSvgId}-drop-shadow)` : options2.dropShadow ?? "none";
        let sections6 = "";
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          const sw = `${17 - 3 * i2}`;
          const color2 = isColorTheme ? options2.borderColorArray[i2] : options2.mainBkg;
          const stroke = isColorTheme ? options2.borderColorArray[i2] : options2.nodeBorder;
          sections6 += `
    .section-${i2 - 1} rect,
    .section-${i2 - 1} path,
    .section-${i2 - 1} circle {
      fill: ${isDarkTheme && isColorTheme ? options2.mainBkg : color2};
      stroke: ${stroke};
      stroke-width: ${options2.strokeWidth};
      filter: ${scopedDropShadow};
    }

    .section-${i2 - 1} text {
      fill: ${options2.nodeBorder};
      font-weight: ${options2.fontWeight}
    }

    .node-icon-${i2 - 1} {
      font-size: 40px;
      color: ${options2["cScaleLabel" + i2]};
    }

    .section-edge-${i2 - 1} {
      stroke: ${options2["cScale" + i2]};
    }

    .edge-depth-${i2 - 1} {
      stroke-width: ${sw};
    }

    .section-${i2 - 1} line {
      stroke: ${options2["cScaleInv" + i2]};
      stroke-width: 3;
    }

    .lineWrapper line {
      stroke: ${options2.nodeBorder};
      stroke-width:${options2.strokeWidth}
    }

    .disabled,
    .disabled circle,
    .disabled text {
      fill: ${options2.tertiaryColor ?? "lightgray"};
    }

    .disabled text {
      fill: ${options2.clusterBorder ?? "#efefef"};
    }
    `;
        }
        return sections6;
      }, "genReduxSections");
      genSections = /* @__PURE__ */ __name((options2) => {
        let sections6 = "";
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          options2["lineColor" + i2] = options2["lineColor" + i2] || options2["cScaleInv" + i2];
          if (is_dark_default(options2["lineColor" + i2])) {
            options2["lineColor" + i2] = lighten_default(options2["lineColor" + i2], 20);
          } else {
            options2["lineColor" + i2] = darken_default(options2["lineColor" + i2], 20);
          }
        }
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          const sw = "" + (17 - 3 * i2);
          sections6 += `
    .section-${i2 - 1} rect, .section-${i2 - 1} path, .section-${i2 - 1} circle, .section-${i2 - 1} path  {
      fill: ${options2["cScale" + i2]};
    }
    .section-${i2 - 1} text {
     fill: ${options2["cScaleLabel" + i2]};
    }
    .node-icon-${i2 - 1} {
      font-size: 40px;
      color: ${options2["cScaleLabel" + i2]};
    }
    .section-edge-${i2 - 1}{
      stroke: ${options2["cScale" + i2]};
    }
    .edge-depth-${i2 - 1}{
      stroke-width: ${sw};
    }
    .section-${i2 - 1} line {
      stroke: ${options2["cScaleInv" + i2]} ;
      stroke-width: 3;
    }

    .lineWrapper line{
      stroke: ${options2["cScaleLabel" + i2]} ;
    }

    .disabled, .disabled circle, .disabled text {
      fill: ${options2.tertiaryColor ?? "lightgray"};
    }
    .disabled text {
      fill: ${options2.clusterBorder ?? "#efefef"};
    }
    `;
        }
        return sections6;
      }, "genSections");
      getStyles14 = /* @__PURE__ */ __name((options2) => {
        const { theme } = getConfig();
        const isReduxTheme = theme?.includes("redux");
        const isNeutralTheme = theme === "neutral";
        const rawSvgId = options2.svgId?.replace(/^#/, "") ?? "";
        let gradientSections = "";
        if (options2.useGradient && rawSvgId && options2.THEME_COLOR_LIMIT && !isNeutralTheme) {
          for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
            gradientSections += `
      .section-${i2 - 1}[data-look="neo"] rect,
      .section-${i2 - 1}[data-look="neo"] path,
      .section-${i2 - 1}[data-look="neo"] circle {
        fill: ${options2.mainBkg};
        stroke: url(#${rawSvgId}-gradient);
        stroke-width: 2;
      }
      .section-${i2 - 1}[data-look="neo"] line {
        stroke: url(#${rawSvgId}-gradient);
        stroke-width: 2;
      }`;
          }
        }
        return `
  .edge {
    stroke-width: 3;
  }
  ${isReduxTheme ? genReduxSections(options2) : genSections(options2)}
  ${gradientSections}
  .section-root rect, .section-root path, .section-root circle  {
    fill: ${options2.git0};
  }
  .section-root text {
    fill: ${options2.gitBranchLabel0};
  }
  .icon-container {
    height:100%;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .edge {
    fill: none;
  }
  .eventWrapper  {
   filter: brightness(120%);
  }
`;
      }, "getStyles");
      styles_default13 = getStyles14;
    }
  });

  // src/diagrams/timeline/timeline-definition.ts
  var timeline_definition_exports = {};
  __export(timeline_definition_exports, {
    diagram: () => diagram19
  });
  var rendererSelector, diagram19;
  var init_timeline_definition = __esm({
    "src/diagrams/timeline/timeline-definition.ts"() {
      "use strict";
      init_timeline();
      init_timelineDb();
      init_timelineRenderer();
      init_timelineRendererVertical();
      init_styles13();
      rendererSelector = {
        setConf: /* @__PURE__ */ __name(() => {
        }, "setConf"),
        draw: /* @__PURE__ */ __name((text4, id41, version3, diagObj) => {
          const direction2 = diagObj?.db?.getDirection?.() ?? "LR";
          if (direction2 === "TD") {
            return timelineRendererVertical_default.draw(text4, id41, version3, diagObj);
          }
          return timelineRenderer_default.draw(text4, id41, version3, diagObj);
        }, "draw")
      };
      diagram19 = {
        db: timelineDb_exports,
        renderer: rendererSelector,
        parser: timeline_default,
        styles: styles_default13
      };
    }
  });

  // src/diagrams/mindmap/parser/mindmap.jison
  var parser16, mindmap_default;
  var init_mindmap = __esm({
    "src/diagrams/mindmap/parser/mindmap.jison"() {
      "use strict";
      parser16 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" },
          productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 6:
              case 7:
                return yy;
                break;
              case 8:
                yy.getLogger().trace("Stop NL ");
                break;
              case 9:
                yy.getLogger().trace("Stop EOF ");
                break;
              case 11:
                yy.getLogger().trace("Stop NL2 ");
                break;
              case 12:
                yy.getLogger().trace("Stop EOF2 ");
                break;
              case 15:
                yy.getLogger().info("Node: ", $$[$0].id);
                yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type);
                break;
              case 16:
                yy.getLogger().trace("Icon: ", $$[$0]);
                yy.decorateNode({ icon: $$[$0] });
                break;
              case 17:
              case 21:
                yy.decorateNode({ class: $$[$0] });
                break;
              case 18:
                yy.getLogger().trace("SPACELIST");
                break;
              case 19:
                yy.getLogger().trace("Node: ", $$[$0].id);
                yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type);
                break;
              case 20:
                yy.decorateNode({ icon: $$[$0] });
                break;
              case 25:
                yy.getLogger().trace("node found ..", $$[$0 - 2]);
                this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) };
                break;
              case 26:
                this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT };
                break;
              case 27:
                yy.getLogger().trace("node found ..", $$[$0 - 3]);
                this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) };
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o2($V7, [2, 3]), { 1: [2, 2] }, o2($V7, [2, 4]), o2($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o2($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o2($Vb, [2, 18]), o2($Vb, [2, 19]), o2($Vb, [2, 20]), o2($Vb, [2, 21]), o2($Vb, [2, 23]), o2($Vb, [2, 24]), o2($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o2($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o2($Vf, [2, 8]), o2($Vf, [2, 9]), o2($Vf, [2, 10]), o2($Vb, [2, 15]), o2($Vb, [2, 16]), o2($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o2($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o2($Vf, [2, 11]), o2($Vf, [2, 12]), { 21: [1, 37] }, o2($Vb, [2, 25]), o2($Vb, [2, 27])],
          defaultActions: { 2: [2, 1], 6: [2, 2] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  yy.getLogger().trace("Found comment", yy_.yytext);
                  return 6;
                  break;
                case 1:
                  return 8;
                  break;
                case 2:
                  this.begin("CLASS");
                  break;
                case 3:
                  this.popState();
                  return 16;
                  break;
                case 4:
                  this.popState();
                  break;
                case 5:
                  yy.getLogger().trace("Begin icon");
                  this.begin("ICON");
                  break;
                case 6:
                  yy.getLogger().trace("SPACELINE");
                  return 6;
                  break;
                case 7:
                  return 7;
                  break;
                case 8:
                  return 15;
                  break;
                case 9:
                  yy.getLogger().trace("end icon");
                  this.popState();
                  break;
                case 10:
                  yy.getLogger().trace("Exploding node");
                  this.begin("NODE");
                  return 19;
                  break;
                case 11:
                  yy.getLogger().trace("Cloud");
                  this.begin("NODE");
                  return 19;
                  break;
                case 12:
                  yy.getLogger().trace("Explosion Bang");
                  this.begin("NODE");
                  return 19;
                  break;
                case 13:
                  yy.getLogger().trace("Cloud Bang");
                  this.begin("NODE");
                  return 19;
                  break;
                case 14:
                  this.begin("NODE");
                  return 19;
                  break;
                case 15:
                  this.begin("NODE");
                  return 19;
                  break;
                case 16:
                  this.begin("NODE");
                  return 19;
                  break;
                case 17:
                  this.begin("NODE");
                  return 19;
                  break;
                case 18:
                  return 13;
                  break;
                case 19:
                  return 22;
                  break;
                case 20:
                  return 11;
                  break;
                case 21:
                  this.begin("NSTR2");
                  break;
                case 22:
                  return "NODE_DESCR";
                  break;
                case 23:
                  this.popState();
                  break;
                case 24:
                  yy.getLogger().trace("Starting NSTR");
                  this.begin("NSTR");
                  break;
                case 25:
                  yy.getLogger().trace("description:", yy_.yytext);
                  return "NODE_DESCR";
                  break;
                case 26:
                  this.popState();
                  break;
                case 27:
                  this.popState();
                  yy.getLogger().trace("node end ))");
                  return "NODE_DEND";
                  break;
                case 28:
                  this.popState();
                  yy.getLogger().trace("node end )");
                  return "NODE_DEND";
                  break;
                case 29:
                  this.popState();
                  yy.getLogger().trace("node end ...", yy_.yytext);
                  return "NODE_DEND";
                  break;
                case 30:
                  this.popState();
                  yy.getLogger().trace("node end ((");
                  return "NODE_DEND";
                  break;
                case 31:
                  this.popState();
                  yy.getLogger().trace("node end (-");
                  return "NODE_DEND";
                  break;
                case 32:
                  this.popState();
                  yy.getLogger().trace("node end (-");
                  return "NODE_DEND";
                  break;
                case 33:
                  this.popState();
                  yy.getLogger().trace("node end ((");
                  return "NODE_DEND";
                  break;
                case 34:
                  this.popState();
                  yy.getLogger().trace("node end ((");
                  return "NODE_DEND";
                  break;
                case 35:
                  yy.getLogger().trace("Long description:", yy_.yytext);
                  return 20;
                  break;
                case 36:
                  yy.getLogger().trace("Long description:", yy_.yytext);
                  return 20;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i],
            conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR2": { "rules": [22, 23], "inclusive": false }, "NSTR": { "rules": [25, 26], "inclusive": false }, "NODE": { "rules": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser16.parser = parser16;
      mindmap_default = parser16;
    }
  });

  // ../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/stringify.js
  function unsafeStringify(arr, offset = 0) {
    return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
  }
  var byteToHex;
  var init_stringify = __esm({
    "../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/stringify.js"() {
      "use strict";
      byteToHex = [];
      for (let i2 = 0; i2 < 256; ++i2) {
        byteToHex.push((i2 + 256).toString(16).slice(1));
      }
      __name(unsafeStringify, "unsafeStringify");
    }
  });

  // ../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/rng.js
  function rng() {
    return crypto.getRandomValues(rnds8);
  }
  var rnds8;
  var init_rng = __esm({
    "../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/rng.js"() {
      "use strict";
      rnds8 = new Uint8Array(16);
      __name(rng, "rng");
    }
  });

  // ../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/v4.js
  function v4(options2, buf, offset) {
    if (!buf && !options2 && crypto.randomUUID) {
      return crypto.randomUUID();
    }
    return _v4(options2, buf, offset);
  }
  function _v4(options2, buf, offset) {
    options2 = options2 || {};
    const rnds = options2.random ?? options2.rng?.() ?? rng();
    if (rnds.length < 16) {
      throw new Error("Random bytes length must be >= 16");
    }
    rnds[6] = rnds[6] & 15 | 64;
    rnds[8] = rnds[8] & 63 | 128;
    if (buf) {
      offset = offset || 0;
      if (offset < 0 || offset + 16 > buf.length) {
        throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
      }
      for (let i2 = 0; i2 < 16; ++i2) {
        buf[offset + i2] = rnds[i2];
      }
      return buf;
    }
    return unsafeStringify(rnds);
  }
  var v4_default;
  var init_v4 = __esm({
    "../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/v4.js"() {
      "use strict";
      init_rng();
      init_stringify();
      __name(v4, "v4");
      __name(_v4, "_v4");
      v4_default = v4;
    }
  });

  // ../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/index.js
  var init_dist2 = __esm({
    "../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/index.js"() {
      "use strict";
      init_v4();
    }
  });

  // src/diagrams/mindmap/svgDraw.ts
  var MAX_SECTIONS;
  var init_svgDraw5 = __esm({
    "src/diagrams/mindmap/svgDraw.ts"() {
      "use strict";
      init_createText();
      init_utils2();
      MAX_SECTIONS = 12;
    }
  });

  // src/diagrams/mindmap/mindmapDb.ts
  var nodeType, MindmapDB;
  var init_mindmapDb = __esm({
    "src/diagrams/mindmap/mindmapDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_dist2();
      init_common();
      init_logger();
      init_defaultConfig();
      init_config();
      init_svgDraw5();
      nodeType = {
        DEFAULT: 0,
        NO_BORDER: 0,
        ROUNDED_RECT: 1,
        RECT: 2,
        CIRCLE: 3,
        CLOUD: 4,
        BANG: 5,
        HEXAGON: 6
      };
      MindmapDB = class {
        constructor() {
          this.nodes = [];
          this.count = 0;
          this.elements = {};
          this.getLogger = this.getLogger.bind(this);
          this.nodeType = nodeType;
          this.clear();
          this.getType = this.getType.bind(this);
          this.getElementById = this.getElementById.bind(this);
          this.getParent = this.getParent.bind(this);
          this.getMindmap = this.getMindmap.bind(this);
          this.addNode = this.addNode.bind(this);
          this.decorateNode = this.decorateNode.bind(this);
        }
        static {
          __name(this, "MindmapDB");
        }
        clear() {
          this.nodes = [];
          this.count = 0;
          this.elements = {};
          this.baseLevel = void 0;
        }
        getParent(level) {
          for (let i2 = this.nodes.length - 1; i2 >= 0; i2--) {
            if (this.nodes[i2].level < level) {
              return this.nodes[i2];
            }
          }
          return null;
        }
        getMindmap() {
          return this.nodes.length > 0 ? this.nodes[0] : null;
        }
        addNode(level, id41, descr, type3) {
          log.info("addNode", level, id41, descr, type3);
          let isRoot = false;
          if (this.nodes.length === 0) {
            this.baseLevel = level;
            level = 0;
            isRoot = true;
          } else if (this.baseLevel !== void 0) {
            level = level - this.baseLevel;
            isRoot = false;
          }
          const conf5 = getConfig2();
          let padding = conf5.mindmap?.padding ?? defaultConfig_default.mindmap.padding;
          switch (type3) {
            case this.nodeType.ROUNDED_RECT:
            case this.nodeType.RECT:
            case this.nodeType.HEXAGON:
              padding *= 2;
              break;
          }
          const node2 = {
            id: this.count++,
            nodeId: sanitizeText(id41, conf5),
            level,
            descr: sanitizeText(descr, conf5),
            type: type3,
            children: [],
            width: conf5.mindmap?.maxNodeWidth ?? defaultConfig_default.mindmap.maxNodeWidth,
            padding,
            isRoot
          };
          const parent4 = this.getParent(level);
          if (parent4) {
            parent4.children.push(node2);
            this.nodes.push(node2);
          } else {
            if (isRoot) {
              this.nodes.push(node2);
            } else {
              throw new Error(
                `There can be only one root. No parent could be found for ("${node2.descr}")`
              );
            }
          }
        }
        getType(startStr, endStr) {
          log.debug("In get type", startStr, endStr);
          switch (startStr) {
            case "[":
              return this.nodeType.RECT;
            case "(":
              return endStr === ")" ? this.nodeType.ROUNDED_RECT : this.nodeType.CLOUD;
            case "((":
              return this.nodeType.CIRCLE;
            case ")":
              return this.nodeType.CLOUD;
            case "))":
              return this.nodeType.BANG;
            case "{{":
              return this.nodeType.HEXAGON;
            default:
              return this.nodeType.DEFAULT;
          }
        }
        setElementForId(id41, element3) {
          this.elements[id41] = element3;
        }
        getElementById(id41) {
          return this.elements[id41];
        }
        decorateNode(decoration) {
          if (!decoration) {
            return;
          }
          const config3 = getConfig2();
          const node2 = this.nodes[this.nodes.length - 1];
          if (decoration.icon) {
            node2.icon = sanitizeText(decoration.icon, config3);
          }
          if (decoration.class) {
            node2.class = sanitizeText(decoration.class, config3);
          }
        }
        type2Str(type3) {
          switch (type3) {
            case this.nodeType.DEFAULT:
              return "no-border";
            case this.nodeType.RECT:
              return "rect";
            case this.nodeType.ROUNDED_RECT:
              return "rounded-rect";
            case this.nodeType.CIRCLE:
              return "circle";
            case this.nodeType.CLOUD:
              return "cloud";
            case this.nodeType.BANG:
              return "bang";
            case this.nodeType.HEXAGON:
              return "hexgon";
            // cspell: disable-line
            default:
              return "no-border";
          }
        }
        /**
         * Assign section numbers to nodes based on their position relative to root
         * @param node - The mindmap node to process
         * @param sectionNumber - The section number to assign (undefined for root)
         */
        assignSections(node2, sectionNumber) {
          if (node2.level === 0) {
            node2.section = void 0;
          } else {
            node2.section = sectionNumber;
          }
          if (node2.children) {
            for (const [index, child] of node2.children.entries()) {
              const childSectionNumber = node2.level === 0 ? index % (MAX_SECTIONS - 1) : sectionNumber;
              this.assignSections(child, childSectionNumber);
            }
          }
        }
        /**
         * Convert mindmap tree structure to flat array of nodes
         * @param node - The mindmap node to process
         * @param processedNodes - Array to collect processed nodes
         */
        flattenNodes(node2, processedNodes) {
          const conf5 = getConfig2();
          const cssClasses = ["mindmap-node"];
          if (node2.isRoot === true) {
            cssClasses.push("section-root", "section--1");
          } else if (node2.section !== void 0) {
            cssClasses.push(`section-${node2.section}`);
          }
          if (node2.class) {
            cssClasses.push(node2.class);
          }
          const classes3 = cssClasses.join(" ");
          const getShapeFromType = /* @__PURE__ */ __name((type3) => {
            const theme = conf5.theme?.toLowerCase() ?? "";
            const isReduxTheme = theme.includes("redux");
            switch (type3) {
              case nodeType.CIRCLE:
                return "mindmapCircle";
              case nodeType.RECT:
                return "rect";
              case nodeType.ROUNDED_RECT:
                return "rounded";
              case nodeType.CLOUD:
                return "cloud";
              case nodeType.BANG:
                return "bang";
              case nodeType.HEXAGON:
                return "hexagon";
              case nodeType.DEFAULT:
                return isReduxTheme ? "rounded" : "defaultMindmapNode";
              case nodeType.NO_BORDER:
              default:
                return "rect";
            }
          }, "getShapeFromType");
          const processedNode = {
            id: node2.id.toString(),
            domId: "node_" + node2.id.toString(),
            label: node2.descr,
            labelType: "markdown",
            isGroup: false,
            shape: getShapeFromType(node2.type),
            width: node2.width,
            height: node2.height ?? 0,
            padding: node2.padding,
            cssClasses: classes3,
            cssStyles: [],
            look: conf5.look,
            icon: node2.icon,
            x: node2.x,
            y: node2.y,
            // Mindmap-specific properties
            level: node2.level,
            nodeId: node2.nodeId,
            type: node2.type,
            section: node2.section
          };
          processedNodes.push(processedNode);
          if (node2.children) {
            for (const child of node2.children) {
              this.flattenNodes(child, processedNodes);
            }
          }
        }
        /**
         * Generate edges from parent-child relationships in mindmap tree
         * @param node - The mindmap node to process
         * @param edges - Array to collect edges
         */
        generateEdges(node2, edges3) {
          if (!node2.children) {
            return;
          }
          const conf5 = getConfig2();
          for (const child of node2.children) {
            let edgeClasses = "edge";
            if (child.section !== void 0) {
              edgeClasses += ` section-edge-${child.section}`;
            }
            const edgeDepth = node2.level + 1;
            edgeClasses += ` edge-depth-${edgeDepth}`;
            const edge = {
              id: `edge_${node2.id}_${child.id}`,
              start: node2.id.toString(),
              end: child.id.toString(),
              type: "normal",
              curve: "basis",
              thickness: "normal",
              look: conf5.look,
              classes: edgeClasses,
              // Store mindmap-specific data
              depth: node2.level,
              section: child.section
            };
            edges3.push(edge);
            this.generateEdges(child, edges3);
          }
        }
        /**
         * Get structured data for layout algorithms
         * Following the pattern established by ER diagrams
         * @returns Structured data containing nodes, edges, and config
         */
        getData() {
          const mindmapRoot = this.getMindmap();
          const config3 = getConfig2();
          const userDefinedConfig = getUserDefinedConfig();
          const hasUserDefinedLayout = userDefinedConfig.layout !== void 0;
          const finalConfig = config3;
          if (!hasUserDefinedLayout) {
            finalConfig.layout = "cose-bilkent";
          }
          if (!mindmapRoot) {
            return {
              nodes: [],
              edges: [],
              config: finalConfig
            };
          }
          log.debug("getData: mindmapRoot", mindmapRoot, config3);
          this.assignSections(mindmapRoot);
          const processedNodes = [];
          const processedEdges = [];
          this.flattenNodes(mindmapRoot, processedNodes);
          this.generateEdges(mindmapRoot, processedEdges);
          log.debug(
            `getData: processed ${processedNodes.length} nodes and ${processedEdges.length} edges`
          );
          const shapes4 = /* @__PURE__ */ new Map();
          for (const node2 of processedNodes) {
            shapes4.set(node2.id, {
              shape: node2.shape,
              width: node2.width,
              height: node2.height,
              padding: node2.padding
            });
          }
          return {
            nodes: processedNodes,
            edges: processedEdges,
            config: finalConfig,
            // Store the root node for mindmap-specific layout algorithms
            rootNode: mindmapRoot,
            // Properties required by dagre layout algorithm
            markers: ["point"],
            // Mindmaps don't use markers
            direction: "TB",
            // Top-to-bottom direction for mindmaps
            nodeSpacing: 50,
            // Default spacing between nodes
            rankSpacing: 50,
            // Default spacing between ranks
            // Add shapes for ELK compatibility
            shapes: Object.fromEntries(shapes4),
            // Additional properties that layout algorithms might expect
            type: "mindmap",
            diagramId: "mindmap-" + v4_default()
          };
        }
        // Expose logger to grammar
        getLogger() {
          return log;
        }
      };
    }
  });

  // src/diagrams/mindmap/mindmapRenderer.ts
  var draw19, mindmapRenderer_default;
  var init_mindmapRenderer = __esm({
    "src/diagrams/mindmap/mindmapRenderer.ts"() {
      "use strict";
      init_logger();
      init_insertElementsForSize();
      init_render2();
      init_setupViewPortForSVG();
      init_defaultConfig();
      init_config();
      draw19 = /* @__PURE__ */ __name(async (text4, id41, _version, diagObj) => {
        log.debug("Rendering mindmap diagram\n" + text4);
        const db12 = diagObj.db;
        const data4Layout = db12.getData();
        const svg2 = getDiagramElement(id41, data4Layout.config.securityLevel);
        data4Layout.type = diagObj.type;
        data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(data4Layout.config.layout, {
          fallback: "cose-bilkent"
        });
        data4Layout.diagramId = id41;
        const mm = db12.getMindmap();
        if (!mm) {
          return;
        }
        data4Layout.nodes.forEach((node2) => {
          if (node2.shape === "rounded") {
            node2.radius = 15;
            node2.taper = 15;
            node2.stroke = "none";
            node2.width = 0;
            node2.padding = 15;
          } else if (node2.shape === "circle") {
            node2.padding = 10;
          } else if (node2.shape === "rect") {
            node2.width = 0;
            node2.padding = 10;
          } else if (node2.shape === "hexagon") {
            node2.width = 0;
            node2.height = 0;
          }
        });
        await render7(data4Layout, svg2);
        const { themeVariables } = getConfig();
        const { useGradient, gradientStart, gradientStop } = themeVariables;
        if (useGradient && gradientStart && gradientStop) {
          const svgId = svg2.attr("id");
          const gradient = svg2.append("defs").append("linearGradient").attr("id", `${svgId}-gradient`).attr("gradientUnits", "objectBoundingBox").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%");
          gradient.append("stop").attr("offset", "0%").attr("stop-color", gradientStart).attr("stop-opacity", 1);
          gradient.append("stop").attr("offset", "100%").attr("stop-color", gradientStop).attr("stop-opacity", 1);
        }
        setupViewPortForSVG(
          svg2,
          data4Layout.config.mindmap?.padding ?? defaultConfig_default.mindmap.padding,
          "mindmapDiagram",
          data4Layout.config.mindmap?.useMaxWidth ?? defaultConfig_default.mindmap.useMaxWidth
        );
      }, "draw");
      mindmapRenderer_default = {
        draw: draw19
      };
    }
  });

  // src/diagrams/mindmap/styles.ts
  var genSections2, genGradient, getStyles15, styles_default14;
  var init_styles14 = __esm({
    "src/diagrams/mindmap/styles.ts"() {
      "use strict";
      init_dist();
      genSections2 = /* @__PURE__ */ __name((options2) => {
        const { theme, look } = options2;
        let sections6 = "";
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          options2["lineColor" + i2] = options2["lineColor" + i2] || options2["cScaleInv" + i2];
          if (is_dark_default(options2["lineColor" + i2])) {
            options2["lineColor" + i2] = lighten_default(options2["lineColor" + i2], 20);
          } else {
            options2["lineColor" + i2] = darken_default(options2["lineColor" + i2], 20);
          }
        }
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          const sw = "" + (look === "neo" ? Math.max(10 - (i2 - 1) * 2, 2) : 17 - 3 * i2);
          sections6 += `
    .section-${i2 - 1} rect, .section-${i2 - 1} path, .section-${i2 - 1} circle, .section-${i2 - 1} polygon, .section-${i2 - 1} path  {
      fill: ${options2["cScale" + i2]};
    }
    .section-${i2 - 1} text {
     fill: ${options2["cScaleLabel" + i2]};
    }
     .section-${i2 - 1} span {
     color: ${options2["cScaleLabel" + i2]};
    }
    .node-icon-${i2 - 1} {
      font-size: 40px;
      color: ${options2["cScaleLabel" + i2]};
    }
    .section-edge-${i2 - 1}{
      stroke: ${options2["cScale" + i2]};
    }
    .edge-depth-${i2 - 1}{
      stroke-width: ${sw};
    }
    .section-${i2 - 1} line {
      stroke: ${options2["cScaleInv" + i2]} ;
      stroke-width: 3;
    }

    .disabled, .disabled circle, .disabled text {
      fill: lightgray;
    }
    .disabled text {
      fill: #efefef;
    }
    [data-look="neo"].mindmap-node.section-${i2 - 1} rect, [data-look="neo"].mindmap-node.section-${i2 - 1} path, [data-look="neo"].mindmap-node.section-${i2 - 1} circle, [data-look="neo"].mindmap-node.section-${i2 - 1} polygon {
      fill: ${theme === "redux" || theme === "redux-dark" || theme === "neutral" ? options2.mainBkg : options2["cScale" + i2]};
      stroke: ${theme === "redux" || theme === "redux-dark" ? options2.nodeBorder : options2["cScale" + i2]};
      stroke-width: ${options2.strokeWidth ?? 2}px;
    }
    [data-look="neo"].section-edge-${i2 - 1}{
      stroke: ${theme?.includes("redux") || theme === "neo-dark" ? options2.nodeBorder : options2["cScale" + i2]};
    }
    [data-look="neo"].mindmap-node.section-${i2 - 1} text {
     fill: ${theme === "redux" || theme === "redux-dark" ? options2.nodeBorder : options2["cScaleLabel" + (theme === "neutral" ? 1 : i2)]};
    }
    `;
        }
        return sections6;
      }, "genSections");
      genGradient = /* @__PURE__ */ __name((THEME_COLOR_LIMIT2, svgId, mainBkg) => {
        let sections6 = "";
        for (let i2 = 0; i2 < THEME_COLOR_LIMIT2; i2++) {
          sections6 += `
    [data-look="neo"].mindmap-node.section-${i2 - 1} rect, [data-look="neo"].mindmap-node.section-${i2 - 1} path, [data-look="neo"].mindmap-node.section-${i2 - 1} circle, [data-look="neo"].mindmap-node.section-${i2 - 1} polygon {
      stroke: url(${svgId}-gradient);
      fill: ${mainBkg};
    }
    .section-${i2 - 1} line {
      stroke-width: 0;
    }`;
        }
        return sections6;
      }, "genGradient");
      getStyles15 = /* @__PURE__ */ __name((options2) => {
        const { theme } = options2;
        const svgId = options2.svgId;
        const scopedDropShadow = options2.dropShadow ? options2.dropShadow.replace("url(#drop-shadow)", `url(${svgId}-drop-shadow)`) : "none";
        return `
  .edge {
    stroke-width: 3;
  }
  ${genSections2(options2)}
  .section-root rect, .section-root path, .section-root circle, .section-root polygon  {
    fill: ${options2.git0};
  }
  .section-root text {
    fill: ${options2.gitBranchLabel0};
  }
  .section-root span {
    color: ${theme?.includes("redux") ? options2.nodeBorder : options2.gitBranchLabel0};
  }
  .icon-container {
    height:100%;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .edge {
    fill: none;
  }
  .mindmap-node-label {
    dy: 1em;
    alignment-baseline: middle;
    text-anchor: middle;
    dominant-baseline: middle;
    text-align: center;
  }
  [data-look="neo"].mindmap-node  {
    filter: ${scopedDropShadow};
  }
  [data-look="neo"].mindmap-node.section-root rect, [data-look="neo"].mindmap-node.section-root path, [data-look="neo"].mindmap-node.section-root circle, [data-look="neo"].mindmap-node.section-root polygon  {
    fill: ${theme?.includes("redux") ? options2.mainBkg : options2.git0};
  }
  [data-look="neo"].mindmap-node.section-root .text-inner-tspan {
    fill:  ${theme?.includes("redux") ? options2.nodeBorder : options2["cScaleLabel" + (theme === "neutral" ? 1 : 0)]};
  }
  ${options2.useGradient && svgId && options2.mainBkg ? genGradient(options2.THEME_COLOR_LIMIT, svgId, options2.mainBkg) : ""}
`;
      }, "getStyles");
      styles_default14 = getStyles15;
    }
  });

  // src/diagrams/mindmap/mindmap-definition.ts
  var mindmap_definition_exports = {};
  __export(mindmap_definition_exports, {
    diagram: () => diagram20
  });
  var diagram20;
  var init_mindmap_definition = __esm({
    "src/diagrams/mindmap/mindmap-definition.ts"() {
      "use strict";
      init_mindmap();
      init_mindmapDb();
      init_mindmapRenderer();
      init_styles14();
      diagram20 = {
        get db() {
          return new MindmapDB();
        },
        renderer: mindmapRenderer_default,
        parser: mindmap_default,
        styles: styles_default14
      };
    }
  });

  // src/diagrams/kanban/parser/kanban.jison
  var parser17, kanban_default;
  var init_kanban = __esm({
    "src/diagrams/kanban/parser/kanban.jison"() {
      "use strict";
      parser17 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 31], $Vd = [6, 7, 11, 24], $Ve = [1, 6, 13, 16, 17, 20, 23], $Vf = [1, 35], $Vg = [1, 36], $Vh = [1, 6, 7, 11, 13, 16, 17, 20, 23], $Vi = [1, 38];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "KANBAN": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "shapeData": 15, "ICON": 16, "CLASS": 17, "nodeWithId": 18, "nodeWithoutId": 19, "NODE_DSTART": 20, "NODE_DESCR": 21, "NODE_DEND": 22, "NODE_ID": 23, "SHAPE_DATA": 24, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "KANBAN", 11: "EOF", 13: "SPACELIST", 16: "ICON", 17: "CLASS", 20: "NODE_DSTART", 21: "NODE_DESCR", 22: "NODE_DEND", 23: "NODE_ID", 24: "SHAPE_DATA" },
          productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 3], [12, 2], [12, 2], [12, 2], [12, 1], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [19, 3], [18, 1], [18, 4], [15, 2], [15, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 6:
              case 7:
                return yy;
                break;
              case 8:
                yy.getLogger().trace("Stop NL ");
                break;
              case 9:
                yy.getLogger().trace("Stop EOF ");
                break;
              case 11:
                yy.getLogger().trace("Stop NL2 ");
                break;
              case 12:
                yy.getLogger().trace("Stop EOF2 ");
                break;
              case 15:
                yy.getLogger().info("Node: ", $$[$0 - 1].id);
                yy.addNode($$[$0 - 2].length, $$[$0 - 1].id, $$[$0 - 1].descr, $$[$0 - 1].type, $$[$0]);
                break;
              case 16:
                yy.getLogger().info("Node: ", $$[$0].id);
                yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type);
                break;
              case 17:
                yy.getLogger().trace("Icon: ", $$[$0]);
                yy.decorateNode({ icon: $$[$0] });
                break;
              case 18:
              case 23:
                yy.decorateNode({ class: $$[$0] });
                break;
              case 19:
                yy.getLogger().trace("SPACELIST");
                break;
              case 20:
                yy.getLogger().trace("Node: ", $$[$0 - 1].id);
                yy.addNode(0, $$[$0 - 1].id, $$[$0 - 1].descr, $$[$0 - 1].type, $$[$0]);
                break;
              case 21:
                yy.getLogger().trace("Node: ", $$[$0].id);
                yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type);
                break;
              case 22:
                yy.decorateNode({ icon: $$[$0] });
                break;
              case 27:
                yy.getLogger().trace("node found ..", $$[$0 - 2]);
                this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) };
                break;
              case 28:
                this.$ = { id: $$[$0], descr: $$[$0], type: 0 };
                break;
              case 29:
                yy.getLogger().trace("node found ..", $$[$0 - 3]);
                this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) };
                break;
              case 30:
                this.$ = $$[$0 - 1] + $$[$0];
                break;
              case 31:
                this.$ = $$[$0];
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, o2($V7, [2, 3]), { 1: [2, 2] }, o2($V7, [2, 4]), o2($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o2($Vb, [2, 24], { 18: 17, 19: 18, 14: 27, 16: [1, 28], 17: [1, 29], 20: $V5, 23: $V6 }), o2($Vb, [2, 19]), o2($Vb, [2, 21], { 15: 30, 24: $Vc }), o2($Vb, [2, 22]), o2($Vb, [2, 23]), o2($Vd, [2, 25]), o2($Vd, [2, 26]), o2($Vd, [2, 28], { 20: [1, 32] }), { 21: [1, 33] }, { 6: $V8, 7: $V9, 10: 34, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, o2($Ve, [2, 14], { 7: $Vf, 11: $Vg }), o2($Vh, [2, 8]), o2($Vh, [2, 9]), o2($Vh, [2, 10]), o2($Vb, [2, 16], { 15: 37, 24: $Vc }), o2($Vb, [2, 17]), o2($Vb, [2, 18]), o2($Vb, [2, 20], { 24: $Vi }), o2($Vd, [2, 31]), { 21: [1, 39] }, { 22: [1, 40] }, o2($Ve, [2, 13], { 7: $Vf, 11: $Vg }), o2($Vh, [2, 11]), o2($Vh, [2, 12]), o2($Vb, [2, 15], { 24: $Vi }), o2($Vd, [2, 30]), { 22: [1, 41] }, o2($Vd, [2, 27]), o2($Vd, [2, 29])],
          defaultActions: { 2: [2, 1], 6: [2, 2] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  this.pushState("shapeData");
                  yy_.yytext = "";
                  return 24;
                  break;
                case 1:
                  this.pushState("shapeDataStr");
                  return 24;
                  break;
                case 2:
                  this.popState();
                  return 24;
                  break;
                case 3:
                  const re3 = /\n\s*/g;
                  yy_.yytext = yy_.yytext.replace(re3, "<br/>");
                  return 24;
                  break;
                case 4:
                  return 24;
                  break;
                case 5:
                  this.popState();
                  break;
                case 6:
                  yy.getLogger().trace("Found comment", yy_.yytext);
                  return 6;
                  break;
                case 7:
                  return 8;
                  break;
                case 8:
                  this.begin("CLASS");
                  break;
                case 9:
                  this.popState();
                  return 17;
                  break;
                case 10:
                  this.popState();
                  break;
                case 11:
                  yy.getLogger().trace("Begin icon");
                  this.begin("ICON");
                  break;
                case 12:
                  yy.getLogger().trace("SPACELINE");
                  return 6;
                  break;
                case 13:
                  return 7;
                  break;
                case 14:
                  return 16;
                  break;
                case 15:
                  yy.getLogger().trace("end icon");
                  this.popState();
                  break;
                case 16:
                  yy.getLogger().trace("Exploding node");
                  this.begin("NODE");
                  return 20;
                  break;
                case 17:
                  yy.getLogger().trace("Cloud");
                  this.begin("NODE");
                  return 20;
                  break;
                case 18:
                  yy.getLogger().trace("Explosion Bang");
                  this.begin("NODE");
                  return 20;
                  break;
                case 19:
                  yy.getLogger().trace("Cloud Bang");
                  this.begin("NODE");
                  return 20;
                  break;
                case 20:
                  this.begin("NODE");
                  return 20;
                  break;
                case 21:
                  this.begin("NODE");
                  return 20;
                  break;
                case 22:
                  this.begin("NODE");
                  return 20;
                  break;
                case 23:
                  this.begin("NODE");
                  return 20;
                  break;
                case 24:
                  return 13;
                  break;
                case 25:
                  return 23;
                  break;
                case 26:
                  return 11;
                  break;
                case 27:
                  this.begin("NSTR2");
                  break;
                case 28:
                  return "NODE_DESCR";
                  break;
                case 29:
                  this.popState();
                  break;
                case 30:
                  yy.getLogger().trace("Starting NSTR");
                  this.begin("NSTR");
                  break;
                case 31:
                  yy.getLogger().trace("description:", yy_.yytext);
                  return "NODE_DESCR";
                  break;
                case 32:
                  this.popState();
                  break;
                case 33:
                  this.popState();
                  yy.getLogger().trace("node end ))");
                  return "NODE_DEND";
                  break;
                case 34:
                  this.popState();
                  yy.getLogger().trace("node end )");
                  return "NODE_DEND";
                  break;
                case 35:
                  this.popState();
                  yy.getLogger().trace("node end ...", yy_.yytext);
                  return "NODE_DEND";
                  break;
                case 36:
                  this.popState();
                  yy.getLogger().trace("node end ((");
                  return "NODE_DEND";
                  break;
                case 37:
                  this.popState();
                  yy.getLogger().trace("node end (-");
                  return "NODE_DEND";
                  break;
                case 38:
                  this.popState();
                  yy.getLogger().trace("node end (-");
                  return "NODE_DEND";
                  break;
                case 39:
                  this.popState();
                  yy.getLogger().trace("node end ((");
                  return "NODE_DEND";
                  break;
                case 40:
                  this.popState();
                  yy.getLogger().trace("node end ((");
                  return "NODE_DEND";
                  break;
                case 41:
                  yy.getLogger().trace("Long description:", yy_.yytext);
                  return 21;
                  break;
                case 42:
                  yy.getLogger().trace("Long description:", yy_.yytext);
                  return 21;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:@\{)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^\"]+)/i, /^(?:[^}^"]+)/i, /^(?:\})/i, /^(?:\s*%%.*)/i, /^(?:kanban\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}@]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i],
            conditions: { "shapeDataEndBracket": { "rules": [], "inclusive": false }, "shapeDataStr": { "rules": [2, 3], "inclusive": false }, "shapeData": { "rules": [1, 4, 5], "inclusive": false }, "CLASS": { "rules": [9, 10], "inclusive": false }, "ICON": { "rules": [14, 15], "inclusive": false }, "NSTR2": { "rules": [28, 29], "inclusive": false }, "NSTR": { "rules": [31, 32], "inclusive": false }, "NODE": { "rules": [27, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42], "inclusive": false }, "INITIAL": { "rules": [0, 6, 7, 8, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser17.parser = parser17;
      kanban_default = parser17;
    }
  });

  // src/diagrams/kanban/kanbanDb.ts
  var nodes3, sections5, cnt2, elements, clear15, getSection, getSections5, getData, addNode, nodeType2, getType, setElementForId, decorateNode, type2Str, getLogger, getElementById2, db4, kanbanDb_default;
  var init_kanbanDb = __esm({
    "src/diagrams/kanban/kanbanDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_common();
      init_logger();
      init_defaultConfig();
      init_js_yaml();
      nodes3 = [];
      sections5 = [];
      cnt2 = 0;
      elements = {};
      clear15 = /* @__PURE__ */ __name(() => {
        nodes3 = [];
        sections5 = [];
        cnt2 = 0;
        elements = {};
      }, "clear");
      getSection = /* @__PURE__ */ __name((level) => {
        if (nodes3.length === 0) {
          return null;
        }
        const sectionLevel = nodes3[0].level;
        let lastSection = null;
        for (let i2 = nodes3.length - 1; i2 >= 0; i2--) {
          if (nodes3[i2].level === sectionLevel && !lastSection) {
            lastSection = nodes3[i2];
          }
          if (nodes3[i2].level < sectionLevel) {
            throw new Error('Items without section detected, found section ("' + nodes3[i2].label + '")');
          }
        }
        if (level === lastSection?.level) {
          return null;
        }
        return lastSection;
      }, "getSection");
      getSections5 = /* @__PURE__ */ __name(function() {
        return sections5;
      }, "getSections");
      getData = /* @__PURE__ */ __name(function() {
        const edges3 = [];
        const _nodes = [];
        const sections6 = getSections5();
        const conf5 = getConfig2();
        for (const section of sections6) {
          const node2 = {
            id: section.id,
            label: sanitizeText(section.label ?? "", conf5),
            labelType: "markdown",
            isGroup: true,
            ticket: section.ticket,
            shape: "kanbanSection",
            level: section.level,
            look: conf5.look
          };
          _nodes.push(node2);
          const children2 = nodes3.filter((n2) => n2.parentId === section.id);
          for (const item of children2) {
            const childNode = {
              id: item.id,
              parentId: section.id,
              label: sanitizeText(item.label ?? "", conf5),
              labelType: "markdown",
              isGroup: false,
              ticket: item?.ticket,
              priority: item?.priority,
              assigned: item?.assigned,
              icon: item?.icon,
              shape: "kanbanItem",
              level: item.level,
              rx: 5,
              ry: 5,
              cssStyles: ["text-align: left"]
            };
            _nodes.push(childNode);
          }
        }
        return { nodes: _nodes, edges: edges3, other: {}, config: getConfig2() };
      }, "getData");
      addNode = /* @__PURE__ */ __name((level, id41, descr, type3, shapeData) => {
        const conf5 = getConfig2();
        let padding = conf5.mindmap?.padding ?? defaultConfig_default.mindmap.padding;
        switch (type3) {
          case nodeType2.ROUNDED_RECT:
          case nodeType2.RECT:
          case nodeType2.HEXAGON:
            padding *= 2;
        }
        const node2 = {
          id: sanitizeText(id41, conf5) || "kbn" + cnt2++,
          level,
          label: sanitizeText(descr, conf5),
          width: conf5.mindmap?.maxNodeWidth ?? defaultConfig_default.mindmap.maxNodeWidth,
          padding,
          isGroup: false
        };
        if (shapeData !== void 0) {
          let yamlData;
          if (!shapeData.includes("\n")) {
            yamlData = "{\n" + shapeData + "\n}";
          } else {
            yamlData = shapeData + "\n";
          }
          const doc = load(yamlData, { schema: JSON_SCHEMA });
          if (doc.shape && (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes("_"))) {
            throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`);
          }
          if (doc?.shape && doc.shape === "kanbanItem") {
            node2.shape = doc?.shape;
          }
          if (doc?.label) {
            node2.label = doc?.label;
          }
          if (doc?.icon) {
            node2.icon = doc?.icon.toString();
          }
          if (doc?.assigned) {
            node2.assigned = doc?.assigned.toString();
          }
          if (doc?.ticket) {
            node2.ticket = doc?.ticket.toString();
          }
          if (doc?.priority) {
            node2.priority = doc?.priority;
          }
        }
        const section = getSection(level);
        if (section) {
          node2.parentId = section.id || "kbn" + cnt2++;
        } else {
          sections5.push(node2);
        }
        nodes3.push(node2);
      }, "addNode");
      nodeType2 = {
        DEFAULT: 0,
        NO_BORDER: 0,
        ROUNDED_RECT: 1,
        RECT: 2,
        CIRCLE: 3,
        CLOUD: 4,
        BANG: 5,
        HEXAGON: 6
      };
      getType = /* @__PURE__ */ __name((startStr, endStr) => {
        log.debug("In get type", startStr, endStr);
        switch (startStr) {
          case "[":
            return nodeType2.RECT;
          case "(":
            return endStr === ")" ? nodeType2.ROUNDED_RECT : nodeType2.CLOUD;
          case "((":
            return nodeType2.CIRCLE;
          case ")":
            return nodeType2.CLOUD;
          case "))":
            return nodeType2.BANG;
          case "{{":
            return nodeType2.HEXAGON;
          default:
            return nodeType2.DEFAULT;
        }
      }, "getType");
      setElementForId = /* @__PURE__ */ __name((id41, element3) => {
        elements[id41] = element3;
      }, "setElementForId");
      decorateNode = /* @__PURE__ */ __name((decoration) => {
        if (!decoration) {
          return;
        }
        const config3 = getConfig2();
        const node2 = nodes3[nodes3.length - 1];
        if (decoration.icon) {
          node2.icon = sanitizeText(decoration.icon, config3);
        }
        if (decoration.class) {
          node2.cssClasses = sanitizeText(decoration.class, config3);
        }
      }, "decorateNode");
      type2Str = /* @__PURE__ */ __name((type3) => {
        switch (type3) {
          case nodeType2.DEFAULT:
            return "no-border";
          case nodeType2.RECT:
            return "rect";
          case nodeType2.ROUNDED_RECT:
            return "rounded-rect";
          case nodeType2.CIRCLE:
            return "circle";
          case nodeType2.CLOUD:
            return "cloud";
          case nodeType2.BANG:
            return "bang";
          case nodeType2.HEXAGON:
            return "hexgon";
          // cspell: disable-line
          default:
            return "no-border";
        }
      }, "type2Str");
      getLogger = /* @__PURE__ */ __name(() => log, "getLogger");
      getElementById2 = /* @__PURE__ */ __name((id41) => elements[id41], "getElementById");
      db4 = {
        clear: clear15,
        addNode,
        getSections: getSections5,
        getData,
        nodeType: nodeType2,
        getType,
        setElementForId,
        decorateNode,
        type2Str,
        getLogger,
        getElementById: getElementById2
      };
      kanbanDb_default = db4;
    }
  });

  // src/diagrams/kanban/kanbanRenderer.ts
  var draw20, kanbanRenderer_default;
  var init_kanbanRenderer = __esm({
    "src/diagrams/kanban/kanbanRenderer.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_selectSvgElement();
      init_setupGraphViewbox();
      init_defaultConfig();
      init_clusters();
      init_nodes2();
      draw20 = /* @__PURE__ */ __name(async (text4, id41, _version, diagObj) => {
        log.debug("Rendering kanban diagram\n" + text4);
        const db12 = diagObj.db;
        const data4Layout = db12.getData();
        const conf5 = getConfig2();
        conf5.htmlLabels = false;
        const svg2 = selectSvgElement(id41);
        for (const node2 of data4Layout.nodes) {
          node2.domId = `${id41}-${node2.id}`;
        }
        const sectionsElem = svg2.append("g");
        sectionsElem.attr("class", "sections");
        const nodesElem = svg2.append("g");
        nodesElem.attr("class", "items");
        const sections6 = data4Layout.nodes.filter(
          // TODO: TypeScript 5.5 will infer this predicate automatically
          (node2) => node2.isGroup
        );
        let cnt4 = 0;
        const padding = 10;
        const sectionObjects = [];
        let maxLabelHeight = 25;
        for (const section of sections6) {
          const WIDTH = conf5?.kanban?.sectionWidth || 200;
          cnt4 = cnt4 + 1;
          section.x = WIDTH * cnt4 + (cnt4 - 1) * padding / 2;
          section.width = WIDTH;
          section.y = 0;
          section.height = WIDTH * 3;
          section.rx = 5;
          section.ry = 5;
          section.cssClasses = section.cssClasses + " section-" + cnt4;
          const sectionObj = await insertCluster(sectionsElem, section);
          maxLabelHeight = Math.max(maxLabelHeight, sectionObj?.labelBBox?.height);
          sectionObjects.push(sectionObj);
        }
        let i2 = 0;
        for (const section of sections6) {
          const sectionObj = sectionObjects[i2];
          i2 = i2 + 1;
          const WIDTH = conf5?.kanban?.sectionWidth || 200;
          const top2 = -WIDTH * 3 / 2 + maxLabelHeight;
          let y6 = top2;
          const sectionItems = data4Layout.nodes.filter((node2) => node2.parentId === section.id);
          for (const item of sectionItems) {
            if (item.isGroup) {
              throw new Error("Groups within groups are not allowed in Kanban diagrams");
            }
            item.x = section.x;
            item.width = WIDTH - 1.5 * padding;
            const nodeEl = await insertNode(nodesElem, item, { config: conf5 });
            const bbox = nodeEl.node().getBBox();
            item.y = y6 + bbox.height / 2;
            await positionNode(item);
            y6 = item.y + bbox.height / 2 + padding / 2;
          }
          const rect3 = sectionObj.cluster.select("rect");
          const height2 = Math.max(y6 - top2 + 3 * padding, 50) + (maxLabelHeight - 25);
          rect3.attr("height", height2);
        }
        setupGraphViewbox(
          void 0,
          svg2,
          conf5.mindmap?.padding ?? defaultConfig_default.kanban.padding,
          conf5.mindmap?.useMaxWidth ?? defaultConfig_default.kanban.useMaxWidth
        );
      }, "draw");
      kanbanRenderer_default = {
        draw: draw20
      };
    }
  });

  // src/diagrams/kanban/styles.ts
  var genSections3, getStyles16, styles_default15;
  var init_styles15 = __esm({
    "src/diagrams/kanban/styles.ts"() {
      "use strict";
      init_dist();
      init_globalStyles();
      genSections3 = /* @__PURE__ */ __name((options2) => {
        let sections6 = "";
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          options2["lineColor" + i2] = options2["lineColor" + i2] || options2["cScaleInv" + i2];
          if (is_dark_default(options2["lineColor" + i2])) {
            options2["lineColor" + i2] = lighten_default(options2["lineColor" + i2], 20);
          } else {
            options2["lineColor" + i2] = darken_default(options2["lineColor" + i2], 20);
          }
        }
        const adjuster = /* @__PURE__ */ __name((color2, level) => options2.darkMode ? darken_default(color2, level) : lighten_default(color2, level), "adjuster");
        for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) {
          const sw = "" + (17 - 3 * i2);
          sections6 += `
    .section-${i2 - 1} rect, .section-${i2 - 1} path, .section-${i2 - 1} circle, .section-${i2 - 1} polygon, .section-${i2 - 1} path  {
      fill: ${adjuster(options2["cScale" + i2], 10)};
      stroke: ${adjuster(options2["cScale" + i2], 10)};

    }
    .section-${i2 - 1} text {
     fill: ${options2["cScaleLabel" + i2]};
    }
    .node-icon-${i2 - 1} {
      font-size: 40px;
      color: ${options2["cScaleLabel" + i2]};
    }
    .section-edge-${i2 - 1}{
      stroke: ${options2["cScale" + i2]};
    }
    .edge-depth-${i2 - 1}{
      stroke-width: ${sw};
    }
    .section-${i2 - 1} line {
      stroke: ${options2["cScaleInv" + i2]} ;
      stroke-width: 3;
    }

    .disabled, .disabled circle, .disabled text {
      fill: lightgray;
    }
    .disabled text {
      fill: #efefef;
    }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${options2.background};
    stroke: ${options2.nodeBorder};
    stroke-width: 1px;
  }

  .kanban-ticket-link {
    fill: ${options2.background};
    stroke: ${options2.nodeBorder};
    text-decoration: underline;
  }
    `;
        }
        return sections6;
      }, "genSections");
      getStyles16 = /* @__PURE__ */ __name((options2) => `
  .edge {
    stroke-width: 3;
  }
  ${genSections3(options2)}
  .section-root rect, .section-root path, .section-root circle, .section-root polygon  {
    fill: ${options2.git0};
  }
  .section-root text {
    fill: ${options2.gitBranchLabel0};
  }
  .icon-container {
    height:100%;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .edge {
    fill: none;
  }
  .cluster-label, .label {
    color: ${options2.textColor};
    fill: ${options2.textColor};
    }
  .kanban-label {
    dy: 1em;
    alignment-baseline: middle;
    text-anchor: middle;
    dominant-baseline: middle;
    text-align: center;
  }
    ${getIconStyles()}
`, "getStyles");
      styles_default15 = getStyles16;
    }
  });

  // src/diagrams/kanban/kanban-definition.ts
  var kanban_definition_exports = {};
  __export(kanban_definition_exports, {
    diagram: () => diagram21
  });
  var diagram21;
  var init_kanban_definition = __esm({
    "src/diagrams/kanban/kanban-definition.ts"() {
      "use strict";
      init_kanban();
      init_kanbanDb();
      init_kanbanRenderer();
      init_styles15();
      diagram21 = {
        db: kanbanDb_default,
        renderer: kanbanRenderer_default,
        parser: kanban_default,
        styles: styles_default15
      };
    }
  });

  // src/diagrams/sankey/parser/sankey.jison
  var parser18, sankey_default;
  var init_sankey = __esm({
    "src/diagrams/sankey/parser/sankey.jison"() {
      "use strict";
      parser18 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 9], $V1 = [1, 10], $V2 = [1, 5, 10, 12];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "SANKEY": 4, "NEWLINE": 5, "csv": 6, "opt_eof": 7, "record": 8, "csv_tail": 9, "EOF": 10, "field[source]": 11, "COMMA": 12, "field[target]": 13, "field[value]": 14, "field": 15, "escaped": 16, "non_escaped": 17, "DQUOTE": 18, "ESCAPED_TEXT": 19, "NON_ESCAPED_TEXT": 20, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "SANKEY", 5: "NEWLINE", 10: "EOF", 11: "field[source]", 12: "COMMA", 13: "field[target]", 14: "field[value]", 18: "DQUOTE", 19: "ESCAPED_TEXT", 20: "NON_ESCAPED_TEXT" },
          productions_: [0, [3, 4], [6, 2], [9, 2], [9, 0], [7, 1], [7, 0], [8, 5], [15, 1], [15, 1], [16, 3], [17, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 7:
                const source = yy.findOrCreateNode($$[$0 - 4].trim().replaceAll('""', '"'));
                const target = yy.findOrCreateNode($$[$0 - 2].trim().replaceAll('""', '"'));
                const value2 = parseFloat($$[$0].trim());
                yy.addLink(source, target, value2);
                break;
              case 8:
              case 9:
              case 11:
                this.$ = $$[$0];
                break;
              case 10:
                this.$ = $$[$0 - 1];
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, { 5: [1, 3] }, { 6: 4, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 1: [2, 6], 7: 11, 10: [1, 12] }, o2($V1, [2, 4], { 9: 13, 5: [1, 14] }), { 12: [1, 15] }, o2($V2, [2, 8]), o2($V2, [2, 9]), { 19: [1, 16] }, o2($V2, [2, 11]), { 1: [2, 1] }, { 1: [2, 5] }, o2($V1, [2, 2]), { 6: 17, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 15: 18, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 18: [1, 19] }, o2($V1, [2, 3]), { 12: [1, 20] }, o2($V2, [2, 10]), { 15: 21, 16: 7, 17: 8, 18: $V0, 20: $V1 }, o2([1, 5, 10], [2, 7])],
          defaultActions: { 11: [2, 1], 12: [2, 5] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  this.pushState("csv");
                  return 4;
                  break;
                case 1:
                  this.pushState("csv");
                  return 4;
                  break;
                case 2:
                  return 10;
                  break;
                case 3:
                  return 5;
                  break;
                case 4:
                  return 12;
                  break;
                case 5:
                  this.pushState("escaped_text");
                  return 18;
                  break;
                case 6:
                  return 20;
                  break;
                case 7:
                  this.popState("escaped_text");
                  return 18;
                  break;
                case 8:
                  return 19;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:sankey-beta\b)/i, /^(?:sankey\b)/i, /^(?:$)/i, /^(?:((\u000D\u000A)|(\u000A)))/i, /^(?:(\u002C))/i, /^(?:(\u0022))/i, /^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i, /^(?:(\u0022)(?!(\u0022)))/i, /^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],
            conditions: { "csv": { "rules": [2, 3, 4, 5, 6, 7, 8], "inclusive": false }, "escaped_text": { "rules": [7, 8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser18.parser = parser18;
      sankey_default = parser18;
    }
  });

  // src/diagrams/sankey/sankeyDB.ts
  var links2, nodes4, nodesMap, clear16, SankeyLink, addLink, SankeyNode, findOrCreateNode, getNodes, getLinks2, getGraph, sankeyDB_default;
  var init_sankeyDB = __esm({
    "src/diagrams/sankey/sankeyDB.ts"() {
      "use strict";
      init_diagramAPI();
      init_common();
      init_commonDb();
      links2 = [];
      nodes4 = [];
      nodesMap = /* @__PURE__ */ new Map();
      clear16 = /* @__PURE__ */ __name(() => {
        links2 = [];
        nodes4 = [];
        nodesMap = /* @__PURE__ */ new Map();
        clear();
      }, "clear");
      SankeyLink = class {
        constructor(source, target, value2 = 0) {
          this.source = source;
          this.target = target;
          this.value = value2;
        }
        static {
          __name(this, "SankeyLink");
        }
      };
      addLink = /* @__PURE__ */ __name((source, target, value2) => {
        links2.push(new SankeyLink(source, target, value2));
      }, "addLink");
      SankeyNode = class {
        constructor(ID) {
          this.ID = ID;
        }
        static {
          __name(this, "SankeyNode");
        }
      };
      findOrCreateNode = /* @__PURE__ */ __name((ID) => {
        ID = common_default.sanitizeText(ID, getConfig2());
        let node2 = nodesMap.get(ID);
        if (node2 === void 0) {
          node2 = new SankeyNode(ID);
          nodesMap.set(ID, node2);
          nodes4.push(node2);
        }
        return node2;
      }, "findOrCreateNode");
      getNodes = /* @__PURE__ */ __name(() => nodes4, "getNodes");
      getLinks2 = /* @__PURE__ */ __name(() => links2, "getLinks");
      getGraph = /* @__PURE__ */ __name(() => ({
        nodes: nodes4.map((node2) => ({ id: node2.ID })),
        links: links2.map((link2) => ({
          source: link2.source.ID,
          target: link2.target.ID,
          value: link2.value
        }))
      }), "getGraph");
      sankeyDB_default = {
        nodesMap,
        getConfig: /* @__PURE__ */ __name(() => getConfig2().sankey, "getConfig"),
        getNodes,
        getLinks: getLinks2,
        getGraph,
        addLink,
        findOrCreateNode,
        getAccTitle,
        setAccTitle,
        getAccDescription,
        setAccDescription,
        getDiagramTitle,
        setDiagramTitle,
        clear: clear16
      };
    }
  });

  // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/max.js
  function max9(values3, valueof) {
    let max10;
    if (valueof === void 0) {
      for (const value2 of values3) {
        if (value2 != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) {
          max10 = value2;
        }
      }
    } else {
      let index = -1;
      for (let value2 of values3) {
        if ((value2 = valueof(value2, ++index, values3)) != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) {
          max10 = value2;
        }
      }
    }
    return max10;
  }
  var init_max3 = __esm({
    "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/max.js"() {
      "use strict";
      __name(max9, "max");
    }
  });

  // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/min.js
  function min9(values3, valueof) {
    let min10;
    if (valueof === void 0) {
      for (const value2 of values3) {
        if (value2 != null && (min10 > value2 || min10 === void 0 && value2 >= value2)) {
          min10 = value2;
        }
      }
    } else {
      let index = -1;
      for (let value2 of values3) {
        if ((value2 = valueof(value2, ++index, values3)) != null && (min10 > value2 || min10 === void 0 && value2 >= value2)) {
          min10 = value2;
        }
      }
    }
    return min10;
  }
  var init_min3 = __esm({
    "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/min.js"() {
      "use strict";
      __name(min9, "min");
    }
  });

  // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/sum.js
  function sum(values3, valueof) {
    let sum2 = 0;
    if (valueof === void 0) {
      for (let value2 of values3) {
        if (value2 = +value2) {
          sum2 += value2;
        }
      }
    } else {
      let index = -1;
      for (let value2 of values3) {
        if (value2 = +valueof(value2, ++index, values3)) {
          sum2 += value2;
        }
      }
    }
    return sum2;
  }
  var init_sum2 = __esm({
    "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/sum.js"() {
      "use strict";
      __name(sum, "sum");
    }
  });

  // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/index.js
  var init_src33 = __esm({
    "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/index.js"() {
      "use strict";
      init_max3();
      init_min3();
      init_sum2();
    }
  });

  // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/align.js
  function targetDepth(d3) {
    return d3.target.depth;
  }
  function left2(node2) {
    return node2.depth;
  }
  function right2(node2, n2) {
    return n2 - 1 - node2.height;
  }
  function justify(node2, n2) {
    return node2.sourceLinks.length ? node2.depth : n2 - 1;
  }
  function center3(node2) {
    return node2.targetLinks.length ? node2.depth : node2.sourceLinks.length ? min9(node2.sourceLinks, targetDepth) - 1 : 0;
  }
  var init_align = __esm({
    "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/align.js"() {
      "use strict";
      init_src33();
      __name(targetDepth, "targetDepth");
      __name(left2, "left");
      __name(right2, "right");
      __name(justify, "justify");
      __name(center3, "center");
    }
  });

  // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/constant.js
  function constant3(x5) {
    return function() {
      return x5;
    };
  }
  var init_constant9 = __esm({
    "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/constant.js"() {
      "use strict";
      __name(constant3, "constant");
    }
  });

  // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankey.js
  function ascendingSourceBreadth(a2, b3) {
    return ascendingBreadth(a2.source, b3.source) || a2.index - b3.index;
  }
  function ascendingTargetBreadth(a2, b3) {
    return ascendingBreadth(a2.target, b3.target) || a2.index - b3.index;
  }
  function ascendingBreadth(a2, b3) {
    return a2.y0 - b3.y0;
  }
  function value(d3) {
    return d3.value;
  }
  function defaultId(d3) {
    return d3.index;
  }
  function defaultNodes(graph) {
    return graph.nodes;
  }
  function defaultLinks(graph) {
    return graph.links;
  }
  function find4(nodeById, id41) {
    const node2 = nodeById.get(id41);
    if (!node2) throw new Error("missing: " + id41);
    return node2;
  }
  function computeLinkBreadths({ nodes: nodes5 }) {
    for (const node2 of nodes5) {
      let y0 = node2.y0;
      let y1 = y0;
      for (const link2 of node2.sourceLinks) {
        link2.y0 = y0 + link2.width / 2;
        y0 += link2.width;
      }
      for (const link2 of node2.targetLinks) {
        link2.y1 = y1 + link2.width / 2;
        y1 += link2.width;
      }
    }
  }
  function Sankey() {
    let x0 = 0, y0 = 0, x1 = 1, y1 = 1;
    let dx = 24;
    let dy = 8, py;
    let id41 = defaultId;
    let align = justify;
    let sort3;
    let linkSort;
    let nodes5 = defaultNodes;
    let links3 = defaultLinks;
    let iterations = 6;
    function sankey() {
      const graph = { nodes: nodes5.apply(null, arguments), links: links3.apply(null, arguments) };
      computeNodeLinks(graph);
      computeNodeValues(graph);
      computeNodeDepths(graph);
      computeNodeHeights(graph);
      computeNodeBreadths(graph);
      computeLinkBreadths(graph);
      return graph;
    }
    __name(sankey, "sankey");
    sankey.update = function(graph) {
      computeLinkBreadths(graph);
      return graph;
    };
    sankey.nodeId = function(_3) {
      return arguments.length ? (id41 = typeof _3 === "function" ? _3 : constant3(_3), sankey) : id41;
    };
    sankey.nodeAlign = function(_3) {
      return arguments.length ? (align = typeof _3 === "function" ? _3 : constant3(_3), sankey) : align;
    };
    sankey.nodeSort = function(_3) {
      return arguments.length ? (sort3 = _3, sankey) : sort3;
    };
    sankey.nodeWidth = function(_3) {
      return arguments.length ? (dx = +_3, sankey) : dx;
    };
    sankey.nodePadding = function(_3) {
      return arguments.length ? (dy = py = +_3, sankey) : dy;
    };
    sankey.nodes = function(_3) {
      return arguments.length ? (nodes5 = typeof _3 === "function" ? _3 : constant3(_3), sankey) : nodes5;
    };
    sankey.links = function(_3) {
      return arguments.length ? (links3 = typeof _3 === "function" ? _3 : constant3(_3), sankey) : links3;
    };
    sankey.linkSort = function(_3) {
      return arguments.length ? (linkSort = _3, sankey) : linkSort;
    };
    sankey.size = function(_3) {
      return arguments.length ? (x0 = y0 = 0, x1 = +_3[0], y1 = +_3[1], sankey) : [x1 - x0, y1 - y0];
    };
    sankey.extent = function(_3) {
      return arguments.length ? (x0 = +_3[0][0], x1 = +_3[1][0], y0 = +_3[0][1], y1 = +_3[1][1], sankey) : [[x0, y0], [x1, y1]];
    };
    sankey.iterations = function(_3) {
      return arguments.length ? (iterations = +_3, sankey) : iterations;
    };
    function computeNodeLinks({ nodes: nodes6, links: links4 }) {
      for (const [i2, node2] of nodes6.entries()) {
        node2.index = i2;
        node2.sourceLinks = [];
        node2.targetLinks = [];
      }
      const nodeById = new Map(nodes6.map((d3, i2) => [id41(d3, i2, nodes6), d3]));
      for (const [i2, link2] of links4.entries()) {
        link2.index = i2;
        let { source, target } = link2;
        if (typeof source !== "object") source = link2.source = find4(nodeById, source);
        if (typeof target !== "object") target = link2.target = find4(nodeById, target);
        source.sourceLinks.push(link2);
        target.targetLinks.push(link2);
      }
      if (linkSort != null) {
        for (const { sourceLinks, targetLinks } of nodes6) {
          sourceLinks.sort(linkSort);
          targetLinks.sort(linkSort);
        }
      }
    }
    __name(computeNodeLinks, "computeNodeLinks");
    function computeNodeValues({ nodes: nodes6 }) {
      for (const node2 of nodes6) {
        node2.value = node2.fixedValue === void 0 ? Math.max(sum(node2.sourceLinks, value), sum(node2.targetLinks, value)) : node2.fixedValue;
      }
    }
    __name(computeNodeValues, "computeNodeValues");
    function computeNodeDepths({ nodes: nodes6 }) {
      const n2 = nodes6.length;
      let current = new Set(nodes6);
      let next3 = /* @__PURE__ */ new Set();
      let x5 = 0;
      while (current.size) {
        for (const node2 of current) {
          node2.depth = x5;
          for (const { target } of node2.sourceLinks) {
            next3.add(target);
          }
        }
        if (++x5 > n2) throw new Error("circular link");
        current = next3;
        next3 = /* @__PURE__ */ new Set();
      }
    }
    __name(computeNodeDepths, "computeNodeDepths");
    function computeNodeHeights({ nodes: nodes6 }) {
      const n2 = nodes6.length;
      let current = new Set(nodes6);
      let next3 = /* @__PURE__ */ new Set();
      let x5 = 0;
      while (current.size) {
        for (const node2 of current) {
          node2.height = x5;
          for (const { source } of node2.targetLinks) {
            next3.add(source);
          }
        }
        if (++x5 > n2) throw new Error("circular link");
        current = next3;
        next3 = /* @__PURE__ */ new Set();
      }
    }
    __name(computeNodeHeights, "computeNodeHeights");
    function computeNodeLayers({ nodes: nodes6 }) {
      const x5 = max9(nodes6, (d3) => d3.depth) + 1;
      const kx = (x1 - x0 - dx) / (x5 - 1);
      const columns = new Array(x5);
      for (const node2 of nodes6) {
        const i2 = Math.max(0, Math.min(x5 - 1, Math.floor(align.call(null, node2, x5))));
        node2.layer = i2;
        node2.x0 = x0 + i2 * kx;
        node2.x1 = node2.x0 + dx;
        if (columns[i2]) columns[i2].push(node2);
        else columns[i2] = [node2];
      }
      if (sort3) for (const column2 of columns) {
        column2.sort(sort3);
      }
      return columns;
    }
    __name(computeNodeLayers, "computeNodeLayers");
    function initializeNodeBreadths(columns) {
      const ky = min9(columns, (c3) => (y1 - y0 - (c3.length - 1) * py) / sum(c3, value));
      for (const nodes6 of columns) {
        let y6 = y0;
        for (const node2 of nodes6) {
          node2.y0 = y6;
          node2.y1 = y6 + node2.value * ky;
          y6 = node2.y1 + py;
          for (const link2 of node2.sourceLinks) {
            link2.width = link2.value * ky;
          }
        }
        y6 = (y1 - y6 + py) / (nodes6.length + 1);
        for (let i2 = 0; i2 < nodes6.length; ++i2) {
          const node2 = nodes6[i2];
          node2.y0 += y6 * (i2 + 1);
          node2.y1 += y6 * (i2 + 1);
        }
        reorderLinks(nodes6);
      }
    }
    __name(initializeNodeBreadths, "initializeNodeBreadths");
    function computeNodeBreadths(graph) {
      const columns = computeNodeLayers(graph);
      py = Math.min(dy, (y1 - y0) / (max9(columns, (c3) => c3.length) - 1));
      initializeNodeBreadths(columns);
      for (let i2 = 0; i2 < iterations; ++i2) {
        const alpha = Math.pow(0.99, i2);
        const beta = Math.max(1 - alpha, (i2 + 1) / iterations);
        relaxRightToLeft(columns, alpha, beta);
        relaxLeftToRight(columns, alpha, beta);
      }
    }
    __name(computeNodeBreadths, "computeNodeBreadths");
    function relaxLeftToRight(columns, alpha, beta) {
      for (let i2 = 1, n2 = columns.length; i2 < n2; ++i2) {
        const column2 = columns[i2];
        for (const target of column2) {
          let y6 = 0;
          let w4 = 0;
          for (const { source, value: value2 } of target.targetLinks) {
            let v3 = value2 * (target.layer - source.layer);
            y6 += targetTop(source, target) * v3;
            w4 += v3;
          }
          if (!(w4 > 0)) continue;
          let dy2 = (y6 / w4 - target.y0) * alpha;
          target.y0 += dy2;
          target.y1 += dy2;
          reorderNodeLinks(target);
        }
        if (sort3 === void 0) column2.sort(ascendingBreadth);
        resolveCollisions(column2, beta);
      }
    }
    __name(relaxLeftToRight, "relaxLeftToRight");
    function relaxRightToLeft(columns, alpha, beta) {
      for (let n2 = columns.length, i2 = n2 - 2; i2 >= 0; --i2) {
        const column2 = columns[i2];
        for (const source of column2) {
          let y6 = 0;
          let w4 = 0;
          for (const { target, value: value2 } of source.sourceLinks) {
            let v3 = value2 * (target.layer - source.layer);
            y6 += sourceTop(source, target) * v3;
            w4 += v3;
          }
          if (!(w4 > 0)) continue;
          let dy2 = (y6 / w4 - source.y0) * alpha;
          source.y0 += dy2;
          source.y1 += dy2;
          reorderNodeLinks(source);
        }
        if (sort3 === void 0) column2.sort(ascendingBreadth);
        resolveCollisions(column2, beta);
      }
    }
    __name(relaxRightToLeft, "relaxRightToLeft");
    function resolveCollisions(nodes6, alpha) {
      const i2 = nodes6.length >> 1;
      const subject = nodes6[i2];
      resolveCollisionsBottomToTop(nodes6, subject.y0 - py, i2 - 1, alpha);
      resolveCollisionsTopToBottom(nodes6, subject.y1 + py, i2 + 1, alpha);
      resolveCollisionsBottomToTop(nodes6, y1, nodes6.length - 1, alpha);
      resolveCollisionsTopToBottom(nodes6, y0, 0, alpha);
    }
    __name(resolveCollisions, "resolveCollisions");
    function resolveCollisionsTopToBottom(nodes6, y6, i2, alpha) {
      for (; i2 < nodes6.length; ++i2) {
        const node2 = nodes6[i2];
        const dy2 = (y6 - node2.y0) * alpha;
        if (dy2 > 1e-6) node2.y0 += dy2, node2.y1 += dy2;
        y6 = node2.y1 + py;
      }
    }
    __name(resolveCollisionsTopToBottom, "resolveCollisionsTopToBottom");
    function resolveCollisionsBottomToTop(nodes6, y6, i2, alpha) {
      for (; i2 >= 0; --i2) {
        const node2 = nodes6[i2];
        const dy2 = (node2.y1 - y6) * alpha;
        if (dy2 > 1e-6) node2.y0 -= dy2, node2.y1 -= dy2;
        y6 = node2.y0 - py;
      }
    }
    __name(resolveCollisionsBottomToTop, "resolveCollisionsBottomToTop");
    function reorderNodeLinks({ sourceLinks, targetLinks }) {
      if (linkSort === void 0) {
        for (const { source: { sourceLinks: sourceLinks2 } } of targetLinks) {
          sourceLinks2.sort(ascendingTargetBreadth);
        }
        for (const { target: { targetLinks: targetLinks2 } } of sourceLinks) {
          targetLinks2.sort(ascendingSourceBreadth);
        }
      }
    }
    __name(reorderNodeLinks, "reorderNodeLinks");
    function reorderLinks(nodes6) {
      if (linkSort === void 0) {
        for (const { sourceLinks, targetLinks } of nodes6) {
          sourceLinks.sort(ascendingTargetBreadth);
          targetLinks.sort(ascendingSourceBreadth);
        }
      }
    }
    __name(reorderLinks, "reorderLinks");
    function targetTop(source, target) {
      let y6 = source.y0 - (source.sourceLinks.length - 1) * py / 2;
      for (const { target: node2, width: width3 } of source.sourceLinks) {
        if (node2 === target) break;
        y6 += width3 + py;
      }
      for (const { source: node2, width: width3 } of target.targetLinks) {
        if (node2 === source) break;
        y6 -= width3;
      }
      return y6;
    }
    __name(targetTop, "targetTop");
    function sourceTop(source, target) {
      let y6 = target.y0 - (target.targetLinks.length - 1) * py / 2;
      for (const { source: node2, width: width3 } of target.targetLinks) {
        if (node2 === source) break;
        y6 += width3 + py;
      }
      for (const { target: node2, width: width3 } of source.sourceLinks) {
        if (node2 === target) break;
        y6 -= width3;
      }
      return y6;
    }
    __name(sourceTop, "sourceTop");
    return sankey;
  }
  var init_sankey2 = __esm({
    "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankey.js"() {
      "use strict";
      init_src33();
      init_align();
      init_constant9();
      __name(ascendingSourceBreadth, "ascendingSourceBreadth");
      __name(ascendingTargetBreadth, "ascendingTargetBreadth");
      __name(ascendingBreadth, "ascendingBreadth");
      __name(value, "value");
      __name(defaultId, "defaultId");
      __name(defaultNodes, "defaultNodes");
      __name(defaultLinks, "defaultLinks");
      __name(find4, "find");
      __name(computeLinkBreadths, "computeLinkBreadths");
      __name(Sankey, "Sankey");
    }
  });

  // ../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/path.js
  function Path2() {
    this._x0 = this._y0 = // start of current subpath
    this._x1 = this._y1 = null;
    this._ = "";
  }
  function path3() {
    return new Path2();
  }
  var pi3, tau3, epsilon5, tauEpsilon2, path_default2;
  var init_path4 = __esm({
    "../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/path.js"() {
      "use strict";
      pi3 = Math.PI;
      tau3 = 2 * pi3;
      epsilon5 = 1e-6;
      tauEpsilon2 = tau3 - epsilon5;
      __name(Path2, "Path");
      __name(path3, "path");
      Path2.prototype = path3.prototype = {
        constructor: Path2,
        moveTo: /* @__PURE__ */ __name(function(x5, y6) {
          this._ += "M" + (this._x0 = this._x1 = +x5) + "," + (this._y0 = this._y1 = +y6);
        }, "moveTo"),
        closePath: /* @__PURE__ */ __name(function() {
          if (this._x1 !== null) {
            this._x1 = this._x0, this._y1 = this._y0;
            this._ += "Z";
          }
        }, "closePath"),
        lineTo: /* @__PURE__ */ __name(function(x5, y6) {
          this._ += "L" + (this._x1 = +x5) + "," + (this._y1 = +y6);
        }, "lineTo"),
        quadraticCurveTo: /* @__PURE__ */ __name(function(x1, y1, x5, y6) {
          this._ += "Q" + +x1 + "," + +y1 + "," + (this._x1 = +x5) + "," + (this._y1 = +y6);
        }, "quadraticCurveTo"),
        bezierCurveTo: /* @__PURE__ */ __name(function(x1, y1, x22, y22, x5, y6) {
          this._ += "C" + +x1 + "," + +y1 + "," + +x22 + "," + +y22 + "," + (this._x1 = +x5) + "," + (this._y1 = +y6);
        }, "bezierCurveTo"),
        arcTo: /* @__PURE__ */ __name(function(x1, y1, x22, y22, r2) {
          x1 = +x1, y1 = +y1, x22 = +x22, y22 = +y22, r2 = +r2;
          var x0 = this._x1, y0 = this._y1, x21 = x22 - x1, y21 = y22 - y1, x01 = x0 - x1, y01 = y0 - y1, l01_2 = x01 * x01 + y01 * y01;
          if (r2 < 0) throw new Error("negative radius: " + r2);
          if (this._x1 === null) {
            this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
          } else if (!(l01_2 > epsilon5)) ;
          else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon5) || !r2) {
            this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
          } else {
            var x20 = x22 - x0, y20 = y22 - y0, l21_2 = x21 * x21 + y21 * y21, l20_2 = x20 * x20 + y20 * y20, l21 = Math.sqrt(l21_2), l01 = Math.sqrt(l01_2), l4 = r2 * Math.tan((pi3 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), t01 = l4 / l01, t21 = l4 / l21;
            if (Math.abs(t01 - 1) > epsilon5) {
              this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
            }
            this._ += "A" + r2 + "," + r2 + ",0,0," + +(y01 * x20 > x01 * y20) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
          }
        }, "arcTo"),
        arc: /* @__PURE__ */ __name(function(x5, y6, r2, a0, a1, ccw) {
          x5 = +x5, y6 = +y6, r2 = +r2, ccw = !!ccw;
          var dx = r2 * Math.cos(a0), dy = r2 * Math.sin(a0), x0 = x5 + dx, y0 = y6 + dy, cw = 1 ^ ccw, da = ccw ? a0 - a1 : a1 - a0;
          if (r2 < 0) throw new Error("negative radius: " + r2);
          if (this._x1 === null) {
            this._ += "M" + x0 + "," + y0;
          } else if (Math.abs(this._x1 - x0) > epsilon5 || Math.abs(this._y1 - y0) > epsilon5) {
            this._ += "L" + x0 + "," + y0;
          }
          if (!r2) return;
          if (da < 0) da = da % tau3 + tau3;
          if (da > tauEpsilon2) {
            this._ += "A" + r2 + "," + r2 + ",0,1," + cw + "," + (x5 - dx) + "," + (y6 - dy) + "A" + r2 + "," + r2 + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
          } else if (da > epsilon5) {
            this._ += "A" + r2 + "," + r2 + ",0," + +(da >= pi3) + "," + cw + "," + (this._x1 = x5 + r2 * Math.cos(a1)) + "," + (this._y1 = y6 + r2 * Math.sin(a1));
          }
        }, "arc"),
        rect: /* @__PURE__ */ __name(function(x5, y6, w4, h3) {
          this._ += "M" + (this._x0 = this._x1 = +x5) + "," + (this._y0 = this._y1 = +y6) + "h" + +w4 + "v" + +h3 + "h" + -w4 + "Z";
        }, "rect"),
        toString: /* @__PURE__ */ __name(function() {
          return this._;
        }, "toString")
      };
      path_default2 = path3;
    }
  });

  // ../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/index.js
  var init_src34 = __esm({
    "../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/index.js"() {
      "use strict";
      init_path4();
    }
  });

  // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/constant.js
  function constant_default9(x5) {
    return /* @__PURE__ */ __name(function constant4() {
      return x5;
    }, "constant");
  }
  var init_constant10 = __esm({
    "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/constant.js"() {
      "use strict";
      __name(constant_default9, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/point.js
  function x4(p3) {
    return p3[0];
  }
  function y5(p3) {
    return p3[1];
  }
  var init_point2 = __esm({
    "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/point.js"() {
      "use strict";
      __name(x4, "x");
      __name(y5, "y");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/array.js
  var slice3;
  var init_array4 = __esm({
    "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/array.js"() {
      "use strict";
      slice3 = Array.prototype.slice;
    }
  });

  // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/link/index.js
  function linkSource(d3) {
    return d3.source;
  }
  function linkTarget(d3) {
    return d3.target;
  }
  function link(curve) {
    var source = linkSource, target = linkTarget, x5 = x4, y6 = y5, context = null;
    function link2() {
      var buffer, argv = slice3.call(arguments), s2 = source.apply(this, argv), t4 = target.apply(this, argv);
      if (!context) context = buffer = path_default2();
      curve(context, +x5.apply(this, (argv[0] = s2, argv)), +y6.apply(this, argv), +x5.apply(this, (argv[0] = t4, argv)), +y6.apply(this, argv));
      if (buffer) return context = null, buffer + "" || null;
    }
    __name(link2, "link");
    link2.source = function(_3) {
      return arguments.length ? (source = _3, link2) : source;
    };
    link2.target = function(_3) {
      return arguments.length ? (target = _3, link2) : target;
    };
    link2.x = function(_3) {
      return arguments.length ? (x5 = typeof _3 === "function" ? _3 : constant_default9(+_3), link2) : x5;
    };
    link2.y = function(_3) {
      return arguments.length ? (y6 = typeof _3 === "function" ? _3 : constant_default9(+_3), link2) : y6;
    };
    link2.context = function(_3) {
      return arguments.length ? (context = _3 == null ? null : _3, link2) : context;
    };
    return link2;
  }
  function curveHorizontal(context, x0, y0, x1, y1) {
    context.moveTo(x0, y0);
    context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
  }
  function linkHorizontal() {
    return link(curveHorizontal);
  }
  var init_link = __esm({
    "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/link/index.js"() {
      "use strict";
      init_src34();
      init_array4();
      init_constant10();
      init_point2();
      __name(linkSource, "linkSource");
      __name(linkTarget, "linkTarget");
      __name(link, "link");
      __name(curveHorizontal, "curveHorizontal");
      __name(linkHorizontal, "linkHorizontal");
    }
  });

  // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/index.js
  var init_src35 = __esm({
    "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/index.js"() {
      "use strict";
      init_link();
    }
  });

  // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankeyLinkHorizontal.js
  function horizontalSource(d3) {
    return [d3.source.x1, d3.y0];
  }
  function horizontalTarget(d3) {
    return [d3.target.x0, d3.y1];
  }
  function sankeyLinkHorizontal_default() {
    return linkHorizontal().source(horizontalSource).target(horizontalTarget);
  }
  var init_sankeyLinkHorizontal = __esm({
    "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankeyLinkHorizontal.js"() {
      "use strict";
      init_src35();
      __name(horizontalSource, "horizontalSource");
      __name(horizontalTarget, "horizontalTarget");
      __name(sankeyLinkHorizontal_default, "default");
    }
  });

  // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/index.js
  var init_src36 = __esm({
    "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/index.js"() {
      "use strict";
      init_sankey2();
      init_align();
      init_sankeyLinkHorizontal();
    }
  });

  // src/rendering-util/uid.ts
  var Uid;
  var init_uid = __esm({
    "src/rendering-util/uid.ts"() {
      "use strict";
      Uid = class _Uid {
        static {
          __name(this, "Uid");
        }
        static {
          this.count = 0;
        }
        static next(name) {
          return new _Uid(name + ++_Uid.count);
        }
        constructor(id41) {
          this.id = id41;
          this.href = `#${id41}`;
        }
        toString() {
          return "url(" + this.href + ")";
        }
      };
    }
  });

  // src/diagrams/sankey/sankeyRenderer.ts
  var alignmentsMap, findCentralNodeLayer, draw21, sankeyRenderer_default;
  var init_sankeyRenderer = __esm({
    "src/diagrams/sankey/sankeyRenderer.ts"() {
      "use strict";
      init_diagramAPI();
      init_src32();
      init_src36();
      init_setupGraphViewbox();
      init_uid();
      alignmentsMap = {
        left: left2,
        right: right2,
        center: center3,
        justify
      };
      findCentralNodeLayer = /* @__PURE__ */ __name((nodes5) => {
        let maxValue = 0;
        let centralLayer = 0;
        for (const node2 of nodes5) {
          const value2 = node2.value ?? 0;
          if (value2 > maxValue) {
            maxValue = value2;
            centralLayer = node2.layer ?? 0;
          }
        }
        return centralLayer;
      }, "findCentralNodeLayer");
      draw21 = /* @__PURE__ */ __name(function(text4, id41, _version, diagObj) {
        const { securityLevel, sankey: conf5 } = getConfig2();
        const defaultSankeyConfig = defaultConfig2.sankey;
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const svg2 = securityLevel === "sandbox" ? root4.select(`[id="${id41}"]`) : select_default2(`[id="${id41}"]`);
        const width3 = conf5?.width ?? defaultSankeyConfig.width;
        const height2 = conf5?.height ?? defaultSankeyConfig.width;
        const useMaxWidth = conf5?.useMaxWidth ?? defaultSankeyConfig.useMaxWidth;
        const nodeAlignment = conf5?.nodeAlignment ?? defaultSankeyConfig.nodeAlignment;
        const prefix = conf5?.prefix ?? defaultSankeyConfig.prefix;
        const suffix = conf5?.suffix ?? defaultSankeyConfig.suffix;
        const showValues = conf5?.showValues ?? defaultSankeyConfig.showValues;
        const nodeWidth = conf5?.nodeWidth ?? defaultSankeyConfig.nodeWidth ?? 10;
        const nodePadding = conf5?.nodePadding ?? defaultSankeyConfig.nodePadding ?? 12;
        const labelStyle = conf5?.labelStyle ?? defaultSankeyConfig.labelStyle ?? "legacy";
        const nodeColors = conf5?.nodeColors ?? {};
        const graph = diagObj.db.getGraph();
        const nodeAlign = alignmentsMap[nodeAlignment];
        const sankey = Sankey().nodeId((d3) => d3.id).nodeWidth(nodeWidth).nodePadding(nodePadding + (showValues ? 15 : 0)).nodeAlign(nodeAlign).extent([
          [0, 0],
          [width3, height2]
        ]);
        sankey(graph);
        const centralNodeLayer = findCentralNodeLayer(graph.nodes);
        const colorScheme = ordinal(Tableau10_default);
        const getNodeColor = /* @__PURE__ */ __name((nodeId) => {
          return nodeColors[nodeId] ?? colorScheme(nodeId);
        }, "getNodeColor");
        svg2.append("g").attr("class", "nodes").selectAll(".node").data(graph.nodes).join("g").attr("class", "node").attr("id", (d3) => (d3.uid = Uid.next("node-")).id).attr("transform", function(d3) {
          return "translate(" + d3.x0 + "," + d3.y0 + ")";
        }).attr("x", (d3) => d3.x0).attr("y", (d3) => d3.y0).append("rect").attr("height", (d3) => {
          return d3.y1 - d3.y0;
        }).attr("width", (d3) => d3.x1 - d3.x0).attr("fill", (d3) => getNodeColor(d3.id));
        const getText = /* @__PURE__ */ __name(({ id: id42, value: value2 }) => {
          if (!showValues) {
            return id42;
          }
          return `${id42}
${prefix}${Math.round(value2 * 100) / 100}${suffix}`;
        }, "getText");
        const getLabelPosition = /* @__PURE__ */ __name((d3) => {
          if (labelStyle === "outlined") {
            const nodeLayer = d3.layer ?? 0;
            if (nodeLayer < centralNodeLayer) {
              return { x: d3.x0 - 6, anchor: "end" };
            }
            return { x: d3.x1 + 6, anchor: "start" };
          }
          if (d3.x0 < width3 / 2) {
            return { x: d3.x1 + 6, anchor: "start" };
          }
          return { x: d3.x0 - 6, anchor: "end" };
        }, "getLabelPosition");
        const labelsGroup = svg2.append("g").attr("class", "node-labels").attr("font-size", 14);
        const appendLabel = /* @__PURE__ */ __name((className) => labelsGroup.selectAll(className ? `.${className}` : "text").data(graph.nodes).join("text").attr("class", className ?? null).attr("x", (d3) => getLabelPosition(d3).x).attr("y", (d3) => (d3.y1 + d3.y0) / 2).attr("dy", `${showValues ? "0" : "0.35"}em`).attr("text-anchor", (d3) => getLabelPosition(d3).anchor).text(getText), "appendLabel");
        if (labelStyle === "outlined") {
          appendLabel("sankey-label-bg");
          appendLabel("sankey-label-fg");
        } else {
          appendLabel();
        }
        const link2 = svg2.append("g").attr("class", "links").attr("fill", "none").attr("stroke-opacity", 0.5).selectAll(".link").data(graph.links).join("g").attr("class", "link").style("mix-blend-mode", "multiply");
        const linkColor = conf5?.linkColor ?? "gradient";
        if (linkColor === "gradient") {
          const gradient = link2.append("linearGradient").attr("id", (d3) => (d3.uid = Uid.next("linearGradient-")).id).attr("gradientUnits", "userSpaceOnUse").attr("x1", (d3) => d3.source.x1).attr("x2", (d3) => d3.target.x0);
          gradient.append("stop").attr("offset", "0%").attr("stop-color", (d3) => getNodeColor(d3.source.id));
          gradient.append("stop").attr("offset", "100%").attr("stop-color", (d3) => getNodeColor(d3.target.id));
        }
        let coloring;
        switch (linkColor) {
          case "gradient":
            coloring = /* @__PURE__ */ __name((d3) => d3.uid, "coloring");
            break;
          case "source":
            coloring = /* @__PURE__ */ __name((d3) => getNodeColor(d3.source.id), "coloring");
            break;
          case "target":
            coloring = /* @__PURE__ */ __name((d3) => getNodeColor(d3.target.id), "coloring");
            break;
          default:
            coloring = linkColor;
        }
        link2.append("path").attr("d", sankeyLinkHorizontal_default()).attr("stroke", coloring).attr("stroke-width", (d3) => Math.max(1, d3.width));
        setupGraphViewbox(void 0, svg2, 0, useMaxWidth);
      }, "draw");
      sankeyRenderer_default = {
        draw: draw21
      };
    }
  });

  // src/diagrams/sankey/sankeyUtils.ts
  var prepareTextForParsing;
  var init_sankeyUtils = __esm({
    "src/diagrams/sankey/sankeyUtils.ts"() {
      "use strict";
      prepareTextForParsing = /* @__PURE__ */ __name((text4) => {
        const textToParse = text4.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g, "").replaceAll(/([\n\r])+/g, "\n").trim();
        return textToParse;
      }, "prepareTextForParsing");
    }
  });

  // src/diagrams/sankey/styles.js
  var getStyles17, styles_default16;
  var init_styles16 = __esm({
    "src/diagrams/sankey/styles.js"() {
      "use strict";
      getStyles17 = /* @__PURE__ */ __name((options2) => `.label {
    font-family: ${options2.fontFamily};
  }

  .node-labels {
    font-family: ${options2.fontFamily};
  }

  /* Outlined label style - background stroke for better readability */
  .sankey-label-bg {
    stroke: ${options2.mainBkg || options2.background || "#fff"};
    stroke-width: 4px;
    stroke-linejoin: round;
    paint-order: stroke;
  }

  /* Foreground label text */
  .sankey-label-fg {
    fill: ${options2.textColor};
  }

  /* Node styling */
  .node rect {
    shape-rendering: crispEdges;
  }

  /* Link styling */
  .link {
    fill: none;
    stroke-opacity: 0.5;
    mix-blend-mode: multiply;
  }
`, "getStyles");
      styles_default16 = getStyles17;
    }
  });

  // src/diagrams/sankey/sankeyDiagram.ts
  var sankeyDiagram_exports = {};
  __export(sankeyDiagram_exports, {
    diagram: () => diagram22
  });
  var originalParse, diagram22;
  var init_sankeyDiagram = __esm({
    "src/diagrams/sankey/sankeyDiagram.ts"() {
      "use strict";
      init_sankey();
      init_sankeyDB();
      init_sankeyRenderer();
      init_sankeyUtils();
      init_styles16();
      originalParse = sankey_default.parse.bind(sankey_default);
      sankey_default.parse = (text4) => originalParse(prepareTextForParsing(text4));
      diagram22 = {
        styles: styles_default16,
        parser: sankey_default,
        db: sankeyDB_default,
        renderer: sankeyRenderer_default
      };
    }
  });

  // src/diagrams/packet/db.ts
  var DEFAULT_PACKET_CONFIG, PacketDB;
  var init_db = __esm({
    "src/diagrams/packet/db.ts"() {
      "use strict";
      init_config();
      init_defaultConfig();
      init_utils2();
      init_commonDb();
      DEFAULT_PACKET_CONFIG = defaultConfig_default.packet;
      PacketDB = class {
        constructor() {
          this.packet = [];
          this.setAccTitle = setAccTitle;
          this.getAccTitle = getAccTitle;
          this.setDiagramTitle = setDiagramTitle;
          this.getDiagramTitle = getDiagramTitle;
          this.getAccDescription = getAccDescription;
          this.setAccDescription = setAccDescription;
        }
        static {
          __name(this, "PacketDB");
        }
        getConfig() {
          const config3 = cleanAndMerge({
            ...DEFAULT_PACKET_CONFIG,
            ...getConfig().packet
          });
          if (config3.showBits) {
            config3.paddingY += 10;
          }
          return config3;
        }
        getPacket() {
          return this.packet;
        }
        pushWord(word) {
          if (word.length > 0) {
            this.packet.push(word);
          }
        }
        clear() {
          clear();
          this.packet = [];
        }
      };
    }
  });

  // src/diagrams/packet/parser.ts
  var maxPacketSize, populate16, getNextFittingBlock, parser19;
  var init_parser = __esm({
    "src/diagrams/packet/parser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_db();
      maxPacketSize = 1e4;
      populate16 = /* @__PURE__ */ __name((ast, db12) => {
        populateCommonDb(ast, db12);
        let lastBit = -1;
        let word = [];
        let row = 1;
        const { bitsPerRow } = db12.getConfig();
        for (let { start: start3, end: end2, bits, label } of ast.blocks) {
          if (start3 !== void 0 && end2 !== void 0 && end2 < start3) {
            throw new Error(`Packet block ${start3} - ${end2} is invalid. End must be greater than start.`);
          }
          start3 ??= lastBit + 1;
          if (start3 !== lastBit + 1) {
            throw new Error(
              `Packet block ${start3} - ${end2 ?? start3} is not contiguous. It should start from ${lastBit + 1}.`
            );
          }
          if (bits === 0) {
            throw new Error(`Packet block ${start3} is invalid. Cannot have a zero bit field.`);
          }
          end2 ??= start3 + (bits ?? 1) - 1;
          bits ??= end2 - start3 + 1;
          lastBit = end2;
          log.debug(`Packet block ${start3} - ${lastBit} with label ${label}`);
          while (word.length <= bitsPerRow + 1 && db12.getPacket().length < maxPacketSize) {
            const [block2, nextBlock] = getNextFittingBlock({ start: start3, end: end2, bits, label }, row, bitsPerRow);
            word.push(block2);
            if (block2.end + 1 === row * bitsPerRow) {
              db12.pushWord(word);
              word = [];
              row++;
            }
            if (!nextBlock) {
              break;
            }
            ({ start: start3, end: end2, bits, label } = nextBlock);
          }
        }
        db12.pushWord(word);
      }, "populate");
      getNextFittingBlock = /* @__PURE__ */ __name((block2, row, bitsPerRow) => {
        if (block2.start === void 0) {
          throw new Error("start should have been set during first phase");
        }
        if (block2.end === void 0) {
          throw new Error("end should have been set during first phase");
        }
        if (block2.start > block2.end) {
          throw new Error(`Block start ${block2.start} is greater than block end ${block2.end}.`);
        }
        if (block2.end + 1 <= row * bitsPerRow) {
          return [block2, void 0];
        }
        const rowEnd = row * bitsPerRow - 1;
        const rowStart = row * bitsPerRow;
        return [
          {
            start: block2.start,
            end: rowEnd,
            label: block2.label,
            bits: rowEnd - block2.start
          },
          {
            start: rowStart,
            end: block2.end,
            label: block2.label,
            bits: block2.end - rowStart
          }
        ];
      }, "getNextFittingBlock");
      parser19 = {
        // @ts-expect-error - PacketDB is not assignable to DiagramDB
        parser: { yy: void 0 },
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("packet", input);
          const db12 = parser19.parser?.yy;
          if (!(db12 instanceof PacketDB)) {
            throw new Error(
              "parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues."
            );
          }
          log.debug(ast);
          populate16(ast, db12);
        }, "parse")
      };
    }
  });

  // src/diagrams/packet/renderer.ts
  var draw22, drawWord, renderer6;
  var init_renderer = __esm({
    "src/diagrams/packet/renderer.ts"() {
      "use strict";
      init_selectSvgElement();
      init_setupGraphViewbox();
      draw22 = /* @__PURE__ */ __name((_text, id41, _version, diagram38) => {
        const db12 = diagram38.db;
        const config3 = db12.getConfig();
        const { rowHeight, paddingY, bitWidth, bitsPerRow } = config3;
        const words = db12.getPacket();
        const title2 = db12.getDiagramTitle();
        const totalRowHeight = rowHeight + paddingY;
        const svgHeight = totalRowHeight * (words.length + 1) - (title2 ? 0 : rowHeight);
        const svgWidth = bitWidth * bitsPerRow + 2;
        const svg2 = selectSvgElement(id41);
        svg2.attr("viewBox", `0 0 ${svgWidth} ${svgHeight}`);
        configureSvgSize(svg2, svgHeight, svgWidth, config3.useMaxWidth);
        for (const [word, packet2] of words.entries()) {
          drawWord(svg2, packet2, word, config3);
        }
        svg2.append("text").text(title2).attr("x", svgWidth / 2).attr("y", svgHeight - totalRowHeight / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("class", "packetTitle");
      }, "draw");
      drawWord = /* @__PURE__ */ __name((svg2, word, rowNumber, { rowHeight, paddingX, paddingY, bitWidth, bitsPerRow, showBits }) => {
        const group2 = svg2.append("g");
        const wordY = rowNumber * (rowHeight + paddingY) + paddingY;
        for (const block2 of word) {
          const blockX = block2.start % bitsPerRow * bitWidth + 1;
          const width3 = (block2.end - block2.start + 1) * bitWidth - paddingX;
          group2.append("rect").attr("x", blockX).attr("y", wordY).attr("width", width3).attr("height", rowHeight).attr("class", "packetBlock");
          group2.append("text").attr("x", blockX + width3 / 2).attr("y", wordY + rowHeight / 2).attr("class", "packetLabel").attr("dominant-baseline", "middle").attr("text-anchor", "middle").text(block2.label);
          if (!showBits) {
            continue;
          }
          const isSingleBlock = block2.end === block2.start;
          const bitNumberY = wordY - 2;
          group2.append("text").attr("x", blockX + (isSingleBlock ? width3 / 2 : 0)).attr("y", bitNumberY).attr("class", "packetByte start").attr("dominant-baseline", "auto").attr("text-anchor", isSingleBlock ? "middle" : "start").text(block2.start);
          if (!isSingleBlock) {
            group2.append("text").attr("x", blockX + width3).attr("y", bitNumberY).attr("class", "packetByte end").attr("dominant-baseline", "auto").attr("text-anchor", "end").text(block2.end);
          }
        }
      }, "drawWord");
      renderer6 = { draw: draw22 };
    }
  });

  // src/diagrams/packet/styles.ts
  var defaultPacketStyleOptions, styles2;
  var init_styles17 = __esm({
    "src/diagrams/packet/styles.ts"() {
      "use strict";
      init_utils2();
      defaultPacketStyleOptions = {
        byteFontSize: "10px",
        startByteColor: "black",
        endByteColor: "black",
        labelColor: "black",
        labelFontSize: "12px",
        titleColor: "black",
        titleFontSize: "14px",
        blockStrokeColor: "black",
        blockStrokeWidth: "1",
        blockFillColor: "#efefef"
      };
      styles2 = /* @__PURE__ */ __name(({ packet: packet2 } = {}) => {
        const options2 = cleanAndMerge(defaultPacketStyleOptions, packet2);
        return `
	.packetByte {
		font-size: ${options2.byteFontSize};
	}
	.packetByte.start {
		fill: ${options2.startByteColor};
	}
	.packetByte.end {
		fill: ${options2.endByteColor};
	}
	.packetLabel {
		fill: ${options2.labelColor};
		font-size: ${options2.labelFontSize};
	}
	.packetTitle {
		fill: ${options2.titleColor};
		font-size: ${options2.titleFontSize};
	}
	.packetBlock {
		stroke: ${options2.blockStrokeColor};
		stroke-width: ${options2.blockStrokeWidth};
		fill: ${options2.blockFillColor};
	}
	`;
      }, "styles");
    }
  });

  // src/diagrams/packet/diagram.ts
  var diagram_exports = {};
  __export(diagram_exports, {
    diagram: () => diagram23
  });
  var diagram23;
  var init_diagram = __esm({
    "src/diagrams/packet/diagram.ts"() {
      "use strict";
      init_db();
      init_parser();
      init_renderer();
      init_styles17();
      diagram23 = {
        parser: parser19,
        get db() {
          return new PacketDB();
        },
        renderer: renderer6,
        styles: styles2
      };
    }
  });

  // src/diagrams/radar/db.ts
  var defaultOptions, MAX_TICKS, defaultRadarData, data4, DEFAULT_RADAR_CONFIG, getConfig5, getAxes, getCurves, getOptions2, setAxes, setCurves, computeCurveEntries, setOptions7, clear17, db5;
  var init_db2 = __esm({
    "src/diagrams/radar/db.ts"() {
      "use strict";
      init_config();
      init_defaultConfig();
      init_utils2();
      init_commonDb();
      init_logger();
      defaultOptions = {
        showLegend: true,
        ticks: 5,
        max: null,
        min: 0,
        graticule: "circle"
      };
      MAX_TICKS = 32;
      defaultRadarData = {
        axes: [],
        curves: [],
        options: defaultOptions
      };
      data4 = structuredClone(defaultRadarData);
      DEFAULT_RADAR_CONFIG = defaultConfig_default.radar;
      getConfig5 = /* @__PURE__ */ __name(() => {
        const config3 = cleanAndMerge({
          ...DEFAULT_RADAR_CONFIG,
          ...getConfig().radar
        });
        return config3;
      }, "getConfig");
      getAxes = /* @__PURE__ */ __name(() => data4.axes, "getAxes");
      getCurves = /* @__PURE__ */ __name(() => data4.curves, "getCurves");
      getOptions2 = /* @__PURE__ */ __name(() => data4.options, "getOptions");
      setAxes = /* @__PURE__ */ __name((axes) => {
        data4.axes = axes.map((axis2) => {
          return {
            name: axis2.name,
            label: axis2.label ?? axis2.name
          };
        });
      }, "setAxes");
      setCurves = /* @__PURE__ */ __name((curves) => {
        data4.curves = curves.map((curve) => {
          return {
            name: curve.name,
            label: curve.label ?? curve.name,
            entries: computeCurveEntries(curve.entries)
          };
        });
      }, "setCurves");
      computeCurveEntries = /* @__PURE__ */ __name((entries2) => {
        if (entries2[0].axis == void 0) {
          return entries2.map((entry) => entry.value);
        }
        const axes = getAxes();
        if (axes.length === 0) {
          throw new Error("Axes must be populated before curves for reference entries");
        }
        return axes.map((axis2) => {
          const entry = entries2.find((entry2) => entry2.axis?.$refText === axis2.name);
          if (entry === void 0) {
            throw new Error("Missing entry for axis " + axis2.label);
          }
          return entry.value;
        });
      }, "computeCurveEntries");
      setOptions7 = /* @__PURE__ */ __name((options2) => {
        const optionMap = options2.reduce(
          (acc, option2) => {
            acc[option2.name] = option2;
            return acc;
          },
          {}
        );
        data4.options = {
          showLegend: optionMap.showLegend?.value ?? defaultOptions.showLegend,
          ticks: optionMap.ticks?.value ?? defaultOptions.ticks,
          max: optionMap.max?.value ?? defaultOptions.max,
          min: optionMap.min?.value ?? defaultOptions.min,
          graticule: optionMap.graticule?.value ?? defaultOptions.graticule
        };
        if (data4.options.ticks > MAX_TICKS) {
          log.warn(
            `Radar diagram ticks (${data4.options.ticks}) exceeds maximum allowed (${MAX_TICKS}). Using ${MAX_TICKS} instead.`
          );
          data4.options.ticks = MAX_TICKS;
        }
      }, "setOptions");
      clear17 = /* @__PURE__ */ __name(() => {
        clear();
        data4 = structuredClone(defaultRadarData);
      }, "clear");
      db5 = {
        getAxes,
        getCurves,
        getOptions: getOptions2,
        setAxes,
        setCurves,
        setOptions: setOptions7,
        getConfig: getConfig5,
        clear: clear17,
        setAccTitle,
        getAccTitle,
        setDiagramTitle,
        getDiagramTitle,
        getAccDescription,
        setAccDescription
      };
    }
  });

  // src/diagrams/radar/parser.ts
  var populate17, parser20;
  var init_parser2 = __esm({
    "src/diagrams/radar/parser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_db2();
      populate17 = /* @__PURE__ */ __name((ast) => {
        populateCommonDb(ast, db5);
        const { axes, curves, options: options2 } = ast;
        db5.setAxes(axes);
        db5.setCurves(curves);
        db5.setOptions(options2);
      }, "populate");
      parser20 = {
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("radar", input);
          log.debug(ast);
          populate17(ast);
        }, "parse")
      };
    }
  });

  // src/diagrams/radar/renderer.ts
  function drawCurves(g2, axes, curves, minValue, maxValue, graticule, config3) {
    const numAxes = axes.length;
    const radius2 = Math.min(config3.width, config3.height) / 2;
    curves.forEach((curve, index) => {
      if (curve.entries.length !== numAxes) {
        return;
      }
      const points = curve.entries.map((entry, i2) => {
        const angle2 = 2 * Math.PI * i2 / numAxes - Math.PI / 2;
        const r2 = relativeRadius(entry, minValue, maxValue, radius2);
        const x5 = r2 * Math.cos(angle2);
        const y6 = r2 * Math.sin(angle2);
        return { x: x5, y: y6 };
      });
      if (graticule === "circle") {
        g2.append("path").attr("d", closedRoundCurve(points, config3.curveTension)).attr("class", `radarCurve-${index}`);
      } else if (graticule === "polygon") {
        g2.append("polygon").attr("points", points.map((p3) => `${p3.x},${p3.y}`).join(" ")).attr("class", `radarCurve-${index}`);
      }
    });
  }
  function relativeRadius(value2, minValue, maxValue, radius2) {
    const clippedValue = Math.min(Math.max(value2, minValue), maxValue);
    return radius2 * (clippedValue - minValue) / (maxValue - minValue);
  }
  function closedRoundCurve(points, tension) {
    const numPoints = points.length;
    let d3 = `M${points[0].x},${points[0].y}`;
    for (let i2 = 0; i2 < numPoints; i2++) {
      const p0 = points[(i2 - 1 + numPoints) % numPoints];
      const p1 = points[i2];
      const p22 = points[(i2 + 1) % numPoints];
      const p3 = points[(i2 + 2) % numPoints];
      const cp1 = {
        x: p1.x + (p22.x - p0.x) * tension,
        y: p1.y + (p22.y - p0.y) * tension
      };
      const cp2 = {
        x: p22.x - (p3.x - p1.x) * tension,
        y: p22.y - (p3.y - p1.y) * tension
      };
      d3 += ` C${cp1.x},${cp1.y} ${cp2.x},${cp2.y} ${p22.x},${p22.y}`;
    }
    return `${d3} Z`;
  }
  function drawLegend(g2, curves, showLegend, config3) {
    if (!showLegend) {
      return;
    }
    const legendX = (config3.width / 2 + config3.marginRight) * 3 / 4;
    const legendY = -(config3.height / 2 + config3.marginTop) * 3 / 4;
    const lineHeight = 20;
    curves.forEach((curve, index) => {
      const itemGroup = g2.append("g").attr("transform", `translate(${legendX}, ${legendY + index * lineHeight})`);
      itemGroup.append("rect").attr("width", 12).attr("height", 12).attr("class", `radarLegendBox-${index}`);
      itemGroup.append("text").attr("x", 16).attr("y", 0).attr("class", "radarLegendText").text(curve.label);
    });
  }
  var draw23, drawFrame, drawGraticule, drawAxes2, renderer7;
  var init_renderer2 = __esm({
    "src/diagrams/radar/renderer.ts"() {
      "use strict";
      init_selectSvgElement();
      init_setupGraphViewbox();
      draw23 = /* @__PURE__ */ __name((_text, id41, _version, diagram38) => {
        const db12 = diagram38.db;
        const axes = db12.getAxes();
        const curves = db12.getCurves();
        const options2 = db12.getOptions();
        const config3 = db12.getConfig();
        const title2 = db12.getDiagramTitle();
        const svg2 = selectSvgElement(id41);
        const g2 = drawFrame(svg2, config3);
        const maxValue = options2.max ?? Math.max(...curves.map((curve) => Math.max(...curve.entries)));
        const minValue = options2.min;
        const radius2 = Math.min(config3.width, config3.height) / 2;
        drawGraticule(g2, axes, radius2, options2.ticks, options2.graticule);
        drawAxes2(g2, axes, radius2, config3);
        drawCurves(g2, axes, curves, minValue, maxValue, options2.graticule, config3);
        drawLegend(g2, curves, options2.showLegend, config3);
        g2.append("text").attr("class", "radarTitle").text(title2).attr("x", 0).attr("y", -config3.height / 2 - config3.marginTop);
      }, "draw");
      drawFrame = /* @__PURE__ */ __name((svg2, config3) => {
        const totalWidth = config3.width + config3.marginLeft + config3.marginRight;
        const totalHeight = config3.height + config3.marginTop + config3.marginBottom;
        const center4 = {
          x: config3.marginLeft + config3.width / 2,
          y: config3.marginTop + config3.height / 2
        };
        configureSvgSize(svg2, totalHeight, totalWidth, config3.useMaxWidth ?? true);
        svg2.attr("viewBox", `0 0 ${totalWidth} ${totalHeight}`).attr("overflow", "visible");
        return svg2.append("g").attr("transform", `translate(${center4.x}, ${center4.y})`);
      }, "drawFrame");
      drawGraticule = /* @__PURE__ */ __name((g2, axes, radius2, ticks2, graticule) => {
        if (graticule === "circle") {
          for (let i2 = 0; i2 < ticks2; i2++) {
            const r2 = radius2 * (i2 + 1) / ticks2;
            g2.append("circle").attr("r", r2).attr("class", "radarGraticule");
          }
        } else if (graticule === "polygon") {
          const numAxes = axes.length;
          for (let i2 = 0; i2 < ticks2; i2++) {
            const r2 = radius2 * (i2 + 1) / ticks2;
            const points = axes.map((_3, j3) => {
              const angle2 = 2 * j3 * Math.PI / numAxes - Math.PI / 2;
              const x5 = r2 * Math.cos(angle2);
              const y6 = r2 * Math.sin(angle2);
              return `${x5},${y6}`;
            }).join(" ");
            g2.append("polygon").attr("points", points).attr("class", "radarGraticule");
          }
        }
      }, "drawGraticule");
      drawAxes2 = /* @__PURE__ */ __name((g2, axes, radius2, config3) => {
        const numAxes = axes.length;
        for (let i2 = 0; i2 < numAxes; i2++) {
          const label = axes[i2].label;
          const angle2 = 2 * i2 * Math.PI / numAxes - Math.PI / 2;
          const cosA = Math.cos(angle2);
          const sinA2 = Math.sin(angle2);
          g2.append("line").attr("x1", 0).attr("y1", 0).attr("x2", radius2 * config3.axisScaleFactor * cosA).attr("y2", radius2 * config3.axisScaleFactor * sinA2).attr("class", "radarAxisLine");
          const textAnchor = cosA > 0.01 ? "start" : cosA < -0.01 ? "end" : "middle";
          const dominantBaseline = sinA2 > 0.01 ? "hanging" : sinA2 < -0.01 ? "auto" : "central";
          const labelPad = 4;
          g2.append("text").text(label).attr("x", radius2 * config3.axisLabelFactor * cosA + labelPad * cosA).attr("y", radius2 * config3.axisLabelFactor * sinA2 + labelPad * sinA2).attr("text-anchor", textAnchor).attr("dominant-baseline", dominantBaseline).attr("class", "radarAxisLabel");
        }
      }, "drawAxes");
      __name(drawCurves, "drawCurves");
      __name(relativeRadius, "relativeRadius");
      __name(closedRoundCurve, "closedRoundCurve");
      __name(drawLegend, "drawLegend");
      renderer7 = { draw: draw23 };
    }
  });

  // src/diagrams/radar/styles.ts
  var genIndexStyles, buildRadarStyleOptions, styles3;
  var init_styles18 = __esm({
    "src/diagrams/radar/styles.ts"() {
      "use strict";
      init_utils2();
      init_theme_default();
      init_config();
      genIndexStyles = /* @__PURE__ */ __name((themeVariables, radarOptions) => {
        let sections6 = "";
        for (let i2 = 0; i2 < themeVariables.THEME_COLOR_LIMIT; i2++) {
          const indexColor = themeVariables[`cScale${i2}`];
          sections6 += `
		.radarCurve-${i2} {
			color: ${indexColor};
			fill: ${indexColor};
			fill-opacity: ${radarOptions.curveOpacity};
			stroke: ${indexColor};
			stroke-width: ${radarOptions.curveStrokeWidth};
		}
		.radarLegendBox-${i2} {
			fill: ${indexColor};
			fill-opacity: ${radarOptions.curveOpacity};
			stroke: ${indexColor};
		}
		`;
        }
        return sections6;
      }, "genIndexStyles");
      buildRadarStyleOptions = /* @__PURE__ */ __name((radar2) => {
        const defaultThemeVariables2 = getThemeVariables3();
        const currentConfig2 = getConfig();
        const themeVariables = cleanAndMerge(defaultThemeVariables2, currentConfig2.themeVariables);
        const radarOptions = cleanAndMerge(themeVariables.radar, radar2);
        return { themeVariables, radarOptions };
      }, "buildRadarStyleOptions");
      styles3 = /* @__PURE__ */ __name(({ radar: radar2 } = {}) => {
        const { themeVariables, radarOptions } = buildRadarStyleOptions(radar2);
        return `
	.radarTitle {
		font-size: ${themeVariables.fontSize};
		color: ${themeVariables.titleColor};
		dominant-baseline: hanging;
		text-anchor: middle;
	}
	.radarAxisLine {
		stroke: ${radarOptions.axisColor};
		stroke-width: ${radarOptions.axisStrokeWidth};
	}
	.radarAxisLabel {
		font-size: ${radarOptions.axisLabelFontSize}px;
		color: ${radarOptions.axisColor};
	}
	.radarGraticule {
		fill: ${radarOptions.graticuleColor};
		fill-opacity: ${radarOptions.graticuleOpacity};
		stroke: ${radarOptions.graticuleColor};
		stroke-width: ${radarOptions.graticuleStrokeWidth};
	}
	.radarLegendText {
		text-anchor: start;
		font-size: ${radarOptions.legendFontSize}px;
		dominant-baseline: hanging;
	}
	${genIndexStyles(themeVariables, radarOptions)}
	`;
      }, "styles");
    }
  });

  // src/diagrams/radar/diagram.ts
  var diagram_exports2 = {};
  __export(diagram_exports2, {
    diagram: () => diagram24
  });
  var diagram24;
  var init_diagram2 = __esm({
    "src/diagrams/radar/diagram.ts"() {
      "use strict";
      init_db2();
      init_parser2();
      init_renderer2();
      init_styles18();
      diagram24 = {
        parser: parser20,
        db: db5,
        renderer: renderer7,
        styles: styles3
      };
    }
  });

  // src/diagrams/block/parser/block.jison
  var parser21, block_default;
  var init_block = __esm({
    "src/diagrams/block/parser/block.jison"() {
      "use strict";
      parser21 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 15], $V1 = [1, 7], $V2 = [1, 13], $V3 = [1, 14], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 10, 21, 28, 29, 30, 31, 39, 43, 46], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 10, 15, 16, 21, 28, 29, 30, 31, 39, 43, 46], $Vd = [8, 10, 15, 16, 21, 27, 28, 29, 30, 31, 39, 43, 46], $Ve = [1, 49];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "spaceLines": 3, "SPACELINE": 4, "NL": 5, "separator": 6, "SPACE": 7, "EOF": 8, "start": 9, "BLOCK_DIAGRAM_KEY": 10, "document": 11, "stop": 12, "statement": 13, "link": 14, "LINK": 15, "START_LINK": 16, "LINK_LABEL": 17, "STR": 18, "nodeStatement": 19, "columnsStatement": 20, "SPACE_BLOCK": 21, "blockStatement": 22, "classDefStatement": 23, "cssClassStatement": 24, "styleStatement": 25, "node": 26, "SIZE": 27, "COLUMNS": 28, "id-block": 29, "end": 30, "NODE_ID": 31, "nodeShapeNLabel": 32, "dirList": 33, "DIR": 34, "NODE_DSTART": 35, "NODE_DEND": 36, "BLOCK_ARROW_START": 37, "BLOCK_ARROW_END": 38, "classDef": 39, "CLASSDEF_ID": 40, "CLASSDEF_STYLEOPTS": 41, "DEFAULT": 42, "class": 43, "CLASSENTITY_IDS": 44, "STYLECLASS": 45, "style": 46, "STYLE_ENTITY_IDS": 47, "STYLE_DEFINITION_DATA": 48, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 4: "SPACELINE", 5: "NL", 7: "SPACE", 8: "EOF", 10: "BLOCK_DIAGRAM_KEY", 15: "LINK", 16: "START_LINK", 17: "LINK_LABEL", 18: "STR", 21: "SPACE_BLOCK", 27: "SIZE", 28: "COLUMNS", 29: "id-block", 30: "end", 31: "NODE_ID", 34: "DIR", 35: "NODE_DSTART", 36: "NODE_DEND", 37: "BLOCK_ARROW_START", 38: "BLOCK_ARROW_END", 39: "classDef", 40: "CLASSDEF_ID", 41: "CLASSDEF_STYLEOPTS", 42: "DEFAULT", 43: "class", 44: "CLASSENTITY_IDS", 45: "STYLECLASS", 46: "style", 47: "STYLE_ENTITY_IDS", 48: "STYLE_DEFINITION_DATA" },
          productions_: [0, [3, 1], [3, 2], [3, 2], [6, 1], [6, 1], [6, 1], [9, 3], [12, 1], [12, 1], [12, 2], [12, 2], [11, 1], [11, 2], [14, 1], [14, 4], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [19, 3], [19, 2], [19, 1], [20, 1], [22, 4], [22, 3], [26, 1], [26, 2], [33, 1], [33, 2], [32, 3], [32, 4], [23, 3], [23, 3], [24, 3], [25, 3]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 4:
                yy.getLogger().debug("Rule: separator (NL) ");
                break;
              case 5:
                yy.getLogger().debug("Rule: separator (Space) ");
                break;
              case 6:
                yy.getLogger().debug("Rule: separator (EOF) ");
                break;
              case 7:
                yy.getLogger().debug("Rule: hierarchy: ", $$[$0 - 1]);
                yy.setHierarchy($$[$0 - 1]);
                break;
              case 8:
                yy.getLogger().debug("Stop NL ");
                break;
              case 9:
                yy.getLogger().debug("Stop EOF ");
                break;
              case 10:
                yy.getLogger().debug("Stop NL2 ");
                break;
              case 11:
                yy.getLogger().debug("Stop EOF2 ");
                break;
              case 12:
                yy.getLogger().debug("Rule: statement: ", $$[$0]);
                typeof $$[$0].length === "number" ? this.$ = $$[$0] : this.$ = [$$[$0]];
                break;
              case 13:
                yy.getLogger().debug("Rule: statement #2: ", $$[$0 - 1]);
                this.$ = [$$[$0 - 1]].concat($$[$0]);
                break;
              case 14:
                yy.getLogger().debug("Rule: link: ", $$[$0], yytext);
                this.$ = { edgeTypeStr: $$[$0], label: "" };
                break;
              case 15:
                yy.getLogger().debug("Rule: LABEL link: ", $$[$0 - 3], $$[$0 - 1], $$[$0]);
                this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] };
                break;
              case 18:
                const num = parseInt($$[$0]);
                const spaceId = yy.generateId();
                this.$ = { id: spaceId, type: "space", label: "", width: num, children: [] };
                break;
              case 23:
                yy.getLogger().debug("Rule: (nodeStatement link node) ", $$[$0 - 2], $$[$0 - 1], $$[$0], " typestr: ", $$[$0 - 1].edgeTypeStr);
                const edgeData2 = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr);
                const startEdgeData = yy.edgeStrToEdgeStartData($$[$0 - 1].edgeTypeStr);
                const lineThickness = yy.edgeStrToThickness($$[$0 - 1].edgeTypeStr);
                const linePattern = yy.edgeStrToPattern($$[$0 - 1].edgeTypeStr);
                this.$ = [
                  { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions },
                  { id: $$[$0 - 2].id + "-" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: "edge", thickness: lineThickness, pattern: linePattern, directions: $$[$0].directions, arrowTypeEnd: edgeData2, arrowTypeStart: startEdgeData },
                  { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions }
                ];
                break;
              case 24:
                yy.getLogger().debug("Rule: nodeStatement (abc88 node size) ", $$[$0 - 1], $$[$0]);
                this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) };
                break;
              case 25:
                yy.getLogger().debug("Rule: nodeStatement (node) ", $$[$0]);
                this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 };
                break;
              case 26:
                yy.getLogger().debug("APA123", this ? this : "na");
                yy.getLogger().debug("COLUMNS: ", $$[$0]);
                this.$ = { type: "column-setting", columns: $$[$0] === "auto" ? -1 : parseInt($$[$0]) };
                break;
              case 27:
                yy.getLogger().debug("Rule: id-block statement : ", $$[$0 - 2], $$[$0 - 1]);
                const id210 = yy.generateId();
                this.$ = { ...$$[$0 - 2], type: "composite", children: $$[$0 - 1] };
                break;
              case 28:
                yy.getLogger().debug("Rule: blockStatement : ", $$[$0 - 2], $$[$0 - 1], $$[$0]);
                const id41 = yy.generateId();
                this.$ = { id: id41, type: "composite", label: "", children: $$[$0 - 1] };
                break;
              case 29:
                yy.getLogger().debug("Rule: node (NODE_ID separator): ", $$[$0]);
                this.$ = { id: $$[$0] };
                break;
              case 30:
                yy.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ", $$[$0 - 1], $$[$0]);
                this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions };
                break;
              case 31:
                yy.getLogger().debug("Rule: dirList: ", $$[$0]);
                this.$ = [$$[$0]];
                break;
              case 32:
                yy.getLogger().debug("Rule: dirList: ", $$[$0 - 1], $$[$0]);
                this.$ = [$$[$0 - 1]].concat($$[$0]);
                break;
              case 33:
                yy.getLogger().debug("Rule: nodeShapeNLabel: ", $$[$0 - 2], $$[$0 - 1], $$[$0]);
                this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] };
                break;
              case 34:
                yy.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ", $$[$0 - 3], $$[$0 - 2], " #3:", $$[$0 - 1], $$[$0]);
                this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] };
                break;
              case 35:
              case 36:
                this.$ = { type: "classDef", id: $$[$0 - 1].trim(), css: $$[$0].trim() };
                break;
              case 37:
                this.$ = { type: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };
                break;
              case 38:
                this.$ = { type: "applyStyles", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() };
                break;
            }
          }, "anonymous"),
          table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 10: $V0, 11: 3, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 8: [1, 20] }, o2($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 10: $V0, 21: $V1, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }), o2($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o2($V9, [2, 17]), o2($V9, [2, 18]), o2($V9, [2, 19]), o2($V9, [2, 20]), o2($V9, [2, 21]), o2($V9, [2, 22]), o2($Vc, [2, 25], { 27: [1, 25] }), o2($V9, [2, 26]), { 19: 26, 26: 12, 31: $V4 }, { 10: $V0, 11: 27, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 40: [1, 28], 42: [1, 29] }, { 44: [1, 30] }, { 47: [1, 31] }, o2($Vd, [2, 29], { 32: 32, 35: [1, 33], 37: [1, 34] }), { 1: [2, 7] }, o2($V8, [2, 13]), { 26: 35, 31: $V4 }, { 31: [2, 14] }, { 17: [1, 36] }, o2($Vc, [2, 24]), { 10: $V0, 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 30: [1, 38] }, { 41: [1, 39] }, { 41: [1, 40] }, { 45: [1, 41] }, { 48: [1, 42] }, o2($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o2($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o2($V9, [2, 28]), o2($V9, [2, 35]), o2($V9, [2, 36]), o2($V9, [2, 37]), o2($V9, [2, 38]), { 36: [1, 47] }, { 33: 48, 34: $Ve }, { 15: [1, 50] }, o2($V9, [2, 27]), o2($Vd, [2, 33]), { 38: [1, 51] }, { 33: 52, 34: $Ve, 38: [2, 31] }, { 31: [2, 15] }, o2($Vd, [2, 34]), { 38: [2, 32] }],
          defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: {},
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  yy.getLogger().debug("Found block-beta");
                  return 10;
                  break;
                case 1:
                  yy.getLogger().debug("Found id-block");
                  return 29;
                  break;
                case 2:
                  yy.getLogger().debug("Found block");
                  return 10;
                  break;
                case 3:
                  yy.getLogger().debug(".", yy_.yytext);
                  break;
                case 4:
                  yy.getLogger().debug("_", yy_.yytext);
                  break;
                case 5:
                  return 5;
                  break;
                case 6:
                  yy_.yytext = -1;
                  return 28;
                  break;
                case 7:
                  yy_.yytext = yy_.yytext.replace(/columns\s+/, "");
                  yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext);
                  return 28;
                  break;
                case 8:
                  this.pushState("md_string");
                  break;
                case 9:
                  return "MD_STR";
                  break;
                case 10:
                  this.popState();
                  break;
                case 11:
                  this.pushState("string");
                  break;
                case 12:
                  yy.getLogger().debug("LEX: POPPING STR:", yy_.yytext);
                  this.popState();
                  break;
                case 13:
                  yy.getLogger().debug("LEX: STR end:", yy_.yytext);
                  return "STR";
                  break;
                case 14:
                  yy_.yytext = yy_.yytext.replace(/space\:/, "");
                  yy.getLogger().debug("SPACE NUM (LEX)", yy_.yytext);
                  return 21;
                  break;
                case 15:
                  yy_.yytext = "1";
                  yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext);
                  return 21;
                  break;
                case 16:
                  return 42;
                  break;
                case 17:
                  return "LINKSTYLE";
                  break;
                case 18:
                  return "INTERPOLATE";
                  break;
                case 19:
                  this.pushState("CLASSDEF");
                  return 39;
                  break;
                case 20:
                  this.popState();
                  this.pushState("CLASSDEFID");
                  return "DEFAULT_CLASSDEF_ID";
                  break;
                case 21:
                  this.popState();
                  this.pushState("CLASSDEFID");
                  return 40;
                  break;
                case 22:
                  this.popState();
                  return 41;
                  break;
                case 23:
                  this.pushState("CLASS");
                  return 43;
                  break;
                case 24:
                  this.popState();
                  this.pushState("CLASS_STYLE");
                  return 44;
                  break;
                case 25:
                  this.popState();
                  return 45;
                  break;
                case 26:
                  this.pushState("STYLE_STMNT");
                  return 46;
                  break;
                case 27:
                  this.popState();
                  this.pushState("STYLE_DEFINITION");
                  return 47;
                  break;
                case 28:
                  this.popState();
                  return 48;
                  break;
                case 29:
                  this.pushState("acc_title");
                  return "acc_title";
                  break;
                case 30:
                  this.popState();
                  return "acc_title_value";
                  break;
                case 31:
                  this.pushState("acc_descr");
                  return "acc_descr";
                  break;
                case 32:
                  this.popState();
                  return "acc_descr_value";
                  break;
                case 33:
                  this.pushState("acc_descr_multiline");
                  break;
                case 34:
                  this.popState();
                  break;
                case 35:
                  return "acc_descr_multiline_value";
                  break;
                case 36:
                  return 30;
                  break;
                case 37:
                  this.popState();
                  yy.getLogger().debug("Lex: ((");
                  return "NODE_DEND";
                  break;
                case 38:
                  this.popState();
                  yy.getLogger().debug("Lex: ((");
                  return "NODE_DEND";
                  break;
                case 39:
                  this.popState();
                  yy.getLogger().debug("Lex: ))");
                  return "NODE_DEND";
                  break;
                case 40:
                  this.popState();
                  yy.getLogger().debug("Lex: ((");
                  return "NODE_DEND";
                  break;
                case 41:
                  this.popState();
                  yy.getLogger().debug("Lex: ((");
                  return "NODE_DEND";
                  break;
                case 42:
                  this.popState();
                  yy.getLogger().debug("Lex: (-");
                  return "NODE_DEND";
                  break;
                case 43:
                  this.popState();
                  yy.getLogger().debug("Lex: -)");
                  return "NODE_DEND";
                  break;
                case 44:
                  this.popState();
                  yy.getLogger().debug("Lex: ((");
                  return "NODE_DEND";
                  break;
                case 45:
                  this.popState();
                  yy.getLogger().debug("Lex: ]]");
                  return "NODE_DEND";
                  break;
                case 46:
                  this.popState();
                  yy.getLogger().debug("Lex: (");
                  return "NODE_DEND";
                  break;
                case 47:
                  this.popState();
                  yy.getLogger().debug("Lex: ])");
                  return "NODE_DEND";
                  break;
                case 48:
                  this.popState();
                  yy.getLogger().debug("Lex: /]");
                  return "NODE_DEND";
                  break;
                case 49:
                  this.popState();
                  yy.getLogger().debug("Lex: /]");
                  return "NODE_DEND";
                  break;
                case 50:
                  this.popState();
                  yy.getLogger().debug("Lex: )]");
                  return "NODE_DEND";
                  break;
                case 51:
                  this.popState();
                  yy.getLogger().debug("Lex: )");
                  return "NODE_DEND";
                  break;
                case 52:
                  this.popState();
                  yy.getLogger().debug("Lex: ]>");
                  return "NODE_DEND";
                  break;
                case 53:
                  this.popState();
                  yy.getLogger().debug("Lex: ]");
                  return "NODE_DEND";
                  break;
                case 54:
                  yy.getLogger().debug("Lexa: -)");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 55:
                  yy.getLogger().debug("Lexa: (-");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 56:
                  yy.getLogger().debug("Lexa: ))");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 57:
                  yy.getLogger().debug("Lexa: )");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 58:
                  yy.getLogger().debug("Lex: (((");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 59:
                  yy.getLogger().debug("Lexa: )");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 60:
                  yy.getLogger().debug("Lexa: )");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 61:
                  yy.getLogger().debug("Lexa: )");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 62:
                  yy.getLogger().debug("Lexc: >");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 63:
                  yy.getLogger().debug("Lexa: ([");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 64:
                  yy.getLogger().debug("Lexa: )");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 65:
                  this.pushState("NODE");
                  return 35;
                  break;
                case 66:
                  this.pushState("NODE");
                  return 35;
                  break;
                case 67:
                  this.pushState("NODE");
                  return 35;
                  break;
                case 68:
                  this.pushState("NODE");
                  return 35;
                  break;
                case 69:
                  this.pushState("NODE");
                  return 35;
                  break;
                case 70:
                  this.pushState("NODE");
                  return 35;
                  break;
                case 71:
                  this.pushState("NODE");
                  return 35;
                  break;
                case 72:
                  yy.getLogger().debug("Lexa: [");
                  this.pushState("NODE");
                  return 35;
                  break;
                case 73:
                  this.pushState("BLOCK_ARROW");
                  yy.getLogger().debug("LEX ARR START");
                  return 37;
                  break;
                case 74:
                  yy.getLogger().debug("Lex: NODE_ID", yy_.yytext);
                  return 31;
                  break;
                case 75:
                  yy.getLogger().debug("Lex: EOF", yy_.yytext);
                  return 8;
                  break;
                case 76:
                  this.pushState("md_string");
                  break;
                case 77:
                  this.pushState("md_string");
                  break;
                case 78:
                  return "NODE_DESCR";
                  break;
                case 79:
                  this.popState();
                  break;
                case 80:
                  yy.getLogger().debug("Lex: Starting string");
                  this.pushState("string");
                  break;
                case 81:
                  yy.getLogger().debug("LEX ARR: Starting string");
                  this.pushState("string");
                  break;
                case 82:
                  yy.getLogger().debug("LEX: NODE_DESCR:", yy_.yytext);
                  return "NODE_DESCR";
                  break;
                case 83:
                  yy.getLogger().debug("LEX POPPING");
                  this.popState();
                  break;
                case 84:
                  yy.getLogger().debug("Lex: =>BAE");
                  this.pushState("ARROW_DIR");
                  break;
                case 85:
                  yy_.yytext = yy_.yytext.replace(/^,\s*/, "");
                  yy.getLogger().debug("Lex (right): dir:", yy_.yytext);
                  return "DIR";
                  break;
                case 86:
                  yy_.yytext = yy_.yytext.replace(/^,\s*/, "");
                  yy.getLogger().debug("Lex (left):", yy_.yytext);
                  return "DIR";
                  break;
                case 87:
                  yy_.yytext = yy_.yytext.replace(/^,\s*/, "");
                  yy.getLogger().debug("Lex (x):", yy_.yytext);
                  return "DIR";
                  break;
                case 88:
                  yy_.yytext = yy_.yytext.replace(/^,\s*/, "");
                  yy.getLogger().debug("Lex (y):", yy_.yytext);
                  return "DIR";
                  break;
                case 89:
                  yy_.yytext = yy_.yytext.replace(/^,\s*/, "");
                  yy.getLogger().debug("Lex (up):", yy_.yytext);
                  return "DIR";
                  break;
                case 90:
                  yy_.yytext = yy_.yytext.replace(/^,\s*/, "");
                  yy.getLogger().debug("Lex (down):", yy_.yytext);
                  return "DIR";
                  break;
                case 91:
                  yy_.yytext = "]>";
                  yy.getLogger().debug("Lex (ARROW_DIR end):", yy_.yytext);
                  this.popState();
                  this.popState();
                  return "BLOCK_ARROW_END";
                  break;
                case 92:
                  yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#");
                  return 15;
                  break;
                case 93:
                  yy.getLogger().debug("Lex: LINK", yy_.yytext);
                  return 15;
                  break;
                case 94:
                  yy.getLogger().debug("Lex: LINK", yy_.yytext);
                  return 15;
                  break;
                case 95:
                  yy.getLogger().debug("Lex: LINK", yy_.yytext);
                  return 15;
                  break;
                case 96:
                  yy.getLogger().debug("Lex: START_LINK", yy_.yytext);
                  this.pushState("LLABEL");
                  return 16;
                  break;
                case 97:
                  yy.getLogger().debug("Lex: START_LINK", yy_.yytext);
                  this.pushState("LLABEL");
                  return 16;
                  break;
                case 98:
                  yy.getLogger().debug("Lex: START_LINK", yy_.yytext);
                  this.pushState("LLABEL");
                  return 16;
                  break;
                case 99:
                  this.pushState("md_string");
                  break;
                case 100:
                  yy.getLogger().debug("Lex: Starting string");
                  this.pushState("string");
                  return "LINK_LABEL";
                  break;
                case 101:
                  this.popState();
                  yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#");
                  return 15;
                  break;
                case 102:
                  this.popState();
                  yy.getLogger().debug("Lex: LINK", yy_.yytext);
                  return 15;
                  break;
                case 103:
                  this.popState();
                  yy.getLogger().debug("Lex: LINK", yy_.yytext);
                  return 15;
                  break;
                case 104:
                  yy.getLogger().debug("Lex: COLON", yy_.yytext);
                  yy_.yytext = yy_.yytext.slice(1);
                  return 27;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:block-beta\b)/, /^(?:block:)/, /^(?:block\b)/, /^(?:[\s]+)/, /^(?:[\n]+)/, /^(?:((\u000D\u000A)|(\u000A)))/, /^(?:columns\s+auto\b)/, /^(?:columns\s+[\d]+)/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:space[:]\d+)/, /^(?:space\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\s+)/, /^(?:DEFAULT\s+)/, /^(?:\w+\s+)/, /^(?:[^\n]*)/, /^(?:class\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:style\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:end\b\s*)/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:[\)]\))/, /^(?:\}\})/, /^(?:\})/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\()/, /^(?:\]\])/, /^(?:\()/, /^(?:\]\))/, /^(?:\\\])/, /^(?:\/\])/, /^(?:\)\])/, /^(?:[\)])/, /^(?:\]>)/, /^(?:[\]])/, /^(?:-\))/, /^(?:\(-)/, /^(?:\)\))/, /^(?:\))/, /^(?:\(\(\()/, /^(?:\(\()/, /^(?:\{\{)/, /^(?:\{)/, /^(?:>)/, /^(?:\(\[)/, /^(?:\()/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\[\\)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:\[)/, /^(?:<\[)/, /^(?:[^\(\[\n\-\)\{\}\s\<\>:=]+)/, /^(?:$)/, /^(?:["][`])/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:\]>\s*\()/, /^(?:,?\s*right\s*)/, /^(?:,?\s*left\s*)/, /^(?:,?\s*x\s*)/, /^(?:,?\s*y\s*)/, /^(?:,?\s*up\s*)/, /^(?:,?\s*down\s*)/, /^(?:\)\s*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*~~[\~]+\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:["][`])/, /^(?:["])/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?::\d+)/],
            conditions: { "STYLE_DEFINITION": { "rules": [28], "inclusive": false }, "STYLE_STMNT": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [22], "inclusive": false }, "CLASSDEF": { "rules": [20, 21], "inclusive": false }, "CLASS_STYLE": { "rules": [25], "inclusive": false }, "CLASS": { "rules": [24], "inclusive": false }, "LLABEL": { "rules": [99, 100, 101, 102, 103], "inclusive": false }, "ARROW_DIR": { "rules": [85, 86, 87, 88, 89, 90, 91], "inclusive": false }, "BLOCK_ARROW": { "rules": [76, 81, 84], "inclusive": false }, "NODE": { "rules": [37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 77, 80], "inclusive": false }, "md_string": { "rules": [9, 10, 78, 79], "inclusive": false }, "space": { "rules": [], "inclusive": false }, "string": { "rules": [12, 13, 82, 83], "inclusive": false }, "acc_descr_multiline": { "rules": [34, 35], "inclusive": false }, "acc_descr": { "rules": [32], "inclusive": false }, "acc_title": { "rules": [30], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 14, 15, 16, 17, 18, 19, 23, 26, 29, 31, 33, 36, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 92, 93, 94, 95, 96, 97, 98, 104], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser21.parser = parser21;
      block_default = parser21;
    }
  });

  // src/diagrams/block/blockDB.ts
  function typeStr2Type(typeStr) {
    log.debug("typeStr2Type", typeStr);
    switch (typeStr) {
      case "[]":
        return "square";
      case "()":
        log.debug("we have a round");
        return "round";
      case "(())":
        return "circle";
      case ">]":
        return "rect_left_inv_arrow";
      case "{}":
        return "diamond";
      case "{{}}":
        return "hexagon";
      case "([])":
        return "stadium";
      case "[[]]":
        return "subroutine";
      case "[()]":
        return "cylinder";
      case "((()))":
        return "doublecircle";
      case "[//]":
        return "lean_right";
      case "[\\\\]":
        return "lean_left";
      case "[/\\]":
        return "trapezoid";
      case "[\\/]":
        return "inv_trapezoid";
      case "<[]>":
        return "block_arrow";
      default:
        return "na";
    }
  }
  function edgeTypeStr2Type(typeStr) {
    log.debug("typeStr2Type", typeStr);
    switch (typeStr) {
      case "==":
        return "thick";
      default:
        return "normal";
    }
  }
  function edgeStrToEdgeData(typeStr) {
    const lastChar = typeStr.trim().slice(-1);
    switch (lastChar) {
      case "x":
        return "arrow_cross";
      case "o":
        return "arrow_circle";
      case ">":
        return "arrow_point";
      default:
        return "";
    }
  }
  function edgeStrToEdgeStartData(typeStr) {
    const firstChar = typeStr.trim().charAt(0);
    switch (firstChar) {
      case "x":
        return "arrow_cross";
      case "o":
        return "arrow_circle";
      case "<":
        return "arrow_point";
      default:
        return "arrow_open";
    }
  }
  function edgeStrToThickness(typeStr) {
    return typeStr.includes("==") ? "thick" : "normal";
  }
  function edgeStrToPattern(typeStr) {
    if (typeStr.includes(".-")) {
      return "dotted";
    }
    return "solid";
  }
  var blockDatabase, edgeList, edgeCount2, COLOR_KEYWORD, FILL_KEYWORD, BG_FILL, STYLECLASS_SEP, classes2, diagramId2, sanitizeText5, addStyleClass, addStyle2Node, setCssClass, populateBlockDatabase, blocks, rootBlock, clear18, cnt3, generateId2, setHierarchy, getColumns, getBlocksFlat, getBlocks, getEdges, getBlock, setBlock, setDiagramId2, getDiagramId, getLogger2, getClasses4, db6, blockDB_default;
  var init_blockDB = __esm({
    "src/diagrams/block/blockDB.ts"() {
      "use strict";
      init_compat();
      init_config();
      init_diagramAPI();
      init_logger();
      init_common();
      init_commonDb();
      blockDatabase = /* @__PURE__ */ new Map();
      edgeList = [];
      edgeCount2 = /* @__PURE__ */ new Map();
      COLOR_KEYWORD = "color";
      FILL_KEYWORD = "fill";
      BG_FILL = "bgFill";
      STYLECLASS_SEP = ",";
      classes2 = /* @__PURE__ */ new Map();
      diagramId2 = "";
      sanitizeText5 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, getConfig2()), "sanitizeText");
      addStyleClass = /* @__PURE__ */ __name(function(id41, styleAttributes = "") {
        let foundClass = classes2.get(id41);
        if (!foundClass) {
          foundClass = { id: id41, styles: [], textStyles: [] };
          classes2.set(id41, foundClass);
        }
        if (styleAttributes !== void 0 && styleAttributes !== null) {
          styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {
            const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim();
            if (RegExp(COLOR_KEYWORD).exec(attrib)) {
              const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);
              const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);
              foundClass.textStyles.push(newStyle2);
            }
            foundClass.styles.push(fixedAttrib);
          });
        }
      }, "addStyleClass");
      addStyle2Node = /* @__PURE__ */ __name(function(id41, styles7 = "") {
        const foundBlock = blockDatabase.get(id41);
        if (styles7 !== void 0 && styles7 !== null) {
          foundBlock.styles = styles7.split(STYLECLASS_SEP);
        }
      }, "addStyle2Node");
      setCssClass = /* @__PURE__ */ __name(function(itemIds, cssClassName) {
        itemIds.split(",").forEach(function(id41) {
          let foundBlock = blockDatabase.get(id41);
          if (foundBlock === void 0) {
            const trimmedId = id41.trim();
            foundBlock = { id: trimmedId, type: "na", children: [] };
            blockDatabase.set(trimmedId, foundBlock);
          }
          if (!foundBlock.classes) {
            foundBlock.classes = [];
          }
          foundBlock.classes.push(cssClassName);
        });
      }, "setCssClass");
      populateBlockDatabase = /* @__PURE__ */ __name((_blockList, parent4) => {
        const blockList = _blockList.flat();
        const children2 = [];
        const columnSettingBlock = blockList.find((b3) => b3?.type === "column-setting");
        const column2 = columnSettingBlock?.columns ?? -1;
        for (const block2 of blockList) {
          if (typeof column2 === "number" && column2 > 0 && block2.type !== "column-setting" && typeof block2.widthInColumns === "number" && block2.widthInColumns > column2) {
            log.warn(
              `Block ${block2.id} width ${block2.widthInColumns} exceeds configured column width ${column2}`
            );
          }
          if (block2.label) {
            block2.label = sanitizeText5(block2.label);
          }
          if (block2.type === "classDef") {
            addStyleClass(block2.id, block2.css);
            continue;
          }
          if (block2.type === "applyClass") {
            setCssClass(block2.id, block2?.styleClass ?? "");
            continue;
          }
          if (block2.type === "applyStyles") {
            if (block2?.stylesStr) {
              addStyle2Node(block2.id, block2?.stylesStr);
            }
            continue;
          }
          if (block2.type === "column-setting") {
            parent4.columns = block2.columns ?? -1;
          } else if (block2.type === "edge") {
            const count2 = (edgeCount2.get(block2.id) ?? 0) + 1;
            edgeCount2.set(block2.id, count2);
            block2.id = count2 + "-" + block2.id;
            edgeList.push(block2);
          } else {
            if (!block2.label) {
              if (block2.type === "composite") {
                block2.label = "";
              } else {
                block2.label = block2.id;
              }
            }
            const existingBlock = blockDatabase.get(block2.id);
            if (existingBlock === void 0) {
              blockDatabase.set(block2.id, block2);
            } else {
              if (block2.type !== "na") {
                existingBlock.type = block2.type;
              }
              if (block2.label !== block2.id) {
                existingBlock.label = block2.label;
              }
            }
            if (block2.children) {
              populateBlockDatabase(block2.children, block2);
            }
            if (block2.type === "space") {
              const w4 = block2.width ?? 1;
              for (let j3 = 0; j3 < w4; j3++) {
                const newBlock = clone2(block2);
                newBlock.id = newBlock.id + "-" + j3;
                blockDatabase.set(newBlock.id, newBlock);
                children2.push(newBlock);
              }
            } else if (existingBlock === void 0) {
              children2.push(block2);
            }
          }
        }
        parent4.children = children2;
      }, "populateBlockDatabase");
      blocks = [];
      rootBlock = { id: "root", type: "composite", children: [], columns: -1 };
      clear18 = /* @__PURE__ */ __name(() => {
        log.debug("Clear called");
        clear();
        rootBlock = { id: "root", type: "composite", children: [], columns: -1 };
        blockDatabase = /* @__PURE__ */ new Map([["root", rootBlock]]);
        blocks = [];
        classes2 = /* @__PURE__ */ new Map();
        edgeList = [];
        edgeCount2 = /* @__PURE__ */ new Map();
        diagramId2 = "";
      }, "clear");
      __name(typeStr2Type, "typeStr2Type");
      __name(edgeTypeStr2Type, "edgeTypeStr2Type");
      __name(edgeStrToEdgeData, "edgeStrToEdgeData");
      __name(edgeStrToEdgeStartData, "edgeStrToEdgeStartData");
      __name(edgeStrToThickness, "edgeStrToThickness");
      __name(edgeStrToPattern, "edgeStrToPattern");
      cnt3 = 0;
      generateId2 = /* @__PURE__ */ __name(() => {
        cnt3++;
        return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt3;
      }, "generateId");
      setHierarchy = /* @__PURE__ */ __name((block2) => {
        rootBlock.children = block2;
        populateBlockDatabase(block2, rootBlock);
        blocks = rootBlock.children;
      }, "setHierarchy");
      getColumns = /* @__PURE__ */ __name((blockId) => {
        const block2 = blockDatabase.get(blockId);
        if (!block2) {
          return -1;
        }
        if (block2.columns) {
          return block2.columns;
        }
        if (!block2.children) {
          return -1;
        }
        return block2.children.length;
      }, "getColumns");
      getBlocksFlat = /* @__PURE__ */ __name(() => {
        return [...blockDatabase.values()];
      }, "getBlocksFlat");
      getBlocks = /* @__PURE__ */ __name(() => {
        return blocks || [];
      }, "getBlocks");
      getEdges = /* @__PURE__ */ __name(() => {
        return edgeList;
      }, "getEdges");
      getBlock = /* @__PURE__ */ __name((id41) => {
        return blockDatabase.get(id41);
      }, "getBlock");
      setBlock = /* @__PURE__ */ __name((block2) => {
        blockDatabase.set(block2.id, block2);
      }, "setBlock");
      setDiagramId2 = /* @__PURE__ */ __name((id41) => {
        diagramId2 = id41;
      }, "setDiagramId");
      getDiagramId = /* @__PURE__ */ __name(() => diagramId2, "getDiagramId");
      getLogger2 = /* @__PURE__ */ __name(() => log, "getLogger");
      getClasses4 = /* @__PURE__ */ __name(function() {
        return classes2;
      }, "getClasses");
      db6 = {
        getConfig: /* @__PURE__ */ __name(() => getConfig().block, "getConfig"),
        typeStr2Type,
        edgeTypeStr2Type,
        edgeStrToEdgeData,
        edgeStrToEdgeStartData,
        edgeStrToThickness,
        edgeStrToPattern,
        getLogger: getLogger2,
        getBlocksFlat,
        getBlocks,
        getEdges,
        setHierarchy,
        getBlock,
        setBlock,
        getColumns,
        getClasses: getClasses4,
        clear: clear18,
        generateId: generateId2,
        setDiagramId: setDiagramId2,
        getDiagramId
      };
      blockDB_default = db6;
    }
  });

  // src/diagrams/block/styles.ts
  var fade3, getStyles18, styles_default17;
  var init_styles19 = __esm({
    "src/diagrams/block/styles.ts"() {
      "use strict";
      init_dist();
      init_globalStyles();
      fade3 = /* @__PURE__ */ __name((color2, opacity) => {
        const channel2 = channel_default2;
        const r2 = channel2(color2, "r");
        const g2 = channel2(color2, "g");
        const b3 = channel2(color2, "b");
        return rgba_default(r2, g2, b3, opacity);
      }, "fade");
      getStyles18 = /* @__PURE__ */ __name((options2) => `.label {
    font-family: ${options2.fontFamily};
    color: ${options2.nodeTextColor || options2.textColor};
  }
  .cluster-label text {
    fill: ${options2.titleColor};
  }
  .cluster-label span,p {
    color: ${options2.titleColor};
  }



  .label text,span,p {
    fill: ${options2.nodeTextColor || options2.textColor};
    color: ${options2.nodeTextColor || options2.textColor};
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${options2.mainBkg};
    stroke: ${options2.nodeBorder};
    stroke-width: 1px;
  }
  .flowchart-label text {
    text-anchor: middle;
  }
  // .flowchart-label .text-outer-tspan {
  //   text-anchor: middle;
  // }
  // .flowchart-label .text-inner-tspan {
  //   text-anchor: start;
  // }

  .node .label {
    text-align: center;
  }
  .node.clickable {
    cursor: pointer;
  }

  .arrowheadPath {
    fill: ${options2.arrowheadColor};
  }

  .edgePath .path {
    stroke: ${options2.lineColor};
    stroke-width: 2.0px;
  }

  .flowchart-link {
    stroke: ${options2.lineColor};
    fill: none;
  }

  .edgeLabel {
    background-color: ${options2.edgeLabelBackground};
    /*
     * This is for backward compatibility with existing code that didn't
     * add a \`<p>\` around edge labels.
     *
     * TODO: We should probably remove this in a future release.
     */
    p {
      margin: 0;
      padding: 0;
      display: inline;
    }
    rect {
      opacity: 0.5;
      background-color: ${options2.edgeLabelBackground};
      fill: ${options2.edgeLabelBackground};
    }
    text-align: center;
  }

  /* For html labels only */
  .labelBkg {
    background-color: ${options2.edgeLabelBackground};
  }

  .node .cluster {
    // fill: ${fade3(options2.mainBkg, 0.5)};
    fill: ${fade3(options2.clusterBkg, 0.5)};
    stroke: ${fade3(options2.clusterBorder, 0.2)};
    box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
    stroke-width: 1px;
  }

  .cluster text {
    fill: ${options2.titleColor};
  }

  .cluster span,p {
    color: ${options2.titleColor};
  }
  /* .cluster div {
    color: ${options2.titleColor};
  } */

  div.mermaidTooltip {
    position: absolute;
    text-align: center;
    max-width: 200px;
    padding: 2px;
    font-family: ${options2.fontFamily};
    font-size: 12px;
    background: ${options2.tertiaryColor};
    border: 1px solid ${options2.border2};
    border-radius: 2px;
    pointer-events: none;
    z-index: 100;
  }

  .flowchartTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${options2.textColor};
  }
  ${getIconStyles()}
`, "getStyles");
      styles_default17 = getStyles18;
    }
  });

  // src/dagre-wrapper/markers.js
  var insertMarkers3, extension4, composition2, aggregation2, dependency2, lollipop2, point7, circle4, cross2, barb2, markers2, markers_default2;
  var init_markers2 = __esm({
    "src/dagre-wrapper/markers.js"() {
      "use strict";
      init_logger();
      insertMarkers3 = /* @__PURE__ */ __name((elem, markerArray, type3, id41) => {
        markerArray.forEach((markerName) => {
          markers2[markerName](elem, type3, id41);
        });
      }, "insertMarkers");
      extension4 = /* @__PURE__ */ __name((elem, type3, id41) => {
        log.trace("Making markers for ", id41);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-extensionStart").attr("class", "marker extension " + type3).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-extensionEnd").attr("class", "marker extension " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z");
      }, "extension");
      composition2 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-compositionStart").attr("class", "marker composition " + type3).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-compositionEnd").attr("class", "marker composition " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
      }, "composition");
      aggregation2 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-aggregationStart").attr("class", "marker aggregation " + type3).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-aggregationEnd").attr("class", "marker aggregation " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
      }, "aggregation");
      dependency2 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-dependencyStart").attr("class", "marker dependency " + type3).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z");
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-dependencyEnd").attr("class", "marker dependency " + type3).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
      }, "dependency");
      lollipop2 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-lollipopStart").attr("class", "marker lollipop " + type3).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6);
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-lollipopEnd").attr("class", "marker lollipop " + type3).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6);
      }, "lollipop");
      point7 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("marker").attr("id", id41 + "_" + type3 + "-pointEnd").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-pointStart").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
      }, "point");
      circle4 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("marker").attr("id", id41 + "_" + type3 + "-circleEnd").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-circleStart").attr("class", "marker " + type3).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
      }, "circle");
      cross2 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("marker").attr("id", id41 + "_" + type3 + "-crossEnd").attr("class", "marker cross " + type3).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0");
        elem.append("marker").attr("id", id41 + "_" + type3 + "-crossStart").attr("class", "marker cross " + type3).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0");
      }, "cross");
      barb2 = /* @__PURE__ */ __name((elem, type3, id41) => {
        elem.append("defs").append("marker").attr("id", id41 + "_" + type3 + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z");
      }, "barb");
      markers2 = {
        extension: extension4,
        composition: composition2,
        aggregation: aggregation2,
        dependency: dependency2,
        lollipop: lollipop2,
        point: point7,
        circle: circle4,
        cross: cross2,
        barb: barb2
      };
      markers_default2 = insertMarkers3;
    }
  });

  // src/diagrams/block/layout.ts
  function calculateBlockPosition(columns, position5) {
    if (columns === 0 || !Number.isInteger(columns)) {
      throw new Error("Columns must be an integer !== 0.");
    }
    if (position5 < 0 || !Number.isInteger(position5)) {
      throw new Error("Position must be a non-negative integer." + position5);
    }
    if (columns < 0) {
      return { px: position5, py: 0 };
    }
    if (columns === 1) {
      return { px: 0, py: position5 };
    }
    const px = position5 % columns;
    const py = Math.floor(position5 / columns);
    return { px, py };
  }
  function setBlockSizes(block2, db12, siblingWidth = 0, siblingHeight = 0, padding = 8) {
    log.debug(
      "setBlockSizes abc95 (start)",
      block2.id,
      block2?.size?.x,
      "block width =",
      block2?.size,
      "siblingWidth",
      siblingWidth
    );
    if (!block2?.size?.width) {
      block2.size = {
        width: siblingWidth,
        height: siblingHeight,
        x: 0,
        y: 0
      };
    }
    let maxWidth2 = 0;
    let maxHeight = 0;
    if (block2.children?.length > 0) {
      for (const child of block2.children) {
        setBlockSizes(child, db12, 0, 0, padding);
      }
      const childSize = getMaxChildSize(block2);
      maxWidth2 = childSize.width;
      maxHeight = childSize.height;
      log.debug("setBlockSizes abc95 maxWidth of", block2.id, ":s children is ", maxWidth2, maxHeight);
      for (const child of block2.children) {
        if (child.size) {
          log.debug(
            `abc95 Setting size of children of ${block2.id} id=${child.id} ${maxWidth2} ${maxHeight} ${JSON.stringify(child.size)}`
          );
          child.size.width = maxWidth2 * (child.widthInColumns ?? 1) + padding * ((child.widthInColumns ?? 1) - 1);
          child.size.height = maxHeight;
          child.size.x = 0;
          child.size.y = 0;
          log.debug(
            `abc95 updating size of ${block2.id} children child:${child.id} maxWidth:${maxWidth2} maxHeight:${maxHeight}`
          );
        }
      }
      for (const child of block2.children) {
        setBlockSizes(child, db12, maxWidth2, maxHeight, padding);
      }
      const columns = block2.columns ?? -1;
      let numItems = 0;
      for (const child of block2.children) {
        numItems += child.widthInColumns ?? 1;
      }
      let xSize = block2.children.length;
      if (columns > 0 && columns < numItems) {
        xSize = columns;
      }
      const ySize = Math.ceil(numItems / xSize);
      let width3 = xSize * (maxWidth2 + padding) + padding;
      let height2 = ySize * (maxHeight + padding) + padding;
      if (width3 < siblingWidth) {
        log.debug(
          `Detected to small sibling: abc95 ${block2.id} siblingWidth ${siblingWidth} siblingHeight ${siblingHeight} width ${width3}`
        );
        width3 = siblingWidth;
        height2 = siblingHeight;
        const childWidth = (siblingWidth - xSize * padding - padding) / xSize;
        const childHeight = (siblingHeight - ySize * padding - padding) / ySize;
        log.debug("Size indata abc88", block2.id, "childWidth", childWidth, "maxWidth", maxWidth2);
        log.debug("Size indata abc88", block2.id, "childHeight", childHeight, "maxHeight", maxHeight);
        log.debug("Size indata abc88 xSize", xSize, "padding", padding);
        for (const child of block2.children) {
          if (child.size) {
            child.size.width = childWidth;
            child.size.height = childHeight;
            child.size.x = 0;
            child.size.y = 0;
          }
        }
      }
      log.debug(
        `abc95 (finale calc) ${block2.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block2.children.length} width=${Math.max(width3, block2.size?.width || 0)}`
      );
      if (width3 < (block2?.size?.width || 0)) {
        width3 = block2?.size?.width || 0;
        const num = columns > 0 ? Math.min(block2.children.length, columns) : block2.children.length;
        if (num > 0) {
          const childWidth = (width3 - num * padding - padding) / num;
          log.debug("abc95 (growing to fit) width", block2.id, width3, block2.size?.width, childWidth);
          for (const child of block2.children) {
            if (child.size) {
              child.size.width = childWidth;
            }
          }
        }
      }
      block2.size = {
        width: width3,
        height: height2,
        x: 0,
        y: 0
      };
    }
    log.debug(
      "setBlockSizes abc94 (done)",
      block2.id,
      block2?.size?.x,
      block2?.size?.width,
      block2?.size?.y,
      block2?.size?.height
    );
  }
  function layoutBlocks(block2, db12, padding = 8) {
    log.debug(
      `abc85 layout blocks (=>layoutBlocks) ${block2.id} x: ${block2?.size?.x} y: ${block2?.size?.y} width: ${block2?.size?.width}`
    );
    const columns = block2.columns ?? -1;
    log.debug("layoutBlocks columns abc95", block2.id, "=>", columns, block2);
    if (block2.children && // find max width of children
    block2.children.length > 0) {
      const width3 = block2?.children[0]?.size?.width ?? 0;
      const widthOfChildren = block2.children.length * width3 + (block2.children.length - 1) * padding;
      log.debug("widthOfChildren 88", widthOfChildren, "posX");
      const rowHeights = /* @__PURE__ */ new Map();
      {
        let colPos = 0;
        for (const child of block2.children) {
          if (!child.size) {
            continue;
          }
          const { py } = calculateBlockPosition(columns, colPos);
          const currentMax = rowHeights.get(py) ?? 0;
          if (child.size.height > currentMax) {
            rowHeights.set(py, child.size.height);
          }
          let filled = child?.widthInColumns ?? 1;
          if (columns > 0) {
            filled = Math.min(filled, columns - colPos % columns);
          }
          colPos += filled;
        }
      }
      const rowYOffsets = /* @__PURE__ */ new Map();
      {
        let offset = 0;
        const rows = [...rowHeights.keys()].sort((a2, b3) => a2 - b3);
        for (const row of rows) {
          rowYOffsets.set(row, offset);
          offset += (rowHeights.get(row) ?? 0) + padding;
        }
      }
      let columnPos = 0;
      log.debug("abc91 block?.size?.x", block2.id, block2?.size?.x);
      let startingPosX = block2?.size?.x ? block2?.size?.x + (-block2?.size?.width / 2 || 0) : -padding;
      let rowPos = 0;
      for (const child of block2.children) {
        const parent4 = block2;
        if (!child.size) {
          continue;
        }
        const { width: width4, height: height2 } = child.size;
        const { px, py } = calculateBlockPosition(columns, columnPos);
        if (py != rowPos) {
          rowPos = py;
          startingPosX = block2?.size?.x ? block2?.size?.x + (-block2?.size?.width / 2 || 0) : -padding;
          log.debug("New row in layout for block", block2.id, " and child ", child.id, rowPos);
        }
        log.debug(
          `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${parent4?.size?.x},${parent4?.size?.y}) parent: ${parent4.id} width: ${width4}${padding}`
        );
        if (parent4.size) {
          const halfWidth = width4 / 2;
          child.size.x = startingPosX + padding + halfWidth;
          log.debug(
            `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width4} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width4 * (child?.widthInColumns ?? 1) / 2}`
          );
          startingPosX = child.size.x + halfWidth;
          const rowYOffset = rowYOffsets.get(py) ?? 0;
          const rowHeight = rowHeights.get(py) ?? height2;
          child.size.y = parent4.size.y - parent4.size.height / 2 + rowYOffset + rowHeight / 2 + padding;
          log.debug(
            `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width4 * (child?.widthInColumns ?? 1) / 2}`
          );
        }
        if (child.children) {
          layoutBlocks(child, db12, padding);
        }
        let columnsFilled = child?.widthInColumns ?? 1;
        if (columns > 0) {
          columnsFilled = Math.min(columnsFilled, columns - columnPos % columns);
        }
        columnPos += columnsFilled;
        log.debug("abc88 columnsPos", child, columnPos);
      }
    }
    log.debug(
      `layout blocks (<==layoutBlocks) ${block2.id} x: ${block2?.size?.x} y: ${block2?.size?.y} width: ${block2?.size?.width}`
    );
  }
  function findBounds(block2, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) {
    if (block2.size && block2.id !== "root") {
      const { x: x5, y: y6, width: width3, height: height2 } = block2.size;
      if (x5 - width3 / 2 < minX) {
        minX = x5 - width3 / 2;
      }
      if (y6 - height2 / 2 < minY) {
        minY = y6 - height2 / 2;
      }
      if (x5 + width3 / 2 > maxX) {
        maxX = x5 + width3 / 2;
      }
      if (y6 + height2 / 2 > maxY) {
        maxY = y6 + height2 / 2;
      }
    }
    if (block2.children) {
      for (const child of block2.children) {
        ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY }));
      }
    }
    return { minX, minY, maxX, maxY };
  }
  function layout5(db12) {
    const root4 = db12.getBlock("root");
    if (!root4) {
      return;
    }
    const padding = getConfig2()?.block?.padding ?? 8;
    setBlockSizes(root4, db12, 0, 0, padding);
    layoutBlocks(root4, db12, padding);
    log.debug("getBlocks", JSON.stringify(root4, null, 2));
    const { minX, minY, maxX, maxY } = findBounds(root4);
    const height2 = maxY - minY;
    const width3 = maxX - minX;
    return { x: minX, y: minY, width: width3, height: height2 };
  }
  var getMaxChildSize;
  var init_layout3 = __esm({
    "src/diagrams/block/layout.ts"() {
      "use strict";
      init_logger();
      init_diagramAPI();
      __name(calculateBlockPosition, "calculateBlockPosition");
      getMaxChildSize = /* @__PURE__ */ __name((block2) => {
        let maxWidth2 = 0;
        let maxHeight = 0;
        for (const child of block2.children) {
          const { width: width3, height: height2, x: x5, y: y6 } = child.size ?? { width: 0, height: 0, x: 0, y: 0 };
          log.debug(
            "getMaxChildSize abc95 child:",
            child.id,
            "width:",
            width3,
            "height:",
            height2,
            "x:",
            x5,
            "y:",
            y6,
            child.type
          );
          if (child.type === "space") {
            continue;
          }
          const normalizedWidth = width3 / (child.widthInColumns ?? 1);
          if (normalizedWidth > maxWidth2) {
            maxWidth2 = normalizedWidth;
          }
          if (height2 > maxHeight) {
            maxHeight = height2;
          }
        }
        return { width: maxWidth2, height: maxHeight };
      }, "getMaxChildSize");
      __name(setBlockSizes, "setBlockSizes");
      __name(layoutBlocks, "layoutBlocks");
      __name(findBounds, "findBounds");
      __name(layout5, "layout");
    }
  });

  // src/dagre-wrapper/createLabel.js
  var createLabel2, createLabel_default2;
  var init_createLabel2 = __esm({
    "src/dagre-wrapper/createLabel.js"() {
      "use strict";
      init_config();
      init_diagramAPI();
      init_createText();
      createLabel2 = /* @__PURE__ */ __name(async (element3, _vertexText, style3, isTitle = false, isNode2 = false) => {
        let vertexText = _vertexText || "";
        if (typeof vertexText === "object") {
          vertexText = vertexText[0];
        }
        const config3 = getConfig2();
        const useHtmlLabels = getEffectiveHtmlLabels(config3);
        return await createText(
          element3,
          vertexText,
          {
            style: style3,
            isTitle,
            useHtmlLabels,
            markdown: false,
            isNode: isNode2,
            width: Number.POSITIVE_INFINITY
          },
          config3
        );
      }, "createLabel");
      createLabel_default2 = createLabel2;
    }
  });

  // src/dagre-wrapper/edgeMarker.ts
  var addEdgeMarkers2, arrowTypesMap2, addEdgeMarker2;
  var init_edgeMarker2 = __esm({
    "src/dagre-wrapper/edgeMarker.ts"() {
      "use strict";
      init_logger();
      addEdgeMarkers2 = /* @__PURE__ */ __name((svgPath, edge, url, id41, diagramType) => {
        if (edge.arrowTypeStart) {
          addEdgeMarker2(svgPath, "start", edge.arrowTypeStart, url, id41, diagramType);
        }
        if (edge.arrowTypeEnd) {
          addEdgeMarker2(svgPath, "end", edge.arrowTypeEnd, url, id41, diagramType);
        }
      }, "addEdgeMarkers");
      arrowTypesMap2 = {
        arrow_cross: "cross",
        arrow_point: "point",
        arrow_barb: "barb",
        arrow_circle: "circle",
        aggregation: "aggregation",
        extension: "extension",
        composition: "composition",
        dependency: "dependency",
        lollipop: "lollipop"
      };
      addEdgeMarker2 = /* @__PURE__ */ __name((svgPath, position5, arrowType, url, id41, diagramType) => {
        const endMarkerType = arrowTypesMap2[arrowType];
        if (!endMarkerType) {
          log.warn(`Unknown arrow type: ${arrowType}`);
          return;
        }
        const suffix = position5 === "start" ? "Start" : "End";
        svgPath.attr(`marker-${position5}`, `url(${url}#${id41}_${diagramType}-${endMarkerType}${suffix})`);
      }, "addEdgeMarker");
    }
  });

  // src/dagre-wrapper/edges.js
  function setTerminalWidth2(fo, value2) {
    if (getEffectiveHtmlLabels(getConfig2()) && fo) {
      fo.style.width = value2.length * 9 + "px";
      fo.style.height = "12px";
    }
  }
  var edgeLabels2, terminalLabels2, insertEdgeLabel2, positionEdgeLabel3, outsideNode2, intersection3, cutPathAtIntersect2, insertEdge2;
  var init_edges2 = __esm({
    "src/dagre-wrapper/edges.js"() {
      "use strict";
      init_logger();
      init_createLabel2();
      init_createText();
      init_labelTransform();
      init_src32();
      init_diagramAPI();
      init_config();
      init_utils2();
      init_common();
      init_lineWithOffset();
      init_subGraphTitleMargins();
      init_edgeMarker2();
      edgeLabels2 = {};
      terminalLabels2 = {};
      insertEdgeLabel2 = /* @__PURE__ */ __name(async (elem, edge) => {
        const config3 = getConfig2();
        const useHtmlLabels = getEffectiveHtmlLabels(config3);
        const edgeLabel = elem.insert("g").attr("class", "edgeLabel");
        const label = edgeLabel.insert("g").attr("class", "label");
        const isMarkdown = edge.labelType === "markdown";
        const labelElement = await createText(
          elem,
          edge.label,
          {
            style: edge.labelStyle,
            useHtmlLabels,
            // TODO: The old code only set addSvgBackground when using markdown, but
            // this function is only used by block diagrams which never use markdown.
            addSvgBackground: isMarkdown,
            isNode: false,
            markdown: isMarkdown,
            // If using markdown, wrap using default width
            width: isMarkdown ? void 0 : Number.POSITIVE_INFINITY
          },
          config3
        );
        label.node().appendChild(labelElement);
        let bbox = labelElement.getBBox();
        let transformBbox = bbox;
        if (useHtmlLabels) {
          const div = labelElement.children[0];
          const dv = select_default2(labelElement);
          bbox = div.getBoundingClientRect();
          transformBbox = bbox;
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        } else {
          const textEl = select_default2(labelElement).select("text").node();
          if (textEl && typeof textEl.getBBox === "function") {
            transformBbox = textEl.getBBox();
          }
        }
        label.attr("transform", computeLabelTransform(transformBbox, useHtmlLabels));
        edgeLabels2[edge.id] = edgeLabel;
        edge.width = bbox.width;
        edge.height = bbox.height;
        let fo;
        if (edge.startLabelLeft) {
          const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = startEdgeLabelLeft.insert("g").attr("class", "inner");
          const startLabelElement = await createLabel_default2(inner2, edge.startLabelLeft, edge.labelStyle);
          fo = startLabelElement;
          let slBox = startLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = startLabelElement.children[0];
            const dv = select_default2(startLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels2[edge.id]) {
            terminalLabels2[edge.id] = {};
          }
          terminalLabels2[edge.id].startLeft = startEdgeLabelLeft;
          setTerminalWidth2(fo, edge.startLabelLeft);
        }
        if (edge.startLabelRight) {
          const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = startEdgeLabelRight.insert("g").attr("class", "inner");
          const startLabelElement = await createLabel_default2(inner2, edge.startLabelRight, edge.labelStyle);
          fo = startLabelElement;
          let slBox = startLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = startLabelElement.children[0];
            const dv = select_default2(startLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels2[edge.id]) {
            terminalLabels2[edge.id] = {};
          }
          terminalLabels2[edge.id].startRight = startEdgeLabelRight;
          setTerminalWidth2(fo, edge.startLabelRight);
        }
        if (edge.endLabelLeft) {
          const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = endEdgeLabelLeft.insert("g").attr("class", "inner");
          const endLabelElement = await createLabel_default2(endEdgeLabelLeft, edge.endLabelLeft, edge.labelStyle);
          fo = endLabelElement;
          let slBox = endLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = endLabelElement.children[0];
            const dv = select_default2(endLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels2[edge.id]) {
            terminalLabels2[edge.id] = {};
          }
          terminalLabels2[edge.id].endLeft = endEdgeLabelLeft;
          setTerminalWidth2(fo, edge.endLabelLeft);
        }
        if (edge.endLabelRight) {
          const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals");
          const inner2 = endEdgeLabelRight.insert("g").attr("class", "inner");
          const endLabelElement = await createLabel_default2(
            endEdgeLabelRight,
            edge.endLabelRight,
            edge.labelStyle
          );
          fo = endLabelElement;
          let slBox = endLabelElement.getBBox();
          if (useHtmlLabels) {
            const div = endLabelElement.children[0];
            const dv = select_default2(endLabelElement);
            slBox = div.getBoundingClientRect();
            dv.attr("width", slBox.width);
            dv.attr("height", slBox.height);
          }
          inner2.attr("transform", computeLabelTransform(slBox, useHtmlLabels));
          if (!terminalLabels2[edge.id]) {
            terminalLabels2[edge.id] = {};
          }
          terminalLabels2[edge.id].endRight = endEdgeLabelRight;
          setTerminalWidth2(fo, edge.endLabelRight);
        }
        return labelElement;
      }, "insertEdgeLabel");
      __name(setTerminalWidth2, "setTerminalWidth");
      positionEdgeLabel3 = /* @__PURE__ */ __name((edge, paths) => {
        log.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels2[edge.id], paths);
        let path4 = paths.updatedPath ? paths.updatedPath : paths.originalPath;
        const siteConfig2 = getConfig2();
        const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig2);
        if (edge.label) {
          const el = edgeLabels2[edge.id];
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcLabelPosition(path4);
            log.debug(
              "Moving label " + edge.label + " from (",
              x5,
              ",",
              y6,
              ") to (",
              pos.x,
              ",",
              pos.y,
              ") abc88"
            );
            if (paths.updatedPath) {
              x5 = pos.x;
              y6 = pos.y;
            }
          }
          el.attr("transform", `translate(${x5}, ${y6 + subGraphTitleTotalMargin / 2})`);
        }
        if (edge.startLabelLeft) {
          const el = terminalLabels2[edge.id].startLeft;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path4);
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
        if (edge.startLabelRight) {
          const el = terminalLabels2[edge.id].startRight;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(
              edge.arrowTypeStart ? 10 : 0,
              "start_right",
              path4
            );
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
        if (edge.endLabelLeft) {
          const el = terminalLabels2[edge.id].endLeft;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path4);
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
        if (edge.endLabelRight) {
          const el = terminalLabels2[edge.id].endRight;
          let x5 = edge.x;
          let y6 = edge.y;
          if (path4) {
            const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path4);
            x5 = pos.x;
            y6 = pos.y;
          }
          el.attr("transform", `translate(${x5}, ${y6})`);
        }
      }, "positionEdgeLabel");
      outsideNode2 = /* @__PURE__ */ __name((node2, point8) => {
        const x5 = node2.x;
        const y6 = node2.y;
        const dx = Math.abs(point8.x - x5);
        const dy = Math.abs(point8.y - y6);
        const w4 = node2.width / 2;
        const h3 = node2.height / 2;
        if (dx >= w4 || dy >= h3) {
          return true;
        }
        return false;
      }, "outsideNode");
      intersection3 = /* @__PURE__ */ __name((node2, outsidePoint, insidePoint) => {
        log.debug(`intersection calc abc89:
  outsidePoint: ${JSON.stringify(outsidePoint)}
  insidePoint : ${JSON.stringify(insidePoint)}
  node        : x:${node2.x} y:${node2.y} w:${node2.width} h:${node2.height}`);
        const x5 = node2.x;
        const y6 = node2.y;
        const dx = Math.abs(x5 - insidePoint.x);
        const w4 = node2.width / 2;
        let r2 = insidePoint.x < outsidePoint.x ? w4 - dx : w4 + dx;
        const h3 = node2.height / 2;
        const Q3 = Math.abs(outsidePoint.y - insidePoint.y);
        const R3 = Math.abs(outsidePoint.x - insidePoint.x);
        if (Math.abs(y6 - outsidePoint.y) * w4 > Math.abs(x5 - outsidePoint.x) * h3) {
          let q3 = insidePoint.y < outsidePoint.y ? outsidePoint.y - h3 - y6 : y6 - h3 - outsidePoint.y;
          r2 = R3 * q3 / Q3;
          const res = {
            x: insidePoint.x < outsidePoint.x ? insidePoint.x + r2 : insidePoint.x - R3 + r2,
            y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q3 - q3 : insidePoint.y - Q3 + q3
          };
          if (r2 === 0) {
            res.x = outsidePoint.x;
            res.y = outsidePoint.y;
          }
          if (R3 === 0) {
            res.x = outsidePoint.x;
          }
          if (Q3 === 0) {
            res.y = outsidePoint.y;
          }
          log.debug(`abc89 topp/bott calc, Q ${Q3}, q ${q3}, R ${R3}, r ${r2}`, res);
          return res;
        } else {
          if (insidePoint.x < outsidePoint.x) {
            r2 = outsidePoint.x - w4 - x5;
          } else {
            r2 = x5 - w4 - outsidePoint.x;
          }
          let q3 = Q3 * r2 / R3;
          let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R3 - r2 : insidePoint.x - R3 + r2;
          let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q3 : insidePoint.y - q3;
          log.debug(`sides calc abc89, Q ${Q3}, q ${q3}, R ${R3}, r ${r2}`, { _x, _y });
          if (r2 === 0) {
            _x = outsidePoint.x;
            _y = outsidePoint.y;
          }
          if (R3 === 0) {
            _x = outsidePoint.x;
          }
          if (Q3 === 0) {
            _y = outsidePoint.y;
          }
          return { x: _x, y: _y };
        }
      }, "intersection");
      cutPathAtIntersect2 = /* @__PURE__ */ __name((_points, boundaryNode) => {
        log.debug("abc88 cutPathAtIntersect", _points, boundaryNode);
        let points = [];
        let lastPointOutside = _points[0];
        let isInside = false;
        _points.forEach((point8) => {
          if (!outsideNode2(boundaryNode, point8) && !isInside) {
            const inter = intersection3(boundaryNode, lastPointOutside, point8);
            let pointPresent = false;
            points.forEach((p3) => {
              pointPresent = pointPresent || p3.x === inter.x && p3.y === inter.y;
            });
            if (!points.some((e3) => e3.x === inter.x && e3.y === inter.y)) {
              points.push(inter);
            }
            isInside = true;
          } else {
            lastPointOutside = point8;
            if (!isInside) {
              points.push(point8);
            }
          }
        });
        return points;
      }, "cutPathAtIntersect");
      insertEdge2 = /* @__PURE__ */ __name(function(elem, e3, edge, clusterDb2, diagramType, graph, id41) {
        let points = edge.points;
        log.debug("abc88 InsertEdge: edge=", edge, "e=", e3);
        let pointsHasChanged = false;
        const tail = graph.node(e3.v);
        var head2 = graph.node(e3.w);
        if (head2?.intersect && tail?.intersect) {
          points = points.slice(1, edge.points.length - 1);
          points.unshift(tail.intersect(points[0]));
          points.push(head2.intersect(points[points.length - 1]));
        }
        if (edge.toCluster) {
          log.debug("to cluster abc88", clusterDb2[edge.toCluster]);
          points = cutPathAtIntersect2(edge.points, clusterDb2[edge.toCluster].node);
          pointsHasChanged = true;
        }
        if (edge.fromCluster) {
          log.debug("from cluster abc88", clusterDb2[edge.fromCluster]);
          points = cutPathAtIntersect2(points.reverse(), clusterDb2[edge.fromCluster].node).reverse();
          pointsHasChanged = true;
        }
        const lineData = points.filter((p3) => !Number.isNaN(p3.y));
        let curve = basis_default2;
        if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) {
          curve = edge.curve;
        }
        const { x: x5, y: y6 } = getLineFunctionsWithOffset(edge);
        const lineFunction = line_default().x(x5).y(y6).curve(curve);
        let strokeClasses;
        switch (edge.thickness) {
          case "normal":
            strokeClasses = "edge-thickness-normal";
            break;
          case "thick":
            strokeClasses = "edge-thickness-thick";
            break;
          case "invisible":
            strokeClasses = "edge-thickness-thick";
            break;
          default:
            strokeClasses = "";
        }
        switch (edge.pattern) {
          case "solid":
            strokeClasses += " edge-pattern-solid";
            break;
          case "dotted":
            strokeClasses += " edge-pattern-dotted";
            break;
          case "dashed":
            strokeClasses += " edge-pattern-dashed";
            break;
        }
        const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style);
        let url = "";
        if (getConfig2().flowchart.arrowMarkerAbsolute || getConfig2().state.arrowMarkerAbsolute) {
          url = getUrl(true);
        }
        addEdgeMarkers2(svgPath, edge, url, id41, diagramType);
        let paths = {};
        if (pointsHasChanged) {
          paths.updatedPath = points;
        }
        paths.originalPath = edge.points;
        return paths;
      }, "insertEdge");
    }
  });

  // src/dagre-wrapper/blockArrowHelper.ts
  var expandAndDeduplicateDirections, getArrowPoints;
  var init_blockArrowHelper = __esm({
    "src/dagre-wrapper/blockArrowHelper.ts"() {
      "use strict";
      expandAndDeduplicateDirections = /* @__PURE__ */ __name((directions) => {
        const uniqueDirections = /* @__PURE__ */ new Set();
        for (const direction2 of directions) {
          switch (direction2) {
            case "x":
              uniqueDirections.add("right");
              uniqueDirections.add("left");
              break;
            case "y":
              uniqueDirections.add("up");
              uniqueDirections.add("down");
              break;
            default:
              uniqueDirections.add(direction2);
              break;
          }
        }
        return uniqueDirections;
      }, "expandAndDeduplicateDirections");
      getArrowPoints = /* @__PURE__ */ __name((duplicatedDirections, bbox, node2, totalWidth) => {
        const directions = expandAndDeduplicateDirections(duplicatedDirections);
        const f2 = 2;
        const height2 = bbox.height + 2 * node2.padding;
        const midpoint3 = height2 / f2;
        const width3 = totalWidth ?? bbox.width + 2 * midpoint3 + node2.padding;
        const padding = node2.padding / 2;
        if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) {
          return [
            // Bottom
            { x: 0, y: 0 },
            { x: midpoint3, y: 0 },
            { x: width3 / 2, y: 2 * padding },
            { x: width3 - midpoint3, y: 0 },
            { x: width3, y: 0 },
            // Right
            { x: width3, y: -height2 / 3 },
            { x: width3 + 2 * padding, y: -height2 / 2 },
            { x: width3, y: -2 * height2 / 3 },
            { x: width3, y: -height2 },
            // Top
            { x: width3 - midpoint3, y: -height2 },
            { x: width3 / 2, y: -height2 - 2 * padding },
            { x: midpoint3, y: -height2 },
            // Left
            { x: 0, y: -height2 },
            { x: 0, y: -2 * height2 / 3 },
            { x: -2 * padding, y: -height2 / 2 },
            { x: 0, y: -height2 / 3 }
          ];
        }
        if (directions.has("right") && directions.has("left") && directions.has("up")) {
          return [
            { x: midpoint3, y: 0 },
            { x: width3 - midpoint3, y: 0 },
            { x: width3, y: -height2 / 2 },
            { x: width3 - midpoint3, y: -height2 },
            { x: midpoint3, y: -height2 },
            { x: 0, y: -height2 / 2 }
          ];
        }
        if (directions.has("right") && directions.has("left") && directions.has("down")) {
          return [
            { x: 0, y: 0 },
            { x: midpoint3, y: -height2 },
            { x: width3 - midpoint3, y: -height2 },
            { x: width3, y: 0 }
          ];
        }
        if (directions.has("right") && directions.has("up") && directions.has("down")) {
          return [
            { x: 0, y: 0 },
            { x: width3, y: -midpoint3 },
            { x: width3, y: -height2 + midpoint3 },
            { x: 0, y: -height2 }
          ];
        }
        if (directions.has("left") && directions.has("up") && directions.has("down")) {
          return [
            { x: width3, y: 0 },
            { x: 0, y: -midpoint3 },
            { x: 0, y: -height2 + midpoint3 },
            { x: width3, y: -height2 }
          ];
        }
        if (directions.has("right") && directions.has("left")) {
          return [
            { x: midpoint3, y: 0 },
            { x: midpoint3, y: -padding },
            { x: width3 - midpoint3, y: -padding },
            { x: width3 - midpoint3, y: 0 },
            { x: width3, y: -height2 / 2 },
            { x: width3 - midpoint3, y: -height2 },
            { x: width3 - midpoint3, y: -height2 + padding },
            { x: midpoint3, y: -height2 + padding },
            { x: midpoint3, y: -height2 },
            { x: 0, y: -height2 / 2 }
          ];
        }
        if (directions.has("up") && directions.has("down")) {
          return [
            // Bottom center
            { x: width3 / 2, y: 0 },
            // Left point of bottom arrow
            { x: 0, y: -padding },
            { x: midpoint3, y: -padding },
            // Left top over vertical section
            { x: midpoint3, y: -height2 + padding },
            { x: 0, y: -height2 + padding },
            // Top of arrow
            { x: width3 / 2, y: -height2 },
            { x: width3, y: -height2 + padding },
            // Top of right vertical bar
            { x: width3 - midpoint3, y: -height2 + padding },
            { x: width3 - midpoint3, y: -padding },
            { x: width3, y: -padding }
          ];
        }
        if (directions.has("right") && directions.has("up")) {
          return [
            { x: 0, y: 0 },
            { x: width3, y: -midpoint3 },
            { x: 0, y: -height2 }
          ];
        }
        if (directions.has("right") && directions.has("down")) {
          return [
            { x: 0, y: 0 },
            { x: width3, y: 0 },
            { x: 0, y: -height2 }
          ];
        }
        if (directions.has("left") && directions.has("up")) {
          return [
            { x: width3, y: 0 },
            { x: 0, y: -midpoint3 },
            { x: width3, y: -height2 }
          ];
        }
        if (directions.has("left") && directions.has("down")) {
          return [
            { x: width3, y: 0 },
            { x: 0, y: 0 },
            { x: width3, y: -height2 }
          ];
        }
        if (directions.has("right")) {
          return [
            { x: midpoint3, y: -padding },
            { x: midpoint3, y: -padding },
            { x: width3 - midpoint3, y: -padding },
            { x: width3 - midpoint3, y: 0 },
            { x: width3, y: -height2 / 2 },
            { x: width3 - midpoint3, y: -height2 },
            { x: width3 - midpoint3, y: -height2 + padding },
            // top left corner of arrow
            { x: midpoint3, y: -height2 + padding },
            { x: midpoint3, y: -height2 + padding }
          ];
        }
        if (directions.has("left")) {
          return [
            { x: midpoint3, y: 0 },
            { x: midpoint3, y: -padding },
            // Two points, the right corners
            { x: width3 - midpoint3, y: -padding },
            { x: width3 - midpoint3, y: -height2 + padding },
            { x: midpoint3, y: -height2 + padding },
            { x: midpoint3, y: -height2 },
            { x: 0, y: -height2 / 2 }
          ];
        }
        if (directions.has("up")) {
          return [
            // Bottom center
            { x: midpoint3, y: -padding },
            // Left top over vertical section
            { x: midpoint3, y: -height2 + padding },
            { x: 0, y: -height2 + padding },
            // Top of arrow
            { x: width3 / 2, y: -height2 },
            { x: width3, y: -height2 + padding },
            // Top of right vertical bar
            { x: width3 - midpoint3, y: -height2 + padding },
            { x: width3 - midpoint3, y: -padding }
          ];
        }
        if (directions.has("down")) {
          return [
            // Bottom center
            { x: width3 / 2, y: 0 },
            // Left point of bottom arrow
            { x: 0, y: -padding },
            { x: midpoint3, y: -padding },
            // Left top over vertical section
            { x: midpoint3, y: -height2 + padding },
            { x: width3 - midpoint3, y: -height2 + padding },
            { x: width3 - midpoint3, y: -padding },
            { x: width3, y: -padding }
          ];
        }
        return [{ x: 0, y: 0 }];
      }, "getArrowPoints");
    }
  });

  // src/dagre-wrapper/intersect/intersect-node.js
  function intersectNode2(node2, point8) {
    return node2.intersect(point8);
  }
  var intersect_node_default2;
  var init_intersect_node2 = __esm({
    "src/dagre-wrapper/intersect/intersect-node.js"() {
      "use strict";
      __name(intersectNode2, "intersectNode");
      intersect_node_default2 = intersectNode2;
    }
  });

  // src/dagre-wrapper/intersect/intersect-ellipse.js
  function intersectEllipse2(node2, rx, ry, point8) {
    var cx = node2.x;
    var cy = node2.y;
    var px = cx - point8.x;
    var py = cy - point8.y;
    var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);
    var dx = Math.abs(rx * ry * px / det);
    if (point8.x < cx) {
      dx = -dx;
    }
    var dy = Math.abs(rx * ry * py / det);
    if (point8.y < cy) {
      dy = -dy;
    }
    return { x: cx + dx, y: cy + dy };
  }
  var intersect_ellipse_default2;
  var init_intersect_ellipse2 = __esm({
    "src/dagre-wrapper/intersect/intersect-ellipse.js"() {
      "use strict";
      __name(intersectEllipse2, "intersectEllipse");
      intersect_ellipse_default2 = intersectEllipse2;
    }
  });

  // src/dagre-wrapper/intersect/intersect-circle.js
  function intersectCircle2(node2, rx, point8) {
    return intersect_ellipse_default2(node2, rx, rx, point8);
  }
  var intersect_circle_default2;
  var init_intersect_circle2 = __esm({
    "src/dagre-wrapper/intersect/intersect-circle.js"() {
      "use strict";
      init_intersect_ellipse2();
      __name(intersectCircle2, "intersectCircle");
      intersect_circle_default2 = intersectCircle2;
    }
  });

  // src/dagre-wrapper/intersect/intersect-line.js
  function intersectLine2(p1, p22, q1, q22) {
    var a1, a2, b1, b22, c1, c22;
    var r1, r2, r3, r4;
    var denom, offset, num;
    var x5, y6;
    a1 = p22.y - p1.y;
    b1 = p1.x - p22.x;
    c1 = p22.x * p1.y - p1.x * p22.y;
    r3 = a1 * q1.x + b1 * q1.y + c1;
    r4 = a1 * q22.x + b1 * q22.y + c1;
    if (r3 !== 0 && r4 !== 0 && sameSign2(r3, r4)) {
      return;
    }
    a2 = q22.y - q1.y;
    b22 = q1.x - q22.x;
    c22 = q22.x * q1.y - q1.x * q22.y;
    r1 = a2 * p1.x + b22 * p1.y + c22;
    r2 = a2 * p22.x + b22 * p22.y + c22;
    if (r1 !== 0 && r2 !== 0 && sameSign2(r1, r2)) {
      return;
    }
    denom = a1 * b22 - a2 * b1;
    if (denom === 0) {
      return;
    }
    offset = Math.abs(denom / 2);
    num = b1 * c22 - b22 * c1;
    x5 = num < 0 ? (num - offset) / denom : (num + offset) / denom;
    num = a2 * c1 - a1 * c22;
    y6 = num < 0 ? (num - offset) / denom : (num + offset) / denom;
    return { x: x5, y: y6 };
  }
  function sameSign2(r1, r2) {
    return r1 * r2 > 0;
  }
  var intersect_line_default2;
  var init_intersect_line2 = __esm({
    "src/dagre-wrapper/intersect/intersect-line.js"() {
      "use strict";
      __name(intersectLine2, "intersectLine");
      __name(sameSign2, "sameSign");
      intersect_line_default2 = intersectLine2;
    }
  });

  // src/dagre-wrapper/intersect/intersect-polygon.js
  function intersectPolygon2(node2, polyPoints, point8) {
    var x1 = node2.x;
    var y1 = node2.y;
    var intersections = [];
    var minX = Number.POSITIVE_INFINITY;
    var minY = Number.POSITIVE_INFINITY;
    if (typeof polyPoints.forEach === "function") {
      polyPoints.forEach(function(entry) {
        minX = Math.min(minX, entry.x);
        minY = Math.min(minY, entry.y);
      });
    } else {
      minX = Math.min(minX, polyPoints.x);
      minY = Math.min(minY, polyPoints.y);
    }
    var left3 = x1 - node2.width / 2 - minX;
    var top2 = y1 - node2.height / 2 - minY;
    for (var i2 = 0; i2 < polyPoints.length; i2++) {
      var p1 = polyPoints[i2];
      var p22 = polyPoints[i2 < polyPoints.length - 1 ? i2 + 1 : 0];
      var intersect3 = intersect_line_default2(
        node2,
        point8,
        { x: left3 + p1.x, y: top2 + p1.y },
        { x: left3 + p22.x, y: top2 + p22.y }
      );
      if (intersect3) {
        intersections.push(intersect3);
      }
    }
    if (!intersections.length) {
      return node2;
    }
    if (intersections.length > 1) {
      intersections.sort(function(p3, q3) {
        var pdx = p3.x - point8.x;
        var pdy = p3.y - point8.y;
        var distp = Math.sqrt(pdx * pdx + pdy * pdy);
        var qdx = q3.x - point8.x;
        var qdy = q3.y - point8.y;
        var distq = Math.sqrt(qdx * qdx + qdy * qdy);
        return distp < distq ? -1 : distp === distq ? 0 : 1;
      });
    }
    return intersections[0];
  }
  var intersect_polygon_default2;
  var init_intersect_polygon2 = __esm({
    "src/dagre-wrapper/intersect/intersect-polygon.js"() {
      "use strict";
      init_intersect_line2();
      intersect_polygon_default2 = intersectPolygon2;
      __name(intersectPolygon2, "intersectPolygon");
    }
  });

  // src/dagre-wrapper/intersect/intersect-rect.js
  var intersectRect3, intersect_rect_default2;
  var init_intersect_rect2 = __esm({
    "src/dagre-wrapper/intersect/intersect-rect.js"() {
      "use strict";
      intersectRect3 = /* @__PURE__ */ __name((node2, point8) => {
        var x5 = node2.x;
        var y6 = node2.y;
        var dx = point8.x - x5;
        var dy = point8.y - y6;
        var w4 = node2.width / 2;
        var h3 = node2.height / 2;
        var sx, sy;
        if (Math.abs(dy) * w4 > Math.abs(dx) * h3) {
          if (dy < 0) {
            h3 = -h3;
          }
          sx = dy === 0 ? 0 : h3 * dx / dy;
          sy = h3;
        } else {
          if (dx < 0) {
            w4 = -w4;
          }
          sx = w4;
          sy = dx === 0 ? 0 : w4 * dy / dx;
        }
        return { x: x5 + sx, y: y6 + sy };
      }, "intersectRect");
      intersect_rect_default2 = intersectRect3;
    }
  });

  // src/dagre-wrapper/intersect/index.js
  var intersect_default2;
  var init_intersect2 = __esm({
    "src/dagre-wrapper/intersect/index.js"() {
      "use strict";
      init_intersect_node2();
      init_intersect_circle2();
      init_intersect_ellipse2();
      init_intersect_polygon2();
      init_intersect_rect2();
      intersect_default2 = {
        node: intersect_node_default2,
        circle: intersect_circle_default2,
        ellipse: intersect_ellipse_default2,
        polygon: intersect_polygon_default2,
        rect: intersect_rect_default2
      };
    }
  });

  // src/dagre-wrapper/shapes/util.js
  function insertPolygonShape2(parent4, w4, h3, points) {
    return parent4.insert("polygon", ":first-child").attr(
      "points",
      points.map(function(d3) {
        return d3.x + "," + d3.y;
      }).join(" ")
    ).attr("class", "label-container").attr("transform", "translate(" + -w4 / 2 + "," + h3 / 2 + ")");
  }
  var labelHelper2, updateNodeBounds2;
  var init_util4 = __esm({
    "src/dagre-wrapper/shapes/util.js"() {
      "use strict";
      init_createLabel2();
      init_createText();
      init_diagramAPI();
      init_config();
      init_src32();
      init_common();
      init_utils2();
      init_labelImageUtils();
      labelHelper2 = /* @__PURE__ */ __name(async (parent4, node2, _classes, isNode2) => {
        const config3 = getConfig2();
        let classes3;
        const useHtmlLabels = node2.useHtmlLabels || getEffectiveHtmlLabels(config3);
        if (!_classes) {
          classes3 = "node default";
        } else {
          classes3 = _classes;
        }
        const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId || node2.id);
        const label = shapeSvg.insert("g").attr("class", "label").attr("style", node2.labelStyle);
        let labelText;
        if (node2.labelText === void 0) {
          labelText = "";
        } else {
          labelText = typeof node2.labelText === "string" ? node2.labelText : node2.labelText[0];
        }
        let text4;
        if (node2.labelType === "markdown") {
          text4 = createText(
            label,
            sanitizeText(decodeEntities(labelText), config3),
            {
              useHtmlLabels,
              width: node2.width || config3.flowchart.wrappingWidth,
              classes: "markdown-node-label"
            },
            config3
          );
        } else {
          text4 = await createLabel_default2(
            label,
            sanitizeText(decodeEntities(labelText), config3),
            node2.labelStyle,
            false,
            isNode2
          );
        }
        let bbox = text4.getBBox();
        const halfPadding = node2.padding / 2;
        if (getEffectiveHtmlLabels(config3)) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          await configureLabelImages(div, labelText);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        if (useHtmlLabels) {
          label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
        } else {
          label.attr("transform", "translate(0, " + -bbox.height / 2 + ")");
        }
        if (node2.centerLabel) {
          label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
        }
        label.insert("rect", ":first-child");
        return { shapeSvg, bbox, halfPadding, label };
      }, "labelHelper");
      updateNodeBounds2 = /* @__PURE__ */ __name((node2, element3) => {
        const bbox = element3.node().getBBox();
        node2.width = bbox.width;
        node2.height = bbox.height;
      }, "updateNodeBounds");
      __name(insertPolygonShape2, "insertPolygonShape");
    }
  });

  // src/dagre-wrapper/shapes/note.js
  var note2, note_default;
  var init_note2 = __esm({
    "src/dagre-wrapper/shapes/note.js"() {
      "use strict";
      init_util4();
      init_logger();
      init_diagramAPI();
      init_config();
      init_intersect2();
      note2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const useHtmlLabels = node2.useHtmlLabels || getEffectiveHtmlLabels(getConfig2());
        if (!useHtmlLabels) {
          node2.centerLabel = true;
        }
        const { shapeSvg, bbox, halfPadding } = await labelHelper2(
          parent4,
          node2,
          "node " + node2.classes,
          true
        );
        log.info("Classes = ", node2.classes);
        const rect3 = shapeSvg.insert("rect", ":first-child");
        rect3.attr("rx", node2.rx).attr("ry", node2.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding);
        updateNodeBounds2(node2, rect3);
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "note");
      note_default = note2;
    }
  });

  // src/dagre-wrapper/nodes.js
  function applyNodePropertyBorders(rect3, borders, totalWidth, totalHeight) {
    const strokeDashArray = [];
    const addBorder = /* @__PURE__ */ __name((length2) => {
      strokeDashArray.push(length2, 0);
    }, "addBorder");
    const skipBorder = /* @__PURE__ */ __name((length2) => {
      strokeDashArray.push(0, length2);
    }, "skipBorder");
    if (borders.includes("t")) {
      log.debug("add top border");
      addBorder(totalWidth);
    } else {
      skipBorder(totalWidth);
    }
    if (borders.includes("r")) {
      log.debug("add right border");
      addBorder(totalHeight);
    } else {
      skipBorder(totalHeight);
    }
    if (borders.includes("b")) {
      log.debug("add bottom border");
      addBorder(totalWidth);
    } else {
      skipBorder(totalWidth);
    }
    if (borders.includes("l")) {
      log.debug("add left border");
      addBorder(totalHeight);
    } else {
      skipBorder(totalHeight);
    }
    rect3.attr("stroke-dasharray", strokeDashArray.join(" "));
  }
  var formatClass, getClassesFromNode, question2, choice2, hexagon2, block_arrow, rect_left_inv_arrow2, lean_right2, lean_left2, trapezoid2, inv_trapezoid2, rect_right_inv_arrow, cylinder2, rect2, composite, labelRect2, rectWithTitle2, stadium2, circle5, doublecircle2, subroutine2, start2, forkJoin2, end, class_box, shapes3, nodeElems2, insertNode2, positionNode2;
  var init_nodes3 = __esm({
    "src/dagre-wrapper/nodes.js"() {
      "use strict";
      init_src32();
      init_diagramAPI();
      init_config();
      init_logger();
      init_blockArrowHelper();
      init_createLabel2();
      init_intersect2();
      init_note2();
      init_util4();
      formatClass = /* @__PURE__ */ __name((str2) => {
        if (str2) {
          return " " + str2;
        }
        return "";
      }, "formatClass");
      getClassesFromNode = /* @__PURE__ */ __name((node2, otherClasses) => {
        return `${otherClasses ? otherClasses : "node default"}${formatClass(node2.classes)} ${formatClass(
          node2.class
        )}`;
      }, "getClassesFromNode");
      question2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const s2 = w4 + h3;
        const points = [
          { x: s2 / 2, y: 0 },
          { x: s2, y: -s2 / 2 },
          { x: s2 / 2, y: -s2 },
          { x: 0, y: -s2 / 2 }
        ];
        log.info("Question main (Circle)");
        const questionElem = insertPolygonShape2(shapeSvg, s2, s2, points);
        questionElem.attr("style", node2.style);
        updateNodeBounds2(node2, questionElem);
        node2.intersect = function(point8) {
          log.warn("Intersect called");
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "question");
      choice2 = /* @__PURE__ */ __name((parent4, node2) => {
        const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id);
        const s2 = 28;
        const points = [
          { x: 0, y: s2 / 2 },
          { x: s2 / 2, y: 0 },
          { x: 0, y: -s2 / 2 },
          { x: -s2 / 2, y: 0 }
        ];
        const choice3 = shapeSvg.insert("polygon", ":first-child").attr(
          "points",
          points.map(function(d3) {
            return d3.x + "," + d3.y;
          }).join(" ")
        );
        choice3.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28);
        node2.width = 28;
        node2.height = 28;
        node2.intersect = function(point8) {
          return intersect_default2.circle(node2, 14, point8);
        };
        return shapeSvg;
      }, "choice");
      hexagon2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const f2 = 4;
        const h3 = node2.positioned ? node2.height : bbox.height + node2.padding;
        const m3 = h3 / f2;
        const w4 = node2.positioned ? node2.width : bbox.width + 2 * m3 + node2.padding;
        const points = [
          { x: m3, y: 0 },
          { x: w4 - m3, y: 0 },
          { x: w4, y: -h3 / 2 },
          { x: w4 - m3, y: -h3 },
          { x: m3, y: -h3 },
          { x: 0, y: -h3 / 2 }
        ];
        const hex2 = insertPolygonShape2(shapeSvg, w4, h3, points);
        hex2.attr("style", node2.style);
        updateNodeBounds2(node2, hex2);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "hexagon");
      block_arrow = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(parent4, node2, void 0, true);
        const f2 = 2;
        const h3 = bbox.height + 2 * node2.padding;
        const m3 = h3 / f2;
        const naturalW = bbox.width + 2 * m3 + node2.padding;
        const isSpanning = node2.positioned && (node2.widthInColumns ?? 1) > 1 && node2.width > naturalW;
        const w4 = isSpanning ? node2.width : naturalW;
        const points = getArrowPoints(node2.directions, bbox, node2, w4);
        const blockArrow = insertPolygonShape2(shapeSvg, w4, h3, points);
        blockArrow.attr("style", node2.style);
        updateNodeBounds2(node2, blockArrow);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "block_arrow");
      rect_left_inv_arrow2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const points = [
          { x: -h3 / 2, y: 0 },
          { x: w4, y: 0 },
          { x: w4, y: -h3 },
          { x: -h3 / 2, y: -h3 },
          { x: 0, y: -h3 / 2 }
        ];
        const el = insertPolygonShape2(shapeSvg, w4, h3, points);
        el.attr("style", node2.style);
        node2.width = w4 + h3;
        node2.height = h3;
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "rect_left_inv_arrow");
      lean_right2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(parent4, node2, getClassesFromNode(node2), true);
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const points = [
          { x: -2 * h3 / 6, y: 0 },
          { x: w4 - h3 / 6, y: 0 },
          { x: w4 + 2 * h3 / 6, y: -h3 },
          { x: h3 / 6, y: -h3 }
        ];
        const el = insertPolygonShape2(shapeSvg, w4, h3, points);
        el.attr("style", node2.style);
        updateNodeBounds2(node2, el);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "lean_right");
      lean_left2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const points = [
          { x: 2 * h3 / 6, y: 0 },
          { x: w4 + h3 / 6, y: 0 },
          { x: w4 - 2 * h3 / 6, y: -h3 },
          { x: -h3 / 6, y: -h3 }
        ];
        const el = insertPolygonShape2(shapeSvg, w4, h3, points);
        el.attr("style", node2.style);
        updateNodeBounds2(node2, el);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "lean_left");
      trapezoid2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const points = [
          { x: -2 * h3 / 6, y: 0 },
          { x: w4 + 2 * h3 / 6, y: 0 },
          { x: w4 - h3 / 6, y: -h3 },
          { x: h3 / 6, y: -h3 }
        ];
        const el = insertPolygonShape2(shapeSvg, w4, h3, points);
        el.attr("style", node2.style);
        updateNodeBounds2(node2, el);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "trapezoid");
      inv_trapezoid2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const points = [
          { x: h3 / 6, y: 0 },
          { x: w4 - h3 / 6, y: 0 },
          { x: w4 + 2 * h3 / 6, y: -h3 },
          { x: -2 * h3 / 6, y: -h3 }
        ];
        const el = insertPolygonShape2(shapeSvg, w4, h3, points);
        el.attr("style", node2.style);
        updateNodeBounds2(node2, el);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "inv_trapezoid");
      rect_right_inv_arrow = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const points = [
          { x: 0, y: 0 },
          { x: w4 + h3 / 2, y: 0 },
          { x: w4, y: -h3 / 2 },
          { x: w4 + h3 / 2, y: -h3 },
          { x: 0, y: -h3 }
        ];
        const el = insertPolygonShape2(shapeSvg, w4, h3, points);
        el.attr("style", node2.style);
        updateNodeBounds2(node2, el);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "rect_right_inv_arrow");
      cylinder2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const rx = w4 / 2;
        const ry = rx / (2.5 + w4 / 50);
        const h3 = bbox.height + ry + node2.padding;
        const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w4 + " 0 a " + rx + "," + ry + " 0,0,0 " + -w4 + " 0 l 0," + h3 + " a " + rx + "," + ry + " 0,0,0 " + w4 + " 0 l 0," + -h3;
        const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node2.style).attr("d", shape).attr("transform", "translate(" + -w4 / 2 + "," + -(h3 / 2 + ry) + ")");
        updateNodeBounds2(node2, el);
        node2.intersect = function(point8) {
          const pos = intersect_default2.rect(node2, point8);
          const x5 = pos.x - node2.x;
          if (rx != 0 && (Math.abs(x5) < node2.width / 2 || Math.abs(x5) == node2.width / 2 && Math.abs(pos.y - node2.y) > node2.height / 2 - ry)) {
            let y6 = ry * ry * (1 - x5 * x5 / (rx * rx));
            if (y6 != 0) {
              y6 = Math.sqrt(y6);
            }
            y6 = ry - y6;
            if (point8.y - node2.y > 0) {
              y6 = -y6;
            }
            pos.y += y6;
          }
          return pos;
        };
        return shapeSvg;
      }, "cylinder");
      rect2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox, halfPadding } = await labelHelper2(
          parent4,
          node2,
          "node " + node2.classes + " " + node2.class,
          true
        );
        const rect3 = shapeSvg.insert("rect", ":first-child");
        const totalWidth = node2.positioned ? node2.width : bbox.width + node2.padding;
        const totalHeight = node2.positioned ? node2.height : bbox.height + node2.padding;
        const x5 = node2.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;
        const y6 = node2.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;
        rect3.attr("class", "basic label-container").attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("x", x5).attr("y", y6).attr("width", totalWidth).attr("height", totalHeight);
        if (node2.props) {
          const propKeys = new Set(Object.keys(node2.props));
          if (node2.props.borders) {
            applyNodePropertyBorders(rect3, node2.props.borders, totalWidth, totalHeight);
            propKeys.delete("borders");
          }
          propKeys.forEach((propKey) => {
            log.warn(`Unknown node property ${propKey}`);
          });
        }
        updateNodeBounds2(node2, rect3);
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "rect");
      composite = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox, halfPadding } = await labelHelper2(
          parent4,
          node2,
          "node " + node2.classes,
          true
        );
        const rect3 = shapeSvg.insert("rect", ":first-child");
        const totalWidth = node2.positioned ? node2.width : bbox.width + node2.padding;
        const totalHeight = node2.positioned ? node2.height : bbox.height + node2.padding;
        const x5 = node2.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;
        const y6 = node2.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;
        rect3.attr("class", "basic cluster composite label-container").attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("x", x5).attr("y", y6).attr("width", totalWidth).attr("height", totalHeight);
        if (node2.props) {
          const propKeys = new Set(Object.keys(node2.props));
          if (node2.props.borders) {
            applyNodePropertyBorders(rect3, node2.props.borders, totalWidth, totalHeight);
            propKeys.delete("borders");
          }
          propKeys.forEach((propKey) => {
            log.warn(`Unknown node property ${propKey}`);
          });
        }
        updateNodeBounds2(node2, rect3);
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "composite");
      labelRect2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg } = await labelHelper2(parent4, node2, "label", true);
        log.trace("Classes = ", node2.class);
        const rect3 = shapeSvg.insert("rect", ":first-child");
        const totalWidth = 0;
        const totalHeight = 0;
        rect3.attr("width", totalWidth).attr("height", totalHeight);
        shapeSvg.attr("class", "label edgeLabel");
        if (node2.props) {
          const propKeys = new Set(Object.keys(node2.props));
          if (node2.props.borders) {
            applyNodePropertyBorders(rect3, node2.props.borders, totalWidth, totalHeight);
            propKeys.delete("borders");
          }
          propKeys.forEach((propKey) => {
            log.warn(`Unknown node property ${propKey}`);
          });
        }
        updateNodeBounds2(node2, rect3);
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "labelRect");
      __name(applyNodePropertyBorders, "applyNodePropertyBorders");
      rectWithTitle2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        let classes3;
        if (!node2.classes) {
          classes3 = "node default";
        } else {
          classes3 = "node " + node2.classes;
        }
        const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId || node2.id);
        const rect3 = shapeSvg.insert("rect", ":first-child");
        const innerLine = shapeSvg.insert("line");
        const label = shapeSvg.insert("g").attr("class", "label");
        const text22 = node2.labelText.flat ? node2.labelText.flat() : node2.labelText;
        let title2 = "";
        if (typeof text22 === "object") {
          title2 = text22[0];
        } else {
          title2 = text22;
        }
        log.info("Label text abc79", title2, text22, typeof text22 === "object");
        const text4 = await createLabel_default2(label, title2, node2.labelStyle, true, true);
        let bbox = { width: 0, height: 0 };
        if (getEffectiveHtmlLabels(getConfig2())) {
          const div = text4.children[0];
          const dv = select_default2(text4);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        log.info("Text 2", text22);
        const textRows = text22.slice(1, text22.length);
        let titleBox = text4.getBBox();
        const descr = await createLabel_default2(
          label,
          textRows.join ? textRows.join("<br/>") : textRows,
          node2.labelStyle,
          true,
          true
        );
        if (getEffectiveHtmlLabels(getConfig2())) {
          const div = descr.children[0];
          const dv = select_default2(descr);
          bbox = div.getBoundingClientRect();
          dv.attr("width", bbox.width);
          dv.attr("height", bbox.height);
        }
        const halfPadding = node2.padding / 2;
        select_default2(descr).attr(
          "transform",
          "translate( " + // (titleBox.width - bbox.width) / 2 +
          (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")"
        );
        select_default2(text4).attr(
          "transform",
          "translate( " + // (titleBox.width - bbox.width) / 2 +
          (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)"
        );
        bbox = label.node().getBBox();
        label.attr(
          "transform",
          "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")"
        );
        rect3.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding);
        innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);
        updateNodeBounds2(node2, rect3);
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "rectWithTitle");
      stadium2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const h3 = bbox.height + node2.padding;
        const w4 = bbox.width + h3 / 4 + node2.padding;
        const rect3 = shapeSvg.insert("rect", ":first-child").attr("style", node2.style).attr("rx", h3 / 2).attr("ry", h3 / 2).attr("x", -w4 / 2).attr("y", -h3 / 2).attr("width", w4).attr("height", h3);
        updateNodeBounds2(node2, rect3);
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "stadium");
      circle5 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox, halfPadding } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const circle6 = shapeSvg.insert("circle", ":first-child");
        circle6.attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding);
        log.info("Circle main");
        updateNodeBounds2(node2, circle6);
        node2.intersect = function(point8) {
          log.info("Circle intersect", node2, bbox.width / 2 + halfPadding, point8);
          return intersect_default2.circle(node2, bbox.width / 2 + halfPadding, point8);
        };
        return shapeSvg;
      }, "circle");
      doublecircle2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox, halfPadding } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const gap = 5;
        const circleGroup = shapeSvg.insert("g", ":first-child");
        const outerCircle = circleGroup.insert("circle");
        const innerCircle = circleGroup.insert("circle");
        circleGroup.attr("class", node2.class);
        outerCircle.attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node2.padding + gap * 2).attr("height", bbox.height + node2.padding + gap * 2);
        innerCircle.attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding);
        log.info("DoubleCircle main");
        updateNodeBounds2(node2, outerCircle);
        node2.intersect = function(point8) {
          log.info("DoubleCircle intersect", node2, bbox.width / 2 + halfPadding + gap, point8);
          return intersect_default2.circle(node2, bbox.width / 2 + halfPadding + gap, point8);
        };
        return shapeSvg;
      }, "doublecircle");
      subroutine2 = /* @__PURE__ */ __name(async (parent4, node2) => {
        const { shapeSvg, bbox } = await labelHelper2(
          parent4,
          node2,
          getClassesFromNode(node2, void 0),
          true
        );
        const w4 = bbox.width + node2.padding;
        const h3 = bbox.height + node2.padding;
        const points = [
          { x: 0, y: 0 },
          { x: w4, y: 0 },
          { x: w4, y: -h3 },
          { x: 0, y: -h3 },
          { x: 0, y: 0 },
          { x: -8, y: 0 },
          { x: w4 + 8, y: 0 },
          { x: w4 + 8, y: -h3 },
          { x: -8, y: -h3 },
          { x: -8, y: 0 }
        ];
        const el = insertPolygonShape2(shapeSvg, w4, h3, points);
        el.attr("style", node2.style);
        updateNodeBounds2(node2, el);
        node2.intersect = function(point8) {
          return intersect_default2.polygon(node2, points, point8);
        };
        return shapeSvg;
      }, "subroutine");
      start2 = /* @__PURE__ */ __name((parent4, node2) => {
        const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id);
        const circle6 = shapeSvg.insert("circle", ":first-child");
        circle6.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14);
        updateNodeBounds2(node2, circle6);
        node2.intersect = function(point8) {
          return intersect_default2.circle(node2, 7, point8);
        };
        return shapeSvg;
      }, "start");
      forkJoin2 = /* @__PURE__ */ __name((parent4, node2, dir2) => {
        const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id);
        let width3 = 70;
        let height2 = 10;
        if (dir2 === "LR") {
          width3 = 10;
          height2 = 70;
        }
        const shape = shapeSvg.append("rect").attr("x", -1 * width3 / 2).attr("y", -1 * height2 / 2).attr("width", width3).attr("height", height2).attr("class", "fork-join");
        updateNodeBounds2(node2, shape);
        node2.height = node2.height + node2.padding / 2;
        node2.width = node2.width + node2.padding / 2;
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "forkJoin");
      end = /* @__PURE__ */ __name((parent4, node2) => {
        const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id);
        const innerCircle = shapeSvg.insert("circle", ":first-child");
        const circle6 = shapeSvg.insert("circle", ":first-child");
        circle6.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14);
        innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10);
        updateNodeBounds2(node2, circle6);
        node2.intersect = function(point8) {
          return intersect_default2.circle(node2, 7, point8);
        };
        return shapeSvg;
      }, "end");
      class_box = /* @__PURE__ */ __name(async (parent4, node2) => {
        const halfPadding = node2.padding / 2;
        const rowPadding = 4;
        const lineHeight = 8;
        let classes3;
        if (!node2.classes) {
          classes3 = "node default";
        } else {
          classes3 = "node " + node2.classes;
        }
        const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId || node2.id);
        const rect3 = shapeSvg.insert("rect", ":first-child");
        const topLine = shapeSvg.insert("line");
        const bottomLine = shapeSvg.insert("line");
        let maxWidth2 = 0;
        let maxHeight = rowPadding;
        const labelContainer = shapeSvg.insert("g").attr("class", "label");
        let verticalPos = 0;
        const hasInterface = node2.classData.annotations?.[0];
        const interfaceLabelText = node2.classData.annotations[0] ? "\xAB" + node2.classData.annotations[0] + "\xBB" : "";
        const interfaceLabel = await createLabel_default2(
          labelContainer,
          interfaceLabelText,
          node2.labelStyle,
          true,
          true
        );
        let interfaceBBox = interfaceLabel.getBBox();
        if (getEffectiveHtmlLabels(getConfig2())) {
          const div = interfaceLabel.children[0];
          const dv = select_default2(interfaceLabel);
          interfaceBBox = div.getBoundingClientRect();
          dv.attr("width", interfaceBBox.width);
          dv.attr("height", interfaceBBox.height);
        }
        if (node2.classData.annotations[0]) {
          maxHeight += interfaceBBox.height + rowPadding;
          maxWidth2 += interfaceBBox.width;
        }
        let classTitleString = node2.classData.label;
        if (node2.classData.type !== void 0 && node2.classData.type !== "") {
          if (getEffectiveHtmlLabels(getConfig2())) {
            classTitleString += "&lt;" + node2.classData.type + "&gt;";
          } else {
            classTitleString += "<" + node2.classData.type + ">";
          }
        }
        const classTitleLabel = await createLabel_default2(
          labelContainer,
          classTitleString,
          node2.labelStyle,
          true,
          true
        );
        select_default2(classTitleLabel).attr("class", "classTitle");
        let classTitleBBox = classTitleLabel.getBBox();
        if (getEffectiveHtmlLabels(getConfig2())) {
          const div = classTitleLabel.children[0];
          const dv = select_default2(classTitleLabel);
          classTitleBBox = div.getBoundingClientRect();
          dv.attr("width", classTitleBBox.width);
          dv.attr("height", classTitleBBox.height);
        }
        maxHeight += classTitleBBox.height + rowPadding;
        if (classTitleBBox.width > maxWidth2) {
          maxWidth2 = classTitleBBox.width;
        }
        const classAttributes = [];
        node2.classData.members.forEach(async (member) => {
          const parsedInfo = member.getDisplayDetails();
          let parsedText = parsedInfo.displayText;
          if (getEffectiveHtmlLabels(getConfig2())) {
            parsedText = parsedText.replace(/</g, "&lt;").replace(/>/g, "&gt;");
          }
          const lbl = await createLabel_default2(
            labelContainer,
            parsedText,
            parsedInfo.cssStyle ? parsedInfo.cssStyle : node2.labelStyle,
            true,
            true
          );
          let bbox = lbl.getBBox();
          if (getEffectiveHtmlLabels(getConfig2())) {
            const div = lbl.children[0];
            const dv = select_default2(lbl);
            bbox = div.getBoundingClientRect();
            dv.attr("width", bbox.width);
            dv.attr("height", bbox.height);
          }
          if (bbox.width > maxWidth2) {
            maxWidth2 = bbox.width;
          }
          maxHeight += bbox.height + rowPadding;
          classAttributes.push(lbl);
        });
        maxHeight += lineHeight;
        const classMethods = [];
        node2.classData.methods.forEach(async (member) => {
          const parsedInfo = member.getDisplayDetails();
          let displayText = parsedInfo.displayText;
          if (getEffectiveHtmlLabels(getConfig2())) {
            displayText = displayText.replace(/</g, "&lt;").replace(/>/g, "&gt;");
          }
          const lbl = await createLabel_default2(
            labelContainer,
            displayText,
            parsedInfo.cssStyle ? parsedInfo.cssStyle : node2.labelStyle,
            true,
            true
          );
          let bbox = lbl.getBBox();
          if (getEffectiveHtmlLabels(getConfig2())) {
            const div = lbl.children[0];
            const dv = select_default2(lbl);
            bbox = div.getBoundingClientRect();
            dv.attr("width", bbox.width);
            dv.attr("height", bbox.height);
          }
          if (bbox.width > maxWidth2) {
            maxWidth2 = bbox.width;
          }
          maxHeight += bbox.height + rowPadding;
          classMethods.push(lbl);
        });
        maxHeight += lineHeight;
        if (hasInterface) {
          let diffX2 = (maxWidth2 - interfaceBBox.width) / 2;
          select_default2(interfaceLabel).attr(
            "transform",
            "translate( " + (-1 * maxWidth2 / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")"
          );
          verticalPos = interfaceBBox.height + rowPadding;
        }
        let diffX = (maxWidth2 - classTitleBBox.width) / 2;
        select_default2(classTitleLabel).attr(
          "transform",
          "translate( " + (-1 * maxWidth2 / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")"
        );
        verticalPos += classTitleBBox.height + rowPadding;
        topLine.attr("class", "divider").attr("x1", -maxWidth2 / 2 - halfPadding).attr("x2", maxWidth2 / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);
        verticalPos += lineHeight;
        classAttributes.forEach((lbl) => {
          select_default2(lbl).attr(
            "transform",
            "translate( " + -maxWidth2 / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")"
          );
          const memberBBox = lbl?.getBBox();
          verticalPos += (memberBBox?.height ?? 0) + rowPadding;
        });
        verticalPos += lineHeight;
        bottomLine.attr("class", "divider").attr("x1", -maxWidth2 / 2 - halfPadding).attr("x2", maxWidth2 / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);
        verticalPos += lineHeight;
        classMethods.forEach((lbl) => {
          select_default2(lbl).attr(
            "transform",
            "translate( " + -maxWidth2 / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")"
          );
          const memberBBox = lbl?.getBBox();
          verticalPos += (memberBBox?.height ?? 0) + rowPadding;
        });
        rect3.attr("style", node2.style).attr("class", "outer title-state").attr("x", -maxWidth2 / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth2 + node2.padding).attr("height", maxHeight + node2.padding);
        updateNodeBounds2(node2, rect3);
        node2.intersect = function(point8) {
          return intersect_default2.rect(node2, point8);
        };
        return shapeSvg;
      }, "class_box");
      shapes3 = {
        rhombus: question2,
        composite,
        question: question2,
        rect: rect2,
        labelRect: labelRect2,
        rectWithTitle: rectWithTitle2,
        choice: choice2,
        circle: circle5,
        doublecircle: doublecircle2,
        stadium: stadium2,
        hexagon: hexagon2,
        block_arrow,
        rect_left_inv_arrow: rect_left_inv_arrow2,
        lean_right: lean_right2,
        lean_left: lean_left2,
        trapezoid: trapezoid2,
        inv_trapezoid: inv_trapezoid2,
        rect_right_inv_arrow,
        cylinder: cylinder2,
        start: start2,
        end,
        note: note_default,
        subroutine: subroutine2,
        fork: forkJoin2,
        join: forkJoin2,
        class_box
      };
      nodeElems2 = {};
      insertNode2 = /* @__PURE__ */ __name(async (elem, node2, renderOptions) => {
        let newEl;
        let el;
        if (node2.link) {
          let target;
          if (getConfig2().securityLevel === "sandbox") {
            target = "_top";
          } else if (node2.linkTarget) {
            target = node2.linkTarget || "_blank";
          }
          newEl = elem.insert("svg:a").attr("xlink:href", node2.link).attr("target", target);
          el = await shapes3[node2.shape](newEl, node2, renderOptions);
        } else {
          el = await shapes3[node2.shape](elem, node2, renderOptions);
          newEl = el;
        }
        if (node2.tooltip) {
          el.attr("title", node2.tooltip);
        }
        if (node2.class) {
          el.attr("class", "node default " + node2.class);
        }
        nodeElems2[node2.id] = newEl;
        if (node2.haveCallback) {
          nodeElems2[node2.id].attr("class", nodeElems2[node2.id].attr("class") + " clickable");
        }
        return newEl;
      }, "insertNode");
      positionNode2 = /* @__PURE__ */ __name((node2) => {
        const el = nodeElems2[node2.id];
        log.trace(
          "Transforming node",
          node2.diff,
          node2,
          "translate(" + (node2.x - node2.width / 2 - 5) + ", " + node2.width / 2 + ")"
        );
        const padding = 8;
        const diff2 = node2.diff || 0;
        if (node2.clusterNode) {
          el.attr(
            "transform",
            "translate(" + (node2.x + diff2 - node2.width / 2) + ", " + (node2.y - node2.height / 2 - padding) + ")"
          );
        } else {
          el.attr("transform", "translate(" + node2.x + ", " + node2.y + ")");
        }
        return diff2;
      }, "positionNode");
    }
  });

  // src/diagrams/block/renderHelpers.ts
  function getNodeFromBlock(block2, db12, positioned = false) {
    const vertex = block2;
    let classStr = "default";
    if ((vertex?.classes?.length || 0) > 0) {
      classStr = (vertex?.classes ?? []).join(" ");
    }
    classStr = classStr + " flowchart-label";
    let radius2 = 0;
    let shape = "";
    let padding;
    switch (vertex.type) {
      case "round":
        radius2 = 5;
        shape = "rect";
        break;
      case "composite":
        radius2 = 0;
        shape = "composite";
        padding = 0;
        break;
      case "square":
        shape = "rect";
        break;
      case "diamond":
        shape = "question";
        break;
      case "hexagon":
        shape = "hexagon";
        break;
      case "block_arrow":
        shape = "block_arrow";
        break;
      case "odd":
        shape = "rect_left_inv_arrow";
        break;
      case "lean_right":
        shape = "lean_right";
        break;
      case "lean_left":
        shape = "lean_left";
        break;
      case "trapezoid":
        shape = "trapezoid";
        break;
      case "inv_trapezoid":
        shape = "inv_trapezoid";
        break;
      case "rect_left_inv_arrow":
        shape = "rect_left_inv_arrow";
        break;
      case "circle":
        shape = "circle";
        break;
      case "ellipse":
        shape = "ellipse";
        break;
      case "stadium":
        shape = "stadium";
        break;
      case "subroutine":
        shape = "subroutine";
        break;
      case "cylinder":
        shape = "cylinder";
        break;
      case "group":
        shape = "rect";
        break;
      case "doublecircle":
        shape = "doublecircle";
        break;
      default:
        shape = "rect";
    }
    const styles7 = getStylesFromArray(vertex?.styles ?? []);
    const vertexText = vertex.label;
    const bounds4 = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 };
    const dbDiagramId = db12.getDiagramId();
    const node2 = {
      labelStyle: styles7.labelStyle,
      shape,
      labelText: vertexText,
      rx: radius2,
      ry: radius2,
      class: classStr,
      style: styles7.style,
      id: vertex.id,
      domId: dbDiagramId ? `${dbDiagramId}-${vertex.id}` : vertex.id,
      directions: vertex.directions,
      width: bounds4.width,
      height: bounds4.height,
      x: bounds4.x,
      y: bounds4.y,
      positioned,
      intersect: void 0,
      type: vertex.type,
      padding: padding ?? getConfig()?.block?.padding ?? 0,
      widthInColumns: vertex.widthInColumns ?? 1
    };
    return node2;
  }
  async function calculateBlockSize(elem, block2, db12) {
    const node2 = getNodeFromBlock(block2, db12, false);
    if (node2.type === "group") {
      return;
    }
    const config3 = getConfig();
    const nodeEl = await insertNode2(elem, node2, { config: config3 });
    const boundingBox3 = nodeEl.node().getBBox();
    const obj = db12.getBlock(node2.id);
    obj.size = { width: boundingBox3.width, height: boundingBox3.height, x: 0, y: 0, node: nodeEl };
    db12.setBlock(obj);
    nodeEl.remove();
  }
  async function insertBlockPositioned(elem, block2, db12) {
    const node2 = getNodeFromBlock(block2, db12, true);
    const obj = db12.getBlock(node2.id);
    if (obj.type !== "space") {
      const config3 = getConfig();
      await insertNode2(elem, node2, { config: config3 });
      block2.intersect = node2?.intersect;
      positionNode2(node2);
    }
  }
  async function performOperations(elem, blocks2, db12, operation) {
    for (const block2 of blocks2) {
      await operation(elem, block2, db12);
      if (block2.children) {
        await performOperations(elem, block2.children, db12, operation);
      }
    }
  }
  async function calculateBlockSizes(elem, blocks2, db12) {
    await performOperations(elem, blocks2, db12, calculateBlockSize);
  }
  async function insertBlocks(elem, blocks2, db12) {
    await performOperations(elem, blocks2, db12, insertBlockPositioned);
  }
  async function insertEdges(elem, edges3, blocks2, db12, id41) {
    const g2 = new Graph({
      multigraph: true,
      compound: true
    });
    g2.setGraph({
      rankdir: "TB",
      nodesep: 10,
      ranksep: 10,
      marginx: 8,
      marginy: 8
    });
    for (const block2 of blocks2) {
      if (block2.size) {
        g2.setNode(block2.id, {
          width: block2.size.width,
          height: block2.size.height,
          intersect: block2.intersect
        });
      }
    }
    for (const edge of edges3) {
      if (edge.start && edge.end) {
        const startBlock = db12.getBlock(edge.start);
        const endBlock = db12.getBlock(edge.end);
        if (startBlock?.size && endBlock?.size) {
          const start3 = startBlock.size;
          const end2 = endBlock.size;
          const points = [
            { x: start3.x, y: start3.y },
            { x: start3.x + (end2.x - start3.x) / 2, y: start3.y + (end2.y - start3.y) / 2 },
            { x: end2.x, y: end2.y }
          ];
          const prefixedEdgeId = id41 ? `${id41}-${edge.id}` : edge.id;
          const thicknessClass = edge.thickness === "thick" ? "edge-thickness-thick" : "edge-thickness-normal";
          const patternClass = edge.pattern === "dotted" ? "edge-pattern-dotted" : "edge-pattern-solid";
          const dynamicClasses = `${thicknessClass} ${patternClass} flowchart-link LS-a1 LE-b1`;
          insertEdge2(
            elem,
            { v: edge.start, w: edge.end, name: prefixedEdgeId },
            {
              ...edge,
              id: prefixedEdgeId,
              arrowTypeEnd: edge.arrowTypeEnd,
              arrowTypeStart: edge.arrowTypeStart,
              points,
              classes: dynamicClasses
            },
            void 0,
            "block",
            g2,
            id41
          );
          if (edge.label) {
            await insertEdgeLabel2(elem, {
              ...edge,
              label: edge.label,
              labelStyle: "stroke: #333; stroke-width: 1.5px;fill:none;",
              arrowTypeEnd: edge.arrowTypeEnd,
              arrowTypeStart: edge.arrowTypeStart,
              points,
              classes: dynamicClasses
            });
            positionEdgeLabel3(
              { ...edge, x: points[1].x, y: points[1].y },
              {
                originalPath: points
              }
            );
          }
        }
      }
    }
  }
  var init_renderHelpers = __esm({
    "src/diagrams/block/renderHelpers.ts"() {
      "use strict";
      init_graphlib();
      init_config();
      init_edges2();
      init_nodes3();
      init_utils2();
      __name(getNodeFromBlock, "getNodeFromBlock");
      __name(calculateBlockSize, "calculateBlockSize");
      __name(insertBlockPositioned, "insertBlockPositioned");
      __name(performOperations, "performOperations");
      __name(calculateBlockSizes, "calculateBlockSizes");
      __name(insertBlocks, "insertBlocks");
      __name(insertEdges, "insertEdges");
    }
  });

  // src/diagrams/block/blockRenderer.ts
  var getClasses5, draw24, blockRenderer_default;
  var init_blockRenderer = __esm({
    "src/diagrams/block/blockRenderer.ts"() {
      "use strict";
      init_src32();
      init_config();
      init_markers2();
      init_logger();
      init_setupGraphViewbox();
      init_layout3();
      init_renderHelpers();
      getClasses5 = /* @__PURE__ */ __name(function(text4, diagObj) {
        return diagObj.db.getClasses();
      }, "getClasses");
      draw24 = /* @__PURE__ */ __name(async function(text4, id41, _version, diagObj) {
        const { securityLevel, block: conf5 } = getConfig();
        const db12 = diagObj.db;
        db12.setDiagramId(id41);
        let sandboxElement;
        if (securityLevel === "sandbox") {
          sandboxElement = select_default2("#i" + id41);
        }
        const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body");
        const svg2 = securityLevel === "sandbox" ? root4.select(`[id="${id41}"]`) : select_default2(`[id="${id41}"]`);
        const markers3 = ["point", "circle", "cross"];
        markers_default2(svg2, markers3, diagObj.type, id41);
        const bl = db12.getBlocks();
        const blArr = db12.getBlocksFlat();
        const edges3 = db12.getEdges();
        const nodes5 = svg2.insert("g").attr("class", "block");
        await calculateBlockSizes(nodes5, bl, db12);
        const bounds4 = layout5(db12);
        await insertBlocks(nodes5, bl, db12);
        await insertEdges(nodes5, edges3, blArr, db12, id41);
        if (bounds4) {
          const bounds22 = bounds4;
          const magicFactor = Math.max(1, Math.round(0.125 * (bounds22.width / bounds22.height)));
          const height2 = bounds22.height + magicFactor + 10;
          const width3 = bounds22.width + 10;
          const { useMaxWidth } = conf5;
          configureSvgSize(svg2, height2, width3, !!useMaxWidth);
          log.debug("Here Bounds", bounds4, bounds22);
          svg2.attr(
            "viewBox",
            `${bounds22.x - 5} ${bounds22.y - 5} ${bounds22.width + 10} ${bounds22.height + 10}`
          );
        }
      }, "draw");
      blockRenderer_default = {
        draw: draw24,
        getClasses: getClasses5
      };
    }
  });

  // src/diagrams/block/blockDiagram.ts
  var blockDiagram_exports = {};
  __export(blockDiagram_exports, {
    diagram: () => diagram25
  });
  var diagram25;
  var init_blockDiagram = __esm({
    "src/diagrams/block/blockDiagram.ts"() {
      "use strict";
      init_block();
      init_blockDB();
      init_styles19();
      init_blockRenderer();
      diagram25 = {
        parser: block_default,
        db: blockDB_default,
        renderer: blockRenderer_default,
        styles: styles_default17
      };
    }
  });

  // src/diagrams/treeView/boxDrawingPreprocessor.ts
  function isBoxDrawingFormat(lines) {
    return lines.some((line2) => ALL_BOX_CHARS.test(line2));
  }
  function inferSegmentWidth(contentLines) {
    for (const line2 of contentLines) {
      const match3 = BRANCH_CHAR.exec(line2);
      if (match3?.index && match3.index > 0) {
        return match3.index;
      }
    }
    return 4;
  }
  function remapErrorLines(message, lineMap) {
    return message.replace(/\bline\s+(\d+)\b/gi, (match3, lineStr) => {
      const line2 = parseInt(lineStr, 10);
      const original = lineMap.get(line2);
      return original ? `line ${original}` : match3;
    });
  }
  function preprocessBoxDrawing(input) {
    const lines = input.split("\n");
    const lineMap = /* @__PURE__ */ new Map();
    let keywordIdx = -1;
    for (const [i2, line2] of lines.entries()) {
      if (line2.trim() === "treeView-beta") {
        keywordIdx = i2;
        break;
      }
    }
    if (keywordIdx === -1) {
      return { text: input, lineMap };
    }
    const contentLineTexts = [];
    for (let i2 = keywordIdx + 1; i2 < lines.length; i2++) {
      const line2 = lines[i2];
      const trimmed = line2.trim();
      if (trimmed === "" || COMMENT_LINE.test(line2) || METADATA_LINE.test(line2)) {
        continue;
      }
      if (DECORATION_ONLY.test(line2)) {
        continue;
      }
      contentLineTexts.push(line2.replace(/\t/g, "    "));
    }
    if (!isBoxDrawingFormat(contentLineTexts)) {
      return { text: input, lineMap };
    }
    const segmentWidth = inferSegmentWidth(contentLineTexts);
    const outputLines = [];
    let outLineNo = 0;
    for (let i2 = 0; i2 <= keywordIdx; i2++) {
      outputLines.push(lines[i2]);
      outLineNo++;
      lineMap.set(outLineNo, i2 + 1);
    }
    for (let i2 = keywordIdx + 1; i2 < lines.length; i2++) {
      const line2 = lines[i2];
      const trimmed = line2.trim();
      const origLineNo = i2 + 1;
      if (trimmed === "") {
        outputLines.push(line2);
        outLineNo++;
        lineMap.set(outLineNo, origLineNo);
        continue;
      }
      if (COMMENT_LINE.test(line2)) {
        outputLines.push(line2);
        outLineNo++;
        lineMap.set(outLineNo, origLineNo);
        continue;
      }
      if (METADATA_LINE.test(line2)) {
        outputLines.push(line2);
        outLineNo++;
        lineMap.set(outLineNo, origLineNo);
        continue;
      }
      if (DECORATION_ONLY.test(line2)) {
        continue;
      }
      const normalized = line2.replace(/\t/g, "    ");
      const branchMatch = BRANCH_CHAR.exec(normalized);
      if (branchMatch?.index !== void 0) {
        const branchCol = branchMatch.index;
        const depth = Math.round(branchCol / segmentWidth) + 1;
        let pos = branchCol + 1;
        while (pos < normalized.length && DASH_CHAR.test(normalized[pos])) {
          pos++;
        }
        while (pos < normalized.length && normalized[pos] === " ") {
          pos++;
        }
        const content = normalized.slice(pos).trimEnd();
        if (!content) {
          throw new Error(
            `Line ${origLineNo}: Empty node \u2014 expected a filename or directory name after the box-drawing prefix`
          );
        }
        const indent = INDENT_UNIT.repeat(depth);
        outputLines.push(indent + content);
        outLineNo++;
        lineMap.set(outLineNo, origLineNo);
      } else if (/^[\s─━│┃└┗├┣]+$/.test(normalized)) {
        continue;
      } else if (ALL_BOX_CHARS.test(normalized)) {
        outputLines.push(line2);
        outLineNo++;
        lineMap.set(outLineNo, origLineNo);
      } else if (/^\s+/.test(normalized)) {
        throw new Error(
          `Line ${origLineNo}: Unexpected indentation without box-drawing characters. In box-drawing format, use \u251C\u2500\u2500 or \u2514\u2500\u2500 prefixes for indented nodes.`
        );
      } else {
        outputLines.push(line2);
        outLineNo++;
        lineMap.set(outLineNo, origLineNo);
      }
    }
    return { text: outputLines.join("\n"), lineMap };
  }
  var ALL_BOX_CHARS, BRANCH_CHAR, DASH_CHAR, DECORATION_ONLY, METADATA_LINE, COMMENT_LINE, INDENT_UNIT;
  var init_boxDrawingPreprocessor = __esm({
    "src/diagrams/treeView/boxDrawingPreprocessor.ts"() {
      "use strict";
      ALL_BOX_CHARS = /[─━│┃└┗├┣]/;
      BRANCH_CHAR = /[└┗├┣]/;
      DASH_CHAR = /[─━]/;
      DECORATION_ONLY = /^[\s│┃]+$/;
      METADATA_LINE = /^\s*(title[\t ]|accTitle[\t ]*:|accDescr[\t ]*[:{])/;
      COMMENT_LINE = /^\s*%%/;
      INDENT_UNIT = "    ";
      __name(isBoxDrawingFormat, "isBoxDrawingFormat");
      __name(inferSegmentWidth, "inferSegmentWidth");
      __name(remapErrorLines, "remapErrorLines");
      __name(preprocessBoxDrawing, "preprocessBoxDrawing");
    }
  });

  // src/diagrams/treeView/db.ts
  var state3, clear19, getRoot, getCount, defaultConfig4, getConfig6, addNode2, db7, db_default;
  var init_db3 = __esm({
    "src/diagrams/treeView/db.ts"() {
      "use strict";
      init_config();
      init_defaultConfig();
      init_utils2();
      init_imperativeState();
      init_commonDb();
      state3 = new ImperativeState(() => ({
        cnt: 1,
        stack: [
          {
            id: 0,
            level: -1,
            name: "/",
            nodeType: "directory",
            children: []
          }
        ]
      }));
      clear19 = /* @__PURE__ */ __name(() => {
        state3.reset();
        clear();
      }, "clear");
      getRoot = /* @__PURE__ */ __name(() => {
        return state3.records.stack[0];
      }, "getRoot");
      getCount = /* @__PURE__ */ __name(() => state3.records.cnt, "getCount");
      defaultConfig4 = defaultConfig_default.treeView;
      getConfig6 = /* @__PURE__ */ __name(() => {
        return cleanAndMerge(defaultConfig4, getConfig().treeView);
      }, "getConfig");
      addNode2 = /* @__PURE__ */ __name((level, name, nodeType3, cssClass, icon2, description) => {
        while (level <= state3.records.stack[state3.records.stack.length - 1].level) {
          state3.records.stack.pop();
        }
        const node2 = {
          id: state3.records.cnt++,
          level,
          name,
          nodeType: nodeType3,
          icon: icon2,
          cssClass,
          description,
          children: []
        };
        state3.records.stack[state3.records.stack.length - 1].children.push(node2);
        state3.records.stack.push(node2);
      }, "addNode");
      db7 = {
        clear: clear19,
        addNode: addNode2,
        getRoot,
        getCount,
        getConfig: getConfig6,
        getAccTitle,
        getAccDescription,
        getDiagramTitle,
        setAccDescription,
        setAccTitle,
        setDiagramTitle
      };
      db_default = db7;
    }
  });

  // src/diagrams/treeView/parser.ts
  var populate18, parser22;
  var init_parser3 = __esm({
    "src/diagrams/treeView/parser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_config();
      init_logger();
      init_common();
      init_populateCommonDb();
      init_boxDrawingPreprocessor();
      init_db3();
      populate18 = /* @__PURE__ */ __name((ast) => {
        populateCommonDb(ast, db_default);
        for (const node2 of ast.nodes) {
          const level = typeof node2.indent === "number" ? node2.indent : 0;
          let name = node2.name;
          const isDirectory = name.endsWith("/");
          if (isDirectory) {
            name = name.slice(0, -1);
          }
          const nodeType3 = isDirectory ? "directory" : "file";
          const cssClass = node2.classAnnotation || void 0;
          const rawIcon = node2.iconAnnotation;
          const icon2 = rawIcon !== void 0 ? rawIcon || "none" : void 0;
          const rawDesc = node2.descAnnotation || void 0;
          const description = rawDesc ? sanitizeText(rawDesc, getConfig()) : void 0;
          db_default.addNode(level, name, nodeType3, cssClass, icon2, description);
        }
      }, "populate");
      parser22 = {
        parse: /* @__PURE__ */ __name(async (input) => {
          const { text: text4, lineMap } = preprocessBoxDrawing(input);
          try {
            const ast = await parse3("treeView", text4);
            log.debug(ast);
            populate18(ast);
          } catch (error3) {
            if (lineMap.size > 0 && error3 instanceof Error) {
              error3.message = remapErrorLines(error3.message, lineMap);
            }
            throw error3;
          }
        }, "parse")
      };
    }
  });

  // src/diagrams/treeView/icons.ts
  function detectIcon(name, config3) {
    const filenameIcon = config3?.filenameIcons?.[name];
    if (filenameIcon) {
      return filenameIcon;
    }
    const dotIdx = name.lastIndexOf(".");
    if (dotIdx > 0) {
      const ext = name.substring(dotIdx).toLowerCase();
      const extensionIcons = config3?.extensionIcons;
      return extensionIcons?.[ext] ?? extensionIcons?.[ext.slice(1)];
    }
    return void 0;
  }
  function qualifyIcon(icon2, defaultIconPack) {
    if (icon2.includes(":")) {
      return icon2;
    }
    if (icon2 in treeViewIcons.icons || !defaultIconPack) {
      return `${treeViewIcons.prefix}:${icon2}`;
    }
    return `${defaultIconPack}:${icon2}`;
  }
  function getNodeIcon(node2, config3) {
    if (node2.icon === "none") {
      return void 0;
    }
    if (node2.icon) {
      return qualifyIcon(node2.icon, config3.defaultIconPack);
    }
    if (!config3.showIcons) {
      return void 0;
    }
    if (node2.nodeType === "file") {
      const detected = detectIcon(node2.name, config3);
      if (detected === "none") {
        return void 0;
      }
      if (detected) {
        return qualifyIcon(detected, config3.defaultIconPack);
      }
    }
    return `${treeViewIcons.prefix}:${node2.nodeType === "directory" ? "folder" : "file"}`;
  }
  var treeViewIcons;
  var init_icons2 = __esm({
    "src/diagrams/treeView/icons.ts"() {
      "use strict";
      treeViewIcons = {
        prefix: "mermaid-treeview",
        height: 24,
        width: 24,
        icons: {
          folder: {
            body: '<path fill="currentColor" d="M10.59 4.59A2 2 0 0 0 9.17 4H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.17z"/>'
          },
          file: {
            body: '<path fill="currentColor" fill-rule="evenodd" d="M6 2a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8.83a2 2 0 0 0-.59-1.42l-4.82-4.82A2 2 0 0 0 13.17 2H6Zm7.5 1.9l4.6 4.6h-3.6a1 1 0 0 1-1-1V3.9Z" clip-rule="evenodd"/>'
          }
        }
      };
      __name(detectIcon, "detectIcon");
      __name(qualifyIcon, "qualifyIcon");
      __name(getNodeIcon, "getNodeIcon");
    }
  });

  // src/diagrams/treeView/renderer.ts
  var ICON_SIZE, ICON_GAP, DESC_GAP, iconSymbolId, injectIconDefs, positionLabel, positionLine, drawTree, draw25, renderer8, renderer_default;
  var init_renderer3 = __esm({
    "src/diagrams/treeView/renderer.ts"() {
      "use strict";
      init_logger();
      init_icons();
      init_selectSvgElement();
      init_setupGraphViewbox();
      init_icons2();
      registerIconPacks([
        {
          name: treeViewIcons.prefix,
          icons: treeViewIcons
        }
      ]);
      ICON_SIZE = 14;
      ICON_GAP = 4;
      DESC_GAP = 16;
      iconSymbolId = /* @__PURE__ */ __name((diagramId3, icon2) => `tv-icon-${diagramId3}-${icon2.replace(/[^\w-]/g, "-")}`, "iconSymbolId");
      injectIconDefs = /* @__PURE__ */ __name(async (svg2, root4, config3, diagramId3) => {
        const usedIcons = /* @__PURE__ */ new Set();
        const collect = /* @__PURE__ */ __name((node2) => {
          const icon2 = getNodeIcon(node2, config3);
          if (icon2) {
            usedIcons.add(icon2);
          }
          node2.children.forEach(collect);
        }, "collect");
        collect(root4);
        if (usedIcons.size === 0) {
          return;
        }
        const iconSVGs = await Promise.all(
          [...usedIcons].map(async (icon2) => ({
            icon: icon2,
            svg: await getIconSVG(icon2, {
              height: ICON_SIZE,
              width: ICON_SIZE
            })
          }))
        );
        const defs2 = svg2.append("defs");
        for (const { icon: icon2, svg: iconSVG } of iconSVGs) {
          defs2.append("g").attr("id", iconSymbolId(diagramId3, icon2)).html(iconSVG);
        }
      }, "injectIconDefs");
      positionLabel = /* @__PURE__ */ __name((x5, y6, node2, domElem, config3, diagramId3) => {
        const nodeGroup = domElem.append("g");
        let cssClasses = "treeView-node-label";
        if (node2.nodeType === "directory") {
          cssClasses += " treeView-node-dir";
        }
        if (node2.cssClass) {
          cssClasses += ` ${node2.cssClass}`;
        }
        const iconOffset = ICON_SIZE + ICON_GAP;
        const icon2 = getNodeIcon(node2, config3);
        const showIcon = icon2 !== void 0;
        if (icon2) {
          nodeGroup.append("use").attr("xlink:href", `#${iconSymbolId(diagramId3, icon2)}`).attr("x", x5 + config3.paddingX).attr("y", y6 + config3.paddingY).attr("class", "treeView-node-icon");
        }
        const label = nodeGroup.append("text").text(node2.name).attr("dominant-baseline", "middle").attr("class", cssClasses);
        const { height: labelHeight, width: labelWidth } = label.node().getBBox();
        const height2 = labelHeight + config3.paddingY * 2;
        const labelX = x5 + config3.paddingX + (showIcon ? iconOffset : 0);
        label.attr("x", labelX);
        label.attr("y", y6 + height2 / 2);
        const labelRightEdge = labelX + labelWidth;
        const width3 = labelWidth + config3.paddingX * 2 + (showIcon ? iconOffset : 0);
        node2.BBox = { x: x5, y: y6, width: width3, height: height2 };
        if (node2.cssClass?.split(/\s+/).includes("highlight")) {
          nodeGroup.insert("rect", ":first-child").attr("x", x5).attr("y", y6 + 1).attr("width", 0).attr("height", height2 - 2).attr("rx", 3).attr("class", "treeView-highlight-bg");
        }
        return { node: node2, nodeGroup, labelRightEdge, centerY: y6 + height2 / 2 };
      }, "positionLabel");
      positionLine = /* @__PURE__ */ __name((domElem, x1, y1, x22, y22, lineThickness) => {
        return domElem.append("line").attr("x1", x1).attr("y1", y1).attr("x2", x22).attr("y2", y22).attr("stroke-width", lineThickness).attr("class", "treeView-node-line");
      }, "positionLine");
      drawTree = /* @__PURE__ */ __name((elem, root4, config3, diagramId3) => {
        let totalHeight = 0;
        let totalWidth = 0;
        const renderInfos = [];
        const drawNode2 = /* @__PURE__ */ __name((elem2, node2, config4, depth) => {
          const indent = depth * (config4.rowIndent + config4.paddingX);
          const info2 = positionLabel(indent, totalHeight, node2, elem2, config4, diagramId3);
          renderInfos.push(info2);
          const { height: height2, width: width3 } = node2.BBox;
          positionLine(
            elem2,
            indent - config4.rowIndent,
            totalHeight + height2 / 2,
            indent,
            totalHeight + height2 / 2,
            config4.lineThickness
          );
          totalWidth = Math.max(totalWidth, indent + width3);
          totalHeight += height2;
        }, "drawNode");
        const processNode = /* @__PURE__ */ __name((node2, depth = 0) => {
          drawNode2(elem, node2, config3, depth);
          node2.children.forEach((child) => {
            processNode(child, depth + 1);
          });
          const { x: x5, y: y6, height: height2 } = node2.BBox;
          if (node2.children.length) {
            const { y: endY, height: endHeight } = node2.children[node2.children.length - 1].BBox;
            positionLine(
              elem,
              x5 + config3.paddingX,
              y6 + height2,
              x5 + config3.paddingX,
              endY + endHeight / 2 + config3.lineThickness / 2,
              config3.lineThickness
            );
          }
        }, "processNode");
        processNode(root4);
        const nodesWithDesc = renderInfos.filter((ri) => ri.node.description);
        if (nodesWithDesc.length > 0) {
          const maxLabelRight = Math.max(...renderInfos.map((ri) => ri.labelRightEdge));
          const descX = maxLabelRight + DESC_GAP;
          for (const ri of nodesWithDesc) {
            const desc = ri.nodeGroup.append("text").text(ri.node.description).attr("dominant-baseline", "middle").attr("class", "treeView-node-description").attr("x", descX).attr("y", ri.centerY);
            const descBBox = desc.node().getBBox();
            totalWidth = Math.max(totalWidth, descX + descBBox.width + config3.paddingX);
          }
        }
        for (const ri of renderInfos) {
          if (ri.node.cssClass?.split(/\s+/).includes("highlight")) {
            const rect3 = ri.nodeGroup.select(".treeView-highlight-bg");
            if (!rect3.empty()) {
              const rectWidth = totalWidth - ri.node.BBox.x + 8;
              rect3.attr("width", rectWidth);
              totalWidth = Math.max(totalWidth, ri.node.BBox.x + rectWidth + 2);
            }
          }
        }
        return { totalHeight, totalWidth };
      }, "drawTree");
      draw25 = /* @__PURE__ */ __name(async (text4, id41, _ver, diagObj) => {
        log.debug("Rendering treeView diagram\n" + text4);
        const db12 = diagObj.db;
        const root4 = db12.getRoot();
        const config3 = db12.getConfig();
        const svg2 = selectSvgElement(id41);
        await injectIconDefs(svg2, root4, config3, id41);
        const treeElem = svg2.append("g");
        treeElem.attr("class", "tree-view");
        const { totalHeight, totalWidth } = drawTree(treeElem, root4, config3, id41);
        svg2.attr("viewBox", `-${config3.lineThickness / 2} 0 ${totalWidth} ${totalHeight}`);
        configureSvgSize(svg2, totalHeight, totalWidth, config3.useMaxWidth);
      }, "draw");
      renderer8 = {
        draw: draw25
      };
      renderer_default = renderer8;
    }
  });

  // src/diagrams/treeView/styles.ts
  var defaultTreeViewDiagramStyles, styles4, styles_default18;
  var init_styles20 = __esm({
    "src/diagrams/treeView/styles.ts"() {
      "use strict";
      init_utils2();
      defaultTreeViewDiagramStyles = {
        labelFontSize: "16px",
        labelColor: "black",
        lineColor: "black",
        iconColor: "#546e7a",
        descriptionColor: "#6a9955",
        highlightBg: "rgba(255, 193, 7, 0.15)",
        highlightStroke: "#ffc107"
      };
      styles4 = /* @__PURE__ */ __name(({
        treeView
      }) => {
        const {
          labelFontSize,
          labelColor,
          lineColor,
          iconColor,
          descriptionColor,
          highlightBg,
          highlightStroke
        } = cleanAndMerge(defaultTreeViewDiagramStyles, treeView);
        return `
    .treeView-node-label {
        font-size: ${labelFontSize};
        fill: ${labelColor};
        white-space: pre;
    }
    .treeView-node-dir {
        font-weight: bold;
    }
    .treeView-node-line {
        stroke: ${lineColor};
    }
    .treeView-node-icon {
        color: ${iconColor};
    }
    .treeView-node-description {
        font-size: ${labelFontSize};
        fill: ${descriptionColor};
        font-style: italic;
        white-space: pre;
    }
    .treeView-highlight-bg {
        fill: ${highlightBg};
        stroke: ${highlightStroke};
        stroke-width: 1;
    }
    `;
      }, "styles");
      styles_default18 = styles4;
    }
  });

  // src/diagrams/treeView/diagram.ts
  var diagram_exports3 = {};
  __export(diagram_exports3, {
    diagram: () => diagram26
  });
  var diagram26;
  var init_diagram3 = __esm({
    "src/diagrams/treeView/diagram.ts"() {
      "use strict";
      init_parser3();
      init_db3();
      init_renderer3();
      init_styles20();
      diagram26 = {
        db: db_default,
        renderer: renderer_default,
        parser: parser22,
        styles: styles_default18
      };
    }
  });

  // src/diagrams/architecture/architectureTypes.ts
  var ArchitectureDirectionName, ArchitectureDirectionArrow, ArchitectureDirectionArrowShift, getOppositeArchitectureDirection, isArchitectureDirection, isArchitectureDirectionX, isArchitectureDirectionY, isArchitectureDirectionXY, isArchitecturePairXY, isValidArchitectureDirectionPair, getArchitectureDirectionPair, shiftPositionByArchitectureDirectionPair, getArchitectureDirectionXYFactors, getArchitectureDirectionAlignment, isArchitectureService, isArchitectureJunction, architectureGroupAlignmentKey, edgeData, nodeData;
  var init_architectureTypes = __esm({
    "src/diagrams/architecture/architectureTypes.ts"() {
      "use strict";
      ArchitectureDirectionName = {
        L: "left",
        R: "right",
        T: "top",
        B: "bottom"
      };
      ArchitectureDirectionArrow = {
        L: /* @__PURE__ */ __name((scale3) => `${scale3},${scale3 / 2} 0,${scale3} 0,0`, "L"),
        R: /* @__PURE__ */ __name((scale3) => `0,${scale3 / 2} ${scale3},0 ${scale3},${scale3}`, "R"),
        T: /* @__PURE__ */ __name((scale3) => `0,0 ${scale3},0 ${scale3 / 2},${scale3}`, "T"),
        B: /* @__PURE__ */ __name((scale3) => `${scale3 / 2},0 ${scale3},${scale3} 0,${scale3}`, "B")
      };
      ArchitectureDirectionArrowShift = {
        L: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, "L"),
        R: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, "R"),
        T: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, "T"),
        B: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, "B")
      };
      getOppositeArchitectureDirection = /* @__PURE__ */ __name(function(x5) {
        if (isArchitectureDirectionX(x5)) {
          return x5 === "L" ? "R" : "L";
        } else {
          return x5 === "T" ? "B" : "T";
        }
      }, "getOppositeArchitectureDirection");
      isArchitectureDirection = /* @__PURE__ */ __name(function(x5) {
        const temp = x5;
        return temp === "L" || temp === "R" || temp === "T" || temp === "B";
      }, "isArchitectureDirection");
      isArchitectureDirectionX = /* @__PURE__ */ __name(function(x5) {
        const temp = x5;
        return temp === "L" || temp === "R";
      }, "isArchitectureDirectionX");
      isArchitectureDirectionY = /* @__PURE__ */ __name(function(x5) {
        const temp = x5;
        return temp === "T" || temp === "B";
      }, "isArchitectureDirectionY");
      isArchitectureDirectionXY = /* @__PURE__ */ __name(function(a2, b3) {
        const aX_bY = isArchitectureDirectionX(a2) && isArchitectureDirectionY(b3);
        const aY_bX = isArchitectureDirectionY(a2) && isArchitectureDirectionX(b3);
        return aX_bY || aY_bX;
      }, "isArchitectureDirectionXY");
      isArchitecturePairXY = /* @__PURE__ */ __name(function(pair) {
        const lhs = pair[0];
        const rhs = pair[1];
        const aX_bY = isArchitectureDirectionX(lhs) && isArchitectureDirectionY(rhs);
        const aY_bX = isArchitectureDirectionY(lhs) && isArchitectureDirectionX(rhs);
        return aX_bY || aY_bX;
      }, "isArchitecturePairXY");
      isValidArchitectureDirectionPair = /* @__PURE__ */ __name(function(x5) {
        return x5 !== "LL" && x5 !== "RR" && x5 !== "TT" && x5 !== "BB";
      }, "isValidArchitectureDirectionPair");
      getArchitectureDirectionPair = /* @__PURE__ */ __name(function(sourceDir, targetDir) {
        const pair = `${sourceDir}${targetDir}`;
        return isValidArchitectureDirectionPair(pair) ? pair : void 0;
      }, "getArchitectureDirectionPair");
      shiftPositionByArchitectureDirectionPair = /* @__PURE__ */ __name(function([x5, y6], pair) {
        const lhs = pair[0];
        const rhs = pair[1];
        if (isArchitectureDirectionX(lhs)) {
          if (isArchitectureDirectionY(rhs)) {
            return [x5 + (lhs === "L" ? -1 : 1), y6 + (rhs === "T" ? 1 : -1)];
          } else {
            return [x5 + (lhs === "L" ? -1 : 1), y6];
          }
        } else {
          if (isArchitectureDirectionX(rhs)) {
            return [x5 + (rhs === "L" ? 1 : -1), y6 + (lhs === "T" ? 1 : -1)];
          } else {
            return [x5, y6 + (lhs === "T" ? 1 : -1)];
          }
        }
      }, "shiftPositionByArchitectureDirectionPair");
      getArchitectureDirectionXYFactors = /* @__PURE__ */ __name(function(pair) {
        if (pair === "LT" || pair === "TL") {
          return [1, 1];
        } else if (pair === "BL" || pair === "LB") {
          return [1, -1];
        } else if (pair === "BR" || pair === "RB") {
          return [-1, -1];
        } else {
          return [-1, 1];
        }
      }, "getArchitectureDirectionXYFactors");
      getArchitectureDirectionAlignment = /* @__PURE__ */ __name(function(a2, b3) {
        if (isArchitectureDirectionXY(a2, b3)) {
          return "bend";
        } else if (isArchitectureDirectionX(a2)) {
          return "horizontal";
        }
        return "vertical";
      }, "getArchitectureDirectionAlignment");
      isArchitectureService = /* @__PURE__ */ __name(function(x5) {
        const temp = x5;
        return temp.type === "service";
      }, "isArchitectureService");
      isArchitectureJunction = /* @__PURE__ */ __name(function(x5) {
        const temp = x5;
        return temp.type === "junction";
      }, "isArchitectureJunction");
      architectureGroupAlignmentKey = /* @__PURE__ */ __name((groupA, groupB) => {
        const [lowerGroupId, upperGroupId] = [groupA, groupB].sort();
        return `${JSON.stringify(lowerGroupId)}-${JSON.stringify(upperGroupId)}`;
      }, "architectureGroupAlignmentKey");
      edgeData = /* @__PURE__ */ __name((edge) => {
        return edge.data();
      }, "edgeData");
      nodeData = /* @__PURE__ */ __name((node2) => {
        return node2.data();
      }, "nodeData");
    }
  });

  // src/diagrams/architecture/architectureDb.ts
  var DEFAULT_ARCHITECTURE_CONFIG, ArchitectureDB;
  var init_architectureDb = __esm({
    "src/diagrams/architecture/architectureDb.ts"() {
      "use strict";
      init_config();
      init_defaultConfig();
      init_utils2();
      init_commonDb();
      init_architectureTypes();
      DEFAULT_ARCHITECTURE_CONFIG = defaultConfig_default.architecture;
      ArchitectureDB = class {
        constructor() {
          this.nodes = /* @__PURE__ */ new Map();
          this.groups = /* @__PURE__ */ new Map();
          this.edges = [];
          this.layoutHints = [];
          this.registeredIds = /* @__PURE__ */ new Map();
          this.elements = /* @__PURE__ */ new Map();
          this.diagramId = "";
          this.setAccTitle = setAccTitle;
          this.getAccTitle = getAccTitle;
          this.setDiagramTitle = setDiagramTitle;
          this.getDiagramTitle = getDiagramTitle;
          this.getAccDescription = getAccDescription;
          this.setAccDescription = setAccDescription;
          this.clear();
        }
        static {
          __name(this, "ArchitectureDB");
        }
        setDiagramId(id41) {
          this.diagramId = id41;
        }
        getDiagramId() {
          return this.diagramId;
        }
        clear() {
          this.nodes = /* @__PURE__ */ new Map();
          this.groups = /* @__PURE__ */ new Map();
          this.edges = [];
          this.layoutHints = [];
          this.registeredIds = /* @__PURE__ */ new Map();
          this.dataStructures = void 0;
          this.elements = /* @__PURE__ */ new Map();
          this.diagramId = "";
          clear();
        }
        addService({
          id: id41,
          icon: icon2,
          in: parent4,
          title: title2,
          iconText
        }) {
          if (this.registeredIds.has(id41)) {
            throw new Error(
              `The service id [${id41}] is already in use by another ${this.registeredIds.get(id41)}`
            );
          }
          if (parent4 !== void 0) {
            if (id41 === parent4) {
              throw new Error(`The service [${id41}] cannot be placed within itself`);
            }
            if (!this.registeredIds.has(parent4)) {
              throw new Error(
                `The service [${id41}]'s parent does not exist. Please make sure the parent is created before this service`
              );
            }
            if (this.registeredIds.get(parent4) === "node") {
              throw new Error(`The service [${id41}]'s parent is not a group`);
            }
          }
          this.registeredIds.set(id41, "node");
          this.nodes.set(id41, {
            id: id41,
            type: "service",
            icon: icon2,
            iconText,
            title: title2,
            edges: [],
            in: parent4
          });
        }
        getServices() {
          return [...this.nodes.values()].filter(isArchitectureService);
        }
        addJunction({ id: id41, in: parent4 }) {
          if (this.registeredIds.has(id41)) {
            throw new Error(
              `The junction id [${id41}] is already in use by another ${this.registeredIds.get(id41)}`
            );
          }
          if (parent4 !== void 0) {
            if (id41 === parent4) {
              throw new Error(`The junction [${id41}] cannot be placed within itself`);
            }
            if (!this.registeredIds.has(parent4)) {
              throw new Error(
                `The junction [${id41}]'s parent does not exist. Please make sure the parent is created before this junction`
              );
            }
            if (this.registeredIds.get(parent4) === "node") {
              throw new Error(`The junction [${id41}]'s parent is not a group`);
            }
          }
          this.registeredIds.set(id41, "node");
          this.nodes.set(id41, {
            id: id41,
            type: "junction",
            edges: [],
            in: parent4
          });
        }
        getJunctions() {
          return [...this.nodes.values()].filter(isArchitectureJunction);
        }
        getNodes() {
          return [...this.nodes.values()];
        }
        getNode(id41) {
          return this.nodes.get(id41) ?? null;
        }
        addGroup({ id: id41, icon: icon2, in: parent4, title: title2 }) {
          if (this.registeredIds.has(id41)) {
            throw new Error(
              `The group id [${id41}] is already in use by another ${this.registeredIds.get(id41)}`
            );
          }
          if (parent4 !== void 0) {
            if (id41 === parent4) {
              throw new Error(`The group [${id41}] cannot be placed within itself`);
            }
            if (!this.registeredIds.has(parent4)) {
              throw new Error(
                `The group [${id41}]'s parent does not exist. Please make sure the parent is created before this group`
              );
            }
            if (this.registeredIds.get(parent4) === "node") {
              throw new Error(`The group [${id41}]'s parent is not a group`);
            }
          }
          this.registeredIds.set(id41, "group");
          this.groups.set(id41, {
            id: id41,
            icon: icon2,
            title: title2,
            in: parent4
          });
        }
        getGroups() {
          return [...this.groups.values()];
        }
        addEdge({
          lhsId,
          rhsId,
          lhsDir,
          rhsDir,
          lhsInto,
          rhsInto,
          lhsGroup,
          rhsGroup,
          title: title2
        }) {
          if (!isArchitectureDirection(lhsDir)) {
            throw new Error(
              `Invalid direction given for left hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(lhsDir)}`
            );
          }
          if (!isArchitectureDirection(rhsDir)) {
            throw new Error(
              `Invalid direction given for right hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(rhsDir)}`
            );
          }
          if (!this.nodes.has(lhsId) && !this.groups.has(lhsId)) {
            throw new Error(
              `The left-hand id [${lhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`
            );
          }
          if (!this.nodes.has(rhsId) && !this.groups.has(rhsId)) {
            throw new Error(
              `The right-hand id [${rhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`
            );
          }
          const lhsGroupId = this.nodes.get(lhsId).in;
          const rhsGroupId = this.nodes.get(rhsId).in;
          if (lhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {
            throw new Error(
              `The left-hand id [${lhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`
            );
          }
          if (rhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {
            throw new Error(
              `The right-hand id [${rhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`
            );
          }
          const edge = {
            lhsId,
            lhsDir,
            lhsInto,
            lhsGroup,
            rhsId,
            rhsDir,
            rhsInto,
            rhsGroup,
            title: title2
          };
          this.edges.push(edge);
          const lhsNode = this.nodes.get(lhsId);
          const rhsNode = this.nodes.get(rhsId);
          if (lhsNode && rhsNode) {
            lhsNode.edges.push(this.edges[this.edges.length - 1]);
            rhsNode.edges.push(this.edges[this.edges.length - 1]);
          }
        }
        getEdges() {
          return this.edges;
        }
        addLayoutHint(hint) {
          if (hint.members.length < 2) {
            throw new Error(
              `An align directive requires at least two members; got ${hint.members.length}`
            );
          }
          const seen = /* @__PURE__ */ new Set();
          hint.members.forEach((id41) => {
            if (this.registeredIds.get(id41) !== "node") {
              throw new Error(
                `align ${hint.direction} references [${id41}], which is not a service or junction`
              );
            }
            if (seen.has(id41)) {
              throw new Error(`align ${hint.direction} lists [${id41}] more than once`);
            }
            seen.add(id41);
          });
          this.layoutHints.push(hint);
        }
        getLayoutHints() {
          return this.layoutHints;
        }
        /**
         * Returns the current diagram's adjacency list, spatial map, & group alignments.
         * If they have not been created, run the algorithms to generate them.
         * @returns
         */
        getDataStructures() {
          if (this.dataStructures === void 0) {
            const groupAlignments = /* @__PURE__ */ new Map();
            const adjList = /* @__PURE__ */ new Map();
            for (const [id41, service] of this.nodes.entries()) {
              const directionMap = /* @__PURE__ */ new Map();
              for (const edge of service.edges) {
                const lhsGroupId = this.getNode(edge.lhsId)?.in;
                const rhsGroupId = this.getNode(edge.rhsId)?.in;
                if (lhsGroupId && rhsGroupId && lhsGroupId !== rhsGroupId) {
                  const alignment = getArchitectureDirectionAlignment(edge.lhsDir, edge.rhsDir);
                  if (alignment !== "bend") {
                    groupAlignments.set(architectureGroupAlignmentKey(lhsGroupId, rhsGroupId), alignment);
                  }
                }
                if (edge.lhsId === id41) {
                  const pair = getArchitectureDirectionPair(edge.lhsDir, edge.rhsDir);
                  if (pair) {
                    directionMap.set(pair, edge.rhsId);
                  }
                } else {
                  const pair = getArchitectureDirectionPair(edge.rhsDir, edge.lhsDir);
                  if (pair) {
                    directionMap.set(pair, edge.lhsId);
                  }
                }
              }
              adjList.set(id41, directionMap);
            }
            const visited = /* @__PURE__ */ new Set();
            const notVisited = new Set(adjList.keys());
            const BFS = /* @__PURE__ */ __name((startingId) => {
              const spatialMap = /* @__PURE__ */ new Map([[startingId, [0, 0]]]);
              const queue = [startingId];
              while (queue.length > 0) {
                const id41 = queue.shift();
                if (id41) {
                  visited.add(id41);
                  notVisited.delete(id41);
                  const adj = adjList.get(id41);
                  if (!adj) {
                    throw new Error(
                      `BFS error: adjacency list for id ${id41} not found. Please report this as a bug.`
                    );
                  }
                  const pos = spatialMap.get(id41);
                  if (!pos) {
                    throw new Error(
                      `BFS error: position for id ${id41} not found in spatial map. Please report this as a bug.`
                    );
                  }
                  const [posX, posY] = pos;
                  adj.forEach((rhsId, dir2) => {
                    if (!visited.has(rhsId)) {
                      spatialMap.set(rhsId, shiftPositionByArchitectureDirectionPair([posX, posY], dir2));
                      queue.push(rhsId);
                    }
                  });
                }
              }
              return spatialMap;
            }, "BFS");
            const spatialMaps = [];
            while (notVisited.size > 0) {
              const firstId = notVisited.values().next().value;
              spatialMaps.push(BFS(firstId));
            }
            this.dataStructures = {
              adjList,
              spatialMaps,
              groupAlignments
            };
          }
          return this.dataStructures;
        }
        setElementForId(id41, element3) {
          this.elements.set(id41, element3);
        }
        getElementById(id41) {
          return this.elements.get(id41);
        }
        getConfig() {
          return cleanAndMerge({
            ...DEFAULT_ARCHITECTURE_CONFIG,
            ...getConfig().architecture
          });
        }
        getConfigField(field) {
          return this.getConfig()[field];
        }
      };
    }
  });

  // src/diagrams/architecture/architectureParser.ts
  var populateDb2, parser23;
  var init_architectureParser = __esm({
    "src/diagrams/architecture/architectureParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_architectureDb();
      populateDb2 = /* @__PURE__ */ __name((ast, db12) => {
        populateCommonDb(ast, db12);
        ast.groups.map((group2) => db12.addGroup(group2));
        ast.services.map((service) => db12.addService({ ...service, type: "service" }));
        ast.junctions.map((service) => db12.addJunction({ ...service, type: "junction" }));
        ast.edges.map((edge) => db12.addEdge(edge));
        ast.alignments?.map(
          (alignment) => db12.addLayoutHint({ direction: alignment.direction, members: [...alignment.members] })
        );
      }, "populateDb");
      parser23 = {
        parser: {
          // @ts-expect-error - ArchitectureDB is not assignable to DiagramDB
          yy: void 0
        },
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("architecture", input);
          log.debug(ast);
          const db12 = parser23.parser?.yy;
          if (!(db12 instanceof ArchitectureDB)) {
            throw new Error(
              "parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues."
            );
          }
          populateDb2(ast, db12);
        }, "parse")
      };
    }
  });

  // src/diagrams/architecture/architectureStyles.ts
  var getStyles19, architectureStyles_default;
  var init_architectureStyles = __esm({
    "src/diagrams/architecture/architectureStyles.ts"() {
      "use strict";
      getStyles19 = /* @__PURE__ */ __name((options2) => `
  .edge {
    stroke-width: ${options2.archEdgeWidth};
    stroke: ${options2.archEdgeColor};
    fill: none;
  }

  .arrow {
    fill: ${options2.archEdgeArrowColor};
  }

  .node-bkg {
    fill: none;
    stroke: ${options2.archGroupBorderColor};
    stroke-width: ${options2.archGroupBorderWidth};
    stroke-dasharray: 8;
  }
  .node-icon-text {
    display: flex; 
    align-items: center;
  }
  
  .node-icon-text > div {
    color: #fff;
    margin: 1px;
    height: fit-content;
    text-align: center;
    overflow: hidden;
    display: -webkit-box;
    -webkit-box-orient: vertical;
  }
`, "getStyles");
      architectureStyles_default = getStyles19;
    }
  });

  // ../../node_modules/.pnpm/layout-base@2.0.1/node_modules/layout-base/layout-base.js
  var require_layout_base2 = __commonJS({
    "../../node_modules/.pnpm/layout-base@2.0.1/node_modules/layout-base/layout-base.js"(exports2, module2) {
      "use strict";
      (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root4, factory) {
        if (typeof exports2 === "object" && typeof module2 === "object")
          module2.exports = factory();
        else if (typeof define === "function" && define.amd)
          define([], factory);
        else if (typeof exports2 === "object")
          exports2["layoutBase"] = factory();
        else
          root4["layoutBase"] = factory();
      }), "webpackUniversalModuleDefinition"))(exports2, function() {
        return (
          /******/
          (function(modules2) {
            var installedModules = {};
            function __webpack_require__(moduleId) {
              if (installedModules[moduleId]) {
                return installedModules[moduleId].exports;
              }
              var module3 = installedModules[moduleId] = {
                /******/
                i: moduleId,
                /******/
                l: false,
                /******/
                exports: {}
                /******/
              };
              modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__);
              module3.l = true;
              return module3.exports;
            }
            __name(__webpack_require__, "__webpack_require__");
            __webpack_require__.m = modules2;
            __webpack_require__.c = installedModules;
            __webpack_require__.i = function(value2) {
              return value2;
            };
            __webpack_require__.d = function(exports3, name, getter) {
              if (!__webpack_require__.o(exports3, name)) {
                Object.defineProperty(exports3, name, {
                  /******/
                  configurable: false,
                  /******/
                  enumerable: true,
                  /******/
                  get: getter
                  /******/
                });
              }
            };
            __webpack_require__.n = function(module3) {
              var getter = module3 && module3.__esModule ? (
                /******/
                /* @__PURE__ */ __name(function getDefault() {
                  return module3["default"];
                }, "getDefault")
              ) : (
                /******/
                /* @__PURE__ */ __name(function getModuleExports() {
                  return module3;
                }, "getModuleExports")
              );
              __webpack_require__.d(getter, "a", getter);
              return getter;
            };
            __webpack_require__.o = function(object3, property3) {
              return Object.prototype.hasOwnProperty.call(object3, property3);
            };
            __webpack_require__.p = "";
            return __webpack_require__(__webpack_require__.s = 28);
          })([
            /* 0 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function LayoutConstants() {
              }
              __name(LayoutConstants, "LayoutConstants");
              LayoutConstants.QUALITY = 1;
              LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;
              LayoutConstants.DEFAULT_INCREMENTAL = false;
              LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;
              LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;
              LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;
              LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;
              LayoutConstants.DEFAULT_GRAPH_MARGIN = 15;
              LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;
              LayoutConstants.SIMPLE_NODE_SIZE = 40;
              LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;
              LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;
              LayoutConstants.MIN_EDGE_LENGTH = 1;
              LayoutConstants.WORLD_BOUNDARY = 1e6;
              LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1e3;
              LayoutConstants.WORLD_CENTER_X = 1200;
              LayoutConstants.WORLD_CENTER_Y = 900;
              module3.exports = LayoutConstants;
            }),
            /* 1 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraphObject = __webpack_require__(2);
              var IGeometry = __webpack_require__(8);
              var IMath = __webpack_require__(9);
              function LEdge(source, target, vEdge) {
                LGraphObject.call(this, vEdge);
                this.isOverlapingSourceAndTarget = false;
                this.vGraphObject = vEdge;
                this.bendpoints = [];
                this.source = source;
                this.target = target;
              }
              __name(LEdge, "LEdge");
              LEdge.prototype = Object.create(LGraphObject.prototype);
              for (var prop in LGraphObject) {
                LEdge[prop] = LGraphObject[prop];
              }
              LEdge.prototype.getSource = function() {
                return this.source;
              };
              LEdge.prototype.getTarget = function() {
                return this.target;
              };
              LEdge.prototype.isInterGraph = function() {
                return this.isInterGraph;
              };
              LEdge.prototype.getLength = function() {
                return this.length;
              };
              LEdge.prototype.isOverlapingSourceAndTarget = function() {
                return this.isOverlapingSourceAndTarget;
              };
              LEdge.prototype.getBendpoints = function() {
                return this.bendpoints;
              };
              LEdge.prototype.getLca = function() {
                return this.lca;
              };
              LEdge.prototype.getSourceInLca = function() {
                return this.sourceInLca;
              };
              LEdge.prototype.getTargetInLca = function() {
                return this.targetInLca;
              };
              LEdge.prototype.getOtherEnd = function(node2) {
                if (this.source === node2) {
                  return this.target;
                } else if (this.target === node2) {
                  return this.source;
                } else {
                  throw "Node is not incident with this edge";
                }
              };
              LEdge.prototype.getOtherEndInGraph = function(node2, graph) {
                var otherEnd = this.getOtherEnd(node2);
                var root4 = graph.getGraphManager().getRoot();
                while (true) {
                  if (otherEnd.getOwner() == graph) {
                    return otherEnd;
                  }
                  if (otherEnd.getOwner() == root4) {
                    break;
                  }
                  otherEnd = otherEnd.getOwner().getParent();
                }
                return null;
              };
              LEdge.prototype.updateLength = function() {
                var clipPointCoordinates = new Array(4);
                this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);
                if (!this.isOverlapingSourceAndTarget) {
                  this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];
                  this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];
                  if (Math.abs(this.lengthX) < 1) {
                    this.lengthX = IMath.sign(this.lengthX);
                  }
                  if (Math.abs(this.lengthY) < 1) {
                    this.lengthY = IMath.sign(this.lengthY);
                  }
                  this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);
                }
              };
              LEdge.prototype.updateLengthSimple = function() {
                this.lengthX = this.target.getCenterX() - this.source.getCenterX();
                this.lengthY = this.target.getCenterY() - this.source.getCenterY();
                if (Math.abs(this.lengthX) < 1) {
                  this.lengthX = IMath.sign(this.lengthX);
                }
                if (Math.abs(this.lengthY) < 1) {
                  this.lengthY = IMath.sign(this.lengthY);
                }
                this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);
              };
              module3.exports = LEdge;
            }),
            /* 2 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function LGraphObject(vGraphObject) {
                this.vGraphObject = vGraphObject;
              }
              __name(LGraphObject, "LGraphObject");
              module3.exports = LGraphObject;
            }),
            /* 3 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraphObject = __webpack_require__(2);
              var Integer = __webpack_require__(10);
              var RectangleD = __webpack_require__(13);
              var LayoutConstants = __webpack_require__(0);
              var RandomSeed = __webpack_require__(16);
              var PointD = __webpack_require__(5);
              function LNode(gm, loc, size4, vNode) {
                if (size4 == null && vNode == null) {
                  vNode = loc;
                }
                LGraphObject.call(this, vNode);
                if (gm.graphManager != null) gm = gm.graphManager;
                this.estimatedSize = Integer.MIN_VALUE;
                this.inclusionTreeDepth = Integer.MAX_VALUE;
                this.vGraphObject = vNode;
                this.edges = [];
                this.graphManager = gm;
                if (size4 != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size4.width, size4.height);
                else this.rect = new RectangleD();
              }
              __name(LNode, "LNode");
              LNode.prototype = Object.create(LGraphObject.prototype);
              for (var prop in LGraphObject) {
                LNode[prop] = LGraphObject[prop];
              }
              LNode.prototype.getEdges = function() {
                return this.edges;
              };
              LNode.prototype.getChild = function() {
                return this.child;
              };
              LNode.prototype.getOwner = function() {
                return this.owner;
              };
              LNode.prototype.getWidth = function() {
                return this.rect.width;
              };
              LNode.prototype.setWidth = function(width3) {
                this.rect.width = width3;
              };
              LNode.prototype.getHeight = function() {
                return this.rect.height;
              };
              LNode.prototype.setHeight = function(height2) {
                this.rect.height = height2;
              };
              LNode.prototype.getCenterX = function() {
                return this.rect.x + this.rect.width / 2;
              };
              LNode.prototype.getCenterY = function() {
                return this.rect.y + this.rect.height / 2;
              };
              LNode.prototype.getCenter = function() {
                return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);
              };
              LNode.prototype.getLocation = function() {
                return new PointD(this.rect.x, this.rect.y);
              };
              LNode.prototype.getRect = function() {
                return this.rect;
              };
              LNode.prototype.getDiagonal = function() {
                return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);
              };
              LNode.prototype.getHalfTheDiagonal = function() {
                return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;
              };
              LNode.prototype.setRect = function(upperLeft, dimension) {
                this.rect.x = upperLeft.x;
                this.rect.y = upperLeft.y;
                this.rect.width = dimension.width;
                this.rect.height = dimension.height;
              };
              LNode.prototype.setCenter = function(cx, cy) {
                this.rect.x = cx - this.rect.width / 2;
                this.rect.y = cy - this.rect.height / 2;
              };
              LNode.prototype.setLocation = function(x5, y6) {
                this.rect.x = x5;
                this.rect.y = y6;
              };
              LNode.prototype.moveBy = function(dx, dy) {
                this.rect.x += dx;
                this.rect.y += dy;
              };
              LNode.prototype.getEdgeListToNode = function(to) {
                var edgeList2 = [];
                var edge;
                var self2 = this;
                self2.edges.forEach(function(edge2) {
                  if (edge2.target == to) {
                    if (edge2.source != self2) throw "Incorrect edge source!";
                    edgeList2.push(edge2);
                  }
                });
                return edgeList2;
              };
              LNode.prototype.getEdgesBetween = function(other) {
                var edgeList2 = [];
                var edge;
                var self2 = this;
                self2.edges.forEach(function(edge2) {
                  if (!(edge2.source == self2 || edge2.target == self2)) throw "Incorrect edge source and/or target";
                  if (edge2.target == other || edge2.source == other) {
                    edgeList2.push(edge2);
                  }
                });
                return edgeList2;
              };
              LNode.prototype.getNeighborsList = function() {
                var neighbors = /* @__PURE__ */ new Set();
                var self2 = this;
                self2.edges.forEach(function(edge) {
                  if (edge.source == self2) {
                    neighbors.add(edge.target);
                  } else {
                    if (edge.target != self2) {
                      throw "Incorrect incidency!";
                    }
                    neighbors.add(edge.source);
                  }
                });
                return neighbors;
              };
              LNode.prototype.withChildren = function() {
                var withNeighborsList = /* @__PURE__ */ new Set();
                var childNode;
                var children2;
                withNeighborsList.add(this);
                if (this.child != null) {
                  var nodes5 = this.child.getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    childNode = nodes5[i2];
                    children2 = childNode.withChildren();
                    children2.forEach(function(node2) {
                      withNeighborsList.add(node2);
                    });
                  }
                }
                return withNeighborsList;
              };
              LNode.prototype.getNoOfChildren = function() {
                var noOfChildren = 0;
                var childNode;
                if (this.child == null) {
                  noOfChildren = 1;
                } else {
                  var nodes5 = this.child.getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    childNode = nodes5[i2];
                    noOfChildren += childNode.getNoOfChildren();
                  }
                }
                if (noOfChildren == 0) {
                  noOfChildren = 1;
                }
                return noOfChildren;
              };
              LNode.prototype.getEstimatedSize = function() {
                if (this.estimatedSize == Integer.MIN_VALUE) {
                  throw "assert failed";
                }
                return this.estimatedSize;
              };
              LNode.prototype.calcEstimatedSize = function() {
                if (this.child == null) {
                  return this.estimatedSize = (this.rect.width + this.rect.height) / 2;
                } else {
                  this.estimatedSize = this.child.calcEstimatedSize();
                  this.rect.width = this.estimatedSize;
                  this.rect.height = this.estimatedSize;
                  return this.estimatedSize;
                }
              };
              LNode.prototype.scatter = function() {
                var randomCenterX;
                var randomCenterY;
                var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;
                var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;
                randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;
                var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;
                var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;
                randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;
                this.rect.x = randomCenterX;
                this.rect.y = randomCenterY;
              };
              LNode.prototype.updateBounds = function() {
                if (this.getChild() == null) {
                  throw "assert failed";
                }
                if (this.getChild().getNodes().length != 0) {
                  var childGraph = this.getChild();
                  childGraph.updateBounds(true);
                  this.rect.x = childGraph.getLeft();
                  this.rect.y = childGraph.getTop();
                  this.setWidth(childGraph.getRight() - childGraph.getLeft());
                  this.setHeight(childGraph.getBottom() - childGraph.getTop());
                  if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {
                    var width3 = childGraph.getRight() - childGraph.getLeft();
                    var height2 = childGraph.getBottom() - childGraph.getTop();
                    if (this.labelWidth) {
                      if (this.labelPosHorizontal == "left") {
                        this.rect.x -= this.labelWidth;
                        this.setWidth(width3 + this.labelWidth);
                      } else if (this.labelPosHorizontal == "center" && this.labelWidth > width3) {
                        this.rect.x -= (this.labelWidth - width3) / 2;
                        this.setWidth(this.labelWidth);
                      } else if (this.labelPosHorizontal == "right") {
                        this.setWidth(width3 + this.labelWidth);
                      }
                    }
                    if (this.labelHeight) {
                      if (this.labelPosVertical == "top") {
                        this.rect.y -= this.labelHeight;
                        this.setHeight(height2 + this.labelHeight);
                      } else if (this.labelPosVertical == "center" && this.labelHeight > height2) {
                        this.rect.y -= (this.labelHeight - height2) / 2;
                        this.setHeight(this.labelHeight);
                      } else if (this.labelPosVertical == "bottom") {
                        this.setHeight(height2 + this.labelHeight);
                      }
                    }
                  }
                }
              };
              LNode.prototype.getInclusionTreeDepth = function() {
                if (this.inclusionTreeDepth == Integer.MAX_VALUE) {
                  throw "assert failed";
                }
                return this.inclusionTreeDepth;
              };
              LNode.prototype.transform = function(trans) {
                var left3 = this.rect.x;
                if (left3 > LayoutConstants.WORLD_BOUNDARY) {
                  left3 = LayoutConstants.WORLD_BOUNDARY;
                } else if (left3 < -LayoutConstants.WORLD_BOUNDARY) {
                  left3 = -LayoutConstants.WORLD_BOUNDARY;
                }
                var top2 = this.rect.y;
                if (top2 > LayoutConstants.WORLD_BOUNDARY) {
                  top2 = LayoutConstants.WORLD_BOUNDARY;
                } else if (top2 < -LayoutConstants.WORLD_BOUNDARY) {
                  top2 = -LayoutConstants.WORLD_BOUNDARY;
                }
                var leftTop = new PointD(left3, top2);
                var vLeftTop = trans.inverseTransformPoint(leftTop);
                this.setLocation(vLeftTop.x, vLeftTop.y);
              };
              LNode.prototype.getLeft = function() {
                return this.rect.x;
              };
              LNode.prototype.getRight = function() {
                return this.rect.x + this.rect.width;
              };
              LNode.prototype.getTop = function() {
                return this.rect.y;
              };
              LNode.prototype.getBottom = function() {
                return this.rect.y + this.rect.height;
              };
              LNode.prototype.getParent = function() {
                if (this.owner == null) {
                  return null;
                }
                return this.owner.getParent();
              };
              module3.exports = LNode;
            }),
            /* 4 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LayoutConstants = __webpack_require__(0);
              function FDLayoutConstants() {
              }
              __name(FDLayoutConstants, "FDLayoutConstants");
              for (var prop in LayoutConstants) {
                FDLayoutConstants[prop] = LayoutConstants[prop];
              }
              FDLayoutConstants.MAX_ITERATIONS = 2500;
              FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;
              FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;
              FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500;
              FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;
              FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1;
              FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;
              FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;
              FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;
              FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;
              FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;
              FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;
              FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1e3;
              FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5e3;
              FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100;
              FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;
              FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10;
              FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;
              FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;
              FDLayoutConstants.MIN_EDGE_LENGTH = 1;
              FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;
              module3.exports = FDLayoutConstants;
            }),
            /* 5 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function PointD(x5, y6) {
                if (x5 == null && y6 == null) {
                  this.x = 0;
                  this.y = 0;
                } else {
                  this.x = x5;
                  this.y = y6;
                }
              }
              __name(PointD, "PointD");
              PointD.prototype.getX = function() {
                return this.x;
              };
              PointD.prototype.getY = function() {
                return this.y;
              };
              PointD.prototype.setX = function(x5) {
                this.x = x5;
              };
              PointD.prototype.setY = function(y6) {
                this.y = y6;
              };
              PointD.prototype.getDifference = function(pt) {
                return new DimensionD(this.x - pt.x, this.y - pt.y);
              };
              PointD.prototype.getCopy = function() {
                return new PointD(this.x, this.y);
              };
              PointD.prototype.translate = function(dim) {
                this.x += dim.width;
                this.y += dim.height;
                return this;
              };
              module3.exports = PointD;
            }),
            /* 6 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraphObject = __webpack_require__(2);
              var Integer = __webpack_require__(10);
              var LayoutConstants = __webpack_require__(0);
              var LGraphManager = __webpack_require__(7);
              var LNode = __webpack_require__(3);
              var LEdge = __webpack_require__(1);
              var RectangleD = __webpack_require__(13);
              var Point3 = __webpack_require__(12);
              var LinkedList = __webpack_require__(11);
              function LGraph(parent4, obj2, vGraph) {
                LGraphObject.call(this, vGraph);
                this.estimatedSize = Integer.MIN_VALUE;
                this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;
                this.edges = [];
                this.nodes = [];
                this.isConnected = false;
                this.parent = parent4;
                if (obj2 != null && obj2 instanceof LGraphManager) {
                  this.graphManager = obj2;
                } else if (obj2 != null && obj2 instanceof Layout) {
                  this.graphManager = obj2.graphManager;
                }
              }
              __name(LGraph, "LGraph");
              LGraph.prototype = Object.create(LGraphObject.prototype);
              for (var prop in LGraphObject) {
                LGraph[prop] = LGraphObject[prop];
              }
              LGraph.prototype.getNodes = function() {
                return this.nodes;
              };
              LGraph.prototype.getEdges = function() {
                return this.edges;
              };
              LGraph.prototype.getGraphManager = function() {
                return this.graphManager;
              };
              LGraph.prototype.getParent = function() {
                return this.parent;
              };
              LGraph.prototype.getLeft = function() {
                return this.left;
              };
              LGraph.prototype.getRight = function() {
                return this.right;
              };
              LGraph.prototype.getTop = function() {
                return this.top;
              };
              LGraph.prototype.getBottom = function() {
                return this.bottom;
              };
              LGraph.prototype.isConnected = function() {
                return this.isConnected;
              };
              LGraph.prototype.add = function(obj1, sourceNode, targetNode) {
                if (sourceNode == null && targetNode == null) {
                  var newNode = obj1;
                  if (this.graphManager == null) {
                    throw "Graph has no graph mgr!";
                  }
                  if (this.getNodes().indexOf(newNode) > -1) {
                    throw "Node already in graph!";
                  }
                  newNode.owner = this;
                  this.getNodes().push(newNode);
                  return newNode;
                } else {
                  var newEdge = obj1;
                  if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {
                    throw "Source or target not in graph!";
                  }
                  if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {
                    throw "Both owners must be this graph!";
                  }
                  if (sourceNode.owner != targetNode.owner) {
                    return null;
                  }
                  newEdge.source = sourceNode;
                  newEdge.target = targetNode;
                  newEdge.isInterGraph = false;
                  this.getEdges().push(newEdge);
                  sourceNode.edges.push(newEdge);
                  if (targetNode != sourceNode) {
                    targetNode.edges.push(newEdge);
                  }
                  return newEdge;
                }
              };
              LGraph.prototype.remove = function(obj) {
                var node2 = obj;
                if (obj instanceof LNode) {
                  if (node2 == null) {
                    throw "Node is null!";
                  }
                  if (!(node2.owner != null && node2.owner == this)) {
                    throw "Owner graph is invalid!";
                  }
                  if (this.graphManager == null) {
                    throw "Owner graph manager is invalid!";
                  }
                  var edgesToBeRemoved = node2.edges.slice();
                  var edge;
                  var s2 = edgesToBeRemoved.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    edge = edgesToBeRemoved[i2];
                    if (edge.isInterGraph) {
                      this.graphManager.remove(edge);
                    } else {
                      edge.source.owner.remove(edge);
                    }
                  }
                  var index = this.nodes.indexOf(node2);
                  if (index == -1) {
                    throw "Node not in owner node list!";
                  }
                  this.nodes.splice(index, 1);
                } else if (obj instanceof LEdge) {
                  var edge = obj;
                  if (edge == null) {
                    throw "Edge is null!";
                  }
                  if (!(edge.source != null && edge.target != null)) {
                    throw "Source and/or target is null!";
                  }
                  if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {
                    throw "Source and/or target owner is invalid!";
                  }
                  var sourceIndex = edge.source.edges.indexOf(edge);
                  var targetIndex = edge.target.edges.indexOf(edge);
                  if (!(sourceIndex > -1 && targetIndex > -1)) {
                    throw "Source and/or target doesn't know this edge!";
                  }
                  edge.source.edges.splice(sourceIndex, 1);
                  if (edge.target != edge.source) {
                    edge.target.edges.splice(targetIndex, 1);
                  }
                  var index = edge.source.owner.getEdges().indexOf(edge);
                  if (index == -1) {
                    throw "Not in owner's edge list!";
                  }
                  edge.source.owner.getEdges().splice(index, 1);
                }
              };
              LGraph.prototype.updateLeftTop = function() {
                var top2 = Integer.MAX_VALUE;
                var left3 = Integer.MAX_VALUE;
                var nodeTop;
                var nodeLeft;
                var margin;
                var nodes5 = this.getNodes();
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  nodeTop = lNode.getTop();
                  nodeLeft = lNode.getLeft();
                  if (top2 > nodeTop) {
                    top2 = nodeTop;
                  }
                  if (left3 > nodeLeft) {
                    left3 = nodeLeft;
                  }
                }
                if (top2 == Integer.MAX_VALUE) {
                  return null;
                }
                if (nodes5[0].getParent().paddingLeft != void 0) {
                  margin = nodes5[0].getParent().paddingLeft;
                } else {
                  margin = this.margin;
                }
                this.left = left3 - margin;
                this.top = top2 - margin;
                return new Point3(this.left, this.top);
              };
              LGraph.prototype.updateBounds = function(recursive) {
                var left3 = Integer.MAX_VALUE;
                var right3 = -Integer.MAX_VALUE;
                var top2 = Integer.MAX_VALUE;
                var bottom2 = -Integer.MAX_VALUE;
                var nodeLeft;
                var nodeRight;
                var nodeTop;
                var nodeBottom;
                var margin;
                var nodes5 = this.nodes;
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  if (recursive && lNode.child != null) {
                    lNode.updateBounds();
                  }
                  nodeLeft = lNode.getLeft();
                  nodeRight = lNode.getRight();
                  nodeTop = lNode.getTop();
                  nodeBottom = lNode.getBottom();
                  if (left3 > nodeLeft) {
                    left3 = nodeLeft;
                  }
                  if (right3 < nodeRight) {
                    right3 = nodeRight;
                  }
                  if (top2 > nodeTop) {
                    top2 = nodeTop;
                  }
                  if (bottom2 < nodeBottom) {
                    bottom2 = nodeBottom;
                  }
                }
                var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2);
                if (left3 == Integer.MAX_VALUE) {
                  this.left = this.parent.getLeft();
                  this.right = this.parent.getRight();
                  this.top = this.parent.getTop();
                  this.bottom = this.parent.getBottom();
                }
                if (nodes5[0].getParent().paddingLeft != void 0) {
                  margin = nodes5[0].getParent().paddingLeft;
                } else {
                  margin = this.margin;
                }
                this.left = boundingRect.x - margin;
                this.right = boundingRect.x + boundingRect.width + margin;
                this.top = boundingRect.y - margin;
                this.bottom = boundingRect.y + boundingRect.height + margin;
              };
              LGraph.calculateBounds = function(nodes5) {
                var left3 = Integer.MAX_VALUE;
                var right3 = -Integer.MAX_VALUE;
                var top2 = Integer.MAX_VALUE;
                var bottom2 = -Integer.MAX_VALUE;
                var nodeLeft;
                var nodeRight;
                var nodeTop;
                var nodeBottom;
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  nodeLeft = lNode.getLeft();
                  nodeRight = lNode.getRight();
                  nodeTop = lNode.getTop();
                  nodeBottom = lNode.getBottom();
                  if (left3 > nodeLeft) {
                    left3 = nodeLeft;
                  }
                  if (right3 < nodeRight) {
                    right3 = nodeRight;
                  }
                  if (top2 > nodeTop) {
                    top2 = nodeTop;
                  }
                  if (bottom2 < nodeBottom) {
                    bottom2 = nodeBottom;
                  }
                }
                var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2);
                return boundingRect;
              };
              LGraph.prototype.getInclusionTreeDepth = function() {
                if (this == this.graphManager.getRoot()) {
                  return 1;
                } else {
                  return this.parent.getInclusionTreeDepth();
                }
              };
              LGraph.prototype.getEstimatedSize = function() {
                if (this.estimatedSize == Integer.MIN_VALUE) {
                  throw "assert failed";
                }
                return this.estimatedSize;
              };
              LGraph.prototype.calcEstimatedSize = function() {
                var size4 = 0;
                var nodes5 = this.nodes;
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var lNode = nodes5[i2];
                  size4 += lNode.calcEstimatedSize();
                }
                if (size4 == 0) {
                  this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;
                } else {
                  this.estimatedSize = size4 / Math.sqrt(this.nodes.length);
                }
                return this.estimatedSize;
              };
              LGraph.prototype.updateConnected = function() {
                var self2 = this;
                if (this.nodes.length == 0) {
                  this.isConnected = true;
                  return;
                }
                var queue = new LinkedList();
                var visited = /* @__PURE__ */ new Set();
                var currentNode = this.nodes[0];
                var neighborEdges;
                var currentNeighbor;
                var childrenOfNode = currentNode.withChildren();
                childrenOfNode.forEach(function(node2) {
                  queue.push(node2);
                  visited.add(node2);
                });
                while (queue.length !== 0) {
                  currentNode = queue.shift();
                  neighborEdges = currentNode.getEdges();
                  var size4 = neighborEdges.length;
                  for (var i2 = 0; i2 < size4; i2++) {
                    var neighborEdge = neighborEdges[i2];
                    currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);
                    if (currentNeighbor != null && !visited.has(currentNeighbor)) {
                      var childrenOfNeighbor = currentNeighbor.withChildren();
                      childrenOfNeighbor.forEach(function(node2) {
                        queue.push(node2);
                        visited.add(node2);
                      });
                    }
                  }
                }
                this.isConnected = false;
                if (visited.size >= this.nodes.length) {
                  var noOfVisitedInThisGraph = 0;
                  visited.forEach(function(visitedNode) {
                    if (visitedNode.owner == self2) {
                      noOfVisitedInThisGraph++;
                    }
                  });
                  if (noOfVisitedInThisGraph == this.nodes.length) {
                    this.isConnected = true;
                  }
                }
              };
              module3.exports = LGraph;
            }),
            /* 7 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LGraph;
              var LEdge = __webpack_require__(1);
              function LGraphManager(layout7) {
                LGraph = __webpack_require__(6);
                this.layout = layout7;
                this.graphs = [];
                this.edges = [];
              }
              __name(LGraphManager, "LGraphManager");
              LGraphManager.prototype.addRoot = function() {
                var ngraph = this.layout.newGraph();
                var nnode = this.layout.newNode(null);
                var root4 = this.add(ngraph, nnode);
                this.setRootGraph(root4);
                return this.rootGraph;
              };
              LGraphManager.prototype.add = function(newGraph, parentNode, newEdge, sourceNode, targetNode) {
                if (newEdge == null && sourceNode == null && targetNode == null) {
                  if (newGraph == null) {
                    throw "Graph is null!";
                  }
                  if (parentNode == null) {
                    throw "Parent node is null!";
                  }
                  if (this.graphs.indexOf(newGraph) > -1) {
                    throw "Graph already in this graph mgr!";
                  }
                  this.graphs.push(newGraph);
                  if (newGraph.parent != null) {
                    throw "Already has a parent!";
                  }
                  if (parentNode.child != null) {
                    throw "Already has a child!";
                  }
                  newGraph.parent = parentNode;
                  parentNode.child = newGraph;
                  return newGraph;
                } else {
                  targetNode = newEdge;
                  sourceNode = parentNode;
                  newEdge = newGraph;
                  var sourceGraph = sourceNode.getOwner();
                  var targetGraph = targetNode.getOwner();
                  if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {
                    throw "Source not in this graph mgr!";
                  }
                  if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {
                    throw "Target not in this graph mgr!";
                  }
                  if (sourceGraph == targetGraph) {
                    newEdge.isInterGraph = false;
                    return sourceGraph.add(newEdge, sourceNode, targetNode);
                  } else {
                    newEdge.isInterGraph = true;
                    newEdge.source = sourceNode;
                    newEdge.target = targetNode;
                    if (this.edges.indexOf(newEdge) > -1) {
                      throw "Edge already in inter-graph edge list!";
                    }
                    this.edges.push(newEdge);
                    if (!(newEdge.source != null && newEdge.target != null)) {
                      throw "Edge source and/or target is null!";
                    }
                    if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {
                      throw "Edge already in source and/or target incidency list!";
                    }
                    newEdge.source.edges.push(newEdge);
                    newEdge.target.edges.push(newEdge);
                    return newEdge;
                  }
                }
              };
              LGraphManager.prototype.remove = function(lObj) {
                if (lObj instanceof LGraph) {
                  var graph = lObj;
                  if (graph.getGraphManager() != this) {
                    throw "Graph not in this graph mgr";
                  }
                  if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {
                    throw "Invalid parent node!";
                  }
                  var edgesToBeRemoved = [];
                  edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());
                  var edge;
                  var s2 = edgesToBeRemoved.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    edge = edgesToBeRemoved[i2];
                    graph.remove(edge);
                  }
                  var nodesToBeRemoved = [];
                  nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());
                  var node2;
                  s2 = nodesToBeRemoved.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    node2 = nodesToBeRemoved[i2];
                    graph.remove(node2);
                  }
                  if (graph == this.rootGraph) {
                    this.setRootGraph(null);
                  }
                  var index = this.graphs.indexOf(graph);
                  this.graphs.splice(index, 1);
                  graph.parent = null;
                } else if (lObj instanceof LEdge) {
                  edge = lObj;
                  if (edge == null) {
                    throw "Edge is null!";
                  }
                  if (!edge.isInterGraph) {
                    throw "Not an inter-graph edge!";
                  }
                  if (!(edge.source != null && edge.target != null)) {
                    throw "Source and/or target is null!";
                  }
                  if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {
                    throw "Source and/or target doesn't know this edge!";
                  }
                  var index = edge.source.edges.indexOf(edge);
                  edge.source.edges.splice(index, 1);
                  index = edge.target.edges.indexOf(edge);
                  edge.target.edges.splice(index, 1);
                  if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {
                    throw "Edge owner graph or owner graph manager is null!";
                  }
                  if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {
                    throw "Not in owner graph manager's edge list!";
                  }
                  var index = edge.source.owner.getGraphManager().edges.indexOf(edge);
                  edge.source.owner.getGraphManager().edges.splice(index, 1);
                }
              };
              LGraphManager.prototype.updateBounds = function() {
                this.rootGraph.updateBounds(true);
              };
              LGraphManager.prototype.getGraphs = function() {
                return this.graphs;
              };
              LGraphManager.prototype.getAllNodes = function() {
                if (this.allNodes == null) {
                  var nodeList = [];
                  var graphs = this.getGraphs();
                  var s2 = graphs.length;
                  for (var i2 = 0; i2 < s2; i2++) {
                    nodeList = nodeList.concat(graphs[i2].getNodes());
                  }
                  this.allNodes = nodeList;
                }
                return this.allNodes;
              };
              LGraphManager.prototype.resetAllNodes = function() {
                this.allNodes = null;
              };
              LGraphManager.prototype.resetAllEdges = function() {
                this.allEdges = null;
              };
              LGraphManager.prototype.resetAllNodesToApplyGravitation = function() {
                this.allNodesToApplyGravitation = null;
              };
              LGraphManager.prototype.getAllEdges = function() {
                if (this.allEdges == null) {
                  var edgeList2 = [];
                  var graphs = this.getGraphs();
                  var s2 = graphs.length;
                  for (var i2 = 0; i2 < graphs.length; i2++) {
                    edgeList2 = edgeList2.concat(graphs[i2].getEdges());
                  }
                  edgeList2 = edgeList2.concat(this.edges);
                  this.allEdges = edgeList2;
                }
                return this.allEdges;
              };
              LGraphManager.prototype.getAllNodesToApplyGravitation = function() {
                return this.allNodesToApplyGravitation;
              };
              LGraphManager.prototype.setAllNodesToApplyGravitation = function(nodeList) {
                if (this.allNodesToApplyGravitation != null) {
                  throw "assert failed";
                }
                this.allNodesToApplyGravitation = nodeList;
              };
              LGraphManager.prototype.getRoot = function() {
                return this.rootGraph;
              };
              LGraphManager.prototype.setRootGraph = function(graph) {
                if (graph.getGraphManager() != this) {
                  throw "Root not in this graph mgr!";
                }
                this.rootGraph = graph;
                if (graph.parent == null) {
                  graph.parent = this.layout.newNode("Root node");
                }
              };
              LGraphManager.prototype.getLayout = function() {
                return this.layout;
              };
              LGraphManager.prototype.isOneAncestorOfOther = function(firstNode, secondNode) {
                if (!(firstNode != null && secondNode != null)) {
                  throw "assert failed";
                }
                if (firstNode == secondNode) {
                  return true;
                }
                var ownerGraph = firstNode.getOwner();
                var parentNode;
                do {
                  parentNode = ownerGraph.getParent();
                  if (parentNode == null) {
                    break;
                  }
                  if (parentNode == secondNode) {
                    return true;
                  }
                  ownerGraph = parentNode.getOwner();
                  if (ownerGraph == null) {
                    break;
                  }
                } while (true);
                ownerGraph = secondNode.getOwner();
                do {
                  parentNode = ownerGraph.getParent();
                  if (parentNode == null) {
                    break;
                  }
                  if (parentNode == firstNode) {
                    return true;
                  }
                  ownerGraph = parentNode.getOwner();
                  if (ownerGraph == null) {
                    break;
                  }
                } while (true);
                return false;
              };
              LGraphManager.prototype.calcLowestCommonAncestors = function() {
                var edge;
                var sourceNode;
                var targetNode;
                var sourceAncestorGraph;
                var targetAncestorGraph;
                var edges3 = this.getAllEdges();
                var s2 = edges3.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  edge = edges3[i2];
                  sourceNode = edge.source;
                  targetNode = edge.target;
                  edge.lca = null;
                  edge.sourceInLca = sourceNode;
                  edge.targetInLca = targetNode;
                  if (sourceNode == targetNode) {
                    edge.lca = sourceNode.getOwner();
                    continue;
                  }
                  sourceAncestorGraph = sourceNode.getOwner();
                  while (edge.lca == null) {
                    edge.targetInLca = targetNode;
                    targetAncestorGraph = targetNode.getOwner();
                    while (edge.lca == null) {
                      if (targetAncestorGraph == sourceAncestorGraph) {
                        edge.lca = targetAncestorGraph;
                        break;
                      }
                      if (targetAncestorGraph == this.rootGraph) {
                        break;
                      }
                      if (edge.lca != null) {
                        throw "assert failed";
                      }
                      edge.targetInLca = targetAncestorGraph.getParent();
                      targetAncestorGraph = edge.targetInLca.getOwner();
                    }
                    if (sourceAncestorGraph == this.rootGraph) {
                      break;
                    }
                    if (edge.lca == null) {
                      edge.sourceInLca = sourceAncestorGraph.getParent();
                      sourceAncestorGraph = edge.sourceInLca.getOwner();
                    }
                  }
                  if (edge.lca == null) {
                    throw "assert failed";
                  }
                }
              };
              LGraphManager.prototype.calcLowestCommonAncestor = function(firstNode, secondNode) {
                if (firstNode == secondNode) {
                  return firstNode.getOwner();
                }
                var firstOwnerGraph = firstNode.getOwner();
                do {
                  if (firstOwnerGraph == null) {
                    break;
                  }
                  var secondOwnerGraph = secondNode.getOwner();
                  do {
                    if (secondOwnerGraph == null) {
                      break;
                    }
                    if (secondOwnerGraph == firstOwnerGraph) {
                      return secondOwnerGraph;
                    }
                    secondOwnerGraph = secondOwnerGraph.getParent().getOwner();
                  } while (true);
                  firstOwnerGraph = firstOwnerGraph.getParent().getOwner();
                } while (true);
                return firstOwnerGraph;
              };
              LGraphManager.prototype.calcInclusionTreeDepths = function(graph, depth) {
                if (graph == null && depth == null) {
                  graph = this.rootGraph;
                  depth = 1;
                }
                var node2;
                var nodes5 = graph.getNodes();
                var s2 = nodes5.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  node2 = nodes5[i2];
                  node2.inclusionTreeDepth = depth;
                  if (node2.child != null) {
                    this.calcInclusionTreeDepths(node2.child, depth + 1);
                  }
                }
              };
              LGraphManager.prototype.includesInvalidEdge = function() {
                var edge;
                var edgesToRemove = [];
                var s2 = this.edges.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  edge = this.edges[i2];
                  if (this.isOneAncestorOfOther(edge.source, edge.target)) {
                    edgesToRemove.push(edge);
                  }
                }
                for (var i2 = 0; i2 < edgesToRemove.length; i2++) {
                  this.remove(edgesToRemove[i2]);
                }
                return false;
              };
              module3.exports = LGraphManager;
            }),
            /* 8 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var Point3 = __webpack_require__(12);
              function IGeometry() {
              }
              __name(IGeometry, "IGeometry");
              IGeometry.calcSeparationAmount = function(rectA, rectB, overlapAmount, separationBuffer) {
                if (!rectA.intersects(rectB)) {
                  throw "assert failed";
                }
                var directions = new Array(2);
                this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);
                overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);
                overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);
                if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {
                  overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());
                } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {
                  overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());
                }
                if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {
                  overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());
                } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {
                  overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());
                }
                var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));
                if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {
                  slope = 1;
                }
                var moveByY = slope * overlapAmount[0];
                var moveByX = overlapAmount[1] / slope;
                if (overlapAmount[0] < moveByX) {
                  moveByX = overlapAmount[0];
                } else {
                  moveByY = overlapAmount[1];
                }
                overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);
                overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);
              };
              IGeometry.decideDirectionsForOverlappingNodes = function(rectA, rectB, directions) {
                if (rectA.getCenterX() < rectB.getCenterX()) {
                  directions[0] = -1;
                } else {
                  directions[0] = 1;
                }
                if (rectA.getCenterY() < rectB.getCenterY()) {
                  directions[1] = -1;
                } else {
                  directions[1] = 1;
                }
              };
              IGeometry.getIntersection2 = function(rectA, rectB, result) {
                var p1x = rectA.getCenterX();
                var p1y = rectA.getCenterY();
                var p2x = rectB.getCenterX();
                var p2y = rectB.getCenterY();
                if (rectA.intersects(rectB)) {
                  result[0] = p1x;
                  result[1] = p1y;
                  result[2] = p2x;
                  result[3] = p2y;
                  return true;
                }
                var topLeftAx = rectA.getX();
                var topLeftAy = rectA.getY();
                var topRightAx = rectA.getRight();
                var bottomLeftAx = rectA.getX();
                var bottomLeftAy = rectA.getBottom();
                var bottomRightAx = rectA.getRight();
                var halfWidthA = rectA.getWidthHalf();
                var halfHeightA = rectA.getHeightHalf();
                var topLeftBx = rectB.getX();
                var topLeftBy = rectB.getY();
                var topRightBx = rectB.getRight();
                var bottomLeftBx = rectB.getX();
                var bottomLeftBy = rectB.getBottom();
                var bottomRightBx = rectB.getRight();
                var halfWidthB = rectB.getWidthHalf();
                var halfHeightB = rectB.getHeightHalf();
                var clipPointAFound = false;
                var clipPointBFound = false;
                if (p1x === p2x) {
                  if (p1y > p2y) {
                    result[0] = p1x;
                    result[1] = topLeftAy;
                    result[2] = p2x;
                    result[3] = bottomLeftBy;
                    return false;
                  } else if (p1y < p2y) {
                    result[0] = p1x;
                    result[1] = bottomLeftAy;
                    result[2] = p2x;
                    result[3] = topLeftBy;
                    return false;
                  } else {
                  }
                } else if (p1y === p2y) {
                  if (p1x > p2x) {
                    result[0] = topLeftAx;
                    result[1] = p1y;
                    result[2] = topRightBx;
                    result[3] = p2y;
                    return false;
                  } else if (p1x < p2x) {
                    result[0] = topRightAx;
                    result[1] = p1y;
                    result[2] = topLeftBx;
                    result[3] = p2y;
                    return false;
                  } else {
                  }
                } else {
                  var slopeA = rectA.height / rectA.width;
                  var slopeB = rectB.height / rectB.width;
                  var slopePrime = (p2y - p1y) / (p2x - p1x);
                  var cardinalDirectionA = void 0;
                  var cardinalDirectionB = void 0;
                  var tempPointAx = void 0;
                  var tempPointAy = void 0;
                  var tempPointBx = void 0;
                  var tempPointBy = void 0;
                  if (-slopeA === slopePrime) {
                    if (p1x > p2x) {
                      result[0] = bottomLeftAx;
                      result[1] = bottomLeftAy;
                      clipPointAFound = true;
                    } else {
                      result[0] = topRightAx;
                      result[1] = topLeftAy;
                      clipPointAFound = true;
                    }
                  } else if (slopeA === slopePrime) {
                    if (p1x > p2x) {
                      result[0] = topLeftAx;
                      result[1] = topLeftAy;
                      clipPointAFound = true;
                    } else {
                      result[0] = bottomRightAx;
                      result[1] = bottomLeftAy;
                      clipPointAFound = true;
                    }
                  }
                  if (-slopeB === slopePrime) {
                    if (p2x > p1x) {
                      result[2] = bottomLeftBx;
                      result[3] = bottomLeftBy;
                      clipPointBFound = true;
                    } else {
                      result[2] = topRightBx;
                      result[3] = topLeftBy;
                      clipPointBFound = true;
                    }
                  } else if (slopeB === slopePrime) {
                    if (p2x > p1x) {
                      result[2] = topLeftBx;
                      result[3] = topLeftBy;
                      clipPointBFound = true;
                    } else {
                      result[2] = bottomRightBx;
                      result[3] = bottomLeftBy;
                      clipPointBFound = true;
                    }
                  }
                  if (clipPointAFound && clipPointBFound) {
                    return false;
                  }
                  if (p1x > p2x) {
                    if (p1y > p2y) {
                      cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);
                      cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);
                    } else {
                      cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);
                      cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);
                    }
                  } else {
                    if (p1y > p2y) {
                      cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);
                      cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);
                    } else {
                      cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);
                      cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);
                    }
                  }
                  if (!clipPointAFound) {
                    switch (cardinalDirectionA) {
                      case 1:
                        tempPointAy = topLeftAy;
                        tempPointAx = p1x + -halfHeightA / slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                      case 2:
                        tempPointAx = bottomRightAx;
                        tempPointAy = p1y + halfWidthA * slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                      case 3:
                        tempPointAy = bottomLeftAy;
                        tempPointAx = p1x + halfHeightA / slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                      case 4:
                        tempPointAx = bottomLeftAx;
                        tempPointAy = p1y + -halfWidthA * slopePrime;
                        result[0] = tempPointAx;
                        result[1] = tempPointAy;
                        break;
                    }
                  }
                  if (!clipPointBFound) {
                    switch (cardinalDirectionB) {
                      case 1:
                        tempPointBy = topLeftBy;
                        tempPointBx = p2x + -halfHeightB / slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                      case 2:
                        tempPointBx = bottomRightBx;
                        tempPointBy = p2y + halfWidthB * slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                      case 3:
                        tempPointBy = bottomLeftBy;
                        tempPointBx = p2x + halfHeightB / slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                      case 4:
                        tempPointBx = bottomLeftBx;
                        tempPointBy = p2y + -halfWidthB * slopePrime;
                        result[2] = tempPointBx;
                        result[3] = tempPointBy;
                        break;
                    }
                  }
                }
                return false;
              };
              IGeometry.getCardinalDirection = function(slope, slopePrime, line2) {
                if (slope > slopePrime) {
                  return line2;
                } else {
                  return 1 + line2 % 4;
                }
              };
              IGeometry.getIntersection = function(s1, s2, f1, f2) {
                if (f2 == null) {
                  return this.getIntersection2(s1, s2, f1);
                }
                var x1 = s1.x;
                var y1 = s1.y;
                var x22 = s2.x;
                var y22 = s2.y;
                var x32 = f1.x;
                var y32 = f1.y;
                var x42 = f2.x;
                var y42 = f2.y;
                var x5 = void 0, y6 = void 0;
                var a1 = void 0, a2 = void 0, b1 = void 0, b22 = void 0, c1 = void 0, c22 = void 0;
                var denom = void 0;
                a1 = y22 - y1;
                b1 = x1 - x22;
                c1 = x22 * y1 - x1 * y22;
                a2 = y42 - y32;
                b22 = x32 - x42;
                c22 = x42 * y32 - x32 * y42;
                denom = a1 * b22 - a2 * b1;
                if (denom === 0) {
                  return null;
                }
                x5 = (b1 * c22 - b22 * c1) / denom;
                y6 = (a2 * c1 - a1 * c22) / denom;
                return new Point3(x5, y6);
              };
              IGeometry.angleOfVector = function(Cx, Cy, Nx, Ny) {
                var C_angle = void 0;
                if (Cx !== Nx) {
                  C_angle = Math.atan((Ny - Cy) / (Nx - Cx));
                  if (Nx < Cx) {
                    C_angle += Math.PI;
                  } else if (Ny < Cy) {
                    C_angle += this.TWO_PI;
                  }
                } else if (Ny < Cy) {
                  C_angle = this.ONE_AND_HALF_PI;
                } else {
                  C_angle = this.HALF_PI;
                }
                return C_angle;
              };
              IGeometry.doIntersect = function(p1, p22, p3, p4) {
                var a2 = p1.x;
                var b3 = p1.y;
                var c3 = p22.x;
                var d3 = p22.y;
                var p5 = p3.x;
                var q3 = p3.y;
                var r2 = p4.x;
                var s2 = p4.y;
                var det = (c3 - a2) * (s2 - q3) - (r2 - p5) * (d3 - b3);
                if (det === 0) {
                  return false;
                } else {
                  var lambda = ((s2 - q3) * (r2 - a2) + (p5 - r2) * (s2 - b3)) / det;
                  var gamma2 = ((b3 - d3) * (r2 - a2) + (c3 - a2) * (s2 - b3)) / det;
                  return 0 < lambda && lambda < 1 && 0 < gamma2 && gamma2 < 1;
                }
              };
              IGeometry.findCircleLineIntersections = function(Ex, Ey, Lx, Ly, Cx, Cy, r2) {
                var a2 = (Lx - Ex) * (Lx - Ex) + (Ly - Ey) * (Ly - Ey);
                var b3 = 2 * ((Ex - Cx) * (Lx - Ex) + (Ey - Cy) * (Ly - Ey));
                var c3 = (Ex - Cx) * (Ex - Cx) + (Ey - Cy) * (Ey - Cy) - r2 * r2;
                var disc = b3 * b3 - 4 * a2 * c3;
                if (disc >= 0) {
                  var t13 = (-b3 + Math.sqrt(b3 * b3 - 4 * a2 * c3)) / (2 * a2);
                  var t22 = (-b3 - Math.sqrt(b3 * b3 - 4 * a2 * c3)) / (2 * a2);
                  var intersections = null;
                  if (t13 >= 0 && t13 <= 1) {
                    return [t13];
                  }
                  if (t22 >= 0 && t22 <= 1) {
                    return [t22];
                  }
                  return intersections;
                } else return null;
              };
              IGeometry.HALF_PI = 0.5 * Math.PI;
              IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;
              IGeometry.TWO_PI = 2 * Math.PI;
              IGeometry.THREE_PI = 3 * Math.PI;
              module3.exports = IGeometry;
            }),
            /* 9 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function IMath() {
              }
              __name(IMath, "IMath");
              IMath.sign = function(value2) {
                if (value2 > 0) {
                  return 1;
                } else if (value2 < 0) {
                  return -1;
                } else {
                  return 0;
                }
              };
              IMath.floor = function(value2) {
                return value2 < 0 ? Math.ceil(value2) : Math.floor(value2);
              };
              IMath.ceil = function(value2) {
                return value2 < 0 ? Math.floor(value2) : Math.ceil(value2);
              };
              module3.exports = IMath;
            }),
            /* 10 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function Integer() {
              }
              __name(Integer, "Integer");
              Integer.MAX_VALUE = 2147483647;
              Integer.MIN_VALUE = -2147483648;
              module3.exports = Integer;
            }),
            /* 11 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _createClass2 = /* @__PURE__ */ (function() {
                function defineProperties(target, props) {
                  for (var i2 = 0; i2 < props.length; i2++) {
                    var descriptor = props[i2];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) descriptor.writable = true;
                    Object.defineProperty(target, descriptor.key, descriptor);
                  }
                }
                __name(defineProperties, "defineProperties");
                return function(Constructor, protoProps, staticProps) {
                  if (protoProps) defineProperties(Constructor.prototype, protoProps);
                  if (staticProps) defineProperties(Constructor, staticProps);
                  return Constructor;
                };
              })();
              function _classCallCheck2(instance2, Constructor) {
                if (!(instance2 instanceof Constructor)) {
                  throw new TypeError("Cannot call a class as a function");
                }
              }
              __name(_classCallCheck2, "_classCallCheck");
              var nodeFrom = /* @__PURE__ */ __name(function nodeFrom2(value2) {
                return { value: value2, next: null, prev: null };
              }, "nodeFrom");
              var add3 = /* @__PURE__ */ __name(function add4(prev2, node2, next3, list) {
                if (prev2 !== null) {
                  prev2.next = node2;
                } else {
                  list.head = node2;
                }
                if (next3 !== null) {
                  next3.prev = node2;
                } else {
                  list.tail = node2;
                }
                node2.prev = prev2;
                node2.next = next3;
                list.length++;
                return node2;
              }, "add");
              var _remove = /* @__PURE__ */ __name(function _remove2(node2, list) {
                var prev2 = node2.prev, next3 = node2.next;
                if (prev2 !== null) {
                  prev2.next = next3;
                } else {
                  list.head = next3;
                }
                if (next3 !== null) {
                  next3.prev = prev2;
                } else {
                  list.tail = prev2;
                }
                node2.prev = node2.next = null;
                list.length--;
                return node2;
              }, "_remove");
              var LinkedList = (function() {
                function LinkedList2(vals) {
                  var _this = this;
                  _classCallCheck2(this, LinkedList2);
                  this.length = 0;
                  this.head = null;
                  this.tail = null;
                  if (vals != null) {
                    vals.forEach(function(v3) {
                      return _this.push(v3);
                    });
                  }
                }
                __name(LinkedList2, "LinkedList");
                _createClass2(LinkedList2, [{
                  key: "size",
                  value: /* @__PURE__ */ __name(function size4() {
                    return this.length;
                  }, "size")
                }, {
                  key: "insertBefore",
                  value: /* @__PURE__ */ __name(function insertBefore(val, otherNode) {
                    return add3(otherNode.prev, nodeFrom(val), otherNode, this);
                  }, "insertBefore")
                }, {
                  key: "insertAfter",
                  value: /* @__PURE__ */ __name(function insertAfter(val, otherNode) {
                    return add3(otherNode, nodeFrom(val), otherNode.next, this);
                  }, "insertAfter")
                }, {
                  key: "insertNodeBefore",
                  value: /* @__PURE__ */ __name(function insertNodeBefore(newNode, otherNode) {
                    return add3(otherNode.prev, newNode, otherNode, this);
                  }, "insertNodeBefore")
                }, {
                  key: "insertNodeAfter",
                  value: /* @__PURE__ */ __name(function insertNodeAfter(newNode, otherNode) {
                    return add3(otherNode, newNode, otherNode.next, this);
                  }, "insertNodeAfter")
                }, {
                  key: "push",
                  value: /* @__PURE__ */ __name(function push3(val) {
                    return add3(this.tail, nodeFrom(val), null, this);
                  }, "push")
                }, {
                  key: "unshift",
                  value: /* @__PURE__ */ __name(function unshift(val) {
                    return add3(null, nodeFrom(val), this.head, this);
                  }, "unshift")
                }, {
                  key: "remove",
                  value: /* @__PURE__ */ __name(function remove3(node2) {
                    return _remove(node2, this);
                  }, "remove")
                }, {
                  key: "pop",
                  value: /* @__PURE__ */ __name(function pop() {
                    return _remove(this.tail, this).value;
                  }, "pop")
                }, {
                  key: "popNode",
                  value: /* @__PURE__ */ __name(function popNode() {
                    return _remove(this.tail, this);
                  }, "popNode")
                }, {
                  key: "shift",
                  value: /* @__PURE__ */ __name(function shift2() {
                    return _remove(this.head, this).value;
                  }, "shift")
                }, {
                  key: "shiftNode",
                  value: /* @__PURE__ */ __name(function shiftNode() {
                    return _remove(this.head, this);
                  }, "shiftNode")
                }, {
                  key: "get_object_at",
                  value: /* @__PURE__ */ __name(function get_object_at(index) {
                    if (index <= this.length()) {
                      var i2 = 1;
                      var current = this.head;
                      while (i2 < index) {
                        current = current.next;
                        i2++;
                      }
                      return current.value;
                    }
                  }, "get_object_at")
                }, {
                  key: "set_object_at",
                  value: /* @__PURE__ */ __name(function set_object_at(index, value2) {
                    if (index <= this.length()) {
                      var i2 = 1;
                      var current = this.head;
                      while (i2 < index) {
                        current = current.next;
                        i2++;
                      }
                      current.value = value2;
                    }
                  }, "set_object_at")
                }]);
                return LinkedList2;
              })();
              module3.exports = LinkedList;
            }),
            /* 12 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function Point3(x5, y6, p3) {
                this.x = null;
                this.y = null;
                if (x5 == null && y6 == null && p3 == null) {
                  this.x = 0;
                  this.y = 0;
                } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) {
                  this.x = x5;
                  this.y = y6;
                } else if (x5.constructor.name == "Point" && y6 == null && p3 == null) {
                  p3 = x5;
                  this.x = p3.x;
                  this.y = p3.y;
                }
              }
              __name(Point3, "Point");
              Point3.prototype.getX = function() {
                return this.x;
              };
              Point3.prototype.getY = function() {
                return this.y;
              };
              Point3.prototype.getLocation = function() {
                return new Point3(this.x, this.y);
              };
              Point3.prototype.setLocation = function(x5, y6, p3) {
                if (x5.constructor.name == "Point" && y6 == null && p3 == null) {
                  p3 = x5;
                  this.setLocation(p3.x, p3.y);
                } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) {
                  if (parseInt(x5) == x5 && parseInt(y6) == y6) {
                    this.move(x5, y6);
                  } else {
                    this.x = Math.floor(x5 + 0.5);
                    this.y = Math.floor(y6 + 0.5);
                  }
                }
              };
              Point3.prototype.move = function(x5, y6) {
                this.x = x5;
                this.y = y6;
              };
              Point3.prototype.translate = function(dx, dy) {
                this.x += dx;
                this.y += dy;
              };
              Point3.prototype.equals = function(obj) {
                if (obj.constructor.name == "Point") {
                  var pt = obj;
                  return this.x == pt.x && this.y == pt.y;
                }
                return this == obj;
              };
              Point3.prototype.toString = function() {
                return new Point3().constructor.name + "[x=" + this.x + ",y=" + this.y + "]";
              };
              module3.exports = Point3;
            }),
            /* 13 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function RectangleD(x5, y6, width3, height2) {
                this.x = 0;
                this.y = 0;
                this.width = 0;
                this.height = 0;
                if (x5 != null && y6 != null && width3 != null && height2 != null) {
                  this.x = x5;
                  this.y = y6;
                  this.width = width3;
                  this.height = height2;
                }
              }
              __name(RectangleD, "RectangleD");
              RectangleD.prototype.getX = function() {
                return this.x;
              };
              RectangleD.prototype.setX = function(x5) {
                this.x = x5;
              };
              RectangleD.prototype.getY = function() {
                return this.y;
              };
              RectangleD.prototype.setY = function(y6) {
                this.y = y6;
              };
              RectangleD.prototype.getWidth = function() {
                return this.width;
              };
              RectangleD.prototype.setWidth = function(width3) {
                this.width = width3;
              };
              RectangleD.prototype.getHeight = function() {
                return this.height;
              };
              RectangleD.prototype.setHeight = function(height2) {
                this.height = height2;
              };
              RectangleD.prototype.getRight = function() {
                return this.x + this.width;
              };
              RectangleD.prototype.getBottom = function() {
                return this.y + this.height;
              };
              RectangleD.prototype.intersects = function(a2) {
                if (this.getRight() < a2.x) {
                  return false;
                }
                if (this.getBottom() < a2.y) {
                  return false;
                }
                if (a2.getRight() < this.x) {
                  return false;
                }
                if (a2.getBottom() < this.y) {
                  return false;
                }
                return true;
              };
              RectangleD.prototype.getCenterX = function() {
                return this.x + this.width / 2;
              };
              RectangleD.prototype.getMinX = function() {
                return this.getX();
              };
              RectangleD.prototype.getMaxX = function() {
                return this.getX() + this.width;
              };
              RectangleD.prototype.getCenterY = function() {
                return this.y + this.height / 2;
              };
              RectangleD.prototype.getMinY = function() {
                return this.getY();
              };
              RectangleD.prototype.getMaxY = function() {
                return this.getY() + this.height;
              };
              RectangleD.prototype.getWidthHalf = function() {
                return this.width / 2;
              };
              RectangleD.prototype.getHeightHalf = function() {
                return this.height / 2;
              };
              module3.exports = RectangleD;
            }),
            /* 14 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) {
                return typeof obj;
              } : function(obj) {
                return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
              };
              function UniqueIDGeneretor() {
              }
              __name(UniqueIDGeneretor, "UniqueIDGeneretor");
              UniqueIDGeneretor.lastID = 0;
              UniqueIDGeneretor.createID = function(obj) {
                if (UniqueIDGeneretor.isPrimitive(obj)) {
                  return obj;
                }
                if (obj.uniqueID != null) {
                  return obj.uniqueID;
                }
                obj.uniqueID = UniqueIDGeneretor.getString();
                UniqueIDGeneretor.lastID++;
                return obj.uniqueID;
              };
              UniqueIDGeneretor.getString = function(id41) {
                if (id41 == null) id41 = UniqueIDGeneretor.lastID;
                return "Object#" + id41;
              };
              UniqueIDGeneretor.isPrimitive = function(arg) {
                var type3 = typeof arg === "undefined" ? "undefined" : _typeof2(arg);
                return arg == null || type3 != "object" && type3 != "function";
              };
              module3.exports = UniqueIDGeneretor;
            }),
            /* 15 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function _toConsumableArray2(arr) {
                if (Array.isArray(arr)) {
                  for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) {
                    arr2[i2] = arr[i2];
                  }
                  return arr2;
                } else {
                  return Array.from(arr);
                }
              }
              __name(_toConsumableArray2, "_toConsumableArray");
              var LayoutConstants = __webpack_require__(0);
              var LGraphManager = __webpack_require__(7);
              var LNode = __webpack_require__(3);
              var LEdge = __webpack_require__(1);
              var LGraph = __webpack_require__(6);
              var PointD = __webpack_require__(5);
              var Transform2 = __webpack_require__(17);
              var Emitter2 = __webpack_require__(29);
              function Layout2(isRemoteUse) {
                Emitter2.call(this);
                this.layoutQuality = LayoutConstants.QUALITY;
                this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;
                this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;
                this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;
                this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;
                this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;
                this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;
                this.edgeToDummyNodes = /* @__PURE__ */ new Map();
                this.graphManager = new LGraphManager(this);
                this.isLayoutFinished = false;
                this.isSubLayout = false;
                this.isRemoteUse = false;
                if (isRemoteUse != null) {
                  this.isRemoteUse = isRemoteUse;
                }
              }
              __name(Layout2, "Layout");
              Layout2.RANDOM_SEED = 1;
              Layout2.prototype = Object.create(Emitter2.prototype);
              Layout2.prototype.getGraphManager = function() {
                return this.graphManager;
              };
              Layout2.prototype.getAllNodes = function() {
                return this.graphManager.getAllNodes();
              };
              Layout2.prototype.getAllEdges = function() {
                return this.graphManager.getAllEdges();
              };
              Layout2.prototype.getAllNodesToApplyGravitation = function() {
                return this.graphManager.getAllNodesToApplyGravitation();
              };
              Layout2.prototype.newGraphManager = function() {
                var gm = new LGraphManager(this);
                this.graphManager = gm;
                return gm;
              };
              Layout2.prototype.newGraph = function(vGraph) {
                return new LGraph(null, this.graphManager, vGraph);
              };
              Layout2.prototype.newNode = function(vNode) {
                return new LNode(this.graphManager, vNode);
              };
              Layout2.prototype.newEdge = function(vEdge) {
                return new LEdge(null, null, vEdge);
              };
              Layout2.prototype.checkLayoutSuccess = function() {
                return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();
              };
              Layout2.prototype.runLayout = function() {
                this.isLayoutFinished = false;
                if (this.tilingPreLayout) {
                  this.tilingPreLayout();
                }
                this.initParameters();
                var isLayoutSuccessfull;
                if (this.checkLayoutSuccess()) {
                  isLayoutSuccessfull = false;
                } else {
                  isLayoutSuccessfull = this.layout();
                }
                if (LayoutConstants.ANIMATE === "during") {
                  return false;
                }
                if (isLayoutSuccessfull) {
                  if (!this.isSubLayout) {
                    this.doPostLayout();
                  }
                }
                if (this.tilingPostLayout) {
                  this.tilingPostLayout();
                }
                this.isLayoutFinished = true;
                return isLayoutSuccessfull;
              };
              Layout2.prototype.doPostLayout = function() {
                if (!this.incremental) {
                  this.transform();
                }
                this.update();
              };
              Layout2.prototype.update2 = function() {
                if (this.createBendsAsNeeded) {
                  this.createBendpointsFromDummyNodes();
                  this.graphManager.resetAllEdges();
                }
                if (!this.isRemoteUse) {
                  var edge;
                  var allEdges = this.graphManager.getAllEdges();
                  for (var i2 = 0; i2 < allEdges.length; i2++) {
                    edge = allEdges[i2];
                  }
                  var node2;
                  var nodes5 = this.graphManager.getRoot().getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    node2 = nodes5[i2];
                  }
                  this.update(this.graphManager.getRoot());
                }
              };
              Layout2.prototype.update = function(obj) {
                if (obj == null) {
                  this.update2();
                } else if (obj instanceof LNode) {
                  var node2 = obj;
                  if (node2.getChild() != null) {
                    var nodes5 = node2.getChild().getNodes();
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      update(nodes5[i2]);
                    }
                  }
                  if (node2.vGraphObject != null) {
                    var vNode = node2.vGraphObject;
                    vNode.update(node2);
                  }
                } else if (obj instanceof LEdge) {
                  var edge = obj;
                  if (edge.vGraphObject != null) {
                    var vEdge = edge.vGraphObject;
                    vEdge.update(edge);
                  }
                } else if (obj instanceof LGraph) {
                  var graph = obj;
                  if (graph.vGraphObject != null) {
                    var vGraph = graph.vGraphObject;
                    vGraph.update(graph);
                  }
                }
              };
              Layout2.prototype.initParameters = function() {
                if (!this.isSubLayout) {
                  this.layoutQuality = LayoutConstants.QUALITY;
                  this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;
                  this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;
                  this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;
                  this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;
                  this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;
                  this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;
                }
                if (this.animationDuringLayout) {
                  this.animationOnLayout = false;
                }
              };
              Layout2.prototype.transform = function(newLeftTop) {
                if (newLeftTop == void 0) {
                  this.transform(new PointD(0, 0));
                } else {
                  var trans = new Transform2();
                  var leftTop = this.graphManager.getRoot().updateLeftTop();
                  if (leftTop != null) {
                    trans.setWorldOrgX(newLeftTop.x);
                    trans.setWorldOrgY(newLeftTop.y);
                    trans.setDeviceOrgX(leftTop.x);
                    trans.setDeviceOrgY(leftTop.y);
                    var nodes5 = this.getAllNodes();
                    var node2;
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      node2 = nodes5[i2];
                      node2.transform(trans);
                    }
                  }
                }
              };
              Layout2.prototype.positionNodesRandomly = function(graph) {
                if (graph == void 0) {
                  this.positionNodesRandomly(this.getGraphManager().getRoot());
                  this.getGraphManager().getRoot().updateBounds(true);
                } else {
                  var lNode;
                  var childGraph;
                  var nodes5 = graph.getNodes();
                  for (var i2 = 0; i2 < nodes5.length; i2++) {
                    lNode = nodes5[i2];
                    childGraph = lNode.getChild();
                    if (childGraph == null) {
                      lNode.scatter();
                    } else if (childGraph.getNodes().length == 0) {
                      lNode.scatter();
                    } else {
                      this.positionNodesRandomly(childGraph);
                      lNode.updateBounds();
                    }
                  }
                }
              };
              Layout2.prototype.getFlatForest = function() {
                var flatForest = [];
                var isForest = true;
                var allNodes = this.graphManager.getRoot().getNodes();
                var isFlat = true;
                for (var i2 = 0; i2 < allNodes.length; i2++) {
                  if (allNodes[i2].getChild() != null) {
                    isFlat = false;
                  }
                }
                if (!isFlat) {
                  return flatForest;
                }
                var visited = /* @__PURE__ */ new Set();
                var toBeVisited = [];
                var parents3 = /* @__PURE__ */ new Map();
                var unProcessedNodes = [];
                unProcessedNodes = unProcessedNodes.concat(allNodes);
                while (unProcessedNodes.length > 0 && isForest) {
                  toBeVisited.push(unProcessedNodes[0]);
                  while (toBeVisited.length > 0 && isForest) {
                    var currentNode = toBeVisited[0];
                    toBeVisited.splice(0, 1);
                    visited.add(currentNode);
                    var neighborEdges = currentNode.getEdges();
                    for (var i2 = 0; i2 < neighborEdges.length; i2++) {
                      var currentNeighbor = neighborEdges[i2].getOtherEnd(currentNode);
                      if (parents3.get(currentNode) != currentNeighbor) {
                        if (!visited.has(currentNeighbor)) {
                          toBeVisited.push(currentNeighbor);
                          parents3.set(currentNeighbor, currentNode);
                        } else {
                          isForest = false;
                          break;
                        }
                      }
                    }
                  }
                  if (!isForest) {
                    flatForest = [];
                  } else {
                    var temp = [].concat(_toConsumableArray2(visited));
                    flatForest.push(temp);
                    for (var i2 = 0; i2 < temp.length; i2++) {
                      var value2 = temp[i2];
                      var index = unProcessedNodes.indexOf(value2);
                      if (index > -1) {
                        unProcessedNodes.splice(index, 1);
                      }
                    }
                    visited = /* @__PURE__ */ new Set();
                    parents3 = /* @__PURE__ */ new Map();
                  }
                }
                return flatForest;
              };
              Layout2.prototype.createDummyNodesForBendpoints = function(edge) {
                var dummyNodes = [];
                var prev2 = edge.source;
                var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);
                for (var i2 = 0; i2 < edge.bendpoints.length; i2++) {
                  var dummyNode = this.newNode(null);
                  dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));
                  graph.add(dummyNode);
                  var dummyEdge = this.newEdge(null);
                  this.graphManager.add(dummyEdge, prev2, dummyNode);
                  dummyNodes.add(dummyNode);
                  prev2 = dummyNode;
                }
                var dummyEdge = this.newEdge(null);
                this.graphManager.add(dummyEdge, prev2, edge.target);
                this.edgeToDummyNodes.set(edge, dummyNodes);
                if (edge.isInterGraph()) {
                  this.graphManager.remove(edge);
                } else {
                  graph.remove(edge);
                }
                return dummyNodes;
              };
              Layout2.prototype.createBendpointsFromDummyNodes = function() {
                var edges3 = [];
                edges3 = edges3.concat(this.graphManager.getAllEdges());
                edges3 = [].concat(_toConsumableArray2(this.edgeToDummyNodes.keys())).concat(edges3);
                for (var k2 = 0; k2 < edges3.length; k2++) {
                  var lEdge = edges3[k2];
                  if (lEdge.bendpoints.length > 0) {
                    var path4 = this.edgeToDummyNodes.get(lEdge);
                    for (var i2 = 0; i2 < path4.length; i2++) {
                      var dummyNode = path4[i2];
                      var p3 = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());
                      var ebp = lEdge.bendpoints.get(i2);
                      ebp.x = p3.x;
                      ebp.y = p3.y;
                      dummyNode.getOwner().remove(dummyNode);
                    }
                    this.graphManager.add(lEdge, lEdge.source, lEdge.target);
                  }
                }
              };
              Layout2.transform = function(sliderValue, defaultValue, minDiv, maxMul) {
                if (minDiv != void 0 && maxMul != void 0) {
                  var value2 = defaultValue;
                  if (sliderValue <= 50) {
                    var minValue = defaultValue / minDiv;
                    value2 -= (defaultValue - minValue) / 50 * (50 - sliderValue);
                  } else {
                    var maxValue = defaultValue * maxMul;
                    value2 += (maxValue - defaultValue) / 50 * (sliderValue - 50);
                  }
                  return value2;
                } else {
                  var a2, b3;
                  if (sliderValue <= 50) {
                    a2 = 9 * defaultValue / 500;
                    b3 = defaultValue / 10;
                  } else {
                    a2 = 9 * defaultValue / 50;
                    b3 = -8 * defaultValue;
                  }
                  return a2 * sliderValue + b3;
                }
              };
              Layout2.findCenterOfTree = function(nodes5) {
                var list = [];
                list = list.concat(nodes5);
                var removedNodes = [];
                var remainingDegrees = /* @__PURE__ */ new Map();
                var foundCenter = false;
                var centerNode = null;
                if (list.length == 1 || list.length == 2) {
                  foundCenter = true;
                  centerNode = list[0];
                }
                for (var i2 = 0; i2 < list.length; i2++) {
                  var node2 = list[i2];
                  var degree = node2.getNeighborsList().size;
                  remainingDegrees.set(node2, node2.getNeighborsList().size);
                  if (degree == 1) {
                    removedNodes.push(node2);
                  }
                }
                var tempList = [];
                tempList = tempList.concat(removedNodes);
                while (!foundCenter) {
                  var tempList2 = [];
                  tempList2 = tempList2.concat(tempList);
                  tempList = [];
                  for (var i2 = 0; i2 < list.length; i2++) {
                    var node2 = list[i2];
                    var index = list.indexOf(node2);
                    if (index >= 0) {
                      list.splice(index, 1);
                    }
                    var neighbours = node2.getNeighborsList();
                    neighbours.forEach(function(neighbour) {
                      if (removedNodes.indexOf(neighbour) < 0) {
                        var otherDegree = remainingDegrees.get(neighbour);
                        var newDegree = otherDegree - 1;
                        if (newDegree == 1) {
                          tempList.push(neighbour);
                        }
                        remainingDegrees.set(neighbour, newDegree);
                      }
                    });
                  }
                  removedNodes = removedNodes.concat(tempList);
                  if (list.length == 1 || list.length == 2) {
                    foundCenter = true;
                    centerNode = list[0];
                  }
                }
                return centerNode;
              };
              Layout2.prototype.setGraphManager = function(gm) {
                this.graphManager = gm;
              };
              module3.exports = Layout2;
            }),
            /* 16 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function RandomSeed() {
              }
              __name(RandomSeed, "RandomSeed");
              RandomSeed.seed = 1;
              RandomSeed.x = 0;
              RandomSeed.nextDouble = function() {
                RandomSeed.x = Math.sin(RandomSeed.seed++) * 1e4;
                return RandomSeed.x - Math.floor(RandomSeed.x);
              };
              module3.exports = RandomSeed;
            }),
            /* 17 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var PointD = __webpack_require__(5);
              function Transform2(x5, y6) {
                this.lworldOrgX = 0;
                this.lworldOrgY = 0;
                this.ldeviceOrgX = 0;
                this.ldeviceOrgY = 0;
                this.lworldExtX = 1;
                this.lworldExtY = 1;
                this.ldeviceExtX = 1;
                this.ldeviceExtY = 1;
              }
              __name(Transform2, "Transform");
              Transform2.prototype.getWorldOrgX = function() {
                return this.lworldOrgX;
              };
              Transform2.prototype.setWorldOrgX = function(wox) {
                this.lworldOrgX = wox;
              };
              Transform2.prototype.getWorldOrgY = function() {
                return this.lworldOrgY;
              };
              Transform2.prototype.setWorldOrgY = function(woy) {
                this.lworldOrgY = woy;
              };
              Transform2.prototype.getWorldExtX = function() {
                return this.lworldExtX;
              };
              Transform2.prototype.setWorldExtX = function(wex) {
                this.lworldExtX = wex;
              };
              Transform2.prototype.getWorldExtY = function() {
                return this.lworldExtY;
              };
              Transform2.prototype.setWorldExtY = function(wey) {
                this.lworldExtY = wey;
              };
              Transform2.prototype.getDeviceOrgX = function() {
                return this.ldeviceOrgX;
              };
              Transform2.prototype.setDeviceOrgX = function(dox) {
                this.ldeviceOrgX = dox;
              };
              Transform2.prototype.getDeviceOrgY = function() {
                return this.ldeviceOrgY;
              };
              Transform2.prototype.setDeviceOrgY = function(doy) {
                this.ldeviceOrgY = doy;
              };
              Transform2.prototype.getDeviceExtX = function() {
                return this.ldeviceExtX;
              };
              Transform2.prototype.setDeviceExtX = function(dex) {
                this.ldeviceExtX = dex;
              };
              Transform2.prototype.getDeviceExtY = function() {
                return this.ldeviceExtY;
              };
              Transform2.prototype.setDeviceExtY = function(dey) {
                this.ldeviceExtY = dey;
              };
              Transform2.prototype.transformX = function(x5) {
                var xDevice = 0;
                var worldExtX = this.lworldExtX;
                if (worldExtX != 0) {
                  xDevice = this.ldeviceOrgX + (x5 - this.lworldOrgX) * this.ldeviceExtX / worldExtX;
                }
                return xDevice;
              };
              Transform2.prototype.transformY = function(y6) {
                var yDevice = 0;
                var worldExtY = this.lworldExtY;
                if (worldExtY != 0) {
                  yDevice = this.ldeviceOrgY + (y6 - this.lworldOrgY) * this.ldeviceExtY / worldExtY;
                }
                return yDevice;
              };
              Transform2.prototype.inverseTransformX = function(x5) {
                var xWorld = 0;
                var deviceExtX = this.ldeviceExtX;
                if (deviceExtX != 0) {
                  xWorld = this.lworldOrgX + (x5 - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;
                }
                return xWorld;
              };
              Transform2.prototype.inverseTransformY = function(y6) {
                var yWorld = 0;
                var deviceExtY = this.ldeviceExtY;
                if (deviceExtY != 0) {
                  yWorld = this.lworldOrgY + (y6 - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;
                }
                return yWorld;
              };
              Transform2.prototype.inverseTransformPoint = function(inPoint) {
                var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));
                return outPoint;
              };
              module3.exports = Transform2;
            }),
            /* 18 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function _toConsumableArray2(arr) {
                if (Array.isArray(arr)) {
                  for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) {
                    arr2[i2] = arr[i2];
                  }
                  return arr2;
                } else {
                  return Array.from(arr);
                }
              }
              __name(_toConsumableArray2, "_toConsumableArray");
              var Layout2 = __webpack_require__(15);
              var FDLayoutConstants = __webpack_require__(4);
              var LayoutConstants = __webpack_require__(0);
              var IGeometry = __webpack_require__(8);
              var IMath = __webpack_require__(9);
              function FDLayout() {
                Layout2.call(this);
                this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;
                this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;
                this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;
                this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;
                this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;
                this.displacementThresholdPerNode = 3 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;
                this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;
                this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;
                this.totalDisplacement = 0;
                this.oldTotalDisplacement = 0;
                this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;
              }
              __name(FDLayout, "FDLayout");
              FDLayout.prototype = Object.create(Layout2.prototype);
              for (var prop in Layout2) {
                FDLayout[prop] = Layout2[prop];
              }
              FDLayout.prototype.initParameters = function() {
                Layout2.prototype.initParameters.call(this, arguments);
                this.totalIterations = 0;
                this.notAnimatedIterations = 0;
                this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;
                this.grid = [];
              };
              FDLayout.prototype.calcIdealEdgeLengths = function() {
                var edge;
                var originalIdealLength;
                var lcaDepth;
                var source;
                var target;
                var sizeOfSourceInLca;
                var sizeOfTargetInLca;
                var allEdges = this.getGraphManager().getAllEdges();
                for (var i2 = 0; i2 < allEdges.length; i2++) {
                  edge = allEdges[i2];
                  originalIdealLength = edge.idealLength;
                  if (edge.isInterGraph) {
                    source = edge.getSource();
                    target = edge.getTarget();
                    sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();
                    sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();
                    if (this.useSmartIdealEdgeLengthCalculation) {
                      edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;
                    }
                    lcaDepth = edge.getLca().getInclusionTreeDepth();
                    edge.idealLength += originalIdealLength * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);
                  }
                }
              };
              FDLayout.prototype.initSpringEmbedder = function() {
                var s2 = this.getAllNodes().length;
                if (this.incremental) {
                  if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {
                    this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));
                  }
                  this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;
                } else {
                  if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {
                    this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1 - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));
                  } else {
                    this.coolingFactor = 1;
                  }
                  this.initialCoolingFactor = this.coolingFactor;
                  this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;
                }
                this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);
                this.displacementThresholdPerNode = 3 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;
                this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;
                this.repulsionRange = this.calcRepulsionRange();
              };
              FDLayout.prototype.calcSpringForces = function() {
                var lEdges = this.getAllEdges();
                var edge;
                for (var i2 = 0; i2 < lEdges.length; i2++) {
                  edge = lEdges[i2];
                  this.calcSpringForce(edge, edge.idealLength);
                }
              };
              FDLayout.prototype.calcRepulsionForces = function() {
                var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
                var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
                var i2, j3;
                var nodeA, nodeB;
                var lNodes = this.getAllNodes();
                var processedNodeSet;
                if (this.useFRGridVariant) {
                  if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {
                    this.updateGrid();
                  }
                  processedNodeSet = /* @__PURE__ */ new Set();
                  for (i2 = 0; i2 < lNodes.length; i2++) {
                    nodeA = lNodes[i2];
                    this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);
                    processedNodeSet.add(nodeA);
                  }
                } else {
                  for (i2 = 0; i2 < lNodes.length; i2++) {
                    nodeA = lNodes[i2];
                    for (j3 = i2 + 1; j3 < lNodes.length; j3++) {
                      nodeB = lNodes[j3];
                      if (nodeA.getOwner() != nodeB.getOwner()) {
                        continue;
                      }
                      this.calcRepulsionForce(nodeA, nodeB);
                    }
                  }
                }
              };
              FDLayout.prototype.calcGravitationalForces = function() {
                var node2;
                var lNodes = this.getAllNodesToApplyGravitation();
                for (var i2 = 0; i2 < lNodes.length; i2++) {
                  node2 = lNodes[i2];
                  this.calcGravitationalForce(node2);
                }
              };
              FDLayout.prototype.moveNodes = function() {
                var lNodes = this.getAllNodes();
                var node2;
                for (var i2 = 0; i2 < lNodes.length; i2++) {
                  node2 = lNodes[i2];
                  node2.move();
                }
              };
              FDLayout.prototype.calcSpringForce = function(edge, idealLength) {
                var sourceNode = edge.getSource();
                var targetNode = edge.getTarget();
                var length2;
                var springForce;
                var springForceX;
                var springForceY;
                if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {
                  edge.updateLengthSimple();
                } else {
                  edge.updateLength();
                  if (edge.isOverlapingSourceAndTarget) {
                    return;
                  }
                }
                length2 = edge.getLength();
                if (length2 == 0) return;
                springForce = edge.edgeElasticity * (length2 - idealLength);
                springForceX = springForce * (edge.lengthX / length2);
                springForceY = springForce * (edge.lengthY / length2);
                sourceNode.springForceX += springForceX;
                sourceNode.springForceY += springForceY;
                targetNode.springForceX -= springForceX;
                targetNode.springForceY -= springForceY;
              };
              FDLayout.prototype.calcRepulsionForce = function(nodeA, nodeB) {
                var rectA = nodeA.getRect();
                var rectB = nodeB.getRect();
                var overlapAmount = new Array(2);
                var clipPoints = new Array(4);
                var distanceX;
                var distanceY;
                var distanceSquared;
                var distance3;
                var repulsionForce;
                var repulsionForceX;
                var repulsionForceY;
                if (rectA.intersects(rectB)) {
                  IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2);
                  repulsionForceX = 2 * overlapAmount[0];
                  repulsionForceY = 2 * overlapAmount[1];
                  var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);
                  nodeA.repulsionForceX -= childrenConstant * repulsionForceX;
                  nodeA.repulsionForceY -= childrenConstant * repulsionForceY;
                  nodeB.repulsionForceX += childrenConstant * repulsionForceX;
                  nodeB.repulsionForceY += childrenConstant * repulsionForceY;
                } else {
                  if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) {
                    distanceX = rectB.getCenterX() - rectA.getCenterX();
                    distanceY = rectB.getCenterY() - rectA.getCenterY();
                  } else {
                    IGeometry.getIntersection(rectA, rectB, clipPoints);
                    distanceX = clipPoints[2] - clipPoints[0];
                    distanceY = clipPoints[3] - clipPoints[1];
                  }
                  if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {
                    distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;
                  }
                  if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {
                    distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;
                  }
                  distanceSquared = distanceX * distanceX + distanceY * distanceY;
                  distance3 = Math.sqrt(distanceSquared);
                  repulsionForce = (nodeA.nodeRepulsion / 2 + nodeB.nodeRepulsion / 2) * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;
                  repulsionForceX = repulsionForce * distanceX / distance3;
                  repulsionForceY = repulsionForce * distanceY / distance3;
                  nodeA.repulsionForceX -= repulsionForceX;
                  nodeA.repulsionForceY -= repulsionForceY;
                  nodeB.repulsionForceX += repulsionForceX;
                  nodeB.repulsionForceY += repulsionForceY;
                }
              };
              FDLayout.prototype.calcGravitationalForce = function(node2) {
                var ownerGraph;
                var ownerCenterX;
                var ownerCenterY;
                var distanceX;
                var distanceY;
                var absDistanceX;
                var absDistanceY;
                var estimatedSize;
                ownerGraph = node2.getOwner();
                ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;
                ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;
                distanceX = node2.getCenterX() - ownerCenterX;
                distanceY = node2.getCenterY() - ownerCenterY;
                absDistanceX = Math.abs(distanceX) + node2.getWidth() / 2;
                absDistanceY = Math.abs(distanceY) + node2.getHeight() / 2;
                if (node2.getOwner() == this.graphManager.getRoot()) {
                  estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;
                  if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {
                    node2.gravitationForceX = -this.gravityConstant * distanceX;
                    node2.gravitationForceY = -this.gravityConstant * distanceY;
                  }
                } else {
                  estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;
                  if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {
                    node2.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;
                    node2.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;
                  }
                }
              };
              FDLayout.prototype.isConverged = function() {
                var converged;
                var oscilating = false;
                if (this.totalIterations > this.maxIterations / 3) {
                  oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;
                }
                converged = this.totalDisplacement < this.totalDisplacementThreshold;
                this.oldTotalDisplacement = this.totalDisplacement;
                return converged || oscilating;
              };
              FDLayout.prototype.animate = function() {
                if (this.animationDuringLayout && !this.isSubLayout) {
                  if (this.notAnimatedIterations == this.animationPeriod) {
                    this.update();
                    this.notAnimatedIterations = 0;
                  } else {
                    this.notAnimatedIterations++;
                  }
                }
              };
              FDLayout.prototype.calcNoOfChildrenForAllNodes = function() {
                var node2;
                var allNodes = this.graphManager.getAllNodes();
                for (var i2 = 0; i2 < allNodes.length; i2++) {
                  node2 = allNodes[i2];
                  node2.noOfChildren = node2.getNoOfChildren();
                }
              };
              FDLayout.prototype.calcGrid = function(graph) {
                var sizeX = 0;
                var sizeY = 0;
                sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));
                sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));
                var grid = new Array(sizeX);
                for (var i2 = 0; i2 < sizeX; i2++) {
                  grid[i2] = new Array(sizeY);
                }
                for (var i2 = 0; i2 < sizeX; i2++) {
                  for (var j3 = 0; j3 < sizeY; j3++) {
                    grid[i2][j3] = new Array();
                  }
                }
                return grid;
              };
              FDLayout.prototype.addNodeToGrid = function(v3, left3, top2) {
                var startX2 = 0;
                var finishX = 0;
                var startY2 = 0;
                var finishY = 0;
                startX2 = parseInt(Math.floor((v3.getRect().x - left3) / this.repulsionRange));
                finishX = parseInt(Math.floor((v3.getRect().width + v3.getRect().x - left3) / this.repulsionRange));
                startY2 = parseInt(Math.floor((v3.getRect().y - top2) / this.repulsionRange));
                finishY = parseInt(Math.floor((v3.getRect().height + v3.getRect().y - top2) / this.repulsionRange));
                for (var i2 = startX2; i2 <= finishX; i2++) {
                  for (var j3 = startY2; j3 <= finishY; j3++) {
                    this.grid[i2][j3].push(v3);
                    v3.setGridCoordinates(startX2, finishX, startY2, finishY);
                  }
                }
              };
              FDLayout.prototype.updateGrid = function() {
                var i2;
                var nodeA;
                var lNodes = this.getAllNodes();
                this.grid = this.calcGrid(this.graphManager.getRoot());
                for (i2 = 0; i2 < lNodes.length; i2++) {
                  nodeA = lNodes[i2];
                  this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());
                }
              };
              FDLayout.prototype.calculateRepulsionForceOfANode = function(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {
                if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {
                  var surrounding = /* @__PURE__ */ new Set();
                  nodeA.surrounding = new Array();
                  var nodeB;
                  var grid = this.grid;
                  for (var i2 = nodeA.startX - 1; i2 < nodeA.finishX + 2; i2++) {
                    for (var j3 = nodeA.startY - 1; j3 < nodeA.finishY + 2; j3++) {
                      if (!(i2 < 0 || j3 < 0 || i2 >= grid.length || j3 >= grid[0].length)) {
                        for (var k2 = 0; k2 < grid[i2][j3].length; k2++) {
                          nodeB = grid[i2][j3][k2];
                          if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {
                            continue;
                          }
                          if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {
                            var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);
                            var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);
                            if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {
                              surrounding.add(nodeB);
                            }
                          }
                        }
                      }
                    }
                  }
                  nodeA.surrounding = [].concat(_toConsumableArray2(surrounding));
                }
                for (i2 = 0; i2 < nodeA.surrounding.length; i2++) {
                  this.calcRepulsionForce(nodeA, nodeA.surrounding[i2]);
                }
              };
              FDLayout.prototype.calcRepulsionRange = function() {
                return 0;
              };
              module3.exports = FDLayout;
            }),
            /* 19 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LEdge = __webpack_require__(1);
              var FDLayoutConstants = __webpack_require__(4);
              function FDLayoutEdge(source, target, vEdge) {
                LEdge.call(this, source, target, vEdge);
                this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;
                this.edgeElasticity = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;
              }
              __name(FDLayoutEdge, "FDLayoutEdge");
              FDLayoutEdge.prototype = Object.create(LEdge.prototype);
              for (var prop in LEdge) {
                FDLayoutEdge[prop] = LEdge[prop];
              }
              module3.exports = FDLayoutEdge;
            }),
            /* 20 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var LNode = __webpack_require__(3);
              var FDLayoutConstants = __webpack_require__(4);
              function FDLayoutNode(gm, loc, size4, vNode) {
                LNode.call(this, gm, loc, size4, vNode);
                this.nodeRepulsion = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;
                this.springForceX = 0;
                this.springForceY = 0;
                this.repulsionForceX = 0;
                this.repulsionForceY = 0;
                this.gravitationForceX = 0;
                this.gravitationForceY = 0;
                this.displacementX = 0;
                this.displacementY = 0;
                this.startX = 0;
                this.finishX = 0;
                this.startY = 0;
                this.finishY = 0;
                this.surrounding = [];
              }
              __name(FDLayoutNode, "FDLayoutNode");
              FDLayoutNode.prototype = Object.create(LNode.prototype);
              for (var prop in LNode) {
                FDLayoutNode[prop] = LNode[prop];
              }
              FDLayoutNode.prototype.setGridCoordinates = function(_startX, _finishX, _startY, _finishY) {
                this.startX = _startX;
                this.finishX = _finishX;
                this.startY = _startY;
                this.finishY = _finishY;
              };
              module3.exports = FDLayoutNode;
            }),
            /* 21 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function DimensionD2(width3, height2) {
                this.width = 0;
                this.height = 0;
                if (width3 !== null && height2 !== null) {
                  this.height = height2;
                  this.width = width3;
                }
              }
              __name(DimensionD2, "DimensionD");
              DimensionD2.prototype.getWidth = function() {
                return this.width;
              };
              DimensionD2.prototype.setWidth = function(width3) {
                this.width = width3;
              };
              DimensionD2.prototype.getHeight = function() {
                return this.height;
              };
              DimensionD2.prototype.setHeight = function(height2) {
                this.height = height2;
              };
              module3.exports = DimensionD2;
            }),
            /* 22 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var UniqueIDGeneretor = __webpack_require__(14);
              function HashMap() {
                this.map = {};
                this.keys = [];
              }
              __name(HashMap, "HashMap");
              HashMap.prototype.put = function(key, value2) {
                var theId = UniqueIDGeneretor.createID(key);
                if (!this.contains(theId)) {
                  this.map[theId] = value2;
                  this.keys.push(key);
                }
              };
              HashMap.prototype.contains = function(key) {
                var theId = UniqueIDGeneretor.createID(key);
                return this.map[key] != null;
              };
              HashMap.prototype.get = function(key) {
                var theId = UniqueIDGeneretor.createID(key);
                return this.map[theId];
              };
              HashMap.prototype.keySet = function() {
                return this.keys;
              };
              module3.exports = HashMap;
            }),
            /* 23 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var UniqueIDGeneretor = __webpack_require__(14);
              function HashSet() {
                this.set = {};
              }
              __name(HashSet, "HashSet");
              ;
              HashSet.prototype.add = function(obj) {
                var theId = UniqueIDGeneretor.createID(obj);
                if (!this.contains(theId)) this.set[theId] = obj;
              };
              HashSet.prototype.remove = function(obj) {
                delete this.set[UniqueIDGeneretor.createID(obj)];
              };
              HashSet.prototype.clear = function() {
                this.set = {};
              };
              HashSet.prototype.contains = function(obj) {
                return this.set[UniqueIDGeneretor.createID(obj)] == obj;
              };
              HashSet.prototype.isEmpty = function() {
                return this.size() === 0;
              };
              HashSet.prototype.size = function() {
                return Object.keys(this.set).length;
              };
              HashSet.prototype.addAllTo = function(list) {
                var keys3 = Object.keys(this.set);
                var length2 = keys3.length;
                for (var i2 = 0; i2 < length2; i2++) {
                  list.push(this.set[keys3[i2]]);
                }
              };
              HashSet.prototype.size = function() {
                return Object.keys(this.set).length;
              };
              HashSet.prototype.addAll = function(list) {
                var s2 = list.length;
                for (var i2 = 0; i2 < s2; i2++) {
                  var v3 = list[i2];
                  this.add(v3);
                }
              };
              module3.exports = HashSet;
            }),
            /* 24 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function Matrix() {
              }
              __name(Matrix, "Matrix");
              Matrix.multMat = function(array1, array22) {
                var result = [];
                for (var i2 = 0; i2 < array1.length; i2++) {
                  result[i2] = [];
                  for (var j3 = 0; j3 < array22[0].length; j3++) {
                    result[i2][j3] = 0;
                    for (var k2 = 0; k2 < array1[0].length; k2++) {
                      result[i2][j3] += array1[i2][k2] * array22[k2][j3];
                    }
                  }
                }
                return result;
              };
              Matrix.transpose = function(array4) {
                var result = [];
                for (var i2 = 0; i2 < array4[0].length; i2++) {
                  result[i2] = [];
                  for (var j3 = 0; j3 < array4.length; j3++) {
                    result[i2][j3] = array4[j3][i2];
                  }
                }
                return result;
              };
              Matrix.multCons = function(array4, constant4) {
                var result = [];
                for (var i2 = 0; i2 < array4.length; i2++) {
                  result[i2] = array4[i2] * constant4;
                }
                return result;
              };
              Matrix.minusOp = function(array1, array22) {
                var result = [];
                for (var i2 = 0; i2 < array1.length; i2++) {
                  result[i2] = array1[i2] - array22[i2];
                }
                return result;
              };
              Matrix.dotProduct = function(array1, array22) {
                var product = 0;
                for (var i2 = 0; i2 < array1.length; i2++) {
                  product += array1[i2] * array22[i2];
                }
                return product;
              };
              Matrix.mag = function(array4) {
                return Math.sqrt(this.dotProduct(array4, array4));
              };
              Matrix.normalize = function(array4) {
                var result = [];
                var magnitude = this.mag(array4);
                for (var i2 = 0; i2 < array4.length; i2++) {
                  result[i2] = array4[i2] / magnitude;
                }
                return result;
              };
              Matrix.multGamma = function(array4) {
                var result = [];
                var sum2 = 0;
                for (var i2 = 0; i2 < array4.length; i2++) {
                  sum2 += array4[i2];
                }
                sum2 *= -1 / array4.length;
                for (var _i = 0; _i < array4.length; _i++) {
                  result[_i] = sum2 + array4[_i];
                }
                return result;
              };
              Matrix.multL = function(array4, C3, INV) {
                var result = [];
                var temp1 = [];
                var temp2 = [];
                for (var i2 = 0; i2 < C3[0].length; i2++) {
                  var sum2 = 0;
                  for (var j3 = 0; j3 < C3.length; j3++) {
                    sum2 += -0.5 * C3[j3][i2] * array4[j3];
                  }
                  temp1[i2] = sum2;
                }
                for (var _i2 = 0; _i2 < INV.length; _i2++) {
                  var _sum = 0;
                  for (var _j = 0; _j < INV.length; _j++) {
                    _sum += INV[_i2][_j] * temp1[_j];
                  }
                  temp2[_i2] = _sum;
                }
                for (var _i3 = 0; _i3 < C3.length; _i3++) {
                  var _sum2 = 0;
                  for (var _j2 = 0; _j2 < C3[0].length; _j2++) {
                    _sum2 += C3[_i3][_j2] * temp2[_j2];
                  }
                  result[_i3] = _sum2;
                }
                return result;
              };
              module3.exports = Matrix;
            }),
            /* 25 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _createClass2 = /* @__PURE__ */ (function() {
                function defineProperties(target, props) {
                  for (var i2 = 0; i2 < props.length; i2++) {
                    var descriptor = props[i2];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) descriptor.writable = true;
                    Object.defineProperty(target, descriptor.key, descriptor);
                  }
                }
                __name(defineProperties, "defineProperties");
                return function(Constructor, protoProps, staticProps) {
                  if (protoProps) defineProperties(Constructor.prototype, protoProps);
                  if (staticProps) defineProperties(Constructor, staticProps);
                  return Constructor;
                };
              })();
              function _classCallCheck2(instance2, Constructor) {
                if (!(instance2 instanceof Constructor)) {
                  throw new TypeError("Cannot call a class as a function");
                }
              }
              __name(_classCallCheck2, "_classCallCheck");
              var LinkedList = __webpack_require__(11);
              var Quicksort = (function() {
                function Quicksort2(A2, compareFunction) {
                  _classCallCheck2(this, Quicksort2);
                  if (compareFunction !== null || compareFunction !== void 0) this.compareFunction = this._defaultCompareFunction;
                  var length2 = void 0;
                  if (A2 instanceof LinkedList) length2 = A2.size();
                  else length2 = A2.length;
                  this._quicksort(A2, 0, length2 - 1);
                }
                __name(Quicksort2, "Quicksort");
                _createClass2(Quicksort2, [{
                  key: "_quicksort",
                  value: /* @__PURE__ */ __name(function _quicksort(A2, p3, r2) {
                    if (p3 < r2) {
                      var q3 = this._partition(A2, p3, r2);
                      this._quicksort(A2, p3, q3);
                      this._quicksort(A2, q3 + 1, r2);
                    }
                  }, "_quicksort")
                }, {
                  key: "_partition",
                  value: /* @__PURE__ */ __name(function _partition(A2, p3, r2) {
                    var x5 = this._get(A2, p3);
                    var i2 = p3;
                    var j3 = r2;
                    while (true) {
                      while (this.compareFunction(x5, this._get(A2, j3))) {
                        j3--;
                      }
                      while (this.compareFunction(this._get(A2, i2), x5)) {
                        i2++;
                      }
                      if (i2 < j3) {
                        this._swap(A2, i2, j3);
                        i2++;
                        j3--;
                      } else return j3;
                    }
                  }, "_partition")
                }, {
                  key: "_get",
                  value: /* @__PURE__ */ __name(function _get(object3, index) {
                    if (object3 instanceof LinkedList) return object3.get_object_at(index);
                    else return object3[index];
                  }, "_get")
                }, {
                  key: "_set",
                  value: /* @__PURE__ */ __name(function _set(object3, index, value2) {
                    if (object3 instanceof LinkedList) object3.set_object_at(index, value2);
                    else object3[index] = value2;
                  }, "_set")
                }, {
                  key: "_swap",
                  value: /* @__PURE__ */ __name(function _swap(A2, i2, j3) {
                    var temp = this._get(A2, i2);
                    this._set(A2, i2, this._get(A2, j3));
                    this._set(A2, j3, temp);
                  }, "_swap")
                }, {
                  key: "_defaultCompareFunction",
                  value: /* @__PURE__ */ __name(function _defaultCompareFunction(a2, b3) {
                    return b3 > a2;
                  }, "_defaultCompareFunction")
                }]);
                return Quicksort2;
              })();
              module3.exports = Quicksort;
            }),
            /* 26 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function SVD() {
              }
              __name(SVD, "SVD");
              ;
              SVD.svd = function(A2) {
                this.U = null;
                this.V = null;
                this.s = null;
                this.m = 0;
                this.n = 0;
                this.m = A2.length;
                this.n = A2[0].length;
                var nu = Math.min(this.m, this.n);
                this.s = (function(s2) {
                  var a2 = [];
                  while (s2-- > 0) {
                    a2.push(0);
                  }
                  return a2;
                })(Math.min(this.m + 1, this.n));
                this.U = (function(dims) {
                  var allocate = /* @__PURE__ */ __name(function allocate2(dims2) {
                    if (dims2.length == 0) {
                      return 0;
                    } else {
                      var array4 = [];
                      for (var i3 = 0; i3 < dims2[0]; i3++) {
                        array4.push(allocate2(dims2.slice(1)));
                      }
                      return array4;
                    }
                  }, "allocate");
                  return allocate(dims);
                })([this.m, nu]);
                this.V = (function(dims) {
                  var allocate = /* @__PURE__ */ __name(function allocate2(dims2) {
                    if (dims2.length == 0) {
                      return 0;
                    } else {
                      var array4 = [];
                      for (var i3 = 0; i3 < dims2[0]; i3++) {
                        array4.push(allocate2(dims2.slice(1)));
                      }
                      return array4;
                    }
                  }, "allocate");
                  return allocate(dims);
                })([this.n, this.n]);
                var e3 = (function(s2) {
                  var a2 = [];
                  while (s2-- > 0) {
                    a2.push(0);
                  }
                  return a2;
                })(this.n);
                var work = (function(s2) {
                  var a2 = [];
                  while (s2-- > 0) {
                    a2.push(0);
                  }
                  return a2;
                })(this.m);
                var wantu = true;
                var wantv = true;
                var nct = Math.min(this.m - 1, this.n);
                var nrt = Math.max(0, Math.min(this.n - 2, this.m));
                for (var k2 = 0; k2 < Math.max(nct, nrt); k2++) {
                  if (k2 < nct) {
                    this.s[k2] = 0;
                    for (var i2 = k2; i2 < this.m; i2++) {
                      this.s[k2] = SVD.hypot(this.s[k2], A2[i2][k2]);
                    }
                    ;
                    if (this.s[k2] !== 0) {
                      if (A2[k2][k2] < 0) {
                        this.s[k2] = -this.s[k2];
                      }
                      for (var _i = k2; _i < this.m; _i++) {
                        A2[_i][k2] /= this.s[k2];
                      }
                      ;
                      A2[k2][k2] += 1;
                    }
                    this.s[k2] = -this.s[k2];
                  }
                  for (var j3 = k2 + 1; j3 < this.n; j3++) {
                    if (/* @__PURE__ */ (function(lhs, rhs) {
                      return lhs && rhs;
                    })(k2 < nct, this.s[k2] !== 0)) {
                      var t4 = 0;
                      for (var _i2 = k2; _i2 < this.m; _i2++) {
                        t4 += A2[_i2][k2] * A2[_i2][j3];
                      }
                      ;
                      t4 = -t4 / A2[k2][k2];
                      for (var _i3 = k2; _i3 < this.m; _i3++) {
                        A2[_i3][j3] += t4 * A2[_i3][k2];
                      }
                      ;
                    }
                    e3[j3] = A2[k2][j3];
                  }
                  ;
                  if (/* @__PURE__ */ (function(lhs, rhs) {
                    return lhs && rhs;
                  })(wantu, k2 < nct)) {
                    for (var _i4 = k2; _i4 < this.m; _i4++) {
                      this.U[_i4][k2] = A2[_i4][k2];
                    }
                    ;
                  }
                  if (k2 < nrt) {
                    e3[k2] = 0;
                    for (var _i5 = k2 + 1; _i5 < this.n; _i5++) {
                      e3[k2] = SVD.hypot(e3[k2], e3[_i5]);
                    }
                    ;
                    if (e3[k2] !== 0) {
                      if (e3[k2 + 1] < 0) {
                        e3[k2] = -e3[k2];
                      }
                      for (var _i6 = k2 + 1; _i6 < this.n; _i6++) {
                        e3[_i6] /= e3[k2];
                      }
                      ;
                      e3[k2 + 1] += 1;
                    }
                    e3[k2] = -e3[k2];
                    if (/* @__PURE__ */ (function(lhs, rhs) {
                      return lhs && rhs;
                    })(k2 + 1 < this.m, e3[k2] !== 0)) {
                      for (var _i7 = k2 + 1; _i7 < this.m; _i7++) {
                        work[_i7] = 0;
                      }
                      ;
                      for (var _j = k2 + 1; _j < this.n; _j++) {
                        for (var _i8 = k2 + 1; _i8 < this.m; _i8++) {
                          work[_i8] += e3[_j] * A2[_i8][_j];
                        }
                        ;
                      }
                      ;
                      for (var _j2 = k2 + 1; _j2 < this.n; _j2++) {
                        var _t = -e3[_j2] / e3[k2 + 1];
                        for (var _i9 = k2 + 1; _i9 < this.m; _i9++) {
                          A2[_i9][_j2] += _t * work[_i9];
                        }
                        ;
                      }
                      ;
                    }
                    if (wantv) {
                      for (var _i10 = k2 + 1; _i10 < this.n; _i10++) {
                        this.V[_i10][k2] = e3[_i10];
                      }
                      ;
                    }
                  }
                }
                ;
                var p3 = Math.min(this.n, this.m + 1);
                if (nct < this.n) {
                  this.s[nct] = A2[nct][nct];
                }
                if (this.m < p3) {
                  this.s[p3 - 1] = 0;
                }
                if (nrt + 1 < p3) {
                  e3[nrt] = A2[nrt][p3 - 1];
                }
                e3[p3 - 1] = 0;
                if (wantu) {
                  for (var _j3 = nct; _j3 < nu; _j3++) {
                    for (var _i11 = 0; _i11 < this.m; _i11++) {
                      this.U[_i11][_j3] = 0;
                    }
                    ;
                    this.U[_j3][_j3] = 1;
                  }
                  ;
                  for (var _k = nct - 1; _k >= 0; _k--) {
                    if (this.s[_k] !== 0) {
                      for (var _j4 = _k + 1; _j4 < nu; _j4++) {
                        var _t2 = 0;
                        for (var _i12 = _k; _i12 < this.m; _i12++) {
                          _t2 += this.U[_i12][_k] * this.U[_i12][_j4];
                        }
                        ;
                        _t2 = -_t2 / this.U[_k][_k];
                        for (var _i13 = _k; _i13 < this.m; _i13++) {
                          this.U[_i13][_j4] += _t2 * this.U[_i13][_k];
                        }
                        ;
                      }
                      ;
                      for (var _i14 = _k; _i14 < this.m; _i14++) {
                        this.U[_i14][_k] = -this.U[_i14][_k];
                      }
                      ;
                      this.U[_k][_k] = 1 + this.U[_k][_k];
                      for (var _i15 = 0; _i15 < _k - 1; _i15++) {
                        this.U[_i15][_k] = 0;
                      }
                      ;
                    } else {
                      for (var _i16 = 0; _i16 < this.m; _i16++) {
                        this.U[_i16][_k] = 0;
                      }
                      ;
                      this.U[_k][_k] = 1;
                    }
                  }
                  ;
                }
                if (wantv) {
                  for (var _k2 = this.n - 1; _k2 >= 0; _k2--) {
                    if (/* @__PURE__ */ (function(lhs, rhs) {
                      return lhs && rhs;
                    })(_k2 < nrt, e3[_k2] !== 0)) {
                      for (var _j5 = _k2 + 1; _j5 < nu; _j5++) {
                        var _t3 = 0;
                        for (var _i17 = _k2 + 1; _i17 < this.n; _i17++) {
                          _t3 += this.V[_i17][_k2] * this.V[_i17][_j5];
                        }
                        ;
                        _t3 = -_t3 / this.V[_k2 + 1][_k2];
                        for (var _i18 = _k2 + 1; _i18 < this.n; _i18++) {
                          this.V[_i18][_j5] += _t3 * this.V[_i18][_k2];
                        }
                        ;
                      }
                      ;
                    }
                    for (var _i19 = 0; _i19 < this.n; _i19++) {
                      this.V[_i19][_k2] = 0;
                    }
                    ;
                    this.V[_k2][_k2] = 1;
                  }
                  ;
                }
                var pp = p3 - 1;
                var iter = 0;
                var eps = Math.pow(2, -52);
                var tiny = Math.pow(2, -966);
                while (p3 > 0) {
                  var _k3 = void 0;
                  var kase = void 0;
                  for (_k3 = p3 - 2; _k3 >= -1; _k3--) {
                    if (_k3 === -1) {
                      break;
                    }
                    if (Math.abs(e3[_k3]) <= tiny + eps * (Math.abs(this.s[_k3]) + Math.abs(this.s[_k3 + 1]))) {
                      e3[_k3] = 0;
                      break;
                    }
                  }
                  ;
                  if (_k3 === p3 - 2) {
                    kase = 4;
                  } else {
                    var ks = void 0;
                    for (ks = p3 - 1; ks >= _k3; ks--) {
                      if (ks === _k3) {
                        break;
                      }
                      var _t4 = (ks !== p3 ? Math.abs(e3[ks]) : 0) + (ks !== _k3 + 1 ? Math.abs(e3[ks - 1]) : 0);
                      if (Math.abs(this.s[ks]) <= tiny + eps * _t4) {
                        this.s[ks] = 0;
                        break;
                      }
                    }
                    ;
                    if (ks === _k3) {
                      kase = 3;
                    } else if (ks === p3 - 1) {
                      kase = 1;
                    } else {
                      kase = 2;
                      _k3 = ks;
                    }
                  }
                  _k3++;
                  switch (kase) {
                    case 1:
                      {
                        var f2 = e3[p3 - 2];
                        e3[p3 - 2] = 0;
                        for (var _j6 = p3 - 2; _j6 >= _k3; _j6--) {
                          var _t5 = SVD.hypot(this.s[_j6], f2);
                          var cs = this.s[_j6] / _t5;
                          var sn = f2 / _t5;
                          this.s[_j6] = _t5;
                          if (_j6 !== _k3) {
                            f2 = -sn * e3[_j6 - 1];
                            e3[_j6 - 1] = cs * e3[_j6 - 1];
                          }
                          if (wantv) {
                            for (var _i20 = 0; _i20 < this.n; _i20++) {
                              _t5 = cs * this.V[_i20][_j6] + sn * this.V[_i20][p3 - 1];
                              this.V[_i20][p3 - 1] = -sn * this.V[_i20][_j6] + cs * this.V[_i20][p3 - 1];
                              this.V[_i20][_j6] = _t5;
                            }
                            ;
                          }
                        }
                        ;
                      }
                      ;
                      break;
                    case 2:
                      {
                        var _f = e3[_k3 - 1];
                        e3[_k3 - 1] = 0;
                        for (var _j7 = _k3; _j7 < p3; _j7++) {
                          var _t6 = SVD.hypot(this.s[_j7], _f);
                          var _cs = this.s[_j7] / _t6;
                          var _sn = _f / _t6;
                          this.s[_j7] = _t6;
                          _f = -_sn * e3[_j7];
                          e3[_j7] = _cs * e3[_j7];
                          if (wantu) {
                            for (var _i21 = 0; _i21 < this.m; _i21++) {
                              _t6 = _cs * this.U[_i21][_j7] + _sn * this.U[_i21][_k3 - 1];
                              this.U[_i21][_k3 - 1] = -_sn * this.U[_i21][_j7] + _cs * this.U[_i21][_k3 - 1];
                              this.U[_i21][_j7] = _t6;
                            }
                            ;
                          }
                        }
                        ;
                      }
                      ;
                      break;
                    case 3:
                      {
                        var scale3 = Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[p3 - 1]), Math.abs(this.s[p3 - 2])), Math.abs(e3[p3 - 2])), Math.abs(this.s[_k3])), Math.abs(e3[_k3]));
                        var sp = this.s[p3 - 1] / scale3;
                        var spm1 = this.s[p3 - 2] / scale3;
                        var epm1 = e3[p3 - 2] / scale3;
                        var sk = this.s[_k3] / scale3;
                        var ek = e3[_k3] / scale3;
                        var b3 = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;
                        var c3 = sp * epm1 * (sp * epm1);
                        var shift2 = 0;
                        if (/* @__PURE__ */ (function(lhs, rhs) {
                          return lhs || rhs;
                        })(b3 !== 0, c3 !== 0)) {
                          shift2 = Math.sqrt(b3 * b3 + c3);
                          if (b3 < 0) {
                            shift2 = -shift2;
                          }
                          shift2 = c3 / (b3 + shift2);
                        }
                        var _f2 = (sk + sp) * (sk - sp) + shift2;
                        var g2 = sk * ek;
                        for (var _j8 = _k3; _j8 < p3 - 1; _j8++) {
                          var _t7 = SVD.hypot(_f2, g2);
                          var _cs2 = _f2 / _t7;
                          var _sn2 = g2 / _t7;
                          if (_j8 !== _k3) {
                            e3[_j8 - 1] = _t7;
                          }
                          _f2 = _cs2 * this.s[_j8] + _sn2 * e3[_j8];
                          e3[_j8] = _cs2 * e3[_j8] - _sn2 * this.s[_j8];
                          g2 = _sn2 * this.s[_j8 + 1];
                          this.s[_j8 + 1] = _cs2 * this.s[_j8 + 1];
                          if (wantv) {
                            for (var _i22 = 0; _i22 < this.n; _i22++) {
                              _t7 = _cs2 * this.V[_i22][_j8] + _sn2 * this.V[_i22][_j8 + 1];
                              this.V[_i22][_j8 + 1] = -_sn2 * this.V[_i22][_j8] + _cs2 * this.V[_i22][_j8 + 1];
                              this.V[_i22][_j8] = _t7;
                            }
                            ;
                          }
                          _t7 = SVD.hypot(_f2, g2);
                          _cs2 = _f2 / _t7;
                          _sn2 = g2 / _t7;
                          this.s[_j8] = _t7;
                          _f2 = _cs2 * e3[_j8] + _sn2 * this.s[_j8 + 1];
                          this.s[_j8 + 1] = -_sn2 * e3[_j8] + _cs2 * this.s[_j8 + 1];
                          g2 = _sn2 * e3[_j8 + 1];
                          e3[_j8 + 1] = _cs2 * e3[_j8 + 1];
                          if (wantu && _j8 < this.m - 1) {
                            for (var _i23 = 0; _i23 < this.m; _i23++) {
                              _t7 = _cs2 * this.U[_i23][_j8] + _sn2 * this.U[_i23][_j8 + 1];
                              this.U[_i23][_j8 + 1] = -_sn2 * this.U[_i23][_j8] + _cs2 * this.U[_i23][_j8 + 1];
                              this.U[_i23][_j8] = _t7;
                            }
                            ;
                          }
                        }
                        ;
                        e3[p3 - 2] = _f2;
                        iter = iter + 1;
                      }
                      ;
                      break;
                    case 4:
                      {
                        if (this.s[_k3] <= 0) {
                          this.s[_k3] = this.s[_k3] < 0 ? -this.s[_k3] : 0;
                          if (wantv) {
                            for (var _i24 = 0; _i24 <= pp; _i24++) {
                              this.V[_i24][_k3] = -this.V[_i24][_k3];
                            }
                            ;
                          }
                        }
                        while (_k3 < pp) {
                          if (this.s[_k3] >= this.s[_k3 + 1]) {
                            break;
                          }
                          var _t8 = this.s[_k3];
                          this.s[_k3] = this.s[_k3 + 1];
                          this.s[_k3 + 1] = _t8;
                          if (wantv && _k3 < this.n - 1) {
                            for (var _i25 = 0; _i25 < this.n; _i25++) {
                              _t8 = this.V[_i25][_k3 + 1];
                              this.V[_i25][_k3 + 1] = this.V[_i25][_k3];
                              this.V[_i25][_k3] = _t8;
                            }
                            ;
                          }
                          if (wantu && _k3 < this.m - 1) {
                            for (var _i26 = 0; _i26 < this.m; _i26++) {
                              _t8 = this.U[_i26][_k3 + 1];
                              this.U[_i26][_k3 + 1] = this.U[_i26][_k3];
                              this.U[_i26][_k3] = _t8;
                            }
                            ;
                          }
                          _k3++;
                        }
                        ;
                        iter = 0;
                        p3--;
                      }
                      ;
                      break;
                  }
                }
                ;
                var result = { U: this.U, V: this.V, S: this.s };
                return result;
              };
              SVD.hypot = function(a2, b3) {
                var r2 = void 0;
                if (Math.abs(a2) > Math.abs(b3)) {
                  r2 = b3 / a2;
                  r2 = Math.abs(a2) * Math.sqrt(1 + r2 * r2);
                } else if (b3 != 0) {
                  r2 = a2 / b3;
                  r2 = Math.abs(b3) * Math.sqrt(1 + r2 * r2);
                } else {
                  r2 = 0;
                }
                return r2;
              };
              module3.exports = SVD;
            }),
            /* 27 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var _createClass2 = /* @__PURE__ */ (function() {
                function defineProperties(target, props) {
                  for (var i2 = 0; i2 < props.length; i2++) {
                    var descriptor = props[i2];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) descriptor.writable = true;
                    Object.defineProperty(target, descriptor.key, descriptor);
                  }
                }
                __name(defineProperties, "defineProperties");
                return function(Constructor, protoProps, staticProps) {
                  if (protoProps) defineProperties(Constructor.prototype, protoProps);
                  if (staticProps) defineProperties(Constructor, staticProps);
                  return Constructor;
                };
              })();
              function _classCallCheck2(instance2, Constructor) {
                if (!(instance2 instanceof Constructor)) {
                  throw new TypeError("Cannot call a class as a function");
                }
              }
              __name(_classCallCheck2, "_classCallCheck");
              var NeedlemanWunsch = (function() {
                function NeedlemanWunsch2(sequence1, sequence2) {
                  var match_score = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1;
                  var mismatch_penalty = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : -1;
                  var gap_penalty = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : -1;
                  _classCallCheck2(this, NeedlemanWunsch2);
                  this.sequence1 = sequence1;
                  this.sequence2 = sequence2;
                  this.match_score = match_score;
                  this.mismatch_penalty = mismatch_penalty;
                  this.gap_penalty = gap_penalty;
                  this.iMax = sequence1.length + 1;
                  this.jMax = sequence2.length + 1;
                  this.grid = new Array(this.iMax);
                  for (var i2 = 0; i2 < this.iMax; i2++) {
                    this.grid[i2] = new Array(this.jMax);
                    for (var j3 = 0; j3 < this.jMax; j3++) {
                      this.grid[i2][j3] = 0;
                    }
                  }
                  this.tracebackGrid = new Array(this.iMax);
                  for (var _i = 0; _i < this.iMax; _i++) {
                    this.tracebackGrid[_i] = new Array(this.jMax);
                    for (var _j = 0; _j < this.jMax; _j++) {
                      this.tracebackGrid[_i][_j] = [null, null, null];
                    }
                  }
                  this.alignments = [];
                  this.score = -1;
                  this.computeGrids();
                }
                __name(NeedlemanWunsch2, "NeedlemanWunsch");
                _createClass2(NeedlemanWunsch2, [{
                  key: "getScore",
                  value: /* @__PURE__ */ __name(function getScore() {
                    return this.score;
                  }, "getScore")
                }, {
                  key: "getAlignments",
                  value: /* @__PURE__ */ __name(function getAlignments2() {
                    return this.alignments;
                  }, "getAlignments")
                  // Main dynamic programming procedure
                }, {
                  key: "computeGrids",
                  value: /* @__PURE__ */ __name(function computeGrids() {
                    for (var j3 = 1; j3 < this.jMax; j3++) {
                      this.grid[0][j3] = this.grid[0][j3 - 1] + this.gap_penalty;
                      this.tracebackGrid[0][j3] = [false, false, true];
                    }
                    for (var i2 = 1; i2 < this.iMax; i2++) {
                      this.grid[i2][0] = this.grid[i2 - 1][0] + this.gap_penalty;
                      this.tracebackGrid[i2][0] = [false, true, false];
                    }
                    for (var _i2 = 1; _i2 < this.iMax; _i2++) {
                      for (var _j2 = 1; _j2 < this.jMax; _j2++) {
                        var diag = void 0;
                        if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;
                        else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;
                        var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;
                        var left3 = this.grid[_i2][_j2 - 1] + this.gap_penalty;
                        var maxOf = [diag, up, left3];
                        var indices = this.arrayAllMaxIndexes(maxOf);
                        this.grid[_i2][_j2] = maxOf[indices[0]];
                        this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];
                      }
                    }
                    this.score = this.grid[this.iMax - 1][this.jMax - 1];
                  }, "computeGrids")
                  // Gets all possible valid sequence combinations
                }, {
                  key: "alignmentTraceback",
                  value: /* @__PURE__ */ __name(function alignmentTraceback() {
                    var inProcessAlignments = [];
                    inProcessAlignments.push({
                      pos: [this.sequence1.length, this.sequence2.length],
                      seq1: "",
                      seq2: ""
                    });
                    while (inProcessAlignments[0]) {
                      var current = inProcessAlignments[0];
                      var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];
                      if (directions[0]) {
                        inProcessAlignments.push({
                          pos: [current.pos[0] - 1, current.pos[1] - 1],
                          seq1: this.sequence1[current.pos[0] - 1] + current.seq1,
                          seq2: this.sequence2[current.pos[1] - 1] + current.seq2
                        });
                      }
                      if (directions[1]) {
                        inProcessAlignments.push({
                          pos: [current.pos[0] - 1, current.pos[1]],
                          seq1: this.sequence1[current.pos[0] - 1] + current.seq1,
                          seq2: "-" + current.seq2
                        });
                      }
                      if (directions[2]) {
                        inProcessAlignments.push({
                          pos: [current.pos[0], current.pos[1] - 1],
                          seq1: "-" + current.seq1,
                          seq2: this.sequence2[current.pos[1] - 1] + current.seq2
                        });
                      }
                      if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({
                        sequence1: current.seq1,
                        sequence2: current.seq2
                      });
                      inProcessAlignments.shift();
                    }
                    return this.alignments;
                  }, "alignmentTraceback")
                  // Helper Functions
                }, {
                  key: "getAllIndexes",
                  value: /* @__PURE__ */ __name(function getAllIndexes(arr, val) {
                    var indexes = [], i2 = -1;
                    while ((i2 = arr.indexOf(val, i2 + 1)) !== -1) {
                      indexes.push(i2);
                    }
                    return indexes;
                  }, "getAllIndexes")
                }, {
                  key: "arrayAllMaxIndexes",
                  value: /* @__PURE__ */ __name(function arrayAllMaxIndexes(array4) {
                    return this.getAllIndexes(array4, Math.max.apply(null, array4));
                  }, "arrayAllMaxIndexes")
                }]);
                return NeedlemanWunsch2;
              })();
              module3.exports = NeedlemanWunsch;
            }),
            /* 28 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              var layoutBase = /* @__PURE__ */ __name(function layoutBase2() {
                return;
              }, "layoutBase");
              layoutBase.FDLayout = __webpack_require__(18);
              layoutBase.FDLayoutConstants = __webpack_require__(4);
              layoutBase.FDLayoutEdge = __webpack_require__(19);
              layoutBase.FDLayoutNode = __webpack_require__(20);
              layoutBase.DimensionD = __webpack_require__(21);
              layoutBase.HashMap = __webpack_require__(22);
              layoutBase.HashSet = __webpack_require__(23);
              layoutBase.IGeometry = __webpack_require__(8);
              layoutBase.IMath = __webpack_require__(9);
              layoutBase.Integer = __webpack_require__(10);
              layoutBase.Point = __webpack_require__(12);
              layoutBase.PointD = __webpack_require__(5);
              layoutBase.RandomSeed = __webpack_require__(16);
              layoutBase.RectangleD = __webpack_require__(13);
              layoutBase.Transform = __webpack_require__(17);
              layoutBase.UniqueIDGeneretor = __webpack_require__(14);
              layoutBase.Quicksort = __webpack_require__(25);
              layoutBase.LinkedList = __webpack_require__(11);
              layoutBase.LGraphObject = __webpack_require__(2);
              layoutBase.LGraph = __webpack_require__(6);
              layoutBase.LEdge = __webpack_require__(1);
              layoutBase.LGraphManager = __webpack_require__(7);
              layoutBase.LNode = __webpack_require__(3);
              layoutBase.Layout = __webpack_require__(15);
              layoutBase.LayoutConstants = __webpack_require__(0);
              layoutBase.NeedlemanWunsch = __webpack_require__(27);
              layoutBase.Matrix = __webpack_require__(24);
              layoutBase.SVD = __webpack_require__(26);
              module3.exports = layoutBase;
            }),
            /* 29 */
            /***/
            (function(module3, exports3, __webpack_require__) {
              "use strict";
              function Emitter2() {
                this.listeners = [];
              }
              __name(Emitter2, "Emitter");
              var p3 = Emitter2.prototype;
              p3.addListener = function(event3, callback) {
                this.listeners.push({
                  event: event3,
                  callback
                });
              };
              p3.removeListener = function(event3, callback) {
                for (var i2 = this.listeners.length; i2 >= 0; i2--) {
                  var l4 = this.listeners[i2];
                  if (l4.event === event3 && l4.callback === callback) {
                    this.listeners.splice(i2, 1);
                  }
                }
              };
              p3.emit = function(event3, data6) {
                for (var i2 = 0; i2 < this.listeners.length; i2++) {
                  var l4 = this.listeners[i2];
                  if (event3 === l4.event) {
                    l4.callback(data6);
                  }
                }
              };
              module3.exports = Emitter2;
            })
            /******/
          ])
        );
      });
    }
  });

  // ../../node_modules/.pnpm/cose-base@2.2.0/node_modules/cose-base/cose-base.js
  var require_cose_base2 = __commonJS({
    "../../node_modules/.pnpm/cose-base@2.2.0/node_modules/cose-base/cose-base.js"(exports2, module2) {
      "use strict";
      (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root4, factory) {
        if (typeof exports2 === "object" && typeof module2 === "object")
          module2.exports = factory(require_layout_base2());
        else if (typeof define === "function" && define.amd)
          define(["layout-base"], factory);
        else if (typeof exports2 === "object")
          exports2["coseBase"] = factory(require_layout_base2());
        else
          root4["coseBase"] = factory(root4["layoutBase"]);
      }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE__551__) {
        return (
          /******/
          (() => {
            "use strict";
            var __webpack_modules__ = {
              /***/
              45: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var coseBase = {};
                  coseBase.layoutBase = __webpack_require__2(551);
                  coseBase.CoSEConstants = __webpack_require__2(806);
                  coseBase.CoSEEdge = __webpack_require__2(767);
                  coseBase.CoSEGraph = __webpack_require__2(880);
                  coseBase.CoSEGraphManager = __webpack_require__2(578);
                  coseBase.CoSELayout = __webpack_require__2(765);
                  coseBase.CoSENode = __webpack_require__2(991);
                  coseBase.ConstraintHandler = __webpack_require__2(902);
                  module3.exports = coseBase;
                })
              ),
              /***/
              806: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var FDLayoutConstants = __webpack_require__2(551).FDLayoutConstants;
                  function CoSEConstants() {
                  }
                  __name(CoSEConstants, "CoSEConstants");
                  for (var prop in FDLayoutConstants) {
                    CoSEConstants[prop] = FDLayoutConstants[prop];
                  }
                  CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;
                  CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;
                  CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;
                  CoSEConstants.TILE = true;
                  CoSEConstants.TILING_PADDING_VERTICAL = 10;
                  CoSEConstants.TILING_PADDING_HORIZONTAL = 10;
                  CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;
                  CoSEConstants.ENFORCE_CONSTRAINTS = true;
                  CoSEConstants.APPLY_LAYOUT = true;
                  CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS = true;
                  CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true;
                  CoSEConstants.PURE_INCREMENTAL = CoSEConstants.DEFAULT_INCREMENTAL;
                  module3.exports = CoSEConstants;
                })
              ),
              /***/
              767: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var FDLayoutEdge = __webpack_require__2(551).FDLayoutEdge;
                  function CoSEEdge(source, target, vEdge) {
                    FDLayoutEdge.call(this, source, target, vEdge);
                  }
                  __name(CoSEEdge, "CoSEEdge");
                  CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);
                  for (var prop in FDLayoutEdge) {
                    CoSEEdge[prop] = FDLayoutEdge[prop];
                  }
                  module3.exports = CoSEEdge;
                })
              ),
              /***/
              880: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var LGraph = __webpack_require__2(551).LGraph;
                  function CoSEGraph(parent4, graphMgr, vGraph) {
                    LGraph.call(this, parent4, graphMgr, vGraph);
                  }
                  __name(CoSEGraph, "CoSEGraph");
                  CoSEGraph.prototype = Object.create(LGraph.prototype);
                  for (var prop in LGraph) {
                    CoSEGraph[prop] = LGraph[prop];
                  }
                  module3.exports = CoSEGraph;
                })
              ),
              /***/
              578: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var LGraphManager = __webpack_require__2(551).LGraphManager;
                  function CoSEGraphManager(layout7) {
                    LGraphManager.call(this, layout7);
                  }
                  __name(CoSEGraphManager, "CoSEGraphManager");
                  CoSEGraphManager.prototype = Object.create(LGraphManager.prototype);
                  for (var prop in LGraphManager) {
                    CoSEGraphManager[prop] = LGraphManager[prop];
                  }
                  module3.exports = CoSEGraphManager;
                })
              ),
              /***/
              765: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var FDLayout = __webpack_require__2(551).FDLayout;
                  var CoSEGraphManager = __webpack_require__2(578);
                  var CoSEGraph = __webpack_require__2(880);
                  var CoSENode = __webpack_require__2(991);
                  var CoSEEdge = __webpack_require__2(767);
                  var CoSEConstants = __webpack_require__2(806);
                  var ConstraintHandler = __webpack_require__2(902);
                  var FDLayoutConstants = __webpack_require__2(551).FDLayoutConstants;
                  var LayoutConstants = __webpack_require__2(551).LayoutConstants;
                  var Point3 = __webpack_require__2(551).Point;
                  var PointD = __webpack_require__2(551).PointD;
                  var DimensionD2 = __webpack_require__2(551).DimensionD;
                  var Layout2 = __webpack_require__2(551).Layout;
                  var Integer = __webpack_require__2(551).Integer;
                  var IGeometry = __webpack_require__2(551).IGeometry;
                  var LGraph = __webpack_require__2(551).LGraph;
                  var Transform2 = __webpack_require__2(551).Transform;
                  var LinkedList = __webpack_require__2(551).LinkedList;
                  function CoSELayout() {
                    FDLayout.call(this);
                    this.toBeTiled = {};
                    this.constraints = {};
                  }
                  __name(CoSELayout, "CoSELayout");
                  CoSELayout.prototype = Object.create(FDLayout.prototype);
                  for (var prop in FDLayout) {
                    CoSELayout[prop] = FDLayout[prop];
                  }
                  CoSELayout.prototype.newGraphManager = function() {
                    var gm = new CoSEGraphManager(this);
                    this.graphManager = gm;
                    return gm;
                  };
                  CoSELayout.prototype.newGraph = function(vGraph) {
                    return new CoSEGraph(null, this.graphManager, vGraph);
                  };
                  CoSELayout.prototype.newNode = function(vNode) {
                    return new CoSENode(this.graphManager, vNode);
                  };
                  CoSELayout.prototype.newEdge = function(vEdge) {
                    return new CoSEEdge(null, null, vEdge);
                  };
                  CoSELayout.prototype.initParameters = function() {
                    FDLayout.prototype.initParameters.call(this, arguments);
                    if (!this.isSubLayout) {
                      if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {
                        this.idealEdgeLength = 10;
                      } else {
                        this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;
                      }
                      this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;
                      this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;
                      this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;
                      this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;
                      this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;
                      this.prunedNodesAll = [];
                      this.growTreeIterations = 0;
                      this.afterGrowthIterations = 0;
                      this.isTreeGrowing = false;
                      this.isGrowthFinished = false;
                    }
                  };
                  CoSELayout.prototype.initSpringEmbedder = function() {
                    FDLayout.prototype.initSpringEmbedder.call(this);
                    this.coolingCycle = 0;
                    this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;
                    this.finalTemperature = 0.04;
                    this.coolingAdjuster = 1;
                  };
                  CoSELayout.prototype.layout = function() {
                    var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;
                    if (createBendsAsNeeded) {
                      this.createBendpoints();
                      this.graphManager.resetAllEdges();
                    }
                    this.level = 0;
                    return this.classicLayout();
                  };
                  CoSELayout.prototype.classicLayout = function() {
                    this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();
                    this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);
                    this.calcNoOfChildrenForAllNodes();
                    this.graphManager.calcLowestCommonAncestors();
                    this.graphManager.calcInclusionTreeDepths();
                    this.graphManager.getRoot().calcEstimatedSize();
                    this.calcIdealEdgeLengths();
                    if (!this.incremental) {
                      var forest = this.getFlatForest();
                      if (forest.length > 0) {
                        this.positionNodesRadially(forest);
                      } else {
                        this.reduceTrees();
                        this.graphManager.resetAllNodesToApplyGravitation();
                        var allNodes = new Set(this.getAllNodes());
                        var intersection4 = this.nodesWithGravity.filter(function(x5) {
                          return allNodes.has(x5);
                        });
                        this.graphManager.setAllNodesToApplyGravitation(intersection4);
                        this.positionNodesRandomly();
                      }
                    } else {
                      if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {
                        this.reduceTrees();
                        this.graphManager.resetAllNodesToApplyGravitation();
                        var allNodes = new Set(this.getAllNodes());
                        var intersection4 = this.nodesWithGravity.filter(function(x5) {
                          return allNodes.has(x5);
                        });
                        this.graphManager.setAllNodesToApplyGravitation(intersection4);
                      }
                    }
                    if (Object.keys(this.constraints).length > 0) {
                      ConstraintHandler.handleConstraints(this);
                      this.initConstraintVariables();
                    }
                    this.initSpringEmbedder();
                    if (CoSEConstants.APPLY_LAYOUT) {
                      this.runSpringEmbedder();
                    }
                    return true;
                  };
                  CoSELayout.prototype.tick = function() {
                    this.totalIterations++;
                    if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {
                      if (this.prunedNodesAll.length > 0) {
                        this.isTreeGrowing = true;
                      } else {
                        return true;
                      }
                    }
                    if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {
                      if (this.isConverged()) {
                        if (this.prunedNodesAll.length > 0) {
                          this.isTreeGrowing = true;
                        } else {
                          return true;
                        }
                      }
                      this.coolingCycle++;
                      if (this.layoutQuality == 0) {
                        this.coolingAdjuster = this.coolingCycle;
                      } else if (this.layoutQuality == 1) {
                        this.coolingAdjuster = this.coolingCycle / 3;
                      }
                      this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);
                      this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));
                    }
                    if (this.isTreeGrowing) {
                      if (this.growTreeIterations % 10 == 0) {
                        if (this.prunedNodesAll.length > 0) {
                          this.graphManager.updateBounds();
                          this.updateGrid();
                          this.growTree(this.prunedNodesAll);
                          this.graphManager.resetAllNodesToApplyGravitation();
                          var allNodes = new Set(this.getAllNodes());
                          var intersection4 = this.nodesWithGravity.filter(function(x5) {
                            return allNodes.has(x5);
                          });
                          this.graphManager.setAllNodesToApplyGravitation(intersection4);
                          this.graphManager.updateBounds();
                          this.updateGrid();
                          if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2;
                          else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;
                        } else {
                          this.isTreeGrowing = false;
                          this.isGrowthFinished = true;
                        }
                      }
                      this.growTreeIterations++;
                    }
                    if (this.isGrowthFinished) {
                      if (this.isConverged()) {
                        return true;
                      }
                      if (this.afterGrowthIterations % 10 == 0) {
                        this.graphManager.updateBounds();
                        this.updateGrid();
                      }
                      if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2 * ((100 - this.afterGrowthIterations) / 100);
                      else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);
                      this.afterGrowthIterations++;
                    }
                    var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;
                    var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;
                    this.totalDisplacement = 0;
                    this.graphManager.updateBounds();
                    this.calcSpringForces();
                    this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);
                    this.calcGravitationalForces();
                    this.moveNodes();
                    this.animate();
                    return false;
                  };
                  CoSELayout.prototype.getPositionsData = function() {
                    var allNodes = this.graphManager.getAllNodes();
                    var pData = {};
                    for (var i2 = 0; i2 < allNodes.length; i2++) {
                      var rect3 = allNodes[i2].rect;
                      var id41 = allNodes[i2].id;
                      pData[id41] = {
                        id: id41,
                        x: rect3.getCenterX(),
                        y: rect3.getCenterY(),
                        w: rect3.width,
                        h: rect3.height
                      };
                    }
                    return pData;
                  };
                  CoSELayout.prototype.runSpringEmbedder = function() {
                    this.initialAnimationPeriod = 25;
                    this.animationPeriod = this.initialAnimationPeriod;
                    var layoutEnded = false;
                    if (FDLayoutConstants.ANIMATE === "during") {
                      this.emit("layoutstarted");
                    } else {
                      while (!layoutEnded) {
                        layoutEnded = this.tick();
                      }
                      this.graphManager.updateBounds();
                    }
                  };
                  CoSELayout.prototype.moveNodes = function() {
                    var lNodes = this.getAllNodes();
                    var node2;
                    for (var i2 = 0; i2 < lNodes.length; i2++) {
                      node2 = lNodes[i2];
                      node2.calculateDisplacement();
                    }
                    if (Object.keys(this.constraints).length > 0) {
                      this.updateDisplacements();
                    }
                    for (var i2 = 0; i2 < lNodes.length; i2++) {
                      node2 = lNodes[i2];
                      node2.move();
                    }
                  };
                  CoSELayout.prototype.initConstraintVariables = function() {
                    var self2 = this;
                    this.idToNodeMap = /* @__PURE__ */ new Map();
                    this.fixedNodeSet = /* @__PURE__ */ new Set();
                    var allNodes = this.graphManager.getAllNodes();
                    for (var i2 = 0; i2 < allNodes.length; i2++) {
                      var node2 = allNodes[i2];
                      this.idToNodeMap.set(node2.id, node2);
                    }
                    var calculateCompoundWeight = /* @__PURE__ */ __name(function calculateCompoundWeight2(compoundNode) {
                      var nodes5 = compoundNode.getChild().getNodes();
                      var node3;
                      var fixedNodeWeight2 = 0;
                      for (var i3 = 0; i3 < nodes5.length; i3++) {
                        node3 = nodes5[i3];
                        if (node3.getChild() == null) {
                          if (self2.fixedNodeSet.has(node3.id)) {
                            fixedNodeWeight2 += 100;
                          }
                        } else {
                          fixedNodeWeight2 += calculateCompoundWeight2(node3);
                        }
                      }
                      return fixedNodeWeight2;
                    }, "calculateCompoundWeight");
                    if (this.constraints.fixedNodeConstraint) {
                      this.constraints.fixedNodeConstraint.forEach(function(nodeData2) {
                        self2.fixedNodeSet.add(nodeData2.nodeId);
                      });
                      var allNodes = this.graphManager.getAllNodes();
                      var node2;
                      for (var i2 = 0; i2 < allNodes.length; i2++) {
                        node2 = allNodes[i2];
                        if (node2.getChild() != null) {
                          var fixedNodeWeight = calculateCompoundWeight(node2);
                          if (fixedNodeWeight > 0) {
                            node2.fixedNodeWeight = fixedNodeWeight;
                          }
                        }
                      }
                    }
                    if (this.constraints.relativePlacementConstraint) {
                      var nodeToDummyForVerticalAlignment = /* @__PURE__ */ new Map();
                      var nodeToDummyForHorizontalAlignment = /* @__PURE__ */ new Map();
                      this.dummyToNodeForVerticalAlignment = /* @__PURE__ */ new Map();
                      this.dummyToNodeForHorizontalAlignment = /* @__PURE__ */ new Map();
                      this.fixedNodesOnHorizontal = /* @__PURE__ */ new Set();
                      this.fixedNodesOnVertical = /* @__PURE__ */ new Set();
                      this.fixedNodeSet.forEach(function(nodeId) {
                        self2.fixedNodesOnHorizontal.add(nodeId);
                        self2.fixedNodesOnVertical.add(nodeId);
                      });
                      if (this.constraints.alignmentConstraint) {
                        if (this.constraints.alignmentConstraint.vertical) {
                          var verticalAlignment2 = this.constraints.alignmentConstraint.vertical;
                          for (var i2 = 0; i2 < verticalAlignment2.length; i2++) {
                            this.dummyToNodeForVerticalAlignment.set("dummy" + i2, []);
                            verticalAlignment2[i2].forEach(function(nodeId) {
                              nodeToDummyForVerticalAlignment.set(nodeId, "dummy" + i2);
                              self2.dummyToNodeForVerticalAlignment.get("dummy" + i2).push(nodeId);
                              if (self2.fixedNodeSet.has(nodeId)) {
                                self2.fixedNodesOnHorizontal.add("dummy" + i2);
                              }
                            });
                          }
                        }
                        if (this.constraints.alignmentConstraint.horizontal) {
                          var horizontalAlignment = this.constraints.alignmentConstraint.horizontal;
                          for (var i2 = 0; i2 < horizontalAlignment.length; i2++) {
                            this.dummyToNodeForHorizontalAlignment.set("dummy" + i2, []);
                            horizontalAlignment[i2].forEach(function(nodeId) {
                              nodeToDummyForHorizontalAlignment.set(nodeId, "dummy" + i2);
                              self2.dummyToNodeForHorizontalAlignment.get("dummy" + i2).push(nodeId);
                              if (self2.fixedNodeSet.has(nodeId)) {
                                self2.fixedNodesOnVertical.add("dummy" + i2);
                              }
                            });
                          }
                        }
                      }
                      if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {
                        this.shuffle = function(array4) {
                          var j3, x5, i3;
                          for (i3 = array4.length - 1; i3 >= 2 * array4.length / 3; i3--) {
                            j3 = Math.floor(Math.random() * (i3 + 1));
                            x5 = array4[i3];
                            array4[i3] = array4[j3];
                            array4[j3] = x5;
                          }
                          return array4;
                        };
                        this.nodesInRelativeHorizontal = [];
                        this.nodesInRelativeVertical = [];
                        this.nodeToRelativeConstraintMapHorizontal = /* @__PURE__ */ new Map();
                        this.nodeToRelativeConstraintMapVertical = /* @__PURE__ */ new Map();
                        this.nodeToTempPositionMapHorizontal = /* @__PURE__ */ new Map();
                        this.nodeToTempPositionMapVertical = /* @__PURE__ */ new Map();
                        this.constraints.relativePlacementConstraint.forEach(function(constraint) {
                          if (constraint.left) {
                            var nodeIdLeft = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;
                            var nodeIdRight = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;
                            if (!self2.nodesInRelativeHorizontal.includes(nodeIdLeft)) {
                              self2.nodesInRelativeHorizontal.push(nodeIdLeft);
                              self2.nodeToRelativeConstraintMapHorizontal.set(nodeIdLeft, []);
                              if (self2.dummyToNodeForVerticalAlignment.has(nodeIdLeft)) {
                                self2.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self2.idToNodeMap.get(self2.dummyToNodeForVerticalAlignment.get(nodeIdLeft)[0]).getCenterX());
                              } else {
                                self2.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self2.idToNodeMap.get(nodeIdLeft).getCenterX());
                              }
                            }
                            if (!self2.nodesInRelativeHorizontal.includes(nodeIdRight)) {
                              self2.nodesInRelativeHorizontal.push(nodeIdRight);
                              self2.nodeToRelativeConstraintMapHorizontal.set(nodeIdRight, []);
                              if (self2.dummyToNodeForVerticalAlignment.has(nodeIdRight)) {
                                self2.nodeToTempPositionMapHorizontal.set(nodeIdRight, self2.idToNodeMap.get(self2.dummyToNodeForVerticalAlignment.get(nodeIdRight)[0]).getCenterX());
                              } else {
                                self2.nodeToTempPositionMapHorizontal.set(nodeIdRight, self2.idToNodeMap.get(nodeIdRight).getCenterX());
                              }
                            }
                            self2.nodeToRelativeConstraintMapHorizontal.get(nodeIdLeft).push({ right: nodeIdRight, gap: constraint.gap });
                            self2.nodeToRelativeConstraintMapHorizontal.get(nodeIdRight).push({ left: nodeIdLeft, gap: constraint.gap });
                          } else {
                            var nodeIdTop = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;
                            var nodeIdBottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;
                            if (!self2.nodesInRelativeVertical.includes(nodeIdTop)) {
                              self2.nodesInRelativeVertical.push(nodeIdTop);
                              self2.nodeToRelativeConstraintMapVertical.set(nodeIdTop, []);
                              if (self2.dummyToNodeForHorizontalAlignment.has(nodeIdTop)) {
                                self2.nodeToTempPositionMapVertical.set(nodeIdTop, self2.idToNodeMap.get(self2.dummyToNodeForHorizontalAlignment.get(nodeIdTop)[0]).getCenterY());
                              } else {
                                self2.nodeToTempPositionMapVertical.set(nodeIdTop, self2.idToNodeMap.get(nodeIdTop).getCenterY());
                              }
                            }
                            if (!self2.nodesInRelativeVertical.includes(nodeIdBottom)) {
                              self2.nodesInRelativeVertical.push(nodeIdBottom);
                              self2.nodeToRelativeConstraintMapVertical.set(nodeIdBottom, []);
                              if (self2.dummyToNodeForHorizontalAlignment.has(nodeIdBottom)) {
                                self2.nodeToTempPositionMapVertical.set(nodeIdBottom, self2.idToNodeMap.get(self2.dummyToNodeForHorizontalAlignment.get(nodeIdBottom)[0]).getCenterY());
                              } else {
                                self2.nodeToTempPositionMapVertical.set(nodeIdBottom, self2.idToNodeMap.get(nodeIdBottom).getCenterY());
                              }
                            }
                            self2.nodeToRelativeConstraintMapVertical.get(nodeIdTop).push({ bottom: nodeIdBottom, gap: constraint.gap });
                            self2.nodeToRelativeConstraintMapVertical.get(nodeIdBottom).push({ top: nodeIdTop, gap: constraint.gap });
                          }
                        });
                      } else {
                        var subGraphOnHorizontal = /* @__PURE__ */ new Map();
                        var subGraphOnVertical = /* @__PURE__ */ new Map();
                        this.constraints.relativePlacementConstraint.forEach(function(constraint) {
                          if (constraint.left) {
                            var left3 = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;
                            var right3 = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;
                            if (subGraphOnHorizontal.has(left3)) {
                              subGraphOnHorizontal.get(left3).push(right3);
                            } else {
                              subGraphOnHorizontal.set(left3, [right3]);
                            }
                            if (subGraphOnHorizontal.has(right3)) {
                              subGraphOnHorizontal.get(right3).push(left3);
                            } else {
                              subGraphOnHorizontal.set(right3, [left3]);
                            }
                          } else {
                            var top2 = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;
                            var bottom2 = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;
                            if (subGraphOnVertical.has(top2)) {
                              subGraphOnVertical.get(top2).push(bottom2);
                            } else {
                              subGraphOnVertical.set(top2, [bottom2]);
                            }
                            if (subGraphOnVertical.has(bottom2)) {
                              subGraphOnVertical.get(bottom2).push(top2);
                            } else {
                              subGraphOnVertical.set(bottom2, [top2]);
                            }
                          }
                        });
                        var constructComponents = /* @__PURE__ */ __name(function constructComponents2(graph, fixedNodes) {
                          var components3 = [];
                          var isFixed = [];
                          var queue = new LinkedList();
                          var visited = /* @__PURE__ */ new Set();
                          var count2 = 0;
                          graph.forEach(function(value2, key) {
                            if (!visited.has(key)) {
                              components3[count2] = [];
                              isFixed[count2] = false;
                              var currentNode = key;
                              queue.push(currentNode);
                              visited.add(currentNode);
                              components3[count2].push(currentNode);
                              while (queue.length != 0) {
                                currentNode = queue.shift();
                                if (fixedNodes.has(currentNode)) {
                                  isFixed[count2] = true;
                                }
                                var neighbors = graph.get(currentNode);
                                neighbors.forEach(function(neighbor) {
                                  if (!visited.has(neighbor)) {
                                    queue.push(neighbor);
                                    visited.add(neighbor);
                                    components3[count2].push(neighbor);
                                  }
                                });
                              }
                              count2++;
                            }
                          });
                          return { components: components3, isFixed };
                        }, "constructComponents");
                        var resultOnHorizontal = constructComponents(subGraphOnHorizontal, self2.fixedNodesOnHorizontal);
                        this.componentsOnHorizontal = resultOnHorizontal.components;
                        this.fixedComponentsOnHorizontal = resultOnHorizontal.isFixed;
                        var resultOnVertical = constructComponents(subGraphOnVertical, self2.fixedNodesOnVertical);
                        this.componentsOnVertical = resultOnVertical.components;
                        this.fixedComponentsOnVertical = resultOnVertical.isFixed;
                      }
                    }
                  };
                  CoSELayout.prototype.updateDisplacements = function() {
                    var self2 = this;
                    if (this.constraints.fixedNodeConstraint) {
                      this.constraints.fixedNodeConstraint.forEach(function(nodeData2) {
                        var fixedNode = self2.idToNodeMap.get(nodeData2.nodeId);
                        fixedNode.displacementX = 0;
                        fixedNode.displacementY = 0;
                      });
                    }
                    if (this.constraints.alignmentConstraint) {
                      if (this.constraints.alignmentConstraint.vertical) {
                        var allVerticalAlignments = this.constraints.alignmentConstraint.vertical;
                        for (var i2 = 0; i2 < allVerticalAlignments.length; i2++) {
                          var totalDisplacementX = 0;
                          for (var j3 = 0; j3 < allVerticalAlignments[i2].length; j3++) {
                            if (this.fixedNodeSet.has(allVerticalAlignments[i2][j3])) {
                              totalDisplacementX = 0;
                              break;
                            }
                            totalDisplacementX += this.idToNodeMap.get(allVerticalAlignments[i2][j3]).displacementX;
                          }
                          var averageDisplacementX = totalDisplacementX / allVerticalAlignments[i2].length;
                          for (var j3 = 0; j3 < allVerticalAlignments[i2].length; j3++) {
                            this.idToNodeMap.get(allVerticalAlignments[i2][j3]).displacementX = averageDisplacementX;
                          }
                        }
                      }
                      if (this.constraints.alignmentConstraint.horizontal) {
                        var allHorizontalAlignments = this.constraints.alignmentConstraint.horizontal;
                        for (var i2 = 0; i2 < allHorizontalAlignments.length; i2++) {
                          var totalDisplacementY = 0;
                          for (var j3 = 0; j3 < allHorizontalAlignments[i2].length; j3++) {
                            if (this.fixedNodeSet.has(allHorizontalAlignments[i2][j3])) {
                              totalDisplacementY = 0;
                              break;
                            }
                            totalDisplacementY += this.idToNodeMap.get(allHorizontalAlignments[i2][j3]).displacementY;
                          }
                          var averageDisplacementY = totalDisplacementY / allHorizontalAlignments[i2].length;
                          for (var j3 = 0; j3 < allHorizontalAlignments[i2].length; j3++) {
                            this.idToNodeMap.get(allHorizontalAlignments[i2][j3]).displacementY = averageDisplacementY;
                          }
                        }
                      }
                    }
                    if (this.constraints.relativePlacementConstraint) {
                      if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {
                        if (this.totalIterations % 10 == 0) {
                          this.shuffle(this.nodesInRelativeHorizontal);
                          this.shuffle(this.nodesInRelativeVertical);
                        }
                        this.nodesInRelativeHorizontal.forEach(function(nodeId) {
                          if (!self2.fixedNodesOnHorizontal.has(nodeId)) {
                            var displacement = 0;
                            if (self2.dummyToNodeForVerticalAlignment.has(nodeId)) {
                              displacement = self2.idToNodeMap.get(self2.dummyToNodeForVerticalAlignment.get(nodeId)[0]).displacementX;
                            } else {
                              displacement = self2.idToNodeMap.get(nodeId).displacementX;
                            }
                            self2.nodeToRelativeConstraintMapHorizontal.get(nodeId).forEach(function(constraint) {
                              if (constraint.right) {
                                var diff2 = self2.nodeToTempPositionMapHorizontal.get(constraint.right) - self2.nodeToTempPositionMapHorizontal.get(nodeId) - displacement;
                                if (diff2 < constraint.gap) {
                                  displacement -= constraint.gap - diff2;
                                }
                              } else {
                                var diff2 = self2.nodeToTempPositionMapHorizontal.get(nodeId) - self2.nodeToTempPositionMapHorizontal.get(constraint.left) + displacement;
                                if (diff2 < constraint.gap) {
                                  displacement += constraint.gap - diff2;
                                }
                              }
                            });
                            self2.nodeToTempPositionMapHorizontal.set(nodeId, self2.nodeToTempPositionMapHorizontal.get(nodeId) + displacement);
                            if (self2.dummyToNodeForVerticalAlignment.has(nodeId)) {
                              self2.dummyToNodeForVerticalAlignment.get(nodeId).forEach(function(nodeId2) {
                                self2.idToNodeMap.get(nodeId2).displacementX = displacement;
                              });
                            } else {
                              self2.idToNodeMap.get(nodeId).displacementX = displacement;
                            }
                          }
                        });
                        this.nodesInRelativeVertical.forEach(function(nodeId) {
                          if (!self2.fixedNodesOnHorizontal.has(nodeId)) {
                            var displacement = 0;
                            if (self2.dummyToNodeForHorizontalAlignment.has(nodeId)) {
                              displacement = self2.idToNodeMap.get(self2.dummyToNodeForHorizontalAlignment.get(nodeId)[0]).displacementY;
                            } else {
                              displacement = self2.idToNodeMap.get(nodeId).displacementY;
                            }
                            self2.nodeToRelativeConstraintMapVertical.get(nodeId).forEach(function(constraint) {
                              if (constraint.bottom) {
                                var diff2 = self2.nodeToTempPositionMapVertical.get(constraint.bottom) - self2.nodeToTempPositionMapVertical.get(nodeId) - displacement;
                                if (diff2 < constraint.gap) {
                                  displacement -= constraint.gap - diff2;
                                }
                              } else {
                                var diff2 = self2.nodeToTempPositionMapVertical.get(nodeId) - self2.nodeToTempPositionMapVertical.get(constraint.top) + displacement;
                                if (diff2 < constraint.gap) {
                                  displacement += constraint.gap - diff2;
                                }
                              }
                            });
                            self2.nodeToTempPositionMapVertical.set(nodeId, self2.nodeToTempPositionMapVertical.get(nodeId) + displacement);
                            if (self2.dummyToNodeForHorizontalAlignment.has(nodeId)) {
                              self2.dummyToNodeForHorizontalAlignment.get(nodeId).forEach(function(nodeId2) {
                                self2.idToNodeMap.get(nodeId2).displacementY = displacement;
                              });
                            } else {
                              self2.idToNodeMap.get(nodeId).displacementY = displacement;
                            }
                          }
                        });
                      } else {
                        for (var i2 = 0; i2 < this.componentsOnHorizontal.length; i2++) {
                          var component2 = this.componentsOnHorizontal[i2];
                          if (this.fixedComponentsOnHorizontal[i2]) {
                            for (var j3 = 0; j3 < component2.length; j3++) {
                              if (this.dummyToNodeForVerticalAlignment.has(component2[j3])) {
                                this.dummyToNodeForVerticalAlignment.get(component2[j3]).forEach(function(nodeId) {
                                  self2.idToNodeMap.get(nodeId).displacementX = 0;
                                });
                              } else {
                                this.idToNodeMap.get(component2[j3]).displacementX = 0;
                              }
                            }
                          } else {
                            var sum2 = 0;
                            var count2 = 0;
                            for (var j3 = 0; j3 < component2.length; j3++) {
                              if (this.dummyToNodeForVerticalAlignment.has(component2[j3])) {
                                var actualNodes = this.dummyToNodeForVerticalAlignment.get(component2[j3]);
                                sum2 += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementX;
                                count2 += actualNodes.length;
                              } else {
                                sum2 += this.idToNodeMap.get(component2[j3]).displacementX;
                                count2++;
                              }
                            }
                            var averageDisplacement = sum2 / count2;
                            for (var j3 = 0; j3 < component2.length; j3++) {
                              if (this.dummyToNodeForVerticalAlignment.has(component2[j3])) {
                                this.dummyToNodeForVerticalAlignment.get(component2[j3]).forEach(function(nodeId) {
                                  self2.idToNodeMap.get(nodeId).displacementX = averageDisplacement;
                                });
                              } else {
                                this.idToNodeMap.get(component2[j3]).displacementX = averageDisplacement;
                              }
                            }
                          }
                        }
                        for (var i2 = 0; i2 < this.componentsOnVertical.length; i2++) {
                          var component2 = this.componentsOnVertical[i2];
                          if (this.fixedComponentsOnVertical[i2]) {
                            for (var j3 = 0; j3 < component2.length; j3++) {
                              if (this.dummyToNodeForHorizontalAlignment.has(component2[j3])) {
                                this.dummyToNodeForHorizontalAlignment.get(component2[j3]).forEach(function(nodeId) {
                                  self2.idToNodeMap.get(nodeId).displacementY = 0;
                                });
                              } else {
                                this.idToNodeMap.get(component2[j3]).displacementY = 0;
                              }
                            }
                          } else {
                            var sum2 = 0;
                            var count2 = 0;
                            for (var j3 = 0; j3 < component2.length; j3++) {
                              if (this.dummyToNodeForHorizontalAlignment.has(component2[j3])) {
                                var actualNodes = this.dummyToNodeForHorizontalAlignment.get(component2[j3]);
                                sum2 += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementY;
                                count2 += actualNodes.length;
                              } else {
                                sum2 += this.idToNodeMap.get(component2[j3]).displacementY;
                                count2++;
                              }
                            }
                            var averageDisplacement = sum2 / count2;
                            for (var j3 = 0; j3 < component2.length; j3++) {
                              if (this.dummyToNodeForHorizontalAlignment.has(component2[j3])) {
                                this.dummyToNodeForHorizontalAlignment.get(component2[j3]).forEach(function(nodeId) {
                                  self2.idToNodeMap.get(nodeId).displacementY = averageDisplacement;
                                });
                              } else {
                                this.idToNodeMap.get(component2[j3]).displacementY = averageDisplacement;
                              }
                            }
                          }
                        }
                      }
                    }
                  };
                  CoSELayout.prototype.calculateNodesToApplyGravitationTo = function() {
                    var nodeList = [];
                    var graph;
                    var graphs = this.graphManager.getGraphs();
                    var size4 = graphs.length;
                    var i2;
                    for (i2 = 0; i2 < size4; i2++) {
                      graph = graphs[i2];
                      graph.updateConnected();
                      if (!graph.isConnected) {
                        nodeList = nodeList.concat(graph.getNodes());
                      }
                    }
                    return nodeList;
                  };
                  CoSELayout.prototype.createBendpoints = function() {
                    var edges3 = [];
                    edges3 = edges3.concat(this.graphManager.getAllEdges());
                    var visited = /* @__PURE__ */ new Set();
                    var i2;
                    for (i2 = 0; i2 < edges3.length; i2++) {
                      var edge = edges3[i2];
                      if (!visited.has(edge)) {
                        var source = edge.getSource();
                        var target = edge.getTarget();
                        if (source == target) {
                          edge.getBendpoints().push(new PointD());
                          edge.getBendpoints().push(new PointD());
                          this.createDummyNodesForBendpoints(edge);
                          visited.add(edge);
                        } else {
                          var edgeList2 = [];
                          edgeList2 = edgeList2.concat(source.getEdgeListToNode(target));
                          edgeList2 = edgeList2.concat(target.getEdgeListToNode(source));
                          if (!visited.has(edgeList2[0])) {
                            if (edgeList2.length > 1) {
                              var k2;
                              for (k2 = 0; k2 < edgeList2.length; k2++) {
                                var multiEdge = edgeList2[k2];
                                multiEdge.getBendpoints().push(new PointD());
                                this.createDummyNodesForBendpoints(multiEdge);
                              }
                            }
                            edgeList2.forEach(function(edge2) {
                              visited.add(edge2);
                            });
                          }
                        }
                      }
                      if (visited.size == edges3.length) {
                        break;
                      }
                    }
                  };
                  CoSELayout.prototype.positionNodesRadially = function(forest) {
                    var currentStartingPoint = new Point3(0, 0);
                    var numberOfColumns = Math.ceil(Math.sqrt(forest.length));
                    var height2 = 0;
                    var currentY = 0;
                    var currentX = 0;
                    var point8 = new PointD(0, 0);
                    for (var i2 = 0; i2 < forest.length; i2++) {
                      if (i2 % numberOfColumns == 0) {
                        currentX = 0;
                        currentY = height2;
                        if (i2 != 0) {
                          currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;
                        }
                        height2 = 0;
                      }
                      var tree = forest[i2];
                      var centerNode = Layout2.findCenterOfTree(tree);
                      currentStartingPoint.x = currentX;
                      currentStartingPoint.y = currentY;
                      point8 = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);
                      if (point8.y > height2) {
                        height2 = Math.floor(point8.y);
                      }
                      currentX = Math.floor(point8.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);
                    }
                    this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point8.x / 2, LayoutConstants.WORLD_CENTER_Y - point8.y / 2));
                  };
                  CoSELayout.radialLayout = function(tree, centerNode, startingPoint) {
                    var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);
                    CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);
                    var bounds4 = LGraph.calculateBounds(tree);
                    var transform8 = new Transform2();
                    transform8.setDeviceOrgX(bounds4.getMinX());
                    transform8.setDeviceOrgY(bounds4.getMinY());
                    transform8.setWorldOrgX(startingPoint.x);
                    transform8.setWorldOrgY(startingPoint.y);
                    for (var i2 = 0; i2 < tree.length; i2++) {
                      var node2 = tree[i2];
                      node2.transform(transform8);
                    }
                    var bottomRight = new PointD(bounds4.getMaxX(), bounds4.getMaxY());
                    return transform8.inverseTransformPoint(bottomRight);
                  };
                  CoSELayout.branchRadialLayout = function(node2, parentOfNode, startAngle, endAngle, distance3, radialSeparation) {
                    var halfInterval = (endAngle - startAngle + 1) / 2;
                    if (halfInterval < 0) {
                      halfInterval += 180;
                    }
                    var nodeAngle = (halfInterval + startAngle) % 360;
                    var teta = nodeAngle * IGeometry.TWO_PI / 360;
                    var cos_teta = Math.cos(teta);
                    var x_ = distance3 * Math.cos(teta);
                    var y_ = distance3 * Math.sin(teta);
                    node2.setCenter(x_, y_);
                    var neighborEdges = [];
                    neighborEdges = neighborEdges.concat(node2.getEdges());
                    var childCount = neighborEdges.length;
                    if (parentOfNode != null) {
                      childCount--;
                    }
                    var branchCount = 0;
                    var incEdgesCount = neighborEdges.length;
                    var startIndex;
                    var edges3 = node2.getEdgesBetween(parentOfNode);
                    while (edges3.length > 1) {
                      var temp = edges3[0];
                      edges3.splice(0, 1);
                      var index = neighborEdges.indexOf(temp);
                      if (index >= 0) {
                        neighborEdges.splice(index, 1);
                      }
                      incEdgesCount--;
                      childCount--;
                    }
                    if (parentOfNode != null) {
                      startIndex = (neighborEdges.indexOf(edges3[0]) + 1) % incEdgesCount;
                    } else {
                      startIndex = 0;
                    }
                    var stepAngle = Math.abs(endAngle - startAngle) / childCount;
                    for (var i2 = startIndex; branchCount != childCount; i2 = ++i2 % incEdgesCount) {
                      var currentNeighbor = neighborEdges[i2].getOtherEnd(node2);
                      if (currentNeighbor == parentOfNode) {
                        continue;
                      }
                      var childStartAngle = (startAngle + branchCount * stepAngle) % 360;
                      var childEndAngle = (childStartAngle + stepAngle) % 360;
                      CoSELayout.branchRadialLayout(currentNeighbor, node2, childStartAngle, childEndAngle, distance3 + radialSeparation, radialSeparation);
                      branchCount++;
                    }
                  };
                  CoSELayout.maxDiagonalInTree = function(tree) {
                    var maxDiagonal = Integer.MIN_VALUE;
                    for (var i2 = 0; i2 < tree.length; i2++) {
                      var node2 = tree[i2];
                      var diagonal = node2.getDiagonal();
                      if (diagonal > maxDiagonal) {
                        maxDiagonal = diagonal;
                      }
                    }
                    return maxDiagonal;
                  };
                  CoSELayout.prototype.calcRepulsionRange = function() {
                    return 2 * (this.level + 1) * this.idealEdgeLength;
                  };
                  CoSELayout.prototype.groupZeroDegreeMembers = function() {
                    var self2 = this;
                    var tempMemberGroups = {};
                    this.memberGroups = {};
                    this.idToDummyNode = {};
                    var zeroDegree = [];
                    var allNodes = this.graphManager.getAllNodes();
                    for (var i2 = 0; i2 < allNodes.length; i2++) {
                      var node2 = allNodes[i2];
                      var parent4 = node2.getParent();
                      if (this.getNodeDegreeWithChildren(node2) === 0 && (parent4.id == void 0 || !this.getToBeTiled(parent4))) {
                        zeroDegree.push(node2);
                      }
                    }
                    for (var i2 = 0; i2 < zeroDegree.length; i2++) {
                      var node2 = zeroDegree[i2];
                      var p_id = node2.getParent().id;
                      if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = [];
                      tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node2);
                    }
                    Object.keys(tempMemberGroups).forEach(function(p_id2) {
                      if (tempMemberGroups[p_id2].length > 1) {
                        var dummyCompoundId = "DummyCompound_" + p_id2;
                        self2.memberGroups[dummyCompoundId] = tempMemberGroups[p_id2];
                        var parent5 = tempMemberGroups[p_id2][0].getParent();
                        var dummyCompound = new CoSENode(self2.graphManager);
                        dummyCompound.id = dummyCompoundId;
                        dummyCompound.paddingLeft = parent5.paddingLeft || 0;
                        dummyCompound.paddingRight = parent5.paddingRight || 0;
                        dummyCompound.paddingBottom = parent5.paddingBottom || 0;
                        dummyCompound.paddingTop = parent5.paddingTop || 0;
                        self2.idToDummyNode[dummyCompoundId] = dummyCompound;
                        var dummyParentGraph = self2.getGraphManager().add(self2.newGraph(), dummyCompound);
                        var parentGraph = parent5.getChild();
                        parentGraph.add(dummyCompound);
                        for (var i3 = 0; i3 < tempMemberGroups[p_id2].length; i3++) {
                          var node3 = tempMemberGroups[p_id2][i3];
                          parentGraph.remove(node3);
                          dummyParentGraph.add(node3);
                        }
                      }
                    });
                  };
                  CoSELayout.prototype.clearCompounds = function() {
                    var childGraphMap = {};
                    var idToNode = {};
                    this.performDFSOnCompounds();
                    for (var i2 = 0; i2 < this.compoundOrder.length; i2++) {
                      idToNode[this.compoundOrder[i2].id] = this.compoundOrder[i2];
                      childGraphMap[this.compoundOrder[i2].id] = [].concat(this.compoundOrder[i2].getChild().getNodes());
                      this.graphManager.remove(this.compoundOrder[i2].getChild());
                      this.compoundOrder[i2].child = null;
                    }
                    this.graphManager.resetAllNodes();
                    this.tileCompoundMembers(childGraphMap, idToNode);
                  };
                  CoSELayout.prototype.clearZeroDegreeMembers = function() {
                    var self2 = this;
                    var tiledZeroDegreePack = this.tiledZeroDegreePack = [];
                    Object.keys(this.memberGroups).forEach(function(id41) {
                      var compoundNode = self2.idToDummyNode[id41];
                      tiledZeroDegreePack[id41] = self2.tileNodes(self2.memberGroups[id41], compoundNode.paddingLeft + compoundNode.paddingRight);
                      compoundNode.rect.width = tiledZeroDegreePack[id41].width;
                      compoundNode.rect.height = tiledZeroDegreePack[id41].height;
                      compoundNode.setCenter(tiledZeroDegreePack[id41].centerX, tiledZeroDegreePack[id41].centerY);
                      compoundNode.labelMarginLeft = 0;
                      compoundNode.labelMarginTop = 0;
                      if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {
                        var width3 = compoundNode.rect.width;
                        var height2 = compoundNode.rect.height;
                        if (compoundNode.labelWidth) {
                          if (compoundNode.labelPosHorizontal == "left") {
                            compoundNode.rect.x -= compoundNode.labelWidth;
                            compoundNode.setWidth(width3 + compoundNode.labelWidth);
                            compoundNode.labelMarginLeft = compoundNode.labelWidth;
                          } else if (compoundNode.labelPosHorizontal == "center" && compoundNode.labelWidth > width3) {
                            compoundNode.rect.x -= (compoundNode.labelWidth - width3) / 2;
                            compoundNode.setWidth(compoundNode.labelWidth);
                            compoundNode.labelMarginLeft = (compoundNode.labelWidth - width3) / 2;
                          } else if (compoundNode.labelPosHorizontal == "right") {
                            compoundNode.setWidth(width3 + compoundNode.labelWidth);
                          }
                        }
                        if (compoundNode.labelHeight) {
                          if (compoundNode.labelPosVertical == "top") {
                            compoundNode.rect.y -= compoundNode.labelHeight;
                            compoundNode.setHeight(height2 + compoundNode.labelHeight);
                            compoundNode.labelMarginTop = compoundNode.labelHeight;
                          } else if (compoundNode.labelPosVertical == "center" && compoundNode.labelHeight > height2) {
                            compoundNode.rect.y -= (compoundNode.labelHeight - height2) / 2;
                            compoundNode.setHeight(compoundNode.labelHeight);
                            compoundNode.labelMarginTop = (compoundNode.labelHeight - height2) / 2;
                          } else if (compoundNode.labelPosVertical == "bottom") {
                            compoundNode.setHeight(height2 + compoundNode.labelHeight);
                          }
                        }
                      }
                    });
                  };
                  CoSELayout.prototype.repopulateCompounds = function() {
                    for (var i2 = this.compoundOrder.length - 1; i2 >= 0; i2--) {
                      var lCompoundNode = this.compoundOrder[i2];
                      var id41 = lCompoundNode.id;
                      var horizontalMargin = lCompoundNode.paddingLeft;
                      var verticalMargin = lCompoundNode.paddingTop;
                      var labelMarginLeft = lCompoundNode.labelMarginLeft;
                      var labelMarginTop = lCompoundNode.labelMarginTop;
                      this.adjustLocations(this.tiledMemberPack[id41], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);
                    }
                  };
                  CoSELayout.prototype.repopulateZeroDegreeMembers = function() {
                    var self2 = this;
                    var tiledPack = this.tiledZeroDegreePack;
                    Object.keys(tiledPack).forEach(function(id41) {
                      var compoundNode = self2.idToDummyNode[id41];
                      var horizontalMargin = compoundNode.paddingLeft;
                      var verticalMargin = compoundNode.paddingTop;
                      var labelMarginLeft = compoundNode.labelMarginLeft;
                      var labelMarginTop = compoundNode.labelMarginTop;
                      self2.adjustLocations(tiledPack[id41], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);
                    });
                  };
                  CoSELayout.prototype.getToBeTiled = function(node2) {
                    var id41 = node2.id;
                    if (this.toBeTiled[id41] != null) {
                      return this.toBeTiled[id41];
                    }
                    var childGraph = node2.getChild();
                    if (childGraph == null) {
                      this.toBeTiled[id41] = false;
                      return false;
                    }
                    var children2 = childGraph.getNodes();
                    for (var i2 = 0; i2 < children2.length; i2++) {
                      var theChild = children2[i2];
                      if (this.getNodeDegree(theChild) > 0) {
                        this.toBeTiled[id41] = false;
                        return false;
                      }
                      if (theChild.getChild() == null) {
                        this.toBeTiled[theChild.id] = false;
                        continue;
                      }
                      if (!this.getToBeTiled(theChild)) {
                        this.toBeTiled[id41] = false;
                        return false;
                      }
                    }
                    this.toBeTiled[id41] = true;
                    return true;
                  };
                  CoSELayout.prototype.getNodeDegree = function(node2) {
                    var id41 = node2.id;
                    var edges3 = node2.getEdges();
                    var degree = 0;
                    for (var i2 = 0; i2 < edges3.length; i2++) {
                      var edge = edges3[i2];
                      if (edge.getSource().id !== edge.getTarget().id) {
                        degree = degree + 1;
                      }
                    }
                    return degree;
                  };
                  CoSELayout.prototype.getNodeDegreeWithChildren = function(node2) {
                    var degree = this.getNodeDegree(node2);
                    if (node2.getChild() == null) {
                      return degree;
                    }
                    var children2 = node2.getChild().getNodes();
                    for (var i2 = 0; i2 < children2.length; i2++) {
                      var child = children2[i2];
                      degree += this.getNodeDegreeWithChildren(child);
                    }
                    return degree;
                  };
                  CoSELayout.prototype.performDFSOnCompounds = function() {
                    this.compoundOrder = [];
                    this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());
                  };
                  CoSELayout.prototype.fillCompexOrderByDFS = function(children2) {
                    for (var i2 = 0; i2 < children2.length; i2++) {
                      var child = children2[i2];
                      if (child.getChild() != null) {
                        this.fillCompexOrderByDFS(child.getChild().getNodes());
                      }
                      if (this.getToBeTiled(child)) {
                        this.compoundOrder.push(child);
                      }
                    }
                  };
                  CoSELayout.prototype.adjustLocations = function(organization, x5, y6, compoundHorizontalMargin, compoundVerticalMargin, compoundLabelMarginLeft, compoundLabelMarginTop) {
                    x5 += compoundHorizontalMargin + compoundLabelMarginLeft;
                    y6 += compoundVerticalMargin + compoundLabelMarginTop;
                    var left3 = x5;
                    for (var i2 = 0; i2 < organization.rows.length; i2++) {
                      var row = organization.rows[i2];
                      x5 = left3;
                      var maxHeight = 0;
                      for (var j3 = 0; j3 < row.length; j3++) {
                        var lnode = row[j3];
                        lnode.rect.x = x5;
                        lnode.rect.y = y6;
                        x5 += lnode.rect.width + organization.horizontalPadding;
                        if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;
                      }
                      y6 += maxHeight + organization.verticalPadding;
                    }
                  };
                  CoSELayout.prototype.tileCompoundMembers = function(childGraphMap, idToNode) {
                    var self2 = this;
                    this.tiledMemberPack = [];
                    Object.keys(childGraphMap).forEach(function(id41) {
                      var compoundNode = idToNode[id41];
                      self2.tiledMemberPack[id41] = self2.tileNodes(childGraphMap[id41], compoundNode.paddingLeft + compoundNode.paddingRight);
                      compoundNode.rect.width = self2.tiledMemberPack[id41].width;
                      compoundNode.rect.height = self2.tiledMemberPack[id41].height;
                      compoundNode.setCenter(self2.tiledMemberPack[id41].centerX, self2.tiledMemberPack[id41].centerY);
                      compoundNode.labelMarginLeft = 0;
                      compoundNode.labelMarginTop = 0;
                      if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {
                        var width3 = compoundNode.rect.width;
                        var height2 = compoundNode.rect.height;
                        if (compoundNode.labelWidth) {
                          if (compoundNode.labelPosHorizontal == "left") {
                            compoundNode.rect.x -= compoundNode.labelWidth;
                            compoundNode.setWidth(width3 + compoundNode.labelWidth);
                            compoundNode.labelMarginLeft = compoundNode.labelWidth;
                          } else if (compoundNode.labelPosHorizontal == "center" && compoundNode.labelWidth > width3) {
                            compoundNode.rect.x -= (compoundNode.labelWidth - width3) / 2;
                            compoundNode.setWidth(compoundNode.labelWidth);
                            compoundNode.labelMarginLeft = (compoundNode.labelWidth - width3) / 2;
                          } else if (compoundNode.labelPosHorizontal == "right") {
                            compoundNode.setWidth(width3 + compoundNode.labelWidth);
                          }
                        }
                        if (compoundNode.labelHeight) {
                          if (compoundNode.labelPosVertical == "top") {
                            compoundNode.rect.y -= compoundNode.labelHeight;
                            compoundNode.setHeight(height2 + compoundNode.labelHeight);
                            compoundNode.labelMarginTop = compoundNode.labelHeight;
                          } else if (compoundNode.labelPosVertical == "center" && compoundNode.labelHeight > height2) {
                            compoundNode.rect.y -= (compoundNode.labelHeight - height2) / 2;
                            compoundNode.setHeight(compoundNode.labelHeight);
                            compoundNode.labelMarginTop = (compoundNode.labelHeight - height2) / 2;
                          } else if (compoundNode.labelPosVertical == "bottom") {
                            compoundNode.setHeight(height2 + compoundNode.labelHeight);
                          }
                        }
                      }
                    });
                  };
                  CoSELayout.prototype.tileNodes = function(nodes5, minWidth) {
                    var horizontalOrg = this.tileNodesByFavoringDim(nodes5, minWidth, true);
                    var verticalOrg = this.tileNodesByFavoringDim(nodes5, minWidth, false);
                    var horizontalRatio = this.getOrgRatio(horizontalOrg);
                    var verticalRatio = this.getOrgRatio(verticalOrg);
                    var bestOrg;
                    if (verticalRatio < horizontalRatio) {
                      bestOrg = verticalOrg;
                    } else {
                      bestOrg = horizontalOrg;
                    }
                    return bestOrg;
                  };
                  CoSELayout.prototype.getOrgRatio = function(organization) {
                    var width3 = organization.width;
                    var height2 = organization.height;
                    var ratio = width3 / height2;
                    if (ratio < 1) {
                      ratio = 1 / ratio;
                    }
                    return ratio;
                  };
                  CoSELayout.prototype.calcIdealRowWidth = function(members, favorHorizontalDim) {
                    var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;
                    var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;
                    var membersSize = members.length;
                    var totalWidth = 0;
                    var totalHeight = 0;
                    var maxWidth2 = 0;
                    members.forEach(function(node2) {
                      totalWidth += node2.getWidth();
                      totalHeight += node2.getHeight();
                      if (node2.getWidth() > maxWidth2) {
                        maxWidth2 = node2.getWidth();
                      }
                    });
                    var averageWidth = totalWidth / membersSize;
                    var averageHeight = totalHeight / membersSize;
                    var delta = Math.pow(verticalPadding - horizontalPadding, 2) + 4 * (averageWidth + horizontalPadding) * (averageHeight + verticalPadding) * membersSize;
                    var horizontalCountDouble = (horizontalPadding - verticalPadding + Math.sqrt(delta)) / (2 * (averageWidth + horizontalPadding));
                    var horizontalCount;
                    if (favorHorizontalDim) {
                      horizontalCount = Math.ceil(horizontalCountDouble);
                      if (horizontalCount == horizontalCountDouble) {
                        horizontalCount++;
                      }
                    } else {
                      horizontalCount = Math.floor(horizontalCountDouble);
                    }
                    var idealWidth = horizontalCount * (averageWidth + horizontalPadding) - horizontalPadding;
                    if (maxWidth2 > idealWidth) {
                      idealWidth = maxWidth2;
                    }
                    idealWidth += horizontalPadding * 2;
                    return idealWidth;
                  };
                  CoSELayout.prototype.tileNodesByFavoringDim = function(nodes5, minWidth, favorHorizontalDim) {
                    var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;
                    var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;
                    var tilingCompareBy = CoSEConstants.TILING_COMPARE_BY;
                    var organization = {
                      rows: [],
                      rowWidth: [],
                      rowHeight: [],
                      width: 0,
                      height: minWidth,
                      // assume minHeight equals to minWidth
                      verticalPadding,
                      horizontalPadding,
                      centerX: 0,
                      centerY: 0
                    };
                    if (tilingCompareBy) {
                      organization.idealRowWidth = this.calcIdealRowWidth(nodes5, favorHorizontalDim);
                    }
                    var getNodeArea = /* @__PURE__ */ __name(function getNodeArea2(n2) {
                      return n2.rect.width * n2.rect.height;
                    }, "getNodeArea");
                    var areaCompareFcn = /* @__PURE__ */ __name(function areaCompareFcn2(n1, n2) {
                      return getNodeArea(n2) - getNodeArea(n1);
                    }, "areaCompareFcn");
                    nodes5.sort(function(n1, n2) {
                      var cmpBy = areaCompareFcn;
                      if (organization.idealRowWidth) {
                        cmpBy = tilingCompareBy;
                        return cmpBy(n1.id, n2.id);
                      }
                      return cmpBy(n1, n2);
                    });
                    var sumCenterX = 0;
                    var sumCenterY = 0;
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      var lNode = nodes5[i2];
                      sumCenterX += lNode.getCenterX();
                      sumCenterY += lNode.getCenterY();
                    }
                    organization.centerX = sumCenterX / nodes5.length;
                    organization.centerY = sumCenterY / nodes5.length;
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      var lNode = nodes5[i2];
                      if (organization.rows.length == 0) {
                        this.insertNodeToRow(organization, lNode, 0, minWidth);
                      } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {
                        var rowIndex = organization.rows.length - 1;
                        if (!organization.idealRowWidth) {
                          rowIndex = this.getShortestRowIndex(organization);
                        }
                        this.insertNodeToRow(organization, lNode, rowIndex, minWidth);
                      } else {
                        this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);
                      }
                      this.shiftToLastRow(organization);
                    }
                    return organization;
                  };
                  CoSELayout.prototype.insertNodeToRow = function(organization, node2, rowIndex, minWidth) {
                    var minCompoundSize = minWidth;
                    if (rowIndex == organization.rows.length) {
                      var secondDimension = [];
                      organization.rows.push(secondDimension);
                      organization.rowWidth.push(minCompoundSize);
                      organization.rowHeight.push(0);
                    }
                    var w4 = organization.rowWidth[rowIndex] + node2.rect.width;
                    if (organization.rows[rowIndex].length > 0) {
                      w4 += organization.horizontalPadding;
                    }
                    organization.rowWidth[rowIndex] = w4;
                    if (organization.width < w4) {
                      organization.width = w4;
                    }
                    var h3 = node2.rect.height;
                    if (rowIndex > 0) h3 += organization.verticalPadding;
                    var extraHeight = 0;
                    if (h3 > organization.rowHeight[rowIndex]) {
                      extraHeight = organization.rowHeight[rowIndex];
                      organization.rowHeight[rowIndex] = h3;
                      extraHeight = organization.rowHeight[rowIndex] - extraHeight;
                    }
                    organization.height += extraHeight;
                    organization.rows[rowIndex].push(node2);
                  };
                  CoSELayout.prototype.getShortestRowIndex = function(organization) {
                    var r2 = -1;
                    var min10 = Number.MAX_VALUE;
                    for (var i2 = 0; i2 < organization.rows.length; i2++) {
                      if (organization.rowWidth[i2] < min10) {
                        r2 = i2;
                        min10 = organization.rowWidth[i2];
                      }
                    }
                    return r2;
                  };
                  CoSELayout.prototype.getLongestRowIndex = function(organization) {
                    var r2 = -1;
                    var max10 = Number.MIN_VALUE;
                    for (var i2 = 0; i2 < organization.rows.length; i2++) {
                      if (organization.rowWidth[i2] > max10) {
                        r2 = i2;
                        max10 = organization.rowWidth[i2];
                      }
                    }
                    return r2;
                  };
                  CoSELayout.prototype.canAddHorizontal = function(organization, extraWidth, extraHeight) {
                    if (organization.idealRowWidth) {
                      var lastRowIndex = organization.rows.length - 1;
                      var lastRowWidth = organization.rowWidth[lastRowIndex];
                      return lastRowWidth + extraWidth + organization.horizontalPadding <= organization.idealRowWidth;
                    }
                    var sri = this.getShortestRowIndex(organization);
                    if (sri < 0) {
                      return true;
                    }
                    var min10 = organization.rowWidth[sri];
                    if (min10 + organization.horizontalPadding + extraWidth <= organization.width) return true;
                    var hDiff = 0;
                    if (organization.rowHeight[sri] < extraHeight) {
                      if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];
                    }
                    var add_to_row_ratio;
                    if (organization.width - min10 >= extraWidth + organization.horizontalPadding) {
                      add_to_row_ratio = (organization.height + hDiff) / (min10 + extraWidth + organization.horizontalPadding);
                    } else {
                      add_to_row_ratio = (organization.height + hDiff) / organization.width;
                    }
                    hDiff = extraHeight + organization.verticalPadding;
                    var add_new_row_ratio;
                    if (organization.width < extraWidth) {
                      add_new_row_ratio = (organization.height + hDiff) / extraWidth;
                    } else {
                      add_new_row_ratio = (organization.height + hDiff) / organization.width;
                    }
                    if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;
                    if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;
                    return add_to_row_ratio < add_new_row_ratio;
                  };
                  CoSELayout.prototype.shiftToLastRow = function(organization) {
                    var longest = this.getLongestRowIndex(organization);
                    var last4 = organization.rowWidth.length - 1;
                    var row = organization.rows[longest];
                    var node2 = row[row.length - 1];
                    var diff2 = node2.width + organization.horizontalPadding;
                    if (organization.width - organization.rowWidth[last4] > diff2 && longest != last4) {
                      row.splice(-1, 1);
                      organization.rows[last4].push(node2);
                      organization.rowWidth[longest] = organization.rowWidth[longest] - diff2;
                      organization.rowWidth[last4] = organization.rowWidth[last4] + diff2;
                      organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];
                      var maxHeight = Number.MIN_VALUE;
                      for (var i2 = 0; i2 < row.length; i2++) {
                        if (row[i2].height > maxHeight) maxHeight = row[i2].height;
                      }
                      if (longest > 0) maxHeight += organization.verticalPadding;
                      var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last4];
                      organization.rowHeight[longest] = maxHeight;
                      if (organization.rowHeight[last4] < node2.height + organization.verticalPadding) organization.rowHeight[last4] = node2.height + organization.verticalPadding;
                      var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last4];
                      organization.height += finalTotal - prevTotal;
                      this.shiftToLastRow(organization);
                    }
                  };
                  CoSELayout.prototype.tilingPreLayout = function() {
                    if (CoSEConstants.TILE) {
                      this.groupZeroDegreeMembers();
                      this.clearCompounds();
                      this.clearZeroDegreeMembers();
                    }
                  };
                  CoSELayout.prototype.tilingPostLayout = function() {
                    if (CoSEConstants.TILE) {
                      this.repopulateZeroDegreeMembers();
                      this.repopulateCompounds();
                    }
                  };
                  CoSELayout.prototype.reduceTrees = function() {
                    var prunedNodesAll = [];
                    var containsLeaf = true;
                    var node2;
                    while (containsLeaf) {
                      var allNodes = this.graphManager.getAllNodes();
                      var prunedNodesInStepTemp = [];
                      containsLeaf = false;
                      for (var i2 = 0; i2 < allNodes.length; i2++) {
                        node2 = allNodes[i2];
                        if (node2.getEdges().length == 1 && !node2.getEdges()[0].isInterGraph && node2.getChild() == null) {
                          if (CoSEConstants.PURE_INCREMENTAL) {
                            var otherEnd = node2.getEdges()[0].getOtherEnd(node2);
                            var relativePosition2 = new DimensionD2(node2.getCenterX() - otherEnd.getCenterX(), node2.getCenterY() - otherEnd.getCenterY());
                            prunedNodesInStepTemp.push([node2, node2.getEdges()[0], node2.getOwner(), relativePosition2]);
                          } else {
                            prunedNodesInStepTemp.push([node2, node2.getEdges()[0], node2.getOwner()]);
                          }
                          containsLeaf = true;
                        }
                      }
                      if (containsLeaf == true) {
                        var prunedNodesInStep = [];
                        for (var j3 = 0; j3 < prunedNodesInStepTemp.length; j3++) {
                          if (prunedNodesInStepTemp[j3][0].getEdges().length == 1) {
                            prunedNodesInStep.push(prunedNodesInStepTemp[j3]);
                            prunedNodesInStepTemp[j3][0].getOwner().remove(prunedNodesInStepTemp[j3][0]);
                          }
                        }
                        prunedNodesAll.push(prunedNodesInStep);
                        this.graphManager.resetAllNodes();
                        this.graphManager.resetAllEdges();
                      }
                    }
                    this.prunedNodesAll = prunedNodesAll;
                  };
                  CoSELayout.prototype.growTree = function(prunedNodesAll) {
                    var lengthOfPrunedNodesInStep = prunedNodesAll.length;
                    var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];
                    var nodeData2;
                    for (var i2 = 0; i2 < prunedNodesInStep.length; i2++) {
                      nodeData2 = prunedNodesInStep[i2];
                      this.findPlaceforPrunedNode(nodeData2);
                      nodeData2[2].add(nodeData2[0]);
                      nodeData2[2].add(nodeData2[1], nodeData2[1].source, nodeData2[1].target);
                    }
                    prunedNodesAll.splice(prunedNodesAll.length - 1, 1);
                    this.graphManager.resetAllNodes();
                    this.graphManager.resetAllEdges();
                  };
                  CoSELayout.prototype.findPlaceforPrunedNode = function(nodeData2) {
                    var gridForPrunedNode;
                    var nodeToConnect;
                    var prunedNode = nodeData2[0];
                    if (prunedNode == nodeData2[1].source) {
                      nodeToConnect = nodeData2[1].target;
                    } else {
                      nodeToConnect = nodeData2[1].source;
                    }
                    if (CoSEConstants.PURE_INCREMENTAL) {
                      prunedNode.setCenter(nodeToConnect.getCenterX() + nodeData2[3].getWidth(), nodeToConnect.getCenterY() + nodeData2[3].getHeight());
                    } else {
                      var startGridX = nodeToConnect.startX;
                      var finishGridX = nodeToConnect.finishX;
                      var startGridY = nodeToConnect.startY;
                      var finishGridY = nodeToConnect.finishY;
                      var upNodeCount = 0;
                      var downNodeCount = 0;
                      var rightNodeCount = 0;
                      var leftNodeCount = 0;
                      var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];
                      if (startGridY > 0) {
                        for (var i2 = startGridX; i2 <= finishGridX; i2++) {
                          controlRegions[0] += this.grid[i2][startGridY - 1].length + this.grid[i2][startGridY].length - 1;
                        }
                      }
                      if (finishGridX < this.grid.length - 1) {
                        for (var i2 = startGridY; i2 <= finishGridY; i2++) {
                          controlRegions[1] += this.grid[finishGridX + 1][i2].length + this.grid[finishGridX][i2].length - 1;
                        }
                      }
                      if (finishGridY < this.grid[0].length - 1) {
                        for (var i2 = startGridX; i2 <= finishGridX; i2++) {
                          controlRegions[2] += this.grid[i2][finishGridY + 1].length + this.grid[i2][finishGridY].length - 1;
                        }
                      }
                      if (startGridX > 0) {
                        for (var i2 = startGridY; i2 <= finishGridY; i2++) {
                          controlRegions[3] += this.grid[startGridX - 1][i2].length + this.grid[startGridX][i2].length - 1;
                        }
                      }
                      var min10 = Integer.MAX_VALUE;
                      var minCount;
                      var minIndex;
                      for (var j3 = 0; j3 < controlRegions.length; j3++) {
                        if (controlRegions[j3] < min10) {
                          min10 = controlRegions[j3];
                          minCount = 1;
                          minIndex = j3;
                        } else if (controlRegions[j3] == min10) {
                          minCount++;
                        }
                      }
                      if (minCount == 3 && min10 == 0) {
                        if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {
                          gridForPrunedNode = 1;
                        } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {
                          gridForPrunedNode = 0;
                        } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {
                          gridForPrunedNode = 3;
                        } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {
                          gridForPrunedNode = 2;
                        }
                      } else if (minCount == 2 && min10 == 0) {
                        var random2 = Math.floor(Math.random() * 2);
                        if (controlRegions[0] == 0 && controlRegions[1] == 0) {
                          ;
                          if (random2 == 0) {
                            gridForPrunedNode = 0;
                          } else {
                            gridForPrunedNode = 1;
                          }
                        } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {
                          if (random2 == 0) {
                            gridForPrunedNode = 0;
                          } else {
                            gridForPrunedNode = 2;
                          }
                        } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {
                          if (random2 == 0) {
                            gridForPrunedNode = 0;
                          } else {
                            gridForPrunedNode = 3;
                          }
                        } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {
                          if (random2 == 0) {
                            gridForPrunedNode = 1;
                          } else {
                            gridForPrunedNode = 2;
                          }
                        } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {
                          if (random2 == 0) {
                            gridForPrunedNode = 1;
                          } else {
                            gridForPrunedNode = 3;
                          }
                        } else {
                          if (random2 == 0) {
                            gridForPrunedNode = 2;
                          } else {
                            gridForPrunedNode = 3;
                          }
                        }
                      } else if (minCount == 4 && min10 == 0) {
                        var random2 = Math.floor(Math.random() * 4);
                        gridForPrunedNode = random2;
                      } else {
                        gridForPrunedNode = minIndex;
                      }
                      if (gridForPrunedNode == 0) {
                        prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);
                      } else if (gridForPrunedNode == 1) {
                        prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());
                      } else if (gridForPrunedNode == 2) {
                        prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);
                      } else {
                        prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());
                      }
                    }
                  };
                  module3.exports = CoSELayout;
                })
              ),
              /***/
              991: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var FDLayoutNode = __webpack_require__2(551).FDLayoutNode;
                  var IMath = __webpack_require__2(551).IMath;
                  function CoSENode(gm, loc, size4, vNode) {
                    FDLayoutNode.call(this, gm, loc, size4, vNode);
                  }
                  __name(CoSENode, "CoSENode");
                  CoSENode.prototype = Object.create(FDLayoutNode.prototype);
                  for (var prop in FDLayoutNode) {
                    CoSENode[prop] = FDLayoutNode[prop];
                  }
                  CoSENode.prototype.calculateDisplacement = function() {
                    var layout7 = this.graphManager.getLayout();
                    if (this.getChild() != null && this.fixedNodeWeight) {
                      this.displacementX += layout7.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.fixedNodeWeight;
                      this.displacementY += layout7.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.fixedNodeWeight;
                    } else {
                      this.displacementX += layout7.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;
                      this.displacementY += layout7.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;
                    }
                    if (Math.abs(this.displacementX) > layout7.coolingFactor * layout7.maxNodeDisplacement) {
                      this.displacementX = layout7.coolingFactor * layout7.maxNodeDisplacement * IMath.sign(this.displacementX);
                    }
                    if (Math.abs(this.displacementY) > layout7.coolingFactor * layout7.maxNodeDisplacement) {
                      this.displacementY = layout7.coolingFactor * layout7.maxNodeDisplacement * IMath.sign(this.displacementY);
                    }
                    if (this.child && this.child.getNodes().length > 0) {
                      this.propogateDisplacementToChildren(this.displacementX, this.displacementY);
                    }
                  };
                  CoSENode.prototype.propogateDisplacementToChildren = function(dX, dY) {
                    var nodes5 = this.getChild().getNodes();
                    var node2;
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      node2 = nodes5[i2];
                      if (node2.getChild() == null) {
                        node2.displacementX += dX;
                        node2.displacementY += dY;
                      } else {
                        node2.propogateDisplacementToChildren(dX, dY);
                      }
                    }
                  };
                  CoSENode.prototype.move = function() {
                    var layout7 = this.graphManager.getLayout();
                    if (this.child == null || this.child.getNodes().length == 0) {
                      this.moveBy(this.displacementX, this.displacementY);
                      layout7.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);
                    }
                    this.springForceX = 0;
                    this.springForceY = 0;
                    this.repulsionForceX = 0;
                    this.repulsionForceY = 0;
                    this.gravitationForceX = 0;
                    this.gravitationForceY = 0;
                    this.displacementX = 0;
                    this.displacementY = 0;
                  };
                  CoSENode.prototype.setPred1 = function(pred12) {
                    this.pred1 = pred12;
                  };
                  CoSENode.prototype.getPred1 = function() {
                    return pred1;
                  };
                  CoSENode.prototype.getPred2 = function() {
                    return pred2;
                  };
                  CoSENode.prototype.setNext = function(next3) {
                    this.next = next3;
                  };
                  CoSENode.prototype.getNext = function() {
                    return next;
                  };
                  CoSENode.prototype.setProcessed = function(processed2) {
                    this.processed = processed2;
                  };
                  CoSENode.prototype.isProcessed = function() {
                    return processed;
                  };
                  module3.exports = CoSENode;
                })
              ),
              /***/
              902: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  function _toConsumableArray2(arr) {
                    if (Array.isArray(arr)) {
                      for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) {
                        arr2[i2] = arr[i2];
                      }
                      return arr2;
                    } else {
                      return Array.from(arr);
                    }
                  }
                  __name(_toConsumableArray2, "_toConsumableArray");
                  var CoSEConstants = __webpack_require__2(806);
                  var LinkedList = __webpack_require__2(551).LinkedList;
                  var Matrix = __webpack_require__2(551).Matrix;
                  var SVD = __webpack_require__2(551).SVD;
                  function ConstraintHandler() {
                  }
                  __name(ConstraintHandler, "ConstraintHandler");
                  ConstraintHandler.handleConstraints = function(layout7) {
                    var constraints = {};
                    constraints.fixedNodeConstraint = layout7.constraints.fixedNodeConstraint;
                    constraints.alignmentConstraint = layout7.constraints.alignmentConstraint;
                    constraints.relativePlacementConstraint = layout7.constraints.relativePlacementConstraint;
                    var idToNodeMap = /* @__PURE__ */ new Map();
                    var nodeIndexes = /* @__PURE__ */ new Map();
                    var xCoords = [];
                    var yCoords = [];
                    var allNodes = layout7.getAllNodes();
                    var index = 0;
                    for (var i2 = 0; i2 < allNodes.length; i2++) {
                      var node2 = allNodes[i2];
                      if (node2.getChild() == null) {
                        nodeIndexes.set(node2.id, index++);
                        xCoords.push(node2.getCenterX());
                        yCoords.push(node2.getCenterY());
                        idToNodeMap.set(node2.id, node2);
                      }
                    }
                    if (constraints.relativePlacementConstraint) {
                      constraints.relativePlacementConstraint.forEach(function(constraint) {
                        if (!constraint.gap && constraint.gap != 0) {
                          if (constraint.left) {
                            constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.left).getWidth() / 2 + idToNodeMap.get(constraint.right).getWidth() / 2;
                          } else {
                            constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.top).getHeight() / 2 + idToNodeMap.get(constraint.bottom).getHeight() / 2;
                          }
                        }
                      });
                    }
                    var calculatePositionDiff = /* @__PURE__ */ __name(function calculatePositionDiff2(pos1, pos2) {
                      return { x: pos1.x - pos2.x, y: pos1.y - pos2.y };
                    }, "calculatePositionDiff");
                    var calculateAvgPosition = /* @__PURE__ */ __name(function calculateAvgPosition2(nodeIdSet) {
                      var xPosSum = 0;
                      var yPosSum = 0;
                      nodeIdSet.forEach(function(nodeId) {
                        xPosSum += xCoords[nodeIndexes.get(nodeId)];
                        yPosSum += yCoords[nodeIndexes.get(nodeId)];
                      });
                      return { x: xPosSum / nodeIdSet.size, y: yPosSum / nodeIdSet.size };
                    }, "calculateAvgPosition");
                    var findAppropriatePositionForRelativePlacement = /* @__PURE__ */ __name(function findAppropriatePositionForRelativePlacement2(graph, direction2, fixedNodes2, dummyPositions, componentSources) {
                      function setUnion(setA, setB) {
                        var union2 = new Set(setA);
                        var _iteratorNormalCompletion = true;
                        var _didIteratorError = false;
                        var _iteratorError = void 0;
                        try {
                          for (var _iterator = setB[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                            var elem = _step.value;
                            union2.add(elem);
                          }
                        } catch (err) {
                          _didIteratorError = true;
                          _iteratorError = err;
                        } finally {
                          try {
                            if (!_iteratorNormalCompletion && _iterator.return) {
                              _iterator.return();
                            }
                          } finally {
                            if (_didIteratorError) {
                              throw _iteratorError;
                            }
                          }
                        }
                        return union2;
                      }
                      __name(setUnion, "setUnion");
                      var inDegrees = /* @__PURE__ */ new Map();
                      graph.forEach(function(value2, key) {
                        inDegrees.set(key, 0);
                      });
                      graph.forEach(function(value2, key) {
                        value2.forEach(function(adjacent) {
                          inDegrees.set(adjacent.id, inDegrees.get(adjacent.id) + 1);
                        });
                      });
                      var positionMap = /* @__PURE__ */ new Map();
                      var pastMap = /* @__PURE__ */ new Map();
                      var queue = new LinkedList();
                      inDegrees.forEach(function(value2, key) {
                        if (value2 == 0) {
                          queue.push(key);
                          if (!fixedNodes2) {
                            if (direction2 == "horizontal") {
                              positionMap.set(key, nodeIndexes.has(key) ? xCoords[nodeIndexes.get(key)] : dummyPositions.get(key));
                            } else {
                              positionMap.set(key, nodeIndexes.has(key) ? yCoords[nodeIndexes.get(key)] : dummyPositions.get(key));
                            }
                          }
                        } else {
                          positionMap.set(key, Number.NEGATIVE_INFINITY);
                        }
                        if (fixedNodes2) {
                          pastMap.set(key, /* @__PURE__ */ new Set([key]));
                        }
                      });
                      if (fixedNodes2) {
                        componentSources.forEach(function(component2) {
                          var fixedIds = [];
                          component2.forEach(function(nodeId) {
                            if (fixedNodes2.has(nodeId)) {
                              fixedIds.push(nodeId);
                            }
                          });
                          if (fixedIds.length > 0) {
                            var position5 = 0;
                            fixedIds.forEach(function(fixedId) {
                              if (direction2 == "horizontal") {
                                positionMap.set(fixedId, nodeIndexes.has(fixedId) ? xCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));
                                position5 += positionMap.get(fixedId);
                              } else {
                                positionMap.set(fixedId, nodeIndexes.has(fixedId) ? yCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));
                                position5 += positionMap.get(fixedId);
                              }
                            });
                            position5 = position5 / fixedIds.length;
                            component2.forEach(function(nodeId) {
                              if (!fixedNodes2.has(nodeId)) {
                                positionMap.set(nodeId, position5);
                              }
                            });
                          } else {
                            var _position = 0;
                            component2.forEach(function(nodeId) {
                              if (direction2 == "horizontal") {
                                _position += nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);
                              } else {
                                _position += nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);
                              }
                            });
                            _position = _position / component2.length;
                            component2.forEach(function(nodeId) {
                              positionMap.set(nodeId, _position);
                            });
                          }
                        });
                      }
                      var _loop = /* @__PURE__ */ __name(function _loop2() {
                        var currentNode = queue.shift();
                        var neighbors = graph.get(currentNode);
                        neighbors.forEach(function(neighbor) {
                          if (positionMap.get(neighbor.id) < positionMap.get(currentNode) + neighbor.gap) {
                            if (fixedNodes2 && fixedNodes2.has(neighbor.id)) {
                              var fixedPosition = void 0;
                              if (direction2 == "horizontal") {
                                fixedPosition = nodeIndexes.has(neighbor.id) ? xCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);
                              } else {
                                fixedPosition = nodeIndexes.has(neighbor.id) ? yCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);
                              }
                              positionMap.set(neighbor.id, fixedPosition);
                              if (fixedPosition < positionMap.get(currentNode) + neighbor.gap) {
                                var diff2 = positionMap.get(currentNode) + neighbor.gap - fixedPosition;
                                pastMap.get(currentNode).forEach(function(nodeId) {
                                  positionMap.set(nodeId, positionMap.get(nodeId) - diff2);
                                });
                              }
                            } else {
                              positionMap.set(neighbor.id, positionMap.get(currentNode) + neighbor.gap);
                            }
                          }
                          inDegrees.set(neighbor.id, inDegrees.get(neighbor.id) - 1);
                          if (inDegrees.get(neighbor.id) == 0) {
                            queue.push(neighbor.id);
                          }
                          if (fixedNodes2) {
                            pastMap.set(neighbor.id, setUnion(pastMap.get(currentNode), pastMap.get(neighbor.id)));
                          }
                        });
                      }, "_loop");
                      while (queue.length != 0) {
                        _loop();
                      }
                      if (fixedNodes2) {
                        var sinkNodes = /* @__PURE__ */ new Set();
                        graph.forEach(function(value2, key) {
                          if (value2.length == 0) {
                            sinkNodes.add(key);
                          }
                        });
                        var _components = [];
                        pastMap.forEach(function(value2, key) {
                          if (sinkNodes.has(key)) {
                            var isFixedComponent = false;
                            var _iteratorNormalCompletion2 = true;
                            var _didIteratorError2 = false;
                            var _iteratorError2 = void 0;
                            try {
                              for (var _iterator2 = value2[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
                                var nodeId = _step2.value;
                                if (fixedNodes2.has(nodeId)) {
                                  isFixedComponent = true;
                                }
                              }
                            } catch (err) {
                              _didIteratorError2 = true;
                              _iteratorError2 = err;
                            } finally {
                              try {
                                if (!_iteratorNormalCompletion2 && _iterator2.return) {
                                  _iterator2.return();
                                }
                              } finally {
                                if (_didIteratorError2) {
                                  throw _iteratorError2;
                                }
                              }
                            }
                            if (!isFixedComponent) {
                              var isExist = false;
                              var existAt = void 0;
                              _components.forEach(function(component2, index2) {
                                if (component2.has([].concat(_toConsumableArray2(value2))[0])) {
                                  isExist = true;
                                  existAt = index2;
                                }
                              });
                              if (!isExist) {
                                _components.push(new Set(value2));
                              } else {
                                value2.forEach(function(ele) {
                                  _components[existAt].add(ele);
                                });
                              }
                            }
                          }
                        });
                        _components.forEach(function(component2, index2) {
                          var minBefore = Number.POSITIVE_INFINITY;
                          var minAfter = Number.POSITIVE_INFINITY;
                          var maxBefore = Number.NEGATIVE_INFINITY;
                          var maxAfter = Number.NEGATIVE_INFINITY;
                          var _iteratorNormalCompletion3 = true;
                          var _didIteratorError3 = false;
                          var _iteratorError3 = void 0;
                          try {
                            for (var _iterator3 = component2[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
                              var nodeId = _step3.value;
                              var posBefore = void 0;
                              if (direction2 == "horizontal") {
                                posBefore = nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);
                              } else {
                                posBefore = nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);
                              }
                              var posAfter = positionMap.get(nodeId);
                              if (posBefore < minBefore) {
                                minBefore = posBefore;
                              }
                              if (posBefore > maxBefore) {
                                maxBefore = posBefore;
                              }
                              if (posAfter < minAfter) {
                                minAfter = posAfter;
                              }
                              if (posAfter > maxAfter) {
                                maxAfter = posAfter;
                              }
                            }
                          } catch (err) {
                            _didIteratorError3 = true;
                            _iteratorError3 = err;
                          } finally {
                            try {
                              if (!_iteratorNormalCompletion3 && _iterator3.return) {
                                _iterator3.return();
                              }
                            } finally {
                              if (_didIteratorError3) {
                                throw _iteratorError3;
                              }
                            }
                          }
                          var diff2 = (minBefore + maxBefore) / 2 - (minAfter + maxAfter) / 2;
                          var _iteratorNormalCompletion4 = true;
                          var _didIteratorError4 = false;
                          var _iteratorError4 = void 0;
                          try {
                            for (var _iterator4 = component2[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
                              var _nodeId = _step4.value;
                              positionMap.set(_nodeId, positionMap.get(_nodeId) + diff2);
                            }
                          } catch (err) {
                            _didIteratorError4 = true;
                            _iteratorError4 = err;
                          } finally {
                            try {
                              if (!_iteratorNormalCompletion4 && _iterator4.return) {
                                _iterator4.return();
                              }
                            } finally {
                              if (_didIteratorError4) {
                                throw _iteratorError4;
                              }
                            }
                          }
                        });
                      }
                      return positionMap;
                    }, "findAppropriatePositionForRelativePlacement");
                    var applyReflectionForRelativePlacement = /* @__PURE__ */ __name(function applyReflectionForRelativePlacement2(relativePlacementConstraints) {
                      var reflectOnY = 0, notReflectOnY = 0;
                      var reflectOnX = 0, notReflectOnX = 0;
                      relativePlacementConstraints.forEach(function(constraint) {
                        if (constraint.left) {
                          xCoords[nodeIndexes.get(constraint.left)] - xCoords[nodeIndexes.get(constraint.right)] >= 0 ? reflectOnY++ : notReflectOnY++;
                        } else {
                          yCoords[nodeIndexes.get(constraint.top)] - yCoords[nodeIndexes.get(constraint.bottom)] >= 0 ? reflectOnX++ : notReflectOnX++;
                        }
                      });
                      if (reflectOnY > notReflectOnY && reflectOnX > notReflectOnX) {
                        for (var _i = 0; _i < nodeIndexes.size; _i++) {
                          xCoords[_i] = -1 * xCoords[_i];
                          yCoords[_i] = -1 * yCoords[_i];
                        }
                      } else if (reflectOnY > notReflectOnY) {
                        for (var _i2 = 0; _i2 < nodeIndexes.size; _i2++) {
                          xCoords[_i2] = -1 * xCoords[_i2];
                        }
                      } else if (reflectOnX > notReflectOnX) {
                        for (var _i3 = 0; _i3 < nodeIndexes.size; _i3++) {
                          yCoords[_i3] = -1 * yCoords[_i3];
                        }
                      }
                    }, "applyReflectionForRelativePlacement");
                    var findComponents = /* @__PURE__ */ __name(function findComponents2(graph) {
                      var components4 = [];
                      var queue = new LinkedList();
                      var visited = /* @__PURE__ */ new Set();
                      var count2 = 0;
                      graph.forEach(function(value2, key) {
                        if (!visited.has(key)) {
                          components4[count2] = [];
                          var _currentNode = key;
                          queue.push(_currentNode);
                          visited.add(_currentNode);
                          components4[count2].push(_currentNode);
                          while (queue.length != 0) {
                            _currentNode = queue.shift();
                            var neighbors = graph.get(_currentNode);
                            neighbors.forEach(function(neighbor) {
                              if (!visited.has(neighbor.id)) {
                                queue.push(neighbor.id);
                                visited.add(neighbor.id);
                                components4[count2].push(neighbor.id);
                              }
                            });
                          }
                          count2++;
                        }
                      });
                      return components4;
                    }, "findComponents");
                    var dagToUndirected = /* @__PURE__ */ __name(function dagToUndirected2(dag2) {
                      var undirected = /* @__PURE__ */ new Map();
                      dag2.forEach(function(value2, key) {
                        undirected.set(key, []);
                      });
                      dag2.forEach(function(value2, key) {
                        value2.forEach(function(adjacent) {
                          undirected.get(key).push(adjacent);
                          undirected.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });
                        });
                      });
                      return undirected;
                    }, "dagToUndirected");
                    var dagToReversed = /* @__PURE__ */ __name(function dagToReversed2(dag2) {
                      var reversed = /* @__PURE__ */ new Map();
                      dag2.forEach(function(value2, key) {
                        reversed.set(key, []);
                      });
                      dag2.forEach(function(value2, key) {
                        value2.forEach(function(adjacent) {
                          reversed.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });
                        });
                      });
                      return reversed;
                    }, "dagToReversed");
                    var targetMatrix = [];
                    var sourceMatrix = [];
                    var standardTransformation = false;
                    var reflectionType = false;
                    var fixedNodes = /* @__PURE__ */ new Set();
                    var dag = /* @__PURE__ */ new Map();
                    var dagUndirected = /* @__PURE__ */ new Map();
                    var components3 = [];
                    if (constraints.fixedNodeConstraint) {
                      constraints.fixedNodeConstraint.forEach(function(nodeData2) {
                        fixedNodes.add(nodeData2.nodeId);
                      });
                    }
                    if (constraints.relativePlacementConstraint) {
                      constraints.relativePlacementConstraint.forEach(function(constraint) {
                        if (constraint.left) {
                          if (dag.has(constraint.left)) {
                            dag.get(constraint.left).push({ id: constraint.right, gap: constraint.gap, direction: "horizontal" });
                          } else {
                            dag.set(constraint.left, [{ id: constraint.right, gap: constraint.gap, direction: "horizontal" }]);
                          }
                          if (!dag.has(constraint.right)) {
                            dag.set(constraint.right, []);
                          }
                        } else {
                          if (dag.has(constraint.top)) {
                            dag.get(constraint.top).push({ id: constraint.bottom, gap: constraint.gap, direction: "vertical" });
                          } else {
                            dag.set(constraint.top, [{ id: constraint.bottom, gap: constraint.gap, direction: "vertical" }]);
                          }
                          if (!dag.has(constraint.bottom)) {
                            dag.set(constraint.bottom, []);
                          }
                        }
                      });
                      dagUndirected = dagToUndirected(dag);
                      components3 = findComponents(dagUndirected);
                    }
                    if (CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING) {
                      if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 1) {
                        constraints.fixedNodeConstraint.forEach(function(nodeData2, i3) {
                          targetMatrix[i3] = [nodeData2.position.x, nodeData2.position.y];
                          sourceMatrix[i3] = [xCoords[nodeIndexes.get(nodeData2.nodeId)], yCoords[nodeIndexes.get(nodeData2.nodeId)]];
                        });
                        standardTransformation = true;
                      } else if (constraints.alignmentConstraint) {
                        (function() {
                          var count2 = 0;
                          if (constraints.alignmentConstraint.vertical) {
                            var verticalAlign = constraints.alignmentConstraint.vertical;
                            var _loop2 = /* @__PURE__ */ __name(function _loop22(_i42) {
                              var alignmentSet = /* @__PURE__ */ new Set();
                              verticalAlign[_i42].forEach(function(nodeId) {
                                alignmentSet.add(nodeId);
                              });
                              var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) {
                                return fixedNodes.has(x5);
                              }));
                              var xPos = void 0;
                              if (intersection4.size > 0) xPos = xCoords[nodeIndexes.get(intersection4.values().next().value)];
                              else xPos = calculateAvgPosition(alignmentSet).x;
                              verticalAlign[_i42].forEach(function(nodeId) {
                                targetMatrix[count2] = [xPos, yCoords[nodeIndexes.get(nodeId)]];
                                sourceMatrix[count2] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];
                                count2++;
                              });
                            }, "_loop2");
                            for (var _i4 = 0; _i4 < verticalAlign.length; _i4++) {
                              _loop2(_i4);
                            }
                            standardTransformation = true;
                          }
                          if (constraints.alignmentConstraint.horizontal) {
                            var horizontalAlign = constraints.alignmentConstraint.horizontal;
                            var _loop3 = /* @__PURE__ */ __name(function _loop32(_i52) {
                              var alignmentSet = /* @__PURE__ */ new Set();
                              horizontalAlign[_i52].forEach(function(nodeId) {
                                alignmentSet.add(nodeId);
                              });
                              var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) {
                                return fixedNodes.has(x5);
                              }));
                              var yPos = void 0;
                              if (intersection4.size > 0) yPos = xCoords[nodeIndexes.get(intersection4.values().next().value)];
                              else yPos = calculateAvgPosition(alignmentSet).y;
                              horizontalAlign[_i52].forEach(function(nodeId) {
                                targetMatrix[count2] = [xCoords[nodeIndexes.get(nodeId)], yPos];
                                sourceMatrix[count2] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];
                                count2++;
                              });
                            }, "_loop3");
                            for (var _i5 = 0; _i5 < horizontalAlign.length; _i5++) {
                              _loop3(_i5);
                            }
                            standardTransformation = true;
                          }
                          if (constraints.relativePlacementConstraint) {
                            reflectionType = true;
                          }
                        })();
                      } else if (constraints.relativePlacementConstraint) {
                        var largestComponentSize = 0;
                        var largestComponentIndex = 0;
                        for (var _i6 = 0; _i6 < components3.length; _i6++) {
                          if (components3[_i6].length > largestComponentSize) {
                            largestComponentSize = components3[_i6].length;
                            largestComponentIndex = _i6;
                          }
                        }
                        if (largestComponentSize < dagUndirected.size / 2) {
                          applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);
                          standardTransformation = false;
                          reflectionType = false;
                        } else {
                          var subGraphOnHorizontal = /* @__PURE__ */ new Map();
                          var subGraphOnVertical = /* @__PURE__ */ new Map();
                          var constraintsInlargestComponent = [];
                          components3[largestComponentIndex].forEach(function(nodeId) {
                            dag.get(nodeId).forEach(function(adjacent) {
                              if (adjacent.direction == "horizontal") {
                                if (subGraphOnHorizontal.has(nodeId)) {
                                  subGraphOnHorizontal.get(nodeId).push(adjacent);
                                } else {
                                  subGraphOnHorizontal.set(nodeId, [adjacent]);
                                }
                                if (!subGraphOnHorizontal.has(adjacent.id)) {
                                  subGraphOnHorizontal.set(adjacent.id, []);
                                }
                                constraintsInlargestComponent.push({ left: nodeId, right: adjacent.id });
                              } else {
                                if (subGraphOnVertical.has(nodeId)) {
                                  subGraphOnVertical.get(nodeId).push(adjacent);
                                } else {
                                  subGraphOnVertical.set(nodeId, [adjacent]);
                                }
                                if (!subGraphOnVertical.has(adjacent.id)) {
                                  subGraphOnVertical.set(adjacent.id, []);
                                }
                                constraintsInlargestComponent.push({ top: nodeId, bottom: adjacent.id });
                              }
                            });
                          });
                          applyReflectionForRelativePlacement(constraintsInlargestComponent);
                          reflectionType = false;
                          var positionMapHorizontal = findAppropriatePositionForRelativePlacement(subGraphOnHorizontal, "horizontal");
                          var positionMapVertical = findAppropriatePositionForRelativePlacement(subGraphOnVertical, "vertical");
                          components3[largestComponentIndex].forEach(function(nodeId, i3) {
                            sourceMatrix[i3] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];
                            targetMatrix[i3] = [];
                            if (positionMapHorizontal.has(nodeId)) {
                              targetMatrix[i3][0] = positionMapHorizontal.get(nodeId);
                            } else {
                              targetMatrix[i3][0] = xCoords[nodeIndexes.get(nodeId)];
                            }
                            if (positionMapVertical.has(nodeId)) {
                              targetMatrix[i3][1] = positionMapVertical.get(nodeId);
                            } else {
                              targetMatrix[i3][1] = yCoords[nodeIndexes.get(nodeId)];
                            }
                          });
                          standardTransformation = true;
                        }
                      }
                      if (standardTransformation) {
                        var transformationMatrix = void 0;
                        var targetMatrixTranspose = Matrix.transpose(targetMatrix);
                        var sourceMatrixTranspose = Matrix.transpose(sourceMatrix);
                        for (var _i7 = 0; _i7 < targetMatrixTranspose.length; _i7++) {
                          targetMatrixTranspose[_i7] = Matrix.multGamma(targetMatrixTranspose[_i7]);
                          sourceMatrixTranspose[_i7] = Matrix.multGamma(sourceMatrixTranspose[_i7]);
                        }
                        var tempMatrix = Matrix.multMat(targetMatrixTranspose, Matrix.transpose(sourceMatrixTranspose));
                        var SVDResult = SVD.svd(tempMatrix);
                        transformationMatrix = Matrix.multMat(SVDResult.V, Matrix.transpose(SVDResult.U));
                        for (var _i8 = 0; _i8 < nodeIndexes.size; _i8++) {
                          var temp1 = [xCoords[_i8], yCoords[_i8]];
                          var temp2 = [transformationMatrix[0][0], transformationMatrix[1][0]];
                          var temp3 = [transformationMatrix[0][1], transformationMatrix[1][1]];
                          xCoords[_i8] = Matrix.dotProduct(temp1, temp2);
                          yCoords[_i8] = Matrix.dotProduct(temp1, temp3);
                        }
                        if (reflectionType) {
                          applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);
                        }
                      }
                    }
                    if (CoSEConstants.ENFORCE_CONSTRAINTS) {
                      if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 0) {
                        var translationAmount = { x: 0, y: 0 };
                        constraints.fixedNodeConstraint.forEach(function(nodeData2, i3) {
                          var posInTheory = { x: xCoords[nodeIndexes.get(nodeData2.nodeId)], y: yCoords[nodeIndexes.get(nodeData2.nodeId)] };
                          var posDesired = nodeData2.position;
                          var posDiff = calculatePositionDiff(posDesired, posInTheory);
                          translationAmount.x += posDiff.x;
                          translationAmount.y += posDiff.y;
                        });
                        translationAmount.x /= constraints.fixedNodeConstraint.length;
                        translationAmount.y /= constraints.fixedNodeConstraint.length;
                        xCoords.forEach(function(value2, i3) {
                          xCoords[i3] += translationAmount.x;
                        });
                        yCoords.forEach(function(value2, i3) {
                          yCoords[i3] += translationAmount.y;
                        });
                        constraints.fixedNodeConstraint.forEach(function(nodeData2) {
                          xCoords[nodeIndexes.get(nodeData2.nodeId)] = nodeData2.position.x;
                          yCoords[nodeIndexes.get(nodeData2.nodeId)] = nodeData2.position.y;
                        });
                      }
                      if (constraints.alignmentConstraint) {
                        if (constraints.alignmentConstraint.vertical) {
                          var xAlign = constraints.alignmentConstraint.vertical;
                          var _loop4 = /* @__PURE__ */ __name(function _loop42(_i92) {
                            var alignmentSet = /* @__PURE__ */ new Set();
                            xAlign[_i92].forEach(function(nodeId) {
                              alignmentSet.add(nodeId);
                            });
                            var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) {
                              return fixedNodes.has(x5);
                            }));
                            var xPos = void 0;
                            if (intersection4.size > 0) xPos = xCoords[nodeIndexes.get(intersection4.values().next().value)];
                            else xPos = calculateAvgPosition(alignmentSet).x;
                            alignmentSet.forEach(function(nodeId) {
                              if (!fixedNodes.has(nodeId)) xCoords[nodeIndexes.get(nodeId)] = xPos;
                            });
                          }, "_loop4");
                          for (var _i9 = 0; _i9 < xAlign.length; _i9++) {
                            _loop4(_i9);
                          }
                        }
                        if (constraints.alignmentConstraint.horizontal) {
                          var yAlign = constraints.alignmentConstraint.horizontal;
                          var _loop5 = /* @__PURE__ */ __name(function _loop52(_i102) {
                            var alignmentSet = /* @__PURE__ */ new Set();
                            yAlign[_i102].forEach(function(nodeId) {
                              alignmentSet.add(nodeId);
                            });
                            var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) {
                              return fixedNodes.has(x5);
                            }));
                            var yPos = void 0;
                            if (intersection4.size > 0) yPos = yCoords[nodeIndexes.get(intersection4.values().next().value)];
                            else yPos = calculateAvgPosition(alignmentSet).y;
                            alignmentSet.forEach(function(nodeId) {
                              if (!fixedNodes.has(nodeId)) yCoords[nodeIndexes.get(nodeId)] = yPos;
                            });
                          }, "_loop5");
                          for (var _i10 = 0; _i10 < yAlign.length; _i10++) {
                            _loop5(_i10);
                          }
                        }
                      }
                      if (constraints.relativePlacementConstraint) {
                        (function() {
                          var nodeToDummyForVerticalAlignment = /* @__PURE__ */ new Map();
                          var nodeToDummyForHorizontalAlignment = /* @__PURE__ */ new Map();
                          var dummyToNodeForVerticalAlignment = /* @__PURE__ */ new Map();
                          var dummyToNodeForHorizontalAlignment = /* @__PURE__ */ new Map();
                          var dummyPositionsForVerticalAlignment = /* @__PURE__ */ new Map();
                          var dummyPositionsForHorizontalAlignment = /* @__PURE__ */ new Map();
                          var fixedNodesOnHorizontal = /* @__PURE__ */ new Set();
                          var fixedNodesOnVertical = /* @__PURE__ */ new Set();
                          fixedNodes.forEach(function(nodeId2) {
                            fixedNodesOnHorizontal.add(nodeId2);
                            fixedNodesOnVertical.add(nodeId2);
                          });
                          if (constraints.alignmentConstraint) {
                            if (constraints.alignmentConstraint.vertical) {
                              var verticalAlignment2 = constraints.alignmentConstraint.vertical;
                              var _loop6 = /* @__PURE__ */ __name(function _loop62(_i112) {
                                dummyToNodeForVerticalAlignment.set("dummy" + _i112, []);
                                verticalAlignment2[_i112].forEach(function(nodeId2) {
                                  nodeToDummyForVerticalAlignment.set(nodeId2, "dummy" + _i112);
                                  dummyToNodeForVerticalAlignment.get("dummy" + _i112).push(nodeId2);
                                  if (fixedNodes.has(nodeId2)) {
                                    fixedNodesOnHorizontal.add("dummy" + _i112);
                                  }
                                });
                                dummyPositionsForVerticalAlignment.set("dummy" + _i112, xCoords[nodeIndexes.get(verticalAlignment2[_i112][0])]);
                              }, "_loop6");
                              for (var _i11 = 0; _i11 < verticalAlignment2.length; _i11++) {
                                _loop6(_i11);
                              }
                            }
                            if (constraints.alignmentConstraint.horizontal) {
                              var horizontalAlignment = constraints.alignmentConstraint.horizontal;
                              var _loop7 = /* @__PURE__ */ __name(function _loop72(_i122) {
                                dummyToNodeForHorizontalAlignment.set("dummy" + _i122, []);
                                horizontalAlignment[_i122].forEach(function(nodeId2) {
                                  nodeToDummyForHorizontalAlignment.set(nodeId2, "dummy" + _i122);
                                  dummyToNodeForHorizontalAlignment.get("dummy" + _i122).push(nodeId2);
                                  if (fixedNodes.has(nodeId2)) {
                                    fixedNodesOnVertical.add("dummy" + _i122);
                                  }
                                });
                                dummyPositionsForHorizontalAlignment.set("dummy" + _i122, yCoords[nodeIndexes.get(horizontalAlignment[_i122][0])]);
                              }, "_loop7");
                              for (var _i12 = 0; _i12 < horizontalAlignment.length; _i12++) {
                                _loop7(_i12);
                              }
                            }
                          }
                          var dagOnHorizontal = /* @__PURE__ */ new Map();
                          var dagOnVertical = /* @__PURE__ */ new Map();
                          var _loop8 = /* @__PURE__ */ __name(function _loop82(nodeId2) {
                            dag.get(nodeId2).forEach(function(adjacent) {
                              var sourceId = void 0;
                              var targetNode = void 0;
                              if (adjacent["direction"] == "horizontal") {
                                sourceId = nodeToDummyForVerticalAlignment.get(nodeId2) ? nodeToDummyForVerticalAlignment.get(nodeId2) : nodeId2;
                                if (nodeToDummyForVerticalAlignment.get(adjacent.id)) {
                                  targetNode = { id: nodeToDummyForVerticalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };
                                } else {
                                  targetNode = adjacent;
                                }
                                if (dagOnHorizontal.has(sourceId)) {
                                  dagOnHorizontal.get(sourceId).push(targetNode);
                                } else {
                                  dagOnHorizontal.set(sourceId, [targetNode]);
                                }
                                if (!dagOnHorizontal.has(targetNode.id)) {
                                  dagOnHorizontal.set(targetNode.id, []);
                                }
                              } else {
                                sourceId = nodeToDummyForHorizontalAlignment.get(nodeId2) ? nodeToDummyForHorizontalAlignment.get(nodeId2) : nodeId2;
                                if (nodeToDummyForHorizontalAlignment.get(adjacent.id)) {
                                  targetNode = { id: nodeToDummyForHorizontalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };
                                } else {
                                  targetNode = adjacent;
                                }
                                if (dagOnVertical.has(sourceId)) {
                                  dagOnVertical.get(sourceId).push(targetNode);
                                } else {
                                  dagOnVertical.set(sourceId, [targetNode]);
                                }
                                if (!dagOnVertical.has(targetNode.id)) {
                                  dagOnVertical.set(targetNode.id, []);
                                }
                              }
                            });
                          }, "_loop8");
                          var _iteratorNormalCompletion5 = true;
                          var _didIteratorError5 = false;
                          var _iteratorError5 = void 0;
                          try {
                            for (var _iterator5 = dag.keys()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
                              var nodeId = _step5.value;
                              _loop8(nodeId);
                            }
                          } catch (err) {
                            _didIteratorError5 = true;
                            _iteratorError5 = err;
                          } finally {
                            try {
                              if (!_iteratorNormalCompletion5 && _iterator5.return) {
                                _iterator5.return();
                              }
                            } finally {
                              if (_didIteratorError5) {
                                throw _iteratorError5;
                              }
                            }
                          }
                          var undirectedOnHorizontal = dagToUndirected(dagOnHorizontal);
                          var undirectedOnVertical = dagToUndirected(dagOnVertical);
                          var componentsOnHorizontal = findComponents(undirectedOnHorizontal);
                          var componentsOnVertical = findComponents(undirectedOnVertical);
                          var reversedDagOnHorizontal = dagToReversed(dagOnHorizontal);
                          var reversedDagOnVertical = dagToReversed(dagOnVertical);
                          var componentSourcesOnHorizontal = [];
                          var componentSourcesOnVertical = [];
                          componentsOnHorizontal.forEach(function(component2, index2) {
                            componentSourcesOnHorizontal[index2] = [];
                            component2.forEach(function(nodeId2) {
                              if (reversedDagOnHorizontal.get(nodeId2).length == 0) {
                                componentSourcesOnHorizontal[index2].push(nodeId2);
                              }
                            });
                          });
                          componentsOnVertical.forEach(function(component2, index2) {
                            componentSourcesOnVertical[index2] = [];
                            component2.forEach(function(nodeId2) {
                              if (reversedDagOnVertical.get(nodeId2).length == 0) {
                                componentSourcesOnVertical[index2].push(nodeId2);
                              }
                            });
                          });
                          var positionMapHorizontal2 = findAppropriatePositionForRelativePlacement(dagOnHorizontal, "horizontal", fixedNodesOnHorizontal, dummyPositionsForVerticalAlignment, componentSourcesOnHorizontal);
                          var positionMapVertical2 = findAppropriatePositionForRelativePlacement(dagOnVertical, "vertical", fixedNodesOnVertical, dummyPositionsForHorizontalAlignment, componentSourcesOnVertical);
                          var _loop9 = /* @__PURE__ */ __name(function _loop92(key2) {
                            if (dummyToNodeForVerticalAlignment.get(key2)) {
                              dummyToNodeForVerticalAlignment.get(key2).forEach(function(nodeId2) {
                                xCoords[nodeIndexes.get(nodeId2)] = positionMapHorizontal2.get(key2);
                              });
                            } else {
                              xCoords[nodeIndexes.get(key2)] = positionMapHorizontal2.get(key2);
                            }
                          }, "_loop9");
                          var _iteratorNormalCompletion6 = true;
                          var _didIteratorError6 = false;
                          var _iteratorError6 = void 0;
                          try {
                            for (var _iterator6 = positionMapHorizontal2.keys()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
                              var key = _step6.value;
                              _loop9(key);
                            }
                          } catch (err) {
                            _didIteratorError6 = true;
                            _iteratorError6 = err;
                          } finally {
                            try {
                              if (!_iteratorNormalCompletion6 && _iterator6.return) {
                                _iterator6.return();
                              }
                            } finally {
                              if (_didIteratorError6) {
                                throw _iteratorError6;
                              }
                            }
                          }
                          var _loop10 = /* @__PURE__ */ __name(function _loop102(key2) {
                            if (dummyToNodeForHorizontalAlignment.get(key2)) {
                              dummyToNodeForHorizontalAlignment.get(key2).forEach(function(nodeId2) {
                                yCoords[nodeIndexes.get(nodeId2)] = positionMapVertical2.get(key2);
                              });
                            } else {
                              yCoords[nodeIndexes.get(key2)] = positionMapVertical2.get(key2);
                            }
                          }, "_loop10");
                          var _iteratorNormalCompletion7 = true;
                          var _didIteratorError7 = false;
                          var _iteratorError7 = void 0;
                          try {
                            for (var _iterator7 = positionMapVertical2.keys()[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
                              var key = _step7.value;
                              _loop10(key);
                            }
                          } catch (err) {
                            _didIteratorError7 = true;
                            _iteratorError7 = err;
                          } finally {
                            try {
                              if (!_iteratorNormalCompletion7 && _iterator7.return) {
                                _iterator7.return();
                              }
                            } finally {
                              if (_didIteratorError7) {
                                throw _iteratorError7;
                              }
                            }
                          }
                        })();
                      }
                    }
                    for (var _i13 = 0; _i13 < allNodes.length; _i13++) {
                      var _node = allNodes[_i13];
                      if (_node.getChild() == null) {
                        _node.setCenter(xCoords[nodeIndexes.get(_node.id)], yCoords[nodeIndexes.get(_node.id)]);
                      }
                    }
                  };
                  module3.exports = ConstraintHandler;
                })
              ),
              /***/
              551: (
                /***/
                ((module3) => {
                  module3.exports = __WEBPACK_EXTERNAL_MODULE__551__;
                })
              )
              /******/
            };
            var __webpack_module_cache__ = {};
            function __webpack_require__(moduleId) {
              var cachedModule = __webpack_module_cache__[moduleId];
              if (cachedModule !== void 0) {
                return cachedModule.exports;
              }
              var module3 = __webpack_module_cache__[moduleId] = {
                /******/
                // no module.id needed
                /******/
                // no module.loaded needed
                /******/
                exports: {}
                /******/
              };
              __webpack_modules__[moduleId](module3, module3.exports, __webpack_require__);
              return module3.exports;
            }
            __name(__webpack_require__, "__webpack_require__");
            var __webpack_exports__ = __webpack_require__(45);
            return __webpack_exports__;
          })()
        );
      });
    }
  });

  // ../../node_modules/.pnpm/cytoscape-fcose@2.2.0_cytoscape@3.33.3/node_modules/cytoscape-fcose/cytoscape-fcose.js
  var require_cytoscape_fcose = __commonJS({
    "../../node_modules/.pnpm/cytoscape-fcose@2.2.0_cytoscape@3.33.3/node_modules/cytoscape-fcose/cytoscape-fcose.js"(exports2, module2) {
      "use strict";
      (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root4, factory) {
        if (typeof exports2 === "object" && typeof module2 === "object")
          module2.exports = factory(require_cose_base2());
        else if (typeof define === "function" && define.amd)
          define(["cose-base"], factory);
        else if (typeof exports2 === "object")
          exports2["cytoscapeFcose"] = factory(require_cose_base2());
        else
          root4["cytoscapeFcose"] = factory(root4["coseBase"]);
      }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE__140__) {
        return (
          /******/
          (() => {
            "use strict";
            var __webpack_modules__ = {
              /***/
              658: (
                /***/
                ((module3) => {
                  module3.exports = Object.assign != null ? Object.assign.bind(Object) : function(tgt) {
                    for (var _len = arguments.length, srcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
                      srcs[_key - 1] = arguments[_key];
                    }
                    srcs.forEach(function(src) {
                      Object.keys(src).forEach(function(k2) {
                        return tgt[k2] = src[k2];
                      });
                    });
                    return tgt;
                  };
                })
              ),
              /***/
              548: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var _slicedToArray2 = /* @__PURE__ */ (function() {
                    function sliceIterator(arr, i2) {
                      var _arr = [];
                      var _n = true;
                      var _d = false;
                      var _e2 = void 0;
                      try {
                        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
                          _arr.push(_s.value);
                          if (i2 && _arr.length === i2) break;
                        }
                      } catch (err) {
                        _d = true;
                        _e2 = err;
                      } finally {
                        try {
                          if (!_n && _i["return"]) _i["return"]();
                        } finally {
                          if (_d) throw _e2;
                        }
                      }
                      return _arr;
                    }
                    __name(sliceIterator, "sliceIterator");
                    return function(arr, i2) {
                      if (Array.isArray(arr)) {
                        return arr;
                      } else if (Symbol.iterator in Object(arr)) {
                        return sliceIterator(arr, i2);
                      } else {
                        throw new TypeError("Invalid attempt to destructure non-iterable instance");
                      }
                    };
                  })();
                  var LinkedList = __webpack_require__2(140).layoutBase.LinkedList;
                  var auxiliary = {};
                  auxiliary.getTopMostNodes = function(nodes5) {
                    var nodesMap2 = {};
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      nodesMap2[nodes5[i2].id()] = true;
                    }
                    var roots = nodes5.filter(function(ele, i3) {
                      if (typeof ele === "number") {
                        ele = i3;
                      }
                      var parent4 = ele.parent()[0];
                      while (parent4 != null) {
                        if (nodesMap2[parent4.id()]) {
                          return false;
                        }
                        parent4 = parent4.parent()[0];
                      }
                      return true;
                    });
                    return roots;
                  };
                  auxiliary.connectComponents = function(cy, eles, topMostNodes, dummyNodes) {
                    var queue = new LinkedList();
                    var visited = /* @__PURE__ */ new Set();
                    var visitedTopMostNodes = [];
                    var currentNeighbor = void 0;
                    var minDegreeNode = void 0;
                    var minDegree = void 0;
                    var isConnected = false;
                    var count2 = 1;
                    var nodesConnectedToDummy = [];
                    var components3 = [];
                    var _loop = /* @__PURE__ */ __name(function _loop2() {
                      var cmpt = cy.collection();
                      components3.push(cmpt);
                      var currentNode = topMostNodes[0];
                      var childrenOfCurrentNode = cy.collection();
                      childrenOfCurrentNode.merge(currentNode).merge(currentNode.descendants().intersection(eles));
                      visitedTopMostNodes.push(currentNode);
                      childrenOfCurrentNode.forEach(function(node2) {
                        queue.push(node2);
                        visited.add(node2);
                        cmpt.merge(node2);
                      });
                      var _loop22 = /* @__PURE__ */ __name(function _loop23() {
                        currentNode = queue.shift();
                        var neighborNodes = cy.collection();
                        currentNode.neighborhood().nodes().forEach(function(node2) {
                          if (eles.intersection(currentNode.edgesWith(node2)).length > 0) {
                            neighborNodes.merge(node2);
                          }
                        });
                        for (var i2 = 0; i2 < neighborNodes.length; i2++) {
                          var neighborNode = neighborNodes[i2];
                          currentNeighbor = topMostNodes.intersection(neighborNode.union(neighborNode.ancestors()));
                          if (currentNeighbor != null && !visited.has(currentNeighbor[0])) {
                            var childrenOfNeighbor = currentNeighbor.union(currentNeighbor.descendants());
                            childrenOfNeighbor.forEach(function(node2) {
                              queue.push(node2);
                              visited.add(node2);
                              cmpt.merge(node2);
                              if (topMostNodes.has(node2)) {
                                visitedTopMostNodes.push(node2);
                              }
                            });
                          }
                        }
                      }, "_loop2");
                      while (queue.length != 0) {
                        _loop22();
                      }
                      cmpt.forEach(function(node2) {
                        eles.intersection(node2.connectedEdges()).forEach(function(e3) {
                          if (cmpt.has(e3.source()) && cmpt.has(e3.target())) {
                            cmpt.merge(e3);
                          }
                        });
                      });
                      if (visitedTopMostNodes.length == topMostNodes.length) {
                        isConnected = true;
                      }
                      if (!isConnected || isConnected && count2 > 1) {
                        minDegreeNode = visitedTopMostNodes[0];
                        minDegree = minDegreeNode.connectedEdges().length;
                        visitedTopMostNodes.forEach(function(node2) {
                          if (node2.connectedEdges().length < minDegree) {
                            minDegree = node2.connectedEdges().length;
                            minDegreeNode = node2;
                          }
                        });
                        nodesConnectedToDummy.push(minDegreeNode.id());
                        var temp = cy.collection();
                        temp.merge(visitedTopMostNodes[0]);
                        visitedTopMostNodes.forEach(function(node2) {
                          temp.merge(node2);
                        });
                        visitedTopMostNodes = [];
                        topMostNodes = topMostNodes.difference(temp);
                        count2++;
                      }
                    }, "_loop");
                    do {
                      _loop();
                    } while (!isConnected);
                    if (dummyNodes) {
                      if (nodesConnectedToDummy.length > 0) {
                        dummyNodes.set("dummy" + (dummyNodes.size + 1), nodesConnectedToDummy);
                      }
                    }
                    return components3;
                  };
                  auxiliary.relocateComponent = function(originalCenter, componentResult, options2) {
                    if (!options2.fixedNodeConstraint) {
                      var minXCoord = Number.POSITIVE_INFINITY;
                      var maxXCoord = Number.NEGATIVE_INFINITY;
                      var minYCoord = Number.POSITIVE_INFINITY;
                      var maxYCoord = Number.NEGATIVE_INFINITY;
                      if (options2.quality == "draft") {
                        var _iteratorNormalCompletion = true;
                        var _didIteratorError = false;
                        var _iteratorError = void 0;
                        try {
                          for (var _iterator = componentResult.nodeIndexes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                            var _ref = _step.value;
                            var _ref2 = _slicedToArray2(_ref, 2);
                            var key = _ref2[0];
                            var value2 = _ref2[1];
                            var cyNode = options2.cy.getElementById(key);
                            if (cyNode) {
                              var nodeBB = cyNode.boundingBox();
                              var leftX = componentResult.xCoords[value2] - nodeBB.w / 2;
                              var rightX = componentResult.xCoords[value2] + nodeBB.w / 2;
                              var topY = componentResult.yCoords[value2] - nodeBB.h / 2;
                              var bottomY = componentResult.yCoords[value2] + nodeBB.h / 2;
                              if (leftX < minXCoord) minXCoord = leftX;
                              if (rightX > maxXCoord) maxXCoord = rightX;
                              if (topY < minYCoord) minYCoord = topY;
                              if (bottomY > maxYCoord) maxYCoord = bottomY;
                            }
                          }
                        } catch (err) {
                          _didIteratorError = true;
                          _iteratorError = err;
                        } finally {
                          try {
                            if (!_iteratorNormalCompletion && _iterator.return) {
                              _iterator.return();
                            }
                          } finally {
                            if (_didIteratorError) {
                              throw _iteratorError;
                            }
                          }
                        }
                        var diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;
                        var diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;
                        componentResult.xCoords = componentResult.xCoords.map(function(x5) {
                          return x5 + diffOnX;
                        });
                        componentResult.yCoords = componentResult.yCoords.map(function(y6) {
                          return y6 + diffOnY;
                        });
                      } else {
                        Object.keys(componentResult).forEach(function(item) {
                          var node2 = componentResult[item];
                          var leftX2 = node2.getRect().x;
                          var rightX2 = node2.getRect().x + node2.getRect().width;
                          var topY2 = node2.getRect().y;
                          var bottomY2 = node2.getRect().y + node2.getRect().height;
                          if (leftX2 < minXCoord) minXCoord = leftX2;
                          if (rightX2 > maxXCoord) maxXCoord = rightX2;
                          if (topY2 < minYCoord) minYCoord = topY2;
                          if (bottomY2 > maxYCoord) maxYCoord = bottomY2;
                        });
                        var _diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;
                        var _diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;
                        Object.keys(componentResult).forEach(function(item) {
                          var node2 = componentResult[item];
                          node2.setCenter(node2.getCenterX() + _diffOnX, node2.getCenterY() + _diffOnY);
                        });
                      }
                    }
                  };
                  auxiliary.calcBoundingBox = function(parentNode, xCoords, yCoords, nodeIndexes) {
                    var left3 = Number.MAX_SAFE_INTEGER;
                    var right3 = Number.MIN_SAFE_INTEGER;
                    var top2 = Number.MAX_SAFE_INTEGER;
                    var bottom2 = Number.MIN_SAFE_INTEGER;
                    var nodeLeft = void 0;
                    var nodeRight = void 0;
                    var nodeTop = void 0;
                    var nodeBottom = void 0;
                    var nodes5 = parentNode.descendants().not(":parent");
                    var s2 = nodes5.length;
                    for (var i2 = 0; i2 < s2; i2++) {
                      var node2 = nodes5[i2];
                      nodeLeft = xCoords[nodeIndexes.get(node2.id())] - node2.width() / 2;
                      nodeRight = xCoords[nodeIndexes.get(node2.id())] + node2.width() / 2;
                      nodeTop = yCoords[nodeIndexes.get(node2.id())] - node2.height() / 2;
                      nodeBottom = yCoords[nodeIndexes.get(node2.id())] + node2.height() / 2;
                      if (left3 > nodeLeft) {
                        left3 = nodeLeft;
                      }
                      if (right3 < nodeRight) {
                        right3 = nodeRight;
                      }
                      if (top2 > nodeTop) {
                        top2 = nodeTop;
                      }
                      if (bottom2 < nodeBottom) {
                        bottom2 = nodeBottom;
                      }
                    }
                    var boundingBox3 = {};
                    boundingBox3.topLeftX = left3;
                    boundingBox3.topLeftY = top2;
                    boundingBox3.width = right3 - left3;
                    boundingBox3.height = bottom2 - top2;
                    return boundingBox3;
                  };
                  auxiliary.calcParentsWithoutChildren = function(cy, eles) {
                    var parentsWithoutChildren = cy.collection();
                    eles.nodes(":parent").forEach(function(parent4) {
                      var check = false;
                      parent4.children().forEach(function(child) {
                        if (child.css("display") != "none") {
                          check = true;
                        }
                      });
                      if (!check) {
                        parentsWithoutChildren.merge(parent4);
                      }
                    });
                    return parentsWithoutChildren;
                  };
                  module3.exports = auxiliary;
                })
              ),
              /***/
              816: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var aux = __webpack_require__2(548);
                  var CoSELayout = __webpack_require__2(140).CoSELayout;
                  var CoSENode = __webpack_require__2(140).CoSENode;
                  var PointD = __webpack_require__2(140).layoutBase.PointD;
                  var DimensionD2 = __webpack_require__2(140).layoutBase.DimensionD;
                  var LayoutConstants = __webpack_require__2(140).layoutBase.LayoutConstants;
                  var FDLayoutConstants = __webpack_require__2(140).layoutBase.FDLayoutConstants;
                  var CoSEConstants = __webpack_require__2(140).CoSEConstants;
                  var coseLayout = /* @__PURE__ */ __name(function coseLayout2(options2, spectralResult) {
                    var cy = options2.cy;
                    var eles = options2.eles;
                    var nodes5 = eles.nodes();
                    var edges3 = eles.edges();
                    var nodeIndexes = void 0;
                    var xCoords = void 0;
                    var yCoords = void 0;
                    var idToLNode = {};
                    if (options2.randomize) {
                      nodeIndexes = spectralResult["nodeIndexes"];
                      xCoords = spectralResult["xCoords"];
                      yCoords = spectralResult["yCoords"];
                    }
                    var isFn = /* @__PURE__ */ __name(function isFn2(fn3) {
                      return typeof fn3 === "function";
                    }, "isFn");
                    var optFn = /* @__PURE__ */ __name(function optFn2(opt, ele) {
                      if (isFn(opt)) {
                        return opt(ele);
                      } else {
                        return opt;
                      }
                    }, "optFn");
                    var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);
                    var processChildrenList = /* @__PURE__ */ __name(function processChildrenList2(parent4, children2, layout7, options3) {
                      var size4 = children2.length;
                      for (var i2 = 0; i2 < size4; i2++) {
                        var theChild = children2[i2];
                        var children_of_children = null;
                        if (theChild.intersection(parentsWithoutChildren).length == 0) {
                          children_of_children = theChild.children();
                        }
                        var theNode = void 0;
                        var dimensions2 = theChild.layoutDimensions({
                          nodeDimensionsIncludeLabels: options3.nodeDimensionsIncludeLabels
                        });
                        if (theChild.outerWidth() != null && theChild.outerHeight() != null) {
                          if (options3.randomize) {
                            if (!theChild.isParent()) {
                              theNode = parent4.add(new CoSENode(layout7.graphManager, new PointD(xCoords[nodeIndexes.get(theChild.id())] - dimensions2.w / 2, yCoords[nodeIndexes.get(theChild.id())] - dimensions2.h / 2), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h))));
                            } else {
                              var parentInfo = aux.calcBoundingBox(theChild, xCoords, yCoords, nodeIndexes);
                              if (theChild.intersection(parentsWithoutChildren).length == 0) {
                                theNode = parent4.add(new CoSENode(layout7.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD2(parentInfo.width, parentInfo.height)));
                              } else {
                                theNode = parent4.add(new CoSENode(layout7.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h))));
                              }
                            }
                          } else {
                            theNode = parent4.add(new CoSENode(layout7.graphManager, new PointD(theChild.position("x") - dimensions2.w / 2, theChild.position("y") - dimensions2.h / 2), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h))));
                          }
                        } else {
                          theNode = parent4.add(new CoSENode(this.graphManager));
                        }
                        theNode.id = theChild.data("id");
                        theNode.nodeRepulsion = optFn(options3.nodeRepulsion, theChild);
                        theNode.paddingLeft = parseInt(theChild.css("padding"));
                        theNode.paddingTop = parseInt(theChild.css("padding"));
                        theNode.paddingRight = parseInt(theChild.css("padding"));
                        theNode.paddingBottom = parseInt(theChild.css("padding"));
                        if (options3.nodeDimensionsIncludeLabels) {
                          theNode.labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).w;
                          theNode.labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).h;
                          theNode.labelPosVertical = theChild.css("text-valign");
                          theNode.labelPosHorizontal = theChild.css("text-halign");
                        }
                        idToLNode[theChild.data("id")] = theNode;
                        if (isNaN(theNode.rect.x)) {
                          theNode.rect.x = 0;
                        }
                        if (isNaN(theNode.rect.y)) {
                          theNode.rect.y = 0;
                        }
                        if (children_of_children != null && children_of_children.length > 0) {
                          var theNewGraph = void 0;
                          theNewGraph = layout7.getGraphManager().add(layout7.newGraph(), theNode);
                          processChildrenList2(theNewGraph, children_of_children, layout7, options3);
                        }
                      }
                    }, "processChildrenList");
                    var processEdges = /* @__PURE__ */ __name(function processEdges2(layout7, gm2, edges4) {
                      var idealLengthTotal = 0;
                      var edgeCount3 = 0;
                      for (var i2 = 0; i2 < edges4.length; i2++) {
                        var edge = edges4[i2];
                        var sourceNode = idToLNode[edge.data("source")];
                        var targetNode = idToLNode[edge.data("target")];
                        if (sourceNode && targetNode && sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {
                          var e1 = gm2.add(layout7.newEdge(), sourceNode, targetNode);
                          e1.id = edge.id();
                          e1.idealLength = optFn(options2.idealEdgeLength, edge);
                          e1.edgeElasticity = optFn(options2.edgeElasticity, edge);
                          idealLengthTotal += e1.idealLength;
                          edgeCount3++;
                        }
                      }
                      if (options2.idealEdgeLength != null) {
                        if (edgeCount3 > 0) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = idealLengthTotal / edgeCount3;
                        else if (!isFn(options2.idealEdgeLength))
                          CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options2.idealEdgeLength;
                        else
                          CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;
                        CoSEConstants.MIN_REPULSION_DIST = FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10;
                        CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;
                      }
                    }, "processEdges");
                    var processConstraints = /* @__PURE__ */ __name(function processConstraints2(layout7, options3) {
                      if (options3.fixedNodeConstraint) {
                        layout7.constraints["fixedNodeConstraint"] = options3.fixedNodeConstraint;
                      }
                      if (options3.alignmentConstraint) {
                        layout7.constraints["alignmentConstraint"] = options3.alignmentConstraint;
                      }
                      if (options3.relativePlacementConstraint) {
                        layout7.constraints["relativePlacementConstraint"] = options3.relativePlacementConstraint;
                      }
                    }, "processConstraints");
                    if (options2.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options2.nestingFactor;
                    if (options2.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options2.gravity;
                    if (options2.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options2.numIter;
                    if (options2.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options2.gravityRange;
                    if (options2.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options2.gravityCompound;
                    if (options2.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options2.gravityRangeCompound;
                    if (options2.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options2.initialEnergyOnIncremental;
                    if (options2.tilingCompareBy != null) CoSEConstants.TILING_COMPARE_BY = options2.tilingCompareBy;
                    if (options2.quality == "proof") LayoutConstants.QUALITY = 2;
                    else LayoutConstants.QUALITY = 0;
                    CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options2.nodeDimensionsIncludeLabels;
                    CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options2.randomize;
                    CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options2.animate;
                    CoSEConstants.TILE = options2.tile;
                    CoSEConstants.TILING_PADDING_VERTICAL = typeof options2.tilingPaddingVertical === "function" ? options2.tilingPaddingVertical.call() : options2.tilingPaddingVertical;
                    CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options2.tilingPaddingHorizontal === "function" ? options2.tilingPaddingHorizontal.call() : options2.tilingPaddingHorizontal;
                    CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = true;
                    CoSEConstants.PURE_INCREMENTAL = !options2.randomize;
                    LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = options2.uniformNodeDimensions;
                    if (options2.step == "transformed") {
                      CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;
                      CoSEConstants.ENFORCE_CONSTRAINTS = false;
                      CoSEConstants.APPLY_LAYOUT = false;
                    }
                    if (options2.step == "enforced") {
                      CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;
                      CoSEConstants.ENFORCE_CONSTRAINTS = true;
                      CoSEConstants.APPLY_LAYOUT = false;
                    }
                    if (options2.step == "cose") {
                      CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;
                      CoSEConstants.ENFORCE_CONSTRAINTS = false;
                      CoSEConstants.APPLY_LAYOUT = true;
                    }
                    if (options2.step == "all") {
                      if (options2.randomize) CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;
                      else CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;
                      CoSEConstants.ENFORCE_CONSTRAINTS = true;
                      CoSEConstants.APPLY_LAYOUT = true;
                    }
                    if (options2.fixedNodeConstraint || options2.alignmentConstraint || options2.relativePlacementConstraint) {
                      CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false;
                    } else {
                      CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true;
                    }
                    var coseLayout3 = new CoSELayout();
                    var gm = coseLayout3.newGraphManager();
                    processChildrenList(gm.addRoot(), aux.getTopMostNodes(nodes5), coseLayout3, options2);
                    processEdges(coseLayout3, gm, edges3);
                    processConstraints(coseLayout3, options2);
                    coseLayout3.runLayout();
                    return idToLNode;
                  }, "coseLayout");
                  module3.exports = { coseLayout };
                })
              ),
              /***/
              212: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var _createClass2 = /* @__PURE__ */ (function() {
                    function defineProperties(target, props) {
                      for (var i2 = 0; i2 < props.length; i2++) {
                        var descriptor = props[i2];
                        descriptor.enumerable = descriptor.enumerable || false;
                        descriptor.configurable = true;
                        if ("value" in descriptor) descriptor.writable = true;
                        Object.defineProperty(target, descriptor.key, descriptor);
                      }
                    }
                    __name(defineProperties, "defineProperties");
                    return function(Constructor, protoProps, staticProps) {
                      if (protoProps) defineProperties(Constructor.prototype, protoProps);
                      if (staticProps) defineProperties(Constructor, staticProps);
                      return Constructor;
                    };
                  })();
                  function _classCallCheck2(instance2, Constructor) {
                    if (!(instance2 instanceof Constructor)) {
                      throw new TypeError("Cannot call a class as a function");
                    }
                  }
                  __name(_classCallCheck2, "_classCallCheck");
                  var assign7 = __webpack_require__2(658);
                  var aux = __webpack_require__2(548);
                  var _require = __webpack_require__2(657), spectralLayout = _require.spectralLayout;
                  var _require2 = __webpack_require__2(816), coseLayout = _require2.coseLayout;
                  var defaults5 = Object.freeze({
                    // 'draft', 'default' or 'proof' 
                    // - 'draft' only applies spectral layout 
                    // - 'default' improves the quality with subsequent CoSE layout (fast cooling rate)
                    // - 'proof' improves the quality with subsequent CoSE layout (slow cooling rate) 
                    quality: "default",
                    // Use random node positions at beginning of layout
                    // if this is set to false, then quality option must be "proof"
                    randomize: true,
                    // Whether or not to animate the layout
                    animate: true,
                    // Duration of animation in ms, if enabled
                    animationDuration: 1e3,
                    // Easing of animation, if enabled
                    animationEasing: void 0,
                    // Fit the viewport to the repositioned nodes
                    fit: true,
                    // Padding around layout
                    padding: 30,
                    // Whether to include labels in node dimensions. Valid in "proof" quality
                    nodeDimensionsIncludeLabels: false,
                    // Whether or not simple nodes (non-compound nodes) are of uniform dimensions
                    uniformNodeDimensions: false,
                    // Whether to pack disconnected components - valid only if randomize: true
                    packComponents: true,
                    // Layout step - all, transformed, enforced, cose - for debug purpose only
                    step: "all",
                    /* spectral layout options */
                    // False for random, true for greedy
                    samplingType: true,
                    // Sample size to construct distance matrix
                    sampleSize: 25,
                    // Separation amount between nodes
                    nodeSeparation: 75,
                    // Power iteration tolerance
                    piTol: 1e-7,
                    /* CoSE layout options */
                    // Node repulsion (non overlapping) multiplier
                    nodeRepulsion: /* @__PURE__ */ __name(function nodeRepulsion4(node2) {
                      return 4500;
                    }, "nodeRepulsion"),
                    // Ideal edge (non nested) length
                    idealEdgeLength: /* @__PURE__ */ __name(function idealEdgeLength2(edge) {
                      return 50;
                    }, "idealEdgeLength"),
                    // Divisor to compute edge forces
                    edgeElasticity: /* @__PURE__ */ __name(function edgeElasticity2(edge) {
                      return 0.45;
                    }, "edgeElasticity"),
                    // Nesting factor (multiplier) to compute ideal edge length for nested edges
                    nestingFactor: 0.1,
                    // Gravity force (constant)
                    gravity: 0.25,
                    // Maximum number of iterations to perform
                    numIter: 2500,
                    // For enabling tiling
                    tile: true,
                    // The function that specifies the criteria for comparing nodes while sorting them during tiling operation.
                    // Takes the node id as a parameter and the default tiling operation is perfomed when this option is not set.
                    tilingCompareBy: void 0,
                    // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)
                    tilingPaddingVertical: 10,
                    // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)
                    tilingPaddingHorizontal: 10,
                    // Gravity range (constant) for compounds
                    gravityRangeCompound: 1.5,
                    // Gravity force (constant) for compounds
                    gravityCompound: 1,
                    // Gravity range (constant)
                    gravityRange: 3.8,
                    // Initial cooling factor for incremental layout  
                    initialEnergyOnIncremental: 0.3,
                    /* constraint options */
                    // Fix required nodes to predefined positions
                    // [{nodeId: 'n1', position: {x: 100, y: 200}, {...}]
                    fixedNodeConstraint: void 0,
                    // Align required nodes in vertical/horizontal direction
                    // {vertical: [['n1', 'n2')], ['n3', 'n4']], horizontal: ['n2', 'n4']}
                    alignmentConstraint: void 0,
                    // Place two nodes relatively in vertical/horizontal direction 
                    // [{top: 'n1', bottom: 'n2', gap: 100}, {left: 'n3', right: 'n4', gap: 75}]
                    relativePlacementConstraint: void 0,
                    /* layout event callbacks */
                    ready: /* @__PURE__ */ __name(function ready4() {
                    }, "ready"),
                    // on layoutready
                    stop: /* @__PURE__ */ __name(function stop5() {
                    }, "stop")
                    // on layoutstop
                  });
                  var Layout2 = (function() {
                    function Layout3(options2) {
                      _classCallCheck2(this, Layout3);
                      this.options = assign7({}, defaults5, options2);
                    }
                    __name(Layout3, "Layout");
                    _createClass2(Layout3, [{
                      key: "run",
                      value: /* @__PURE__ */ __name(function run5() {
                        var layout7 = this;
                        var options2 = this.options;
                        var cy = options2.cy;
                        var eles = options2.eles;
                        var spectralResult = [];
                        var xCoords = void 0;
                        var yCoords = void 0;
                        var coseResult = [];
                        var components3 = void 0;
                        var componentCenters = [];
                        if (options2.fixedNodeConstraint && (!Array.isArray(options2.fixedNodeConstraint) || options2.fixedNodeConstraint.length == 0)) {
                          options2.fixedNodeConstraint = void 0;
                        }
                        if (options2.alignmentConstraint) {
                          if (options2.alignmentConstraint.vertical && (!Array.isArray(options2.alignmentConstraint.vertical) || options2.alignmentConstraint.vertical.length == 0)) {
                            options2.alignmentConstraint.vertical = void 0;
                          }
                          if (options2.alignmentConstraint.horizontal && (!Array.isArray(options2.alignmentConstraint.horizontal) || options2.alignmentConstraint.horizontal.length == 0)) {
                            options2.alignmentConstraint.horizontal = void 0;
                          }
                        }
                        if (options2.relativePlacementConstraint && (!Array.isArray(options2.relativePlacementConstraint) || options2.relativePlacementConstraint.length == 0)) {
                          options2.relativePlacementConstraint = void 0;
                        }
                        var constraintExist = options2.fixedNodeConstraint || options2.alignmentConstraint || options2.relativePlacementConstraint;
                        if (constraintExist) {
                          options2.tile = false;
                          options2.packComponents = false;
                        }
                        var layUtil = void 0;
                        var packingEnabled = false;
                        if (cy.layoutUtilities && options2.packComponents) {
                          layUtil = cy.layoutUtilities("get");
                          if (!layUtil) layUtil = cy.layoutUtilities();
                          packingEnabled = true;
                        }
                        if (eles.nodes().length > 0) {
                          if (!packingEnabled) {
                            var boundingBox3 = options2.eles.boundingBox();
                            componentCenters.push({ x: boundingBox3.x1 + boundingBox3.w / 2, y: boundingBox3.y1 + boundingBox3.h / 2 });
                            if (options2.randomize) {
                              var result = spectralLayout(options2);
                              spectralResult.push(result);
                            }
                            if (options2.quality == "default" || options2.quality == "proof") {
                              coseResult.push(coseLayout(options2, spectralResult[0]));
                              aux.relocateComponent(componentCenters[0], coseResult[0], options2);
                            } else {
                              aux.relocateComponent(componentCenters[0], spectralResult[0], options2);
                            }
                          } else {
                            var topMostNodes = aux.getTopMostNodes(options2.eles.nodes());
                            components3 = aux.connectComponents(cy, options2.eles, topMostNodes);
                            components3.forEach(function(component2) {
                              var boundingBox4 = component2.boundingBox();
                              componentCenters.push({ x: boundingBox4.x1 + boundingBox4.w / 2, y: boundingBox4.y1 + boundingBox4.h / 2 });
                            });
                            if (options2.randomize) {
                              components3.forEach(function(component2) {
                                options2.eles = component2;
                                spectralResult.push(spectralLayout(options2));
                              });
                            }
                            if (options2.quality == "default" || options2.quality == "proof") {
                              var toBeTiledNodes = cy.collection();
                              if (options2.tile) {
                                var nodeIndexes = /* @__PURE__ */ new Map();
                                var _xCoords = [];
                                var _yCoords = [];
                                var count2 = 0;
                                var tempSpectralResult = { nodeIndexes, xCoords: _xCoords, yCoords: _yCoords };
                                var indexesToBeDeleted = [];
                                components3.forEach(function(component2, index) {
                                  if (component2.edges().length == 0) {
                                    component2.nodes().forEach(function(node2, i3) {
                                      toBeTiledNodes.merge(component2.nodes()[i3]);
                                      if (!node2.isParent()) {
                                        tempSpectralResult.nodeIndexes.set(component2.nodes()[i3].id(), count2++);
                                        tempSpectralResult.xCoords.push(component2.nodes()[0].position().x);
                                        tempSpectralResult.yCoords.push(component2.nodes()[0].position().y);
                                      }
                                    });
                                    indexesToBeDeleted.push(index);
                                  }
                                });
                                if (toBeTiledNodes.length > 1) {
                                  var _boundingBox = toBeTiledNodes.boundingBox();
                                  componentCenters.push({ x: _boundingBox.x1 + _boundingBox.w / 2, y: _boundingBox.y1 + _boundingBox.h / 2 });
                                  components3.push(toBeTiledNodes);
                                  spectralResult.push(tempSpectralResult);
                                  for (var i2 = indexesToBeDeleted.length - 1; i2 >= 0; i2--) {
                                    components3.splice(indexesToBeDeleted[i2], 1);
                                    spectralResult.splice(indexesToBeDeleted[i2], 1);
                                    componentCenters.splice(indexesToBeDeleted[i2], 1);
                                  }
                                  ;
                                }
                              }
                              components3.forEach(function(component2, index) {
                                options2.eles = component2;
                                coseResult.push(coseLayout(options2, spectralResult[index]));
                                aux.relocateComponent(componentCenters[index], coseResult[index], options2);
                              });
                            } else {
                              components3.forEach(function(component2, index) {
                                aux.relocateComponent(componentCenters[index], spectralResult[index], options2);
                              });
                            }
                            var componentsEvaluated = /* @__PURE__ */ new Set();
                            if (components3.length > 1) {
                              var subgraphs = [];
                              var hiddenEles = eles.filter(function(ele) {
                                return ele.css("display") == "none";
                              });
                              components3.forEach(function(component2, index) {
                                var nodeIndexes2 = void 0;
                                if (options2.quality == "draft") {
                                  nodeIndexes2 = spectralResult[index].nodeIndexes;
                                }
                                if (component2.nodes().not(hiddenEles).length > 0) {
                                  var subgraph = {};
                                  subgraph.edges = [];
                                  subgraph.nodes = [];
                                  var nodeIndex = void 0;
                                  component2.nodes().not(hiddenEles).forEach(function(node2) {
                                    if (options2.quality == "draft") {
                                      if (!node2.isParent()) {
                                        nodeIndex = nodeIndexes2.get(node2.id());
                                        subgraph.nodes.push({ x: spectralResult[index].xCoords[nodeIndex] - node2.boundingbox().w / 2, y: spectralResult[index].yCoords[nodeIndex] - node2.boundingbox().h / 2, width: node2.boundingbox().w, height: node2.boundingbox().h });
                                      } else {
                                        var parentInfo = aux.calcBoundingBox(node2, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes2);
                                        subgraph.nodes.push({ x: parentInfo.topLeftX, y: parentInfo.topLeftY, width: parentInfo.width, height: parentInfo.height });
                                      }
                                    } else {
                                      if (coseResult[index][node2.id()]) {
                                        subgraph.nodes.push({ x: coseResult[index][node2.id()].getLeft(), y: coseResult[index][node2.id()].getTop(), width: coseResult[index][node2.id()].getWidth(), height: coseResult[index][node2.id()].getHeight() });
                                      }
                                    }
                                  });
                                  component2.edges().forEach(function(edge) {
                                    var source = edge.source();
                                    var target = edge.target();
                                    if (source.css("display") != "none" && target.css("display") != "none") {
                                      if (options2.quality == "draft") {
                                        var sourceNodeIndex = nodeIndexes2.get(source.id());
                                        var targetNodeIndex = nodeIndexes2.get(target.id());
                                        var sourceCenter = [];
                                        var targetCenter = [];
                                        if (source.isParent()) {
                                          var parentInfo = aux.calcBoundingBox(source, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes2);
                                          sourceCenter.push(parentInfo.topLeftX + parentInfo.width / 2);
                                          sourceCenter.push(parentInfo.topLeftY + parentInfo.height / 2);
                                        } else {
                                          sourceCenter.push(spectralResult[index].xCoords[sourceNodeIndex]);
                                          sourceCenter.push(spectralResult[index].yCoords[sourceNodeIndex]);
                                        }
                                        if (target.isParent()) {
                                          var _parentInfo = aux.calcBoundingBox(target, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes2);
                                          targetCenter.push(_parentInfo.topLeftX + _parentInfo.width / 2);
                                          targetCenter.push(_parentInfo.topLeftY + _parentInfo.height / 2);
                                        } else {
                                          targetCenter.push(spectralResult[index].xCoords[targetNodeIndex]);
                                          targetCenter.push(spectralResult[index].yCoords[targetNodeIndex]);
                                        }
                                        subgraph.edges.push({ startX: sourceCenter[0], startY: sourceCenter[1], endX: targetCenter[0], endY: targetCenter[1] });
                                      } else {
                                        if (coseResult[index][source.id()] && coseResult[index][target.id()]) {
                                          subgraph.edges.push({ startX: coseResult[index][source.id()].getCenterX(), startY: coseResult[index][source.id()].getCenterY(), endX: coseResult[index][target.id()].getCenterX(), endY: coseResult[index][target.id()].getCenterY() });
                                        }
                                      }
                                    }
                                  });
                                  if (subgraph.nodes.length > 0) {
                                    subgraphs.push(subgraph);
                                    componentsEvaluated.add(index);
                                  }
                                }
                              });
                              var shiftResult = layUtil.packComponents(subgraphs, options2.randomize).shifts;
                              if (options2.quality == "draft") {
                                spectralResult.forEach(function(result2, index) {
                                  var newXCoords = result2.xCoords.map(function(x5) {
                                    return x5 + shiftResult[index].dx;
                                  });
                                  var newYCoords = result2.yCoords.map(function(y6) {
                                    return y6 + shiftResult[index].dy;
                                  });
                                  result2.xCoords = newXCoords;
                                  result2.yCoords = newYCoords;
                                });
                              } else {
                                var _count = 0;
                                componentsEvaluated.forEach(function(index) {
                                  Object.keys(coseResult[index]).forEach(function(item) {
                                    var nodeRectangle = coseResult[index][item];
                                    nodeRectangle.setCenter(nodeRectangle.getCenterX() + shiftResult[_count].dx, nodeRectangle.getCenterY() + shiftResult[_count].dy);
                                  });
                                  _count++;
                                });
                              }
                            }
                          }
                        }
                        var getPositions = /* @__PURE__ */ __name(function getPositions2(ele, i3) {
                          if (options2.quality == "default" || options2.quality == "proof") {
                            if (typeof ele === "number") {
                              ele = i3;
                            }
                            var pos = void 0;
                            var node2 = void 0;
                            var theId = ele.data("id");
                            coseResult.forEach(function(result2) {
                              if (theId in result2) {
                                pos = { x: result2[theId].getRect().getCenterX(), y: result2[theId].getRect().getCenterY() };
                                node2 = result2[theId];
                              }
                            });
                            if (options2.nodeDimensionsIncludeLabels) {
                              if (node2.labelWidth) {
                                if (node2.labelPosHorizontal == "left") {
                                  pos.x += node2.labelWidth / 2;
                                } else if (node2.labelPosHorizontal == "right") {
                                  pos.x -= node2.labelWidth / 2;
                                }
                              }
                              if (node2.labelHeight) {
                                if (node2.labelPosVertical == "top") {
                                  pos.y += node2.labelHeight / 2;
                                } else if (node2.labelPosVertical == "bottom") {
                                  pos.y -= node2.labelHeight / 2;
                                }
                              }
                            }
                            if (pos == void 0) pos = { x: ele.position("x"), y: ele.position("y") };
                            return {
                              x: pos.x,
                              y: pos.y
                            };
                          } else {
                            var _pos = void 0;
                            spectralResult.forEach(function(result2) {
                              var index = result2.nodeIndexes.get(ele.id());
                              if (index != void 0) {
                                _pos = { x: result2.xCoords[index], y: result2.yCoords[index] };
                              }
                            });
                            if (_pos == void 0) _pos = { x: ele.position("x"), y: ele.position("y") };
                            return {
                              x: _pos.x,
                              y: _pos.y
                            };
                          }
                        }, "getPositions");
                        if (options2.quality == "default" || options2.quality == "proof" || options2.randomize) {
                          var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);
                          var _hiddenEles = eles.filter(function(ele) {
                            return ele.css("display") == "none";
                          });
                          options2.eles = eles.not(_hiddenEles);
                          eles.nodes().not(":parent").not(_hiddenEles).layoutPositions(layout7, options2, getPositions);
                          if (parentsWithoutChildren.length > 0) {
                            parentsWithoutChildren.forEach(function(ele) {
                              ele.position(getPositions(ele));
                            });
                          }
                        } else {
                          console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.");
                        }
                      }, "run")
                    }]);
                    return Layout3;
                  })();
                  module3.exports = Layout2;
                })
              ),
              /***/
              657: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var aux = __webpack_require__2(548);
                  var Matrix = __webpack_require__2(140).layoutBase.Matrix;
                  var SVD = __webpack_require__2(140).layoutBase.SVD;
                  var spectralLayout = /* @__PURE__ */ __name(function spectralLayout2(options2) {
                    var cy = options2.cy;
                    var eles = options2.eles;
                    var nodes5 = eles.nodes();
                    var parentNodes = eles.nodes(":parent");
                    var dummyNodes = /* @__PURE__ */ new Map();
                    var nodeIndexes = /* @__PURE__ */ new Map();
                    var parentChildMap = /* @__PURE__ */ new Map();
                    var allNodesNeighborhood = [];
                    var xCoords = [];
                    var yCoords = [];
                    var samplesColumn = [];
                    var minDistancesColumn = [];
                    var C3 = [];
                    var PHI = [];
                    var INV = [];
                    var firstSample = void 0;
                    var nodeSize = void 0;
                    var infinity = 1e8;
                    var small = 1e-9;
                    var piTol = options2.piTol;
                    var samplingType = options2.samplingType;
                    var nodeSeparation = options2.nodeSeparation;
                    var sampleSize = void 0;
                    var randomSampleCR = /* @__PURE__ */ __name(function randomSampleCR2() {
                      var sample2 = 0;
                      var count2 = 0;
                      var flag = false;
                      while (count2 < sampleSize) {
                        sample2 = Math.floor(Math.random() * nodeSize);
                        flag = false;
                        for (var i3 = 0; i3 < count2; i3++) {
                          if (samplesColumn[i3] == sample2) {
                            flag = true;
                            break;
                          }
                        }
                        if (!flag) {
                          samplesColumn[count2] = sample2;
                          count2++;
                        } else {
                          continue;
                        }
                      }
                    }, "randomSampleCR");
                    var BFS = /* @__PURE__ */ __name(function BFS2(pivot, index2, samplingMethod) {
                      var path4 = [];
                      var front = 0;
                      var back = 0;
                      var current = 0;
                      var temp = void 0;
                      var distance3 = [];
                      var max_dist = 0;
                      var max_ind = 1;
                      for (var i3 = 0; i3 < nodeSize; i3++) {
                        distance3[i3] = infinity;
                      }
                      path4[back] = pivot;
                      distance3[pivot] = 0;
                      while (back >= front) {
                        current = path4[front++];
                        var neighbors = allNodesNeighborhood[current];
                        for (var _i = 0; _i < neighbors.length; _i++) {
                          temp = nodeIndexes.get(neighbors[_i]);
                          if (distance3[temp] == infinity) {
                            distance3[temp] = distance3[current] + 1;
                            path4[++back] = temp;
                          }
                        }
                        C3[current][index2] = distance3[current] * nodeSeparation;
                      }
                      if (samplingMethod) {
                        for (var _i2 = 0; _i2 < nodeSize; _i2++) {
                          if (C3[_i2][index2] < minDistancesColumn[_i2]) minDistancesColumn[_i2] = C3[_i2][index2];
                        }
                        for (var _i3 = 0; _i3 < nodeSize; _i3++) {
                          if (minDistancesColumn[_i3] > max_dist) {
                            max_dist = minDistancesColumn[_i3];
                            max_ind = _i3;
                          }
                        }
                      }
                      return max_ind;
                    }, "BFS");
                    var allBFS = /* @__PURE__ */ __name(function allBFS2(samplingMethod) {
                      var sample2 = void 0;
                      if (!samplingMethod) {
                        randomSampleCR();
                        for (var i3 = 0; i3 < sampleSize; i3++) {
                          BFS(samplesColumn[i3], i3, samplingMethod, false);
                        }
                      } else {
                        sample2 = Math.floor(Math.random() * nodeSize);
                        firstSample = sample2;
                        for (var _i4 = 0; _i4 < nodeSize; _i4++) {
                          minDistancesColumn[_i4] = infinity;
                        }
                        for (var _i5 = 0; _i5 < sampleSize; _i5++) {
                          samplesColumn[_i5] = sample2;
                          sample2 = BFS(sample2, _i5, samplingMethod);
                        }
                      }
                      for (var _i6 = 0; _i6 < nodeSize; _i6++) {
                        for (var j3 = 0; j3 < sampleSize; j3++) {
                          C3[_i6][j3] *= C3[_i6][j3];
                        }
                      }
                      for (var _i7 = 0; _i7 < sampleSize; _i7++) {
                        PHI[_i7] = [];
                      }
                      for (var _i8 = 0; _i8 < sampleSize; _i8++) {
                        for (var _j = 0; _j < sampleSize; _j++) {
                          PHI[_i8][_j] = C3[samplesColumn[_j]][_i8];
                        }
                      }
                    }, "allBFS");
                    var sample = /* @__PURE__ */ __name(function sample2() {
                      var SVDResult = SVD.svd(PHI);
                      var a_q = SVDResult.S;
                      var a_u = SVDResult.U;
                      var a_v = SVDResult.V;
                      var max_s = a_q[0] * a_q[0] * a_q[0];
                      var a_Sig = [];
                      for (var i3 = 0; i3 < sampleSize; i3++) {
                        a_Sig[i3] = [];
                        for (var j3 = 0; j3 < sampleSize; j3++) {
                          a_Sig[i3][j3] = 0;
                          if (i3 == j3) {
                            a_Sig[i3][j3] = a_q[i3] / (a_q[i3] * a_q[i3] + max_s / (a_q[i3] * a_q[i3]));
                          }
                        }
                      }
                      INV = Matrix.multMat(Matrix.multMat(a_v, a_Sig), Matrix.transpose(a_u));
                    }, "sample");
                    var powerIteration = /* @__PURE__ */ __name(function powerIteration2() {
                      var theta1 = void 0;
                      var theta2 = void 0;
                      var Y1 = [];
                      var Y22 = [];
                      var V1 = [];
                      var V22 = [];
                      for (var i3 = 0; i3 < nodeSize; i3++) {
                        Y1[i3] = Math.random();
                        Y22[i3] = Math.random();
                      }
                      Y1 = Matrix.normalize(Y1);
                      Y22 = Matrix.normalize(Y22);
                      var count2 = 0;
                      var current = small;
                      var previous = small;
                      var temp = void 0;
                      while (true) {
                        count2++;
                        for (var _i9 = 0; _i9 < nodeSize; _i9++) {
                          V1[_i9] = Y1[_i9];
                        }
                        Y1 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V1), C3, INV));
                        theta1 = Matrix.dotProduct(V1, Y1);
                        Y1 = Matrix.normalize(Y1);
                        current = Matrix.dotProduct(V1, Y1);
                        temp = Math.abs(current / previous);
                        if (temp <= 1 + piTol && temp >= 1) {
                          break;
                        }
                        previous = current;
                      }
                      for (var _i10 = 0; _i10 < nodeSize; _i10++) {
                        V1[_i10] = Y1[_i10];
                      }
                      count2 = 0;
                      previous = small;
                      while (true) {
                        count2++;
                        for (var _i11 = 0; _i11 < nodeSize; _i11++) {
                          V22[_i11] = Y22[_i11];
                        }
                        V22 = Matrix.minusOp(V22, Matrix.multCons(V1, Matrix.dotProduct(V1, V22)));
                        Y22 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V22), C3, INV));
                        theta2 = Matrix.dotProduct(V22, Y22);
                        Y22 = Matrix.normalize(Y22);
                        current = Matrix.dotProduct(V22, Y22);
                        temp = Math.abs(current / previous);
                        if (temp <= 1 + piTol && temp >= 1) {
                          break;
                        }
                        previous = current;
                      }
                      for (var _i12 = 0; _i12 < nodeSize; _i12++) {
                        V22[_i12] = Y22[_i12];
                      }
                      xCoords = Matrix.multCons(V1, Math.sqrt(Math.abs(theta1)));
                      yCoords = Matrix.multCons(V22, Math.sqrt(Math.abs(theta2)));
                    }, "powerIteration");
                    aux.connectComponents(cy, eles, aux.getTopMostNodes(nodes5), dummyNodes);
                    parentNodes.forEach(function(ele) {
                      aux.connectComponents(cy, eles, aux.getTopMostNodes(ele.descendants().intersection(eles)), dummyNodes);
                    });
                    var index = 0;
                    for (var i2 = 0; i2 < nodes5.length; i2++) {
                      if (!nodes5[i2].isParent()) {
                        nodeIndexes.set(nodes5[i2].id(), index++);
                      }
                    }
                    var _iteratorNormalCompletion = true;
                    var _didIteratorError = false;
                    var _iteratorError = void 0;
                    try {
                      for (var _iterator = dummyNodes.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                        var key = _step.value;
                        nodeIndexes.set(key, index++);
                      }
                    } catch (err) {
                      _didIteratorError = true;
                      _iteratorError = err;
                    } finally {
                      try {
                        if (!_iteratorNormalCompletion && _iterator.return) {
                          _iterator.return();
                        }
                      } finally {
                        if (_didIteratorError) {
                          throw _iteratorError;
                        }
                      }
                    }
                    for (var _i13 = 0; _i13 < nodeIndexes.size; _i13++) {
                      allNodesNeighborhood[_i13] = [];
                    }
                    parentNodes.forEach(function(ele) {
                      var children2 = ele.children().intersection(eles);
                      while (children2.nodes(":childless").length == 0) {
                        children2 = children2.nodes()[0].children().intersection(eles);
                      }
                      var index2 = 0;
                      var min10 = children2.nodes(":childless")[0].connectedEdges().length;
                      children2.nodes(":childless").forEach(function(ele2, i3) {
                        if (ele2.connectedEdges().length < min10) {
                          min10 = ele2.connectedEdges().length;
                          index2 = i3;
                        }
                      });
                      parentChildMap.set(ele.id(), children2.nodes(":childless")[index2].id());
                    });
                    nodes5.forEach(function(ele) {
                      var eleIndex = void 0;
                      if (ele.isParent()) eleIndex = nodeIndexes.get(parentChildMap.get(ele.id()));
                      else eleIndex = nodeIndexes.get(ele.id());
                      ele.neighborhood().nodes().forEach(function(node2) {
                        if (eles.intersection(ele.edgesWith(node2)).length > 0) {
                          if (node2.isParent()) allNodesNeighborhood[eleIndex].push(parentChildMap.get(node2.id()));
                          else allNodesNeighborhood[eleIndex].push(node2.id());
                        }
                      });
                    });
                    var _loop = /* @__PURE__ */ __name(function _loop2(_key2) {
                      var eleIndex = nodeIndexes.get(_key2);
                      var disconnectedId = void 0;
                      dummyNodes.get(_key2).forEach(function(id41) {
                        if (cy.getElementById(id41).isParent()) disconnectedId = parentChildMap.get(id41);
                        else disconnectedId = id41;
                        allNodesNeighborhood[eleIndex].push(disconnectedId);
                        allNodesNeighborhood[nodeIndexes.get(disconnectedId)].push(_key2);
                      });
                    }, "_loop");
                    var _iteratorNormalCompletion2 = true;
                    var _didIteratorError2 = false;
                    var _iteratorError2 = void 0;
                    try {
                      for (var _iterator2 = dummyNodes.keys()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
                        var _key = _step2.value;
                        _loop(_key);
                      }
                    } catch (err) {
                      _didIteratorError2 = true;
                      _iteratorError2 = err;
                    } finally {
                      try {
                        if (!_iteratorNormalCompletion2 && _iterator2.return) {
                          _iterator2.return();
                        }
                      } finally {
                        if (_didIteratorError2) {
                          throw _iteratorError2;
                        }
                      }
                    }
                    nodeSize = nodeIndexes.size;
                    var spectralResult = void 0;
                    if (nodeSize > 2) {
                      sampleSize = nodeSize < options2.sampleSize ? nodeSize : options2.sampleSize;
                      for (var _i14 = 0; _i14 < nodeSize; _i14++) {
                        C3[_i14] = [];
                      }
                      for (var _i15 = 0; _i15 < sampleSize; _i15++) {
                        INV[_i15] = [];
                      }
                      if (options2.quality == "draft" || options2.step == "all") {
                        allBFS(samplingType);
                        sample();
                        powerIteration();
                        spectralResult = { nodeIndexes, xCoords, yCoords };
                      } else {
                        nodeIndexes.forEach(function(value2, key2) {
                          xCoords.push(cy.getElementById(key2).position("x"));
                          yCoords.push(cy.getElementById(key2).position("y"));
                        });
                        spectralResult = { nodeIndexes, xCoords, yCoords };
                      }
                      return spectralResult;
                    } else {
                      var iterator = nodeIndexes.keys();
                      var firstNode = cy.getElementById(iterator.next().value);
                      var firstNodePos = firstNode.position();
                      var firstNodeWidth = firstNode.outerWidth();
                      xCoords.push(firstNodePos.x);
                      yCoords.push(firstNodePos.y);
                      if (nodeSize == 2) {
                        var secondNode = cy.getElementById(iterator.next().value);
                        var secondNodeWidth = secondNode.outerWidth();
                        xCoords.push(firstNodePos.x + firstNodeWidth / 2 + secondNodeWidth / 2 + options2.idealEdgeLength);
                        yCoords.push(firstNodePos.y);
                      }
                      spectralResult = { nodeIndexes, xCoords, yCoords };
                      return spectralResult;
                    }
                  }, "spectralLayout");
                  module3.exports = { spectralLayout };
                })
              ),
              /***/
              579: (
                /***/
                ((module3, __unused_webpack_exports, __webpack_require__2) => {
                  var impl2 = __webpack_require__2(212);
                  var register = /* @__PURE__ */ __name(function register2(cytoscape4) {
                    if (!cytoscape4) {
                      return;
                    }
                    cytoscape4("layout", "fcose", impl2);
                  }, "register");
                  if (typeof cytoscape !== "undefined") {
                    register(cytoscape);
                  }
                  module3.exports = register;
                })
              ),
              /***/
              140: (
                /***/
                ((module3) => {
                  module3.exports = __WEBPACK_EXTERNAL_MODULE__140__;
                })
              )
              /******/
            };
            var __webpack_module_cache__ = {};
            function __webpack_require__(moduleId) {
              var cachedModule = __webpack_module_cache__[moduleId];
              if (cachedModule !== void 0) {
                return cachedModule.exports;
              }
              var module3 = __webpack_module_cache__[moduleId] = {
                /******/
                // no module.id needed
                /******/
                // no module.loaded needed
                /******/
                exports: {}
                /******/
              };
              __webpack_modules__[moduleId](module3, module3.exports, __webpack_require__);
              return module3.exports;
            }
            __name(__webpack_require__, "__webpack_require__");
            var __webpack_exports__ = __webpack_require__(579);
            return __webpack_exports__;
          })()
        );
      });
    }
  });

  // src/diagrams/architecture/architectureSeed.ts
  function withSeededRandom(seed, fn3) {
    if (seed === 0) {
      return fn3();
    }
    const original = Math.random;
    let state4 = seed >>> 0;
    Math.random = function() {
      state4 = state4 + 1831565813 >>> 0;
      let t4 = state4;
      t4 = Math.imul(t4 ^ t4 >>> 15, t4 | 1);
      t4 ^= t4 + Math.imul(t4 ^ t4 >>> 7, t4 | 61);
      return ((t4 ^ t4 >>> 14) >>> 0) / 4294967296;
    };
    try {
      return fn3();
    } finally {
      Math.random = original;
    }
  }
  var init_architectureSeed = __esm({
    "src/diagrams/architecture/architectureSeed.ts"() {
      "use strict";
      __name(withSeededRandom, "withSeededRandom");
    }
  });

  // src/diagrams/architecture/architectureIcons.ts
  var wrapIcon, architectureIcons;
  var init_architectureIcons = __esm({
    "src/diagrams/architecture/architectureIcons.ts"() {
      "use strict";
      init_icons();
      wrapIcon = /* @__PURE__ */ __name((icon2) => {
        return `<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/>${icon2}</g>`;
      }, "wrapIcon");
      architectureIcons = {
        prefix: "mermaid-architecture",
        height: 80,
        width: 80,
        icons: {
          database: {
            body: wrapIcon(
              '<path id="b" data-name="4" d="m20,57.86c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="c" data-name="3" d="m20,45.95c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="d" data-name="2" d="m20,34.05c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse id="e" data-name="1" cx="40" cy="22.14" rx="20" ry="7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="20" y1="57.86" x2="20" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="60" y1="57.86" x2="60" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>'
            )
          },
          server: {
            body: wrapIcon(
              '<rect x="17.5" y="17.5" width="45" height="45" rx="2" ry="2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="32.5" x2="62.5" y2="32.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="47.5" x2="62.5" y2="47.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><g><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g>'
            )
          },
          disk: {
            body: wrapIcon(
              '<rect x="20" y="15" width="40" height="50" rx="1" ry="1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="14" ry="14.58" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="4" ry="4.17" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m37.51,42.52l-4.83,13.22c-.26.71-1.1,1.02-1.76.64l-4.18-2.42c-.66-.38-.81-1.26-.33-1.84l9.01-10.8c.88-1.05,2.56-.08,2.09,1.2Z" style="fill: #fff; stroke-width: 0px;"/>'
            )
          },
          internet: {
            body: wrapIcon(
              '<circle cx="40" cy="40" r="22.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="40" y1="17.5" x2="40" y2="62.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="40" x2="62.5" y2="40" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m39.99,17.51c-15.28,11.1-15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m40.01,17.51c15.28,11.1,15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="30.1" x2="60.25" y2="30.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="49.9" x2="60.25" y2="49.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>'
            )
          },
          cloud: {
            body: wrapIcon(
              '<path d="m65,47.5c0,2.76-2.24,5-5,5H20c-2.76,0-5-2.24-5-5,0-1.87,1.03-3.51,2.56-4.36-.04-.21-.06-.42-.06-.64,0-2.6,2.48-4.74,5.65-4.97,1.65-4.51,6.34-7.76,11.85-7.76.86,0,1.69.08,2.5.23,2.09-1.57,4.69-2.5,7.5-2.5,6.1,0,11.19,4.38,12.28,10.17,2.14.56,3.72,2.51,3.72,4.83,0,.03,0,.07-.01.1,2.29.46,4.01,2.48,4.01,4.9Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>'
            )
          },
          unknown: unknownIcon,
          blank: {
            body: wrapIcon("")
          }
        }
      };
    }
  });

  // src/diagrams/architecture/svgDraw.ts
  var drawEdges, drawGroups, drawServices, drawJunctions;
  var init_svgDraw6 = __esm({
    "src/diagrams/architecture/svgDraw.ts"() {
      "use strict";
      init_diagramAPI();
      init_createText();
      init_icons();
      init_common();
      init_architectureIcons();
      init_architectureTypes();
      init_utils2();
      drawEdges = /* @__PURE__ */ __name(async function(edgesEl, cy, db12, diagramId3) {
        const padding = db12.getConfigField("padding");
        const iconSize = db12.getConfigField("iconSize");
        const halfIconSize = iconSize / 2;
        const arrowSize = iconSize / 6;
        const halfArrowSize = arrowSize / 2;
        await Promise.all(
          cy.edges().map(async (edge) => {
            const {
              source,
              sourceDir,
              sourceArrow,
              sourceGroup,
              target,
              targetDir,
              targetArrow,
              targetGroup,
              label
            } = edgeData(edge);
            let { x: startX2, y: startY2 } = edge[0].sourceEndpoint();
            const { x: midX, y: midY } = edge[0].midpoint();
            let { x: endX, y: endY } = edge[0].targetEndpoint();
            const groupEdgeShift = padding + 4;
            if (sourceGroup) {
              if (isArchitectureDirectionX(sourceDir)) {
                startX2 += sourceDir === "L" ? -groupEdgeShift : groupEdgeShift;
              } else {
                startY2 += sourceDir === "T" ? -groupEdgeShift : groupEdgeShift + 18;
              }
            }
            if (targetGroup) {
              if (isArchitectureDirectionX(targetDir)) {
                endX += targetDir === "L" ? -groupEdgeShift : groupEdgeShift;
              } else {
                endY += targetDir === "T" ? -groupEdgeShift : groupEdgeShift + 18;
              }
            }
            if (!sourceGroup && db12.getNode(source)?.type === "junction") {
              if (isArchitectureDirectionX(sourceDir)) {
                startX2 += sourceDir === "L" ? halfIconSize : -halfIconSize;
              } else {
                startY2 += sourceDir === "T" ? halfIconSize : -halfIconSize;
              }
            }
            if (!targetGroup && db12.getNode(target)?.type === "junction") {
              if (isArchitectureDirectionX(targetDir)) {
                endX += targetDir === "L" ? halfIconSize : -halfIconSize;
              } else {
                endY += targetDir === "T" ? halfIconSize : -halfIconSize;
              }
            }
            if (edge[0]._private.rscratch) {
              const g2 = edgesEl.insert("g");
              g2.insert("path").attr("d", `M ${startX2},${startY2} L ${midX},${midY} L${endX},${endY} `).attr("class", "edge").attr("id", `${diagramId3}-${getEdgeId(source, target, { prefix: "L" })}`);
              if (sourceArrow) {
                const xShift = isArchitectureDirectionX(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startX2, arrowSize) : startX2 - halfArrowSize;
                const yShift = isArchitectureDirectionY(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startY2, arrowSize) : startY2 - halfArrowSize;
                g2.insert("polygon").attr("points", ArchitectureDirectionArrow[sourceDir](arrowSize)).attr("transform", `translate(${xShift},${yShift})`).attr("class", "arrow");
              }
              if (targetArrow) {
                const xShift = isArchitectureDirectionX(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endX, arrowSize) : endX - halfArrowSize;
                const yShift = isArchitectureDirectionY(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endY, arrowSize) : endY - halfArrowSize;
                g2.insert("polygon").attr("points", ArchitectureDirectionArrow[targetDir](arrowSize)).attr("transform", `translate(${xShift},${yShift})`).attr("class", "arrow");
              }
              if (label) {
                const axis2 = !isArchitectureDirectionXY(sourceDir, targetDir) ? isArchitectureDirectionX(sourceDir) ? "X" : "Y" : "XY";
                let width3 = 0;
                if (axis2 === "X") {
                  width3 = Math.abs(startX2 - endX);
                } else if (axis2 === "Y") {
                  width3 = Math.abs(startY2 - endY) / 1.5;
                } else {
                  width3 = Math.abs(startX2 - endX) / 2;
                }
                const textElem = g2.append("g");
                await createText(
                  textElem,
                  label,
                  {
                    useHtmlLabels: false,
                    width: width3,
                    classes: "architecture-service-label"
                  },
                  getConfig2()
                );
                textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle");
                if (axis2 === "X") {
                  textElem.attr("transform", "translate(" + midX + ", " + midY + ")");
                } else if (axis2 === "Y") {
                  textElem.attr("transform", "translate(" + midX + ", " + midY + ") rotate(-90)");
                } else if (axis2 === "XY") {
                  const pair = getArchitectureDirectionPair(sourceDir, targetDir);
                  if (pair && isArchitecturePairXY(pair)) {
                    const bboxOrig = textElem.node().getBoundingClientRect();
                    const [x5, y6] = getArchitectureDirectionXYFactors(pair);
                    textElem.attr("dominant-baseline", "auto").attr("transform", `rotate(${-1 * x5 * y6 * 45})`);
                    const bboxNew = textElem.node().getBoundingClientRect();
                    textElem.attr(
                      "transform",
                      `
                translate(${midX}, ${midY - bboxOrig.height / 2})
                translate(${x5 * bboxNew.width / 2}, ${y6 * bboxNew.height / 2})
                rotate(${-1 * x5 * y6 * 45}, 0, ${bboxOrig.height / 2})
              `
                    );
                  }
                }
              }
            }
          })
        );
      }, "drawEdges");
      drawGroups = /* @__PURE__ */ __name(async function(groupsEl, cy, db12, diagramId3) {
        const padding = db12.getConfigField("padding");
        const groupIconSize = padding * 0.75;
        const fontSize = db12.getConfigField("fontSize");
        const iconSize = db12.getConfigField("iconSize");
        const halfIconSize = iconSize / 2;
        await Promise.all(
          cy.nodes().map(async (node2) => {
            const data6 = nodeData(node2);
            if (data6.type === "group") {
              const { h: h3, w: w4, x1, y1 } = node2.boundingBox();
              const groupsNode = groupsEl.append("rect");
              groupsNode.attr("id", `${diagramId3}-group-${data6.id}`).attr("x", x1 + halfIconSize).attr("y", y1 + halfIconSize).attr("width", w4).attr("height", h3).attr("class", "node-bkg");
              const groupLabelContainer = groupsEl.append("g");
              let shiftedX1 = x1;
              let shiftedY1 = y1;
              if (data6.icon) {
                const bkgElem = groupLabelContainer.append("g");
                bkgElem.html(
                  `<g>${await getIconSVG(data6.icon, { height: groupIconSize, width: groupIconSize, fallbackPrefix: architectureIcons.prefix })}</g>`
                );
                bkgElem.attr(
                  "transform",
                  "translate(" + (shiftedX1 + halfIconSize + 1) + ", " + (shiftedY1 + halfIconSize + 1) + ")"
                );
                shiftedX1 += groupIconSize;
                shiftedY1 += fontSize / 2 - 1 - 2;
              }
              if (data6.label) {
                const textElem = groupLabelContainer.append("g");
                await createText(
                  textElem,
                  data6.label,
                  {
                    useHtmlLabels: false,
                    width: w4,
                    classes: "architecture-service-label"
                  },
                  getConfig2()
                );
                textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "start").attr("text-anchor", "start");
                textElem.attr(
                  "transform",
                  "translate(" + (shiftedX1 + halfIconSize + 4) + ", " + (shiftedY1 + halfIconSize + 2) + ")"
                );
              }
              db12.setElementForId(data6.id, groupsNode);
            }
          })
        );
      }, "drawGroups");
      drawServices = /* @__PURE__ */ __name(async function(db12, elem, services, diagramId3) {
        const config3 = getConfig2();
        for (const service of services) {
          const serviceElem = elem.append("g");
          const iconSize = db12.getConfigField("iconSize");
          if (service.title) {
            const textElem = serviceElem.append("g");
            await createText(
              textElem,
              service.title,
              {
                useHtmlLabels: false,
                width: iconSize * 1.5,
                classes: "architecture-service-label"
              },
              config3
            );
            textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle");
            textElem.attr("transform", "translate(" + iconSize / 2 + ", " + iconSize + ")");
          }
          const bkgElem = serviceElem.append("g");
          if (service.icon) {
            bkgElem.html(
              `<g>${await getIconSVG(service.icon, { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}</g>`
            );
          } else if (service.iconText) {
            bkgElem.html(
              `<g>${await getIconSVG("blank", { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}</g>`
            );
            const textElemContainer = bkgElem.append("g");
            const fo = textElemContainer.append("foreignObject").attr("width", iconSize).attr("height", iconSize);
            const divElem = fo.append("div").attr("class", "node-icon-text").attr("style", `height: ${iconSize}px;`).append("div").html(sanitizeText(service.iconText, config3));
            const fontSize = parseInt(
              window.getComputedStyle(divElem.node(), null).getPropertyValue("font-size").replace(/\D/g, "")
            ) ?? 16;
            divElem.attr("style", `-webkit-line-clamp: ${Math.floor((iconSize - 2) / fontSize)};`);
          } else {
            bkgElem.append("path").attr("class", "node-bkg").attr("id", `${diagramId3}-node-${service.id}`).attr(
              "d",
              `M0,${iconSize} V5 Q0,0 5,0 H${iconSize - 5} Q${iconSize},0 ${iconSize},5 V${iconSize} Z`
            );
          }
          serviceElem.attr("id", `${diagramId3}-service-${service.id}`).attr("class", "architecture-service");
          const { width: width3, height: height2 } = serviceElem.node().getBBox();
          service.width = width3;
          service.height = height2;
          db12.setElementForId(service.id, serviceElem);
        }
        return 0;
      }, "drawServices");
      drawJunctions = /* @__PURE__ */ __name(function(db12, elem, junctions, diagramId3) {
        junctions.forEach((junction) => {
          const junctionElem = elem.append("g");
          const iconSize = db12.getConfigField("iconSize");
          const bkgElem = junctionElem.append("g");
          bkgElem.append("rect").attr("id", `${diagramId3}-node-${junction.id}`).attr("fill-opacity", "0").attr("width", iconSize).attr("height", iconSize);
          junctionElem.attr("class", "architecture-junction");
          const { width: width3, height: height2 } = junctionElem._groups[0][0].getBBox();
          junctionElem.width = width3;
          junctionElem.height = height2;
          db12.setElementForId(junction.id, junctionElem);
        });
      }, "drawJunctions");
    }
  });

  // src/diagrams/architecture/architectureRenderer.ts
  function addServices(services, cy, db12) {
    services.forEach((service) => {
      cy.add({
        group: "nodes",
        data: {
          type: "service",
          id: service.id,
          icon: service.icon,
          label: service.title,
          parent: service.in,
          width: db12.getConfigField("iconSize"),
          height: db12.getConfigField("iconSize")
        },
        classes: "node-service"
      });
    });
  }
  function addJunctions(junctions, cy, db12) {
    junctions.forEach((junction) => {
      cy.add({
        group: "nodes",
        data: {
          type: "junction",
          id: junction.id,
          parent: junction.in,
          width: db12.getConfigField("iconSize"),
          height: db12.getConfigField("iconSize")
        },
        classes: "node-junction"
      });
    });
  }
  function positionNodes(db12, cy) {
    cy.nodes().map((node2) => {
      const data6 = nodeData(node2);
      if (data6.type === "group") {
        return;
      }
      data6.x = node2.position().x;
      data6.y = node2.position().y;
      const nodeElem = db12.getElementById(data6.id);
      nodeElem.attr("transform", "translate(" + (data6.x || 0) + "," + (data6.y || 0) + ")");
    });
  }
  function addGroups(groups, cy) {
    groups.forEach((group2) => {
      cy.add({
        group: "nodes",
        data: {
          type: "group",
          id: group2.id,
          icon: group2.icon,
          label: group2.title,
          parent: group2.in
        },
        classes: "node-group"
      });
    });
  }
  function addEdges2(edges3, cy) {
    edges3.forEach((parsedEdge) => {
      const { lhsId, rhsId, lhsInto, lhsGroup, rhsInto, lhsDir, rhsDir, rhsGroup, title: title2 } = parsedEdge;
      const edgeType = isArchitectureDirectionXY(parsedEdge.lhsDir, parsedEdge.rhsDir) ? "segments" : "straight";
      const edge = {
        id: `${lhsId}-${rhsId}`,
        label: title2,
        source: lhsId,
        sourceDir: lhsDir,
        sourceArrow: lhsInto,
        sourceGroup: lhsGroup,
        sourceEndpoint: lhsDir === "L" ? "0 50%" : lhsDir === "R" ? "100% 50%" : lhsDir === "T" ? "50% 0" : "50% 100%",
        target: rhsId,
        targetDir: rhsDir,
        targetArrow: rhsInto,
        targetGroup: rhsGroup,
        targetEndpoint: rhsDir === "L" ? "0 50%" : rhsDir === "R" ? "100% 50%" : rhsDir === "T" ? "50% 0" : "50% 100%"
      };
      cy.add({
        group: "edges",
        data: edge,
        classes: edgeType
      });
    });
  }
  function getAlignments(db12, spatialMaps, groupAlignments, layoutHints = []) {
    const flattenAlignments = /* @__PURE__ */ __name((alignmentMap, alignmentDir) => {
      const flattened = /* @__PURE__ */ new Map();
      for (const [numericDir, alignments2] of alignmentMap.entries()) {
        const dir2 = `${numericDir}`;
        let cnt4 = 0;
        const arr = [...alignments2.entries()];
        if (arr.length === 1) {
          flattened.set(dir2, arr[0][1]);
          continue;
        }
        for (let i2 = 0; i2 < arr.length - 1; i2++) {
          for (let j3 = i2 + 1; j3 < arr.length; j3++) {
            const [aGroupId, aNodeIds] = arr[i2];
            const [bGroupId, bNodeIds] = arr[j3];
            const alignment = groupAlignments.get(architectureGroupAlignmentKey(aGroupId, bGroupId));
            if (alignment === alignmentDir) {
              flattened.set(dir2, [...flattened.get(dir2) ?? [], ...aNodeIds, ...bNodeIds]);
            } else if (aGroupId === "default" || bGroupId === "default") {
              flattened.set(dir2, [...flattened.get(dir2) ?? [], ...aNodeIds, ...bNodeIds]);
            } else {
              const keyA = `${dir2}-${cnt4++}`;
              flattened.set(keyA, aNodeIds);
              const keyB = `${dir2}-${cnt4++}`;
              flattened.set(keyB, bNodeIds);
            }
          }
        }
      }
      return flattened;
    }, "flattenAlignments");
    const alignments = spatialMaps.map((spatialMap) => {
      const horizontalAlignments = /* @__PURE__ */ new Map();
      const verticalAlignments = /* @__PURE__ */ new Map();
      spatialMap.forEach(([x5, y6], id41) => {
        const nodeGroup = db12.getNode(id41)?.in ?? "default";
        const horizontalAlignment = horizontalAlignments.get(y6) ?? /* @__PURE__ */ new Map();
        if (!horizontalAlignments.has(y6)) {
          horizontalAlignments.set(y6, horizontalAlignment);
        }
        const verticalAlignment2 = verticalAlignments.get(x5) ?? /* @__PURE__ */ new Map();
        if (!verticalAlignments.has(x5)) {
          verticalAlignments.set(x5, verticalAlignment2);
        }
        for (const alignment of [horizontalAlignment, verticalAlignment2]) {
          const nodeList = alignment.get(nodeGroup) ?? [];
          if (!alignment.has(nodeGroup)) {
            alignment.set(nodeGroup, nodeList);
          }
          nodeList.push(id41);
        }
      });
      return {
        horiz: [...flattenAlignments(horizontalAlignments, "horizontal").values()].filter(
          (arr) => arr.length > 1
        ),
        vert: [...flattenAlignments(verticalAlignments, "vertical").values()].filter(
          (arr) => arr.length > 1
        )
      };
    });
    const [horizontalRaw, verticalRaw] = alignments.reduce(
      ([prevHoriz, prevVert], { horiz, vert }) => {
        return [
          [...prevHoriz, ...horiz],
          [...prevVert, ...vert]
        ];
      },
      [[], []]
    );
    const declaredMembers = /* @__PURE__ */ new Set();
    layoutHints.forEach((hint) => hint.members.forEach((m3) => declaredMembers.add(m3)));
    const dropOverlapping = /* @__PURE__ */ __name((groups) => groups.filter((group2) => !group2.some((id41) => declaredMembers.has(id41))), "dropOverlapping");
    const horizontal = dropOverlapping(horizontalRaw);
    const vertical = dropOverlapping(verticalRaw);
    layoutHints.forEach((hint) => {
      if (hint.members.length < 2) {
        return;
      }
      if (hint.direction === "row") {
        horizontal.push([...hint.members]);
      } else {
        vertical.push([...hint.members]);
      }
    });
    return {
      horizontal,
      vertical
    };
  }
  function getRelativeConstraints(spatialMaps, db12, layoutHints = []) {
    const relativeConstraints = [];
    const iconSize = db12.getConfigField("iconSize");
    const idealMult = db12.getConfigField("idealEdgeLengthMultiplier");
    const hintGap = idealMult * iconSize;
    const declaredPairs = /* @__PURE__ */ new Set();
    layoutHints.forEach((hint) => {
      for (let i2 = 0; i2 < hint.members.length - 1; i2++) {
        const a2 = hint.members[i2];
        const b3 = hint.members[i2 + 1];
        declaredPairs.add(`${a2}|${b3}`);
        declaredPairs.add(`${b3}|${a2}`);
        if (hint.direction === "row") {
          relativeConstraints.push({ left: a2, right: b3, gap: hintGap });
        } else {
          relativeConstraints.push({ top: a2, bottom: b3, gap: hintGap });
        }
      }
    });
    const posToStr = /* @__PURE__ */ __name((pos) => `${pos[0]},${pos[1]}`, "posToStr");
    const strToPos = /* @__PURE__ */ __name((pos) => pos.split(",").map((p3) => parseInt(p3)), "strToPos");
    spatialMaps.forEach((spatialMap) => {
      const invSpatialMap = new Map(
        [...spatialMap.entries()].map(([key, value2]) => [posToStr(value2), key])
      );
      const queue = [posToStr([0, 0])];
      const visited = {};
      const directions = {
        L: [-1, 0],
        R: [1, 0],
        T: [0, 1],
        B: [0, -1]
      };
      while (queue.length > 0) {
        const curr = queue.shift();
        if (curr) {
          visited[curr] = 1;
          const currId = invSpatialMap.get(curr);
          if (currId) {
            const currPos = strToPos(curr);
            Object.entries(directions).forEach(([dir2, shift2]) => {
              const newPos = posToStr([currPos[0] + shift2[0], currPos[1] + shift2[1]]);
              const newId2 = invSpatialMap.get(newPos);
              if (newId2 && !visited[newPos]) {
                queue.push(newPos);
                if (declaredPairs.has(`${currId}|${newId2}`)) {
                  return;
                }
                relativeConstraints.push({
                  [ArchitectureDirectionName[dir2]]: newId2,
                  [ArchitectureDirectionName[getOppositeArchitectureDirection(dir2)]]: currId,
                  gap: idealMult * iconSize
                });
              }
            });
          }
        }
      }
    });
    return relativeConstraints;
  }
  function layoutArchitecture(services, junctions, groups, edges3, db12, { spatialMaps, groupAlignments }) {
    return new Promise((resolve2) => {
      const renderEl = select_default2("body").append("div").attr("id", "cy").attr("style", "display:none");
      const cy = cytoscape2({
        container: document.getElementById("cy"),
        style: [
          {
            selector: "edge",
            style: {
              "curve-style": "straight",
              "source-endpoint": "data(sourceEndpoint)",
              "target-endpoint": "data(targetEndpoint)"
            }
          },
          {
            selector: "edge[label]",
            style: {
              label: "data(label)"
            }
          },
          {
            selector: "edge.segments",
            style: {
              "curve-style": "segments",
              "segment-weights": "0",
              "segment-distances": [0.5],
              // @ts-ignore Incorrect library types
              "edge-distances": "endpoints",
              "source-endpoint": "data(sourceEndpoint)",
              "target-endpoint": "data(targetEndpoint)"
            }
          },
          {
            selector: "node",
            style: {
              // @ts-ignore Incorrect library types
              "compound-sizing-wrt-labels": "include"
            }
          },
          {
            selector: "node[label]",
            style: {
              "text-valign": "bottom",
              "text-halign": "center",
              "font-size": `${db12.getConfigField("fontSize")}px`
            }
          },
          {
            selector: ".node-service",
            style: {
              label: "data(label)",
              width: "data(width)",
              height: "data(height)"
            }
          },
          {
            selector: ".node-junction",
            style: {
              width: "data(width)",
              height: "data(height)"
            }
          },
          {
            selector: ".node-group",
            style: {
              // @ts-ignore Incorrect library types
              padding: `${db12.getConfigField("padding")}px`
            }
          }
        ],
        layout: {
          name: "grid",
          boundingBox: {
            x1: 0,
            x2: 100,
            y1: 0,
            y2: 100
          }
        }
      });
      renderEl.remove();
      addGroups(groups, cy);
      addServices(services, cy, db12);
      addJunctions(junctions, cy, db12);
      addEdges2(edges3, cy);
      const layoutHints = db12.getLayoutHints();
      const alignmentConstraint = getAlignments(db12, spatialMaps, groupAlignments, layoutHints);
      const relativePlacementConstraint = getRelativeConstraints(spatialMaps, db12, layoutHints);
      const iconSize = db12.getConfigField("iconSize");
      const sameGroupIdealLength = db12.getConfigField("idealEdgeLengthMultiplier") * iconSize;
      const crossGroupIdealLength = 0.5 * iconSize;
      const sameGroupElasticity = db12.getConfigField("edgeElasticity");
      const seed = db12.getConfigField("seed");
      const layout7 = cy.layout({
        name: "fcose",
        quality: "proof",
        randomize: db12.getConfigField("randomize"),
        nodeSeparation: db12.getConfigField("nodeSeparation"),
        numIter: db12.getConfigField("numIter"),
        styleEnabled: false,
        animate: false,
        nodeDimensionsIncludeLabels: false,
        // Adjust the edge parameters if it passes through the border of a group
        // Hacky fix for: https://github.com/iVis-at-Bilkent/cytoscape.js-fcose/issues/67
        idealEdgeLength(edge) {
          const [nodeA, nodeB] = edge.connectedNodes();
          const { parent: parentA } = nodeData(nodeA);
          const { parent: parentB } = nodeData(nodeB);
          return parentA === parentB ? sameGroupIdealLength : crossGroupIdealLength;
        },
        edgeElasticity(edge) {
          const [nodeA, nodeB] = edge.connectedNodes();
          const { parent: parentA } = nodeData(nodeA);
          const { parent: parentB } = nodeData(nodeB);
          return parentA === parentB ? sameGroupElasticity : 1e-3;
        },
        alignmentConstraint,
        relativePlacementConstraint
      });
      layout7.one("layoutstop", () => {
        function getSegmentWeights(source, target, pointX, pointY) {
          let W3, D4;
          const { x: sX, y: sY } = source;
          const { x: tX, y: tY } = target;
          D4 = (pointY - sY + (sX - pointX) * (sY - tY) / (sX - tX)) / Math.sqrt(1 + Math.pow((sY - tY) / (sX - tX), 2));
          W3 = Math.sqrt(Math.pow(pointY - sY, 2) + Math.pow(pointX - sX, 2) - Math.pow(D4, 2));
          const distAB = Math.sqrt(Math.pow(tX - sX, 2) + Math.pow(tY - sY, 2));
          W3 = W3 / distAB;
          let delta1 = (tX - sX) * (pointY - sY) - (tY - sY) * (pointX - sX);
          switch (true) {
            case delta1 >= 0:
              delta1 = 1;
              break;
            case delta1 < 0:
              delta1 = -1;
              break;
          }
          let delta2 = (tX - sX) * (pointX - sX) + (tY - sY) * (pointY - sY);
          switch (true) {
            case delta2 >= 0:
              delta2 = 1;
              break;
            case delta2 < 0:
              delta2 = -1;
              break;
          }
          D4 = Math.abs(D4) * delta1;
          W3 = W3 * delta2;
          return {
            distances: D4,
            weights: W3
          };
        }
        __name(getSegmentWeights, "getSegmentWeights");
        cy.startBatch();
        for (const edge of Object.values(cy.edges())) {
          if (edge.data?.()) {
            const { x: sX, y: sY } = edge.source().position();
            const { x: tX, y: tY } = edge.target().position();
            if (sX !== tX && sY !== tY) {
              const sEP = edge.sourceEndpoint();
              const tEP = edge.targetEndpoint();
              const { sourceDir } = edgeData(edge);
              const [pointX, pointY] = isArchitectureDirectionY(sourceDir) ? [sEP.x, tEP.y] : [tEP.x, sEP.y];
              const { weights, distances: distances2 } = getSegmentWeights(sEP, tEP, pointX, pointY);
              edge.style("segment-distances", distances2);
              edge.style("segment-weights", weights);
            }
          }
        }
        cy.endBatch();
        withSeededRandom(seed, () => layout7.run());
      });
      try {
        withSeededRandom(seed, () => layout7.run());
      } catch (err) {
        if (err instanceof RangeError && err.message.includes("Invalid array length")) {
          throw new Error(
            "Architecture layout failed: a declared `align row|column` directive likely contradicts the edge directions, or two declared alignments overlap on a shared node. Check that the order of members in each `align` chain is consistent with the edges between them, and that no node appears in two `align` directives along the same axis."
          );
        }
        throw err;
      }
      cy.ready((e3) => {
        log.info("Ready", e3);
        resolve2(cy);
      });
    });
  }
  var import_cytoscape_fcose, draw26, renderer9;
  var init_architectureRenderer = __esm({
    "src/diagrams/architecture/architectureRenderer.ts"() {
      "use strict";
      init_cytoscape_esm();
      import_cytoscape_fcose = __toESM(require_cytoscape_fcose(), 1);
      init_architectureSeed();
      init_src32();
      init_logger();
      init_icons();
      init_selectSvgElement();
      init_setupGraphViewbox();
      init_architectureIcons();
      init_architectureTypes();
      init_svgDraw6();
      registerIconPacks([
        {
          name: architectureIcons.prefix,
          icons: architectureIcons
        }
      ]);
      cytoscape2.use(import_cytoscape_fcose.default);
      __name(addServices, "addServices");
      __name(addJunctions, "addJunctions");
      __name(positionNodes, "positionNodes");
      __name(addGroups, "addGroups");
      __name(addEdges2, "addEdges");
      __name(getAlignments, "getAlignments");
      __name(getRelativeConstraints, "getRelativeConstraints");
      __name(layoutArchitecture, "layoutArchitecture");
      draw26 = /* @__PURE__ */ __name(async (text4, id41, _version, diagObj) => {
        const db12 = diagObj.db;
        db12.setDiagramId(id41);
        const services = db12.getServices();
        const junctions = db12.getJunctions();
        const groups = db12.getGroups();
        const edges3 = db12.getEdges();
        const ds = db12.getDataStructures();
        const svg2 = selectSvgElement(id41);
        const edgesElem = svg2.append("g");
        edgesElem.attr("class", "architecture-edges");
        const servicesElem = svg2.append("g");
        servicesElem.attr("class", "architecture-services");
        const groupElem = svg2.append("g");
        groupElem.attr("class", "architecture-groups");
        await drawServices(db12, servicesElem, services, id41);
        drawJunctions(db12, servicesElem, junctions, id41);
        const cy = await layoutArchitecture(services, junctions, groups, edges3, db12, ds);
        await drawEdges(edgesElem, cy, db12, id41);
        await drawGroups(groupElem, cy, db12, id41);
        positionNodes(db12, cy);
        setupGraphViewbox(void 0, svg2, db12.getConfigField("padding"), db12.getConfigField("useMaxWidth"));
      }, "draw");
      renderer9 = { draw: draw26 };
    }
  });

  // src/diagrams/architecture/architectureDiagram.ts
  var architectureDiagram_exports = {};
  __export(architectureDiagram_exports, {
    diagram: () => diagram27
  });
  var diagram27;
  var init_architectureDiagram = __esm({
    "src/diagrams/architecture/architectureDiagram.ts"() {
      "use strict";
      init_architectureParser();
      init_architectureDb();
      init_architectureStyles();
      init_architectureRenderer();
      diagram27 = {
        parser: parser23,
        get db() {
          return new ArchitectureDB();
        },
        renderer: renderer9,
        styles: architectureStyles_default
      };
    }
  });

  // src/diagrams/eventmodeling/types.ts
  var PositionFrameKind, FramePositionedKind, PositionRelationKind, RelationPositionedKind;
  var init_types = __esm({
    "src/diagrams/eventmodeling/types.ts"() {
      "use strict";
      PositionFrameKind = "position frame";
      FramePositionedKind = "frame positioned";
      PositionRelationKind = "position relation";
      RelationPositionedKind = "relation positioned";
    }
  });

  // src/diagrams/eventmodeling/db.ts
  function reset4() {
    store = {};
  }
  function getState() {
    let state4 = initial;
    const { ast } = store;
    const diagramProps2 = getDiagramProps();
    if (!ast) {
      throw new Error("No data for EventModel");
    }
    ast.frames.forEach((frame2, index) => {
      const textProps = calculateTextProps(frame2, ast.dataEntities, diagramProps2);
      state4 = dispatch2(state4, {
        $kind: PositionFrameKind,
        index,
        frame: frame2,
        textProps
      });
      let sourceFrames = void 0;
      if (hasSourceFrame(frame2)) {
        log.debug(`source frame`, frame2.sourceFrames);
        sourceFrames = ast.frames.filter((currentFrame) => {
          return frame2.sourceFrames.some((sf) => sf.$refText === currentFrame.name);
        });
        sourceFrames.forEach((sourceFrame) => {
          state4 = dispatch2(state4, {
            $kind: PositionRelationKind,
            index,
            frame: frame2,
            sourceFrame
          });
        });
      } else {
        state4 = dispatch2(state4, {
          $kind: PositionRelationKind,
          index,
          frame: frame2
        });
      }
    });
    state4 = {
      ...state4,
      sortedSwimlanesArray: sortedSwimlanesArray(state4.swimlanes)
    };
    return state4;
  }
  function setAst(ast) {
    store.ast = ast;
  }
  function getDiagramProps() {
    return diagramProps;
  }
  function extractNamespace(entityIdentifier) {
    const spl = entityIdentifier.split(".");
    if (spl.length === 2) {
      return spl[0];
    }
    return void 0;
  }
  function extractName(entityIdentifier) {
    const spl = entityIdentifier.split(".");
    if (spl.length === 2) {
      return spl[1];
    }
    return entityIdentifier;
  }
  function findSwimlaneByNamespace(swimlanes, namespace) {
    if (!namespace || namespace.length === 0) {
      return void 0;
    }
    return Object.values(swimlanes).find((swimlane2) => swimlane2.namespace === namespace);
  }
  function findNextAvailableIndex(swimlanes, boundaryMin, boundaryMax) {
    return Math.max(
      boundaryMin,
      ...Object.keys(swimlanes).filter((key) => {
        const index = Number.parseInt(key);
        return index > boundaryMin && index < boundaryMax;
      }).map((key) => Number.parseInt(key))
    ) + 1;
  }
  function calculateSwimlaneProps(frame2, swimlanes) {
    const namespace = extractNamespace(frame2.entityIdentifier);
    const sw = findSwimlaneByNamespace(swimlanes, namespace);
    switch (frame2.modelEntityType) {
      case "ui":
      case "pcr":
      case "processor":
        if (sw) {
          return {
            index: sw.index,
            label: sw.namespace || diagramProps.labelUiAutomation
          };
        } else if (namespace) {
          return {
            index: findNextAvailableIndex(swimlanes, 0, 100),
            label: diagramProps.labelUiAutomationPrefix + namespace
          };
        }
        return { index: 0, label: diagramProps.labelUiAutomation };
      case "rmo":
      case "readmodel":
      case "cmd":
      case "command":
        if (sw) {
          return {
            index: sw.index,
            label: sw.namespace || diagramProps.labelCommandReadModel
          };
        } else if (namespace) {
          return {
            index: findNextAvailableIndex(swimlanes, 100, 200),
            label: diagramProps.labelCommandReadModelPrefix + namespace
          };
        }
        return { index: 100, label: diagramProps.labelCommandReadModel };
      case "evt":
      case "event":
      default:
        if (sw) {
          return {
            index: sw.index,
            label: sw.namespace || diagramProps.labelEvents
          };
        } else if (namespace) {
          return {
            index: findNextAvailableIndex(swimlanes, 200, 300),
            label: diagramProps.labelEventsPrefix + namespace
          };
        }
        return { index: 200, label: diagramProps.labelEvents };
    }
  }
  function calculateEntityVisualProps(frame2) {
    const { themeVariables } = getConfig();
    switch (frame2.modelEntityType) {
      case "ui":
        return {
          fill: themeVariables.emUiFill ?? "white",
          stroke: themeVariables.emUiStroke ?? "#dbdada"
        };
      case "pcr":
      case "processor":
        return {
          fill: themeVariables.emProcessorFill ?? "#edb3f6",
          stroke: themeVariables.emProcessorStroke ?? "#b88cbf"
        };
      case "rmo":
      case "readmodel":
        return {
          fill: themeVariables.emReadModelFill ?? "#d3f1a2",
          stroke: themeVariables.emReadModelStroke ?? "#a3b732"
        };
      case "cmd":
      case "command":
        return {
          fill: themeVariables.emCommandFill ?? "#bcd6fe",
          stroke: themeVariables.emCommandStroke ?? "#679ac3"
        };
      case "evt":
      case "event":
        return {
          fill: themeVariables.emEventFill ?? "#ffb778",
          stroke: themeVariables.emEventStroke ?? "#c19a0f"
        };
      default:
        return {
          fill: "red",
          stroke: "black"
        };
    }
  }
  function calculateTextProps(frame2, dataEntities, diagramProps2) {
    const config3 = getConfig();
    const name = sanitizeText(extractName(frame2.entityIdentifier) ?? "", config3);
    let toHtml;
    const wrapLabelConfig = {
      fontSize: 16,
      fontWeight: 700,
      fontFamily: '"trebuchet ms", verdana, arial, sans-serif',
      joinWith: "<br/>"
    };
    const wrappedName = wrapLabel(name, diagramProps2.textMaxWidth, wrapLabelConfig);
    let content = `<b>${wrappedName}</b>`;
    if (frame2.dataInlineValue) {
      toHtml = frame2.dataInlineValue;
      toHtml = toHtml.substring(toHtml.indexOf("{") + 1);
      toHtml = toHtml.substring(0, toHtml.lastIndexOf("}") - 1);
      toHtml = sanitizeText(toHtml, config3);
      toHtml = wrapLabel(toHtml, diagramProps2.textMaxWidth, wrapLabelConfig);
      toHtml = toHtml.replaceAll(" ", "&nbsp;");
    }
    if (frame2.dataReference) {
      const dataEntity = dataEntities.find(
        (dataEntity2) => dataEntity2.name === frame2.dataReference?.$refText
      );
      if (dataEntity) {
        toHtml = dataEntity.dataBlockValue;
        toHtml = toHtml.substring(toHtml.indexOf("{\n") + 2);
        toHtml = toHtml.substring(0, toHtml.lastIndexOf("}") - 1);
        toHtml = sanitizeText(toHtml, config3);
        toHtml = wrapLabel(toHtml, diagramProps2.textMaxWidth, wrapLabelConfig);
        toHtml = toHtml.replaceAll(" ", "&nbsp;");
        toHtml += `<br/>`;
      }
    }
    const hasRenderedData = toHtml !== void 0;
    if (hasRenderedData) {
      content += `<br/><br/><code style="text-align: left; display: block;max-width:${diagramProps2.textMaxWidth}px">${toHtml}</code>`;
    }
    const textDimensionConfig = {
      fontSize: wrapLabelConfig.fontSize,
      fontWeight: wrapLabelConfig.fontWeight,
      fontFamily: wrapLabelConfig.fontFamily
    };
    const dimensions2 = calculateTextDimensions(content, textDimensionConfig);
    const calculatedWidthFix = hasRenderedData ? dimensions2.width / 3 : dimensions2.width;
    const props = {
      content,
      width: calculatedWidthFix,
      height: dimensions2.height
    };
    log.debug(`[${frame2.name}] ${frame2.entityIdentifier} text`, props);
    return props;
  }
  function decidePositionFrame(state4, _command) {
    const command = _command;
    const visual = calculateEntityVisualProps(command.frame);
    const dimension = {
      width: command.textProps.width + 2 * diagramProps.boxTextPadding,
      height: command.textProps.height + 2 * diagramProps.boxTextPadding
    };
    const event3 = {
      $kind: FramePositionedKind,
      frame: command.frame,
      index: command.index,
      visual,
      dimension,
      textProps: command.textProps
    };
    return [event3];
  }
  function calculateX(swimlane2, previousSwimlane, lastBox) {
    if (previousSwimlane === void 0) {
      return diagramProps.contentStartX;
    }
    if (previousSwimlane.index === swimlane2.index && swimlane2.r) {
      return swimlane2.r + diagramProps.boxPadding;
    }
    if (lastBox === void 0) {
      return diagramProps.contentStartX;
    }
    return lastBox.r - diagramProps.boxOverlap + diagramProps.boxPadding;
  }
  function calculateMaxRight(swimlanes, swimlaneR) {
    const rs = [...swimlanes.map((s2) => s2.r), swimlaneR];
    return Math.max(...rs);
  }
  function sortedSwimlanesArray(swimlanes) {
    return Object.values(swimlanes).sort((a2, b3) => a2.index - b3.index);
  }
  function evolveFramePositioned(state4, _event) {
    const event3 = _event;
    const swimlaneProps = calculateSwimlaneProps(event3.frame, state4.swimlanes);
    let swimlane2;
    if (swimlaneProps.index in state4.swimlanes) {
      swimlane2 = state4.swimlanes[swimlaneProps.index];
    } else {
      swimlane2 = {
        index: swimlaneProps.index,
        label: swimlaneProps.label,
        r: 0,
        y: swimlaneProps.index * diagramProps.swimlaneMinHeight + diagramProps.swimlaneGap,
        height: diagramProps.swimlaneMinHeight,
        maxHeight: diagramProps.swimlaneMinHeight
      };
    }
    const lastBox = state4.boxes.length > 0 ? state4.boxes[state4.boxes.length - 1] : void 0;
    const previousSwimlane = state4.previousSwimlaneNumber !== void 0 ? state4.swimlanes[state4.previousSwimlaneNumber] : void 0;
    const dimension = {
      width: Math.max(
        diagramProps.boxMinWidth,
        Math.min(diagramProps.boxMaxWidth, event3.dimension.width)
      ) + 2 * diagramProps.boxPadding,
      height: Math.max(
        diagramProps.boxMinHeight,
        Math.min(diagramProps.boxMaxHeight, event3.dimension.height)
      ) + 2 * diagramProps.boxPadding
    };
    const x5 = calculateX(swimlane2, previousSwimlane, lastBox);
    const r2 = x5 + dimension.width + diagramProps.boxPadding;
    const maxR = calculateMaxRight(Object.values(state4.swimlanes), r2);
    swimlane2.r = x5 + dimension.width;
    swimlane2.maxHeight = Math.max(swimlane2.maxHeight, dimension.height);
    swimlane2.height = Math.max(diagramProps.swimlaneMinHeight, swimlane2.maxHeight) + 2 * diagramProps.swimlanePadding;
    const box = {
      x: x5,
      y: diagramProps.swimlanePadding + swimlane2.y,
      // y: diagramProps.swimlanePadding + (swimlane.y || diagramProps.boxDefaultY),
      r: r2,
      dimension,
      leftSibling: false,
      swimlane: swimlane2,
      visual: event3.visual,
      text: event3.textProps.content,
      frame: event3.frame,
      index: event3.index
    };
    const newState2 = {
      ...state4,
      boxes: [...state4.boxes, box],
      swimlanes: {
        ...state4.swimlanes,
        [`${swimlane2.index}`]: swimlane2
      },
      previousSwimlaneNumber: swimlaneProps.index,
      previousFrame: event3.frame,
      maxR
    };
    const swimlanes = sortedSwimlanesArray(newState2.swimlanes);
    if (swimlanes.length > 0) {
      swimlanes[0].y = 0;
    }
    for (let i2 = 1; i2 < swimlanes.length; i2++) {
      const sw = swimlanes[i2];
      const prevSw = swimlanes[i2 - 1];
      sw.y = prevSw.y + prevSw.height + diagramProps.swimlaneGap;
    }
    return newState2;
  }
  function isFirstFrame(index, frame2) {
    if (index === 0 && frame2.sourceFrames.length === 0) {
      return true;
    }
    return false;
  }
  function hasSourceFrame(frame2) {
    return frame2.sourceFrames !== void 0 && frame2.sourceFrames !== null && frame2.sourceFrames.length > 0;
  }
  function findBoxByFrame(boxes, frame2) {
    if (frame2 === void 0 || frame2 === null) {
      return void 0;
    }
    return boxes.find((box) => box.frame.name === frame2.name);
  }
  function findBoxByLineIndex(boxes, targetSwimlane, lineIndex) {
    if (lineIndex < 0) {
      return void 0;
    }
    for (let i2 = lineIndex; i2 >= 0; i2--) {
      const box = boxes[i2];
      if (box.swimlane.index !== targetSwimlane) {
        return box;
      }
    }
    return void 0;
  }
  function decidePositionRelation(state4, _command) {
    const command = _command;
    if (isEmResetFrame(command.frame) || isFirstFrame(command.index, command.frame)) {
      return [];
    }
    const targetBox = findBoxByFrame(state4.boxes, command.frame);
    if (targetBox === void 0) {
      throw new Error(`Target box not found for frame ${command.frame.name}`);
    }
    let sourceBox;
    if (command.sourceFrame) {
      sourceBox = findBoxByFrame(state4.boxes, command.sourceFrame);
    } else {
      sourceBox = findBoxByLineIndex(state4.boxes, targetBox.swimlane.index, command.index - 1);
    }
    if (sourceBox === void 0) {
      return [];
    }
    const event3 = {
      $kind: RelationPositionedKind,
      frame: command.frame,
      index: command.index,
      sourceBox,
      targetBox
    };
    return [event3];
  }
  function evolveRelationPositioned(state4, _event) {
    const event3 = _event;
    const relation = {
      visual: {
        fill: "none",
        stroke: "#000"
      },
      source: {
        x: event3.sourceBox.x,
        y: event3.sourceBox.y
      },
      target: {
        x: event3.targetBox.x,
        y: event3.targetBox.y
      },
      sourceBox: event3.sourceBox,
      targetBox: event3.targetBox
    };
    const newState2 = {
      ...state4,
      relations: [...state4.relations, relation]
    };
    return newState2;
  }
  function decide(state4, command) {
    const fn3 = deciders[command.$kind];
    if (fn3 === void 0 || fn3 === null) {
      return [];
    }
    const events = fn3(state4, command);
    log.debug(`decided events`, events);
    return events;
  }
  function evolve(state4, events) {
    const newState2 = events.reduce((previousState, event3) => {
      const fn3 = evolvers[event3.$kind];
      if (fn3 === void 0 || fn3 === null) {
        return previousState;
      }
      return fn3(previousState, event3);
    }, state4);
    log.debug(`evolve events`, { state: state4, newState: newState2, events });
    return newState2;
  }
  function dispatch2(state4, command) {
    const events = decide(state4, command);
    const newState2 = evolve(state4, events);
    return newState2;
  }
  var setOptions8, getOptions3, clear20, DEFAULT_EVENTMODELING_CONFIG, getConfig7, store, diagramProps, initial, deciders, evolvers, db8;
  var init_db4 = __esm({
    "src/diagrams/eventmodeling/db.ts"() {
      "use strict";
      init_logger();
      init_utils2();
      init_utils2();
      init_config();
      init_commonDb();
      init_common();
      init_defaultConfig();
      init_mermaid_parser_core();
      init_types();
      setOptions8 = /* @__PURE__ */ __name(function(_rawOptString) {
        log.debug("options str", _rawOptString);
      }, "setOptions");
      getOptions3 = /* @__PURE__ */ __name(function() {
        return {};
      }, "getOptions");
      clear20 = /* @__PURE__ */ __name(function() {
        reset4();
        clear();
      }, "clear");
      __name(reset4, "reset");
      DEFAULT_EVENTMODELING_CONFIG = defaultConfig_default.eventmodeling;
      getConfig7 = /* @__PURE__ */ __name(() => {
        const config3 = cleanAndMerge({
          ...DEFAULT_EVENTMODELING_CONFIG,
          ...getConfig().eventmodeling
        });
        return config3;
      }, "getConfig");
      store = {};
      __name(getState, "getState");
      __name(setAst, "setAst");
      diagramProps = {
        swimlaneMinHeight: 70,
        swimlanePadding: 15,
        swimlaneGap: 10,
        boxPadding: 10,
        boxOverlap: 90,
        boxDefaultY: 0,
        boxMinWidth: 80,
        boxMaxWidth: 450,
        boxMinHeight: 80,
        boxMaxHeight: 750,
        contentStartX: 250,
        textMaxWidth: 450 - 2 * 10,
        boxTextFontWeight: "bold",
        boxTextPadding: 10,
        swimlaneTextFontWeight: "bold",
        labelUiAutomation: "UI/Automation",
        labelUiAutomationPrefix: "UI/A: ",
        labelCommandReadModel: "Command/Read Model",
        labelCommandReadModelPrefix: "C/RM: ",
        labelEvents: "Events",
        labelEventsPrefix: "Stream: "
      };
      __name(getDiagramProps, "getDiagramProps");
      initial = {
        boxes: [],
        swimlanes: {},
        relations: [],
        maxR: 0,
        sortedSwimlanesArray: []
      };
      __name(extractNamespace, "extractNamespace");
      __name(extractName, "extractName");
      __name(findSwimlaneByNamespace, "findSwimlaneByNamespace");
      __name(findNextAvailableIndex, "findNextAvailableIndex");
      __name(calculateSwimlaneProps, "calculateSwimlaneProps");
      __name(calculateEntityVisualProps, "calculateEntityVisualProps");
      __name(calculateTextProps, "calculateTextProps");
      __name(decidePositionFrame, "decidePositionFrame");
      __name(calculateX, "calculateX");
      __name(calculateMaxRight, "calculateMaxRight");
      __name(sortedSwimlanesArray, "sortedSwimlanesArray");
      __name(evolveFramePositioned, "evolveFramePositioned");
      __name(isFirstFrame, "isFirstFrame");
      __name(hasSourceFrame, "hasSourceFrame");
      __name(findBoxByFrame, "findBoxByFrame");
      __name(findBoxByLineIndex, "findBoxByLineIndex");
      __name(decidePositionRelation, "decidePositionRelation");
      __name(evolveRelationPositioned, "evolveRelationPositioned");
      deciders = {
        [PositionFrameKind]: decidePositionFrame,
        [PositionRelationKind]: decidePositionRelation
      };
      evolvers = {
        [FramePositionedKind]: evolveFramePositioned,
        [RelationPositionedKind]: evolveRelationPositioned
      };
      __name(decide, "decide");
      __name(evolve, "evolve");
      __name(dispatch2, "dispatch");
      db8 = {
        getConfig: getConfig7,
        setOptions: setOptions8,
        getOptions: getOptions3,
        clear: clear20,
        setAccTitle,
        getAccTitle,
        getAccDescription,
        setAccDescription,
        setDiagramTitle,
        getDiagramTitle,
        setAst,
        getDiagramProps,
        getState
      };
    }
  });

  // src/diagrams/eventmodeling/parser.ts
  var parser24;
  var init_parser4 = __esm({
    "src/diagrams/eventmodeling/parser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_db4();
      parser24 = {
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("eventmodeling", input);
          log.debug(ast);
          db8.setAst(ast);
          populateCommonDb(ast, db8);
        }, "parse")
      };
      if (void 0) {
        const { it, expect, describe } = void 0;
        describe("EventModeling Parser", () => {
          it("should parse simple model", () => {
            const result = parser24.parse(`eventmodeling
  tf 01 evt Start

    `);
            expect(result !== void 0);
          });
        });
      }
    }
  });

  // src/diagrams/eventmodeling/renderer.ts
  function renderD3Box(diagram38, diagramProps2) {
    return (box) => {
      const y6 = box.swimlane.y + diagramProps2.swimlanePadding;
      const g2 = diagram38.append("g").attr("class", "em-box");
      g2.append("rect").attr("x", box.x).attr("y", y6).attr("rx", "3").attr("width", box.dimension.width).attr("height", box.dimension.height).attr("stroke", box.visual.stroke).attr("fill", box.visual.fill);
      const f2 = g2.append("foreignObject").attr("x", box.x + diagramProps2.boxPadding).attr("y", y6 + 10).attr("width", box.dimension.width - 2 * diagramProps2.boxPadding).attr("height", box.dimension.height - 2 * diagramProps2.boxPadding);
      const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
      text4.append("span").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").html(box.text);
    };
  }
  function dirUpwards(sourceY, targetY) {
    return sourceY > targetY;
  }
  function renderD3Relation(diagram38, diagramProps2, arrowheadId, themeVariables) {
    return (relation) => {
      const sourceBoxY = relation.sourceBox.swimlane.y + diagramProps2.swimlanePadding;
      const targetBoxY = relation.targetBox.swimlane.y + diagramProps2.swimlanePadding;
      const upwards = dirUpwards(sourceBoxY, targetBoxY);
      const sourceX = relation.sourceBox.x + relation.sourceBox.dimension.width * 2 / 3;
      const targetX = relation.targetBox.x + relation.targetBox.dimension.width / 3;
      let sourceY;
      let targetY;
      log.debug(`rendering relation up=${upwards} for `, {
        sourceBox: relation.sourceBox,
        targetBox: relation.targetBox
      });
      if (upwards) {
        sourceY = sourceBoxY;
        targetY = targetBoxY + relation.targetBox.dimension.height;
      } else {
        sourceY = sourceBoxY + relation.sourceBox.dimension.height;
        targetY = targetBoxY;
      }
      const relationStroke = themeVariables.emRelationStroke ?? relation.visual.stroke;
      diagram38.append("path").attr("class", "em-relation").attr("fill", relation.visual.fill).attr("stroke", relationStroke).attr("stroke-width", "1").attr("marker-end", `url(#${arrowheadId})`).attr("d", `M${sourceX} ${sourceY} L${targetX} ${targetY}`);
    };
  }
  function renderD3Swimlane(diagram38, maxR, diagramProps2, themeVariables) {
    return (swimlane2) => {
      const g2 = diagram38.append("g").attr("class", "em-swimlane");
      const oddBackground = themeVariables.emSwimlaneBackgroundOdd ?? "rgb(250,250,250)";
      const backgroundStroke = themeVariables.emSwimlaneBackgroundStroke ?? "rgb(240,240,240)";
      g2.append("rect").attr("x", 0).attr("y", swimlane2.y).attr("rx", "3").attr("width", maxR + diagramProps2.swimlanePadding).attr("height", swimlane2.height).attr("fill", oddBackground).attr("stroke", backgroundStroke);
      g2.append("text").attr("font-weight", diagramProps2.swimlaneTextFontWeight).attr("x", 30).attr("y", swimlane2.y + 30).text(swimlane2.label);
    };
  }
  var DEFAULT_CONFIG, DEFAULT_EVENTMODELING_CONFIG2, draw27, renderer_default2;
  var init_renderer4 = __esm({
    "src/diagrams/eventmodeling/renderer.ts"() {
      "use strict";
      init_src32();
      init_diagramAPI();
      init_logger();
      DEFAULT_CONFIG = getConfig2();
      DEFAULT_EVENTMODELING_CONFIG2 = DEFAULT_CONFIG?.eventmodeling;
      __name(renderD3Box, "renderD3Box");
      __name(dirUpwards, "dirUpwards");
      __name(renderD3Relation, "renderD3Relation");
      __name(renderD3Swimlane, "renderD3Swimlane");
      draw27 = /* @__PURE__ */ __name(function(txt, id41, ver, diagObj) {
        log.debug("in eventmodeling renderer", txt + "\n", "id:", id41, ver);
        if (!DEFAULT_EVENTMODELING_CONFIG2) {
          throw new Error("EventModeling config not found");
        }
        const db12 = diagObj.db;
        const { themeVariables, eventmodeling: config3 } = getConfig2();
        const diagram38 = select_default2(`[id="${id41}"]`);
        const diagramProps2 = db12.getDiagramProps();
        const state4 = db12.getState();
        const arrowheadId = `em-arrowhead-${id41}`;
        const arrowheadColor = themeVariables.emArrowhead ?? "#000000";
        state4.sortedSwimlanesArray.forEach(
          renderD3Swimlane(diagram38, state4.maxR, diagramProps2, themeVariables)
        );
        state4.boxes.forEach(renderD3Box(diagram38, diagramProps2));
        state4.relations.forEach(renderD3Relation(diagram38, diagramProps2, arrowheadId, themeVariables));
        const marker = diagram38.append("defs").append("marker").attr("id", arrowheadId).attr("markerWidth", "10").attr("markerHeight", "7").attr("refX", "10").attr("refY", "3.5").attr("orient", "auto");
        marker.append("polygon").attr("points", "0 0, 10 3.5, 0 7").attr("fill", arrowheadColor);
        setupGraphViewbox2(void 0, diagram38, config3?.padding ?? 30, config3?.useMaxWidth);
      }, "draw");
      renderer_default2 = {
        draw: draw27
      };
    }
  });

  // src/diagrams/eventmodeling/styles.js
  var getStyles20, styles_default19;
  var init_styles21 = __esm({
    "src/diagrams/eventmodeling/styles.js"() {
      "use strict";
      getStyles20 = /* @__PURE__ */ __name((_options) => ``, "getStyles");
      styles_default19 = getStyles20;
    }
  });

  // src/diagrams/eventmodeling/diagram.ts
  var diagram_exports4 = {};
  __export(diagram_exports4, {
    diagram: () => diagram28
  });
  var diagram28;
  var init_diagram4 = __esm({
    "src/diagrams/eventmodeling/diagram.ts"() {
      "use strict";
      init_parser4();
      init_db4();
      init_renderer4();
      init_styles21();
      diagram28 = {
        parser: parser24,
        db: db8,
        renderer: renderer_default2,
        styles: styles_default19
      };
    }
  });

  // src/diagrams/ishikawa/parser/ishikawa.jison
  var parser25, ishikawa_default;
  var init_ishikawa = __esm({
    "src/diagrams/ishikawa/parser/ishikawa.jison"() {
      "use strict";
      parser25 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [1, 4], $V1 = [1, 14], $V2 = [1, 12], $V3 = [1, 13], $V4 = [6, 7, 8], $V5 = [1, 20], $V6 = [1, 18], $V7 = [1, 19], $V8 = [6, 7, 11], $V9 = [1, 6, 13, 14], $Va = [1, 23], $Vb = [1, 24], $Vc = [1, 6, 7, 11, 13, 14];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "ishikawa": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "ISHIKAWA": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "TEXT": 14, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "ISHIKAWA", 11: "EOF", 13: "SPACELIST", 14: "TEXT" },
          productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 1], [12, 1], [12, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 6:
              case 7:
                return yy;
                break;
              case 15:
                yy.addNode($$[$0 - 1].length, $$[$0].trim());
                break;
              case 16:
                yy.addNode(0, $$[$0].trim());
                break;
            }
          }, "anonymous"),
          table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: $V3 }, o2($V4, [2, 3]), { 1: [2, 2] }, o2($V4, [2, 4]), o2($V4, [2, 5]), { 1: [2, 6], 6: $V1, 12: 15, 13: $V2, 14: $V3 }, { 6: $V1, 9: 16, 12: 11, 13: $V2, 14: $V3 }, { 6: $V5, 7: $V6, 10: 17, 11: $V7 }, o2($V8, [2, 18], { 14: [1, 21] }), o2($V8, [2, 16]), o2($V8, [2, 17]), { 6: $V5, 7: $V6, 10: 22, 11: $V7 }, { 1: [2, 7], 6: $V1, 12: 15, 13: $V2, 14: $V3 }, o2($V9, [2, 14], { 7: $Va, 11: $Vb }), o2($Vc, [2, 8]), o2($Vc, [2, 9]), o2($Vc, [2, 10]), o2($V8, [2, 15]), o2($V9, [2, 13], { 7: $Va, 11: $Vb }), o2($Vc, [2, 11]), o2($Vc, [2, 12])],
          defaultActions: { 2: [2, 1], 6: [2, 2] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  return 6;
                  break;
                case 1:
                  return 8;
                  break;
                case 2:
                  return 8;
                  break;
                case 3:
                  return 6;
                  break;
                case 4:
                  return 7;
                  break;
                case 5:
                  return 13;
                  break;
                case 6:
                  return 14;
                  break;
                case 7:
                  return 11;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:\s*%%.*)/i, /^(?:ishikawa-beta\b)/i, /^(?:ishikawa\b)/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:[^\n]+)/i, /^(?:$)/i],
            conditions: { "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser25.parser = parser25;
      ishikawa_default = parser25;
    }
  });

  // src/diagrams/ishikawa/ishikawaDb.ts
  var IshikawaDB;
  var init_ishikawaDb = __esm({
    "src/diagrams/ishikawa/ishikawaDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_common();
      init_commonDb();
      IshikawaDB = class {
        constructor() {
          this.stack = [];
          this.clear = this.clear.bind(this);
          this.addNode = this.addNode.bind(this);
          this.getRoot = this.getRoot.bind(this);
        }
        static {
          __name(this, "IshikawaDB");
        }
        clear() {
          this.root = void 0;
          this.stack = [];
          this.baseLevel = void 0;
          clear();
        }
        getRoot() {
          return this.root;
        }
        addNode(rawLevel, text4) {
          const label = common_default.sanitizeText(text4, getConfig2());
          if (!this.root) {
            this.root = { text: label, children: [] };
            this.stack = [{ level: 0, node: this.root }];
            setDiagramTitle(label);
            return;
          }
          this.baseLevel ??= rawLevel;
          let level = rawLevel - this.baseLevel + 1;
          if (level <= 0) {
            level = 1;
          }
          while (this.stack.length > 1 && this.stack[this.stack.length - 1].level >= level) {
            this.stack.pop();
          }
          const parent4 = this.stack[this.stack.length - 1].node;
          const node2 = { text: label, children: [] };
          parent4.children.push(node2);
          this.stack.push({ level, node: node2 });
        }
        getAccTitle() {
          return getAccTitle();
        }
        setAccTitle(title2) {
          setAccTitle(title2);
        }
        getAccDescription() {
          return getAccDescription();
        }
        setAccDescription(description) {
          setAccDescription(description);
        }
        getDiagramTitle() {
          return getDiagramTitle();
        }
        setDiagramTitle(title2) {
          setDiagramTitle(title2);
        }
      };
    }
  });

  // src/diagrams/ishikawa/ishikawaRenderer.ts
  var FONT_SIZE_DEFAULT, SPINE_BASE_LENGTH, BONE_STUB, BONE_BASE, BONE_PER_CHILD, ANGLE, COS_A, SIN_A, applyPaddedViewBox, draw28, sideStats, drawHead, flattenTree, drawCauseLabel, drawArrowMarker, drawBranch, splitLines, wrapText, drawMultilineText, lerp, drawLine, renderer10;
  var init_ishikawaRenderer = __esm({
    "src/diagrams/ishikawa/ishikawaRenderer.ts"() {
      "use strict";
      init_diagramAPI();
      init_selectSvgElement();
      init_setupGraphViewbox();
      init_utils2();
      init_rough_esm();
      FONT_SIZE_DEFAULT = 14;
      SPINE_BASE_LENGTH = 250;
      BONE_STUB = 30;
      BONE_BASE = 60;
      BONE_PER_CHILD = 5;
      ANGLE = 82 * Math.PI / 180;
      COS_A = Math.cos(ANGLE);
      SIN_A = Math.sin(ANGLE);
      applyPaddedViewBox = /* @__PURE__ */ __name((svgEl, pad3, maxW) => {
        const bbox = svgEl.node().getBBox();
        const w4 = bbox.width + pad3 * 2;
        const h3 = bbox.height + pad3 * 2;
        configureSvgSize(svgEl, h3, w4, maxW);
        svgEl.attr("viewBox", `${bbox.x - pad3} ${bbox.y - pad3} ${w4} ${h3}`);
      }, "applyPaddedViewBox");
      draw28 = /* @__PURE__ */ __name((_text, id41, _version, diagram38) => {
        const db12 = diagram38.db;
        const root4 = db12.getRoot();
        if (!root4) {
          return;
        }
        const drawConfig = getConfig2();
        const { look, handDrawnSeed, themeVariables } = drawConfig;
        const fontSize = parseFontSize(drawConfig.fontSize)[0] ?? FONT_SIZE_DEFAULT;
        const isHandDrawn = look === "handDrawn";
        const causes = root4.children ?? [];
        const padding = drawConfig.ishikawa?.diagramPadding ?? 20;
        const useMaxWidth = drawConfig.ishikawa?.useMaxWidth ?? false;
        const svg2 = selectSvgElement(id41);
        const g2 = svg2.append("g").attr("class", "ishikawa");
        const roughSvg = isHandDrawn ? at.svg(svg2.node()) : void 0;
        const roughContext = roughSvg ? {
          roughSvg,
          seed: handDrawnSeed ?? 0,
          lineColor: themeVariables?.lineColor ?? "#333",
          fillColor: themeVariables?.mainBkg ?? "#fff"
        } : void 0;
        const markerId = `ishikawa-arrow-${id41}`;
        if (!isHandDrawn) {
          g2.append("defs").append("marker").attr("id", markerId).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerWidth", 6).attr("markerHeight", 6).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 Z").attr("class", "ishikawa-arrow");
        }
        let spineX = 0;
        let spineY = SPINE_BASE_LENGTH;
        const spineLine = isHandDrawn ? void 0 : drawLine(g2, spineX, spineY, spineX, spineY, "ishikawa-spine");
        drawHead(g2, spineX, spineY, root4.text, fontSize, roughContext);
        if (!causes.length) {
          if (isHandDrawn) {
            drawLine(g2, spineX, spineY, spineX, spineY, "ishikawa-spine", roughContext);
          }
          applyPaddedViewBox(svg2, padding, useMaxWidth);
          return;
        }
        spineX -= 20;
        const upperCauses = causes.filter((_3, i2) => i2 % 2 === 0);
        const lowerCauses = causes.filter((_3, i2) => i2 % 2 === 1);
        const upperStats = sideStats(upperCauses);
        const lowerStats = sideStats(lowerCauses);
        const descendantTotal = upperStats.total + lowerStats.total;
        let upperLen = SPINE_BASE_LENGTH;
        let lowerLen = SPINE_BASE_LENGTH;
        if (descendantTotal > 0) {
          const pool = SPINE_BASE_LENGTH * 2;
          const minLen = SPINE_BASE_LENGTH * 0.3;
          upperLen = Math.max(minLen, pool * (upperStats.total / descendantTotal));
          lowerLen = Math.max(minLen, pool * (lowerStats.total / descendantTotal));
        }
        const minSpacing = fontSize * 2;
        upperLen = Math.max(upperLen, upperStats.max * minSpacing);
        lowerLen = Math.max(lowerLen, lowerStats.max * minSpacing);
        spineY = Math.max(upperLen, SPINE_BASE_LENGTH);
        if (spineLine) {
          spineLine.attr("y1", spineY).attr("y2", spineY);
        }
        g2.select(".ishikawa-head-group").attr("transform", `translate(0,${spineY})`);
        const pairCount = Math.ceil(causes.length / 2);
        for (let p3 = 0; p3 < pairCount; p3++) {
          const pg = g2.append("g").attr("class", "ishikawa-pair");
          for (const [cause, dir2, len] of [
            [causes[p3 * 2], -1, upperLen],
            [causes[p3 * 2 + 1], 1, lowerLen]
          ]) {
            if (cause) {
              drawBranch(pg, cause, spineX, spineY, dir2, len, fontSize, roughContext);
            }
          }
          spineX = pg.selectAll("text").nodes().reduce((left3, n2) => Math.min(left3, n2.getBBox().x), Infinity);
        }
        if (isHandDrawn) {
          drawLine(g2, spineX, spineY, 0, spineY, "ishikawa-spine", roughContext);
        } else {
          spineLine.attr("x1", spineX);
          const markerUrl = `url(#${markerId})`;
          g2.selectAll("line.ishikawa-branch, line.ishikawa-sub-branch").attr("marker-start", markerUrl);
        }
        applyPaddedViewBox(svg2, padding, useMaxWidth);
      }, "draw");
      sideStats = /* @__PURE__ */ __name((nodes5) => {
        const countDescendants = /* @__PURE__ */ __name((node2) => node2.children.reduce((sum2, child) => sum2 + 1 + countDescendants(child), 0), "countDescendants");
        return nodes5.reduce(
          (stats, node2) => {
            const descendants3 = countDescendants(node2);
            stats.total += descendants3;
            stats.max = Math.max(stats.max, descendants3);
            return stats;
          },
          { total: 0, max: 0 }
        );
      }, "sideStats");
      drawHead = /* @__PURE__ */ __name((svg2, x5, y6, label, fontSize, roughContext) => {
        const maxChars = Math.max(6, Math.floor(110 / (fontSize * 0.6)));
        const headGroup = svg2.append("g").attr("class", "ishikawa-head-group").attr("transform", `translate(${x5},${y6})`);
        const textEl = drawMultilineText(
          headGroup,
          wrapText(label, maxChars),
          0,
          0,
          "ishikawa-head-label",
          "start",
          fontSize
        );
        const tb = textEl.node().getBBox();
        const w4 = Math.max(60, tb.width + 6);
        const h3 = Math.max(40, tb.height * 2 + 40);
        const headPath = `M 0 ${-h3 / 2} L 0 ${h3 / 2} Q ${w4 * 2.4} 0 0 ${-h3 / 2} Z`;
        if (roughContext) {
          const roughNode = roughContext.roughSvg.path(headPath, {
            roughness: 1.5,
            seed: roughContext.seed,
            fill: roughContext.fillColor,
            fillStyle: "hachure",
            fillWeight: 2.5,
            hachureGap: 5,
            stroke: roughContext.lineColor,
            strokeWidth: 2
          });
          headGroup.insert(() => roughNode, ":first-child").attr("class", "ishikawa-head");
        } else {
          headGroup.insert("path", ":first-child").attr("class", "ishikawa-head").attr("d", headPath);
        }
        textEl.attr("transform", `translate(${(w4 - tb.width) / 2 - tb.x + 3},${-tb.y - tb.height / 2})`);
      }, "drawHead");
      flattenTree = /* @__PURE__ */ __name((children2, direction2) => {
        const entries2 = [];
        const yOrder = [];
        const walk = /* @__PURE__ */ __name((nodes5, pid, depth) => {
          const ordered = direction2 === -1 ? [...nodes5].reverse() : nodes5;
          for (const child of ordered) {
            const idx = entries2.length;
            const gc2 = child.children ?? [];
            entries2.push({
              depth,
              text: wrapText(child.text, 15),
              parentIndex: pid,
              childCount: gc2.length
            });
            if (depth % 2 === 0) {
              yOrder.push(idx);
              if (gc2.length) {
                walk(gc2, idx, depth + 1);
              }
            } else {
              if (gc2.length) {
                walk(gc2, idx, depth + 1);
              }
              yOrder.push(idx);
            }
          }
        }, "walk");
        walk(children2, -1, 2);
        return { entries: entries2, yOrder };
      }, "flattenTree");
      drawCauseLabel = /* @__PURE__ */ __name((svg2, text4, x5, y6, direction2, fontSize, roughContext) => {
        const lg = svg2.append("g").attr("class", "ishikawa-label-group");
        const lt = drawMultilineText(
          lg,
          text4,
          x5,
          y6 + 11 * direction2,
          "ishikawa-label cause",
          "middle",
          fontSize
        );
        const tb = lt.node().getBBox();
        if (roughContext) {
          const roughNode = roughContext.roughSvg.rectangle(
            tb.x - 20,
            tb.y - 2,
            tb.width + 40,
            tb.height + 4,
            {
              roughness: 1.5,
              seed: roughContext.seed,
              fill: roughContext.fillColor,
              fillStyle: "hachure",
              fillWeight: 2.5,
              hachureGap: 5,
              stroke: roughContext.lineColor,
              strokeWidth: 2
            }
          );
          lg.insert(() => roughNode, ":first-child").attr("class", "ishikawa-label-box");
        } else {
          lg.insert("rect", ":first-child").attr("class", "ishikawa-label-box").attr("x", tb.x - 20).attr("y", tb.y - 2).attr("width", tb.width + 40).attr("height", tb.height + 4);
        }
      }, "drawCauseLabel");
      drawArrowMarker = /* @__PURE__ */ __name((g2, x5, y6, dx, dy, roughContext) => {
        const len = Math.sqrt(dx * dx + dy * dy);
        if (len === 0) {
          return;
        }
        const ux = dx / len;
        const uy = dy / len;
        const s2 = 6;
        const px = -uy * s2;
        const py = ux * s2;
        const tipX = x5;
        const tipY = y6;
        const d3 = `M ${tipX} ${tipY} L ${tipX - ux * s2 * 2 + px} ${tipY - uy * s2 * 2 + py} L ${tipX - ux * s2 * 2 - px} ${tipY - uy * s2 * 2 - py} Z`;
        const roughNode = roughContext.roughSvg.path(d3, {
          roughness: 1,
          seed: roughContext.seed,
          fill: roughContext.lineColor,
          fillStyle: "solid",
          stroke: roughContext.lineColor,
          strokeWidth: 1
        });
        g2.append(() => roughNode);
      }, "drawArrowMarker");
      drawBranch = /* @__PURE__ */ __name((svg2, node2, startX2, startY2, direction2, length2, fontSize, roughContext) => {
        const children2 = node2.children ?? [];
        const lineLen = length2 * (children2.length ? 1 : 0.2);
        const dx = -COS_A * lineLen;
        const dy = SIN_A * lineLen * direction2;
        const endX = startX2 + dx;
        const endY = startY2 + dy;
        drawLine(svg2, startX2, startY2, endX, endY, "ishikawa-branch", roughContext);
        if (roughContext) {
          drawArrowMarker(svg2, startX2, startY2, startX2 - endX, startY2 - endY, roughContext);
        }
        drawCauseLabel(svg2, node2.text, endX, endY, direction2, fontSize, roughContext);
        if (!children2.length) {
          return;
        }
        const { entries: entries2, yOrder } = flattenTree(children2, direction2);
        const entryCount = entries2.length;
        const ys = new Array(entryCount);
        for (const [slot, entryIdx] of yOrder.entries()) {
          ys[entryIdx] = startY2 + dy * ((slot + 1) / (entryCount + 1));
        }
        const bones = /* @__PURE__ */ new Map();
        bones.set(-1, {
          x0: startX2,
          y0: startY2,
          x1: endX,
          y1: endY,
          childCount: children2.length,
          childrenDrawn: 0
        });
        const diagonalX = -COS_A;
        const diagonalY = SIN_A * direction2;
        const oddLabel = direction2 < 0 ? "ishikawa-label up" : "ishikawa-label down";
        for (const [i2, e3] of entries2.entries()) {
          const y6 = ys[i2];
          const par = bones.get(e3.parentIndex);
          const grp = svg2.append("g").attr("class", "ishikawa-sub-group");
          let bx0 = 0;
          let by0 = 0;
          let bx1 = 0;
          if (e3.depth % 2 === 0) {
            const dyP = par.y1 - par.y0;
            bx0 = lerp(par.x0, par.x1, dyP ? (y6 - par.y0) / dyP : 0.5);
            by0 = y6;
            bx1 = bx0 - (e3.childCount > 0 ? BONE_BASE + e3.childCount * BONE_PER_CHILD : BONE_STUB);
            drawLine(grp, bx0, y6, bx1, y6, "ishikawa-sub-branch", roughContext);
            if (roughContext) {
              drawArrowMarker(grp, bx0, y6, 1, 0, roughContext);
            }
            drawMultilineText(grp, e3.text, bx1, y6, "ishikawa-label align", "end", fontSize);
          } else {
            const k2 = par.childrenDrawn++;
            bx0 = lerp(par.x0, par.x1, (par.childCount - k2) / (par.childCount + 1));
            by0 = par.y0;
            bx1 = bx0 + diagonalX * ((y6 - by0) / diagonalY);
            drawLine(grp, bx0, by0, bx1, y6, "ishikawa-sub-branch", roughContext);
            if (roughContext) {
              drawArrowMarker(grp, bx0, by0, bx0 - bx1, by0 - y6, roughContext);
            }
            drawMultilineText(grp, e3.text, bx1, y6, oddLabel, "end", fontSize);
          }
          if (e3.childCount > 0) {
            bones.set(i2, {
              x0: bx0,
              y0: by0,
              x1: bx1,
              y1: y6,
              childCount: e3.childCount,
              childrenDrawn: 0
            });
          }
        }
      }, "drawBranch");
      splitLines = /* @__PURE__ */ __name((text4) => text4.split(/<br\s*\/?>|\n/), "splitLines");
      wrapText = /* @__PURE__ */ __name((text4, maxChars) => {
        if (text4.length <= maxChars) {
          return text4;
        }
        const lines = [];
        for (const word of text4.split(/\s+/)) {
          const last4 = lines.length - 1;
          if (last4 >= 0 && lines[last4].length + 1 + word.length <= maxChars) {
            lines[last4] += " " + word;
          } else {
            lines.push(word);
          }
        }
        return lines.join("\n");
      }, "wrapText");
      drawMultilineText = /* @__PURE__ */ __name((g2, text4, x5, y6, cls, anchor2, fontSize) => {
        const lines = splitLines(text4);
        const lh = fontSize * 1.05;
        const el = g2.append("text").attr("class", cls).attr("text-anchor", anchor2).attr("x", x5).attr("y", y6 - (lines.length - 1) * lh / 2);
        for (const [i2, line2] of lines.entries()) {
          el.append("tspan").attr("x", x5).attr("dy", i2 === 0 ? 0 : lh).text(line2);
        }
        return el;
      }, "drawMultilineText");
      lerp = /* @__PURE__ */ __name((a2, b3, t4) => a2 + (b3 - a2) * t4, "lerp");
      drawLine = /* @__PURE__ */ __name((g2, x1, y1, x22, y22, cls, roughContext) => {
        if (roughContext) {
          const roughNode = roughContext.roughSvg.line(x1, y1, x22, y22, {
            roughness: 1.5,
            seed: roughContext.seed,
            stroke: roughContext.lineColor,
            strokeWidth: 2
          });
          g2.append(() => roughNode).attr("class", cls);
          return void 0;
        }
        return g2.append("line").attr("class", cls).attr("x1", x1).attr("y1", y1).attr("x2", x22).attr("y2", y22);
      }, "drawLine");
      renderer10 = { draw: draw28 };
    }
  });

  // src/diagrams/ishikawa/ishikawaStyles.ts
  var getStyles21, ishikawaStyles_default;
  var init_ishikawaStyles = __esm({
    "src/diagrams/ishikawa/ishikawaStyles.ts"() {
      "use strict";
      getStyles21 = /* @__PURE__ */ __name((options2) => `
.ishikawa .ishikawa-spine,
.ishikawa .ishikawa-branch,
.ishikawa .ishikawa-sub-branch {
  stroke: ${options2.lineColor};
  stroke-width: 2;
  fill: none;
}

.ishikawa .ishikawa-sub-branch {
  stroke-width: 1;
}

.ishikawa .ishikawa-arrow {
  fill: ${options2.lineColor};
}

.ishikawa .ishikawa-head {
  fill: ${options2.mainBkg};
  stroke: ${options2.lineColor};
  stroke-width: 2;
}

.ishikawa .ishikawa-label-box {
  fill: ${options2.mainBkg};
  stroke: ${options2.lineColor};
  stroke-width: 2;
}

.ishikawa text {
  font-family: ${options2.fontFamily};
  font-size: ${options2.fontSize};
  fill: ${options2.textColor};
}

.ishikawa .ishikawa-head-label {
  font-weight: 600;
  text-anchor: middle;
  dominant-baseline: middle;
  font-size: 14px;
}

.ishikawa .ishikawa-label {
  text-anchor: end;
}

.ishikawa .ishikawa-label.cause {
  text-anchor: middle;
  dominant-baseline: middle;
}

.ishikawa .ishikawa-label.align {
  text-anchor: end;
  dominant-baseline: middle;
}

.ishikawa .ishikawa-label.up {
  dominant-baseline: baseline;
}

.ishikawa .ishikawa-label.down {
  dominant-baseline: hanging;
}
`, "getStyles");
      ishikawaStyles_default = getStyles21;
    }
  });

  // src/diagrams/ishikawa/ishikawaDiagram.ts
  var ishikawaDiagram_exports = {};
  __export(ishikawaDiagram_exports, {
    diagram: () => diagram29
  });
  var diagram29;
  var init_ishikawaDiagram = __esm({
    "src/diagrams/ishikawa/ishikawaDiagram.ts"() {
      "use strict";
      init_ishikawa();
      init_ishikawaDb();
      init_ishikawaRenderer();
      init_ishikawaStyles();
      diagram29 = {
        parser: ishikawa_default,
        get db() {
          return new IshikawaDB();
        },
        renderer: renderer10,
        styles: ishikawaStyles_default
      };
    }
  });

  // src/diagrams/venn/parser/venn.jison
  var parser26, venn_default;
  var init_venn = __esm({
    "src/diagrams/venn/parser/venn.jison"() {
      "use strict";
      parser26 = (function() {
        var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) {
          for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ;
          return o3;
        }, "o"), $V0 = [5, 8], $V1 = [7, 8, 11, 12, 17, 19, 22, 24], $V2 = [1, 17], $V3 = [1, 18], $V4 = [7, 8, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 24, 27], $V5 = [1, 31], $V6 = [1, 39], $V7 = [7, 8, 11, 12, 17, 19, 22, 24, 27], $V8 = [1, 57], $V9 = [1, 56], $Va = [1, 58], $Vb = [1, 59], $Vc = [1, 60], $Vd = [7, 8, 11, 12, 16, 17, 19, 20, 22, 24, 27, 31, 32, 33];
        var parser34 = {
          trace: /* @__PURE__ */ __name(function trace() {
          }, "trace"),
          yy: {},
          symbols_: { "error": 2, "start": 3, "optNewlines": 4, "VENN": 5, "document": 6, "EOF": 7, "NEWLINE": 8, "line": 9, "statement": 10, "TITLE": 11, "SET": 12, "identifier": 13, "BRACKET_LABEL": 14, "COLON": 15, "NUMERIC": 16, "UNION": 17, "identifierList": 18, "TEXT": 19, "IDENTIFIER": 20, "STRING": 21, "INDENT_TEXT": 22, "indentedTextTail": 23, "STYLE": 24, "stylesOpt": 25, "styleField": 26, "COMMA": 27, "styleValue": 28, "valueTokens": 29, "valueToken": 30, "HEXCOLOR": 31, "RGBCOLOR": 32, "RGBACOLOR": 33, "$accept": 0, "$end": 1 },
          terminals_: { 2: "error", 5: "VENN", 7: "EOF", 8: "NEWLINE", 11: "TITLE", 12: "SET", 14: "BRACKET_LABEL", 15: "COLON", 16: "NUMERIC", 17: "UNION", 19: "TEXT", 20: "IDENTIFIER", 21: "STRING", 22: "INDENT_TEXT", 24: "STYLE", 27: "COMMA", 31: "HEXCOLOR", 32: "RGBCOLOR", 33: "RGBACOLOR" },
          productions_: [0, [3, 4], [4, 0], [4, 2], [6, 0], [6, 2], [9, 1], [9, 1], [10, 1], [10, 2], [10, 3], [10, 4], [10, 5], [10, 2], [10, 3], [10, 4], [10, 5], [10, 3], [10, 3], [10, 3], [10, 4], [10, 4], [10, 2], [10, 3], [23, 1], [23, 1], [23, 1], [23, 2], [23, 2], [25, 1], [25, 3], [26, 3], [28, 1], [28, 1], [29, 1], [29, 2], [30, 1], [30, 1], [30, 1], [30, 1], [30, 1], [18, 1], [18, 3], [13, 1], [13, 1]],
          performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
            var $0 = $$.length - 1;
            switch (yystate) {
              case 1:
                return $$[$0 - 1];
                break;
              case 2:
              case 3:
              case 4:
                this.$ = [];
                break;
              case 5:
                $$[$0 - 1].push($$[$0]);
                this.$ = $$[$0 - 1];
                break;
              case 6:
                this.$ = [];
                break;
              case 7:
              case 22:
              case 32:
              case 36:
              case 37:
              case 38:
              case 39:
              case 40:
                this.$ = $$[$0];
                break;
              case 8:
                yy.setDiagramTitle($$[$0].substr(6));
                this.$ = $$[$0].substr(6);
                break;
              case 9:
                yy.addSubsetData([$$[$0]], void 0, void 0);
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 10:
                yy.addSubsetData([$$[$0 - 1]], $$[$0], void 0);
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 11:
                yy.addSubsetData([$$[$0 - 2]], void 0, parseFloat($$[$0]));
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 12:
                yy.addSubsetData([$$[$0 - 3]], $$[$0 - 2], parseFloat($$[$0]));
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 13:
                if ($$[$0].length < 2) {
                  throw new Error("union requires multiple identifiers");
                }
                if (yy.validateUnionIdentifiers) {
                  yy.validateUnionIdentifiers($$[$0]);
                }
                yy.addSubsetData($$[$0], void 0, void 0);
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 14:
                if ($$[$0 - 1].length < 2) {
                  throw new Error("union requires multiple identifiers");
                }
                if (yy.validateUnionIdentifiers) {
                  yy.validateUnionIdentifiers($$[$0 - 1]);
                }
                yy.addSubsetData($$[$0 - 1], $$[$0], void 0);
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 15:
                if ($$[$0 - 2].length < 2) {
                  throw new Error("union requires multiple identifiers");
                }
                if (yy.validateUnionIdentifiers) {
                  yy.validateUnionIdentifiers($$[$0 - 2]);
                }
                yy.addSubsetData($$[$0 - 2], void 0, parseFloat($$[$0]));
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 16:
                if ($$[$0 - 3].length < 2) {
                  throw new Error("union requires multiple identifiers");
                }
                if (yy.validateUnionIdentifiers) {
                  yy.validateUnionIdentifiers($$[$0 - 3]);
                }
                yy.addSubsetData($$[$0 - 3], $$[$0 - 2], parseFloat($$[$0]));
                if (yy.setIndentMode) {
                  yy.setIndentMode(true);
                }
                break;
              case 17:
              case 18:
              case 19:
                yy.addTextData($$[$0 - 1], $$[$0], void 0);
                break;
              case 20:
              case 21:
                yy.addTextData($$[$0 - 2], $$[$0 - 1], $$[$0]);
                break;
              case 23:
                yy.addStyleData($$[$0 - 1], $$[$0]);
                break;
              case 24:
              case 25:
              case 26:
                var cs = yy.getCurrentSets();
                if (!cs) throw new Error("text requires set");
                yy.addTextData(cs, $$[$0], void 0);
                break;
              case 27:
              case 28:
                var cs = yy.getCurrentSets();
                if (!cs) throw new Error("text requires set");
                yy.addTextData(cs, $$[$0 - 1], $$[$0]);
                break;
              case 29:
              case 41:
                this.$ = [$$[$0]];
                break;
              case 30:
              case 42:
                this.$ = [...$$[$0 - 2], $$[$0]];
                break;
              case 31:
                this.$ = [$$[$0 - 2], $$[$0]];
                break;
              case 33:
                this.$ = $$[$0].join(" ");
                break;
              case 34:
                this.$ = [$$[$0]];
                break;
              case 35:
                $$[$0 - 1].push($$[$0]);
                this.$ = $$[$0 - 1];
                break;
              case 43:
              case 44:
                this.$ = $$[$0];
                break;
            }
          }, "anonymous"),
          table: [o2($V0, [2, 2], { 3: 1, 4: 2 }), { 1: [3] }, { 5: [1, 3], 8: [1, 4] }, o2($V1, [2, 4], { 6: 5 }), o2($V0, [2, 3]), { 7: [1, 6], 8: [1, 8], 9: 7, 10: 9, 11: [1, 10], 12: [1, 11], 17: [1, 12], 19: [1, 13], 22: [1, 14], 24: [1, 15] }, { 1: [2, 1] }, o2($V1, [2, 5]), o2($V1, [2, 6]), o2($V1, [2, 7]), o2($V1, [2, 8]), { 13: 16, 20: $V2, 21: $V3 }, { 13: 20, 18: 19, 20: $V2, 21: $V3 }, { 13: 20, 18: 21, 20: $V2, 21: $V3 }, { 16: [1, 25], 20: [1, 23], 21: [1, 24], 23: 22 }, { 13: 20, 18: 26, 20: $V2, 21: $V3 }, o2($V1, [2, 9], { 14: [1, 27], 15: [1, 28] }), o2($V4, [2, 43]), o2($V4, [2, 44]), o2($V1, [2, 13], { 14: [1, 29], 15: [1, 30], 27: $V5 }), o2($V4, [2, 41]), { 16: [1, 34], 20: [1, 32], 21: [1, 33], 27: $V5 }, o2($V1, [2, 22]), o2($V1, [2, 24], { 14: [1, 35] }), o2($V1, [2, 25], { 14: [1, 36] }), o2($V1, [2, 26]), { 20: $V6, 25: 37, 26: 38, 27: $V5 }, o2($V1, [2, 10], { 15: [1, 40] }), { 16: [1, 41] }, o2($V1, [2, 14], { 15: [1, 42] }), { 16: [1, 43] }, { 13: 44, 20: $V2, 21: $V3 }, o2($V1, [2, 17], { 14: [1, 45] }), o2($V1, [2, 18], { 14: [1, 46] }), o2($V1, [2, 19]), o2($V1, [2, 27]), o2($V1, [2, 28]), o2($V1, [2, 23], { 27: [1, 47] }), o2($V7, [2, 29]), { 15: [1, 48] }, { 16: [1, 49] }, o2($V1, [2, 11]), { 16: [1, 50] }, o2($V1, [2, 15]), o2($V4, [2, 42]), o2($V1, [2, 20]), o2($V1, [2, 21]), { 20: $V6, 26: 51 }, { 16: $V8, 20: $V9, 21: [1, 53], 28: 52, 29: 54, 30: 55, 31: $Va, 32: $Vb, 33: $Vc }, o2($V1, [2, 12]), o2($V1, [2, 16]), o2($V7, [2, 30]), o2($V7, [2, 31]), o2($V7, [2, 32]), o2($V7, [2, 33], { 30: 61, 16: $V8, 20: $V9, 31: $Va, 32: $Vb, 33: $Vc }), o2($Vd, [2, 34]), o2($Vd, [2, 36]), o2($Vd, [2, 37]), o2($Vd, [2, 38]), o2($Vd, [2, 39]), o2($Vd, [2, 40]), o2($Vd, [2, 35])],
          defaultActions: { 6: [2, 1] },
          parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
            if (hash.recoverable) {
              this.trace(str2);
            } else {
              var error3 = new Error(str2);
              error3.hash = hash;
              throw error3;
            }
          }, "parseError"),
          parse: /* @__PURE__ */ __name(function parse7(input) {
            var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1;
            var args = lstack.slice.call(arguments, 1);
            var lexer2 = Object.create(this.lexer);
            var sharedState = { yy: {} };
            for (var k2 in this.yy) {
              if (Object.prototype.hasOwnProperty.call(this.yy, k2)) {
                sharedState.yy[k2] = this.yy[k2];
              }
            }
            lexer2.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer2;
            sharedState.yy.parser = this;
            if (typeof lexer2.yylloc == "undefined") {
              lexer2.yylloc = {};
            }
            var yyloc = lexer2.yylloc;
            lstack.push(yyloc);
            var ranges = lexer2.options && lexer2.options.ranges;
            if (typeof sharedState.yy.parseError === "function") {
              this.parseError = sharedState.yy.parseError;
            } else {
              this.parseError = Object.getPrototypeOf(this).parseError;
            }
            function popStack(n2) {
              stack.length = stack.length - 2 * n2;
              vstack.length = vstack.length - n2;
              lstack.length = lstack.length - n2;
            }
            __name(popStack, "popStack");
            function lex() {
              var token2;
              token2 = tstack.pop() || lexer2.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex, "lex");
            var symbol, preErrorSymbol, state4, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state4 = stack[stack.length - 1];
              if (this.defaultActions[state4]) {
                action = this.defaultActions[state4];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex();
                }
                action = table[state4] && table[state4][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state4]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer2.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
                } else {
                  errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
                }
                this.parseError(errStr, {
                  text: lexer2.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer2.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state4 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer2.yytext);
                  lstack.push(lexer2.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer2.yyleng;
                    yytext = lexer2.yytext;
                    yylineno = lexer2.yylineno;
                    yyloc = lexer2.yylloc;
                    if (recovering > 0) {
                      recovering--;
                    }
                  } else {
                    symbol = preErrorSymbol;
                    preErrorSymbol = null;
                  }
                  break;
                case 2:
                  len = this.productions_[action[1]][1];
                  yyval.$ = vstack[vstack.length - len];
                  yyval._$ = {
                    first_line: lstack[lstack.length - (len || 1)].first_line,
                    last_line: lstack[lstack.length - 1].last_line,
                    first_column: lstack[lstack.length - (len || 1)].first_column,
                    last_column: lstack[lstack.length - 1].last_column
                  };
                  if (ranges) {
                    yyval._$.range = [
                      lstack[lstack.length - (len || 1)].range[0],
                      lstack[lstack.length - 1].range[1]
                    ];
                  }
                  r2 = this.performAction.apply(yyval, [
                    yytext,
                    yyleng,
                    yylineno,
                    sharedState.yy,
                    action[1],
                    vstack,
                    lstack
                  ].concat(args));
                  if (typeof r2 !== "undefined") {
                    return r2;
                  }
                  if (len) {
                    stack = stack.slice(0, -1 * len * 2);
                    vstack = vstack.slice(0, -1 * len);
                    lstack = lstack.slice(0, -1 * len);
                  }
                  stack.push(this.productions_[action[1]][0]);
                  vstack.push(yyval.$);
                  lstack.push(yyval._$);
                  newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]];
                  stack.push(newState2);
                  break;
                case 3:
                  return true;
              }
            }
            return true;
          }, "parse")
        };
        var lexer = /* @__PURE__ */ (function() {
          var lexer2 = {
            EOF: 1,
            parseError: /* @__PURE__ */ __name(function parseError(str2, hash) {
              if (this.yy.parser) {
                this.yy.parser.parseError(str2, hash);
              } else {
                throw new Error(str2);
              }
            }, "parseError"),
            // resets the lexer, sets new input
            setInput: /* @__PURE__ */ __name(function(input, yy) {
              this.yy = yy || this.yy || {};
              this._input = input;
              this._more = this._backtrack = this.done = false;
              this.yylineno = this.yyleng = 0;
              this.yytext = this.matched = this.match = "";
              this.conditionStack = ["INITIAL"];
              this.yylloc = {
                first_line: 1,
                first_column: 0,
                last_line: 1,
                last_column: 0
              };
              if (this.options.ranges) {
                this.yylloc.range = [0, 0];
              }
              this.offset = 0;
              return this;
            }, "setInput"),
            // consumes and returns one char from the input
            input: /* @__PURE__ */ __name(function() {
              var ch = this._input[0];
              this.yytext += ch;
              this.yyleng++;
              this.offset++;
              this.match += ch;
              this.matched += ch;
              var lines = ch.match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno++;
                this.yylloc.last_line++;
              } else {
                this.yylloc.last_column++;
              }
              if (this.options.ranges) {
                this.yylloc.range[1]++;
              }
              this._input = this._input.slice(1);
              return ch;
            }, "input"),
            // unshifts one char (or a string) into the input
            unput: /* @__PURE__ */ __name(function(ch) {
              var len = ch.length;
              var lines = ch.split(/(?:\r\n?|\n)/g);
              this._input = ch + this._input;
              this.yytext = this.yytext.substr(0, this.yytext.length - len);
              this.offset -= len;
              var oldLines = this.match.split(/(?:\r\n?|\n)/g);
              this.match = this.match.substr(0, this.match.length - 1);
              this.matched = this.matched.substr(0, this.matched.length - 1);
              if (lines.length - 1) {
                this.yylineno -= lines.length - 1;
              }
              var r2 = this.yylloc.range;
              this.yylloc = {
                first_line: this.yylloc.first_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.first_column,
                last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
              };
              if (this.options.ranges) {
                this.yylloc.range = [r2[0], r2[0] + this.yyleng - len];
              }
              this.yyleng = this.yytext.length;
              return this;
            }, "unput"),
            // When called from action, caches matched text and appends it on next action
            more: /* @__PURE__ */ __name(function() {
              this._more = true;
              return this;
            }, "more"),
            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
            reject: /* @__PURE__ */ __name(function() {
              if (this.options.backtrack_lexer) {
                this._backtrack = true;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
              return this;
            }, "reject"),
            // retain first n characters of the match
            less: /* @__PURE__ */ __name(function(n2) {
              this.unput(this.match.slice(n2));
            }, "less"),
            // displays already matched input, i.e. for error messages
            pastInput: /* @__PURE__ */ __name(function() {
              var past = this.matched.substr(0, this.matched.length - this.match.length);
              return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
            }, "pastInput"),
            // displays upcoming input, i.e. for error messages
            upcomingInput: /* @__PURE__ */ __name(function() {
              var next3 = this.match;
              if (next3.length < 20) {
                next3 += this._input.substr(0, 20 - next3.length);
              }
              return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, "");
            }, "upcomingInput"),
            // displays the character position where the lexing error occurred, i.e. for error messages
            showPosition: /* @__PURE__ */ __name(function() {
              var pre = this.pastInput();
              var c3 = new Array(pre.length + 1).join("-");
              return pre + this.upcomingInput() + "\n" + c3 + "^";
            }, "showPosition"),
            // test the lexed token: return FALSE when not a match, otherwise return token
            test_match: /* @__PURE__ */ __name(function(match3, indexed_rule) {
              var token2, lines, backup;
              if (this.options.backtrack_lexer) {
                backup = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                };
                if (this.options.ranges) {
                  backup.yylloc.range = this.yylloc.range.slice(0);
                }
              }
              lines = match3[0].match(/(?:\r\n?|\n).*/g);
              if (lines) {
                this.yylineno += lines.length;
              }
              this.yylloc = {
                first_line: this.yylloc.last_line,
                last_line: this.yylineno + 1,
                first_column: this.yylloc.last_column,
                last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match3[0].length
              };
              this.yytext += match3[0];
              this.match += match3[0];
              this.matches = match3;
              this.yyleng = this.yytext.length;
              if (this.options.ranges) {
                this.yylloc.range = [this.offset, this.offset += this.yyleng];
              }
              this._more = false;
              this._backtrack = false;
              this._input = this._input.slice(match3[0].length);
              this.matched += match3[0];
              token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
              if (this.done && this._input) {
                this.done = false;
              }
              if (token2) {
                return token2;
              } else if (this._backtrack) {
                for (var k2 in backup) {
                  this[k2] = backup[k2];
                }
                return false;
              }
              return false;
            }, "test_match"),
            // return next match in input
            next: /* @__PURE__ */ __name(function() {
              if (this.done) {
                return this.EOF;
              }
              if (!this._input) {
                this.done = true;
              }
              var token2, match3, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules2 = this._currentRules();
              for (var i2 = 0; i2 < rules2.length; i2++) {
                tempMatch = this._input.match(this.rules[rules2[i2]]);
                if (tempMatch && (!match3 || tempMatch[0].length > match3[0].length)) {
                  match3 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules2[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match3 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match3) {
                token2 = this.test_match(match3, rules2[index]);
                if (token2 !== false) {
                  return token2;
                }
                return false;
              }
              if (this._input === "") {
                return this.EOF;
              } else {
                return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                });
              }
            }, "next"),
            // return next match that has a token
            lex: /* @__PURE__ */ __name(function lex() {
              var r2 = this.next();
              if (r2) {
                return r2;
              } else {
                return this.lex();
              }
            }, "lex"),
            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
            begin: /* @__PURE__ */ __name(function begin(condition) {
              this.conditionStack.push(condition);
            }, "begin"),
            // pop the previously active lexer condition state off the condition stack
            popState: /* @__PURE__ */ __name(function popState() {
              var n2 = this.conditionStack.length - 1;
              if (n2 > 0) {
                return this.conditionStack.pop();
              } else {
                return this.conditionStack[0];
              }
            }, "popState"),
            // produce the lexer rule set which is active for the currently active lexer condition state
            _currentRules: /* @__PURE__ */ __name(function _currentRules() {
              if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
              } else {
                return this.conditions["INITIAL"].rules;
              }
            }, "_currentRules"),
            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
            topState: /* @__PURE__ */ __name(function topState(n2) {
              n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0);
              if (n2 >= 0) {
                return this.conditionStack[n2];
              } else {
                return "INITIAL";
              }
            }, "topState"),
            // alias for begin(condition)
            pushState: /* @__PURE__ */ __name(function pushState(condition) {
              this.begin(condition);
            }, "pushState"),
            // return the number of states currently on the stack
            stateStackSize: /* @__PURE__ */ __name(function stateStackSize() {
              return this.conditionStack.length;
            }, "stateStackSize"),
            options: { "case-insensitive": true },
            performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
              var YYSTATE = YY_START;
              switch ($avoiding_name_collisions) {
                case 0:
                  break;
                case 1:
                  break;
                case 2:
                  break;
                case 3:
                  if (yy.getIndentMode && yy.getIndentMode()) {
                    yy.consumeIndentText = true;
                    this.begin("INITIAL");
                    return 22;
                  }
                  break;
                case 4:
                  break;
                case 5:
                  if (yy.setIndentMode) {
                    yy.setIndentMode(false);
                  }
                  this.begin("INITIAL");
                  this.unput(yy_.yytext);
                  break;
                case 6:
                  this.begin("bol");
                  return 8;
                  break;
                case 7:
                  break;
                case 8:
                  break;
                case 9:
                  return 7;
                  break;
                case 10:
                  return 11;
                  break;
                case 11:
                  return 5;
                  break;
                case 12:
                  return 12;
                  break;
                case 13:
                  return 17;
                  break;
                case 14:
                  if (yy.consumeIndentText) {
                    yy.consumeIndentText = false;
                  } else {
                    return 19;
                  }
                  break;
                case 15:
                  return 24;
                  break;
                case 16:
                  yy_.yytext = yy_.yytext.slice(2, -2);
                  return 14;
                  break;
                case 17:
                  yy_.yytext = yy_.yytext.slice(1, -1).trim();
                  return 14;
                  break;
                case 18:
                  return 16;
                  break;
                case 19:
                  return 31;
                  break;
                case 20:
                  return 33;
                  break;
                case 21:
                  return 32;
                  break;
                case 22:
                  return 20;
                  break;
                case 23:
                  return 21;
                  break;
                case 24:
                  return 27;
                  break;
                case 25:
                  return 15;
                  break;
              }
            }, "anonymous"),
            rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[ \t]+(?=[\n\r]))/i, /^(?:[ \t]+(?=text\b))/i, /^(?:[ \t]+)/i, /^(?:[^ \t\n\r])/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[ \t]+)/i, /^(?:$)/i, /^(?:title\s[^#\n;]+)/i, /^(?:venn-beta\b)/i, /^(?:set\b)/i, /^(?:union\b)/i, /^(?:text\b)/i, /^(?:style\b)/i, /^(?:\["[^\"]*"\])/i, /^(?:\[[^\]\"]+\])/i, /^(?:[+-]?(\d+(\.\d+)?|\.\d+))/i, /^(?:#[0-9a-fA-F]{3,8})/i, /^(?:rgba\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i, /^(?:rgb\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i, /^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i, /^(?:"[^\"]*")/i, /^(?:,)/i, /^(?::)/i],
            conditions: { "bol": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "inclusive": true }, "INITIAL": { "rules": [0, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "inclusive": true } }
          };
          return lexer2;
        })();
        parser34.lexer = lexer;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser34;
        parser34.Parser = Parser3;
        return new Parser3();
      })();
      parser26.parser = parser26;
      venn_default = parser26;
    }
  });

  // src/diagrams/venn/vennDB.ts
  function getConfig8() {
    return cleanAndMerge(DEFAULT_VENN_CONFIG, getConfig().venn);
  }
  var subsets, textNodes, styleEntries, knownSets, currentSets, indentMode, addSubsetData, getSubsetData, normalizeText, normalizeStyleValue, addTextData, addStyleData, getStyleData, normalizeIdentifierList, validateUnionIdentifiers, getTextData, getCurrentSets, getIndentMode, setIndentMode, DEFAULT_VENN_CONFIG, customClear, db9;
  var init_vennDB = __esm({
    "src/diagrams/venn/vennDB.ts"() {
      "use strict";
      init_utils2();
      init_config();
      init_commonDb();
      init_defaultConfig();
      subsets = [];
      textNodes = [];
      styleEntries = [];
      knownSets = /* @__PURE__ */ new Set();
      indentMode = false;
      addSubsetData = /* @__PURE__ */ __name((identifierList, label, size4) => {
        const sets = normalizeIdentifierList(identifierList).sort();
        const resolvedSize = size4 ?? 10 / Math.pow(identifierList.length, 2);
        currentSets = sets;
        if (sets.length === 1) {
          knownSets.add(sets[0]);
        }
        subsets.push({
          sets,
          size: resolvedSize,
          label: label ? normalizeText(label) : void 0
        });
      }, "addSubsetData");
      getSubsetData = /* @__PURE__ */ __name(() => {
        return subsets;
      }, "getSubsetData");
      normalizeText = /* @__PURE__ */ __name((text4) => {
        const trimmed = text4.trim();
        if (trimmed.length >= 2 && trimmed.startsWith('"') && trimmed.endsWith('"')) {
          return trimmed.slice(1, -1);
        }
        return trimmed;
      }, "normalizeText");
      normalizeStyleValue = /* @__PURE__ */ __name((value2) => {
        return value2 ? normalizeText(value2) : value2;
      }, "normalizeStyleValue");
      addTextData = /* @__PURE__ */ __name((identifierList, id41, label) => {
        const normalizedId = normalizeText(id41);
        textNodes.push({
          sets: normalizeIdentifierList(identifierList).sort(),
          id: normalizedId,
          label: label ? normalizeText(label) : void 0
        });
      }, "addTextData");
      addStyleData = /* @__PURE__ */ __name((identifierList, data6) => {
        const targets = normalizeIdentifierList(identifierList).sort();
        const styles7 = {};
        for (const [key, value2] of data6) {
          styles7[key] = normalizeStyleValue(value2) ?? value2;
        }
        styleEntries.push({ targets, styles: styles7 });
      }, "addStyleData");
      getStyleData = /* @__PURE__ */ __name(() => {
        return styleEntries;
      }, "getStyleData");
      normalizeIdentifierList = /* @__PURE__ */ __name((identifierList) => {
        return identifierList.map((identifier2) => normalizeText(identifier2));
      }, "normalizeIdentifierList");
      validateUnionIdentifiers = /* @__PURE__ */ __name((identifierList) => {
        const normalized = normalizeIdentifierList(identifierList);
        const unknown = normalized.filter((identifier2) => !knownSets.has(identifier2));
        if (unknown.length > 0) {
          throw new Error(`unknown set identifier: ${unknown.join(", ")}`);
        }
      }, "validateUnionIdentifiers");
      getTextData = /* @__PURE__ */ __name(() => {
        return textNodes;
      }, "getTextData");
      getCurrentSets = /* @__PURE__ */ __name(() => currentSets, "getCurrentSets");
      getIndentMode = /* @__PURE__ */ __name(() => indentMode, "getIndentMode");
      setIndentMode = /* @__PURE__ */ __name((enabled) => {
        indentMode = enabled;
      }, "setIndentMode");
      DEFAULT_VENN_CONFIG = defaultConfig_default.venn;
      __name(getConfig8, "getConfig");
      customClear = /* @__PURE__ */ __name(() => {
        clear();
        subsets.length = 0;
        textNodes.length = 0;
        styleEntries.length = 0;
        knownSets.clear();
        currentSets = void 0;
        indentMode = false;
      }, "customClear");
      db9 = {
        getConfig: getConfig8,
        clear: customClear,
        setAccTitle,
        getAccTitle,
        setDiagramTitle,
        getDiagramTitle,
        getAccDescription,
        setAccDescription,
        addSubsetData,
        getSubsetData,
        addTextData,
        addStyleData,
        validateUnionIdentifiers,
        getTextData,
        getStyleData,
        getCurrentSets,
        getIndentMode,
        setIndentMode
      };
    }
  });

  // src/diagrams/venn/styles.ts
  var getStyles22, styles_default20;
  var init_styles22 = __esm({
    "src/diagrams/venn/styles.ts"() {
      "use strict";
      getStyles22 = /* @__PURE__ */ __name((options2) => `
  .venn-title {
    font-size: 32px;
    fill: ${options2.vennTitleTextColor};
    font-family: ${options2.fontFamily};
  }

  .venn-circle text {
    font-size: 48px;
    font-family: ${options2.fontFamily};
  }

  .venn-intersection text {
    font-size: 48px;
    fill: ${options2.vennSetTextColor};
    font-family: ${options2.fontFamily};
  }

  .venn-text-node {
    font-family: ${options2.fontFamily};
    color: ${options2.vennSetTextColor};
  }
`, "getStyles");
      styles_default20 = getStyles22;
    }
  });

  // ../../node_modules/.pnpm/@upsetjs+venn.js@2.0.0/node_modules/@upsetjs/venn.js/build/venn.esm.js
  function intersectionArea(circles, stats) {
    const intersectionPoints = getIntersectionPoints(circles);
    const innerPoints = intersectionPoints.filter((p3) => containedInCircles(p3, circles));
    let arcArea = 0;
    let polygonArea = 0;
    const arcs = [];
    if (innerPoints.length > 1) {
      const center4 = getCenter(innerPoints);
      for (let i2 = 0; i2 < innerPoints.length; ++i2) {
        const p3 = innerPoints[i2];
        p3.angle = Math.atan2(p3.x - center4.x, p3.y - center4.y);
      }
      innerPoints.sort((a2, b3) => b3.angle - a2.angle);
      let p22 = innerPoints[innerPoints.length - 1];
      for (let i2 = 0; i2 < innerPoints.length; ++i2) {
        const p1 = innerPoints[i2];
        polygonArea += (p22.x + p1.x) * (p1.y - p22.y);
        const midPoint = { x: (p1.x + p22.x) / 2, y: (p1.y + p22.y) / 2 };
        let arc = null;
        for (let j3 = 0; j3 < p1.parentIndex.length; ++j3) {
          if (p22.parentIndex.includes(p1.parentIndex[j3])) {
            const circle6 = circles[p1.parentIndex[j3]];
            const a1 = Math.atan2(p1.x - circle6.x, p1.y - circle6.y);
            const a2 = Math.atan2(p22.x - circle6.x, p22.y - circle6.y);
            let angleDiff = a2 - a1;
            if (angleDiff < 0) {
              angleDiff += 2 * Math.PI;
            }
            const a3 = a2 - angleDiff / 2;
            let width3 = distance2(midPoint, {
              x: circle6.x + circle6.radius * Math.sin(a3),
              y: circle6.y + circle6.radius * Math.cos(a3)
            });
            if (width3 > circle6.radius * 2) {
              width3 = circle6.radius * 2;
            }
            if (arc == null || arc.width > width3) {
              arc = { circle: circle6, width: width3, p1, p2: p22, large: width3 > circle6.radius, sweep: true };
            }
          }
        }
        if (arc != null) {
          arcs.push(arc);
          arcArea += circleArea(arc.circle.radius, arc.width);
          p22 = p1;
        }
      }
    } else {
      let smallest = circles[0];
      for (let i2 = 1; i2 < circles.length; ++i2) {
        if (circles[i2].radius < smallest.radius) {
          smallest = circles[i2];
        }
      }
      let disjoint = false;
      for (let i2 = 0; i2 < circles.length; ++i2) {
        if (distance2(circles[i2], smallest) > Math.abs(smallest.radius - circles[i2].radius)) {
          disjoint = true;
          break;
        }
      }
      if (disjoint) {
        arcArea = polygonArea = 0;
      } else {
        arcArea = smallest.radius * smallest.radius * Math.PI;
        arcs.push({
          circle: smallest,
          p1: { x: smallest.x, y: smallest.y + smallest.radius },
          p2: { x: smallest.x - SMALL$1, y: smallest.y + smallest.radius },
          width: smallest.radius * 2,
          large: true,
          sweep: true
        });
      }
    }
    polygonArea /= 2;
    if (stats) {
      stats.area = arcArea + polygonArea;
      stats.arcArea = arcArea;
      stats.polygonArea = polygonArea;
      stats.arcs = arcs;
      stats.innerPoints = innerPoints;
      stats.intersectionPoints = intersectionPoints;
    }
    return arcArea + polygonArea;
  }
  function containedInCircles(point8, circles) {
    return circles.every((circle6) => distance2(point8, circle6) < circle6.radius + SMALL$1);
  }
  function getIntersectionPoints(circles) {
    const ret = [];
    for (let i2 = 0; i2 < circles.length; ++i2) {
      for (let j3 = i2 + 1; j3 < circles.length; ++j3) {
        const intersect3 = circleCircleIntersection(circles[i2], circles[j3]);
        for (const p3 of intersect3) {
          p3.parentIndex = [i2, j3];
          ret.push(p3);
        }
      }
    }
    return ret;
  }
  function circleArea(r2, width3) {
    return r2 * r2 * Math.acos(1 - width3 / r2) - (r2 - width3) * Math.sqrt(width3 * (2 * r2 - width3));
  }
  function distance2(p1, p22) {
    return Math.sqrt((p1.x - p22.x) * (p1.x - p22.x) + (p1.y - p22.y) * (p1.y - p22.y));
  }
  function circleOverlap(r1, r2, d3) {
    if (d3 >= r1 + r2) {
      return 0;
    }
    if (d3 <= Math.abs(r1 - r2)) {
      return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);
    }
    const w1 = r1 - (d3 * d3 - r2 * r2 + r1 * r1) / (2 * d3);
    const w22 = r2 - (d3 * d3 - r1 * r1 + r2 * r2) / (2 * d3);
    return circleArea(r1, w1) + circleArea(r2, w22);
  }
  function circleCircleIntersection(p1, p22) {
    const d3 = distance2(p1, p22);
    const r1 = p1.radius;
    const r2 = p22.radius;
    if (d3 >= r1 + r2 || d3 <= Math.abs(r1 - r2)) {
      return [];
    }
    const a2 = (r1 * r1 - r2 * r2 + d3 * d3) / (2 * d3);
    const h3 = Math.sqrt(r1 * r1 - a2 * a2);
    const x0 = p1.x + a2 * (p22.x - p1.x) / d3;
    const y0 = p1.y + a2 * (p22.y - p1.y) / d3;
    const rx = -(p22.y - p1.y) * (h3 / d3);
    const ry = -(p22.x - p1.x) * (h3 / d3);
    return [
      { x: x0 + rx, y: y0 - ry },
      { x: x0 - rx, y: y0 + ry }
    ];
  }
  function getCenter(points) {
    const center4 = { x: 0, y: 0 };
    for (const point8 of points) {
      center4.x += point8.x;
      center4.y += point8.y;
    }
    center4.x /= points.length;
    center4.y /= points.length;
    return center4;
  }
  function bisect(f2, a2, b3, parameters) {
    parameters = parameters || {};
    const maxIterations = parameters.maxIterations || 100;
    const tolerance = parameters.tolerance || 1e-10;
    const fA = f2(a2);
    const fB = f2(b3);
    let delta = b3 - a2;
    if (fA * fB > 0) {
      throw "Initial bisect points must have opposite signs";
    }
    if (fA === 0) return a2;
    if (fB === 0) return b3;
    for (let i2 = 0; i2 < maxIterations; ++i2) {
      delta /= 2;
      const mid = a2 + delta;
      const fMid = f2(mid);
      if (fMid * fA >= 0) {
        a2 = mid;
      }
      if (Math.abs(delta) < tolerance || fMid === 0) {
        return mid;
      }
    }
    return a2 + delta;
  }
  function zeros(x5) {
    const r2 = new Array(x5);
    for (let i2 = 0; i2 < x5; ++i2) {
      r2[i2] = 0;
    }
    return r2;
  }
  function zerosM(x5, y6) {
    return zeros(x5).map(() => zeros(y6));
  }
  function dot(a2, b3) {
    let ret = 0;
    for (let i2 = 0; i2 < a2.length; ++i2) {
      ret += a2[i2] * b3[i2];
    }
    return ret;
  }
  function norm2(a2) {
    return Math.sqrt(dot(a2, a2));
  }
  function scale2(ret, value2, c3) {
    for (let i2 = 0; i2 < value2.length; ++i2) {
      ret[i2] = value2[i2] * c3;
    }
  }
  function weightedSum(ret, w1, v12, w22, v23) {
    for (let j3 = 0; j3 < ret.length; ++j3) {
      ret[j3] = w1 * v12[j3] + w22 * v23[j3];
    }
  }
  function nelderMead(f2, x0, parameters) {
    parameters = parameters || {};
    const maxIterations = parameters.maxIterations || x0.length * 200;
    const nonZeroDelta = parameters.nonZeroDelta || 1.05;
    const zeroDelta = parameters.zeroDelta || 1e-3;
    const minErrorDelta = parameters.minErrorDelta || 1e-6;
    const minTolerance = parameters.minErrorDelta || 1e-5;
    const rho = parameters.rho !== void 0 ? parameters.rho : 1;
    const chi = parameters.chi !== void 0 ? parameters.chi : 2;
    const psi = parameters.psi !== void 0 ? parameters.psi : -0.5;
    const sigma = parameters.sigma !== void 0 ? parameters.sigma : 0.5;
    let maxDiff;
    const N3 = x0.length;
    const simplex = new Array(N3 + 1);
    simplex[0] = x0;
    simplex[0].fx = f2(x0);
    simplex[0].id = 0;
    for (let i2 = 0; i2 < N3; ++i2) {
      const point8 = x0.slice();
      point8[i2] = point8[i2] ? point8[i2] * nonZeroDelta : zeroDelta;
      simplex[i2 + 1] = point8;
      simplex[i2 + 1].fx = f2(point8);
      simplex[i2 + 1].id = i2 + 1;
    }
    function updateSimplex(value2) {
      for (let i2 = 0; i2 < value2.length; i2++) {
        simplex[N3][i2] = value2[i2];
      }
      simplex[N3].fx = value2.fx;
    }
    __name(updateSimplex, "updateSimplex");
    const sortOrder = /* @__PURE__ */ __name((a2, b3) => a2.fx - b3.fx, "sortOrder");
    const centroid = x0.slice();
    const reflected = x0.slice();
    const contracted = x0.slice();
    const expanded = x0.slice();
    for (let iteration = 0; iteration < maxIterations; ++iteration) {
      simplex.sort(sortOrder);
      if (parameters.history) {
        const sortedSimplex = simplex.map((x5) => {
          const state4 = x5.slice();
          state4.fx = x5.fx;
          state4.id = x5.id;
          return state4;
        });
        sortedSimplex.sort((a2, b3) => a2.id - b3.id);
        parameters.history.push({
          x: simplex[0].slice(),
          fx: simplex[0].fx,
          simplex: sortedSimplex
        });
      }
      maxDiff = 0;
      for (let i2 = 0; i2 < N3; ++i2) {
        maxDiff = Math.max(maxDiff, Math.abs(simplex[0][i2] - simplex[1][i2]));
      }
      if (Math.abs(simplex[0].fx - simplex[N3].fx) < minErrorDelta && maxDiff < minTolerance) {
        break;
      }
      for (let i2 = 0; i2 < N3; ++i2) {
        centroid[i2] = 0;
        for (let j3 = 0; j3 < N3; ++j3) {
          centroid[i2] += simplex[j3][i2];
        }
        centroid[i2] /= N3;
      }
      const worst = simplex[N3];
      weightedSum(reflected, 1 + rho, centroid, -rho, worst);
      reflected.fx = f2(reflected);
      if (reflected.fx < simplex[0].fx) {
        weightedSum(expanded, 1 + chi, centroid, -chi, worst);
        expanded.fx = f2(expanded);
        if (expanded.fx < reflected.fx) {
          updateSimplex(expanded);
        } else {
          updateSimplex(reflected);
        }
      } else if (reflected.fx >= simplex[N3 - 1].fx) {
        let shouldReduce = false;
        if (reflected.fx > worst.fx) {
          weightedSum(contracted, 1 + psi, centroid, -psi, worst);
          contracted.fx = f2(contracted);
          if (contracted.fx < worst.fx) {
            updateSimplex(contracted);
          } else {
            shouldReduce = true;
          }
        } else {
          weightedSum(contracted, 1 - psi * rho, centroid, psi * rho, worst);
          contracted.fx = f2(contracted);
          if (contracted.fx < reflected.fx) {
            updateSimplex(contracted);
          } else {
            shouldReduce = true;
          }
        }
        if (shouldReduce) {
          if (sigma >= 1) break;
          for (let i2 = 1; i2 < simplex.length; ++i2) {
            weightedSum(simplex[i2], 1 - sigma, simplex[0], sigma, simplex[i2]);
            simplex[i2].fx = f2(simplex[i2]);
          }
        }
      } else {
        updateSimplex(reflected);
      }
    }
    simplex.sort(sortOrder);
    return { fx: simplex[0].fx, x: simplex[0] };
  }
  function wolfeLineSearch(f2, pk, current, next3, a2, c1, c22) {
    const phi0 = current.fx;
    const phiPrime0 = dot(current.fxprime, pk);
    let phi2 = phi0;
    let phi_old = phi0;
    let phiPrime = phiPrime0;
    let a0 = 0;
    a2 = a2 || 1;
    c1 = c1 || 1e-6;
    c22 = c22 || 0.1;
    function zoom2(a_lo, a_high, phi_lo) {
      for (let iteration = 0; iteration < 16; ++iteration) {
        a2 = (a_lo + a_high) / 2;
        weightedSum(next3.x, 1, current.x, a2, pk);
        phi2 = next3.fx = f2(next3.x, next3.fxprime);
        phiPrime = dot(next3.fxprime, pk);
        if (phi2 > phi0 + c1 * a2 * phiPrime0 || phi2 >= phi_lo) {
          a_high = a2;
        } else {
          if (Math.abs(phiPrime) <= -c22 * phiPrime0) {
            return a2;
          }
          if (phiPrime * (a_high - a_lo) >= 0) {
            a_high = a_lo;
          }
          a_lo = a2;
          phi_lo = phi2;
        }
      }
      return 0;
    }
    __name(zoom2, "zoom");
    for (let iteration = 0; iteration < 10; ++iteration) {
      weightedSum(next3.x, 1, current.x, a2, pk);
      phi2 = next3.fx = f2(next3.x, next3.fxprime);
      phiPrime = dot(next3.fxprime, pk);
      if (phi2 > phi0 + c1 * a2 * phiPrime0 || iteration && phi2 >= phi_old) {
        return zoom2(a0, a2, phi_old);
      }
      if (Math.abs(phiPrime) <= -c22 * phiPrime0) {
        return a2;
      }
      if (phiPrime >= 0) {
        return zoom2(a2, a0, phi2);
      }
      phi_old = phi2;
      a0 = a2;
      a2 *= 2;
    }
    return a2;
  }
  function conjugateGradient(f2, initial2, params) {
    let current = { x: initial2.slice(), fx: 0, fxprime: initial2.slice() };
    let next3 = { x: initial2.slice(), fx: 0, fxprime: initial2.slice() };
    const yk = initial2.slice();
    let pk;
    let temp;
    let a2 = 1;
    let maxIterations;
    params = params || {};
    maxIterations = params.maxIterations || initial2.length * 20;
    current.fx = f2(current.x, current.fxprime);
    pk = current.fxprime.slice();
    scale2(pk, current.fxprime, -1);
    for (let i2 = 0; i2 < maxIterations; ++i2) {
      a2 = wolfeLineSearch(f2, pk, current, next3, a2);
      if (params.history) {
        params.history.push({
          x: current.x.slice(),
          fx: current.fx,
          fxprime: current.fxprime.slice(),
          alpha: a2
        });
      }
      if (!a2) {
        scale2(pk, current.fxprime, -1);
      } else {
        weightedSum(yk, 1, next3.fxprime, -1, current.fxprime);
        const delta_k = dot(current.fxprime, current.fxprime);
        const beta_k = Math.max(0, dot(yk, next3.fxprime) / delta_k);
        weightedSum(pk, beta_k, pk, -1, next3.fxprime);
        temp = current;
        current = next3;
        next3 = temp;
      }
      if (norm2(current.fxprime) <= 1e-5) {
        break;
      }
    }
    if (params.history) {
      params.history.push({
        x: current.x.slice(),
        fx: current.fx,
        fxprime: current.fxprime.slice(),
        alpha: a2
      });
    }
    return current;
  }
  function venn(sets, parameters = {}) {
    parameters.maxIterations = parameters.maxIterations || 500;
    const initialLayout = parameters.initialLayout || bestInitialLayout;
    const loss = parameters.lossFunction || lossFunction;
    const areas = addMissingAreas(sets, parameters);
    const circles = initialLayout(areas, parameters);
    const setids = Object.keys(circles);
    const initial2 = [];
    for (const setid of setids) {
      initial2.push(circles[setid].x);
      initial2.push(circles[setid].y);
    }
    const solution = nelderMead(
      (values3) => {
        const current = {};
        for (let i2 = 0; i2 < setids.length; ++i2) {
          const setid = setids[i2];
          current[setid] = {
            x: values3[2 * i2],
            y: values3[2 * i2 + 1],
            radius: circles[setid].radius
            // size : circles[setid].size
          };
        }
        return loss(current, areas);
      },
      initial2,
      parameters
    );
    const positions2 = solution.x;
    for (let i2 = 0; i2 < setids.length; ++i2) {
      const setid = setids[i2];
      circles[setid].x = positions2[2 * i2];
      circles[setid].y = positions2[2 * i2 + 1];
    }
    return circles;
  }
  function distanceFromIntersectArea(r1, r2, overlap) {
    if (Math.min(r1, r2) * Math.min(r1, r2) * Math.PI <= overlap + SMALL) {
      return Math.abs(r1 - r2);
    }
    return bisect((distance3) => circleOverlap(r1, r2, distance3) - overlap, 0, r1 + r2);
  }
  function addMissingAreas(areas, parameters = {}) {
    const distinct = parameters.distinct;
    const r2 = areas.map((s2) => Object.assign({}, s2));
    function toKey3(arr) {
      return arr.join(";");
    }
    __name(toKey3, "toKey");
    if (distinct) {
      const count2 = /* @__PURE__ */ new Map();
      for (const area of r2) {
        for (let i2 = 0; i2 < area.sets.length; i2++) {
          const si = String(area.sets[i2]);
          count2.set(si, area.size + (count2.get(si) || 0));
          for (let j3 = i2 + 1; j3 < area.sets.length; j3++) {
            const sj = String(area.sets[j3]);
            const k1 = `${si};${sj}`;
            const k2 = `${sj};${si}`;
            count2.set(k1, area.size + (count2.get(k1) || 0));
            count2.set(k2, area.size + (count2.get(k2) || 0));
          }
        }
      }
      for (const area of r2) {
        if (area.sets.length < 3) {
          area.size = count2.get(toKey3(area.sets));
        }
      }
    }
    const ids = [];
    const pairs2 = /* @__PURE__ */ new Set();
    for (const area of r2) {
      if (area.sets.length === 1) {
        ids.push(area.sets[0]);
      } else if (area.sets.length === 2) {
        const a2 = area.sets[0];
        const b3 = area.sets[1];
        pairs2.add(toKey3(area.sets));
        pairs2.add(toKey3([b3, a2]));
      }
    }
    ids.sort((a2, b3) => a2 === b3 ? 0 : a2 < b3 ? -1 : 1);
    for (let i2 = 0; i2 < ids.length; ++i2) {
      const a2 = ids[i2];
      for (let j3 = i2 + 1; j3 < ids.length; ++j3) {
        const b3 = ids[j3];
        if (!pairs2.has(toKey3([a2, b3]))) {
          r2.push({ sets: [a2, b3], size: 0 });
        }
      }
    }
    return r2;
  }
  function getDistanceMatrices(areas, sets, setids) {
    const distances2 = zerosM(sets.length, sets.length);
    const constraints = zerosM(sets.length, sets.length);
    areas.filter((x5) => x5.sets.length === 2).forEach((current) => {
      const left3 = setids[current.sets[0]];
      const right3 = setids[current.sets[1]];
      const r1 = Math.sqrt(sets[left3].size / Math.PI);
      const r2 = Math.sqrt(sets[right3].size / Math.PI);
      const distance3 = distanceFromIntersectArea(r1, r2, current.size);
      distances2[left3][right3] = distances2[right3][left3] = distance3;
      let c3 = 0;
      if (current.size + 1e-10 >= Math.min(sets[left3].size, sets[right3].size)) {
        c3 = 1;
      } else if (current.size <= 1e-10) {
        c3 = -1;
      }
      constraints[left3][right3] = constraints[right3][left3] = c3;
    });
    return { distances: distances2, constraints };
  }
  function constrainedMDSGradient(x5, fxprime, distances2, constraints) {
    for (let i2 = 0; i2 < fxprime.length; ++i2) {
      fxprime[i2] = 0;
    }
    let loss = 0;
    for (let i2 = 0; i2 < distances2.length; ++i2) {
      const xi = x5[2 * i2];
      const yi = x5[2 * i2 + 1];
      for (let j3 = i2 + 1; j3 < distances2.length; ++j3) {
        const xj = x5[2 * j3];
        const yj = x5[2 * j3 + 1];
        const dij = distances2[i2][j3];
        const constraint = constraints[i2][j3];
        const squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi);
        const distance3 = Math.sqrt(squaredDistance);
        const delta = squaredDistance - dij * dij;
        if (constraint > 0 && distance3 <= dij || constraint < 0 && distance3 >= dij) {
          continue;
        }
        loss += 2 * delta * delta;
        fxprime[2 * i2] += 4 * delta * (xi - xj);
        fxprime[2 * i2 + 1] += 4 * delta * (yi - yj);
        fxprime[2 * j3] += 4 * delta * (xj - xi);
        fxprime[2 * j3 + 1] += 4 * delta * (yj - yi);
      }
    }
    return loss;
  }
  function bestInitialLayout(areas, params = {}) {
    let initial2 = greedyLayout(areas, params);
    const loss = params.lossFunction || lossFunction;
    if (areas.length >= 8) {
      const constrained = constrainedMDSLayout(areas, params);
      const constrainedLoss = loss(constrained, areas);
      const greedyLoss = loss(initial2, areas);
      if (constrainedLoss + 1e-8 < greedyLoss) {
        initial2 = constrained;
      }
    }
    return initial2;
  }
  function constrainedMDSLayout(areas, params = {}) {
    const restarts = params.restarts || 10;
    const sets = [];
    const setids = {};
    for (const area of areas) {
      if (area.sets.length === 1) {
        setids[area.sets[0]] = sets.length;
        sets.push(area);
      }
    }
    let { distances: distances2, constraints } = getDistanceMatrices(areas, sets, setids);
    const norm = norm2(distances2.map(norm2)) / distances2.length;
    distances2 = distances2.map((row) => row.map((value2) => value2 / norm));
    const obj = /* @__PURE__ */ __name((x5, fxprime) => constrainedMDSGradient(x5, fxprime, distances2, constraints), "obj");
    let best = null;
    for (let i2 = 0; i2 < restarts; ++i2) {
      const initial2 = zeros(distances2.length * 2).map(Math.random);
      const current = conjugateGradient(obj, initial2, params);
      if (!best || current.fx < best.fx) {
        best = current;
      }
    }
    const positions2 = best.x;
    const circles = {};
    for (let i2 = 0; i2 < sets.length; ++i2) {
      const set5 = sets[i2];
      circles[set5.sets[0]] = {
        x: positions2[2 * i2] * norm,
        y: positions2[2 * i2 + 1] * norm,
        radius: Math.sqrt(set5.size / Math.PI)
      };
    }
    if (params.history) {
      for (const h3 of params.history) {
        scale2(h3.x, norm);
      }
    }
    return circles;
  }
  function greedyLayout(areas, params) {
    const loss = params && params.lossFunction ? params.lossFunction : lossFunction;
    const circles = {};
    const setOverlaps = {};
    for (const area of areas) {
      if (area.sets.length === 1) {
        const set5 = area.sets[0];
        circles[set5] = {
          x: 1e10,
          y: 1e10,
          rowid: circles.length,
          size: area.size,
          radius: Math.sqrt(area.size / Math.PI)
        };
        setOverlaps[set5] = [];
      }
    }
    areas = areas.filter((a2) => a2.sets.length === 2);
    for (const current of areas) {
      let weight8 = current.weight != null ? current.weight : 1;
      const left3 = current.sets[0];
      const right3 = current.sets[1];
      if (current.size + SMALL >= Math.min(circles[left3].size, circles[right3].size)) {
        weight8 = 0;
      }
      setOverlaps[left3].push({ set: right3, size: current.size, weight: weight8 });
      setOverlaps[right3].push({ set: left3, size: current.size, weight: weight8 });
    }
    const mostOverlapped = [];
    Object.keys(setOverlaps).forEach((set5) => {
      let size4 = 0;
      for (let i2 = 0; i2 < setOverlaps[set5].length; ++i2) {
        size4 += setOverlaps[set5][i2].size * setOverlaps[set5][i2].weight;
      }
      mostOverlapped.push({ set: set5, size: size4 });
    });
    function sortOrder(a2, b3) {
      return b3.size - a2.size;
    }
    __name(sortOrder, "sortOrder");
    mostOverlapped.sort(sortOrder);
    const positioned = {};
    function isPositioned(element3) {
      return element3.set in positioned;
    }
    __name(isPositioned, "isPositioned");
    function positionSet(point8, index) {
      circles[index].x = point8.x;
      circles[index].y = point8.y;
      positioned[index] = true;
    }
    __name(positionSet, "positionSet");
    positionSet({ x: 0, y: 0 }, mostOverlapped[0].set);
    for (let i2 = 1; i2 < mostOverlapped.length; ++i2) {
      const setIndex = mostOverlapped[i2].set;
      const overlap = setOverlaps[setIndex].filter(isPositioned);
      const set5 = circles[setIndex];
      overlap.sort(sortOrder);
      if (overlap.length === 0) {
        throw "ERROR: missing pairwise overlap information";
      }
      const points = [];
      for (var j3 = 0; j3 < overlap.length; ++j3) {
        const p1 = circles[overlap[j3].set];
        const d1 = distanceFromIntersectArea(set5.radius, p1.radius, overlap[j3].size);
        points.push({ x: p1.x + d1, y: p1.y });
        points.push({ x: p1.x - d1, y: p1.y });
        points.push({ y: p1.y + d1, x: p1.x });
        points.push({ y: p1.y - d1, x: p1.x });
        for (let k2 = j3 + 1; k2 < overlap.length; ++k2) {
          const p22 = circles[overlap[k2].set];
          const d22 = distanceFromIntersectArea(set5.radius, p22.radius, overlap[k2].size);
          const extraPoints = circleCircleIntersection(
            { x: p1.x, y: p1.y, radius: d1 },
            { x: p22.x, y: p22.y, radius: d22 }
          );
          points.push(...extraPoints);
        }
      }
      let bestLoss = 1e50;
      let bestPoint = points[0];
      for (const point8 of points) {
        circles[setIndex].x = point8.x;
        circles[setIndex].y = point8.y;
        const localLoss = loss(circles, areas);
        if (localLoss < bestLoss) {
          bestLoss = localLoss;
          bestPoint = point8;
        }
      }
      positionSet(bestPoint, setIndex);
    }
    return circles;
  }
  function lossFunction(circles, overlaps) {
    let output2 = 0;
    for (const area of overlaps) {
      if (area.sets.length === 1) {
        continue;
      }
      let overlap;
      if (area.sets.length === 2) {
        const left3 = circles[area.sets[0]];
        const right3 = circles[area.sets[1]];
        overlap = circleOverlap(left3.radius, right3.radius, distance2(left3, right3));
      } else {
        overlap = intersectionArea(area.sets.map((d3) => circles[d3]));
      }
      const weight8 = area.weight != null ? area.weight : 1;
      output2 += weight8 * (overlap - area.size) * (overlap - area.size);
    }
    return output2;
  }
  function logRatioLossFunction(circles, overlaps) {
    let output2 = 0;
    for (const area of overlaps) {
      if (area.sets.length === 1) {
        continue;
      }
      let overlap;
      if (area.sets.length === 2) {
        const left3 = circles[area.sets[0]];
        const right3 = circles[area.sets[1]];
        overlap = circleOverlap(left3.radius, right3.radius, distance2(left3, right3));
      } else {
        overlap = intersectionArea(area.sets.map((d3) => circles[d3]));
      }
      const weight8 = area.weight != null ? area.weight : 1;
      const differenceFromIdeal = Math.log((overlap + 1) / (area.size + 1));
      output2 += weight8 * differenceFromIdeal * differenceFromIdeal;
    }
    return output2;
  }
  function orientateCircles(circles, orientation, orientationOrder) {
    if (orientationOrder == null) {
      circles.sort((a2, b3) => b3.radius - a2.radius);
    } else {
      circles.sort(orientationOrder);
    }
    if (circles.length > 0) {
      const largestX = circles[0].x;
      const largestY = circles[0].y;
      for (const circle6 of circles) {
        circle6.x -= largestX;
        circle6.y -= largestY;
      }
    }
    if (circles.length === 2) {
      const dist3 = distance2(circles[0], circles[1]);
      if (dist3 < Math.abs(circles[1].radius - circles[0].radius)) {
        circles[1].x = circles[0].x + circles[0].radius - circles[1].radius - 1e-10;
        circles[1].y = circles[0].y;
      }
    }
    if (circles.length > 1) {
      const rotation = Math.atan2(circles[1].x, circles[1].y) - orientation;
      const c3 = Math.cos(rotation);
      const s2 = Math.sin(rotation);
      for (const circle6 of circles) {
        const x5 = circle6.x;
        const y6 = circle6.y;
        circle6.x = c3 * x5 - s2 * y6;
        circle6.y = s2 * x5 + c3 * y6;
      }
    }
    if (circles.length > 2) {
      let angle2 = Math.atan2(circles[2].x, circles[2].y) - orientation;
      while (angle2 < 0) {
        angle2 += 2 * Math.PI;
      }
      while (angle2 > 2 * Math.PI) {
        angle2 -= 2 * Math.PI;
      }
      if (angle2 > Math.PI) {
        const slope = circles[1].y / (1e-10 + circles[1].x);
        for (const circle6 of circles) {
          var d3 = (circle6.x + slope * circle6.y) / (1 + slope * slope);
          circle6.x = 2 * d3 - circle6.x;
          circle6.y = 2 * d3 * slope - circle6.y;
        }
      }
    }
  }
  function disjointCluster(circles) {
    circles.forEach((circle6) => {
      circle6.parent = circle6;
    });
    function find5(circle6) {
      if (circle6.parent !== circle6) {
        circle6.parent = find5(circle6.parent);
      }
      return circle6.parent;
    }
    __name(find5, "find");
    function union2(x5, y6) {
      const xRoot = find5(x5);
      const yRoot = find5(y6);
      xRoot.parent = yRoot;
    }
    __name(union2, "union");
    for (let i2 = 0; i2 < circles.length; ++i2) {
      for (let j3 = i2 + 1; j3 < circles.length; ++j3) {
        const maxDistance = circles[i2].radius + circles[j3].radius;
        if (distance2(circles[i2], circles[j3]) + 1e-10 < maxDistance) {
          union2(circles[j3], circles[i2]);
        }
      }
    }
    const disjointClusters = /* @__PURE__ */ new Map();
    for (let i2 = 0; i2 < circles.length; ++i2) {
      const setid = find5(circles[i2]).parent.setid;
      if (!disjointClusters.has(setid)) {
        disjointClusters.set(setid, []);
      }
      disjointClusters.get(setid).push(circles[i2]);
    }
    circles.forEach((circle6) => {
      delete circle6.parent;
    });
    return Array.from(disjointClusters.values());
  }
  function getBoundingBox(circles) {
    const minMax = /* @__PURE__ */ __name((d3) => {
      const hi = circles.reduce((acc, c3) => Math.max(acc, c3[d3] + c3.radius), Number.NEGATIVE_INFINITY);
      const lo = circles.reduce((acc, c3) => Math.min(acc, c3[d3] - c3.radius), Number.POSITIVE_INFINITY);
      return { max: hi, min: lo };
    }, "minMax");
    return { xRange: minMax("x"), yRange: minMax("y") };
  }
  function normalizeSolution(solution, orientation, orientationOrder) {
    if (orientation == null) {
      orientation = Math.PI / 2;
    }
    let circles = fromObjectNotation(solution).map((d3) => Object.assign({}, d3));
    const clusters = disjointCluster(circles);
    for (const cluster of clusters) {
      orientateCircles(cluster, orientation, orientationOrder);
      const bounds4 = getBoundingBox(cluster);
      cluster.size = (bounds4.xRange.max - bounds4.xRange.min) * (bounds4.yRange.max - bounds4.yRange.min);
      cluster.bounds = bounds4;
    }
    clusters.sort((a2, b3) => b3.size - a2.size);
    circles = clusters[0];
    let returnBounds = circles.bounds;
    const spacing2 = (returnBounds.xRange.max - returnBounds.xRange.min) / 50;
    function addCluster(cluster, right3, bottom2) {
      if (!cluster) {
        return;
      }
      const bounds4 = cluster.bounds;
      let xOffset;
      let yOffset;
      if (right3) {
        xOffset = returnBounds.xRange.max - bounds4.xRange.min + spacing2;
      } else {
        xOffset = returnBounds.xRange.max - bounds4.xRange.max;
        const centreing = (bounds4.xRange.max - bounds4.xRange.min) / 2 - (returnBounds.xRange.max - returnBounds.xRange.min) / 2;
        if (centreing < 0) {
          xOffset += centreing;
        }
      }
      if (bottom2) {
        yOffset = returnBounds.yRange.max - bounds4.yRange.min + spacing2;
      } else {
        yOffset = returnBounds.yRange.max - bounds4.yRange.max;
        const centreing = (bounds4.yRange.max - bounds4.yRange.min) / 2 - (returnBounds.yRange.max - returnBounds.yRange.min) / 2;
        if (centreing < 0) {
          yOffset += centreing;
        }
      }
      for (const c3 of cluster) {
        c3.x += xOffset;
        c3.y += yOffset;
        circles.push(c3);
      }
    }
    __name(addCluster, "addCluster");
    let index = 1;
    while (index < clusters.length) {
      addCluster(clusters[index], true, false);
      addCluster(clusters[index + 1], false, true);
      addCluster(clusters[index + 2], true, true);
      index += 3;
      returnBounds = getBoundingBox(circles);
    }
    return toObjectNotation(circles);
  }
  function scaleSolution(solution, width3, height2, padding, scaleToFit) {
    const circles = fromObjectNotation(solution);
    width3 -= 2 * padding;
    height2 -= 2 * padding;
    const { xRange, yRange } = getBoundingBox(circles);
    if (xRange.max === xRange.min || yRange.max === yRange.min) {
      console.log("not scaling solution: zero size detected");
      return solution;
    }
    let xScaling;
    let yScaling;
    if (scaleToFit) {
      const toScaleDiameter = Math.sqrt(scaleToFit / Math.PI) * 2;
      xScaling = width3 / toScaleDiameter;
      yScaling = height2 / toScaleDiameter;
    } else {
      xScaling = width3 / (xRange.max - xRange.min);
      yScaling = height2 / (yRange.max - yRange.min);
    }
    const scaling = Math.min(yScaling, xScaling);
    const xOffset = (width3 - (xRange.max - xRange.min) * scaling) / 2;
    const yOffset = (height2 - (yRange.max - yRange.min) * scaling) / 2;
    return toObjectNotation(
      circles.map((circle6) => ({
        radius: scaling * circle6.radius,
        x: padding + xOffset + (circle6.x - xRange.min) * scaling,
        y: padding + yOffset + (circle6.y - yRange.min) * scaling,
        setid: circle6.setid
      }))
    );
  }
  function toObjectNotation(circles) {
    const r2 = {};
    for (const circle6 of circles) {
      r2[circle6.setid] = circle6;
    }
    return r2;
  }
  function fromObjectNotation(solution) {
    const setids = Object.keys(solution);
    return setids.map((id41) => Object.assign(solution[id41], { setid: id41 }));
  }
  function VennDiagram(options2 = {}) {
    let useViewBox = false, width3 = 600, height2 = 350, padding = 15, duration = 1e3, orientation = Math.PI / 2, normalize4 = true, scaleToFit = null, wrap3 = true, styled = true, fontSize = null, orientationOrder = null, distinct = false, round = null, symmetricalTextCentre = options2 && options2.symmetricalTextCentre ? options2.symmetricalTextCentre : false, colourMap = {}, colourScheme = options2 && options2.colourScheme ? options2.colourScheme : options2 && options2.colorScheme ? options2.colorScheme : [
      "#1f77b4",
      "#ff7f0e",
      "#2ca02c",
      "#d62728",
      "#9467bd",
      "#8c564b",
      "#e377c2",
      "#7f7f7f",
      "#bcbd22",
      "#17becf"
    ], colourIndex = 0, colours = /* @__PURE__ */ __name(function(key) {
      if (key in colourMap) {
        return colourMap[key];
      }
      var ret = colourMap[key] = colourScheme[colourIndex];
      colourIndex += 1;
      if (colourIndex >= colourScheme.length) {
        colourIndex = 0;
      }
      return ret;
    }, "colours"), layoutFunction = venn, loss = lossFunction;
    function chart(selection2) {
      let data6 = selection2.datum();
      const toRemove = /* @__PURE__ */ new Set();
      data6.forEach((datum2) => {
        if (datum2.size == 0 && datum2.sets.length == 1) {
          toRemove.add(datum2.sets[0]);
        }
      });
      data6 = data6.filter((datum2) => !datum2.sets.some((set5) => toRemove.has(set5)));
      let circles = {};
      let textCentres = {};
      if (data6.length > 0) {
        let solution = layoutFunction(data6, { lossFunction: loss, distinct });
        if (normalize4) {
          solution = normalizeSolution(solution, orientation, orientationOrder);
        }
        circles = scaleSolution(solution, width3, height2, padding, scaleToFit);
        textCentres = computeTextCentres(circles, data6, symmetricalTextCentre);
      }
      const labels = {};
      data6.forEach((datum2) => {
        if (datum2.label) {
          labels[datum2.sets] = datum2.label;
        }
      });
      function label(d3) {
        if (d3.sets in labels) {
          return labels[d3.sets];
        }
        if (d3.sets.length == 1) {
          return "" + d3.sets[0];
        }
      }
      __name(label, "label");
      selection2.selectAll("svg").data([circles]).enter().append("svg");
      const svg2 = selection2.select("svg");
      if (useViewBox) {
        svg2.attr("viewBox", `0 0 ${width3} ${height2}`);
      } else {
        svg2.attr("width", width3).attr("height", height2);
      }
      const previous = {};
      let hasPrevious = false;
      svg2.selectAll(".venn-area path").each(function(d3) {
        const path4 = this.getAttribute("d");
        if (d3.sets.length == 1 && path4 && !distinct) {
          hasPrevious = true;
          previous[d3.sets[0]] = circleFromPath(path4);
        }
      });
      function pathTween(d3) {
        return (t4) => {
          const c3 = d3.sets.map((set5) => {
            let start3 = previous[set5];
            let end2 = circles[set5];
            if (!start3) {
              start3 = { x: width3 / 2, y: height2 / 2, radius: 1 };
            }
            if (!end2) {
              end2 = { x: width3 / 2, y: height2 / 2, radius: 1 };
            }
            return {
              x: start3.x * (1 - t4) + end2.x * t4,
              y: start3.y * (1 - t4) + end2.y * t4,
              radius: start3.radius * (1 - t4) + end2.radius * t4
            };
          });
          return intersectionAreaPath(c3, round);
        };
      }
      __name(pathTween, "pathTween");
      const nodes5 = svg2.selectAll(".venn-area").data(data6, (d3) => d3.sets);
      const enter = nodes5.enter().append("g").attr(
        "class",
        (d3) => `venn-area venn-${d3.sets.length == 1 ? "circle" : "intersection"}${d3.colour || d3.color ? " venn-coloured" : ""}`
      ).attr("data-venn-sets", (d3) => d3.sets.join("_"));
      const enterPath = enter.append("path");
      const enterText = enter.append("text").attr("class", "label").text((d3) => label(d3)).attr("text-anchor", "middle").attr("dy", ".35em").attr("x", width3 / 2).attr("y", height2 / 2);
      if (styled) {
        enterPath.style("fill-opacity", "0").filter((d3) => d3.sets.length == 1).style("fill", (d3) => d3.colour ? d3.colour : d3.color ? d3.color : colours(d3.sets)).style("fill-opacity", ".25");
        enterText.style("fill", (d3) => {
          if (d3.colour || d3.color) {
            return "#FFF";
          }
          if (options2.textFill) {
            return options2.textFill;
          }
          return d3.sets.length == 1 ? colours(d3.sets) : "#444";
        });
      }
      function asTransition(s2) {
        if (typeof s2.transition === "function") {
          return s2.transition("venn").duration(duration);
        }
        return s2;
      }
      __name(asTransition, "asTransition");
      let update2 = selection2;
      if (hasPrevious && typeof update2.transition === "function") {
        update2 = asTransition(selection2);
        update2.selectAll("path").attrTween("d", pathTween);
      } else {
        update2.selectAll("path").attr("d", (d3) => intersectionAreaPath(d3.sets.map((set5) => circles[set5])), round);
      }
      const updateText = update2.selectAll("text").filter((d3) => d3.sets in textCentres).text((d3) => label(d3)).attr("x", (d3) => Math.floor(textCentres[d3.sets].x)).attr("y", (d3) => Math.floor(textCentres[d3.sets].y));
      if (wrap3) {
        if (hasPrevious) {
          if ("on" in updateText) {
            updateText.on("end", wrapText2(circles, label));
          } else {
            updateText.each("end", wrapText2(circles, label));
          }
        } else {
          updateText.each(wrapText2(circles, label));
        }
      }
      const exit = asTransition(nodes5.exit()).remove();
      if (typeof nodes5.transition === "function") {
        exit.selectAll("path").attrTween("d", pathTween);
      }
      const exitText = exit.selectAll("text").attr("x", width3 / 2).attr("y", height2 / 2);
      if (fontSize !== null) {
        enterText.style("font-size", "0px");
        updateText.style("font-size", fontSize);
        exitText.style("font-size", "0px");
      }
      return { circles, textCentres, nodes: nodes5, enter, update: update2, exit };
    }
    __name(chart, "chart");
    chart.wrap = function(_3) {
      if (!arguments.length) return wrap3;
      wrap3 = _3;
      return chart;
    };
    chart.useViewBox = function() {
      useViewBox = true;
      return chart;
    };
    chart.width = function(_3) {
      if (!arguments.length) return width3;
      width3 = _3;
      return chart;
    };
    chart.height = function(_3) {
      if (!arguments.length) return height2;
      height2 = _3;
      return chart;
    };
    chart.padding = function(_3) {
      if (!arguments.length) return padding;
      padding = _3;
      return chart;
    };
    chart.distinct = function(_3) {
      if (!arguments.length) return distinct;
      distinct = _3;
      return chart;
    };
    chart.colours = function(_3) {
      if (!arguments.length) return colours;
      colours = _3;
      return chart;
    };
    chart.colors = function(_3) {
      if (!arguments.length) return colours;
      colours = _3;
      return chart;
    };
    chart.fontSize = function(_3) {
      if (!arguments.length) return fontSize;
      fontSize = _3;
      return chart;
    };
    chart.round = function(_3) {
      if (!arguments.length) return round;
      round = _3;
      return chart;
    };
    chart.duration = function(_3) {
      if (!arguments.length) return duration;
      duration = _3;
      return chart;
    };
    chart.layoutFunction = function(_3) {
      if (!arguments.length) return layoutFunction;
      layoutFunction = _3;
      return chart;
    };
    chart.normalize = function(_3) {
      if (!arguments.length) return normalize4;
      normalize4 = _3;
      return chart;
    };
    chart.scaleToFit = function(_3) {
      if (!arguments.length) return scaleToFit;
      scaleToFit = _3;
      return chart;
    };
    chart.styled = function(_3) {
      if (!arguments.length) return styled;
      styled = _3;
      return chart;
    };
    chart.orientation = function(_3) {
      if (!arguments.length) return orientation;
      orientation = _3;
      return chart;
    };
    chart.orientationOrder = function(_3) {
      if (!arguments.length) return orientationOrder;
      orientationOrder = _3;
      return chart;
    };
    chart.lossFunction = function(_3) {
      if (!arguments.length) return loss;
      loss = _3 === "default" ? lossFunction : _3 === "logRatio" ? logRatioLossFunction : _3;
      return chart;
    };
    return chart;
  }
  function wrapText2(circles, labeller) {
    return function(data6) {
      const text4 = this;
      const width3 = circles[data6.sets[0]].radius || 50;
      const label = labeller(data6) || "";
      const words = label.split(/\s+/).reverse();
      const maxLines = 3;
      const minChars = (label.length + words.length) / maxLines;
      let word = words.pop();
      let line2 = [word];
      let lineNumber = 0;
      const lineHeight = 1.1;
      text4.textContent = null;
      const tspans = [];
      function append3(word2) {
        const tspan2 = text4.ownerDocument.createElementNS(text4.namespaceURI, "tspan");
        tspan2.textContent = word2;
        tspans.push(tspan2);
        text4.append(tspan2);
        return tspan2;
      }
      __name(append3, "append");
      let tspan = append3(word);
      while (true) {
        word = words.pop();
        if (!word) {
          break;
        }
        line2.push(word);
        const joined = line2.join(" ");
        tspan.textContent = joined;
        if (joined.length > minChars && tspan.getComputedTextLength() > width3) {
          line2.pop();
          tspan.textContent = line2.join(" ");
          line2 = [word];
          tspan = append3(word);
          lineNumber++;
        }
      }
      const initial2 = 0.35 - lineNumber * lineHeight / 2;
      const x5 = text4.getAttribute("x");
      const y6 = text4.getAttribute("y");
      tspans.forEach((t4, i2) => {
        t4.setAttribute("x", x5);
        t4.setAttribute("y", y6);
        t4.setAttribute("dy", `${initial2 + i2 * lineHeight}em`);
      });
    };
  }
  function circleMargin(current, interior, exterior) {
    let margin = interior[0].radius - distance2(interior[0], current);
    for (let i2 = 1; i2 < interior.length; ++i2) {
      const m3 = interior[i2].radius - distance2(interior[i2], current);
      if (m3 <= margin) {
        margin = m3;
      }
    }
    for (let i2 = 0; i2 < exterior.length; ++i2) {
      const m3 = distance2(exterior[i2], current) - exterior[i2].radius;
      if (m3 <= margin) {
        margin = m3;
      }
    }
    return margin;
  }
  function computeTextCentre(interior, exterior, symmetricalTextCentre) {
    const points = [];
    for (const c3 of interior) {
      points.push({ x: c3.x, y: c3.y });
      points.push({ x: c3.x + c3.radius / 2, y: c3.y });
      points.push({ x: c3.x - c3.radius / 2, y: c3.y });
      points.push({ x: c3.x, y: c3.y + c3.radius / 2 });
      points.push({ x: c3.x, y: c3.y - c3.radius / 2 });
    }
    let initial2 = points[0];
    let margin = circleMargin(points[0], interior, exterior);
    for (let i2 = 1; i2 < points.length; ++i2) {
      const m3 = circleMargin(points[i2], interior, exterior);
      if (m3 >= margin) {
        initial2 = points[i2];
        margin = m3;
      }
    }
    const solution = nelderMead(
      (p3) => -1 * circleMargin({ x: p3[0], y: p3[1] }, interior, exterior),
      [initial2.x, initial2.y],
      { maxIterations: 500, minErrorDelta: 1e-10 }
    ).x;
    const ret = { x: symmetricalTextCentre ? 0 : solution[0], y: solution[1] };
    let valid2 = true;
    for (const i2 of interior) {
      if (distance2(ret, i2) > i2.radius) {
        valid2 = false;
        break;
      }
    }
    for (const e3 of exterior) {
      if (distance2(ret, e3) < e3.radius) {
        valid2 = false;
        break;
      }
    }
    if (valid2) {
      return ret;
    }
    if (interior.length == 1) {
      return { x: interior[0].x, y: interior[0].y };
    }
    const areaStats = {};
    intersectionArea(interior, areaStats);
    if (areaStats.arcs.length === 0) {
      return { x: 0, y: -1e3, disjoint: true };
    }
    if (areaStats.arcs.length == 1) {
      return { x: areaStats.arcs[0].circle.x, y: areaStats.arcs[0].circle.y };
    }
    if (exterior.length) {
      return computeTextCentre(interior, []);
    }
    return getCenter(areaStats.arcs.map((a2) => a2.p1));
  }
  function getOverlappingCircles(circles) {
    const ret = {};
    const circleids = Object.keys(circles);
    for (const circleid of circleids) {
      ret[circleid] = [];
    }
    for (let i2 = 0; i2 < circleids.length; i2++) {
      const ci = circleids[i2];
      const a2 = circles[ci];
      for (let j3 = i2 + 1; j3 < circleids.length; ++j3) {
        const cj = circleids[j3];
        const b3 = circles[cj];
        const d3 = distance2(a2, b3);
        if (d3 + b3.radius <= a2.radius + 1e-10) {
          ret[cj].push(ci);
        } else if (d3 + a2.radius <= b3.radius + 1e-10) {
          ret[ci].push(cj);
        }
      }
    }
    return ret;
  }
  function computeTextCentres(circles, areas, symmetricalTextCentre) {
    const ret = {};
    const overlapped = getOverlappingCircles(circles);
    for (let i2 = 0; i2 < areas.length; ++i2) {
      const area = areas[i2].sets;
      const areaids = {};
      const exclude = {};
      for (let j3 = 0; j3 < area.length; ++j3) {
        areaids[area[j3]] = true;
        const overlaps = overlapped[area[j3]];
        for (let k2 = 0; k2 < overlaps.length; ++k2) {
          exclude[overlaps[k2]] = true;
        }
      }
      const interior = [];
      const exterior = [];
      for (let setid in circles) {
        if (setid in areaids) {
          interior.push(circles[setid]);
        } else if (!(setid in exclude)) {
          exterior.push(circles[setid]);
        }
      }
      const centre = computeTextCentre(interior, exterior, symmetricalTextCentre);
      ret[area] = centre;
      if (centre.disjoint && areas[i2].size > 0) {
        console.log("WARNING: area " + area + " not represented on screen");
      }
    }
    return ret;
  }
  function circlePath(x5, y6, r2) {
    const ret = [];
    ret.push("\nM", x5, y6);
    ret.push("\nm", -r2, 0);
    ret.push("\na", r2, r2, 0, 1, 0, r2 * 2, 0);
    ret.push("\na", r2, r2, 0, 1, 0, -r2 * 2, 0);
    return ret.join(" ");
  }
  function circleFromPath(path4) {
    const tokens2 = path4.split(" ");
    return { x: Number.parseFloat(tokens2[1]), y: Number.parseFloat(tokens2[2]), radius: -Number.parseFloat(tokens2[4]) };
  }
  function intersectionAreaArcs(circles) {
    if (circles.length === 0) {
      return [];
    }
    const stats = {};
    intersectionArea(circles, stats);
    return stats.arcs;
  }
  function arcsToPath(arcs, round) {
    if (arcs.length === 0) {
      return "M 0 0";
    }
    const rFactor = Math.pow(10, round || 0);
    const r2 = round != null ? (v3) => Math.round(v3 * rFactor) / rFactor : (v3) => v3;
    if (arcs.length == 1) {
      const circle6 = arcs[0].circle;
      return circlePath(r2(circle6.x), r2(circle6.y), r2(circle6.radius));
    }
    const ret = ["\nM", r2(arcs[0].p2.x), r2(arcs[0].p2.y)];
    for (const arc of arcs) {
      const radius2 = r2(arc.circle.radius);
      ret.push("\nA", radius2, radius2, 0, arc.large ? 1 : 0, arc.sweep ? 1 : 0, r2(arc.p1.x), r2(arc.p1.y));
    }
    return ret.join(" ");
  }
  function intersectionAreaPath(circles, round) {
    return arcsToPath(intersectionAreaArcs(circles), round);
  }
  function layout6(data6, options2 = {}) {
    const {
      lossFunction: loss,
      layoutFunction: layout7 = venn,
      normalize: normalize4 = true,
      orientation = Math.PI / 2,
      orientationOrder,
      width: width3 = 600,
      height: height2 = 350,
      padding = 15,
      scaleToFit = false,
      symmetricalTextCentre = false,
      distinct,
      round = 2
    } = options2;
    let solution = layout7(data6, {
      lossFunction: loss === "default" || !loss ? lossFunction : loss === "logRatio" ? logRatioLossFunction : loss,
      distinct
    });
    if (normalize4) {
      solution = normalizeSolution(solution, orientation, orientationOrder);
    }
    const circles = scaleSolution(solution, width3, height2, padding, scaleToFit);
    const textCentres = computeTextCentres(circles, data6, symmetricalTextCentre);
    const circleLookup = new Map(
      Object.keys(circles).map((set5) => [
        set5,
        {
          set: set5,
          x: circles[set5].x,
          y: circles[set5].y,
          radius: circles[set5].radius
        }
      ])
    );
    const helpers = data6.map((area) => {
      const circles2 = area.sets.map((s2) => circleLookup.get(s2));
      const arcs = intersectionAreaArcs(circles2);
      const path4 = arcsToPath(arcs, round);
      return { circles: circles2, arcs, path: path4, area, has: new Set(area.sets) };
    });
    function genDistinctPath(sets) {
      let r2 = "";
      for (const e3 of helpers) {
        if (e3.has.size > sets.length && sets.every((s2) => e3.has.has(s2))) {
          r2 += " " + e3.path;
        }
      }
      return r2;
    }
    __name(genDistinctPath, "genDistinctPath");
    return helpers.map(({ circles: circles2, arcs, path: path4, area }) => {
      return {
        data: area,
        text: textCentres[area.sets],
        circles: circles2,
        arcs,
        path: path4,
        distinctPath: path4 + genDistinctPath(area.sets)
      };
    });
  }
  var SMALL$1, SMALL;
  var init_venn_esm = __esm({
    "../../node_modules/.pnpm/@upsetjs+venn.js@2.0.0/node_modules/@upsetjs/venn.js/build/venn.esm.js"() {
      "use strict";
      SMALL$1 = 1e-10;
      __name(intersectionArea, "intersectionArea");
      __name(containedInCircles, "containedInCircles");
      __name(getIntersectionPoints, "getIntersectionPoints");
      __name(circleArea, "circleArea");
      __name(distance2, "distance");
      __name(circleOverlap, "circleOverlap");
      __name(circleCircleIntersection, "circleCircleIntersection");
      __name(getCenter, "getCenter");
      __name(bisect, "bisect");
      __name(zeros, "zeros");
      __name(zerosM, "zerosM");
      __name(dot, "dot");
      __name(norm2, "norm2");
      __name(scale2, "scale");
      __name(weightedSum, "weightedSum");
      __name(nelderMead, "nelderMead");
      __name(wolfeLineSearch, "wolfeLineSearch");
      __name(conjugateGradient, "conjugateGradient");
      __name(venn, "venn");
      SMALL = 1e-10;
      __name(distanceFromIntersectArea, "distanceFromIntersectArea");
      __name(addMissingAreas, "addMissingAreas");
      __name(getDistanceMatrices, "getDistanceMatrices");
      __name(constrainedMDSGradient, "constrainedMDSGradient");
      __name(bestInitialLayout, "bestInitialLayout");
      __name(constrainedMDSLayout, "constrainedMDSLayout");
      __name(greedyLayout, "greedyLayout");
      __name(lossFunction, "lossFunction");
      __name(logRatioLossFunction, "logRatioLossFunction");
      __name(orientateCircles, "orientateCircles");
      __name(disjointCluster, "disjointCluster");
      __name(getBoundingBox, "getBoundingBox");
      __name(normalizeSolution, "normalizeSolution");
      __name(scaleSolution, "scaleSolution");
      __name(toObjectNotation, "toObjectNotation");
      __name(fromObjectNotation, "fromObjectNotation");
      __name(VennDiagram, "VennDiagram");
      __name(wrapText2, "wrapText");
      __name(circleMargin, "circleMargin");
      __name(computeTextCentre, "computeTextCentre");
      __name(getOverlappingCircles, "getOverlappingCircles");
      __name(computeTextCentres, "computeTextCentres");
      __name(circlePath, "circlePath");
      __name(circleFromPath, "circleFromPath");
      __name(intersectionAreaArcs, "intersectionAreaArcs");
      __name(arcsToPath, "arcsToPath");
      __name(intersectionAreaPath, "intersectionAreaPath");
      __name(layout6, "layout");
    }
  });

  // src/diagrams/venn/vennRenderer.ts
  function buildStyleByKey(styleData) {
    const map6 = /* @__PURE__ */ new Map();
    for (const entry of styleData) {
      const key = entry.targets.join("|");
      const existing = map6.get(key);
      if (existing) {
        Object.assign(existing, entry.styles);
      } else {
        map6.set(key, { ...entry.styles });
      }
    }
    return map6;
  }
  function stableSetsKey(setIds) {
    return setIds.join("|");
  }
  function renderTextNodes(config3, layoutByKey, dummyD3root, textNodes2, scale3, styleByKey) {
    const useDebugLayout = config3?.useDebugLayout ?? false;
    const vennSvg = dummyD3root.select("svg");
    const textGroup = vennSvg.append("g").attr("class", "venn-text-nodes");
    const nodesByArea = /* @__PURE__ */ new Map();
    for (const node2 of textNodes2) {
      const key = stableSetsKey(node2.sets);
      const existing = nodesByArea.get(key);
      if (existing) {
        existing.push(node2);
      } else {
        nodesByArea.set(key, [node2]);
      }
    }
    for (const [key, nodes5] of nodesByArea.entries()) {
      const area = layoutByKey.get(key);
      if (!area?.text) {
        continue;
      }
      const centerX = area.text.x;
      const centerY = area.text.y;
      const minCircleRadius = Math.min(...area.circles.map((c3) => c3.radius));
      const innerRadiusRaw = Math.min(
        ...area.circles.map((c3) => c3.radius - Math.hypot(centerX - c3.x, centerY - c3.y))
      );
      let innerRadius = Number.isFinite(innerRadiusRaw) ? Math.max(0, innerRadiusRaw) : 0;
      if (innerRadius === 0 && Number.isFinite(minCircleRadius)) {
        innerRadius = minCircleRadius * 0.6;
      }
      const areaGroup = textGroup.append("g").attr("class", "venn-text-area").attr("font-size", `${40 * scale3}px`);
      if (useDebugLayout) {
        areaGroup.append("circle").attr("class", "venn-text-debug-circle").attr("cx", centerX).attr("cy", centerY).attr("r", innerRadius).attr("fill", "none").attr("stroke", "purple").attr("stroke-width", 1.5 * scale3).attr("stroke-dasharray", `${6 * scale3} ${4 * scale3}`);
      }
      const innerWidth = Math.max(80 * scale3, innerRadius * 2 * 0.95);
      const innerHeight = Math.max(60 * scale3, innerRadius * 2 * 0.95);
      const hasLabel = area.data.label && area.data.label.length > 0;
      const labelOffsetBase = hasLabel ? Math.min(32 * scale3, innerRadius * 0.25) : 0;
      const labelOffset = labelOffsetBase + (nodes5.length <= 2 ? 30 * scale3 : 0);
      const startX2 = centerX - innerWidth / 2;
      const startY2 = centerY - innerHeight / 2 + labelOffset;
      const cols = Math.max(1, Math.ceil(Math.sqrt(nodes5.length)));
      const rows = Math.max(1, Math.ceil(nodes5.length / cols));
      const cellWidth = innerWidth / cols;
      const cellHeight = innerHeight / rows;
      for (const [i2, node2] of nodes5.entries()) {
        const col = i2 % cols;
        const row = Math.floor(i2 / cols);
        const x5 = startX2 + cellWidth * (col + 0.5);
        const y6 = startY2 + cellHeight * (row + 0.5);
        if (useDebugLayout) {
          areaGroup.append("rect").attr("class", "venn-text-debug-cell").attr("x", startX2 + cellWidth * col).attr("y", startY2 + cellHeight * row).attr("width", cellWidth).attr("height", cellHeight).attr("fill", "none").attr("stroke", "teal").attr("stroke-width", 1 * scale3).attr("stroke-dasharray", `${4 * scale3} ${3 * scale3}`);
        }
        const boxWidth = cellWidth * 0.9;
        const boxHeight = cellHeight * 0.9;
        const container2 = areaGroup.append("foreignObject").attr("class", "venn-text-node-fo").attr("width", boxWidth).attr("height", boxHeight).attr("x", x5 - boxWidth / 2).attr("y", y6 - boxHeight / 2).attr("overflow", "visible");
        const textColor = styleByKey.get(node2.id)?.color;
        const text4 = container2.append("xhtml:span").attr("class", "venn-text-node").style("display", "flex").style("width", "100%").style("height", "100%").style("white-space", "normal").style("align-items", "center").style("justify-content", "center").style("text-align", "center").style("overflow-wrap", "normal").style("word-break", "normal").text(node2.label ?? node2.id);
        if (textColor) {
          text4.style("color", textColor);
        }
      }
    }
  }
  function ensurePairwiseSubsets(subsets2) {
    const existingKeys = new Set(subsets2.map((s2) => [...s2.sets].sort().join("|")));
    const individualSetSizes = new Map(
      subsets2.filter((s2) => s2.sets.length === 1 && s2.size !== void 0).map((s2) => [s2.sets[0], s2.size])
    );
    const synthetic = [];
    for (const subset of subsets2) {
      if (subset.sets.length < 3) {
        continue;
      }
      const members = [...subset.sets].sort();
      for (let i2 = 0; i2 < members.length - 1; i2++) {
        for (let j3 = i2 + 1; j3 < members.length; j3++) {
          const pair = [members[i2], members[j3]];
          const key = pair.join("|");
          if (!existingKeys.has(key)) {
            existingKeys.add(key);
            const sizeA = individualSetSizes.get(pair[0]);
            const sizeB = individualSetSizes.get(pair[1]);
            const pairSize = sizeA !== void 0 && sizeB !== void 0 ? Math.min(sizeA, sizeB) / 4 : 2.5;
            synthetic.push({ sets: pair, size: pairSize, label: "" });
          }
        }
      }
    }
    return synthetic.length > 0 ? [...subsets2, ...synthetic] : subsets2;
  }
  var draw29, renderer11;
  var init_vennRenderer = __esm({
    "src/diagrams/venn/vennRenderer.ts"() {
      "use strict";
      init_src32();
      init_dist();
      init_config();
      init_selectSvgElement();
      init_venn_esm();
      init_setupGraphViewbox();
      init_rough_esm();
      __name(buildStyleByKey, "buildStyleByKey");
      draw29 = /* @__PURE__ */ __name((_text, id41, _version, diagObj) => {
        const db12 = diagObj.db;
        const config3 = db12.getConfig?.();
        const { themeVariables, look, handDrawnSeed } = getConfig();
        const isHandDrawn = look === "handDrawn";
        const themeColors = [
          themeVariables.venn1,
          themeVariables.venn2,
          themeVariables.venn3,
          themeVariables.venn4,
          themeVariables.venn5,
          themeVariables.venn6,
          themeVariables.venn7,
          themeVariables.venn8
        ].filter(Boolean);
        const title2 = db12.getDiagramTitle?.();
        const sets = db12.getSubsetData();
        const textNodes2 = db12.getTextData();
        const styleByKey = buildStyleByKey(db12.getStyleData());
        const renderSets = ensurePairwiseSubsets(sets);
        const svgWidth = config3?.width ?? 800;
        const svgHeight = config3?.height ?? 450;
        const REFERENCE_WIDTH = 1600;
        const scale3 = svgWidth / REFERENCE_WIDTH;
        const titleHeight = title2 ? 48 * scale3 : 0;
        const defaultTextColor = themeVariables.primaryTextColor ?? themeVariables.textColor;
        const svg2 = selectSvgElement(id41);
        svg2.attr("viewBox", `0 0 ${svgWidth} ${svgHeight}`);
        if (title2) {
          svg2.append("text").text(title2).attr("class", "venn-title").attr("font-size", `${32 * scale3}px`).attr("text-anchor", "middle").attr("dominant-baseline", "middle").attr("x", "50%").attr("y", 32 * scale3).style("fill", themeVariables.vennTitleTextColor || themeVariables.titleColor);
        }
        const dummyD3root = select_default2(document.createElement("div"));
        const vennDiagram = VennDiagram().width(svgWidth).height(svgHeight - titleHeight);
        dummyD3root.datum(renderSets).call(vennDiagram);
        const roughSvg = isHandDrawn ? at.svg(dummyD3root.select("svg").node()) : void 0;
        const layoutAreas = layout6(renderSets, {
          width: svgWidth,
          height: svgHeight - titleHeight,
          padding: config3?.padding ?? 15
        });
        const layoutByKey = /* @__PURE__ */ new Map();
        for (const area of layoutAreas) {
          const key = stableSetsKey([...area.data.sets].sort());
          layoutByKey.set(key, area);
        }
        if (textNodes2.length > 0) {
          renderTextNodes(config3, layoutByKey, dummyD3root, textNodes2, scale3, styleByKey);
        }
        const themeDark = is_dark_default(themeVariables.background || "#f4f4f4");
        dummyD3root.selectAll(".venn-circle").each(function(d3, i2) {
          const group2 = select_default2(this);
          const data6 = d3;
          const setsKey = stableSetsKey([...data6.sets].sort());
          const customStyle = styleByKey.get(setsKey);
          const baseColor = customStyle?.fill || themeColors[i2 % themeColors.length] || themeVariables.primaryColor;
          group2.classed(`venn-set-${i2 % 8}`, true);
          const fillOpacity = customStyle?.["fill-opacity"] ?? 0.1;
          const strokeColor = customStyle?.stroke || baseColor;
          const strokeWidthVal = customStyle?.["stroke-width"] || `${5 * scale3}`;
          if (isHandDrawn && roughSvg) {
            const layoutArea = layoutByKey.get(setsKey);
            if (layoutArea && layoutArea.circles.length > 0) {
              const c3 = layoutArea.circles[0];
              const roughNode = roughSvg.circle(c3.x, c3.y, c3.radius * 2, {
                roughness: 0.7,
                seed: handDrawnSeed,
                fill: transparentize_default(baseColor, 0.7),
                fillStyle: "hachure",
                fillWeight: 2,
                hachureGap: 8,
                hachureAngle: -41 + i2 * 60,
                stroke: strokeColor,
                strokeWidth: parseFloat(String(strokeWidthVal))
              });
              group2.select("path").remove();
              group2.node()?.insertBefore(roughNode, group2.select("text").node());
            }
          } else {
            group2.select("path").style("fill", baseColor).style("fill-opacity", fillOpacity).style("stroke", strokeColor).style("stroke-width", strokeWidthVal).style("stroke-opacity", 0.95);
          }
          const textColor = customStyle?.color || (themeDark ? lighten_default(baseColor, 30) : darken_default(baseColor, 30));
          group2.select("text").style("font-size", `${48 * scale3}px`).style("fill", textColor);
        });
        if (isHandDrawn && roughSvg) {
          dummyD3root.selectAll(".venn-intersection").each(function(d3) {
            const group2 = select_default2(this);
            const data6 = d3;
            const setsKey = stableSetsKey([...data6.sets].sort());
            const customStyle = styleByKey.get(setsKey);
            const customFill = customStyle?.fill;
            if (customFill) {
              const pathEl = group2.select("path");
              const pathD = pathEl.attr("d");
              if (pathD) {
                const roughNode = roughSvg.path(pathD, {
                  roughness: 0.7,
                  seed: handDrawnSeed,
                  fill: transparentize_default(customFill, 0.3),
                  fillStyle: "cross-hatch",
                  fillWeight: 2,
                  hachureGap: 6,
                  hachureAngle: 60,
                  stroke: "none"
                });
                const existingPath = pathEl.node();
                existingPath?.parentNode?.insertBefore(roughNode, existingPath);
                pathEl.remove();
              }
            } else {
              group2.select("path").style("fill-opacity", 0);
            }
            group2.select("text").style("font-size", `${48 * scale3}px`).style("fill", customStyle?.color ?? themeVariables.vennSetTextColor ?? defaultTextColor);
          });
        } else {
          dummyD3root.selectAll(".venn-intersection text").style("font-size", `${48 * scale3}px`).style("fill", (e3) => {
            const data6 = e3;
            const setsKey = stableSetsKey([...data6.sets].sort());
            return styleByKey.get(setsKey)?.color ?? themeVariables.vennSetTextColor ?? defaultTextColor;
          });
          dummyD3root.selectAll(".venn-intersection path").style("fill-opacity", (e3) => {
            const data6 = e3;
            const setsKey = stableSetsKey([...data6.sets].sort());
            return styleByKey.get(setsKey)?.fill ? 1 : 0;
          }).style("fill", (e3) => {
            const data6 = e3;
            const setsKey = stableSetsKey([...data6.sets].sort());
            return styleByKey.get(setsKey)?.fill ?? "transparent";
          });
        }
        const vennGroup = svg2.append("g").attr("transform", `translate(0, ${titleHeight})`);
        const dummySvg = dummyD3root.select("svg").node();
        if (dummySvg && "childNodes" in dummySvg) {
          for (const child of [...dummySvg.childNodes]) {
            vennGroup.node()?.appendChild(child);
          }
        }
        configureSvgSize(svg2, svgHeight, svgWidth, config3?.useMaxWidth ?? true);
      }, "draw");
      __name(stableSetsKey, "stableSetsKey");
      __name(renderTextNodes, "renderTextNodes");
      __name(ensurePairwiseSubsets, "ensurePairwiseSubsets");
      renderer11 = { draw: draw29 };
    }
  });

  // src/diagrams/venn/vennDiagram.ts
  var vennDiagram_exports = {};
  __export(vennDiagram_exports, {
    diagram: () => diagram30
  });
  var diagram30;
  var init_vennDiagram = __esm({
    "src/diagrams/venn/vennDiagram.ts"() {
      "use strict";
      init_venn();
      init_vennDB();
      init_styles22();
      init_vennRenderer();
      diagram30 = {
        parser: venn_default,
        db: db9,
        renderer: renderer11,
        styles: styles_default20
      };
    }
  });

  // src/diagrams/treemap/db.ts
  var TreeMapDB;
  var init_db5 = __esm({
    "src/diagrams/treemap/db.ts"() {
      "use strict";
      init_defaultConfig();
      init_config();
      init_utils2();
      init_handDrawnShapeStyles();
      init_commonDb();
      TreeMapDB = class {
        constructor() {
          this.nodes = [];
          this.levels = /* @__PURE__ */ new Map();
          this.outerNodes = [];
          this.classes = /* @__PURE__ */ new Map();
          this.setAccTitle = setAccTitle;
          this.getAccTitle = getAccTitle;
          this.setDiagramTitle = setDiagramTitle;
          this.getDiagramTitle = getDiagramTitle;
          this.getAccDescription = getAccDescription;
          this.setAccDescription = setAccDescription;
        }
        static {
          __name(this, "TreeMapDB");
        }
        getNodes() {
          return this.nodes;
        }
        getConfig() {
          const defaultConfig5 = defaultConfig_default;
          const userConfig = getConfig();
          return cleanAndMerge({
            ...defaultConfig5.treemap,
            ...userConfig.treemap ?? {}
          });
        }
        addNode(node2, level) {
          this.nodes.push(node2);
          this.levels.set(node2, level);
          if (level === 0) {
            this.outerNodes.push(node2);
            this.root ??= node2;
          }
        }
        getRoot() {
          return { name: "", children: this.outerNodes };
        }
        addClass(id41, _style) {
          const styleClass = this.classes.get(id41) ?? { id: id41, styles: [], textStyles: [] };
          const styles7 = _style.replace(/\\,/g, "\xA7\xA7\xA7").replace(/,/g, ";").replace(/§§§/g, ",").split(";");
          if (styles7) {
            styles7.forEach((s2) => {
              if (isLabelStyle(s2)) {
                if (styleClass?.textStyles) {
                  styleClass.textStyles.push(s2);
                } else {
                  styleClass.textStyles = [s2];
                }
              }
              if (styleClass?.styles) {
                styleClass.styles.push(s2);
              } else {
                styleClass.styles = [s2];
              }
            });
          }
          this.classes.set(id41, styleClass);
        }
        getClasses() {
          return this.classes;
        }
        getStylesForClass(classSelector) {
          return this.classes.get(classSelector)?.styles ?? [];
        }
        clear() {
          clear();
          this.nodes = [];
          this.levels = /* @__PURE__ */ new Map();
          this.outerNodes = [];
          this.classes = /* @__PURE__ */ new Map();
          this.root = void 0;
        }
      };
    }
  });

  // src/diagrams/treemap/utils.ts
  function buildHierarchy(items) {
    if (!items.length) {
      return [];
    }
    const root4 = [];
    const stack = [];
    items.forEach((item) => {
      const node2 = {
        name: item.name,
        children: item.type === "Leaf" ? void 0 : []
      };
      node2.classSelector = item?.classSelector;
      if (item?.cssCompiledStyles) {
        node2.cssCompiledStyles = item.cssCompiledStyles;
      }
      if (item.type === "Leaf" && item.value !== void 0) {
        node2.value = item.value;
      }
      while (stack.length > 0 && stack[stack.length - 1].level >= item.level) {
        stack.pop();
      }
      if (stack.length === 0) {
        root4.push(node2);
      } else {
        const parent4 = stack[stack.length - 1].node;
        if (parent4.children) {
          parent4.children.push(node2);
        } else {
          parent4.children = [node2];
        }
      }
      if (item.type !== "Leaf") {
        stack.push({ node: node2, level: item.level });
      }
    });
    return root4;
  }
  var init_utils4 = __esm({
    "src/diagrams/treemap/utils.ts"() {
      "use strict";
      __name(buildHierarchy, "buildHierarchy");
    }
  });

  // src/diagrams/treemap/parser.ts
  var populate19, getItemName, parser27;
  var init_parser5 = __esm({
    "src/diagrams/treemap/parser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_utils4();
      init_db5();
      populate19 = /* @__PURE__ */ __name((ast, db12) => {
        populateCommonDb(ast, db12);
        const items = [];
        for (const row of ast.TreemapRows ?? []) {
          if (row.$type === "ClassDefStatement") {
            db12.addClass(row.className ?? "", row.styleText ?? "");
          }
        }
        for (const row of ast.TreemapRows ?? []) {
          const item = row.item;
          if (!item) {
            continue;
          }
          const level = row.indent ? parseInt(row.indent) : 0;
          const name = getItemName(item);
          const styles7 = item.classSelector ? db12.getStylesForClass(item.classSelector) : [];
          const cssCompiledStyles = styles7.length > 0 ? styles7 : void 0;
          const itemData = {
            level,
            name,
            type: item.$type,
            value: item.value,
            classSelector: item.classSelector,
            cssCompiledStyles
          };
          items.push(itemData);
        }
        const hierarchyNodes = buildHierarchy(items);
        const addNodesRecursively = /* @__PURE__ */ __name((nodes5, level) => {
          for (const node2 of nodes5) {
            db12.addNode(node2, level);
            if (node2.children && node2.children.length > 0) {
              addNodesRecursively(node2.children, level + 1);
            }
          }
        }, "addNodesRecursively");
        addNodesRecursively(hierarchyNodes, 0);
      }, "populate");
      getItemName = /* @__PURE__ */ __name((item) => {
        return item.name ? String(item.name) : "";
      }, "getItemName");
      parser27 = {
        // @ts-expect-error - TreeMapDB is not assignable to DiagramDB
        parser: { yy: void 0 },
        parse: /* @__PURE__ */ __name(async (text4) => {
          try {
            const parseFunc = parse3;
            const ast = await parseFunc("treemap", text4);
            log.debug("Treemap AST:", ast);
            const db12 = parser27.parser?.yy;
            if (!(db12 instanceof TreeMapDB)) {
              throw new Error(
                "parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues."
              );
            }
            populate19(ast, db12);
          } catch (error3) {
            log.error("Error parsing treemap:", error3);
            throw error3;
          }
        }, "parse")
      };
    }
  });

  // src/diagrams/treemap/renderer.ts
  var DEFAULT_INNER_PADDING, SECTION_INNER_PADDING, SECTION_HEADER_HEIGHT, draw30, getClasses6, renderer12;
  var init_renderer5 = __esm({
    "src/diagrams/treemap/renderer.ts"() {
      "use strict";
      init_selectSvgElement();
      init_setupViewPortForSVG();
      init_setupGraphViewbox();
      init_src32();
      init_handDrawnShapeStyles();
      init_config();
      init_logger();
      DEFAULT_INNER_PADDING = 10;
      SECTION_INNER_PADDING = 10;
      SECTION_HEADER_HEIGHT = 25;
      draw30 = /* @__PURE__ */ __name((_text, id41, _version, diagram38) => {
        const treemapDb = diagram38.db;
        const config3 = treemapDb.getConfig();
        const treemapInnerPadding = config3.padding ?? DEFAULT_INNER_PADDING;
        const title2 = treemapDb.getDiagramTitle();
        const root4 = treemapDb.getRoot();
        const { themeVariables } = getConfig();
        if (!root4) {
          return;
        }
        const titleHeight = title2 ? 30 : 0;
        const svg2 = selectSvgElement(id41);
        const width3 = config3.nodeWidth ? config3.nodeWidth * SECTION_INNER_PADDING : 960;
        const height2 = config3.nodeHeight ? config3.nodeHeight * SECTION_INNER_PADDING : 500;
        const svgWidth = width3;
        const svgHeight = height2 + titleHeight;
        svg2.attr("viewBox", `0 0 ${svgWidth} ${svgHeight}`);
        configureSvgSize(svg2, svgHeight, svgWidth, config3.useMaxWidth);
        let valueFormat;
        try {
          const formatStr = config3.valueFormat || ",";
          if (formatStr === "$0,0") {
            valueFormat = /* @__PURE__ */ __name((value2) => "$" + format2(",")(value2), "valueFormat");
          } else if (formatStr.startsWith("$") && formatStr.includes(",")) {
            const precision = /\.\d+/.exec(formatStr);
            const precisionStr = precision ? precision[0] : "";
            valueFormat = /* @__PURE__ */ __name((value2) => "$" + format2("," + precisionStr)(value2), "valueFormat");
          } else if (formatStr.startsWith("$")) {
            const restOfFormat = formatStr.substring(1);
            valueFormat = /* @__PURE__ */ __name((value2) => "$" + format2(restOfFormat || "")(value2), "valueFormat");
          } else {
            valueFormat = format2(formatStr);
          }
        } catch (error3) {
          log.error("Error creating format function:", error3);
          valueFormat = format2(",");
        }
        const colorScale = ordinal().range([
          "transparent",
          themeVariables.cScale0,
          themeVariables.cScale1,
          themeVariables.cScale2,
          themeVariables.cScale3,
          themeVariables.cScale4,
          themeVariables.cScale5,
          themeVariables.cScale6,
          themeVariables.cScale7,
          themeVariables.cScale8,
          themeVariables.cScale9,
          themeVariables.cScale10,
          themeVariables.cScale11
        ]);
        const colorScalePeer = ordinal().range([
          "transparent",
          themeVariables.cScalePeer0,
          themeVariables.cScalePeer1,
          themeVariables.cScalePeer2,
          themeVariables.cScalePeer3,
          themeVariables.cScalePeer4,
          themeVariables.cScalePeer5,
          themeVariables.cScalePeer6,
          themeVariables.cScalePeer7,
          themeVariables.cScalePeer8,
          themeVariables.cScalePeer9,
          themeVariables.cScalePeer10,
          themeVariables.cScalePeer11
        ]);
        const colorScaleLabel = ordinal().range([
          themeVariables.cScaleLabel0,
          themeVariables.cScaleLabel1,
          themeVariables.cScaleLabel2,
          themeVariables.cScaleLabel3,
          themeVariables.cScaleLabel4,
          themeVariables.cScaleLabel5,
          themeVariables.cScaleLabel6,
          themeVariables.cScaleLabel7,
          themeVariables.cScaleLabel8,
          themeVariables.cScaleLabel9,
          themeVariables.cScaleLabel10,
          themeVariables.cScaleLabel11
        ]);
        if (title2) {
          svg2.append("text").attr("x", svgWidth / 2).attr("y", titleHeight / 2).attr("class", "treemapTitle").attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(title2);
        }
        const g2 = svg2.append("g").attr("transform", `translate(0, ${titleHeight})`).attr("class", "treemapContainer");
        const hierarchyRoot = hierarchy(root4).sum((d3) => d3.value ?? 0).sort((a2, b3) => (b3.value ?? 0) - (a2.value ?? 0));
        const treemapLayout = treemap_default().size([width3, height2]).paddingTop(
          (d3) => d3.children && d3.children.length > 0 ? SECTION_HEADER_HEIGHT + SECTION_INNER_PADDING : 0
        ).paddingInner(treemapInnerPadding).paddingLeft((d3) => d3.children && d3.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingRight((d3) => d3.children && d3.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingBottom((d3) => d3.children && d3.children.length > 0 ? SECTION_INNER_PADDING : 0).round(true);
        const treemapData = treemapLayout(hierarchyRoot);
        const branchNodes = treemapData.descendants().filter((d3) => d3.children && d3.children.length > 0);
        const sections6 = g2.selectAll(".treemapSection").data(branchNodes).enter().append("g").attr("class", "treemapSection").attr("transform", (d3) => `translate(${d3.x0},${d3.y0})`);
        sections6.append("rect").attr("width", (d3) => d3.x1 - d3.x0).attr("height", SECTION_HEADER_HEIGHT).attr("class", "treemapSectionHeader").attr("fill", "none").attr("fill-opacity", 0.6).attr("stroke-width", 0.6).attr("style", (d3) => {
          if (d3.depth === 0) {
            return "display: none;";
          }
          return "";
        });
        sections6.append("clipPath").attr("id", (_d, i2) => `clip-section-${id41}-${i2}`).append("rect").attr("width", (d3) => Math.max(0, d3.x1 - d3.x0 - 12)).attr("height", SECTION_HEADER_HEIGHT);
        sections6.append("rect").attr("width", (d3) => d3.x1 - d3.x0).attr("height", (d3) => d3.y1 - d3.y0).attr("class", (_d, i2) => {
          return `treemapSection section${i2}`;
        }).attr("fill", (d3) => colorScale(d3.data.name)).attr("fill-opacity", 0.6).attr("stroke", (d3) => colorScalePeer(d3.data.name)).attr("stroke-width", 2).attr("stroke-opacity", 0.4).attr("style", (d3) => {
          if (d3.depth === 0) {
            return "display: none;";
          }
          const styles7 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles });
          return styles7.nodeStyles + ";" + styles7.borderStyles.join(";");
        });
        sections6.append("text").attr("class", "treemapSectionLabel").attr("x", 6).attr("y", SECTION_HEADER_HEIGHT / 2).attr("dominant-baseline", "middle").text((d3) => d3.depth === 0 ? "" : d3.data.name).attr("font-weight", "bold").attr("clip-path", (_d, i2) => `url(#clip-section-${id41}-${i2})`).attr("style", (d3) => {
          if (d3.depth === 0) {
            return "display: none;";
          }
          const labelStyles = "dominant-baseline: middle; font-size: 12px; fill:" + colorScaleLabel(d3.data.name) + "; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;";
          const styles7 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles });
          return labelStyles + styles7.labelStyles.replace("color:", "fill:");
        }).each(function(d3) {
          if (d3.depth === 0) {
            return;
          }
          const self2 = select_default2(this);
          const originalText = d3.data.name;
          self2.text(originalText);
          const totalHeaderWidth = d3.x1 - d3.x0;
          const labelXPosition = 6;
          let spaceForTextContent;
          if (config3.showValues !== false && d3.value) {
            const valueEndsAtXRelative = totalHeaderWidth - 10;
            const estimatedValueTextActualWidth = 30;
            const gapBetweenLabelAndValue = 10;
            const labelMustEndBeforeX = valueEndsAtXRelative - estimatedValueTextActualWidth - gapBetweenLabelAndValue;
            spaceForTextContent = labelMustEndBeforeX - labelXPosition;
          } else {
            const labelOwnRightPadding = 6;
            spaceForTextContent = totalHeaderWidth - labelXPosition - labelOwnRightPadding;
          }
          const minimumWidthToDisplay = 15;
          const actualAvailableWidth = Math.max(minimumWidthToDisplay, spaceForTextContent);
          const textNode = self2.node();
          const currentTextContentLength = textNode.getComputedTextLength();
          if (currentTextContentLength > actualAvailableWidth) {
            const ellipsis = "...";
            let currentTruncatedText = originalText;
            while (currentTruncatedText.length > 0) {
              currentTruncatedText = originalText.substring(0, currentTruncatedText.length - 1);
              if (currentTruncatedText.length === 0) {
                self2.text(ellipsis);
                if (textNode.getComputedTextLength() > actualAvailableWidth) {
                  self2.text("");
                }
                break;
              }
              self2.text(currentTruncatedText + ellipsis);
              if (textNode.getComputedTextLength() <= actualAvailableWidth) {
                break;
              }
            }
          }
        });
        if (config3.showValues !== false) {
          sections6.append("text").attr("class", "treemapSectionValue").attr("x", (d3) => d3.x1 - d3.x0 - 10).attr("y", SECTION_HEADER_HEIGHT / 2).attr("text-anchor", "end").attr("dominant-baseline", "middle").text((d3) => d3.value ? valueFormat(d3.value) : "").attr("font-style", "italic").attr("style", (d3) => {
            if (d3.depth === 0) {
              return "display: none;";
            }
            const labelStyles = "text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:" + colorScaleLabel(d3.data.name) + "; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;";
            const styles7 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles });
            return labelStyles + styles7.labelStyles.replace("color:", "fill:");
          });
        }
        const leafNodes = treemapData.leaves();
        const isComplexTreemap = leafNodes.length > 20;
        const baseLabelFontSize = isComplexTreemap ? 16 : 38;
        const baseValueFontSize = isComplexTreemap ? 14 : 28;
        const minLabelFontSize = isComplexTreemap ? 4 : 8;
        const minValueFontSize = isComplexTreemap ? 4 : 6;
        const labelPadding = isComplexTreemap ? 2 : 4;
        const minDisplayThreshold = isComplexTreemap ? 8 : 10;
        const spacingBetweenLabelAndValue = isComplexTreemap ? 1 : 2;
        const cell = g2.selectAll(".treemapLeafGroup").data(leafNodes).enter().append("g").attr("class", (d3, i2) => {
          return `treemapNode treemapLeafGroup leaf${i2}${d3.data.classSelector ? ` ${d3.data.classSelector}` : ""}x`;
        }).attr("transform", (d3) => `translate(${d3.x0},${d3.y0})`);
        cell.append("rect").attr("width", (d3) => d3.x1 - d3.x0).attr("height", (d3) => d3.y1 - d3.y0).attr("class", "treemapLeaf").attr("fill", (d3) => {
          return d3.parent ? colorScale(d3.parent.data.name) : colorScale(d3.data.name);
        }).attr("style", (d3) => {
          const styles7 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles });
          return styles7.nodeStyles;
        }).attr("fill-opacity", 0.3).attr("stroke", (d3) => {
          return d3.parent ? colorScale(d3.parent.data.name) : colorScale(d3.data.name);
        }).attr("stroke-width", 3);
        cell.append("clipPath").attr("id", (_d, i2) => `clip-${id41}-${i2}`).append("rect").attr("width", (d3) => Math.max(0, d3.x1 - d3.x0 - 4)).attr("height", (d3) => Math.max(0, d3.y1 - d3.y0 - 4));
        const leafLabels = cell.append("text").attr("class", "treemapLabel").attr("x", (d3) => (d3.x1 - d3.x0) / 2).attr("y", (d3) => (d3.y1 - d3.y0) / 2).attr("style", (d3) => {
          const labelStyles = `text-anchor: middle; dominant-baseline: middle; font-size: ${baseLabelFontSize}px;fill:` + colorScaleLabel(d3.data.name) + ";";
          const styles7 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles });
          return labelStyles + styles7.labelStyles.replace("color:", "fill:");
        }).attr("clip-path", (_d, i2) => `url(#clip-${id41}-${i2})`).text((d3) => d3.data.name);
        leafLabels.each(function(d3) {
          const self2 = select_default2(this);
          const nodeWidth = d3.x1 - d3.x0;
          const nodeHeight = d3.y1 - d3.y0;
          const textNode = self2.node();
          const availableWidth = nodeWidth - 2 * labelPadding;
          const availableHeight = nodeHeight - 2 * labelPadding;
          if (availableWidth < minDisplayThreshold || availableHeight < minDisplayThreshold) {
            self2.style("display", "none");
            return;
          }
          let currentLabelFontSize = parseInt(self2.style("font-size"), 10);
          const valueScaleFactor = 0.6;
          while (textNode.getComputedTextLength() > availableWidth && currentLabelFontSize > minLabelFontSize) {
            currentLabelFontSize--;
            self2.style("font-size", `${currentLabelFontSize}px`);
          }
          let prospectiveValueFontSize = Math.max(
            minValueFontSize,
            Math.min(baseValueFontSize, Math.round(currentLabelFontSize * valueScaleFactor))
          );
          let combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;
          while (combinedHeight > availableHeight && currentLabelFontSize > minLabelFontSize) {
            currentLabelFontSize--;
            prospectiveValueFontSize = Math.max(
              minValueFontSize,
              Math.min(baseValueFontSize, Math.round(currentLabelFontSize * valueScaleFactor))
            );
            if (prospectiveValueFontSize < minValueFontSize && currentLabelFontSize === minLabelFontSize) {
              break;
            }
            self2.style("font-size", `${currentLabelFontSize}px`);
            combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;
            if (prospectiveValueFontSize <= minValueFontSize && combinedHeight > availableHeight) {
            }
          }
          self2.style("font-size", `${currentLabelFontSize}px`);
          if (isComplexTreemap) {
            if (currentLabelFontSize < minLabelFontSize || availableHeight < minLabelFontSize) {
              self2.style("display", "none");
            }
          } else {
            if (textNode.getComputedTextLength() > availableWidth || currentLabelFontSize < minLabelFontSize || availableHeight < currentLabelFontSize) {
              self2.style("display", "none");
            }
          }
        });
        if (config3.showValues !== false) {
          const leafValues = cell.append("text").attr("class", "treemapValue").attr("x", (d3) => (d3.x1 - d3.x0) / 2).attr("y", function(d3) {
            return (d3.y1 - d3.y0) / 2;
          }).attr("style", (d3) => {
            const labelStyles = `text-anchor: middle; dominant-baseline: hanging; font-size: ${baseValueFontSize}px;fill:` + colorScaleLabel(d3.data.name) + ";";
            const styles7 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles });
            return labelStyles + styles7.labelStyles.replace("color:", "fill:");
          }).attr("clip-path", (_d, i2) => `url(#clip-${id41}-${i2})`).text((d3) => d3.value ? valueFormat(d3.value) : "");
          leafValues.each(function(d3) {
            const valueTextElement = select_default2(this);
            const parentCellNode = this.parentNode;
            if (!parentCellNode) {
              valueTextElement.style("display", "none");
              return;
            }
            const labelElement = select_default2(parentCellNode).select(".treemapLabel");
            if (labelElement.empty() || labelElement.style("display") === "none") {
              valueTextElement.style("display", "none");
              return;
            }
            const finalLabelFontSize = parseFloat(labelElement.style("font-size"));
            const valueScaleFactor = 0.6;
            const actualValueFontSize = Math.max(
              minValueFontSize,
              Math.min(baseValueFontSize, Math.round(finalLabelFontSize * valueScaleFactor))
            );
            valueTextElement.style("font-size", `${actualValueFontSize}px`);
            const labelCenterY = (d3.y1 - d3.y0) / 2;
            const valueTopActualY = labelCenterY + finalLabelFontSize / 2 + spacingBetweenLabelAndValue;
            valueTextElement.attr("y", valueTopActualY);
            const nodeWidth = d3.x1 - d3.x0;
            const nodeTotalHeight = d3.y1 - d3.y0;
            const cellBottomPadding = 4;
            const maxValueBottomY = nodeTotalHeight - cellBottomPadding;
            const availableWidthForValue = nodeWidth - 2 * labelPadding;
            if (valueTextElement.node().getComputedTextLength() > availableWidthForValue || valueTopActualY + actualValueFontSize > maxValueBottomY || actualValueFontSize < minValueFontSize) {
              valueTextElement.style("display", "none");
            } else {
              valueTextElement.style("display", null);
            }
          });
        }
        const diagramPadding = config3.diagramPadding ?? 8;
        setupViewPortForSVG(svg2, diagramPadding, "flowchart", config3?.useMaxWidth || false);
      }, "draw");
      getClasses6 = /* @__PURE__ */ __name(function(_text, diagramObj) {
        return diagramObj.db.getClasses();
      }, "getClasses");
      renderer12 = { draw: draw30, getClasses: getClasses6 };
    }
  });

  // src/diagrams/treemap/styles.ts
  var defaultTreemapStyleOptions, getStyles23, styles_default21;
  var init_styles23 = __esm({
    "src/diagrams/treemap/styles.ts"() {
      "use strict";
      init_utils2();
      init_theme_default();
      init_config();
      defaultTreemapStyleOptions = {
        sectionStrokeColor: "black",
        sectionStrokeWidth: "1",
        sectionFillColor: "#efefef",
        leafStrokeColor: "black",
        leafStrokeWidth: "1",
        leafFillColor: "#efefef",
        labelFontSize: "12px",
        valueFontSize: "10px",
        titleFontSize: "14px"
      };
      getStyles23 = /* @__PURE__ */ __name(({
        treemap: treemap2
      } = {}) => {
        const defaultThemeVariables2 = getThemeVariables3();
        const currentConfig2 = getConfig();
        const themeVariables = cleanAndMerge(defaultThemeVariables2, currentConfig2.themeVariables);
        const options2 = cleanAndMerge(defaultTreemapStyleOptions, treemap2);
        const titleColor = options2.titleColor ?? themeVariables.titleColor;
        const labelColor = options2.labelColor ?? themeVariables.textColor;
        const valueColor = options2.valueColor ?? themeVariables.textColor;
        return `
  .treemapNode.section {
    stroke: ${options2.sectionStrokeColor};
    stroke-width: ${options2.sectionStrokeWidth};
    fill: ${options2.sectionFillColor};
  }
  .treemapNode.leaf {
    stroke: ${options2.leafStrokeColor};
    stroke-width: ${options2.leafStrokeWidth};
    fill: ${options2.leafFillColor};
  }
  .treemapLabel {
    fill: ${labelColor};
    font-size: ${options2.labelFontSize};
  }
  .treemapValue {
    fill: ${valueColor};
    font-size: ${options2.valueFontSize};
  }
  .treemapTitle {
    fill: ${titleColor};
    font-size: ${options2.titleFontSize};
  }
  `;
      }, "getStyles");
      styles_default21 = getStyles23;
    }
  });

  // src/diagrams/treemap/diagram.ts
  var diagram_exports5 = {};
  __export(diagram_exports5, {
    diagram: () => diagram31
  });
  var diagram31;
  var init_diagram5 = __esm({
    "src/diagrams/treemap/diagram.ts"() {
      "use strict";
      init_db5();
      init_parser5();
      init_renderer5();
      init_styles23();
      diagram31 = {
        parser: parser27,
        get db() {
          return new TreeMapDB();
        },
        renderer: renderer12,
        styles: styles_default21
      };
    }
  });

  // src/diagrams/wardley/wardleyParser.ts
  var toPercent, toCoordinates, getFlowFromPort, extractFlowFromArrow, populateDb3, parser28;
  var init_wardleyParser = __esm({
    "src/diagrams/wardley/wardleyParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      toPercent = /* @__PURE__ */ __name((value2, context) => {
        const normalized = value2 <= 1 ? value2 * 100 : value2;
        if (normalized < 0 || normalized > 100) {
          throw new Error(
            `${context} must be between 0-1 (decimal) or 0-100 (percentage). Received: ${value2}`
          );
        }
        return normalized;
      }, "toPercent");
      toCoordinates = /* @__PURE__ */ __name((visibility, evolution, context) => {
        return {
          x: toPercent(evolution, `${context} evolution`),
          y: toPercent(visibility, `${context} visibility`)
        };
      }, "toCoordinates");
      getFlowFromPort = /* @__PURE__ */ __name((port) => {
        if (!port) {
          return void 0;
        }
        if (port === "+<>") {
          return "bidirectional";
        }
        if (port === "+<") {
          return "backward";
        }
        if (port === "+>") {
          return "forward";
        }
        return void 0;
      }, "getFlowFromPort");
      extractFlowFromArrow = /* @__PURE__ */ __name((arrow) => {
        if (!arrow?.startsWith("+")) {
          return {};
        }
        const labelMatch = /^\+'([^']*)'/.exec(arrow);
        const flowLabel = labelMatch?.[1];
        if (arrow.includes("<>")) {
          return { flow: "bidirectional", label: flowLabel };
        }
        if (arrow.includes("<")) {
          return { flow: "backward", label: flowLabel };
        }
        if (arrow.includes(">")) {
          return { flow: "forward", label: flowLabel };
        }
        return { label: flowLabel };
      }, "extractFlowFromArrow");
      populateDb3 = /* @__PURE__ */ __name((ast, db12) => {
        populateCommonDb(ast, db12);
        if (ast.size) {
          db12.setSize(ast.size.width, ast.size.height);
        }
        if (ast.evolution) {
          const stages = ast.evolution.stages.map((stage) => {
            if (stage.secondName) {
              return `${stage.name.trim()} / ${stage.secondName.trim()}`;
            }
            return stage.name.trim();
          });
          const stageBoundaries = ast.evolution.stages.filter((stage) => stage.boundary !== void 0).map((stage) => stage.boundary);
          db12.updateAxes({ stages, stageBoundaries });
        }
        ast.anchors.forEach((anchor2) => {
          const coords = toCoordinates(anchor2.visibility, anchor2.evolution, `Anchor "${anchor2.name}"`);
          db12.addNode(anchor2.name, anchor2.name, coords.x, coords.y, "anchor");
        });
        ast.components.forEach((component2) => {
          const coords = toCoordinates(
            component2.visibility,
            component2.evolution,
            `Component "${component2.name}"`
          );
          const labelOffsetX = component2.label ? (component2.label.negX ? -1 : 1) * component2.label.offsetX : void 0;
          const labelOffsetY = component2.label ? (component2.label.negY ? -1 : 1) * component2.label.offsetY : void 0;
          const sourceStrategy = component2.decorator?.strategy;
          db12.addNode(
            component2.name,
            component2.name,
            coords.x,
            coords.y,
            "component",
            labelOffsetX,
            labelOffsetY,
            component2.inertia,
            sourceStrategy
          );
        });
        ast.notes.forEach((note3) => {
          const coords = toCoordinates(note3.visibility, note3.evolution, `Note "${note3.text}"`);
          db12.addNote(note3.text, coords.x, coords.y);
        });
        ast.pipelines.forEach((pipeline) => {
          const parentNode = db12.getNode(pipeline.parent);
          if (!parentNode || typeof parentNode.y !== "number") {
            throw new Error(
              `Pipeline "${pipeline.parent}" must reference an existing component with coordinates.`
            );
          }
          const parentY = parentNode.y;
          db12.startPipeline(pipeline.parent);
          pipeline.components.forEach((component2) => {
            const componentId = `${pipeline.parent}_${component2.name}`;
            const labelOffsetX = component2.label ? (component2.label.negX ? -1 : 1) * component2.label.offsetX : void 0;
            const labelOffsetY = component2.label ? (component2.label.negY ? -1 : 1) * component2.label.offsetY : void 0;
            const x5 = toPercent(component2.evolution, `Pipeline component "${component2.name}" evolution`);
            db12.addNode(
              componentId,
              component2.name,
              x5,
              parentY,
              "pipeline-component",
              labelOffsetX,
              labelOffsetY
            );
            db12.addPipelineComponent(pipeline.parent, componentId);
          });
        });
        ast.links.forEach((link2) => {
          const isDashed = !!link2.arrow && (link2.arrow.includes("-.->") || link2.arrow.includes(".-."));
          let flow = getFlowFromPort(link2.fromPort) ?? getFlowFromPort(link2.toPort);
          const { flow: arrowFlow, label: flowLabel } = extractFlowFromArrow(link2.arrow);
          if (!flow && arrowFlow) {
            flow = arrowFlow;
          }
          const annotation = link2.linkLabel;
          const label = flowLabel ?? annotation;
          db12.addLink(db12.resolveNodeId(link2.from), db12.resolveNodeId(link2.to), isDashed, label, flow);
        });
        ast.evolves.forEach((evolve2) => {
          const node2 = db12.getNode(evolve2.component);
          if (node2?.y !== void 0) {
            const target = toPercent(evolve2.target, `Evolve target for "${evolve2.component}"`);
            db12.addTrend(evolve2.component, target, node2.y);
          }
        });
        if (ast.annotations.length > 0) {
          const annotationsBox = ast.annotations[0];
          const coords = toCoordinates(annotationsBox.x, annotationsBox.y, "Annotations box");
          db12.setAnnotationsBox(coords.x, coords.y);
        }
        ast.annotation.forEach((annotation) => {
          const coords = toCoordinates(annotation.x, annotation.y, `Annotation ${annotation.number}`);
          db12.addAnnotation(annotation.number, [{ x: coords.x, y: coords.y }], annotation.text);
        });
        ast.accelerators.forEach((accelerator) => {
          const coords = toCoordinates(accelerator.x, accelerator.y, `Accelerator "${accelerator.name}"`);
          db12.addAccelerator(accelerator.name, coords.x, coords.y);
        });
        ast.deaccelerators.forEach((deaccelerator) => {
          const coords = toCoordinates(
            deaccelerator.x,
            deaccelerator.y,
            `Deaccelerator "${deaccelerator.name}"`
          );
          db12.addDeaccelerator(deaccelerator.name, coords.x, coords.y);
        });
      }, "populateDb");
      parser28 = {
        parser: {
          // @ts-expect-error - WardleyDB is not assignable to DiagramDB
          yy: void 0
        },
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("wardley", input);
          log.debug(ast);
          const db12 = parser28.parser?.yy;
          if (!db12 || typeof db12.addNode !== "function") {
            throw new Error(
              "parser.parser?.yy was not a WardleyDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues."
            );
          }
          populateDb3(ast, db12);
        }, "parse")
      };
    }
  });

  // src/diagrams/wardley/wardleyBuilder.ts
  var WardleyBuilder;
  var init_wardleyBuilder = __esm({
    "src/diagrams/wardley/wardleyBuilder.ts"() {
      "use strict";
      WardleyBuilder = class {
        constructor() {
          this.nodes = /* @__PURE__ */ new Map();
          this.links = [];
          this.trends = /* @__PURE__ */ new Map();
          this.pipelines = /* @__PURE__ */ new Map();
          this.annotations = [];
          this.notes = [];
          this.accelerators = [];
          this.deaccelerators = [];
          this.axes = {};
        }
        static {
          __name(this, "WardleyBuilder");
        }
        addNode(node2) {
          const existing = this.nodes.get(node2.id) ?? { id: node2.id, label: node2.label };
          const merged = {
            ...existing,
            ...node2,
            className: node2.className ?? existing.className,
            labelOffsetX: node2.labelOffsetX ?? existing.labelOffsetX,
            labelOffsetY: node2.labelOffsetY ?? existing.labelOffsetY
          };
          this.nodes.set(node2.id, merged);
        }
        addLink(link2) {
          this.links.push(link2);
        }
        addTrend(trend) {
          this.trends.set(trend.nodeId, trend);
        }
        startPipeline(nodeId) {
          this.pipelines.set(nodeId, { nodeId, componentIds: [] });
          const node2 = this.nodes.get(nodeId);
          if (node2) {
            node2.isPipelineParent = true;
          }
        }
        addPipelineComponent(pipelineNodeId, componentId) {
          const pipeline = this.pipelines.get(pipelineNodeId);
          if (pipeline) {
            pipeline.componentIds.push(componentId);
          }
          const node2 = this.nodes.get(componentId);
          if (node2) {
            node2.inPipeline = true;
          }
        }
        addAnnotation(annotation) {
          this.annotations.push(annotation);
        }
        addNote(note3) {
          this.notes.push(note3);
        }
        addAccelerator(accelerator) {
          this.accelerators.push(accelerator);
        }
        addDeaccelerator(deaccelerator) {
          this.deaccelerators.push(deaccelerator);
        }
        setAnnotationsBox(x5, y6) {
          this.annotationsBox = { x: x5, y: y6 };
        }
        setAxes(partial) {
          this.axes = {
            ...this.axes,
            ...partial
          };
        }
        setSize(width3, height2) {
          this.size = { width: width3, height: height2 };
        }
        getNode(id41) {
          return this.nodes.get(id41);
        }
        /**
         * Resolve a name to a node ID. Tries exact ID match first,
         * then falls back to finding a node whose label matches the name
         * (handles pipeline components which have synthetic IDs like "Parent_Child").
         */
        resolveNodeId(name) {
          if (this.nodes.has(name)) {
            return name;
          }
          for (const [id41, node2] of this.nodes) {
            if (node2.label === name) {
              return id41;
            }
          }
          return name;
        }
        build() {
          const nodes5 = [];
          for (const node2 of this.nodes.values()) {
            if (typeof node2.x !== "number" || typeof node2.y !== "number") {
              throw new Error(`Node "${node2.label}" is missing coordinates`);
            }
            nodes5.push(node2);
          }
          return {
            nodes: nodes5,
            links: [...this.links],
            trends: [...this.trends.values()],
            pipelines: [...this.pipelines.values()],
            annotations: [...this.annotations],
            notes: [...this.notes],
            accelerators: [...this.accelerators],
            deaccelerators: [...this.deaccelerators],
            annotationsBox: this.annotationsBox,
            axes: { ...this.axes },
            size: this.size
          };
        }
        clear() {
          this.nodes.clear();
          this.links = [];
          this.trends.clear();
          this.pipelines.clear();
          this.annotations = [];
          this.notes = [];
          this.accelerators = [];
          this.deaccelerators = [];
          this.annotationsBox = void 0;
          this.axes = {};
          this.size = void 0;
        }
      };
    }
  });

  // src/diagrams/wardley/wardleyDb.ts
  function getConfig9() {
    return getConfig2()["wardley-beta"];
  }
  function addNode3(id41, label, x5, y6, className, labelOffsetX, labelOffsetY, inertia, sourceStrategy) {
    builder.addNode({
      id: id41,
      label,
      x: x5,
      y: y6,
      className,
      labelOffsetX,
      labelOffsetY,
      inertia,
      sourceStrategy
    });
  }
  function addLink2(sourceId, targetId, dashed = false, label, flow) {
    builder.addLink({
      source: sourceId,
      target: targetId,
      dashed,
      label,
      flow
    });
  }
  function addTrend(nodeId, targetX, targetY) {
    builder.addTrend({ nodeId, targetX, targetY });
  }
  function addAnnotation(number7, coordinates, text4) {
    builder.addAnnotation({
      number: number7,
      coordinates,
      text: text4
    });
  }
  function addNote(text4, x5, y6) {
    builder.addNote({
      text: text4,
      x: x5,
      y: y6
    });
  }
  function addAccelerator(name, x5, y6) {
    builder.addAccelerator({
      name,
      x: x5,
      y: y6
    });
  }
  function addDeaccelerator(name, x5, y6) {
    builder.addDeaccelerator({
      name,
      x: x5,
      y: y6
    });
  }
  function setAnnotationsBox(x5, y6) {
    builder.setAnnotationsBox(x5, y6);
  }
  function setSize(width3, height2) {
    builder.setSize(width3, height2);
  }
  function startPipeline(nodeId) {
    builder.startPipeline(nodeId);
  }
  function addPipelineComponent(pipelineNodeId, componentId) {
    builder.addPipelineComponent(pipelineNodeId, componentId);
  }
  function updateAxes(partial) {
    builder.setAxes(partial);
  }
  function getNode(id41) {
    return builder.getNode(id41);
  }
  function resolveNodeId(name) {
    return builder.resolveNodeId(name);
  }
  function getWardleyData() {
    return builder.build();
  }
  function clear21() {
    builder.clear();
    clear();
  }
  var builder, wardleyDb_default;
  var init_wardleyDb = __esm({
    "src/diagrams/wardley/wardleyDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_commonDb();
      init_wardleyBuilder();
      builder = new WardleyBuilder();
      __name(getConfig9, "getConfig");
      __name(addNode3, "addNode");
      __name(addLink2, "addLink");
      __name(addTrend, "addTrend");
      __name(addAnnotation, "addAnnotation");
      __name(addNote, "addNote");
      __name(addAccelerator, "addAccelerator");
      __name(addDeaccelerator, "addDeaccelerator");
      __name(setAnnotationsBox, "setAnnotationsBox");
      __name(setSize, "setSize");
      __name(startPipeline, "startPipeline");
      __name(addPipelineComponent, "addPipelineComponent");
      __name(updateAxes, "updateAxes");
      __name(getNode, "getNode");
      __name(resolveNodeId, "resolveNodeId");
      __name(getWardleyData, "getWardleyData");
      __name(clear21, "clear");
      wardleyDb_default = {
        getConfig: getConfig9,
        addNode: addNode3,
        addLink: addLink2,
        addTrend,
        addAnnotation,
        addNote,
        addAccelerator,
        addDeaccelerator,
        setAnnotationsBox,
        setSize,
        startPipeline,
        addPipelineComponent,
        updateAxes,
        getNode,
        resolveNodeId,
        getWardleyData,
        clear: clear21,
        setAccTitle,
        getAccTitle,
        setDiagramTitle,
        getDiagramTitle,
        getAccDescription,
        setAccDescription
      };
    }
  });

  // src/diagrams/wardley/wardleyRenderer.ts
  var DEFAULT_STAGES, getTheme, getConfigValues, draw31, wardleyRenderer_default;
  var init_wardleyRenderer = __esm({
    "src/diagrams/wardley/wardleyRenderer.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_selectSvgElement();
      init_setupGraphViewbox();
      DEFAULT_STAGES = ["Genesis", "Custom Built", "Product", "Commodity"];
      getTheme = /* @__PURE__ */ __name(() => {
        const { themeVariables } = getConfig2();
        return {
          backgroundColor: themeVariables.wardley?.backgroundColor ?? themeVariables.background ?? "#fff",
          axisColor: themeVariables.wardley?.axisColor ?? "#000",
          axisTextColor: themeVariables.wardley?.axisTextColor ?? themeVariables.primaryTextColor ?? "#222",
          gridColor: themeVariables.wardley?.gridColor ?? "rgba(100, 100, 100, 0.2)",
          componentFill: themeVariables.wardley?.componentFill ?? "#fff",
          componentStroke: themeVariables.wardley?.componentStroke ?? "#000",
          componentLabelColor: themeVariables.wardley?.componentLabelColor ?? themeVariables.primaryTextColor ?? "#222",
          linkStroke: themeVariables.wardley?.linkStroke ?? "#000",
          evolutionStroke: themeVariables.wardley?.evolutionStroke ?? "#dc3545",
          annotationStroke: themeVariables.wardley?.annotationStroke ?? "#000",
          annotationTextColor: themeVariables.wardley?.annotationTextColor ?? themeVariables.primaryTextColor ?? "#222",
          annotationFill: themeVariables.wardley?.annotationFill ?? themeVariables.background ?? "#fff"
        };
      }, "getTheme");
      getConfigValues = /* @__PURE__ */ __name(() => {
        const wardleyConfig = getConfig2()["wardley-beta"];
        return {
          width: wardleyConfig?.width ?? 900,
          height: wardleyConfig?.height ?? 600,
          padding: wardleyConfig?.padding ?? 48,
          nodeRadius: wardleyConfig?.nodeRadius ?? 6,
          nodeLabelOffset: wardleyConfig?.nodeLabelOffset ?? 8,
          axisFontSize: wardleyConfig?.axisFontSize ?? 12,
          labelFontSize: wardleyConfig?.labelFontSize ?? 10,
          showGrid: wardleyConfig?.showGrid ?? false,
          useMaxWidth: wardleyConfig?.useMaxWidth ?? true
        };
      }, "getConfigValues");
      draw31 = /* @__PURE__ */ __name((text4, id41, _version, diagObj) => {
        log.debug("Rendering Wardley map\n" + text4);
        const configValues = getConfigValues();
        const theme = getTheme();
        const squareSize = configValues.nodeRadius * 1.6;
        const db12 = diagObj.db;
        const data6 = db12.getWardleyData();
        const title2 = db12.getDiagramTitle();
        const width3 = data6.size?.width ?? configValues.width;
        const height2 = data6.size?.height ?? configValues.height;
        const svg2 = selectSvgElement(id41);
        svg2.selectAll("*").remove();
        configureSvgSize(svg2, height2, width3, configValues.useMaxWidth);
        svg2.attr("viewBox", `0 0 ${width3} ${height2}`);
        const root4 = svg2.append("g").attr("class", "wardley-map");
        const defs2 = svg2.append("defs");
        defs2.append("marker").attr("id", `arrow-${id41}`).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerWidth", 6).attr("markerHeight", 6).attr("orient", "auto-start-reverse").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("fill", theme.evolutionStroke).attr("stroke", "none");
        defs2.append("marker").attr("id", `link-arrow-end-${id41}`).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerWidth", 5).attr("markerHeight", 5).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("fill", theme.linkStroke).attr("stroke", "none");
        defs2.append("marker").attr("id", `link-arrow-start-${id41}`).attr("viewBox", "0 0 10 10").attr("refX", 1).attr("refY", 5).attr("markerWidth", 5).attr("markerHeight", 5).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 z").attr("fill", theme.linkStroke).attr("stroke", "none");
        root4.append("rect").attr("class", "wardley-background").attr("width", width3).attr("height", height2).attr("fill", theme.backgroundColor);
        const chartWidth = width3 - configValues.padding * 2;
        const chartHeight = height2 - configValues.padding * 2;
        if (title2) {
          root4.append("text").attr("class", "wardley-title").attr("x", width3 / 2).attr("y", configValues.padding / 2).attr("fill", theme.axisTextColor).attr("font-size", configValues.axisFontSize * 1.05).attr("font-weight", "bold").attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(title2);
        }
        const projectX = /* @__PURE__ */ __name((value2) => configValues.padding + value2 / 100 * chartWidth, "projectX");
        const projectY = /* @__PURE__ */ __name((value2) => height2 - configValues.padding - value2 / 100 * chartHeight, "projectY");
        const axisGroup = root4.append("g").attr("class", "wardley-axes");
        axisGroup.append("line").attr("x1", configValues.padding).attr("x2", width3 - configValues.padding).attr("y1", height2 - configValues.padding).attr("y2", height2 - configValues.padding).attr("stroke", theme.axisColor).attr("stroke-width", 1);
        axisGroup.append("line").attr("x1", configValues.padding).attr("x2", configValues.padding).attr("y1", configValues.padding).attr("y2", height2 - configValues.padding).attr("stroke", theme.axisColor).attr("stroke-width", 1);
        const xLabel = data6.axes.xLabel ?? "Evolution";
        const yLabel = data6.axes.yLabel ?? "Visibility";
        axisGroup.append("text").attr("class", "wardley-axis-label wardley-axis-label-x").attr("x", configValues.padding + chartWidth / 2).attr("y", height2 - configValues.padding / 4).attr("fill", theme.axisTextColor).attr("font-size", configValues.axisFontSize).attr("font-weight", "bold").attr("text-anchor", "middle").text(xLabel);
        axisGroup.append("text").attr("class", "wardley-axis-label wardley-axis-label-y").attr("x", configValues.padding / 3).attr("y", configValues.padding + chartHeight / 2).attr("fill", theme.axisTextColor).attr("font-size", configValues.axisFontSize).attr("font-weight", "bold").attr("text-anchor", "middle").attr(
          "transform",
          `rotate(-90 ${configValues.padding / 3} ${configValues.padding + chartHeight / 2})`
        ).text(yLabel);
        const stages = data6.axes.stages && data6.axes.stages.length > 0 ? data6.axes.stages : DEFAULT_STAGES;
        if (stages.length > 0) {
          const stageGroup = root4.append("g").attr("class", "wardley-stages");
          const boundaries2 = data6.axes.stageBoundaries;
          const stagePositions = [];
          if (boundaries2 && boundaries2.length === stages.length) {
            let prevBoundary = 0;
            boundaries2.forEach((boundary) => {
              stagePositions.push({ start: prevBoundary, end: boundary });
              prevBoundary = boundary;
            });
          } else {
            const stageWidth = 1 / stages.length;
            stages.forEach((_3, index) => {
              stagePositions.push({
                start: index * stageWidth,
                end: (index + 1) * stageWidth
              });
            });
          }
          stages.forEach((stage, index) => {
            const pos = stagePositions[index];
            const startX2 = configValues.padding + pos.start * chartWidth;
            const endX = configValues.padding + pos.end * chartWidth;
            const centerX = (startX2 + endX) / 2;
            if (index > 0) {
              stageGroup.append("line").attr("x1", startX2).attr("x2", startX2).attr("y1", configValues.padding).attr("y2", height2 - configValues.padding).attr("stroke", "#000").attr("stroke-width", 1).attr("stroke-dasharray", "5 5").attr("opacity", 0.8);
            }
            stageGroup.append("text").attr("class", "wardley-stage-label").attr("x", centerX).attr("y", height2 - configValues.padding / 1.5).attr("fill", theme.axisTextColor).attr("font-size", configValues.axisFontSize - 2).attr("text-anchor", "middle").text(stage);
          });
        }
        if (configValues.showGrid) {
          const gridGroup = root4.append("g").attr("class", "wardley-grid");
          for (let i2 = 1; i2 < 4; i2++) {
            const ratio = i2 / 4;
            const x5 = configValues.padding + chartWidth * ratio;
            gridGroup.append("line").attr("x1", x5).attr("x2", x5).attr("y1", configValues.padding).attr("y2", height2 - configValues.padding).attr("stroke", theme.gridColor).attr("stroke-dasharray", "2 6");
            gridGroup.append("line").attr("x1", configValues.padding).attr("x2", width3 - configValues.padding).attr("y1", height2 - configValues.padding - chartHeight * ratio).attr("y2", height2 - configValues.padding - chartHeight * ratio).attr("stroke", theme.gridColor).attr("stroke-dasharray", "2 6");
          }
        }
        const positions2 = /* @__PURE__ */ new Map();
        data6.nodes.forEach((node2) => {
          positions2.set(node2.id, {
            x: projectX(node2.x),
            y: projectY(node2.y),
            node: node2
          });
        });
        if (data6.pipelines.length > 0) {
          const pipelineGroup = root4.append("g").attr("class", "wardley-pipelines");
          const pipelineLinksGroup = root4.append("g").attr("class", "wardley-pipeline-links");
          data6.pipelines.forEach((pipeline) => {
            if (pipeline.componentIds.length === 0) {
              return;
            }
            const sortedComponents = pipeline.componentIds.map((id42) => ({ id: id42, pos: positions2.get(id42), node: data6.nodes.find((n2) => n2.id === id42) })).filter((c3) => c3.pos && c3.node).sort((a2, b3) => a2.node.x - b3.node.x);
            for (let i2 = 0; i2 < sortedComponents.length - 1; i2++) {
              const current = sortedComponents[i2];
              const next3 = sortedComponents[i2 + 1];
              pipelineLinksGroup.append("line").attr("class", "wardley-pipeline-evolution-link").attr("x1", current.pos.x).attr("y1", current.pos.y).attr("x2", next3.pos.x).attr("y2", next3.pos.y).attr("stroke", theme.linkStroke).attr("stroke-width", 1).attr("stroke-dasharray", "4 4");
            }
            let minX = Infinity;
            let maxX = -Infinity;
            let y6 = 0;
            pipeline.componentIds.forEach((componentId) => {
              const pos = positions2.get(componentId);
              if (pos) {
                minX = Math.min(minX, pos.x);
                maxX = Math.max(maxX, pos.x);
                y6 = pos.y;
              }
            });
            if (minX !== Infinity && maxX !== -Infinity) {
              const padding = 15;
              const height3 = configValues.nodeRadius * 4;
              const boxTop = y6 - height3 / 2;
              const parentPos = positions2.get(pipeline.nodeId);
              if (parentPos) {
                const centerX = (minX + maxX) / 2;
                parentPos.x = centerX;
                parentPos.y = boxTop - squareSize / 6;
              }
              pipelineGroup.append("rect").attr("class", "wardley-pipeline-box").attr("x", minX - padding).attr("y", boxTop).attr("width", maxX - minX + padding * 2).attr("height", height3).attr("fill", "none").attr("stroke", theme.axisColor).attr("stroke-width", 1.5).attr("rx", 4).attr("ry", 4);
            }
          });
        }
        const linksGroup = root4.append("g").attr("class", "wardley-links");
        const pipelineMap = /* @__PURE__ */ new Map();
        data6.pipelines.forEach((pipeline) => {
          pipelineMap.set(pipeline.nodeId, new Set(pipeline.componentIds));
        });
        const validLinks = data6.links.filter((link2) => {
          if (!positions2.has(link2.source) || !positions2.has(link2.target)) {
            return false;
          }
          const pipelineComponents = pipelineMap.get(link2.target);
          if (pipelineComponents?.has(link2.source)) {
            return false;
          }
          return true;
        });
        linksGroup.selectAll("line").data(validLinks).enter().append("line").attr("class", (link2) => `wardley-link${link2.dashed ? " wardley-link--dashed" : ""}`).attr("x1", (link2) => {
          const sourcePos = positions2.get(link2.source);
          const targetPos = positions2.get(link2.target);
          const sourceNode = data6.nodes.find((n2) => n2.id === link2.source);
          const radius2 = sourceNode.isPipelineParent ? squareSize / Math.sqrt(2) : configValues.nodeRadius;
          const dx = targetPos.x - sourcePos.x;
          const dy = targetPos.y - sourcePos.y;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          return sourcePos.x + dx / distance3 * radius2;
        }).attr("y1", (link2) => {
          const sourcePos = positions2.get(link2.source);
          const targetPos = positions2.get(link2.target);
          const sourceNode = data6.nodes.find((n2) => n2.id === link2.source);
          const radius2 = sourceNode.isPipelineParent ? squareSize / Math.sqrt(2) : configValues.nodeRadius;
          const dx = targetPos.x - sourcePos.x;
          const dy = targetPos.y - sourcePos.y;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          return sourcePos.y + dy / distance3 * radius2;
        }).attr("x2", (link2) => {
          const sourcePos = positions2.get(link2.source);
          const targetPos = positions2.get(link2.target);
          const targetNode = data6.nodes.find((n2) => n2.id === link2.target);
          const radius2 = targetNode.isPipelineParent ? squareSize / Math.sqrt(2) : configValues.nodeRadius;
          const dx = sourcePos.x - targetPos.x;
          const dy = sourcePos.y - targetPos.y;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          return targetPos.x + dx / distance3 * radius2;
        }).attr("y2", (link2) => {
          const sourcePos = positions2.get(link2.source);
          const targetPos = positions2.get(link2.target);
          const targetNode = data6.nodes.find((n2) => n2.id === link2.target);
          const radius2 = targetNode.isPipelineParent ? squareSize / Math.sqrt(2) : configValues.nodeRadius;
          const dx = sourcePos.x - targetPos.x;
          const dy = sourcePos.y - targetPos.y;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          return targetPos.y + dy / distance3 * radius2;
        }).attr("stroke", theme.linkStroke).attr("stroke-width", 1).attr("stroke-dasharray", (link2) => link2.dashed ? "6 6" : null).attr("marker-end", (link2) => {
          if (link2.flow === "forward" || link2.flow === "bidirectional") {
            return `url(#link-arrow-end-${id41})`;
          }
          return null;
        }).attr("marker-start", (link2) => {
          if (link2.flow === "backward" || link2.flow === "bidirectional") {
            return `url(#link-arrow-start-${id41})`;
          }
          return null;
        });
        linksGroup.selectAll("text").data(validLinks.filter((link2) => link2.label)).enter().append("text").attr("class", "wardley-link-label").attr("x", (link2) => {
          const sourcePos = positions2.get(link2.source);
          const targetPos = positions2.get(link2.target);
          const midX = (sourcePos.x + targetPos.x) / 2;
          const dy = targetPos.y - sourcePos.y;
          const dx = targetPos.x - sourcePos.x;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          const offset = 8;
          const perpX = dy / distance3;
          return midX + perpX * offset;
        }).attr("y", (link2) => {
          const sourcePos = positions2.get(link2.source);
          const targetPos = positions2.get(link2.target);
          const midY = (sourcePos.y + targetPos.y) / 2;
          const dx = targetPos.x - sourcePos.x;
          const dy = targetPos.y - sourcePos.y;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          const offset = 8;
          const perpY = -dx / distance3;
          return midY + perpY * offset;
        }).attr("fill", theme.axisTextColor).attr("font-size", configValues.labelFontSize).attr("text-anchor", "middle").attr("dominant-baseline", "middle").attr("transform", (link2) => {
          const sourcePos = positions2.get(link2.source);
          const targetPos = positions2.get(link2.target);
          const midX = (sourcePos.x + targetPos.x) / 2;
          const midY = (sourcePos.y + targetPos.y) / 2;
          const dx = targetPos.x - sourcePos.x;
          const dy = targetPos.y - sourcePos.y;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          const offset = 8;
          const perpX = dy / distance3;
          const perpY = -dx / distance3;
          const labelX = midX + perpX * offset;
          const labelY = midY + perpY * offset;
          let angle2 = Math.atan2(dy, dx) * 180 / Math.PI;
          if (angle2 > 90 || angle2 < -90) {
            angle2 += 180;
          }
          return `rotate(${angle2} ${labelX} ${labelY})`;
        }).text((link2) => link2.label);
        const trendGroup = root4.append("g").attr("class", "wardley-trends");
        const trendsWithPositions = data6.trends.map((trend) => {
          const origin = positions2.get(trend.nodeId);
          if (!origin) {
            return null;
          }
          const targetX = projectX(trend.targetX);
          const targetY = projectY(trend.targetY);
          const dx = targetX - origin.x;
          const dy = targetY - origin.y;
          const distance3 = Math.sqrt(dx * dx + dy * dy);
          const shortenBy = configValues.nodeRadius + 2;
          const adjustedX2 = distance3 > shortenBy ? targetX - dx / distance3 * shortenBy : targetX;
          const adjustedY2 = distance3 > shortenBy ? targetY - dy / distance3 * shortenBy : targetY;
          return {
            origin,
            targetX,
            targetY,
            adjustedX2,
            adjustedY2
          };
        }).filter((trend) => trend !== null);
        trendGroup.selectAll("line").data(trendsWithPositions).enter().append("line").attr("class", "wardley-trend").attr("x1", (trend) => trend.origin.x).attr("y1", (trend) => trend.origin.y).attr("x2", (trend) => trend.adjustedX2).attr("y2", (trend) => trend.adjustedY2).attr("stroke", theme.evolutionStroke).attr("stroke-width", 1).attr("stroke-dasharray", "4 4").attr("marker-end", `url(#arrow-${id41})`);
        const nodesGroup = root4.append("g").attr("class", "wardley-nodes");
        const nodeEnter = nodesGroup.selectAll("g").data(data6.nodes).enter().append("g").attr(
          "class",
          (node2) => ["wardley-node", node2.className ? `wardley-node--${node2.className}` : ""].filter(Boolean).join(" ")
        );
        nodeEnter.filter((node2) => node2.sourceStrategy === "outsource").append("circle").attr("class", "wardley-outsource-overlay").attr("cx", (node2) => positions2.get(node2.id).x).attr("cy", (node2) => positions2.get(node2.id).y).attr("r", configValues.nodeRadius * 2).attr("fill", "#666").attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        nodeEnter.filter((node2) => node2.sourceStrategy === "buy").append("circle").attr("class", "wardley-buy-overlay").attr("cx", (node2) => positions2.get(node2.id).x).attr("cy", (node2) => positions2.get(node2.id).y).attr("r", configValues.nodeRadius * 2).attr("fill", "#ccc").attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        nodeEnter.filter((node2) => node2.sourceStrategy === "build").append("circle").attr("class", "wardley-build-overlay").attr("cx", (node2) => positions2.get(node2.id).x).attr("cy", (node2) => positions2.get(node2.id).y).attr("r", configValues.nodeRadius * 2).attr("fill", "#eee").attr("stroke", "#000").attr("stroke-width", 1);
        const marketNodes = nodeEnter.filter((node2) => node2.sourceStrategy === "market");
        marketNodes.append("circle").attr("class", "wardley-market-overlay").attr("cx", (node2) => positions2.get(node2.id).x).attr("cy", (node2) => positions2.get(node2.id).y).attr("r", configValues.nodeRadius * 2).attr("fill", "white").attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        nodeEnter.filter(
          (node2) => !node2.isPipelineParent && node2.sourceStrategy !== "market" && node2.className !== "anchor"
        ).append("circle").attr("cx", (node2) => positions2.get(node2.id).x).attr("cy", (node2) => positions2.get(node2.id).y).attr("r", configValues.nodeRadius).attr("fill", theme.componentFill).attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        const smallCircleRadius = configValues.nodeRadius * 0.7;
        const triangleRadius = configValues.nodeRadius * 1.2;
        marketNodes.append("line").attr("class", "wardley-market-line").attr("x1", (node2) => positions2.get(node2.id).x).attr("y1", (node2) => positions2.get(node2.id).y - triangleRadius).attr("x2", (node2) => positions2.get(node2.id).x - triangleRadius * Math.cos(Math.PI / 6)).attr("y2", (node2) => positions2.get(node2.id).y + triangleRadius * Math.sin(Math.PI / 6)).attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        marketNodes.append("line").attr("class", "wardley-market-line").attr("x1", (node2) => positions2.get(node2.id).x - triangleRadius * Math.cos(Math.PI / 6)).attr("y1", (node2) => positions2.get(node2.id).y + triangleRadius * Math.sin(Math.PI / 6)).attr("x2", (node2) => positions2.get(node2.id).x + triangleRadius * Math.cos(Math.PI / 6)).attr("y2", (node2) => positions2.get(node2.id).y + triangleRadius * Math.sin(Math.PI / 6)).attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        marketNodes.append("line").attr("class", "wardley-market-line").attr("x1", (node2) => positions2.get(node2.id).x + triangleRadius * Math.cos(Math.PI / 6)).attr("y1", (node2) => positions2.get(node2.id).y + triangleRadius * Math.sin(Math.PI / 6)).attr("x2", (node2) => positions2.get(node2.id).x).attr("y2", (node2) => positions2.get(node2.id).y - triangleRadius).attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        marketNodes.append("circle").attr("class", "wardley-market-dot").attr("cx", (node2) => positions2.get(node2.id).x).attr("cy", (node2) => positions2.get(node2.id).y - triangleRadius).attr("r", smallCircleRadius).attr("fill", "white").attr("stroke", theme.componentStroke).attr("stroke-width", 2);
        marketNodes.append("circle").attr("class", "wardley-market-dot").attr("cx", (node2) => positions2.get(node2.id).x - triangleRadius * Math.cos(Math.PI / 6)).attr("cy", (node2) => positions2.get(node2.id).y + triangleRadius * Math.sin(Math.PI / 6)).attr("r", smallCircleRadius).attr("fill", "white").attr("stroke", theme.componentStroke).attr("stroke-width", 2);
        marketNodes.append("circle").attr("class", "wardley-market-dot").attr("cx", (node2) => positions2.get(node2.id).x + triangleRadius * Math.cos(Math.PI / 6)).attr("cy", (node2) => positions2.get(node2.id).y + triangleRadius * Math.sin(Math.PI / 6)).attr("r", smallCircleRadius).attr("fill", "white").attr("stroke", theme.componentStroke).attr("stroke-width", 2);
        nodeEnter.filter((node2) => node2.isPipelineParent === true).append("rect").attr("x", (node2) => positions2.get(node2.id).x - squareSize / 2).attr("y", (node2) => positions2.get(node2.id).y - squareSize / 2).attr("width", squareSize).attr("height", squareSize).attr("fill", theme.componentFill).attr("stroke", theme.componentStroke).attr("stroke-width", 1);
        nodeEnter.filter((node2) => node2.inertia === true).append("line").attr("class", "wardley-inertia").attr("x1", (node2) => {
          const pos = positions2.get(node2.id);
          let offset = node2.isPipelineParent ? squareSize / 2 + 15 : configValues.nodeRadius + 15;
          if (node2.sourceStrategy) {
            offset += configValues.nodeRadius + 10;
          }
          return pos.x + offset;
        }).attr("y1", (node2) => {
          const pos = positions2.get(node2.id);
          const lineHeight = node2.isPipelineParent ? squareSize : configValues.nodeRadius * 2;
          return pos.y - lineHeight / 2;
        }).attr("x2", (node2) => {
          const pos = positions2.get(node2.id);
          let offset = node2.isPipelineParent ? squareSize / 2 + 15 : configValues.nodeRadius + 15;
          if (node2.sourceStrategy) {
            offset += configValues.nodeRadius + 10;
          }
          return pos.x + offset;
        }).attr("y2", (node2) => {
          const pos = positions2.get(node2.id);
          const lineHeight = node2.isPipelineParent ? squareSize : configValues.nodeRadius * 2;
          return pos.y + lineHeight / 2;
        }).attr("stroke", theme.componentStroke).attr("stroke-width", 6);
        nodeEnter.append("text").attr("x", (node2) => {
          const pos = positions2.get(node2.id);
          if (node2.className === "anchor") {
            return node2.labelOffsetX !== void 0 ? pos.x + node2.labelOffsetX : pos.x;
          }
          let defaultOffset = configValues.nodeLabelOffset;
          if (node2.sourceStrategy && node2.labelOffsetX === void 0) {
            defaultOffset += 10;
          }
          const customOffset = node2.labelOffsetX ?? defaultOffset;
          return pos.x + customOffset;
        }).attr("y", (node2) => {
          const pos = positions2.get(node2.id);
          if (node2.className === "anchor") {
            return node2.labelOffsetY !== void 0 ? pos.y + node2.labelOffsetY : pos.y - 3;
          }
          let defaultOffset = -configValues.nodeLabelOffset;
          if (node2.sourceStrategy && node2.labelOffsetY === void 0) {
            defaultOffset -= 10;
          }
          const customOffset = node2.labelOffsetY ?? defaultOffset;
          return pos.y + customOffset;
        }).attr("class", "wardley-node-label").attr("fill", (node2) => {
          if (node2.className === "evolved") {
            return theme.evolutionStroke;
          }
          if (node2.className === "anchor") {
            return "#000";
          }
          return theme.componentLabelColor;
        }).attr("font-size", configValues.labelFontSize).attr("font-weight", (node2) => node2.className === "anchor" ? "bold" : "normal").attr("text-anchor", (node2) => node2.className === "anchor" ? "middle" : "start").attr("dominant-baseline", (node2) => node2.className === "anchor" ? "middle" : "auto").text((node2) => node2.label);
        if (data6.annotations.length > 0) {
          const annotationsGroup = root4.append("g").attr("class", "wardley-annotations");
          data6.annotations.forEach((annotation) => {
            const projectedCoords = annotation.coordinates.map((coord) => ({
              x: projectX(coord.x),
              y: projectY(coord.y)
            }));
            if (projectedCoords.length > 1) {
              for (let i2 = 0; i2 < projectedCoords.length - 1; i2++) {
                annotationsGroup.append("line").attr("class", "wardley-annotation-line").attr("x1", projectedCoords[i2].x).attr("y1", projectedCoords[i2].y).attr("x2", projectedCoords[i2 + 1].x).attr("y2", projectedCoords[i2 + 1].y).attr("stroke", theme.axisColor).attr("stroke-width", 1.5).attr("stroke-dasharray", "4 4");
              }
            }
            projectedCoords.forEach((coord) => {
              const annotationNode = annotationsGroup.append("g").attr("class", "wardley-annotation");
              annotationNode.append("circle").attr("cx", coord.x).attr("cy", coord.y).attr("r", 10).attr("fill", "white").attr("stroke", theme.axisColor).attr("stroke-width", 1.5);
              annotationNode.append("text").attr("x", coord.x).attr("y", coord.y).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", 10).attr("fill", theme.axisTextColor).attr("font-weight", "bold").text(annotation.number);
            });
          });
          if (data6.annotationsBox) {
            let boxX = projectX(data6.annotationsBox.x);
            let boxY = projectY(data6.annotationsBox.y);
            const padding = 10;
            const lineHeight = 16;
            const fontSize = 11;
            const textBoxGroup = annotationsGroup.append("g").attr("class", "wardley-annotations-box");
            const sortedAnnotations = [...data6.annotations].filter((a2) => a2.text).sort((a2, b3) => a2.number - b3.number);
            const textElements = [];
            sortedAnnotations.forEach((annotation, idx) => {
              const text5 = textBoxGroup.append("text").attr("x", boxX + padding).attr("y", boxY + padding + (idx + 1) * lineHeight).attr("font-size", fontSize).attr("fill", theme.axisTextColor).attr("text-anchor", "start").attr("dominant-baseline", "middle").text(`${annotation.number}. ${annotation.text}`);
              textElements.push(text5);
            });
            if (textElements.length > 0) {
              let maxWidth2 = 0;
              let maxHeight = 0;
              textElements.forEach((text5) => {
                const textNode = text5.node();
                const textWidth = textNode.getComputedTextLength();
                maxWidth2 = Math.max(maxWidth2, textWidth);
                const bbox = textNode.getBBox();
                maxHeight = Math.max(maxHeight, bbox.height);
              });
              const boxWidth = maxWidth2 + padding * 2 + 105;
              const boxHeight = sortedAnnotations.length * lineHeight + padding * 2 + maxHeight / 2;
              const minX = configValues.padding;
              const maxX = width3 - configValues.padding - boxWidth;
              const minY = configValues.padding;
              const maxY = height2 - configValues.padding - boxHeight;
              boxX = Math.max(minX, Math.min(boxX, maxX));
              boxY = Math.max(minY, Math.min(boxY, maxY));
              textElements.forEach((text5, idx) => {
                text5.attr("x", boxX + padding).attr("y", boxY + padding + (idx + 1) * lineHeight);
              });
              textBoxGroup.insert("rect", "text").attr("x", boxX).attr("y", boxY).attr("width", boxWidth).attr("height", boxHeight).attr("fill", "white").attr("stroke", theme.axisColor).attr("stroke-width", 1.5).attr("rx", 4).attr("ry", 4);
            }
          }
        }
        if (data6.notes.length > 0) {
          const notesGroup = root4.append("g").attr("class", "wardley-notes");
          data6.notes.forEach((note3) => {
            const noteX = projectX(note3.x);
            const noteY = projectY(note3.y);
            notesGroup.append("text").attr("x", noteX).attr("y", noteY).attr("text-anchor", "start").attr("font-size", 11).attr("fill", theme.axisTextColor).attr("font-weight", "bold").text(note3.text);
          });
        }
        if (data6.accelerators.length > 0) {
          const acceleratorsGroup = root4.append("g").attr("class", "wardley-accelerators");
          data6.accelerators.forEach((accelerator) => {
            const accX = projectX(accelerator.x);
            const accY = projectY(accelerator.y);
            const arrowWidth = 60;
            const arrowHeight = 30;
            const arrowHeadWidth = 20;
            const arrowPath = `
        M ${accX} ${accY - arrowHeight / 2}
        L ${accX + arrowWidth - arrowHeadWidth} ${accY - arrowHeight / 2}
        L ${accX + arrowWidth - arrowHeadWidth} ${accY - arrowHeight / 2 - 8}
        L ${accX + arrowWidth} ${accY}
        L ${accX + arrowWidth - arrowHeadWidth} ${accY + arrowHeight / 2 + 8}
        L ${accX + arrowWidth - arrowHeadWidth} ${accY + arrowHeight / 2}
        L ${accX} ${accY + arrowHeight / 2}
        Z
      `;
            acceleratorsGroup.append("path").attr("d", arrowPath).attr("fill", "white").attr("stroke", theme.componentStroke).attr("stroke-width", 1);
            acceleratorsGroup.append("text").attr("x", accX + arrowWidth / 2).attr("y", accY + arrowHeight / 2 + 15).attr("text-anchor", "middle").attr("font-size", 10).attr("fill", theme.axisTextColor).attr("font-weight", "bold").text(accelerator.name);
          });
        }
        if (data6.deaccelerators.length > 0) {
          const deacceleratorsGroup = root4.append("g").attr("class", "wardley-deaccelerators");
          data6.deaccelerators.forEach((deaccelerator) => {
            const decX = projectX(deaccelerator.x);
            const decY = projectY(deaccelerator.y);
            const arrowWidth = 60;
            const arrowHeight = 30;
            const arrowHeadWidth = 20;
            const arrowPath = `
        M ${decX + arrowWidth} ${decY - arrowHeight / 2}
        L ${decX + arrowHeadWidth} ${decY - arrowHeight / 2}
        L ${decX + arrowHeadWidth} ${decY - arrowHeight / 2 - 8}
        L ${decX} ${decY}
        L ${decX + arrowHeadWidth} ${decY + arrowHeight / 2 + 8}
        L ${decX + arrowHeadWidth} ${decY + arrowHeight / 2}
        L ${decX + arrowWidth} ${decY + arrowHeight / 2}
        Z
      `;
            deacceleratorsGroup.append("path").attr("d", arrowPath).attr("fill", "white").attr("stroke", theme.componentStroke).attr("stroke-width", 1);
            deacceleratorsGroup.append("text").attr("x", decX + arrowWidth / 2).attr("y", decY + arrowHeight / 2 + 15).attr("text-anchor", "middle").attr("font-size", 10).attr("fill", theme.axisTextColor).attr("font-weight", "bold").text(deaccelerator.name);
          });
        }
      }, "draw");
      wardleyRenderer_default = {
        draw: draw31
      };
    }
  });

  // src/diagrams/wardley/styles.ts
  var styles5;
  var init_styles24 = __esm({
    "src/diagrams/wardley/styles.ts"() {
      "use strict";
      init_utils2();
      init_theme_default();
      init_config();
      styles5 = /* @__PURE__ */ __name(({
        wardley
      } = {}) => {
        const defaultThemeVariables2 = getThemeVariables3();
        const currentConfig2 = getConfig();
        const themeVariables = cleanAndMerge(defaultThemeVariables2, currentConfig2.themeVariables);
        const w4 = cleanAndMerge(themeVariables.wardley, wardley);
        return `
  .wardley-background {
    fill: ${w4.backgroundColor};
  }
  .wardley-axes line, .wardley-axes path {
    stroke: ${w4.axisColor};
  }
  .wardley-axis-label {
    fill: ${w4.axisTextColor};
  }
  .wardley-stage-label {
    fill: ${w4.axisTextColor};
  }
  .wardley-grid line {
    stroke: ${w4.gridColor};
  }
  .wardley-node circle {
    fill: ${w4.componentFill};
    stroke: ${w4.componentStroke};
  }
  .wardley-node-label {
    fill: ${w4.componentLabelColor};
  }
  .wardley-link {
    stroke: ${w4.linkStroke};
  }
  .wardley-link--dashed {
    stroke-dasharray: 4 4;
  }
  .wardley-link-label {
    fill: ${w4.axisTextColor};
  }
  .wardley-trend line {
    stroke: ${w4.evolutionStroke};
  }
  .wardley-annotation-line {
    stroke: ${w4.annotationStroke};
  }
  .wardley-annotation circle {
    fill: ${w4.annotationFill};
    stroke: ${w4.annotationStroke};
  }
  .wardley-annotation text {
    fill: ${w4.annotationTextColor};
  }
  .wardley-annotations-box rect {
    fill: ${w4.annotationFill};
    stroke: ${w4.annotationStroke};
  }
  .wardley-annotations-box text {
    fill: ${w4.annotationTextColor};
  }
  .wardley-pipeline-box {
    stroke: ${w4.componentStroke};
  }
  .wardley-notes text {
    fill: ${w4.axisTextColor};
  }
  `;
      }, "styles");
    }
  });

  // src/diagrams/wardley/wardleyDiagram.ts
  var wardleyDiagram_exports = {};
  __export(wardleyDiagram_exports, {
    diagram: () => diagram32
  });
  var diagram32;
  var init_wardleyDiagram = __esm({
    "src/diagrams/wardley/wardleyDiagram.ts"() {
      "use strict";
      init_wardleyParser();
      init_wardleyDb();
      init_wardleyRenderer();
      init_styles24();
      diagram32 = {
        parser: parser28,
        db: wardleyDb_default,
        renderer: wardleyRenderer_default,
        styles: styles5
      };
    }
  });

  // src/diagrams/cynefin/cynefinDb.ts
  var createDefaultData, data5, getDomains, getTransitions, setDomains, setTransitions, getConfig10, clear22, db10;
  var init_cynefinDb = __esm({
    "src/diagrams/cynefin/cynefinDb.ts"() {
      "use strict";
      init_config();
      init_defaultConfig();
      init_logger();
      init_utils2();
      init_commonDb();
      createDefaultData = /* @__PURE__ */ __name(() => ({
        domains: /* @__PURE__ */ new Map(),
        transitions: []
      }), "createDefaultData");
      data5 = createDefaultData();
      getDomains = /* @__PURE__ */ __name(() => data5.domains, "getDomains");
      getTransitions = /* @__PURE__ */ __name(() => data5.transitions, "getTransitions");
      setDomains = /* @__PURE__ */ __name((blocks2) => {
        if (!blocks2) {
          return;
        }
        for (const block2 of blocks2) {
          const domainName = block2.domain;
          const items = (block2.items ?? []).map((item) => ({
            label: item.label
          }));
          data5.domains.set(domainName, {
            name: domainName,
            items
          });
        }
      }, "setDomains");
      setTransitions = /* @__PURE__ */ __name((transitions) => {
        if (!transitions) {
          return;
        }
        data5.transitions = transitions.filter((t4) => {
          if (t4.from === t4.to) {
            log.warn(
              `Cynefin: self-loop transition on domain "${t4.from}" is not meaningful and will be skipped.`
            );
            return false;
          }
          return true;
        }).map((t4) => ({
          from: t4.from,
          to: t4.to,
          label: t4.label || void 0
        }));
      }, "setTransitions");
      getConfig10 = /* @__PURE__ */ __name(() => {
        return cleanAndMerge({
          ...defaultConfig_default.cynefin,
          ...getConfig().cynefin
        });
      }, "getConfig");
      clear22 = /* @__PURE__ */ __name(() => {
        clear();
        data5 = createDefaultData();
      }, "clear");
      db10 = {
        getDomains,
        getTransitions,
        setDomains,
        setTransitions,
        getConfig: getConfig10,
        clear: clear22,
        setAccTitle,
        getAccTitle,
        setDiagramTitle,
        getDiagramTitle,
        getAccDescription,
        setAccDescription
      };
    }
  });

  // src/diagrams/cynefin/cynefinParser.ts
  var populate20, parser29;
  var init_cynefinParser = __esm({
    "src/diagrams/cynefin/cynefinParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_cynefinDb();
      populate20 = /* @__PURE__ */ __name((ast) => {
        populateCommonDb(ast, db10);
        db10.setDomains(ast.domains);
        db10.setTransitions(ast.transitions);
      }, "populate");
      parser29 = {
        parse: /* @__PURE__ */ __name(async (input) => {
          const ast = await parse3("cynefin", input);
          log.debug(ast);
          populate20(ast);
        }, "parse")
      };
    }
  });

  // src/diagrams/cynefin/cynefinBoundaries.ts
  function seededRandom(seed) {
    let t4 = seed + 1831565813 | 0;
    t4 = Math.imul(t4 ^ t4 >>> 15, t4 | 1);
    t4 ^= t4 + Math.imul(t4 ^ t4 >>> 7, t4 | 61);
    return ((t4 ^ t4 >>> 14) >>> 0) / 4294967296;
  }
  function hashString4(str2) {
    let hash = 0;
    for (let i2 = 0; i2 < str2.length; i2++) {
      const ch = str2.charCodeAt(i2);
      hash = (hash << 5) - hash + ch;
      hash |= 0;
    }
    return hash;
  }
  function resolveSeed(configuredSeed, id41) {
    if (typeof configuredSeed === "number" && Number.isFinite(configuredSeed) && configuredSeed !== 0) {
      return configuredSeed;
    }
    return hashString4(id41);
  }
  function generateFoldPath(width3, height2, seed, amplitudeOverride) {
    const cx = width3 / 2;
    const amplitude = amplitudeOverride ?? width3 * 0.015;
    const segments = 7;
    const segHeight = height2 / segments;
    const points = [];
    for (let i2 = 0; i2 <= segments; i2++) {
      const jitter = seededRandom(seed + i2 * 17) * amplitude * 2 - amplitude;
      points.push({ x: cx + jitter, y: i2 * segHeight });
    }
    let d3 = `M${points[0].x},${points[0].y}`;
    for (let i2 = 0; i2 < points.length - 1; i2++) {
      const p0 = points[i2];
      const p1 = points[i2 + 1];
      const midY = (p0.y + p1.y) / 2;
      const dir2 = i2 % 2 === 0 ? 1 : -1;
      const offset = amplitude * 1.5 * dir2 * seededRandom(seed + i2 * 31 + 7);
      const cp1x = p0.x + offset;
      const cp1y = midY;
      const cp2x = p1.x - offset;
      const cp2y = midY;
      d3 += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p1.x},${p1.y}`;
    }
    return d3;
  }
  function generateHorizontalBoundary(width3, height2, seed, amplitudeOverride) {
    const cy = height2 / 2;
    const amplitude = amplitudeOverride ?? height2 * 0.015;
    const segments = 7;
    const segWidth = width3 / segments;
    const points = [];
    for (let i2 = 0; i2 <= segments; i2++) {
      const jitter = seededRandom(seed + i2 * 23) * amplitude * 2 - amplitude;
      points.push({ x: i2 * segWidth, y: cy + jitter });
    }
    let d3 = `M${points[0].x},${points[0].y}`;
    for (let i2 = 0; i2 < points.length - 1; i2++) {
      const p0 = points[i2];
      const p1 = points[i2 + 1];
      const midX = (p0.x + p1.x) / 2;
      const dir2 = i2 % 2 === 0 ? 1 : -1;
      const offset = amplitude * 1.5 * dir2 * seededRandom(seed + i2 * 37 + 11);
      const cp1x = midX;
      const cp1y = p0.y + offset;
      const cp2x = midX;
      const cp2y = p1.y - offset;
      d3 += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p1.x},${p1.y}`;
    }
    return d3;
  }
  function generateCliffPath(width3, height2) {
    const cx = width3 / 2;
    const topY = height2 * 0.5;
    const bottomY = height2;
    const amplitude = width3 * 0.03;
    return [
      `M${cx},${topY}`,
      `C${cx + amplitude},${topY + (bottomY - topY) * 0.2}`,
      `${cx - amplitude * 1.5},${topY + (bottomY - topY) * 0.55}`,
      `${cx + amplitude * 0.5},${topY + (bottomY - topY) * 0.75}`,
      `C${cx - amplitude},${topY + (bottomY - topY) * 0.85}`,
      `${cx + amplitude * 0.3},${topY + (bottomY - topY) * 0.95}`,
      `${cx},${bottomY}`
    ].join(" ");
  }
  function generateConfusionPath(cx, cy, rx, ry) {
    return [
      `M${cx - rx},${cy}`,
      `A${rx},${ry} 0 1,1 ${cx + rx},${cy}`,
      `A${rx},${ry} 0 1,1 ${cx - rx},${cy}`,
      "Z"
    ].join(" ");
  }
  var init_cynefinBoundaries = __esm({
    "src/diagrams/cynefin/cynefinBoundaries.ts"() {
      "use strict";
      __name(seededRandom, "seededRandom");
      __name(hashString4, "hashString");
      __name(resolveSeed, "resolveSeed");
      __name(generateFoldPath, "generateFoldPath");
      __name(generateHorizontalBoundary, "generateHorizontalBoundary");
      __name(generateCliffPath, "generateCliffPath");
      __name(generateConfusionPath, "generateConfusionPath");
    }
  });

  // src/diagrams/cynefin/cynefinRenderer.ts
  var DOMAIN_META, getDomainLayouts, getCynefinDomainColors, MAX_CONFUSION_ITEMS, draw32, renderer13;
  var init_cynefinRenderer = __esm({
    "src/diagrams/cynefin/cynefinRenderer.ts"() {
      "use strict";
      init_selectSvgElement();
      init_setupGraphViewbox();
      init_logger();
      init_config();
      init_theme_default();
      init_utils2();
      init_cynefinBoundaries();
      DOMAIN_META = {
        complex: { model: "Probe \u2192 Sense \u2192 Respond", practice: "Emergent Practices" },
        complicated: { model: "Sense \u2192 Analyse \u2192 Respond", practice: "Good Practices" },
        clear: { model: "Sense \u2192 Categorise \u2192 Respond", practice: "Best Practices" },
        chaotic: { model: "Act \u2192 Sense \u2192 Respond", practice: "Novel Practices" },
        confusion: { model: "", practice: "Disorder" }
      };
      getDomainLayouts = /* @__PURE__ */ __name((width3, height2) => {
        const hw = width3 / 2;
        const hh = height2 / 2;
        return {
          complex: { cx: hw / 2, cy: hh / 2, x: 0, y: 0, w: hw, h: hh },
          complicated: { cx: hw + hw / 2, cy: hh / 2, x: hw, y: 0, w: hw, h: hh },
          chaotic: { cx: hw / 2, cy: hh + hh / 2, x: 0, y: hh, w: hw, h: hh },
          clear: { cx: hw + hw / 2, cy: hh + hh / 2, x: hw, y: hh, w: hw, h: hh },
          confusion: { cx: hw, cy: hh, x: hw * 0.7, y: hh * 0.7, w: hw * 0.6, h: hh * 0.6 }
        };
      }, "getDomainLayouts");
      getCynefinDomainColors = /* @__PURE__ */ __name(() => {
        const defaultThemeVariables2 = getThemeVariables3();
        const currentConfig2 = getConfig();
        const themeVariables = cleanAndMerge(defaultThemeVariables2, currentConfig2.themeVariables);
        return themeVariables.cynefin;
      }, "getCynefinDomainColors");
      MAX_CONFUSION_ITEMS = 3;
      draw32 = /* @__PURE__ */ __name((_text, id41, _version, diagram38) => {
        const db12 = diagram38.db;
        const domains = db12.getDomains();
        const transitions = db12.getTransitions();
        const title2 = db12.getDiagramTitle();
        const accTitle3 = db12.getAccTitle();
        const accDescription3 = db12.getAccDescription();
        const config3 = db12.getConfig();
        const domainColors = getCynefinDomainColors();
        log.debug("Rendering Cynefin diagram");
        const width3 = config3.width;
        const height2 = config3.height;
        const padding = config3.padding;
        const showDomainDescriptions = config3.showDomainDescriptions;
        const boundaryAmplitude = config3.boundaryAmplitude;
        const totalWidth = width3 + padding * 2;
        const totalHeight = height2 + padding * 2;
        const domainBg = {
          complex: domainColors.complexBg,
          complicated: domainColors.complicatedBg,
          clear: domainColors.clearBg,
          chaotic: domainColors.chaoticBg,
          confusion: domainColors.confusionBg
        };
        const svg2 = selectSvgElement(id41);
        configureSvgSize(svg2, totalHeight, totalWidth, config3.useMaxWidth ?? true);
        svg2.attr("viewBox", `0 0 ${totalWidth} ${totalHeight}`);
        if (accTitle3) {
          svg2.append("title").text(accTitle3);
        }
        if (accDescription3) {
          svg2.append("desc").text(accDescription3);
        }
        const root4 = svg2.append("g").attr("transform", `translate(${padding}, ${padding})`);
        const layouts = getDomainLayouts(width3, height2);
        const seed = resolveSeed(config3.seed, id41);
        const bgGroup = root4.append("g").attr("class", "cynefin-backgrounds");
        const quadrantDomains = ["complex", "complicated", "chaotic", "clear"];
        for (const domainName of quadrantDomains) {
          const layout7 = layouts[domainName];
          bgGroup.append("rect").attr("class", "cynefinDomain").attr("x", layout7.x).attr("y", layout7.y).attr("width", layout7.w).attr("height", layout7.h).attr("fill", domainBg[domainName]).attr("fill-opacity", 0.4).attr("stroke", "none");
        }
        const boundaryGroup = root4.append("g").attr("class", "cynefin-boundaries");
        boundaryGroup.append("path").attr("class", "cynefinBoundary").attr("d", generateFoldPath(width3, height2, seed, boundaryAmplitude)).attr("fill", "none");
        boundaryGroup.append("path").attr("class", "cynefinBoundary").attr("d", generateHorizontalBoundary(width3, height2, seed + 100, boundaryAmplitude)).attr("fill", "none");
        boundaryGroup.append("path").attr("class", "cynefinCliff").attr("d", generateCliffPath(width3, height2)).attr("fill", "none");
        const confusionRx = width3 * 0.15;
        const confusionRy = height2 * 0.15;
        root4.append("path").attr("class", "cynefinConfusion").attr("d", generateConfusionPath(width3 / 2, height2 / 2, confusionRx, confusionRy)).attr("fill", domainBg.confusion).attr("fill-opacity", 0.5);
        const labelGroup = root4.append("g").attr("class", "cynefin-labels");
        for (const domainName of quadrantDomains) {
          const layout7 = layouts[domainName];
          labelGroup.append("text").attr("class", "cynefinDomainLabel").attr("x", layout7.cx).attr("y", showDomainDescriptions ? layout7.cy - 30 : layout7.cy).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(domainName.charAt(0).toUpperCase() + domainName.slice(1));
        }
        labelGroup.append("text").attr("class", "cynefinDomainLabel").attr("x", width3 / 2).attr("y", showDomainDescriptions ? height2 / 2 - 10 : height2 / 2).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text("Confusion");
        if (showDomainDescriptions) {
          const subtitleGroup = root4.append("g").attr("class", "cynefin-subtitles");
          for (const domainName of quadrantDomains) {
            const layout7 = layouts[domainName];
            const meta3 = DOMAIN_META[domainName];
            subtitleGroup.append("text").attr("class", "cynefinSubtitle").attr("x", layout7.cx).attr("y", layout7.cy - 10).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(meta3.model);
            subtitleGroup.append("text").attr("class", "cynefinSubtitle").attr("x", layout7.cx).attr("y", layout7.cy + 5).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(meta3.practice);
          }
          subtitleGroup.append("text").attr("class", "cynefinSubtitle").attr("x", width3 / 2).attr("y", height2 / 2 + 8).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(DOMAIN_META.confusion.practice);
        }
        const itemGroup = root4.append("g").attr("class", "cynefin-items");
        const itemHeight = 26;
        const itemPaddingX = 10;
        const allDomains = ["complex", "complicated", "chaotic", "clear", "confusion"];
        for (const domainName of allDomains) {
          const domain = domains.get(domainName);
          if (!domain || domain.items.length === 0) {
            continue;
          }
          const layout7 = layouts[domainName];
          const isConfusion = domainName === "confusion";
          let itemsToRender = domain.items;
          let overflowCount = 0;
          if (isConfusion && domain.items.length > MAX_CONFUSION_ITEMS) {
            overflowCount = domain.items.length - MAX_CONFUSION_ITEMS;
            itemsToRender = domain.items.slice(0, MAX_CONFUSION_ITEMS);
          }
          let startY2;
          if (isConfusion) {
            const labelOffset = showDomainDescriptions ? 22 : 14;
            startY2 = layout7.cy + labelOffset;
          } else {
            startY2 = layout7.cy + (showDomainDescriptions ? 25 : 15);
          }
          [...itemsToRender].forEach((item, idx) => {
            const itemY = startY2 + idx * (itemHeight + 4);
            const g2 = itemGroup.append("g");
            const textEl = g2.append("text").attr("class", "cynefinItemText").attr("x", 0).attr("y", itemHeight / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").text(item.label);
            let measuredWidth = item.label.length * 7;
            const textNode = textEl.node();
            if (textNode && typeof textNode.getBBox === "function") {
              const bbox = textNode.getBBox();
              if (bbox.width > 0) {
                measuredWidth = bbox.width;
              }
            }
            const badgeWidth = measuredWidth + itemPaddingX * 2;
            const itemX = layout7.cx - badgeWidth / 2;
            g2.attr("transform", `translate(${itemX}, ${itemY})`);
            g2.insert("rect", "text").attr("class", "cynefinItem").attr("x", 0).attr("y", 0).attr("width", badgeWidth).attr("height", itemHeight).attr("rx", 4).attr("ry", 4).attr("fill", domainBg[domainName]).attr("fill-opacity", 0.95);
            textEl.attr("x", badgeWidth / 2).attr("y", itemHeight / 2);
          });
          if (overflowCount > 0) {
            const overflowY = startY2 + itemsToRender.length * (itemHeight + 4);
            const overflowLabel = `+${overflowCount} more`;
            const g2 = itemGroup.append("g");
            const textEl = g2.append("text").attr("class", "cynefinItemText").attr("x", 0).attr("y", itemHeight / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").text(overflowLabel);
            let measuredWidth = overflowLabel.length * 7;
            const textNode = textEl.node();
            if (textNode && typeof textNode.getBBox === "function") {
              const bbox = textNode.getBBox();
              if (bbox.width > 0) {
                measuredWidth = bbox.width;
              }
            }
            const badgeWidth = measuredWidth + itemPaddingX * 2;
            const itemX = layout7.cx - badgeWidth / 2;
            g2.attr("transform", `translate(${itemX}, ${overflowY})`);
            g2.insert("rect", "text").attr("class", "cynefinItemOverflow").attr("x", 0).attr("y", 0).attr("width", badgeWidth).attr("height", itemHeight).attr("rx", 4).attr("ry", 4).attr("fill", domainBg[domainName]).attr("fill-opacity", 0.6);
            textEl.attr("x", badgeWidth / 2).attr("y", itemHeight / 2);
          }
        }
        if (transitions.length > 0) {
          const defs2 = svg2.select("defs").empty() ? svg2.append("defs") : svg2.select("defs");
          const markerId = `cynefin-arrow-${id41}`;
          defs2.append("marker").attr("id", markerId).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerWidth", 6).attr("markerHeight", 6).attr("orient", "auto-start-reverse").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "cynefinArrowHead");
          const arrowGroup = root4.append("g").attr("class", "cynefin-arrows");
          transitions.forEach((transition2) => {
            const fromLayout = layouts[transition2.from];
            const toLayout = layouts[transition2.to];
            if (!fromLayout || !toLayout) {
              return;
            }
            if (transition2.from === transition2.to) {
              log.warn(`Cynefin renderer: skipping self-loop on domain "${transition2.from}"`);
              return;
            }
            const x1 = fromLayout.cx;
            const y1 = fromLayout.cy;
            const x22 = toLayout.cx;
            const y22 = toLayout.cy;
            const mx = (x1 + x22) / 2;
            const my = (y1 + y22) / 2;
            const dx = x22 - x1;
            const dy = y22 - y1;
            const len = Math.sqrt(dx * dx + dy * dy);
            const offsetAmount = len * 0.15;
            const nx = -dy / len;
            const ny = dx / len;
            const cpx = mx + nx * offsetAmount;
            const cpy = my + ny * offsetAmount;
            arrowGroup.append("path").attr("class", "cynefinArrowLine").attr("d", `M${x1},${y1} Q${cpx},${cpy} ${x22},${y22}`).attr("fill", "none").attr("marker-end", `url(#${markerId})`);
            if (transition2.label) {
              arrowGroup.append("text").attr("class", "cynefinArrowLabel").attr("x", cpx).attr("y", cpy - 6).attr("text-anchor", "middle").attr("dominant-baseline", "auto").text(transition2.label);
            }
          });
        }
        if (title2) {
          root4.append("text").attr("class", "cynefinTitle").attr("x", width3 / 2).attr("y", -padding / 2).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(title2);
        }
      }, "draw");
      renderer13 = { draw: draw32 };
    }
  });

  // src/diagrams/cynefin/styles.ts
  var getCynefinTheme, styles6, styles_default22;
  var init_styles25 = __esm({
    "src/diagrams/cynefin/styles.ts"() {
      "use strict";
      init_utils2();
      init_theme_default();
      init_config();
      getCynefinTheme = /* @__PURE__ */ __name(() => {
        const defaultThemeVariables2 = getThemeVariables3();
        const currentConfig2 = getConfig();
        const themeVariables = cleanAndMerge(defaultThemeVariables2, currentConfig2.themeVariables);
        return themeVariables.cynefin;
      }, "getCynefinTheme");
      styles6 = /* @__PURE__ */ __name(() => {
        const t4 = getCynefinTheme();
        return `
	.cynefinDomain {
		stroke: none;
	}
	.cynefinDomainLabel {
		font-size: ${t4.domainFontSize}px;
		font-weight: bold;
		fill: ${t4.labelColor};
	}
	.cynefinSubtitle {
		font-size: ${t4.itemFontSize - 1}px;
		fill: ${t4.textColor};
		font-style: italic;
	}
	.cynefinItem {
		fill-opacity: 0.95;
		stroke: ${t4.boundaryColor};
		stroke-width: 1;
	}
	.cynefinItemText {
		font-size: ${t4.itemFontSize}px;
		fill: ${t4.textColor};
	}
	.cynefinItemOverflow {
		fill-opacity: 0.6;
		stroke: ${t4.boundaryColor};
		stroke-width: 1;
		stroke-dasharray: 3 2;
	}
	.cynefinBoundary {
		stroke: ${t4.boundaryColor};
		stroke-width: ${t4.boundaryWidth};
		stroke-dasharray: 6 3;
	}
	.cynefinCliff {
		stroke: ${t4.cliffColor};
		stroke-width: ${t4.cliffWidth};
	}
	.cynefinConfusion {
		stroke: ${t4.boundaryColor};
		stroke-width: 1.5;
		stroke-dasharray: 4 2;
	}
	.cynefinArrowLine {
		stroke: ${t4.arrowColor};
		stroke-width: ${t4.arrowWidth};
		fill: none;
	}
	.cynefinArrowHead {
		fill: ${t4.arrowColor};
		stroke: none;
	}
	.cynefinArrowLabel {
		font-size: ${t4.itemFontSize - 1}px;
		fill: ${t4.textColor};
	}
	.cynefinTitle {
		font-size: ${t4.domainFontSize + 2}px;
		font-weight: bold;
		fill: ${t4.labelColor};
	}
	`;
      }, "styles");
      styles_default22 = styles6;
    }
  });

  // src/diagrams/cynefin/cynefinDiagram.ts
  var cynefinDiagram_exports = {};
  __export(cynefinDiagram_exports, {
    diagram: () => diagram33
  });
  var diagram33;
  var init_cynefinDiagram = __esm({
    "src/diagrams/cynefin/cynefinDiagram.ts"() {
      "use strict";
      init_cynefinParser();
      init_cynefinDb();
      init_cynefinRenderer();
      init_styles25();
      diagram33 = {
        parser: parser29,
        db: db10,
        renderer: renderer13,
        styles: styles_default22
      };
    }
  });

  // src/diagrams/railroad/railroadDb.ts
  var diagramTitle2, accTitle2, accDescription2, rules, ruleMap, sanitizeText6, sanitizeAstNode, clear23, setTitle2, getTitle2, addRule, getRules, getRule2, setAccTitle2, getAccTitle2, setAccDescription2, getAccDescription2, setDiagramTitle2, getDiagramTitle2, db11;
  var init_railroadDb = __esm({
    "src/diagrams/railroad/railroadDb.ts"() {
      "use strict";
      init_diagramAPI();
      init_logger();
      init_commonDb();
      init_common();
      diagramTitle2 = "";
      accTitle2 = "";
      accDescription2 = "";
      rules = [];
      ruleMap = /* @__PURE__ */ new Map();
      sanitizeText6 = /* @__PURE__ */ __name((text4) => {
        return sanitizeText(text4, getConfig2());
      }, "sanitizeText");
      sanitizeAstNode = /* @__PURE__ */ __name((node2) => {
        switch (node2.type) {
          case "terminal":
            return { ...node2, value: sanitizeText6(node2.value) };
          case "nonterminal":
            return { ...node2, name: sanitizeText6(node2.name) };
          case "sequence":
            return { ...node2, elements: node2.elements.map(sanitizeAstNode) };
          case "choice":
            return { ...node2, alternatives: node2.alternatives.map(sanitizeAstNode) };
          case "optional":
            return { ...node2, element: sanitizeAstNode(node2.element) };
          case "repetition":
            return {
              ...node2,
              element: sanitizeAstNode(node2.element),
              separator: node2.separator ? sanitizeAstNode(node2.separator) : void 0
            };
          case "special":
            return { ...node2, text: sanitizeText6(node2.text) };
        }
      }, "sanitizeAstNode");
      clear23 = /* @__PURE__ */ __name(() => {
        diagramTitle2 = "";
        accTitle2 = "";
        accDescription2 = "";
        rules.length = 0;
        ruleMap.clear();
        clear();
        log.debug("[Railroad] Database cleared");
      }, "clear");
      setTitle2 = /* @__PURE__ */ __name((text4) => {
        diagramTitle2 = sanitizeText6(text4);
        log.debug("[Railroad] Title set:", text4);
      }, "setTitle");
      getTitle2 = /* @__PURE__ */ __name(() => {
        return diagramTitle2;
      }, "getTitle");
      addRule = /* @__PURE__ */ __name((rule) => {
        const sanitizedRule = {
          ...rule,
          name: sanitizeText6(rule.name),
          definition: sanitizeAstNode(rule.definition),
          comment: rule.comment ? sanitizeText6(rule.comment) : void 0
        };
        log.debug("[Railroad] Adding rule:", sanitizedRule.name);
        if (ruleMap.has(sanitizedRule.name)) {
          log.warn(`[Railroad] Rule '${sanitizedRule.name}' is already defined. Overwriting.`);
        }
        rules.push(sanitizedRule);
        ruleMap.set(sanitizedRule.name, sanitizedRule);
      }, "addRule");
      getRules = /* @__PURE__ */ __name(() => {
        return rules;
      }, "getRules");
      getRule2 = /* @__PURE__ */ __name((name) => {
        return ruleMap.get(name);
      }, "getRule");
      setAccTitle2 = /* @__PURE__ */ __name((text4) => {
        accTitle2 = sanitizeText6(text4).replace(/^\s+/g, "");
        log.debug("[Railroad] Accessibility title set:", text4);
      }, "setAccTitle");
      getAccTitle2 = /* @__PURE__ */ __name(() => {
        return accTitle2;
      }, "getAccTitle");
      setAccDescription2 = /* @__PURE__ */ __name((text4) => {
        accDescription2 = sanitizeText6(text4).replace(/\n\s+/g, "\n");
        log.debug("[Railroad] Accessibility description set:", text4);
      }, "setAccDescription");
      getAccDescription2 = /* @__PURE__ */ __name(() => {
        return accDescription2;
      }, "getAccDescription");
      setDiagramTitle2 = setTitle2;
      getDiagramTitle2 = getTitle2;
      db11 = {
        clear: clear23,
        setTitle: setTitle2,
        getTitle: getTitle2,
        addRule,
        getRules,
        getRule: getRule2,
        setAccTitle: setAccTitle2,
        getAccTitle: getAccTitle2,
        setAccDescription: setAccDescription2,
        getAccDescription: getAccDescription2,
        setDiagramTitle: setDiagramTitle2,
        getDiagramTitle: getDiagramTitle2
      };
    }
  });

  // src/diagrams/railroad/parser/railroadParser.ts
  var langiumParser, transformExpression, transformRule, populateDb4, parser30;
  var init_railroadParser = __esm({
    "src/diagrams/railroad/parser/railroadParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_railroadDb();
      langiumParser = createRailroadServices().Railroad.parser.LangiumParser;
      transformExpression = /* @__PURE__ */ __name((expr) => {
        switch (expr.$type) {
          case "RailroadTerminalExpr":
            return {
              type: "terminal",
              value: expr.value
            };
          case "RailroadNonTerminalExpr":
            return {
              type: "nonterminal",
              name: expr.name
            };
          case "RailroadSpecialExpr":
            return {
              type: "special",
              text: expr.text
            };
          case "RailroadSequenceExpr": {
            const elements2 = expr.elements.map(transformExpression);
            return elements2.length === 1 ? elements2[0] : { type: "sequence", elements: elements2 };
          }
          case "RailroadChoiceExpr": {
            const alternatives = expr.alternatives.map(transformExpression);
            return alternatives.length === 1 ? alternatives[0] : { type: "choice", alternatives };
          }
          case "RailroadOptionalExpr":
            return {
              type: "optional",
              element: transformExpression(expr.element)
            };
          case "RailroadOneOrMoreExpr":
            return {
              type: "repetition",
              element: transformExpression(expr.element),
              min: 1,
              max: Infinity
            };
          case "RailroadZeroOrMoreExpr":
            return {
              type: "repetition",
              element: transformExpression(expr.element),
              min: 0,
              max: Infinity
            };
          default:
            throw new Error(`Unsupported railroad expression: ${expr.$type}`);
        }
      }, "transformExpression");
      transformRule = /* @__PURE__ */ __name((rule) => {
        return {
          name: rule.name,
          definition: transformExpression(rule.definition)
        };
      }, "transformRule");
      populateDb4 = /* @__PURE__ */ __name((ast) => {
        populateCommonDb(ast, db11);
        if (ast.title) {
          db11.setTitle(ast.title);
        }
        ast.rules.map((rule) => db11.addRule(transformRule(rule)));
      }, "populateDb");
      parser30 = {
        parse: /* @__PURE__ */ __name((input) => {
          db11.clear();
          log.debug("[Railroad Parser] Starting Langium parse");
          const result = langiumParser.parse(input);
          if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {
            throw new MermaidParseError(result);
          }
          const ast = result.value;
          log.debug("[Railroad Parser] Parsed rules:", ast.rules.length);
          populateDb4(ast);
          log.debug("[Railroad Parser] Parse complete");
        }, "parse"),
        parser: {
          yy: db11
        }
      };
    }
  });

  // src/diagrams/railroad/railroadTypes.ts
  var DEFAULT_RAILROAD_CONFIG;
  var init_railroadTypes = __esm({
    "src/diagrams/railroad/railroadTypes.ts"() {
      "use strict";
      DEFAULT_RAILROAD_CONFIG = {
        // Layout
        compactMode: false,
        // Spacing
        padding: 10,
        verticalSeparation: 8,
        horizontalSeparation: 10,
        arcRadius: 10,
        // Typography
        fontSize: 14,
        fontFamily: "monospace",
        // Colors - Terminal
        terminalFill: "#FFFFC0",
        terminalStroke: "#000000",
        terminalTextColor: "#000000",
        // Colors - Non-terminal
        nonTerminalFill: "#FFFFFF",
        nonTerminalStroke: "#000000",
        nonTerminalTextColor: "#000000",
        // Colors - Lines
        lineColor: "#000000",
        strokeWidth: 2,
        // Colors - Markers
        markerFill: "#000000",
        // Colors - Comment
        commentFill: "#E8E8E8",
        commentStroke: "#888888",
        commentTextColor: "#666666",
        // Colors - Special
        specialFill: "#F0E0FF",
        specialStroke: "#8800CC",
        // Other
        ruleNameColor: "#000066",
        showMarkers: true,
        markerRadius: 5
      };
    }
  });

  // src/diagrams/railroad/styles.ts
  var COLOR_VALUE_PATTERN, FONT_FAMILY_PATTERN, RAILROAD_STYLE_OPTION_KEYS, isRailroadStyleOptions, extractRailroadOverrides, extractThemeOverrides, sanitizeColorValue, sanitizeFontFamilyValue, sanitizeNumberValue, parseThemeFontSize, buildThemeDefaults, buildRailroadStyleOptions, getStyles24;
  var init_styles26 = __esm({
    "src/diagrams/railroad/styles.ts"() {
      "use strict";
      init_config();
      init_theme_default();
      init_railroadTypes();
      COLOR_VALUE_PATTERN = /^#(?:[\da-f]{3,4}|[\da-f]{6}|[\da-f]{8})$|^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch)\([\d\s%+,./-]+\)$|^[a-z]+$/i;
      FONT_FAMILY_PATTERN = /^[\w "',.-]+$/;
      RAILROAD_STYLE_OPTION_KEYS = /* @__PURE__ */ new Set([
        "compactMode",
        "padding",
        "verticalSeparation",
        "horizontalSeparation",
        "arcRadius",
        "fontSize",
        "fontFamily",
        "terminalFill",
        "terminalStroke",
        "terminalTextColor",
        "nonTerminalFill",
        "nonTerminalStroke",
        "nonTerminalTextColor",
        "lineColor",
        "strokeWidth",
        "markerFill",
        "commentFill",
        "commentStroke",
        "commentTextColor",
        "specialFill",
        "specialStroke",
        "ruleNameColor",
        "showMarkers",
        "markerRadius"
      ]);
      isRailroadStyleOptions = /* @__PURE__ */ __name((options2) => {
        if (!options2) {
          return false;
        }
        return Object.keys(options2).every(
          (key) => key === "railroad" || RAILROAD_STYLE_OPTION_KEYS.has(key)
        );
      }, "isRailroadStyleOptions");
      extractRailroadOverrides = /* @__PURE__ */ __name((options2) => {
        if (!options2) {
          return {};
        }
        if ("railroad" in options2 && options2.railroad) {
          return options2.railroad;
        }
        return isRailroadStyleOptions(options2) ? options2 : {};
      }, "extractRailroadOverrides");
      extractThemeOverrides = /* @__PURE__ */ __name((options2) => {
        if (!options2 || isRailroadStyleOptions(options2)) {
          return {};
        }
        const {
          railroad: _railroad,
          svgId: _svgId,
          theme: _theme,
          look: _look,
          ...themeOverrides
        } = options2;
        return themeOverrides;
      }, "extractThemeOverrides");
      sanitizeColorValue = /* @__PURE__ */ __name((value2, fallback) => {
        if (typeof value2 !== "string") {
          return fallback;
        }
        const normalized = value2.trim();
        return COLOR_VALUE_PATTERN.test(normalized) ? normalized : fallback;
      }, "sanitizeColorValue");
      sanitizeFontFamilyValue = /* @__PURE__ */ __name((value2, fallback) => {
        if (typeof value2 !== "string") {
          return fallback;
        }
        const normalized = value2.trim();
        return FONT_FAMILY_PATTERN.test(normalized) ? normalized : fallback;
      }, "sanitizeFontFamilyValue");
      sanitizeNumberValue = /* @__PURE__ */ __name((value2, fallback) => {
        const parsed = typeof value2 === "number" ? value2 : typeof value2 === "string" ? Number.parseFloat(value2) : Number.NaN;
        return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallback;
      }, "sanitizeNumberValue");
      parseThemeFontSize = /* @__PURE__ */ __name((value2) => {
        const parsed = typeof value2 === "number" ? value2 : typeof value2 === "string" ? Number.parseFloat(value2) : Number.NaN;
        return Number.isFinite(parsed) && parsed > 0 ? parsed : void 0;
      }, "parseThemeFontSize");
      buildThemeDefaults = /* @__PURE__ */ __name((themeVariables) => {
        const fontFamily = sanitizeFontFamilyValue(
          themeVariables.fontFamily,
          DEFAULT_RAILROAD_CONFIG.fontFamily
        );
        const fontSize = parseThemeFontSize(themeVariables.fontSize) ?? DEFAULT_RAILROAD_CONFIG.fontSize;
        return {
          ...DEFAULT_RAILROAD_CONFIG,
          fontFamily,
          fontSize,
          terminalFill: sanitizeColorValue(
            themeVariables.secondBkg ?? themeVariables.secondaryColor,
            DEFAULT_RAILROAD_CONFIG.terminalFill
          ),
          terminalStroke: sanitizeColorValue(
            themeVariables.secondaryBorderColor ?? themeVariables.lineColor,
            DEFAULT_RAILROAD_CONFIG.terminalStroke
          ),
          terminalTextColor: sanitizeColorValue(
            themeVariables.secondaryTextColor ?? themeVariables.textColor,
            DEFAULT_RAILROAD_CONFIG.terminalTextColor
          ),
          nonTerminalFill: sanitizeColorValue(
            themeVariables.mainBkg ?? themeVariables.background,
            DEFAULT_RAILROAD_CONFIG.nonTerminalFill
          ),
          nonTerminalStroke: sanitizeColorValue(
            themeVariables.primaryBorderColor ?? themeVariables.lineColor,
            DEFAULT_RAILROAD_CONFIG.nonTerminalStroke
          ),
          nonTerminalTextColor: sanitizeColorValue(
            themeVariables.primaryTextColor ?? themeVariables.textColor,
            DEFAULT_RAILROAD_CONFIG.nonTerminalTextColor
          ),
          lineColor: sanitizeColorValue(themeVariables.lineColor, DEFAULT_RAILROAD_CONFIG.lineColor),
          markerFill: sanitizeColorValue(themeVariables.lineColor, DEFAULT_RAILROAD_CONFIG.markerFill),
          commentFill: sanitizeColorValue(
            themeVariables.labelBackground ?? themeVariables.tertiaryColor,
            DEFAULT_RAILROAD_CONFIG.commentFill
          ),
          commentStroke: sanitizeColorValue(
            themeVariables.tertiaryBorderColor ?? themeVariables.lineColor,
            DEFAULT_RAILROAD_CONFIG.commentStroke
          ),
          commentTextColor: sanitizeColorValue(
            themeVariables.tertiaryTextColor ?? themeVariables.textColor,
            DEFAULT_RAILROAD_CONFIG.commentTextColor
          ),
          specialFill: sanitizeColorValue(
            themeVariables.tertiaryColor ?? themeVariables.secondaryColor,
            DEFAULT_RAILROAD_CONFIG.specialFill
          ),
          specialStroke: sanitizeColorValue(
            themeVariables.tertiaryBorderColor ?? themeVariables.secondaryBorderColor,
            DEFAULT_RAILROAD_CONFIG.specialStroke
          ),
          ruleNameColor: sanitizeColorValue(
            themeVariables.titleColor ?? themeVariables.textColor,
            DEFAULT_RAILROAD_CONFIG.ruleNameColor
          )
        };
      }, "buildThemeDefaults");
      buildRailroadStyleOptions = /* @__PURE__ */ __name((options2) => {
        const currentConfig2 = getConfig();
        const themeVariables = {
          ...getThemeVariables3(),
          ...currentConfig2.themeVariables ?? {},
          ...extractThemeOverrides(options2)
        };
        const themeDefaults = buildThemeDefaults(themeVariables);
        const railroadOptions = {
          ...currentConfig2.railroad ?? {},
          ...extractRailroadOverrides(options2)
        };
        return {
          compactMode: railroadOptions.compactMode ?? themeDefaults.compactMode,
          padding: sanitizeNumberValue(railroadOptions.padding, themeDefaults.padding),
          verticalSeparation: sanitizeNumberValue(
            railroadOptions.verticalSeparation,
            themeDefaults.verticalSeparation
          ),
          horizontalSeparation: sanitizeNumberValue(
            railroadOptions.horizontalSeparation,
            themeDefaults.horizontalSeparation
          ),
          arcRadius: sanitizeNumberValue(railroadOptions.arcRadius, themeDefaults.arcRadius),
          fontSize: sanitizeNumberValue(railroadOptions.fontSize, themeDefaults.fontSize),
          fontFamily: sanitizeFontFamilyValue(railroadOptions.fontFamily, themeDefaults.fontFamily),
          terminalFill: sanitizeColorValue(railroadOptions.terminalFill, themeDefaults.terminalFill),
          terminalStroke: sanitizeColorValue(
            railroadOptions.terminalStroke,
            themeDefaults.terminalStroke
          ),
          terminalTextColor: sanitizeColorValue(
            railroadOptions.terminalTextColor,
            themeDefaults.terminalTextColor
          ),
          nonTerminalFill: sanitizeColorValue(
            railroadOptions.nonTerminalFill,
            themeDefaults.nonTerminalFill
          ),
          nonTerminalStroke: sanitizeColorValue(
            railroadOptions.nonTerminalStroke,
            themeDefaults.nonTerminalStroke
          ),
          nonTerminalTextColor: sanitizeColorValue(
            railroadOptions.nonTerminalTextColor,
            themeDefaults.nonTerminalTextColor
          ),
          lineColor: sanitizeColorValue(railroadOptions.lineColor, themeDefaults.lineColor),
          strokeWidth: sanitizeNumberValue(railroadOptions.strokeWidth, themeDefaults.strokeWidth),
          markerFill: sanitizeColorValue(railroadOptions.markerFill, themeDefaults.markerFill),
          commentFill: sanitizeColorValue(railroadOptions.commentFill, themeDefaults.commentFill),
          commentStroke: sanitizeColorValue(railroadOptions.commentStroke, themeDefaults.commentStroke),
          commentTextColor: sanitizeColorValue(
            railroadOptions.commentTextColor,
            themeDefaults.commentTextColor
          ),
          specialFill: sanitizeColorValue(railroadOptions.specialFill, themeDefaults.specialFill),
          specialStroke: sanitizeColorValue(railroadOptions.specialStroke, themeDefaults.specialStroke),
          ruleNameColor: sanitizeColorValue(railroadOptions.ruleNameColor, themeDefaults.ruleNameColor),
          showMarkers: railroadOptions.showMarkers ?? themeDefaults.showMarkers,
          markerRadius: sanitizeNumberValue(railroadOptions.markerRadius, themeDefaults.markerRadius)
        };
      }, "buildRailroadStyleOptions");
      getStyles24 = /* @__PURE__ */ __name((options2) => {
        const {
          fontFamily,
          fontSize,
          terminalFill,
          terminalStroke,
          terminalTextColor,
          nonTerminalFill,
          nonTerminalStroke,
          nonTerminalTextColor,
          lineColor,
          strokeWidth,
          markerFill,
          commentFill,
          commentStroke,
          commentTextColor,
          specialFill,
          specialStroke,
          ruleNameColor
        } = buildRailroadStyleOptions(options2);
        return `
  .railroad-diagram {
    font-family: ${fontFamily};
    font-size: ${fontSize}px;
  }

  .railroad-terminal rect {
    fill: ${terminalFill};
    stroke: ${terminalStroke};
    stroke-width: ${strokeWidth}px;
  }

  .railroad-terminal text {
    fill: ${terminalTextColor};
    font-family: ${fontFamily};
    font-size: ${fontSize}px;
    text-anchor: middle;
    dominant-baseline: middle;
  }

  .railroad-nonterminal rect {
    fill: ${nonTerminalFill};
    stroke: ${nonTerminalStroke};
    stroke-width: ${strokeWidth}px;
  }

  .railroad-nonterminal text {
    fill: ${nonTerminalTextColor};
    font-family: ${fontFamily};
    font-size: ${fontSize}px;
    text-anchor: middle;
    dominant-baseline: middle;
  }

  .railroad-line {
    stroke: ${lineColor};
    stroke-width: ${strokeWidth}px;
    fill: none;
  }

  .railroad-start circle,
  .railroad-end circle {
    fill: ${markerFill};
  }

  .railroad-comment ellipse {
    fill: ${commentFill};
    stroke: ${commentStroke};
    stroke-width: ${strokeWidth}px;
  }

  .railroad-comment text {
    fill: ${commentTextColor};
    font-style: italic;
    font-family: ${fontFamily};
    font-size: ${fontSize}px;
    text-anchor: middle;
    dominant-baseline: middle;
  }

  .railroad-special rect {
    fill: ${specialFill};
    stroke: ${specialStroke};
    stroke-width: ${strokeWidth}px;
    stroke-dasharray: 5,3;
  }

  .railroad-special text {
    fill: ${nonTerminalTextColor};
    font-family: ${fontFamily};
    font-size: ${fontSize}px;
    text-anchor: middle;
    dominant-baseline: middle;
  }

  .railroad-rule-name {
    font-weight: bold;
    fill: ${ruleNameColor};
    font-family: ${fontFamily};
    font-size: ${fontSize}px;
  }

  .railroad-group {
    /* Grouping container, no specific styles */
  }
`;
      }, "getStyles");
    }
  });

  // src/diagrams/railroad/railroadRenderer.ts
  var PathBuilder, RailroadRenderer, configureRailroadSvgSize, draw33, renderer14;
  var init_railroadRenderer = __esm({
    "src/diagrams/railroad/railroadRenderer.ts"() {
      "use strict";
      init_logger();
      init_config();
      init_selectSvgElement();
      init_setupGraphViewbox();
      init_railroadDb();
      init_styles26();
      PathBuilder = class {
        constructor() {
          this.d = "";
        }
        static {
          __name(this, "PathBuilder");
        }
        moveTo(x5, y6) {
          this.d += `M ${x5} ${y6} `;
          return this;
        }
        lineTo(x5, y6) {
          this.d += `L ${x5} ${y6} `;
          return this;
        }
        horizontalTo(x5) {
          this.d += `H ${x5} `;
          return this;
        }
        verticalTo(y6) {
          this.d += `V ${y6} `;
          return this;
        }
        arcTo(rx, ry, rotation, largeArc, sweep, x5, y6) {
          this.d += `A ${rx} ${ry} ${rotation} ${largeArc ? 1 : 0} ${sweep ? 1 : 0} ${x5} ${y6} `;
          return this;
        }
        build() {
          return this.d.trim();
        }
      };
      RailroadRenderer = class {
        constructor(svg2, config3 = buildRailroadStyleOptions()) {
          this.textCache = /* @__PURE__ */ new Map();
          this.svg = svg2;
          this.config = config3;
        }
        static {
          __name(this, "RailroadRenderer");
        }
        /**
         * Measure text dimensions
         */
        measureText(text4) {
          if (this.textCache.has(text4)) {
            return this.textCache.get(text4);
          }
          const tempText = this.svg.append("text").attr("font-family", this.config.fontFamily).attr("font-size", this.config.fontSize).text(text4);
          const bbox = tempText.node().getBBox();
          const dimensions2 = { width: bbox.width, height: bbox.height };
          tempText.remove();
          this.textCache.set(text4, dimensions2);
          return dimensions2;
        }
        /**
         * Render terminal symbol (rounded rectangle)
         */
        renderTerminal(parent4, value2) {
          const textDim = this.measureText(value2);
          const width3 = textDim.width + this.config.padding * 2;
          const height2 = textDim.height + this.config.padding * 2;
          const group2 = parent4.append("g").attr("class", "railroad-terminal");
          group2.append("rect").attr("x", 0).attr("y", 0).attr("width", width3).attr("height", height2).attr("rx", 10).attr("ry", 10);
          group2.append("text").attr("x", width3 / 2).attr("y", height2 / 2).text(value2);
          return {
            element: group2.node(),
            dimensions: {
              width: width3,
              height: height2,
              up: height2 / 2,
              down: height2 / 2
            }
          };
        }
        /**
         * Render non-terminal symbol (rectangle)
         */
        renderNonTerminal(parent4, name) {
          const textDim = this.measureText(name);
          const width3 = textDim.width + this.config.padding * 2;
          const height2 = textDim.height + this.config.padding * 2;
          const group2 = parent4.append("g").attr("class", "railroad-nonterminal");
          group2.append("rect").attr("x", 0).attr("y", 0).attr("width", width3).attr("height", height2);
          group2.append("text").attr("x", width3 / 2).attr("y", height2 / 2).text(name);
          return {
            element: group2.node(),
            dimensions: {
              width: width3,
              height: height2,
              up: height2 / 2,
              down: height2 / 2
            }
          };
        }
        /**
         * Render sequence (horizontal concatenation)
         */
        renderSequence(parent4, elements2) {
          const rendered = elements2.map((e3) => this.renderExpression(parent4, e3));
          let totalWidth = 0;
          let maxUp = 0;
          let maxDown = 0;
          for (const r2 of rendered) {
            totalWidth += r2.dimensions.width;
            maxUp = Math.max(maxUp, r2.dimensions.up);
            maxDown = Math.max(maxDown, r2.dimensions.down);
          }
          totalWidth += (rendered.length - 1) * this.config.horizontalSeparation;
          const group2 = parent4.append("g").attr("class", "railroad-sequence");
          let x5 = 0;
          for (let i2 = 0; i2 < rendered.length; i2++) {
            const r2 = rendered[i2];
            const y6 = maxUp - r2.dimensions.up;
            const elem = group2.node().appendChild(r2.element);
            elem.setAttribute("transform", `translate(${x5}, ${y6})`);
            if (i2 < rendered.length - 1) {
              const lineX1 = x5 + r2.dimensions.width;
              const lineX2 = lineX1 + this.config.horizontalSeparation;
              const lineY = maxUp;
              group2.append("path").attr("class", "railroad-line").attr("d", new PathBuilder().moveTo(lineX1, lineY).lineTo(lineX2, lineY).build());
            }
            x5 += r2.dimensions.width + this.config.horizontalSeparation;
          }
          return {
            element: group2.node(),
            dimensions: {
              width: totalWidth,
              height: maxUp + maxDown,
              up: maxUp,
              down: maxDown
            }
          };
        }
        /**
         * Render choice (vertical alternatives)
         */
        renderChoice(parent4, alternatives) {
          const rendered = alternatives.map((a2) => this.renderExpression(parent4, a2));
          let maxWidth2 = 0;
          let totalHeight = 0;
          for (const r2 of rendered) {
            maxWidth2 = Math.max(maxWidth2, r2.dimensions.width);
            totalHeight += r2.dimensions.height;
          }
          totalHeight += (rendered.length - 1) * this.config.verticalSeparation;
          const arcRadius = this.config.arcRadius;
          const arcWidth = arcRadius * 4;
          const totalWidth = maxWidth2 + arcWidth;
          const group2 = parent4.append("g").attr("class", "railroad-choice");
          let y6 = 0;
          const centerY = totalHeight / 2;
          for (const r2 of rendered) {
            const elemY = y6;
            const elemCenterY = elemY + r2.dimensions.up;
            const elemX = arcRadius * 2 + (maxWidth2 - r2.dimensions.width) / 2;
            const elem = group2.node().appendChild(r2.element);
            elem.setAttribute("transform", `translate(${elemX}, ${elemY})`);
            const leftPath = new PathBuilder();
            const isBelowCenter = elemCenterY > centerY;
            if (elemCenterY === centerY) {
              leftPath.moveTo(0, centerY).lineTo(elemX, elemCenterY);
            } else {
              leftPath.moveTo(0, centerY).arcTo(
                arcRadius,
                arcRadius,
                0,
                false,
                isBelowCenter,
                arcRadius,
                centerY + (isBelowCenter ? arcRadius : -arcRadius)
              ).lineTo(arcRadius, elemCenterY - (isBelowCenter ? arcRadius : -arcRadius)).arcTo(arcRadius, arcRadius, 0, false, !isBelowCenter, arcRadius * 2, elemCenterY).lineTo(elemX, elemCenterY);
            }
            group2.append("path").attr("class", "railroad-line").attr("d", leftPath.build());
            const rightPath = new PathBuilder();
            const rightStart = elemX + r2.dimensions.width;
            const rightLaneX = totalWidth - arcRadius * 2;
            if (elemCenterY === centerY) {
              rightPath.moveTo(rightStart, elemCenterY).lineTo(totalWidth, centerY);
            } else {
              rightPath.moveTo(rightStart, elemCenterY).lineTo(rightLaneX, elemCenterY).arcTo(
                arcRadius,
                arcRadius,
                0,
                false,
                !isBelowCenter,
                totalWidth - arcRadius,
                elemCenterY + (isBelowCenter ? -arcRadius : arcRadius)
              ).lineTo(totalWidth - arcRadius, centerY + (isBelowCenter ? arcRadius : -arcRadius)).arcTo(arcRadius, arcRadius, 0, false, isBelowCenter, totalWidth, centerY);
            }
            group2.append("path").attr("class", "railroad-line").attr("d", rightPath.build());
            y6 += r2.dimensions.height + this.config.verticalSeparation;
          }
          return {
            element: group2.node(),
            dimensions: {
              width: totalWidth,
              height: totalHeight,
              up: centerY,
              down: totalHeight - centerY
            }
          };
        }
        /**
         * Render optional (bypass path above)
         */
        renderOptional(parent4, element3) {
          const inner2 = this.renderExpression(parent4, element3);
          const arcRadius = this.config.arcRadius;
          const arcHeight = arcRadius * 2;
          const totalWidth = inner2.dimensions.width + arcRadius * 4;
          const totalHeight = inner2.dimensions.height + arcHeight;
          const group2 = parent4.append("g").attr("class", "railroad-optional");
          const elemX = arcRadius * 2;
          const elemY = arcHeight;
          const elem = group2.node().appendChild(inner2.element);
          elem.setAttribute("transform", `translate(${elemX}, ${elemY})`);
          const centerY = elemY + inner2.dimensions.up;
          const lowerPath = new PathBuilder().moveTo(0, centerY).lineTo(arcRadius * 2, centerY);
          group2.append("path").attr("class", "railroad-line").attr("d", lowerPath.build());
          const lowerPath2 = new PathBuilder().moveTo(elemX + inner2.dimensions.width, centerY).lineTo(totalWidth, centerY);
          group2.append("path").attr("class", "railroad-line").attr("d", lowerPath2.build());
          const bypassPath = new PathBuilder().moveTo(0, centerY).arcTo(arcRadius, arcRadius, 0, false, false, arcRadius, centerY - arcRadius).lineTo(arcRadius, arcRadius).arcTo(arcRadius, arcRadius, 0, false, true, arcRadius * 2, 0).lineTo(totalWidth - arcRadius * 2, 0).arcTo(arcRadius, arcRadius, 0, false, true, totalWidth - arcRadius, arcRadius).lineTo(totalWidth - arcRadius, centerY - arcRadius).arcTo(arcRadius, arcRadius, 0, false, false, totalWidth, centerY);
          group2.append("path").attr("class", "railroad-line").attr("d", bypassPath.build());
          return {
            element: group2.node(),
            dimensions: {
              width: totalWidth,
              height: totalHeight,
              up: centerY,
              down: totalHeight - centerY
            }
          };
        }
        /**
         * Render repetition (loop back path)
         */
        renderRepetition(parent4, element3, min10) {
          const inner2 = this.renderExpression(parent4, element3);
          const arcRadius = this.config.arcRadius;
          const arcHeight = arcRadius * 2;
          const totalWidth = inner2.dimensions.width + arcRadius * 4;
          const hasBypass = min10 === 0;
          const totalHeight = inner2.dimensions.height + arcHeight + (hasBypass ? arcHeight : 0);
          const group2 = parent4.append("g").attr("class", "railroad-repetition");
          const elemX = arcRadius * 2;
          const elemY = hasBypass ? arcHeight : 0;
          const elem = group2.node().appendChild(inner2.element);
          elem.setAttribute("transform", `translate(${elemX}, ${elemY})`);
          const centerY = elemY + inner2.dimensions.up;
          group2.append("path").attr("class", "railroad-line").attr(
            "d",
            new PathBuilder().moveTo(0, centerY).lineTo(arcRadius * 2, centerY).build()
          );
          group2.append("path").attr("class", "railroad-line").attr(
            "d",
            new PathBuilder().moveTo(elemX + inner2.dimensions.width, centerY).lineTo(totalWidth, centerY).build()
          );
          const loopY = elemY + inner2.dimensions.height + arcRadius;
          const loopPath = new PathBuilder().moveTo(elemX + inner2.dimensions.width, centerY).arcTo(
            arcRadius,
            arcRadius,
            0,
            false,
            true,
            elemX + inner2.dimensions.width + arcRadius,
            centerY + arcRadius
          ).lineTo(elemX + inner2.dimensions.width + arcRadius, loopY).arcTo(
            arcRadius,
            arcRadius,
            0,
            false,
            true,
            elemX + inner2.dimensions.width,
            loopY + arcRadius
          ).lineTo(arcRadius * 2, loopY + arcRadius).arcTo(arcRadius, arcRadius, 0, false, true, arcRadius, loopY).lineTo(arcRadius, centerY + arcRadius).arcTo(arcRadius, arcRadius, 0, false, true, arcRadius * 2, centerY);
          group2.append("path").attr("class", "railroad-line").attr("d", loopPath.build());
          if (hasBypass) {
            const bypassPath = new PathBuilder().moveTo(0, centerY).arcTo(arcRadius, arcRadius, 0, false, false, arcRadius, centerY - arcRadius).lineTo(arcRadius, arcRadius).arcTo(arcRadius, arcRadius, 0, false, true, arcRadius * 2, 0).lineTo(totalWidth - arcRadius * 2, 0).arcTo(arcRadius, arcRadius, 0, false, true, totalWidth - arcRadius, arcRadius).lineTo(totalWidth - arcRadius, centerY - arcRadius).arcTo(arcRadius, arcRadius, 0, false, false, totalWidth, centerY);
            group2.append("path").attr("class", "railroad-line").attr("d", bypassPath.build());
          }
          return {
            element: group2.node(),
            dimensions: {
              width: totalWidth,
              height: totalHeight,
              up: centerY,
              down: totalHeight - centerY
            }
          };
        }
        /**
         * Render special sequence
         */
        renderSpecial(parent4, text4) {
          const textDim = this.measureText("? " + text4 + " ?");
          const width3 = textDim.width + this.config.padding * 2;
          const height2 = textDim.height + this.config.padding * 2;
          const group2 = parent4.append("g").attr("class", "railroad-special");
          group2.append("rect").attr("x", 0).attr("y", 0).attr("width", width3).attr("height", height2);
          group2.append("text").attr("x", width3 / 2).attr("y", height2 / 2).text("? " + text4 + " ?");
          return {
            element: group2.node(),
            dimensions: {
              width: width3,
              height: height2,
              up: height2 / 2,
              down: height2 / 2
            }
          };
        }
        /**
         * Render an expression (recursive)
         */
        renderExpression(parent4, node2) {
          switch (node2.type) {
            case "terminal":
              return this.renderTerminal(parent4, node2.value);
            case "nonterminal":
              return this.renderNonTerminal(parent4, node2.name);
            case "sequence":
              return this.renderSequence(parent4, node2.elements);
            case "choice":
              return this.renderChoice(parent4, node2.alternatives);
            case "optional":
              return this.renderOptional(parent4, node2.element);
            case "repetition":
              return this.renderRepetition(parent4, node2.element, node2.min);
            case "special":
              return this.renderSpecial(parent4, node2.text);
            default:
              throw new Error(`Unknown node type: ${node2.type}`);
          }
        }
        /**
         * Render a single rule
         */
        renderRule(rule, y6) {
          const group2 = this.svg.append("g").attr("class", "railroad-rule").attr("transform", `translate(0, ${y6})`);
          const ruleName = rule.name + " =";
          const nameWidth = this.measureText(ruleName).width + 20;
          const definitionX = nameWidth + 20;
          const defGroup = group2.append("g");
          const result = this.renderExpression(defGroup, rule.definition);
          const baselineY = Math.max(20, result.dimensions.up);
          const definitionY = baselineY - result.dimensions.up;
          defGroup.attr("transform", `translate(${definitionX}, ${definitionY})`);
          const nameGroup = group2.append("g").attr("class", "railroad-rule-name-group");
          nameGroup.append("text").attr("class", "railroad-rule-name").attr("x", 0).attr("y", baselineY).text(ruleName);
          const startMarker = group2.append("g").attr("class", "railroad-start");
          startMarker.append("circle").attr("cx", nameWidth).attr("cy", baselineY).attr("r", this.config.markerRadius);
          const endMarker = group2.append("g").attr("class", "railroad-end");
          endMarker.append("circle").attr("cx", definitionX + result.dimensions.width + 10).attr("cy", baselineY).attr("r", this.config.markerRadius);
          group2.append("path").attr("class", "railroad-line").attr(
            "d",
            new PathBuilder().moveTo(nameWidth + this.config.markerRadius, baselineY).lineTo(definitionX, baselineY).build()
          );
          group2.append("path").attr("class", "railroad-line").attr(
            "d",
            new PathBuilder().moveTo(definitionX + result.dimensions.width, baselineY).lineTo(definitionX + result.dimensions.width + 10 - this.config.markerRadius, baselineY).build()
          );
          return {
            height: Math.max(40, definitionY + result.dimensions.height + this.config.padding * 2),
            width: definitionX + result.dimensions.width + 10 + this.config.markerRadius
          };
        }
        /**
         * Render all rules
         */
        renderDiagram(rules2) {
          let y6 = this.config.padding;
          let maxWidth2 = 0;
          for (const rule of rules2) {
            const result = this.renderRule(rule, y6);
            y6 += result.height + this.config.verticalSeparation;
            maxWidth2 = Math.max(maxWidth2, result.width);
          }
          return {
            width: maxWidth2 + this.config.padding * 2,
            height: y6 + this.config.padding
          };
        }
      };
      configureRailroadSvgSize = /* @__PURE__ */ __name((svg2, dimensions2, useMaxWidth) => {
        configureSvgSize(svg2, dimensions2.height, dimensions2.width, useMaxWidth);
        svg2.attr("viewBox", `0 0 ${dimensions2.width} ${dimensions2.height}`);
      }, "configureRailroadSvgSize");
      draw33 = /* @__PURE__ */ __name((text4, id41, _version) => {
        log.debug("[Railroad] Rendering diagram\n" + text4);
        try {
          const svg2 = selectSvgElement(id41);
          svg2.attr("class", "railroad-diagram");
          const railroadConfig = getConfig().railroad;
          const useMaxWidth = railroadConfig?.useMaxWidth ?? true;
          const rules2 = db11.getRules();
          log.debug(`[Railroad] Rendering ${rules2.length} rules`);
          if (rules2.length === 0) {
            log.warn("[Railroad] No rules to render");
            configureRailroadSvgSize(svg2, { height: 100, width: 200 }, useMaxWidth);
            return;
          }
          const renderer15 = new RailroadRenderer(svg2, buildRailroadStyleOptions());
          const dimensions2 = renderer15.renderDiagram(rules2);
          configureRailroadSvgSize(svg2, dimensions2, useMaxWidth);
          log.debug("[Railroad] Render complete");
        } catch (error3) {
          log.error("[Railroad] Render error:", error3);
          throw error3;
        }
      }, "draw");
      renderer14 = { draw: draw33 };
    }
  });

  // src/diagrams/railroad/railroadDiagram.ts
  var railroadDiagram_exports = {};
  __export(railroadDiagram_exports, {
    default: () => railroadDiagram_default,
    diagram: () => diagram34
  });
  var diagram34, railroadDiagram_default;
  var init_railroadDiagram = __esm({
    "src/diagrams/railroad/railroadDiagram.ts"() {
      "use strict";
      init_railroadParser();
      init_railroadDb();
      init_railroadRenderer();
      init_styles26();
      diagram34 = {
        parser: parser30,
        db: db11,
        renderer: renderer14,
        styles: getStyles24
      };
      railroadDiagram_default = diagram34;
    }
  });

  // src/diagrams/railroad/parser/ebnfParser.ts
  var langiumParser2, transformChoice, transformSequence, transformPrimary, transformPostfix, transformTerm, transformRule2, populateDb5, parser31;
  var init_ebnfParser = __esm({
    "src/diagrams/railroad/parser/ebnfParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_railroadDb();
      langiumParser2 = createRailroadEbnfServices().RailroadEbnf.parser.LangiumParser;
      transformChoice = /* @__PURE__ */ __name((choice3) => {
        const alternatives = choice3.alternatives.map(transformSequence);
        if (alternatives.length === 1) {
          return alternatives[0];
        }
        return {
          type: "choice",
          alternatives
        };
      }, "transformChoice");
      transformSequence = /* @__PURE__ */ __name((sequence) => {
        const elements2 = sequence.elements.map(transformTerm);
        if (elements2.length === 1) {
          return elements2[0];
        }
        return {
          type: "sequence",
          elements: elements2
        };
      }, "transformSequence");
      transformPrimary = /* @__PURE__ */ __name((primary) => {
        switch (primary.$type) {
          case "EbnfTerminal":
            return {
              type: "terminal",
              value: primary.value
            };
          case "EbnfNonTerminal":
            return {
              type: "nonterminal",
              name: primary.name
            };
          case "EbnfSpecial":
            return {
              type: "special",
              text: primary.text
            };
          case "EbnfGroup":
            return transformChoice(primary.element);
          case "EbnfOptional":
            return {
              type: "optional",
              element: transformChoice(primary.element)
            };
          case "EbnfRepetition":
            return {
              type: "repetition",
              element: transformChoice(primary.element),
              min: 0,
              max: Infinity
            };
          default:
            throw new Error(`Unsupported EBNF primary node: ${primary.$type}`);
        }
      }, "transformPrimary");
      transformPostfix = /* @__PURE__ */ __name((node2, postfix) => {
        switch (postfix.$type) {
          case "EbnfOptionalPostfix":
            return {
              type: "optional",
              element: node2
            };
          case "EbnfZeroOrMorePostfix":
            return {
              type: "repetition",
              element: node2,
              min: 0,
              max: Infinity
            };
          case "EbnfOneOrMorePostfix":
            return {
              type: "repetition",
              element: node2,
              min: 1,
              max: Infinity
            };
          case "EbnfExceptionPostfix":
            return {
              type: "sequence",
              elements: [
                node2,
                { type: "terminal", value: "-" },
                transformPrimary(postfix.except)
              ]
            };
          default:
            throw new Error(`Unsupported EBNF postfix node: ${postfix.$type}`);
        }
      }, "transformPostfix");
      transformTerm = /* @__PURE__ */ __name((term) => {
        return term.postfixes.reduce((currentNode, postfix) => {
          return transformPostfix(currentNode, postfix);
        }, transformPrimary(term.base));
      }, "transformTerm");
      transformRule2 = /* @__PURE__ */ __name((rule) => {
        return {
          name: rule.name,
          definition: transformChoice(rule.definition)
        };
      }, "transformRule");
      populateDb5 = /* @__PURE__ */ __name((ast) => {
        populateCommonDb(ast, db11);
        if (ast.title) {
          db11.setTitle(ast.title);
        }
        ast.rules.map((rule) => db11.addRule(transformRule2(rule)));
      }, "populateDb");
      parser31 = {
        parse: /* @__PURE__ */ __name((input) => {
          db11.clear();
          log.debug("[EBNF Parser] Starting Langium parse");
          const result = langiumParser2.parse(input);
          if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {
            throw new MermaidParseError(result);
          }
          const ast = result.value;
          log.debug("[EBNF Parser] Parsed rules:", ast.rules.length);
          populateDb5(ast);
          log.debug("[EBNF Parser] Parse complete");
        }, "parse"),
        parser: {
          yy: db11
        }
      };
    }
  });

  // src/diagrams/railroad/ebnfDiagram.ts
  var ebnfDiagram_exports = {};
  __export(ebnfDiagram_exports, {
    diagram: () => diagram35
  });
  var diagram35;
  var init_ebnfDiagram = __esm({
    "src/diagrams/railroad/ebnfDiagram.ts"() {
      "use strict";
      init_ebnfParser();
      init_railroadDb();
      init_railroadRenderer();
      init_styles26();
      diagram35 = {
        parser: parser31,
        db: db11,
        renderer: renderer14,
        styles: getStyles24
      };
    }
  });

  // src/diagrams/railroad/parser/abnfParser.ts
  var langiumParser3, transformAlternation, transformConcatenation, parseRepeat, transformElement, transformPrimary2, transformRule3, populateDb6, parser32;
  var init_abnfParser = __esm({
    "src/diagrams/railroad/parser/abnfParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_railroadDb();
      langiumParser3 = createRailroadAbnfServices().RailroadAbnf.parser.LangiumParser;
      transformAlternation = /* @__PURE__ */ __name((alt) => {
        const alternatives = alt.alternatives.map(transformConcatenation);
        if (alternatives.length === 1) {
          return alternatives[0];
        }
        return {
          type: "choice",
          alternatives
        };
      }, "transformAlternation");
      transformConcatenation = /* @__PURE__ */ __name((concat) => {
        const elements2 = concat.elements.map(transformElement);
        if (elements2.length === 1) {
          return elements2[0];
        }
        return {
          type: "sequence",
          elements: elements2
        };
      }, "transformConcatenation");
      parseRepeat = /* @__PURE__ */ __name((repeat2) => {
        if (repeat2.includes("*")) {
          const [minStr, maxStr] = repeat2.split("*");
          const min10 = minStr ? parseInt(minStr, 10) : 0;
          const max10 = maxStr ? parseInt(maxStr, 10) : Infinity;
          return { min: min10, max: max10 };
        }
        const exact = parseInt(repeat2, 10);
        return { min: exact, max: exact };
      }, "parseRepeat");
      transformElement = /* @__PURE__ */ __name((element3) => {
        const inner2 = transformPrimary2(element3.primary);
        if (!element3.repeat) {
          return inner2;
        }
        const { min: min10, max: max10 } = parseRepeat(element3.repeat);
        if (min10 === 0 && max10 === 1) {
          return { type: "optional", element: inner2 };
        }
        return {
          type: "repetition",
          element: inner2,
          min: min10,
          max: max10
        };
      }, "transformElement");
      transformPrimary2 = /* @__PURE__ */ __name((primary) => {
        switch (primary.$type) {
          case "AbnfStringLiteral":
            return {
              type: "terminal",
              value: primary.value
            };
          case "AbnfNumVal":
            return {
              type: "terminal",
              value: primary.value
            };
          case "AbnfRuleName":
            return {
              type: "nonterminal",
              name: primary.name
            };
          case "AbnfGroup":
            return transformAlternation(primary.element);
          case "AbnfOptionalGroup":
            return {
              type: "optional",
              element: transformAlternation(primary.element)
            };
          default:
            throw new Error(`Unsupported ABNF primary node: ${primary.$type}`);
        }
      }, "transformPrimary");
      transformRule3 = /* @__PURE__ */ __name((rule) => {
        return {
          name: rule.name,
          definition: transformAlternation(rule.definition)
        };
      }, "transformRule");
      populateDb6 = /* @__PURE__ */ __name((ast) => {
        populateCommonDb(ast, db11);
        if (ast.title) {
          db11.setTitle(ast.title);
        }
        ast.rules.map((rule) => db11.addRule(transformRule3(rule)));
      }, "populateDb");
      parser32 = {
        parse: /* @__PURE__ */ __name((input) => {
          db11.clear();
          log.debug("[ABNF Parser] Starting Langium parse");
          const result = langiumParser3.parse(input);
          if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {
            throw new MermaidParseError(result);
          }
          const ast = result.value;
          log.debug("[ABNF Parser] Parsed rules:", ast.rules.length);
          populateDb6(ast);
          log.debug("[ABNF Parser] Parse complete");
        }, "parse"),
        parser: {
          yy: db11
        }
      };
    }
  });

  // src/diagrams/railroad/abnfDiagram.ts
  var abnfDiagram_exports = {};
  __export(abnfDiagram_exports, {
    diagram: () => diagram36
  });
  var diagram36;
  var init_abnfDiagram = __esm({
    "src/diagrams/railroad/abnfDiagram.ts"() {
      "use strict";
      init_abnfParser();
      init_railroadDb();
      init_railroadRenderer();
      init_styles26();
      diagram36 = {
        parser: parser32,
        db: db11,
        renderer: renderer14,
        styles: getStyles24
      };
    }
  });

  // src/diagrams/railroad/parser/pegParser.ts
  var langiumParser4, transformOrderedChoice, transformSequence2, transformPrefix, nodeToLabel, transformSuffix, transformPrimary3, transformRule4, populateDb7, parser33;
  var init_pegParser = __esm({
    "src/diagrams/railroad/parser/pegParser.ts"() {
      "use strict";
      init_mermaid_parser_core();
      init_logger();
      init_populateCommonDb();
      init_railroadDb();
      langiumParser4 = createRailroadPegServices().RailroadPeg.parser.LangiumParser;
      transformOrderedChoice = /* @__PURE__ */ __name((choice3) => {
        const alternatives = choice3.alternatives.map(transformSequence2);
        if (alternatives.length === 1) {
          return alternatives[0];
        }
        return {
          type: "choice",
          alternatives
        };
      }, "transformOrderedChoice");
      transformSequence2 = /* @__PURE__ */ __name((sequence) => {
        const elements2 = sequence.elements.map(transformPrefix);
        if (elements2.length === 1) {
          return elements2[0];
        }
        return {
          type: "sequence",
          elements: elements2
        };
      }, "transformSequence");
      transformPrefix = /* @__PURE__ */ __name((prefix) => {
        const inner2 = transformSuffix(prefix.suffix);
        if (!prefix.operator) {
          return inner2;
        }
        const label = prefix.operator === "&" ? `&${nodeToLabel(inner2)}` : `!${nodeToLabel(inner2)}`;
        return {
          type: "special",
          text: label
        };
      }, "transformPrefix");
      nodeToLabel = /* @__PURE__ */ __name((node2) => {
        switch (node2.type) {
          case "terminal":
            return `"${node2.value}"`;
          case "nonterminal":
            return node2.name;
          case "special":
            return node2.text;
          default:
            return "(...)";
        }
      }, "nodeToLabel");
      transformSuffix = /* @__PURE__ */ __name((suffix) => {
        const inner2 = transformPrimary3(suffix.primary);
        if (!suffix.operator) {
          return inner2;
        }
        switch (suffix.operator) {
          case "?":
            return { type: "optional", element: inner2 };
          case "*":
            return { type: "repetition", element: inner2, min: 0, max: Infinity };
          case "+":
            return { type: "repetition", element: inner2, min: 1, max: Infinity };
          default:
            throw new Error(`Unsupported PEG suffix operator: ${suffix.operator}`);
        }
      }, "transformSuffix");
      transformPrimary3 = /* @__PURE__ */ __name((primary) => {
        switch (primary.$type) {
          case "PegLiteral":
            return {
              type: "terminal",
              value: primary.value
            };
          case "PegIdentifier":
            return {
              type: "nonterminal",
              name: primary.name
            };
          case "PegGroup":
            return transformOrderedChoice(primary.element);
          case "PegAny":
            return {
              type: "special",
              text: primary.dot
            };
          default:
            throw new Error(`Unsupported PEG primary node: ${primary.$type}`);
        }
      }, "transformPrimary");
      transformRule4 = /* @__PURE__ */ __name((rule) => {
        return {
          name: rule.name,
          definition: transformOrderedChoice(rule.definition)
        };
      }, "transformRule");
      populateDb7 = /* @__PURE__ */ __name((ast) => {
        populateCommonDb(ast, db11);
        if (ast.title) {
          db11.setTitle(ast.title);
        }
        ast.rules.map((rule) => db11.addRule(transformRule4(rule)));
      }, "populateDb");
      parser33 = {
        parse: /* @__PURE__ */ __name((input) => {
          db11.clear();
          log.debug("[PEG Parser] Starting Langium parse");
          const result = langiumParser4.parse(input);
          if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {
            throw new MermaidParseError(result);
          }
          const ast = result.value;
          log.debug("[PEG Parser] Parsed rules:", ast.rules.length);
          populateDb7(ast);
          log.debug("[PEG Parser] Parse complete");
        }, "parse"),
        parser: {
          yy: db11
        }
      };
    }
  });

  // src/diagrams/railroad/pegDiagram.ts
  var pegDiagram_exports = {};
  __export(pegDiagram_exports, {
    diagram: () => diagram37
  });
  var diagram37;
  var init_pegDiagram = __esm({
    "src/diagrams/railroad/pegDiagram.ts"() {
      "use strict";
      init_pegParser();
      init_railroadDb();
      init_railroadRenderer();
      init_styles26();
      diagram37 = {
        parser: parser33,
        db: db11,
        renderer: renderer14,
        styles: getStyles24
      };
    }
  });

  // src/mermaid.ts
  var mermaid_exports = {};
  __export(mermaid_exports, {
    default: () => mermaid_default
  });
  init_icons();
  init_esm();
  init_detectType();

  // src/diagrams/c4/c4Detector.ts
  var id2 = "c4";
  var detector = /* @__PURE__ */ __name((txt) => {
    return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
  }, "detector");
  var loader = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_c4Diagram2(), c4Diagram_exports));
    return { id: id2, diagram: diagram38 };
  }, "loader");
  var plugin = {
    id: id2,
    detector,
    loader
  };
  var c4Detector_default = plugin;

  // src/diagrams/flowchart/flowDetector.ts
  var id4 = "flowchart";
  var detector2 = /* @__PURE__ */ __name((txt, config3) => {
    if (config3?.flowchart?.defaultRenderer === "dagre-wrapper" || config3?.flowchart?.defaultRenderer === "elk") {
      return false;
    }
    return /^\s*graph/.test(txt);
  }, "detector");
  var loader3 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports));
    return { id: id4, diagram: diagram38 };
  }, "loader");
  var plugin2 = {
    id: id4,
    detector: detector2,
    loader: loader3
  };
  var flowDetector_default = plugin2;

  // src/diagrams/flowchart/flowDetector-v2.ts
  var id5 = "flowchart-v2";
  var detector3 = /* @__PURE__ */ __name((txt, config3) => {
    if (config3?.flowchart?.defaultRenderer === "dagre-d3") {
      return false;
    }
    if (config3?.flowchart?.defaultRenderer === "elk") {
      config3.layout = "elk";
    }
    if (/^\s*graph/.test(txt) && config3?.flowchart?.defaultRenderer === "dagre-wrapper") {
      return true;
    }
    return /^\s*flowchart/.test(txt);
  }, "detector");
  var loader4 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports));
    return { id: id5, diagram: diagram38 };
  }, "loader");
  var plugin3 = {
    id: id5,
    detector: detector3,
    loader: loader4
  };
  var flowDetector_v2_default = plugin3;

  // src/diagrams/swimlanes/detector.ts
  var id6 = "swimlane";
  var detector4 = /* @__PURE__ */ __name((txt) => {
    return /^\s*swimlane-beta\b/.test(txt);
  }, "detector");
  var loader5 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_swimlanesDiagram(), swimlanesDiagram_exports));
    return { id: id6, diagram: diagram38 };
  }, "loader");
  var plugin4 = {
    id: id6,
    detector: detector4,
    loader: loader5
  };
  var detector_default = plugin4;

  // src/diagrams/er/erDetector.ts
  var id7 = "er";
  var detector5 = /* @__PURE__ */ __name((txt) => {
    return /^\s*erDiagram/.test(txt);
  }, "detector");
  var loader6 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_erDiagram2(), erDiagram_exports));
    return { id: id7, diagram: diagram38 };
  }, "loader");
  var plugin5 = {
    id: id7,
    detector: detector5,
    loader: loader6
  };
  var erDetector_default = plugin5;

  // src/diagrams/git/gitGraphDetector.ts
  var id8 = "gitGraph";
  var detector6 = /* @__PURE__ */ __name((txt) => {
    return /^\s*gitGraph/.test(txt);
  }, "detector");
  var loader7 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_gitGraphDiagram(), gitGraphDiagram_exports));
    return { id: id8, diagram: diagram38 };
  }, "loader");
  var plugin6 = {
    id: id8,
    detector: detector6,
    loader: loader7
  };
  var gitGraphDetector_default = plugin6;

  // src/diagrams/gantt/ganttDetector.ts
  var id9 = "gantt";
  var detector7 = /* @__PURE__ */ __name((txt) => {
    return /^\s*gantt/.test(txt);
  }, "detector");
  var loader8 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_ganttDiagram(), ganttDiagram_exports));
    return { id: id9, diagram: diagram38 };
  }, "loader");
  var plugin7 = {
    id: id9,
    detector: detector7,
    loader: loader8
  };
  var ganttDetector_default = plugin7;

  // src/diagrams/info/infoDetector.ts
  var id10 = "info";
  var detector8 = /* @__PURE__ */ __name((txt) => {
    return /^\s*info/.test(txt);
  }, "detector");
  var loader9 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_infoDiagram(), infoDiagram_exports));
    return { id: id10, diagram: diagram38 };
  }, "loader");
  var info = {
    id: id10,
    detector: detector8,
    loader: loader9
  };

  // src/diagrams/pie/pieDetector.ts
  var id11 = "pie";
  var detector9 = /* @__PURE__ */ __name((txt) => {
    return /^\s*pie/.test(txt);
  }, "detector");
  var loader10 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_pieDiagram(), pieDiagram_exports));
    return { id: id11, diagram: diagram38 };
  }, "loader");
  var pie = {
    id: id11,
    detector: detector9,
    loader: loader10
  };

  // src/diagrams/quadrant-chart/quadrantDetector.ts
  var id12 = "quadrantChart";
  var detector10 = /* @__PURE__ */ __name((txt) => {
    return /^\s*quadrantChart/.test(txt);
  }, "detector");
  var loader11 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_quadrantDiagram(), quadrantDiagram_exports));
    return { id: id12, diagram: diagram38 };
  }, "loader");
  var plugin8 = {
    id: id12,
    detector: detector10,
    loader: loader11
  };
  var quadrantDetector_default = plugin8;

  // src/diagrams/xychart/xychartDetector.ts
  var id13 = "xychart";
  var detector11 = /* @__PURE__ */ __name((txt) => {
    return /^\s*xychart(-beta)?/.test(txt);
  }, "detector");
  var loader12 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_xychartDiagram(), xychartDiagram_exports));
    return { id: id13, diagram: diagram38 };
  }, "loader");
  var plugin9 = {
    id: id13,
    detector: detector11,
    loader: loader12
  };
  var xychartDetector_default = plugin9;

  // src/diagrams/requirement/requirementDetector.ts
  var id14 = "requirement";
  var detector12 = /* @__PURE__ */ __name((txt) => {
    return /^\s*requirement(Diagram)?/.test(txt);
  }, "detector");
  var loader13 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_requirementDiagram2(), requirementDiagram_exports));
    return { id: id14, diagram: diagram38 };
  }, "loader");
  var plugin10 = {
    id: id14,
    detector: detector12,
    loader: loader13
  };
  var requirementDetector_default = plugin10;

  // src/diagrams/sequence/sequenceDetector.ts
  var id15 = "sequence";
  var detector13 = /* @__PURE__ */ __name((txt) => {
    return /^\s*sequenceDiagram/.test(txt);
  }, "detector");
  var loader14 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_sequenceDiagram2(), sequenceDiagram_exports));
    return { id: id15, diagram: diagram38 };
  }, "loader");
  var plugin11 = {
    id: id15,
    detector: detector13,
    loader: loader14
  };
  var sequenceDetector_default = plugin11;

  // src/diagrams/class/classDetector.ts
  var id16 = "class";
  var detector14 = /* @__PURE__ */ __name((txt, config3) => {
    if (config3?.class?.defaultRenderer === "dagre-wrapper") {
      return false;
    }
    return /^\s*classDiagram/.test(txt);
  }, "detector");
  var loader15 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_classDiagram2(), classDiagram_exports));
    return { id: id16, diagram: diagram38 };
  }, "loader");
  var plugin12 = {
    id: id16,
    detector: detector14,
    loader: loader15
  };
  var classDetector_default = plugin12;

  // src/diagrams/class/classDetector-V2.ts
  var id17 = "classDiagram";
  var detector15 = /* @__PURE__ */ __name((txt, config3) => {
    if (/^\s*classDiagram/.test(txt) && config3?.class?.defaultRenderer === "dagre-wrapper") {
      return true;
    }
    return /^\s*classDiagram-v2/.test(txt);
  }, "detector");
  var loader16 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_classDiagram_v2(), classDiagram_v2_exports));
    return { id: id17, diagram: diagram38 };
  }, "loader");
  var plugin13 = {
    id: id17,
    detector: detector15,
    loader: loader16
  };
  var classDetector_V2_default = plugin13;

  // src/diagrams/state/stateDetector.ts
  var id18 = "state";
  var detector16 = /* @__PURE__ */ __name((txt, config3) => {
    if (config3?.state?.defaultRenderer === "dagre-wrapper") {
      return false;
    }
    return /^\s*stateDiagram/.test(txt);
  }, "detector");
  var loader17 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_stateDiagram2(), stateDiagram_exports));
    return { id: id18, diagram: diagram38 };
  }, "loader");
  var plugin14 = {
    id: id18,
    detector: detector16,
    loader: loader17
  };
  var stateDetector_default = plugin14;

  // src/diagrams/state/stateDetector-V2.ts
  var id19 = "stateDiagram";
  var detector17 = /* @__PURE__ */ __name((txt, config3) => {
    if (/^\s*stateDiagram-v2/.test(txt)) {
      return true;
    }
    if (/^\s*stateDiagram/.test(txt) && config3?.state?.defaultRenderer === "dagre-wrapper") {
      return true;
    }
    return false;
  }, "detector");
  var loader18 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_stateDiagram_v2(), stateDiagram_v2_exports));
    return { id: id19, diagram: diagram38 };
  }, "loader");
  var plugin15 = {
    id: id19,
    detector: detector17,
    loader: loader18
  };
  var stateDetector_V2_default = plugin15;

  // src/diagrams/user-journey/journeyDetector.ts
  var id20 = "journey";
  var detector18 = /* @__PURE__ */ __name((txt) => {
    return /^\s*journey/.test(txt);
  }, "detector");
  var loader19 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_journeyDiagram(), journeyDiagram_exports));
    return { id: id20, diagram: diagram38 };
  }, "loader");
  var plugin16 = {
    id: id20,
    detector: detector18,
    loader: loader19
  };
  var journeyDetector_default = plugin16;

  // src/diagrams/error/errorRenderer.ts
  init_logger();
  init_selectSvgElement();
  init_setupGraphViewbox();
  var draw16 = /* @__PURE__ */ __name((_text, id41, version3) => {
    log.debug("rendering svg for syntax error\n");
    const svg2 = selectSvgElement(id41);
    const g2 = svg2.append("g");
    svg2.attr("viewBox", "0 0 2412 512");
    configureSvgSize(svg2, 100, 512, true);
    g2.append("path").attr("class", "error-icon").attr(
      "d",
      "m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"
    );
    g2.append("path").attr("class", "error-icon").attr(
      "d",
      "m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"
    );
    g2.append("path").attr("class", "error-icon").attr(
      "d",
      "m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"
    );
    g2.append("path").attr("class", "error-icon").attr(
      "d",
      "m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"
    );
    g2.append("path").attr("class", "error-icon").attr(
      "d",
      "m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"
    );
    g2.append("path").attr("class", "error-icon").attr(
      "d",
      "m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"
    );
    g2.append("text").attr("class", "error-text").attr("x", 1440).attr("y", 250).attr("font-size", "150px").style("text-anchor", "middle").text("Syntax error in text");
    g2.append("text").attr("class", "error-text").attr("x", 1250).attr("y", 400).attr("font-size", "100px").style("text-anchor", "middle").text(`mermaid version ${version3}`);
  }, "draw");
  var renderer5 = { draw: draw16 };
  var errorRenderer_default = renderer5;

  // src/diagrams/error/errorDiagram.ts
  var diagram18 = {
    db: {},
    renderer: renderer5,
    parser: {
      parse: /* @__PURE__ */ __name(() => {
        return;
      }, "parse")
    }
  };
  var errorDiagram_default = diagram18;

  // src/diagrams/flowchart/elk/detector.ts
  var id21 = "flowchart-elk";
  var detector19 = /* @__PURE__ */ __name((txt, config3 = {}) => {
    if (
      // If diagram explicitly states flowchart-elk
      /^\s*flowchart-elk/.test(txt) || // If a flowchart/graph diagram has their default renderer set to elk
      /^\s*(flowchart|graph)/.test(txt) && config3?.flowchart?.defaultRenderer === "elk"
    ) {
      config3.layout = "elk";
      return true;
    }
    return false;
  }, "detector");
  var loader20 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports));
    return { id: id21, diagram: diagram38 };
  }, "loader");
  var plugin17 = {
    id: id21,
    detector: detector19,
    loader: loader20
  };
  var detector_default2 = plugin17;

  // src/diagrams/timeline/detector.ts
  var id22 = "timeline";
  var detector20 = /* @__PURE__ */ __name((txt) => {
    return /^\s*timeline/.test(txt);
  }, "detector");
  var loader21 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_timeline_definition(), timeline_definition_exports));
    return { id: id22, diagram: diagram38 };
  }, "loader");
  var plugin18 = {
    id: id22,
    detector: detector20,
    loader: loader21
  };
  var detector_default3 = plugin18;

  // src/diagrams/mindmap/detector.ts
  var id23 = "mindmap";
  var detector21 = /* @__PURE__ */ __name((txt) => {
    return /^\s*mindmap/.test(txt);
  }, "detector");
  var loader22 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_mindmap_definition(), mindmap_definition_exports));
    return { id: id23, diagram: diagram38 };
  }, "loader");
  var plugin19 = {
    id: id23,
    detector: detector21,
    loader: loader22
  };
  var detector_default4 = plugin19;

  // src/diagrams/kanban/detector.ts
  var id24 = "kanban";
  var detector22 = /* @__PURE__ */ __name((txt) => {
    return /^\s*kanban/.test(txt);
  }, "detector");
  var loader23 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_kanban_definition(), kanban_definition_exports));
    return { id: id24, diagram: diagram38 };
  }, "loader");
  var plugin20 = {
    id: id24,
    detector: detector22,
    loader: loader23
  };
  var detector_default5 = plugin20;

  // src/diagrams/sankey/sankeyDetector.ts
  var id25 = "sankey";
  var detector23 = /* @__PURE__ */ __name((txt) => {
    return /^\s*sankey(-beta)?/.test(txt);
  }, "detector");
  var loader24 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_sankeyDiagram(), sankeyDiagram_exports));
    return { id: id25, diagram: diagram38 };
  }, "loader");
  var plugin21 = {
    id: id25,
    detector: detector23,
    loader: loader24
  };
  var sankeyDetector_default = plugin21;

  // src/diagrams/packet/detector.ts
  var id26 = "packet";
  var detector24 = /* @__PURE__ */ __name((txt) => {
    return /^\s*packet(-beta)?/.test(txt);
  }, "detector");
  var loader25 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_diagram(), diagram_exports));
    return { id: id26, diagram: diagram38 };
  }, "loader");
  var packet = {
    id: id26,
    detector: detector24,
    loader: loader25
  };

  // src/diagrams/radar/detector.ts
  var id27 = "radar";
  var detector25 = /* @__PURE__ */ __name((txt) => {
    return /^\s*radar-beta/.test(txt);
  }, "detector");
  var loader26 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_diagram2(), diagram_exports2));
    return { id: id27, diagram: diagram38 };
  }, "loader");
  var radar = {
    id: id27,
    detector: detector25,
    loader: loader26
  };

  // src/diagrams/block/blockDetector.ts
  var id28 = "block";
  var detector26 = /* @__PURE__ */ __name((txt) => {
    return /^\s*block(-beta)?/.test(txt);
  }, "detector");
  var loader27 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_blockDiagram(), blockDiagram_exports));
    return { id: id28, diagram: diagram38 };
  }, "loader");
  var plugin22 = {
    id: id28,
    detector: detector26,
    loader: loader27
  };
  var blockDetector_default = plugin22;

  // src/diagrams/treeView/detector.ts
  var id29 = "treeView";
  var detector27 = /* @__PURE__ */ __name((txt) => {
    return /^\s*treeView-beta/.test(txt);
  }, "detector");
  var loader28 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_diagram3(), diagram_exports3));
    return { id: id29, diagram: diagram38 };
  }, "loader");
  var plugin23 = {
    id: id29,
    detector: detector27,
    loader: loader28
  };
  var detector_default6 = plugin23;

  // src/diagrams/architecture/architectureDetector.ts
  var id30 = "architecture";
  var detector28 = /* @__PURE__ */ __name((txt) => {
    return /^\s*architecture/.test(txt);
  }, "detector");
  var loader29 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_architectureDiagram(), architectureDiagram_exports));
    return { id: id30, diagram: diagram38 };
  }, "loader");
  var architecture = {
    id: id30,
    detector: detector28,
    loader: loader29
  };
  var architectureDetector_default = architecture;

  // src/diagrams/eventmodeling/detector.ts
  var id31 = "eventmodeling";
  var detector29 = /* @__PURE__ */ __name((txt) => {
    return /^\s*eventmodeling/.test(txt);
  }, "detector");
  var loader30 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_diagram4(), diagram_exports4));
    return { id: id31, diagram: diagram38 };
  }, "loader");
  var plugin24 = {
    id: id31,
    detector: detector29,
    loader: loader30
  };
  var detector_default7 = plugin24;

  // src/diagrams/ishikawa/ishikawaDetector.ts
  var id32 = "ishikawa";
  var detector30 = /* @__PURE__ */ __name((txt) => {
    return /^\s*ishikawa(-beta)?\b/i.test(txt);
  }, "detector");
  var loader31 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_ishikawaDiagram(), ishikawaDiagram_exports));
    return { id: id32, diagram: diagram38 };
  }, "loader");
  var ishikawa = {
    id: id32,
    detector: detector30,
    loader: loader31
  };

  // src/diagrams/venn/vennDetector.ts
  var id33 = "venn";
  var detector31 = /* @__PURE__ */ __name((txt) => {
    return /^\s*venn-beta/.test(txt);
  }, "detector");
  var loader32 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_vennDiagram(), vennDiagram_exports));
    return { id: id33, diagram: diagram38 };
  }, "loader");
  var plugin25 = {
    id: id33,
    detector: detector31,
    loader: loader32
  };
  var vennDetector_default = plugin25;

  // src/diagram-api/diagram-orchestration.ts
  init_detectType();
  init_diagramAPI();

  // src/diagrams/treemap/detector.ts
  var id34 = "treemap";
  var detector32 = /* @__PURE__ */ __name((txt) => {
    return /^\s*treemap/.test(txt);
  }, "detector");
  var loader33 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_diagram5(), diagram_exports5));
    return { id: id34, diagram: diagram38 };
  }, "loader");
  var treemap = {
    id: id34,
    detector: detector32,
    loader: loader33
  };

  // src/diagrams/wardley/wardleyDetector.ts
  var id35 = "wardley";
  var detector33 = /* @__PURE__ */ __name((text4) => {
    return /^\s*wardley-beta/i.test(text4);
  }, "detector");
  var loader34 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_wardleyDiagram(), wardleyDiagram_exports));
    return { id: id35, diagram: diagram38 };
  }, "loader");
  var plugin26 = {
    id: id35,
    detector: detector33,
    loader: loader34
  };
  var wardleyDetector_default = plugin26;

  // src/diagrams/cynefin/cynefinDetector.ts
  var id36 = "cynefin";
  var detector34 = /* @__PURE__ */ __name((txt) => {
    return /^\s*cynefin-beta(?:[\s:]|$)/.test(txt);
  }, "detector");
  var loader35 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_cynefinDiagram(), cynefinDiagram_exports));
    return { id: id36, diagram: diagram38 };
  }, "loader");
  var cynefin = {
    id: id36,
    detector: detector34,
    loader: loader35
  };

  // src/diagrams/railroad/railroadDetector.ts
  var id37 = "railroad";
  var detector35 = /* @__PURE__ */ __name((txt) => {
    return /^\s*railroad-beta/i.test(txt);
  }, "detector");
  var loader36 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_railroadDiagram(), railroadDiagram_exports));
    return { id: id37, diagram: diagram38 };
  }, "loader");
  var railroad = {
    id: id37,
    detector: detector35,
    loader: loader36
  };

  // src/diagrams/railroad/ebnfDetector.ts
  var id38 = "railroadEbnf";
  var detector36 = /* @__PURE__ */ __name((txt) => {
    return /^\s*railroad-ebnf-beta/i.test(txt);
  }, "detector");
  var loader37 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_ebnfDiagram(), ebnfDiagram_exports));
    return { id: id38, diagram: diagram38 };
  }, "loader");
  var railroadEbnf = {
    id: id38,
    detector: detector36,
    loader: loader37
  };

  // src/diagrams/railroad/abnfDetector.ts
  var id39 = "railroadAbnf";
  var detector37 = /* @__PURE__ */ __name((txt) => {
    return /^\s*railroad-abnf-beta/i.test(txt);
  }, "detector");
  var loader38 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_abnfDiagram(), abnfDiagram_exports));
    return { id: id39, diagram: diagram38 };
  }, "loader");
  var railroadAbnf = {
    id: id39,
    detector: detector37,
    loader: loader38
  };

  // src/diagrams/railroad/pegDetector.ts
  var id40 = "railroadPeg";
  var detector38 = /* @__PURE__ */ __name((txt) => {
    return /^\s*railroad-peg-beta/i.test(txt);
  }, "detector");
  var loader39 = /* @__PURE__ */ __name(async () => {
    const { diagram: diagram38 } = await Promise.resolve().then(() => (init_pegDiagram(), pegDiagram_exports));
    return { id: id40, diagram: diagram38 };
  }, "loader");
  var railroadPeg = {
    id: id40,
    detector: detector38,
    loader: loader39
  };

  // src/diagram-api/diagram-orchestration.ts
  var hasLoadedDiagrams = false;
  var addDiagrams = /* @__PURE__ */ __name(() => {
    if (hasLoadedDiagrams) {
      return;
    }
    hasLoadedDiagrams = true;
    registerDiagram("error", errorDiagram_default, (text4) => {
      return text4.toLowerCase().trim() === "error";
    });
    registerDiagram(
      "---",
      // --- diagram type may appear if YAML front-matter is not parsed correctly
      {
        db: {
          clear: /* @__PURE__ */ __name(() => {
          }, "clear")
        },
        styles: {},
        // should never be used
        renderer: {
          draw: /* @__PURE__ */ __name(() => {
          }, "draw")
        },
        parser: {
          parse: /* @__PURE__ */ __name(() => {
            throw new Error(
              "Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks"
            );
          }, "parse")
        },
        init: /* @__PURE__ */ __name(() => null, "init")
        // no op
      },
      (text4) => {
        return text4.toLowerCase().trimStart().startsWith("---");
      }
    );
    if (true) {
      registerLazyLoadedDiagrams(detector_default2, detector_default4, architectureDetector_default);
    }
    registerLazyLoadedDiagrams(
      c4Detector_default,
      detector_default5,
      classDetector_V2_default,
      classDetector_default,
      erDetector_default,
      ganttDetector_default,
      info,
      pie,
      requirementDetector_default,
      sequenceDetector_default,
      detector_default,
      flowDetector_v2_default,
      flowDetector_default,
      detector_default3,
      gitGraphDetector_default,
      stateDetector_V2_default,
      stateDetector_default,
      journeyDetector_default,
      quadrantDetector_default,
      sankeyDetector_default,
      packet,
      xychartDetector_default,
      blockDetector_default,
      detector_default7,
      detector_default6,
      radar,
      ishikawa,
      treemap,
      railroad,
      railroadEbnf,
      railroadAbnf,
      railroadPeg,
      vennDetector_default,
      wardleyDetector_default,
      cynefin
    );
  }, "addDiagrams");

  // src/diagram-api/loadDiagram.ts
  init_logger();
  init_detectType();
  init_diagramAPI();
  var loadRegisteredDiagrams = /* @__PURE__ */ __name(async () => {
    log.debug(`Loading registered diagrams`);
    const results = await Promise.allSettled(
      Object.entries(detectors).map(async ([key, { detector: detector39, loader: loader40 }]) => {
        if (!loader40) {
          return;
        }
        try {
          getDiagram(key);
        } catch {
          try {
            const { diagram: diagram38, id: id41 } = await loader40();
            registerDiagram(id41, diagram38, detector39);
          } catch (err) {
            log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);
            delete detectors[key];
            throw err;
          }
        }
      })
    );
    const failed = results.filter((result) => result.status === "rejected");
    if (failed.length > 0) {
      log.error(`Failed to load ${failed.length} external diagrams`);
      for (const res of failed) {
        log.error(res);
      }
      throw new Error(`Failed to load ${failed.length} external diagrams`);
    }
  }, "loadRegisteredDiagrams");

  // src/mermaid.ts
  init_logger();

  // src/mermaidAPI.ts
  init_src32();

  // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Enum.js
  var COMMENT = "comm";
  var RULESET = "rule";
  var DECLARATION = "decl";
  var MEDIA = "@media";
  var IMPORT = "@import";
  var SUPPORTS = "@supports";
  var NAMESPACE = "@namespace";
  var KEYFRAMES = "@keyframes";
  var LAYER = "@layer";
  var SCOPE = "@scope";

  // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Utility.js
  var abs3 = Math.abs;
  var from = String.fromCharCode;
  function trim(value2) {
    return value2.trim();
  }
  __name(trim, "trim");
  function replace(value2, pattern, replacement) {
    return value2.replace(pattern, replacement);
  }
  __name(replace, "replace");
  function indexof(value2, search, position5) {
    return value2.indexOf(search, position5);
  }
  __name(indexof, "indexof");
  function charat(value2, index) {
    return value2.charCodeAt(index) | 0;
  }
  __name(charat, "charat");
  function substr(value2, begin, end2) {
    return value2.slice(begin, end2);
  }
  __name(substr, "substr");
  function strlen(value2) {
    return value2.length;
  }
  __name(strlen, "strlen");
  function sizeof(value2) {
    return value2.length;
  }
  __name(sizeof, "sizeof");
  function append2(value2, array4) {
    return array4.push(value2), value2;
  }
  __name(append2, "append");

  // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Tokenizer.js
  var line = 1;
  var column = 1;
  var length = 0;
  var position4 = 0;
  var character = 0;
  var characters = "";
  function node(value2, root4, parent4, type3, props, children2, length2, siblings2) {
    return { value: value2, root: root4, parent: parent4, type: type3, props, children: children2, line, column, length: length2, return: "", siblings: siblings2 };
  }
  __name(node, "node");
  function char() {
    return character;
  }
  __name(char, "char");
  function prev() {
    character = position4 > 0 ? charat(characters, --position4) : 0;
    if (column--, character === 10)
      column = 1, line--;
    return character;
  }
  __name(prev, "prev");
  function next2() {
    character = position4 < length ? charat(characters, position4++) : 0;
    if (column++, character === 10)
      column = 1, line++;
    return character;
  }
  __name(next2, "next");
  function peek() {
    return charat(characters, position4);
  }
  __name(peek, "peek");
  function caret() {
    return position4;
  }
  __name(caret, "caret");
  function slice4(begin, end2) {
    return substr(characters, begin, end2);
  }
  __name(slice4, "slice");
  function token(type3) {
    switch (type3) {
      // \0 \t \n \r \s whitespace token
      case 0:
      case 9:
      case 10:
      case 13:
      case 32:
        return 5;
      // ! + , / > @ ~ isolate token
      case 33:
      case 43:
      case 44:
      case 47:
      case 62:
      case 64:
      case 126:
      // ; { } breakpoint token
      case 59:
      case 123:
      case 125:
        return 4;
      // : accompanied token
      case 58:
        return 3;
      // " ' ( [ opening delimit token
      case 34:
      case 39:
      case 40:
      case 91:
        return 2;
      // ) ] closing delimit token
      case 41:
      case 93:
        return 1;
    }
    return 0;
  }
  __name(token, "token");
  function alloc(value2) {
    return line = column = 1, length = strlen(characters = value2), position4 = 0, [];
  }
  __name(alloc, "alloc");
  function dealloc(value2) {
    return characters = "", value2;
  }
  __name(dealloc, "dealloc");
  function delimit(type3) {
    return trim(slice4(position4 - 1, delimiter(type3 === 91 ? type3 + 2 : type3 === 40 ? type3 + 1 : type3)));
  }
  __name(delimit, "delimit");
  function whitespace(type3) {
    while (character = peek())
      if (character < 33)
        next2();
      else
        break;
    return token(type3) > 2 || token(character) > 3 ? "" : " ";
  }
  __name(whitespace, "whitespace");
  function escaping(index, count2) {
    while (--count2 && next2())
      if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97)
        break;
    return slice4(index, caret() + (count2 < 6 && peek() == 32 && next2() == 32));
  }
  __name(escaping, "escaping");
  function delimiter(type3) {
    while (next2())
      switch (character) {
        // ] ) " '
        case type3:
          return position4;
        // " '
        case 34:
        case 39:
          if (type3 !== 34 && type3 !== 39)
            delimiter(character);
          break;
        // (
        case 40:
          if (type3 === 41)
            delimiter(type3);
          break;
        // \
        case 92:
          next2();
          break;
      }
    return position4;
  }
  __name(delimiter, "delimiter");
  function commenter(type3, index) {
    while (next2())
      if (type3 + character === 47 + 10)
        break;
      else if (type3 + character === 42 + 42 && peek() === 47)
        break;
    return "/*" + slice4(index, position4 - 1) + "*" + from(type3 === 47 ? type3 : next2());
  }
  __name(commenter, "commenter");
  function identifier(index) {
    while (!token(peek()))
      next2();
    return slice4(index, position4);
  }
  __name(identifier, "identifier");

  // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Parser.js
  function compile(value2) {
    return dealloc(parse4("", null, null, null, [""], value2 = alloc(value2), 0, [0], value2));
  }
  __name(compile, "compile");
  function parse4(value2, root4, parent4, rule, rules2, rulesets, pseudo, points, declarations) {
    var index = 0;
    var offset = 0;
    var length2 = pseudo;
    var atrule = 0;
    var property3 = 0;
    var previous = 0;
    var variable = 1;
    var scanning = 1;
    var ampersand = 1;
    var character2 = 0;
    var type3 = "";
    var props = rules2;
    var children2 = rulesets;
    var reference = rule;
    var characters2 = type3;
    while (scanning)
      switch (previous = character2, character2 = next2()) {
        // (
        case 40:
          if (previous != 108 && charat(characters2, length2 - 1) == 58) {
            if (indexof(characters2 += replace(delimit(character2), "&", "&\f"), "&\f", abs3(index ? points[index - 1] : 0)) != -1)
              ampersand = -1;
            break;
          }
        // " ' [
        case 34:
        case 39:
        case 91:
          characters2 += delimit(character2);
          break;
        // \t \n \r \s
        case 9:
        case 10:
        case 13:
        case 32:
          characters2 += whitespace(previous);
          break;
        // \
        case 92:
          characters2 += escaping(caret() - 1, 7);
          continue;
        // /
        case 47:
          switch (peek()) {
            case 42:
            case 47:
              append2(comment(commenter(next2(), caret()), root4, parent4, declarations), declarations);
              if ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters2) && substr(characters2, -1, void 0) !== " ") characters2 += " ";
              break;
            default:
              characters2 += "/";
          }
          break;
        // {
        case 123 * variable:
          points[index++] = strlen(characters2) * ampersand;
        // } ; \0
        case 125 * variable:
        case 59:
        case 0:
          switch (character2) {
            // \0 }
            case 0:
            case 125:
              scanning = 0;
            // ;
            case 59 + offset:
              if (ampersand == -1) characters2 = replace(characters2, /\f/g, "");
              if (property3 > 0 && (strlen(characters2) - length2 || variable === 0 && previous === 47))
                append2(property3 > 32 ? declaration(characters2 + ";", rule, parent4, length2 - 1, declarations) : declaration(replace(characters2, " ", "") + ";", rule, parent4, length2 - 2, declarations), declarations);
              break;
            // @ ;
            case 59:
              characters2 += ";";
            // { rule/at-rule
            default:
              append2(reference = ruleset(characters2, root4, parent4, index, offset, rules2, points, type3, props = [], children2 = [], length2, rulesets), rulesets);
              if (character2 === 123)
                if (offset === 0)
                  parse4(characters2, root4, reference, reference, props, rulesets, length2, points, children2);
                else {
                  switch (atrule) {
                    // c(ontainer)
                    case 99:
                      if (charat(characters2, 3) === 110) break;
                    // l(ayer)
                    case 108:
                      if (charat(characters2, 2) === 97) break;
                    default:
                      offset = 0;
                    // d(ocument) m(edia) s(upports)
                    case 100:
                    case 109:
                    case 115:
                  }
                  if (offset) parse4(value2, reference, reference, rule && append2(ruleset(value2, reference, reference, 0, 0, rules2, points, type3, rules2, props = [], length2, children2), children2), rules2, children2, length2, points, rule ? props : children2);
                  else parse4(characters2, reference, reference, reference, [""], children2, 0, points, children2);
                }
          }
          index = offset = property3 = 0, variable = ampersand = 1, type3 = characters2 = "", length2 = pseudo;
          break;
        // :
        case 58:
          length2 = 1 + strlen(characters2), property3 = previous;
        default:
          if (variable < 1) {
            if (character2 == 123)
              --variable;
            else if (character2 == 125 && variable++ == 0 && prev() == 125)
              continue;
          }
          switch (characters2 += from(character2), character2 * variable) {
            // &
            case 38:
              ampersand = offset > 0 ? 1 : (characters2 += "\f", -1);
              break;
            // ,
            case 44:
              points[index++] = (strlen(characters2) - 1) * ampersand, ampersand = 1;
              break;
            // @
            case 64:
              if (peek() === 45)
                characters2 += delimit(next2());
              atrule = peek(), offset = length2 = strlen(type3 = characters2 += identifier(caret())), character2++;
              break;
            // -
            case 45:
              if (previous === 45 && strlen(characters2) == 2)
                variable = 0;
          }
      }
    return rulesets;
  }
  __name(parse4, "parse");
  function ruleset(value2, root4, parent4, index, offset, rules2, points, type3, props, children2, length2, siblings2) {
    var post = offset - 1;
    var rule = offset === 0 ? rules2 : [""];
    var size4 = sizeof(rule);
    for (var i2 = 0, j3 = 0, k2 = 0; i2 < index; ++i2)
      for (var x5 = 0, y6 = substr(value2, post + 1, post = abs3(j3 = points[i2])), z3 = value2; x5 < size4; ++x5)
        if (z3 = trim(j3 > 0 ? rule[x5] + " " + y6 : replace(y6, /&\f/g, rule[x5])))
          props[k2++] = z3;
    return node(value2, root4, parent4, offset === 0 ? RULESET : type3, props, children2, length2, siblings2);
  }
  __name(ruleset, "ruleset");
  function comment(value2, root4, parent4, siblings2) {
    return node(value2, root4, parent4, COMMENT, from(char()), substr(value2, 2, -2), 0, siblings2);
  }
  __name(comment, "comment");
  function declaration(value2, root4, parent4, length2, siblings2) {
    return node(value2, root4, parent4, DECLARATION, substr(value2, 0, length2), substr(value2, length2 + 1, -1), length2, siblings2);
  }
  __name(declaration, "declaration");

  // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Serializer.js
  function serialize(children2, callback) {
    var output2 = "";
    for (var i2 = 0; i2 < children2.length; i2++)
      output2 += callback(children2[i2], i2, children2, callback) || "";
    return output2;
  }
  __name(serialize, "serialize");
  function stringify(element3, index, children2, callback) {
    switch (element3.type) {
      case LAYER:
        if (element3.children.length) break;
      case IMPORT:
      case NAMESPACE:
      case DECLARATION:
        return element3.return = element3.return || element3.value;
      case COMMENT:
        return "";
      case KEYFRAMES:
        return element3.return = element3.value + "{" + serialize(element3.children, callback) + "}";
      case RULESET:
        if (!strlen(element3.value = element3.props.join(","))) return "";
    }
    return strlen(children2 = serialize(element3.children, callback)) ? element3.return = element3.value + "{" + children2 + "}" : "";
  }
  __name(stringify, "stringify");

  // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Middleware.js
  function middleware(collection4) {
    var length2 = sizeof(collection4);
    return function(element3, index, children2, callback) {
      var output2 = "";
      for (var i2 = 0; i2 < length2; i2++)
        output2 += collection4[i2](element3, index, children2, callback) || "";
      return output2;
    };
  }
  __name(middleware, "middleware");

  // src/mermaidAPI.ts
  init_purify_es();
  init_compat();

  // src/accessibility.ts
  var SVG_ROLE = "graphics-document document";
  function setA11yDiagramInfo(svg2, diagramType) {
    svg2.attr("role", SVG_ROLE);
    if (diagramType !== "") {
      svg2.attr("aria-roledescription", diagramType);
    }
  }
  __name(setA11yDiagramInfo, "setA11yDiagramInfo");
  function addSVGa11yTitleDescription(svg2, a11yTitle, a11yDesc, baseId) {
    if (svg2.insert === void 0) {
      return;
    }
    if (a11yDesc) {
      const descId = `chart-desc-${baseId}`;
      svg2.attr("aria-describedby", descId);
      svg2.insert("desc", ":first-child").attr("id", descId).text(a11yDesc);
    }
    if (a11yTitle) {
      const titleId = `chart-title-${baseId}`;
      svg2.attr("aria-labelledby", titleId);
      svg2.insert("title", ":first-child").attr("id", titleId).text(a11yTitle);
    }
  }
  __name(addSVGa11yTitleDescription, "addSVGa11yTitleDescription");

  // src/mermaidAPI.ts
  init_assignWithDepth();
  init_config();
  init_config();

  // src/Diagram.ts
  init_config();
  init_diagramAPI();
  init_detectType();
  init_errors();
  init_utils2();
  var Diagram = class _Diagram {
    constructor(type3, text4, db12, parser34, renderer15) {
      this.type = type3;
      this.text = text4;
      this.db = db12;
      this.parser = parser34;
      this.renderer = renderer15;
    }
    static {
      __name(this, "Diagram");
    }
    static async fromText(text4, metadata = {}) {
      const config3 = getConfig();
      const type3 = detectType(text4, config3);
      text4 = encodeEntities(text4) + "\n";
      try {
        getDiagram(type3);
      } catch {
        const loader40 = getDiagramLoader(type3);
        if (!loader40) {
          throw new UnknownDiagramError(`Diagram ${type3} not found.`);
        }
        const { id: id41, diagram: diagram38 } = await loader40();
        registerDiagram(id41, diagram38);
      }
      const { db: db12, parser: parser34, renderer: renderer15, init: init3 } = getDiagram(type3);
      if (parser34.parser) {
        parser34.parser.yy = db12;
      }
      db12.clear?.();
      init3?.(config3);
      if (metadata.title) {
        db12.setDiagramTitle?.(metadata.title);
      }
      await parser34.parse(text4);
      return new _Diagram(type3, text4, db12, parser34, renderer15);
    }
    async render(id41, version3) {
      await this.renderer.draw(this.text, id41, version3, this);
    }
    getParser() {
      return this.parser;
    }
    getType() {
      return this.type;
    }
  };

  // src/mermaidAPI.ts
  init_common();

  // src/interactionDb.ts
  var interactionFunctions = [];
  var attachFunctions = /* @__PURE__ */ __name(() => {
    interactionFunctions.forEach((f2) => {
      f2();
    });
    interactionFunctions = [];
  }, "attachFunctions");

  // src/mermaidAPI.ts
  init_logger();

  // src/diagram-api/comments.ts
  var cleanupComments = /* @__PURE__ */ __name((text4) => {
    return text4.replace(/^\s*%%(?!{)[^\n]+\n?/gm, "").trimStart();
  }, "cleanupComments");

  // src/diagram-api/frontmatter.ts
  init_regexes();
  init_js_yaml();
  function extractFrontMatter(text4) {
    const matches33 = text4.match(frontMatterRegex);
    if (!matches33) {
      return {
        text: text4,
        metadata: {}
      };
    }
    const indent = matches33[1];
    const yamlBody = indent ? matches33[2].split("\n").map((line2) => line2.startsWith(indent) ? line2.slice(indent.length) : line2).join("\n") : matches33[2];
    let parsed = load(yamlBody, {
      // To support config, we need JSON schema.
      // https://www.yaml.org/spec/1.2/spec.html#id2803231
      schema: JSON_SCHEMA
    }) ?? {};
    parsed = typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
    const metadata = {};
    if (parsed.displayMode) {
      metadata.displayMode = parsed.displayMode.toString();
    }
    if (parsed.title) {
      metadata.title = parsed.title.toString();
    }
    if (parsed.config) {
      metadata.config = parsed.config;
    }
    return {
      text: text4.slice(matches33[0].length),
      metadata
    };
  }
  __name(extractFrontMatter, "extractFrontMatter");

  // src/preprocess.ts
  init_utils2();
  var cleanupText = /* @__PURE__ */ __name((code) => {
    return code.replace(/\r\n?/g, "\n").replace(
      /<(\w+)([^>]*)>/g,
      (match3, tag, attributes) => "<" + tag + attributes.replace(/="([^"]*)"/g, "='$1'") + ">"
    );
  }, "cleanupText");
  var processFrontmatter = /* @__PURE__ */ __name((code) => {
    const { text: text4, metadata } = extractFrontMatter(code);
    const { displayMode: displayMode2, title: title2, config: config3 = {} } = metadata;
    if (displayMode2) {
      if (!config3.gantt) {
        config3.gantt = {};
      }
      config3.gantt.displayMode = displayMode2;
    }
    return { title: title2, config: config3, text: text4 };
  }, "processFrontmatter");
  var processDirectives = /* @__PURE__ */ __name((code) => {
    const initDirective = utils_default2.detectInit(code) ?? {};
    const wrapDirectives = utils_default2.detectDirective(code, "wrap");
    if (Array.isArray(wrapDirectives)) {
      initDirective.wrap = wrapDirectives.some(({ type: type3 }) => type3 === "wrap");
    } else if (wrapDirectives?.type === "wrap") {
      initDirective.wrap = true;
    }
    return {
      text: removeDirectives(code),
      directive: initDirective
    };
  }, "processDirectives");
  function preprocessDiagram(code) {
    const cleanedCode = cleanupText(code);
    const frontMatterResult = processFrontmatter(cleanedCode);
    const directiveResult = processDirectives(frontMatterResult.text);
    const config3 = cleanAndMerge(frontMatterResult.config, directiveResult.directive);
    code = cleanupComments(directiveResult.text);
    return {
      code,
      title: frontMatterResult.title,
      config: config3
    };
  }
  __name(preprocessDiagram, "preprocessDiagram");

  // src/mermaidAPI.ts
  init_styles();
  init_themes();
  init_utils2();

  // src/utils/base64.ts
  function toBase64(str2) {
    const utf8Bytes = new TextEncoder().encode(str2);
    const utf8Str = Array.from(utf8Bytes, (byte) => String.fromCodePoint(byte)).join("");
    return btoa(utf8Str);
  }
  __name(toBase64, "toBase64");

  // src/mermaidAPI.ts
  init_sanitizeDirective();
  var MAX_TEXTLENGTH = 5e4;
  var MAX_TEXTLENGTH_EXCEEDED_MSG = "graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa";
  var SECURITY_LVL_SANDBOX = "sandbox";
  var SECURITY_LVL_LOOSE = "loose";
  var XMLNS_SVG_STD = "http://www.w3.org/2000/svg";
  var XMLNS_XLINK_STD = "http://www.w3.org/1999/xlink";
  var XMLNS_XHTML_STD = "http://www.w3.org/1999/xhtml";
  var IFRAME_WIDTH = "100%";
  var IFRAME_HEIGHT = "100%";
  var IFRAME_STYLES = "border:0;margin:0;";
  var IFRAME_BODY_STYLE = "margin:0";
  var IFRAME_SANDBOX_OPTS = "allow-top-navigation-by-user-activation allow-popups";
  var IFRAME_NOT_SUPPORTED_MSG = 'The "iframe" tag is not supported by your browser.';
  var DOMPURIFY_TAGS = ["foreignobject"];
  var DOMPURIFY_ATTR = ["dominant-baseline"];
  function processAndSetConfigs(text4) {
    const processed2 = preprocessDiagram(text4);
    reset();
    addDirective(processed2.config ?? {});
    return processed2;
  }
  __name(processAndSetConfigs, "processAndSetConfigs");
  async function parse5(text4, parseOptions) {
    addDiagrams();
    try {
      const { code, config: config3 } = processAndSetConfigs(text4);
      const diagram38 = await getDiagramFromText(code);
      return { diagramType: diagram38.type, config: config3 };
    } catch (error3) {
      if (parseOptions?.suppressErrors) {
        return false;
      }
      throw error3;
    }
  }
  __name(parse5, "parse");
  var cssImportantStyles = /* @__PURE__ */ __name((cssClass, element3, cssClasses = []) => {
    const declarationBlock = sanitizeCss(`{ ${cssClasses.join(" !important; ")} !important; }`);
    return `.${cssClass} ${element3} ${declarationBlock}`;
  }, "cssImportantStyles");
  var createCssStyles = /* @__PURE__ */ __name((config3, classDefs = /* @__PURE__ */ new Map()) => {
    const cssStyles = new CSSStyleSheet();
    if (config3.fontFamily !== void 0) {
      cssStyles.insertRule(
        `:root { --mermaid-font-family: ${config3.fontFamily}}`,
        cssStyles.cssRules.length
      );
    }
    if (config3.altFontFamily !== void 0) {
      cssStyles.insertRule(
        `:root { --mermaid-alt-font-family: ${config3.altFontFamily}}`,
        cssStyles.cssRules.length
      );
    }
    if (classDefs instanceof Map) {
      const htmlLabels = getEffectiveHtmlLabels(config3);
      const cssHtmlElements = ["> *", "span"];
      const cssShapeElements = ["rect", "polygon", "ellipse", "circle", "path"];
      const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;
      classDefs.forEach((styleClassDef) => {
        if (!isEmpty(styleClassDef.styles)) {
          cssElements.forEach((cssElement) => {
            cssStyles.insertRule(
              cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles),
              cssStyles.cssRules.length
            );
          });
        }
        if (!isEmpty(styleClassDef.textStyles)) {
          cssStyles.insertRule(
            cssImportantStyles(
              styleClassDef.id,
              "tspan",
              (styleClassDef?.textStyles || []).map((s2) => s2.replace("color", "fill"))
            ),
            cssStyles.cssRules.length
          );
        }
      });
    }
    let cssString = "";
    if (config3.themeCSS !== void 0) {
      if (typeof cssStyles.replaceSync === "function") {
        const themeCssStyleSheet = new CSSStyleSheet();
        themeCssStyleSheet.replaceSync(config3.themeCSS);
        cssString = cssStyleSheetToString(themeCssStyleSheet) + "\n";
      } else {
        cssString += `${config3.themeCSS}
`;
      }
    }
    return cssString + cssStyleSheetToString(cssStyles);
  }, "createCssStyles");
  var compileCSS = /* @__PURE__ */ __name((namespace, css) => {
    return serialize(
      compile(`${namespace}{${css}}`),
      middleware([
        /* @__PURE__ */ __name(function addNamespace(element3, _index, _children, _callback) {
          if (element3.type === "rule" && Array.isArray(element3.props)) {
            if (element3.parent && element3.parent.type === KEYFRAMES) {
              return;
            }
            element3.props = element3.props.map((prop) => {
              if (prop === namespace && Array.isArray(element3.children) && element3.children.every((child) => {
                if (child.type !== "decl") {
                  return false;
                }
                const allowedProps = /* @__PURE__ */ new Set([
                  "font-family",
                  "font-size",
                  "fill"
                ]);
                return allowedProps.has(child.props);
              })) {
                return prop;
              }
              const alreadyNamespaced = (
                // If the prop already starts with the namespace followed by a space or >, then it's already namespaced.
                (prop.startsWith(`${namespace} `) || prop.startsWith(`${namespace}>`)) && // Column combinators are not yet widely supported, it's not yet compressed to `${namespace}||`,
                // so we need to add an extra check for that
                !prop.startsWith(`${namespace} ||`)
              );
              if (!alreadyNamespaced) {
                return `${namespace} ${prop}`;
              }
              return prop;
            });
          } else if (element3.type.startsWith("@")) {
            const nestedAtRules = [
              MEDIA,
              SUPPORTS,
              LAYER,
              SCOPE,
              "@container",
              "@starting-style"
            ];
            const allowedAtRules = [
              ...nestedAtRules,
              KEYFRAMES
              // needed for Mermaid's animation feature
            ];
            if (!allowedAtRules.includes(element3.type)) {
              log.warn(`Removing unsupported at-rule ${element3.type} from CSS`);
              element3.type = COMMENT;
            }
          }
        }, "addNamespace"),
        stringify
      ])
    );
  }, "compileCSS");
  var createUserStyles = /* @__PURE__ */ __name((config3, graphType, classDefs, svgId) => {
    const userCSSstyles = createCssStyles(config3, classDefs);
    const allStyles = styles_default(
      graphType,
      userCSSstyles,
      { ...config3.themeVariables, theme: config3.theme, look: config3.look },
      svgId
    );
    return compileCSS(svgId, allStyles);
  }, "createUserStyles");
  var cleanUpSvgCode = /* @__PURE__ */ __name((svgCode = "", inSandboxMode, useArrowMarkerUrls) => {
    let cleanedUpSvg = svgCode;
    if (!useArrowMarkerUrls && !inSandboxMode) {
      cleanedUpSvg = cleanedUpSvg.replace(
        /marker-end="url\([\d+./:=?A-Za-z-]*?#/g,
        'marker-end="url(#'
      );
    }
    cleanedUpSvg = decodeEntities(cleanedUpSvg);
    cleanedUpSvg = cleanedUpSvg.replace(/<br>/g, "<br/>");
    return cleanedUpSvg;
  }, "cleanUpSvgCode");
  var putIntoIFrame = /* @__PURE__ */ __name((svgCode = "", svgElement) => {
    const height2 = svgElement?.viewBox?.baseVal?.height ? svgElement.viewBox.baseVal.height + "px" : IFRAME_HEIGHT;
    const base64encodedSrc = toBase64(`<body style="${IFRAME_BODY_STYLE}">${svgCode}</body>`);
    return `<iframe style="width:${IFRAME_WIDTH};height:${height2};${IFRAME_STYLES}" src="data:text/html;charset=UTF-8;base64,${base64encodedSrc}" sandbox="${IFRAME_SANDBOX_OPTS}">
  ${IFRAME_NOT_SUPPORTED_MSG}
</iframe>`;
  }, "putIntoIFrame");
  var appendDivSvgG = /* @__PURE__ */ __name((parentRoot, id41, enclosingDivId, divStyle, svgXlink) => {
    const enclosingDiv = parentRoot.append("div");
    enclosingDiv.attr("id", enclosingDivId);
    if (divStyle) {
      enclosingDiv.attr("style", divStyle);
    }
    const svgNode2 = enclosingDiv.append("svg").attr("id", id41).attr("width", "100%").attr("xmlns", XMLNS_SVG_STD);
    if (svgXlink) {
      svgNode2.attr("xmlns:xlink", svgXlink);
    }
    svgNode2.append("g");
    return parentRoot;
  }, "appendDivSvgG");
  function sandboxedIframe(parentNode, iFrameId) {
    return parentNode.append("iframe").attr("id", iFrameId).attr("style", "width: 100%; height: 100%;").attr("sandbox", "");
  }
  __name(sandboxedIframe, "sandboxedIframe");
  var removeExistingElements = /* @__PURE__ */ __name((doc, id41, divId, iFrameId) => {
    doc.getElementById(id41)?.remove();
    doc.getElementById(divId)?.remove();
    doc.getElementById(iFrameId)?.remove();
  }, "removeExistingElements");
  var render8 = /* @__PURE__ */ __name(async function(id41, text4, svgContainingElement) {
    addDiagrams();
    const processed2 = processAndSetConfigs(text4);
    text4 = processed2.code;
    const config3 = getConfig();
    log.debug(config3);
    if (text4.length > (config3?.maxTextSize ?? MAX_TEXTLENGTH)) {
      text4 = MAX_TEXTLENGTH_EXCEEDED_MSG;
    }
    const idSelector = `#${id41}`;
    const iFrameID = "i" + id41;
    const iFrameID_selector = "#" + iFrameID;
    const enclosingDivID = "d" + id41;
    const enclosingDivID_selector = "#" + enclosingDivID;
    const removeTempElements = /* @__PURE__ */ __name(() => {
      const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;
      const node2 = select_default2(tmpElementSelector).node();
      if (node2 && "remove" in node2) {
        node2.remove();
      }
    }, "removeTempElements");
    let root4 = select_default2(document.body);
    const isSandboxed = config3.securityLevel === SECURITY_LVL_SANDBOX;
    const isLooseSecurityLevel = config3.securityLevel === SECURITY_LVL_LOOSE;
    const fontFamily = config3.fontFamily;
    if (svgContainingElement !== void 0) {
      if (svgContainingElement) {
        svgContainingElement.innerHTML = "";
      }
      if (isSandboxed) {
        const iframe = sandboxedIframe(select_default2(svgContainingElement), iFrameID);
        root4 = select_default2(iframe.nodes()[0].contentDocument.body);
        root4.node().style.margin = "0";
      } else {
        root4 = select_default2(svgContainingElement);
      }
      appendDivSvgG(root4, id41, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);
    } else {
      removeExistingElements(document, id41, enclosingDivID, iFrameID);
      if (isSandboxed) {
        const iframe = sandboxedIframe(select_default2(document.body), iFrameID);
        root4 = select_default2(iframe.nodes()[0].contentDocument.body);
        root4.node().style.margin = "0";
      } else {
        root4 = select_default2("body");
      }
      appendDivSvgG(root4, id41, enclosingDivID);
    }
    let diag;
    let parseEncounteredException;
    try {
      diag = await Diagram.fromText(text4, { title: processed2.title });
    } catch (error3) {
      if (config3.suppressErrorRendering) {
        removeTempElements();
        throw error3;
      }
      diag = await Diagram.fromText("error");
      parseEncounteredException = error3;
    }
    const element3 = root4.select(enclosingDivID_selector).node();
    const diagramType = diag.type;
    const svg2 = element3.firstChild;
    const firstChild = svg2.firstChild;
    const diagramClassDefs = diag.renderer.getClasses?.(text4, diag);
    const rules2 = createUserStyles(config3, diagramType, diagramClassDefs, idSelector);
    const style1 = document.createElement("style");
    style1.innerHTML = rules2;
    svg2.insertBefore(style1, firstChild);
    try {
      await diag.renderer.draw(text4, id41, "11.16.1", diag);
    } catch (e3) {
      if (config3.suppressErrorRendering) {
        removeTempElements();
      } else {
        errorRenderer_default.draw(text4, id41, "11.16.1");
      }
      throw e3;
    }
    const svgNode2 = root4.select(`${enclosingDivID_selector} svg`);
    const a11yTitle = diag.db.getAccTitle?.();
    const a11yDescr = diag.db.getAccDescription?.();
    addA11yInfo(diagramType, svgNode2, a11yTitle, a11yDescr);
    root4.select(`[id="${id41}"]`).selectAll("foreignobject > *").attr("xmlns", XMLNS_XHTML_STD);
    let svgCode = root4.select(enclosingDivID_selector).node().innerHTML;
    log.debug("config.arrowMarkerAbsolute", config3.arrowMarkerAbsolute);
    svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config3.arrowMarkerAbsolute));
    if (isSandboxed) {
      const svgEl = root4.select(enclosingDivID_selector + " svg").node();
      svgCode = putIntoIFrame(svgCode, svgEl);
    } else if (!isLooseSecurityLevel) {
      svgCode = purify.sanitize(svgCode, {
        ADD_TAGS: DOMPURIFY_TAGS,
        ADD_ATTR: DOMPURIFY_ATTR,
        HTML_INTEGRATION_POINTS: { foreignobject: true }
      });
    }
    attachFunctions();
    if (parseEncounteredException) {
      throw parseEncounteredException;
    }
    removeTempElements();
    return {
      diagramType,
      svg: svgCode,
      bindFunctions: diag.db.bindFunctions
    };
  }, "render");
  function initialize(userOptions = {}) {
    const options2 = assignWithDepth_default({}, userOptions);
    if (options2?.fontFamily && !options2.themeVariables?.fontFamily) {
      if (!options2.themeVariables) {
        options2.themeVariables = {};
      }
      options2.themeVariables.fontFamily = options2.fontFamily;
    }
    saveConfigFromInitialize(options2);
    if (options2?.theme && options2.theme in themes_default) {
      options2.themeVariables = themes_default[options2.theme].getThemeVariables(
        options2.themeVariables
      );
    } else if (options2) {
      options2.themeVariables = themes_default.default.getThemeVariables(options2.themeVariables);
    }
    const config3 = typeof options2 === "object" ? setSiteConfig(options2) : getSiteConfig();
    setLogLevel(config3.logLevel);
    addDiagrams();
  }
  __name(initialize, "initialize");
  var getDiagramFromText = /* @__PURE__ */ __name((text4, metadata = {}) => {
    const { code } = preprocessDiagram(text4);
    return Diagram.fromText(code, metadata);
  }, "getDiagramFromText");
  function addA11yInfo(diagramType, svgNode2, a11yTitle, a11yDescr) {
    setA11yDiagramInfo(svgNode2, diagramType);
    addSVGa11yTitleDescription(svgNode2, a11yTitle, a11yDescr, svgNode2.attr("id"));
  }
  __name(addA11yInfo, "addA11yInfo");
  var mermaidAPI = Object.freeze({
    render: render8,
    parse: parse5,
    getDiagramFromText,
    initialize,
    getConfig,
    /**
     * @deprecated This function does nothing. It will be overwritten by the next
     *             call to {@link render} or {@link parse}.
     */
    setConfig,
    getSiteConfig,
    updateSiteConfig,
    reset: /* @__PURE__ */ __name(() => {
      reset();
    }, "reset"),
    globalReset: /* @__PURE__ */ __name(() => {
      reset(defaultConfig);
    }, "globalReset"),
    defaultConfig
  });
  setLogLevel(getConfig().logLevel);
  reset(getConfig());

  // src/mermaid.ts
  init_render2();
  init_utils2();
  var handleError = /* @__PURE__ */ __name((error3, errors, parseError) => {
    log.warn(error3);
    if (isDetailedError(error3)) {
      if (parseError) {
        parseError(error3.str, error3.hash);
      }
      errors.push({ ...error3, message: error3.str, error: error3 });
    } else {
      if (parseError) {
        parseError(error3);
      }
      if (error3 instanceof Error) {
        errors.push({
          str: error3.message,
          message: error3.message,
          hash: error3.name,
          error: error3
        });
      }
    }
  }, "handleError");
  var run4 = /* @__PURE__ */ __name(async function(options2 = {
    querySelector: ".mermaid"
  }) {
    try {
      await runThrowsErrors(options2);
    } catch (e3) {
      if (isDetailedError(e3)) {
        log.error(e3.str);
      }
      if (mermaid.parseError) {
        mermaid.parseError(e3);
      }
      if (!options2.suppressErrors) {
        log.error("Use the suppressErrors option to suppress these errors");
        throw e3;
      }
    }
  }, "run");
  var runThrowsErrors = /* @__PURE__ */ __name(async function({ postRenderCallback, querySelector, nodes: nodes5 } = {
    querySelector: ".mermaid"
  }) {
    const conf5 = mermaidAPI.getConfig();
    log.debug(`${!postRenderCallback ? "No " : ""}Callback function found`);
    let nodesToProcess;
    if (nodes5) {
      nodesToProcess = nodes5;
    } else if (querySelector) {
      nodesToProcess = document.querySelectorAll(querySelector);
    } else {
      throw new Error("Nodes and querySelector are both undefined");
    }
    log.debug(`Found ${nodesToProcess.length} diagrams`);
    if (conf5?.startOnLoad !== void 0) {
      log.debug("Start On Load: " + conf5?.startOnLoad);
      mermaidAPI.updateSiteConfig({ startOnLoad: conf5?.startOnLoad });
    }
    const idGenerator = new utils_default2.InitIDGenerator(conf5.deterministicIds, conf5.deterministicIDSeed);
    let txt;
    const errors = [];
    for (const element3 of Array.from(nodesToProcess)) {
      log.info("Rendering diagram: " + element3.id);
      if (element3.getAttribute("data-processed")) {
        continue;
      }
      element3.setAttribute("data-processed", "true");
      const id41 = `mermaid-${idGenerator.next()}`;
      txt = element3.innerHTML;
      txt = dedent(utils_default2.entityDecode(txt)).trim().replace(/<br\s*\/?>/gi, "<br/>");
      const init3 = utils_default2.detectInit(txt);
      if (init3) {
        log.debug("Detected early reinit: ", init3);
      }
      try {
        const { svg: svg2, bindFunctions: bindFunctions2 } = await render9(id41, txt, element3);
        element3.innerHTML = svg2;
        if (postRenderCallback) {
          await postRenderCallback(id41);
        }
        if (bindFunctions2) {
          bindFunctions2(element3);
        }
      } catch (error3) {
        handleError(error3, errors, mermaid.parseError);
      }
    }
    if (errors.length > 0) {
      throw errors[0];
    }
  }, "runThrowsErrors");
  var initialize2 = /* @__PURE__ */ __name(function(config3) {
    mermaidAPI.initialize(config3);
  }, "initialize");
  var init2 = /* @__PURE__ */ __name(async function(config3, nodes5, callback) {
    log.warn("mermaid.init is deprecated. Please use run instead.");
    if (config3) {
      initialize2(config3);
    }
    const runOptions = { postRenderCallback: callback, querySelector: ".mermaid" };
    if (typeof nodes5 === "string") {
      runOptions.querySelector = nodes5;
    } else if (nodes5) {
      if (nodes5 instanceof HTMLElement) {
        runOptions.nodes = [nodes5];
      } else {
        runOptions.nodes = nodes5;
      }
    }
    await run4(runOptions);
  }, "init");
  var registerExternalDiagrams = /* @__PURE__ */ __name(async (diagrams2, {
    lazyLoad = true
  } = {}) => {
    addDiagrams();
    registerLazyLoadedDiagrams(...diagrams2);
    if (lazyLoad === false) {
      await loadRegisteredDiagrams();
    }
  }, "registerExternalDiagrams");
  var contentLoaded = /* @__PURE__ */ __name(function() {
    if (mermaid.startOnLoad) {
      const { startOnLoad } = mermaidAPI.getConfig();
      if (startOnLoad) {
        mermaid.run().catch((err) => log.error("Mermaid failed to initialize", err));
      }
    }
  }, "contentLoaded");
  if (typeof document !== "undefined") {
    window.addEventListener("load", contentLoaded, false);
  }
  var setParseErrorHandler = /* @__PURE__ */ __name(function(parseErrorHandler) {
    mermaid.parseError = parseErrorHandler;
  }, "setParseErrorHandler");
  var executionQueue = [];
  var executionQueueRunning = false;
  var executeQueue = /* @__PURE__ */ __name(async () => {
    if (executionQueueRunning) {
      return;
    }
    executionQueueRunning = true;
    while (executionQueue.length > 0) {
      const f2 = executionQueue.shift();
      if (f2) {
        try {
          await f2();
        } catch (e3) {
          log.error("Error executing queue", e3);
        }
      }
    }
    executionQueueRunning = false;
  }, "executeQueue");
  var parse6 = /* @__PURE__ */ __name(async (text4, parseOptions) => {
    return new Promise((resolve2, reject3) => {
      const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {
        mermaidAPI.parse(text4, parseOptions).then(
          (r2) => {
            res(r2);
            resolve2(r2);
          },
          (e3) => {
            log.error("Error parsing", e3);
            mermaid.parseError?.(e3);
            rej(e3);
            reject3(e3);
          }
        );
      }), "performCall");
      executionQueue.push(performCall);
      executeQueue().catch(reject3);
    });
  }, "parse");
  var render9 = /* @__PURE__ */ __name((id41, text4, container2) => {
    return new Promise((resolve2, reject3) => {
      const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {
        mermaidAPI.render(id41, text4, container2).then(
          (r2) => {
            res(r2);
            resolve2(r2);
          },
          (e3) => {
            log.error("Error parsing", e3);
            mermaid.parseError?.(e3);
            rej(e3);
            reject3(e3);
          }
        );
      }), "performCall");
      executionQueue.push(performCall);
      executeQueue().catch(reject3);
    });
  }, "render");
  var getRegisteredDiagramsMetadata = /* @__PURE__ */ __name(() => {
    return Object.keys(detectors).map((id41) => ({
      id: id41
    }));
  }, "getRegisteredDiagramsMetadata");
  var mermaid = {
    startOnLoad: true,
    mermaidAPI,
    parse: parse6,
    render: render9,
    init: init2,
    run: run4,
    registerExternalDiagrams,
    registerLayoutLoaders,
    initialize: initialize2,
    parseError: void 0,
    contentLoaded,
    setParseErrorHandler,
    detectType,
    registerIconPacks,
    getRegisteredDiagramsMetadata
  };
  var mermaid_default = mermaid;
  return __toCommonJS(mermaid_exports);
})();
/*! Bundled license information:

lodash-es/lodash.js:
  (**
   * @license
   * Lodash (Custom Build) <https://lodash.com/>
   * Build: `lodash modularize exports="es" -o ./`
   * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
   * Released under MIT license <https://lodash.com/license>
   * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
   * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
   *)
*/
/*! Check if previously processed */
/*!
 * Wait for document loaded before starting the execution
 */
/*! Bundled license information:

dompurify/dist/purify.es.mjs:
  (*! @license DOMPurify 3.4.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.0/LICENSE *)

js-yaml/dist/js-yaml.mjs:
  (*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT *)

lodash-es/lodash.js:
  (**
   * @license
   * Lodash (Custom Build) <https://lodash.com/>
   * Build: `lodash modularize exports="es" --repo lodash/lodash#4.18.1 -o ./`
   * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
   * Released under MIT license <https://lodash.com/license>
   * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
   * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
   *)

cytoscape/dist/cytoscape.esm.mjs:
  (*!
  Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable
  Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
  Licensed under The MIT License (http://opensource.org/licenses/MIT)
  *)
  (*!
  Event object based on jQuery events, MIT license
  
  https://jquery.org/license/
  https://tldrlegal.com/license/mit-license
  https://github.com/jquery/jquery/blob/master/src/event.js
  *)
  (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *)
  (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *)
*/
globalThis["mermaid"] = globalThis.__esbuild_esm_mermaid_nm["mermaid"].default;
